Heim > Backend-Entwicklung > PHP-Tutorial > Summieren Sie bei einem gegebenen Array-Element seine Elemente und erhalten Sie den größten Wert in einem bestimmten Intervall.

Summieren Sie bei einem gegebenen Array-Element seine Elemente und erhalten Sie den größten Wert in einem bestimmten Intervall.

WBOY
Freigeben: 2016-09-30 09:37:33
Original
1216 Leute haben es durchsucht

Diese Frage wurde in Python implementiert. Ich möchte sie in PHP-Code umschreiben, aber ich stecke bei der nicht wiederholten Kombination von Elementen fest~

Mit anderen Worten, es gibt N Elemente, vielleicht ist A B gleich 100, und es wird nach der maximalen Kombination gesucht, die das Ergebnis erfüllt, das 120 nicht überschreitet, was zufällig A C ist gleich 191. D

<code class="python"># -*- coding=UTF-8 -*-

import itertools

loop = [509, 838, 924, 650, 604, 793, 564,
        651, 697, 649, 747, 787, 701, 605, 644]

m = 0
m_list = []
for i in range(0, len(loop)):
    # 目的是打乱其排序,找出任意种可能
    rets = list(itertools.combinations(loop, i))
    for ret in rets:
      # 将循环器中的元组求和
        s = sum(ret)
        if s <= 5000 and s > m:
            # 求和值
            m = s
            # 组合的列表
            m_list = ret

# 最大值
print(m)
# 求和的元素
print(m_list)
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Antwortinhalt:

Diese Frage wurde in Python implementiert. Ich möchte sie in PHP-Code umschreiben, aber ich stecke bei der nicht wiederholten Kombination von Elementen fest~

Mit anderen Worten, es gibt N Elemente, vielleicht ist

A gleich 100, und es wird nach der maximalen Kombination gesucht, die das Ergebnis erfüllt, das B nicht überschreitet, was zufällig 120 A ist gleich 191. C D

<code class="python"># -*- coding=UTF-8 -*-

import itertools

loop = [509, 838, 924, 650, 604, 793, 564,
        651, 697, 649, 747, 787, 701, 605, 644]

m = 0
m_list = []
for i in range(0, len(loop)):
    # 目的是打乱其排序,找出任意种可能
    rets = list(itertools.combinations(loop, i))
    for ret in rets:
      # 将循环器中的元组求和
        s = sum(ret)
        if s <= 5000 and s > m:
            # 求和值
            m = s
            # 组合的列表
            m_list = ret

# 最大值
print(m)
# 求和的元素
print(m_list)
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Deine Frage betrifft den Algorithmus, oder?

Es ist definitiv nicht geeignet, dies direkt zu tun, wenn die Datenmenge größer ist. Dies sollte zwangsläufig als Rucksackproblem angesehen werden
<code>rets = list(itertools.combinations(loop, i))</code>
Nach dem Login kopieren

Das Knapsack-Problem ist ein NP-vollständiges Problem der kombinatorischen Optimierung. Das Problem kann wie folgt beschrieben werden: Bei einer gegebenen Menge von Artikeln hat jeder Artikel sein eigenes Gewicht und seinen eigenen Preis. Wie wählen wir innerhalb des begrenzten Gesamtgewichts aus, damit der Gesamtpreis der Artikel am höchsten ist? Der Name des Problems ergibt sich daraus, wie man den am besten geeigneten Gegenstand für einen bestimmten Rucksack auswählt.

https://zh.wikipedia.org/wiki...

Wenn Sie die Funktion von itertools in PHP nutzen möchten, können Sie dies lesen

https://github.com/alts/iter.php

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage