【问题标题】:Python - Dynamic programing doesn't improve speedPython - 动态编程不会提高速度
【发布时间】:2021-11-05 16:49:52
【问题描述】:

我想为 Minesweepers/Cheess 创建 N 维板,当我使用 DP 提高速度时遇到了问题,但是两个版本之间的速度似乎相同。

版本 1:朴素递归

def createboard_nd(dimensions, value=None):
       if len(dimensions) == 1:
           return [value for _ in range(dimensions[0])]
       else:
           return [createboard_nd(dimensions[1:], value) for _ in range(dimensions[0])]

版本 2:使用 DP 进行递归

def createboard_nd(dimensions, value=None, memo=None):
       if memo is None:
           memo = {}
       if len(dimensions) in memo:
           return memo[len(dimensions)]
       if len(dimensions) == 1:
           memo[len(dimensions)] = [value for _ in range(dimensions[0])]
           return memo[len(dimensions)]
       else:
           memo[len(dimensions)] = [createboard_nd(dimensions[1:],value, memo) for _ in range(dimensions[0])]
           return memo[len(dimensions)]

示例

createboard_nd((10,10,10,10,10,10), 1)

【问题讨论】:

  • 我已经更新了使用示例。大约花了同样的时间
  • 奇数。在我的测试中,后者快了大约 3000 倍。您分别测量了多少时间?
  • (这并不重要,因为两者都在做根本不同的事情,而后者肯定不会做你想做的事。)
  • 后面的代码你能说得更具体点吗?
  • 好吧,您是故意重用相同的列表对象。当您将数据写入它们时,您打算如何处理?根据需要即时制作副本?听起来很复杂。

标签: python recursion dynamic-programming


【解决方案1】:

显然 jupyternotebook 内置的时间计数有错误或其他东西,在运行脚本版本 2 后似乎要快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多