サブセット和問題を解く次の方法を検討してください。
def subset_summing_to_zero (activities):
subsets = {0: []}
for (activity, cost) in activities.iteritems():
old_subsets = subsets
subsets = {}
for (prev_sum, subset) in old_subsets.iteritems():
subsets[prev_sum] = subset
new_sum = prev_sum + cost
new_subset = subset + [activity]
if 0 == new_sum:
new_subset.sort()
return new_subset
else:
subsets[new_sum] = new_subset
return []
私はここからそれを持っています:
http://news.ycombinator.com/item?id=2267392
それを「より効率的に」することが可能であるというコメントもあります。
どのように?
また、少なくとも上記の問題と同じくらい速い問題を解決する他の方法はありますか?
編集
スピードアップにつながるアイデアに興味があります。私が見つけた:
https://en.wikipedia.org/wiki/Subset_sum_problem#cite_note-Pisinger09-2
これは線形時間アルゴリズムに言及しています。しかし、私は紙を持っていません、おそらくあなた、親愛なる人々、それがどのように機能するか知っていますか?おそらく実装?おそらく完全に異なるアプローチ?
編集2
現在、フォローアップがあります:
Pisingerによるサブセット和アルゴリズムの高速ソリューション