为了账号安全,请及时绑定邮箱和手机立即绑定

发电功率集算法实现

发电功率集算法实现

繁星淼淼 2022-08-16 18:16:06
什么是功率集算法的良好实现?最近,我需要这个算法来为我的益智游戏构建一个求解器。通常,求解器应尝试策略(转弯集,可能的转弯功率集)并找到形成解决方案的策略。我发现,维基百科页面上显示的朴素实现,以及来自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)

它生成元组 - 但您可以根据需要转换它们。它看起来也比你的解决方案短得多...


查看完整回答
反对 回复 2022-08-16
?
梵蒂冈之花

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


查看完整回答
反对 回复 2022-08-16
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号