给定元素长度的Python子集和问题
对于给定的集合、元素的总和和长度,给定元素长度的Python子集和问题,python,subset,subset-sum,Python,Subset,Subset Sum,对于给定的集合、元素的总和和长度, 我想得到集合是否满足条件的布尔值 例如 Input : set = [18,0,2,20], sum = 20, length = 2 <br> Output : True (subset [18,2] satisfy the sum=20 for given length 2) 如果允许您使用导入的模块,则具有一个组合功能,可以使此操作变得非常简单: 来自itertools导入组合的 集合=[18,0,2,20] 总数=20 长度=2 结果=[
我想得到集合是否满足条件的布尔值 例如
Input : set = [18,0,2,20], sum = 20, length = 2 <br>
Output : True (subset [18,2] satisfy the sum=20 for given length 2)
如果允许您使用导入的模块,则具有一个组合功能,可以使此操作变得非常简单: 来自itertools导入组合的
集合=[18,0,2,20]
总数=20
长度=2
结果=[c表示组合中的c(集合,长度),如果和(c)=总计]
如果结果为:
打印(“真,子集”,结果[0],“满足总和”,总计,“给定长度”,长度)
其他:
打印(“假”)
如果你需要它是递归函数,考虑在集合中的每个元素<代码> x>代码>,如果你可以在后面的元素中找到一个子集:<代码> n-1 < /Case>元素,即“<代码> SUMX x/COD>”,你有一个解决方案:<代码>求和/长度=n< /代码> .< 例如:
def subSum(数字、总数、长度):
如果长度(数字)<长度或长度<1:
返回[]
对于索引,枚举中的数字(数字):
如果长度==1,数量==总数:
报税表[号码]
子集=子集(数字[索引+1:],总数,长度-1)
如果子集:
返回[number]+子集
返回[]
使用itertools.组合
:
from itertools import combinations
inp = [18,0,2,20]
length = 2
sum_ = 20
def isSubsetSum(data, length, sum_):
data = [i[0]+i[1] for i in combinations(data,length)]
if sum_ in data:
return True
return False
print(isSubsetSum(inp,length, sum_))
def isSubsetSum(set, n, sum):
if sum == 0:
return True
if (sum != 0) and (n == 0):
return False
if (set[n-1] > sum):
return isSubsetSum(set,n-1,sum)
# (a) including the last element
# (b) excluding the last element
# Not "AND", But "OR" !!!!!
return isSubsetSum(set,n-1,sum) or isSubsetSum(set,n-1,sum-set[n-1])
from itertools import combinations
inp = [18,0,2,20]
length = 2
sum_ = 20
def isSubsetSum(data, length, sum_):
data = [i[0]+i[1] for i in combinations(data,length)]
if sum_ in data:
return True
return False
print(isSubsetSum(inp,length, sum_))