什么是功率集算法的良好實現(xiàn)?最近,我需要這個算法來為我的益智游戲構(gòu)建一個求解器。通常,求解器應嘗試策略(轉(zhuǎn)彎集,可能的轉(zhuǎn)彎功率集)并找到形成解決方案的策略。我發(fā)現(xiàn),維基百科頁面上顯示的樸素實現(xiàn),以及來自js-combinatorics庫的實現(xiàn),并不能提供生成子集中項目的穩(wěn)定順序。此外,利用集合的雙射到自然數(shù)集合并遵循二進制表示的樸素方法受源集大小的限制。這種限制自然而然地發(fā)生在以下事實中:在內(nèi)部,提到的庫使用 32 位整數(shù)值來生成子集。
2 回答

眼眸繁星
TA貢獻1873條經(jīng)驗 獲得超9個贊
使用 itertools recipes 的實現(xiàn):
from itertools import chain, combinations
def powerset(iterable): "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
print(*powerset([1,2,3]))
輸出:
() (1,) (2,) (3,) (1, 2) (1, 3) (2, 3) (1, 2, 3)
它生成元組 - 但您可以根據(jù)需要轉(zhuǎn)換它們。它看起來也比你的解決方案短得多...

梵蒂岡之花
TA貢獻1900條經(jīng)驗 獲得超5個贊
可能,Stackoverflow不是共享Gist片段的最佳選擇,但存在相關(guān)問題,我決定在這里分享我的片段,并相信它可能對那些正在尋找Power Set算法實現(xiàn)和Stackoverflow社區(qū)本身的人有用。
https://gist.github.com/vladignatyev/e76b5fd1c3cdfff7034ce17506fae36e
我的實現(xiàn)可能難以理解。請與我自由分享您與此開源軟件相關(guān)的問題,改進和建議!
Usage: >>> ps = power_set([1,2,3]) >>> for ss in ps: print(ss) Output: [], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]
供您參考,我將代碼移植到純 Swift 5,不需要依賴項。退房-->https://gist.github.com/vladignatyev/7e9399930cb614d6251a4f82b8e75ff1
添加回答
舉報
0/150
提交
取消