首页 > 解决方案 > 如何按顺序打印幂集,每对子集只有一个元素不同?

问题描述

我想按顺序打印一个幂集,以便相邻子集仅相差一个元素。

例如:

Input: S= {1,2,3,4}

输出将像这样打印:

{"",{1},{2}, {3}, {4} ,{4,1}, {4,2} ,{4,3},{3,1}...}

或者

{"", {1}, {1,2}, {2}, {2,3}, ...}

标签: pythonpowerset

解决方案


生成前 2^N 个格雷码,其中 N = len(S)。使用代码的位来选择该集合的元素。

S = [1, 2, 3, 4]

for i in range(2**len(S)):
    gray_code = i ^ (i >> 1)
    subset = [S[j] for j in range(len(S)) if gray_code & (1 << j) ]
    print(subset)

输出:

[]
[1]
[1, 2]
[2]
[2, 3]
[1, 2, 3]
[1, 3]
[3]
[3, 4]
[1, 3, 4]
[1, 2, 3, 4]
[2, 3, 4]
[2, 4]
[1, 2, 4]
[1, 4]
[4]

推荐阅读