正數的列表中的所有元素我試圖反向工程遺留報告,並使用Python來解決問題。發現,加起來數量X
傳統報告有20萬的結束和數量。
我知道怎麼會落得這個200K的數字集合,但是這個集合中充斥着那些被過濾掉(與邏輯我還沒有明白的)許多其他的數字。我怎麼能遍歷數字列表來找到所有可變長度的條目(子列表)(可能是1個元素= 200k,或15個元素的產品...),這將添加高達200k?
我開始寫出來,然後決定尋求幫助時,我意識到元素#1 + 2可能溢出,但列表元素#1 + 4 + 7可能是比賽進行到20萬....
這幾乎就像因式分解,然而用總和而不是產品,並且在可能的候選人列表中。
不知道。有任何想法嗎?任何人都做過這樣的事情?
其他細節:
隨着置換和numpy的我得到的結果符合市場預期,但它走的時間太長了與預期的輸入和輸出。 (?即天..)
就是我在:
下面似乎給出正確的結果,但現在看來,這將需要一段時間。
我會接受上面的答案,讓這個在夜間運行。
感謝,
from itertools import permutations
import numpy , pickle, random
output_results = {}
input_array = [random.randrange(0,15000) for i in range(1000)]
desired_sum = 200000
#input_array = (1,2,9,13,12)
#desired_sum = 23
for r in range(1,len(input_array)):
for p in permutations(input_array, r):
temp_sum = numpy.sum(p)
if temp_sum == desired_sum:
output_results[p] = numpy.sum(p)
if r % 10 == 0:
print "Finished up to number %s " % r
pickle.dump(output_results, open("save.p", "wb"))
這就是揹包概率LEM。 –
我可以給你[這](https://sites.google.com/site/mikescoderama/Home/0-1-knapsack-problem-in-p)鏈接,但是這將是像欺騙你的功課。 – danodonovan
這是子集和問題,而不是揹包問題。 – interjay