Python 子集和动态规划
我有一个子集问题的工作代码,它可以打印数字,如果它发现一个子集等于期望的目标Python 子集和动态规划,python,dynamic-programming,subset-sum,Python,Dynamic Programming,Subset Sum,我有一个子集问题的工作代码,它可以打印数字,如果它发现一个子集等于期望的目标 我想打印给定目标的所有可能子集,我不知道要为此更改什么 如何使它适用于负数 时间复杂度是O(len(array)*target),我相信空间也是一样的。有什么办法可以改进吗 **1) **将printsub函数更改为i到len(数组),并使用if(sol[i][target])代替(sol[len(数组)][target]) **2) **在双环路之后- def subset(array, target): s
printsub
函数更改为i
到len(数组)
,并使用if(sol[i][target])
代替(sol[len(数组)][target])
**2) **在双环路之后-
def subset(array, target):
sol = [[False for x in range(target + 1)] for x in range(len(array) + 1)]
for i in range(len(array)+1):
sol[i][0] = True
for i in range(1,(len(array)+1)):
for j in range(1, target+1):
if (j - array[i-1] >= 0):
sol[i][j] = sol[i-1][j] | sol[i-1][j - array[i-1]]
else:
sol[i][j] = sol[i-1][j]
printSub(sol, array, target)
return sol[len(array)][target]
def printSub(sol, array, target):
if(sol[len(array)][target]):
print("Found!")
i = len(array)
j = target
while(j!=0):
if(sol[i-1][j] == True):
i-=1
else:
print(array[i-1], end = " ")
j = j - array[i-1]
else:
print("No combination found! ")
添加一个条件,检查数组[i-1]是否为负值如果为正值,则无需更改任何内容其他
替换j
为目标+2-j
for i in range(1,(len(array)+1)):
for j in range(1, target+1):
**3) **这里是相同问题的链接-
if (j - array[i-1] >= 0):
sol[i][j] = sol[i-1][j] | sol[i-1][j - array[i-1]]