gpt4 book ai didi

algorithm - 递归 W/Memoization 在楼梯问题中是自下而上的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:26 25 4
gpt4 key购买 nike

将经典楼梯问题视为“戴维斯在他的房子里有许多楼梯,他喜欢一次爬上每个楼梯 1、2 或 3 级台阶。作为一个非常早熟的 child ,他想知道有多少种方法到达楼梯的顶部。”

我的方法是使用递归内存

# TimeO(N), SpaceO(N), DP Bottom Up + Memoization
def stepPerms(n, memo = {}):

if n < 3:
return n
elif n == 3:
return 4

if n in memo:
return memo[n]
else:
memo[n] = stepPerms(n - 1, memo) + stepPerms(n - 2 ,memo) + stepPerms(n - 3 ,memo)
return memo[n]

我想到的问题是,这个解决方案是自下而上还是自上而下。我的处理方法是,因为我们一直向下计算上 N 个值(想象一下递归树)。我认为这是自下而上的。这是正确的吗?

最佳答案

递归策略通常是自上而下的方法,无论它们是否有内存。底层算法设计是动态规划,传统上以自下而上的方式构建。

我注意到您是用 python 编写代码的,而 python 通常对深度递归不满意(少量是可以的,但性能很快就会受到影响,并且最大递归深度为 1000 - 除非自从我改变它阅读那个)。

如果我们制作一个自下而上的动态程序版本,我们可以摆脱这种 react ,我们也可以认识到我们只需要恒定数量的空间,因为我们只真正对最后 3 个值感兴趣:

def stepPerms(n):
if n < 1: return n
memo = [1,2,4]
if n <= 3: return memo[n-1]

for i in range(3,n):
memo[i % 3] = sum(memo)
return memo[n-1]

请注意逻辑要简单得多,appart 从 i 开始比值小 1,因为位置从 0 而不是 1 的计数开始。

关于algorithm - 递归 W/Memoization 在楼梯问题中是自下而上的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724665/

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