gpt4 book ai didi

python - 在 Python 中递归子集求和

转载 作者:太空狗 更新时间:2023-10-30 01:35:07 25 4
gpt4 key购买 nike

我很乐意得到一些帮助。

我有以下问题:

我得到了一个数字列表 seq 和一个目标数字,我需要写两件事:

  1. 一个递归解决方案,如果子序列的总和等于目标数,则返回 True,否则返回 False。示例:

    subset_sum([-1,1,5,4],0)   # True
    subset_sum([-1,1,5,4],-3) # False
  2. 其次,我需要使用我在之前的解决方案中编写的内容编写一个解决方案但现在有了使用字典的内存,其中的键是元组:(len(seq),target)

对于第 1 个,这是我到目前为止所得到的:

def subset_sum(seq, target):
if target == 0:
return True
if seq[0] == target:
return True
if len(seq) > 1:
return subset_sum(seq[1:],target-seq[0]) or subset_sum(seq[1:],target)
return False

不确定我是否做对了,所以如果我能得到一些意见,我将不胜感激。

对于数字 2:

def subset_sum_mem(seq, target, mem=None ):
if not mem:
mem = {}
key=(len(seq),target)
if key not in mem:
if target == 0 or seq[0]==target:
mem[key] = True
if len(seq)>1:
mem[key] = subset_sum_mem(seq[1:],target-seq[0],mem) or subset_sum_mem(seq[1:],target,mem)
mem[key] = False

return mem[key]

我无法获得给我正确答案的内存,所以我很乐意在这里提供一些指导。

感谢任何愿意提供帮助的人!

最佳答案

仅供引用,这里有一个使用动态规划的解决方案:

def positive_negative_sums(seq):
P, N = 0, 0
for e in seq:
if e >= 0:
P += e
else:
N += e
return P, N

def subset_sum(seq, s=0):
P, N = positive_negative_sums(seq)
if not seq or s < N or s > P:
return False
n, m = len(seq), P - N + 1
table = [[False] * m for x in xrange(n)]
table[0][seq[0]] = True
for i in xrange(1, n):
for j in xrange(N, P+1):
table[i][j] = seq[i] == j or table[i-1][j] or table[i-1][j-seq[i]]
return table[n-1][s]

关于python - 在 Python 中递归子集求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com