Python 利用增量穷举法思路生成幂集
采用增量穷举法求解a~c的幂集:
(1)产生一个空列表添加到ps中,即ps=[[]]
。
(2)在步骤(1)得到的ps的每一个集合元素的末尾添加’a’构成新列表元素[‘a’],将其添加到ps中,即ps=[[],['a']]
。
(3)在步骤(2)得到的ps的每一个集合元素的末尾添加’b’构成新列表元素[‘b’],[‘a’,‘b’],将其添加到ps中,即ps=[[],['a'],['b'],['a','b']]
。
(4)在步骤(3)得到的ps的每一个集合元素的末尾添加’c’构成新列表元素[‘c’],[‘a’,‘c’],[‘b’,‘c’],[‘a’,‘b’,‘c’],将其添加到ps中,即ps=[[],['a'],['b'],['c'],['a','b'],['a','c'],['b','c'],['a','b','c']]
。
最后的ps构成a~c的幂集。
以下是Python代码:
"""生成幂集"""
ob=['a','b','c'] # 要生成幂集的列表
def insertnum(p,si): # 利用以下两个函数计算出背包所有幂集
p1=p.copy()
for s in p1:
s1=s.copy()
s1.insert(len(s1),si)
p.append(s1)
return ps
def pSet(s,i,ps):
if i!=len(s):
ps=insertnum(ps,s[i])
pSet(s,i+1,ps)
ps=[[]] # 存放幂集的列表
pSet(ob,0,ps)
运行结果:
[[], ['a'], ['b'], ['a', 'b'], ['c'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]