【问题标题】:Modify Recursive Subset Sum + Memoize to print values修改递归子集 Sum + Memoize 以打印值
【发布时间】:2014-04-12 05:37:05
【问题描述】:

我试图弄清楚如何修改子集和问题的代码,以便在它最终返回 True 时打印出它找到的值。我当前的实现以递归方式工作并利用记忆,但我不知道如何改变它以存储并最终返回达到所需总和的路径。

我已经尝试放弃它的递归性并改用迭代,但我不知道如何在我的 for 循环中布置代码以处理我们不使用下一个值的情况以及何时使用我们确实使用它。

注意:在这个实现中,值只能使用一次,不确定原始“子集和”问题是否强制执行...

def subsetSum(tot, vals, mem={}):
  key = (tot, len(vals))
  if key not in mem:
    if tot == 0:
      mem[key] = True
      return True
    if tot < 0 or len(vals) == 0:
      mem[key] = False
      return False
    return subsetSum(tot, vals[:-1], mem) or 
           subsetSum(tot-vals[-1], vals[:-1], mem)
  else:
    return mem[key]

任何关于如何转换它的帮助或提示将不胜感激。我这样做是为了为即将到来的面试做练习。

【问题讨论】:

    标签: python recursion iteration memoization subset-sum


    【解决方案1】:

    您可以在调用函数时使用 print。尝试使用不同的值调用函数以满足函数中的各种条件。

    例如:

    print subsetSum(tot, vals, mem)
    

    或者,您可以在函数中添加打印语句,只要您想查看值。

    例如:

    def subsetSum(tot, vals, mem={}):
      key = (tot, len(vals))
      if key not in mem:
        if tot == 0:
          mem[key] = True
          return True
        if tot < 0 or len(vals) == 0:
           print tot, len(vals)   #Added a print statement here
           mem[key] = False
           return False
        return subsetSum(tot, vals[:-1], mem) or 
               subsetSum(tot-vals[-1], vals[:-1], mem)
      else:
        return mem[key]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2020-01-10
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多