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>
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>
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>
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.
Wenn Sie die Funktion von itertools in PHP nutzen möchten, können Sie dies lesenhttps://zh.wikipedia.org/wiki...
https://github.com/alts/iter.php