我的問題源自於生成一個非常大的素數排序列表的唯一組合選擇5,但我需要返回組合以便首先返回具有最小總和的組合。 python itertools.combinations()
函數返回數字,增加最後一個,直到達到可迭代對象的末尾,然後再增加下一個,等等。這對我的項目來說是不合適的,因爲總和會不斷增加,直到它達到我的最終元素一組素數,在這一點上,總和將下降,然後再增加。通過最小總和生成整數組合
舉例來說,如果我有一小素數{2,3,5,7,11,13,17,19,23,29}
的,我需要的組合順序返回:
(2, 3, 5, 7, 11) sum = 28
(2, 3, 5, 7, 13) sum = 30
(2, 3, 5, 7, 17) sum = 34
(2, 3, 5, 11, 13) sum = 34
(2, 3, 5, 7, 19) sum = 36
(2, 3, 7, 11, 13) sum = 36
(2, 3, 5, 11, 17) sum = 38
(2, 5, 7, 11, 13) sum = 38
(3, 5, 7, 11, 13) sum = 39
(2, 3, 5, 7, 23) sum = 40
(2, 3, 5, 11, 19) sum = 40
(2, 3, 5, 13, 17) sum = 40
(2, 3, 7, 11, 17) sum = 40
(2, 3, 5, 13, 19) sum = 42
(2, 3, 7, 11, 19) sum = 42
(2, 3, 7, 13, 17) sum = 42
(2, 5, 7, 11, 17) sum = 42
...
兩組具有相同金額的順序並不重要,只要具有較大總和的集合在具有較小總和的集合之前不被生成器返回即可。我正在使用的素數組包含大約100,000個元素,這意味着簡單地生成所有組合並對它們進行排序是難以置信的不可行的,因爲它需要每個5個整數的83,325,000,291,662,500,020,000個元組的空間。此外,返回的組合元組中的每個元素必須是唯一的;不能有重複的整數。有任何想法嗎?
的[有效的方式來產生通過提高指標的總和有序組合] (可能的複製http://stackoverflow.com/questions/16737068/efficient-way -to-generate-combinations-ordered-by-increasing-sum-of-indexes/16741491#16741491) –