有一些计算功率集的解决方案,但我在谷歌上找到的这些并没有按顺序给出功率设置,我需要它.例如,如果我想要(1,2,3,4)通用算法的电源组按以下顺序为我提供电源设置:
()
(1)
(2)
(1 2)
(3)
(1 3)
(2 3)
(1 2 3)
(4)
(1 4)
(2 4)
(1 2 4)
(3 4)
(1 3 4)
(2 3 4)
(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
但我需要的是以下顺序:
()
(1)
(2)
(3)
(4)
(1,2)
(1,3)
(1,4)
(2,3)
(2,4)
(3,4)
(1,2,3)
(1,2,4)
(1,3,4)
(2,3,4)
(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
由于元素的数量可能非常高,因此无法计算整个功率集并在之后对其进行排序.
有人有点想法吗?
您需要按长度排序的组合。在 Python 中,您可以编写:
import itertools
def subsets(iterable):
"Generate the subsets of elements in the iterable, in order by length."
items = list(iterable)
for k in xrange(len(items) + 1):
for subset in itertools.combinations(items, k):
yield subset
>>> list(subsets([1,2,3,4]))
[(), (1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4),
(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]
Run Code Online (Sandbox Code Playgroud)
有关生成组合的算法的概述,请参阅此答案。(或者您可以查看 Raymond Hettinger 的 Python 实现,itertoolsmodule.c 行 2026f。)
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |