因此,我是python的新手,遇到了一个有趣的主题:智能子集计数。 “智能集”是一组非负整数,其中最大的数字是剩余数字的总和。例如,{1,3,4}很聪明,因为1 + 3 = 4。 我编写了一个程序,以查找给定的一组非负(唯一)整数的所有智能子集,并返回它们数量的计数。 例如,对于集合{1,2,3,4,6},结果为1 + 2 = 3、1 + 3 = 4、2 + 4 = 6和1 + 2 + 3 = 6,因此子集计数为4。 对于用户提供的大多数输入,它完全可以正常工作,但是当我尝试将其应用于素数时会出现问题。就像应用于前19个素数一样,它大约需要10秒钟。但是,当我尝试使用更多的素数时,它会消耗过多的内存(超过25GB),并且执行失败并显示“内存错误”。 有没有一种方法可以优化代码?
预先感谢:) 干杯!
我已经“优化”了代码,显然没有用。
def funcy(list):
def powerset(s):
x = len(s)
a=[]
for i in range(1,1 << x):
a.append(([s[j] for j in range(x) if (i & (1 << j))]))
return a
l=powerset(list)
print("The power sets of the given list are: ",l)
print("\n\n")
def apps(l2):
ll=[]
for x in l2:
if len(x)>=3:
ll.append(x)
print("The Candidates for Smart Sets are:",ll)
print("\n\n")
apps(l)
def SS(ll1):
finallist=[]
for ele1 in ll1:
sum = 0
for num in ele1:
sum += int (num)
ma=int(max(ele1))
if (ma==(sum-ma)):
#print(ele1)
finallist.append(ele1)
print ("The number of Smart Sets in the List is: ", len(finallist))
print ("\nThe Smart sets are:", finallist)
SS(l)
我的原始代码是否结合了质数计算器功能(质数计算器没有问题,因为即使计算约300个质数也要花费大约2秒钟的时间)
我稍后将上述代码“优化”为
def powerset(s):
fl=[]
x = len(s)
a=[]
for i in range(1,1 << x):
a.append(([s[j] for j in range(x) if (i & (1 << j))]))
if len(a)>=3:
for ele1 in a:
sum=0
for num in ele1:
sum += int (num)
ma=int(max(ele1))
if (ma==(sum-ma)):
fl.append(ele1)
print ("\nThe number of Smart Sets in the List is: ", len(fl))
print ("\nThe Smart sets are:", fl)
但是以大约100个素数作为输入运行它仍然会遇到内存错误。
帮助!