什么是功率集算法的良好实现?最近,我需要这个算法来为我的益智游戏构建一个求解器。通常,求解器应尝试策略(转弯集,可能的转弯功率集)并找到形成解决方案的策略。我发现,维基百科页面上显示的朴素实现,以及来自js-combinatorics库的实现,并不能提供生成子集中项目的稳定顺序。此外,利用集合的双射到自然数集合并遵循二进制表示的朴素方法受源集大小的限制。这种限制自然而然地发生在以下事实中:在内部,提到的库使用 32 位整数值来生成子集。
2 回答

眼眸繁星
TA贡献1873条经验 获得超9个赞
使用 itertools recipes 的实现:
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)
它生成元组 - 但您可以根据需要转换它们。它看起来也比你的解决方案短得多...

梵蒂冈之花
TA贡献1900条经验 获得超5个赞
可能,Stackoverflow不是共享Gist片段的最佳选择,但存在相关问题,我决定在这里分享我的片段,并相信它可能对那些正在寻找Power Set算法实现和Stackoverflow社区本身的人有用。
https://gist.github.com/vladignatyev/e76b5fd1c3cdfff7034ce17506fae36e
我的实现可能难以理解。请与我自由分享您与此开源软件相关的问题,改进和建议!
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
提交
取消