Recursion 为什么这个时间复杂度是O(总*n)?

Recursion 为什么这个时间复杂度是O(总*n)?,recursion,time-complexity,dynamic-programming,memoization,Recursion,Time Complexity,Dynamic Programming,Memoization,也就是说,我很难理解为什么在最坏的情况下运行蓝色部分需要(总计)⋅N⋅2) +1步 以下是函数的代码: 这个截图的视频可以在上找到。我没有看你链接的视频。然而,从代码来看,这似乎是在计算使用数组arr给定面额的硬币组成价值的不同方式的数量 函数dp基本上用值填充字典mem。字典mem由total和i索引。在递归调用中,total和i可能(也将)变得更小。total获取的新值将在[0;total]范围内。i获取的新值将在范围[0;arr.length-1]内 因此,字典可能的不同键的数量最多为(

也就是说,我很难理解为什么在最坏的情况下运行蓝色部分需要(总计)⋅N⋅2) +1步

以下是函数的代码:


这个截图的视频可以在上找到。

我没有看你链接的视频。然而,从代码来看,这似乎是在计算使用数组
arr
给定面额的硬币组成价值的不同方式的数量

函数
dp
基本上用值填充字典
mem
。字典
mem
total
i
索引。在递归调用中,
total
i
可能(也将)变得更小。
total
获取的新值将在
[0;total]
范围内。
i
获取的新值将在范围
[0;arr.length-1]

因此,字典可能的不同键的数量最多为
(总计+1)*arr.length

使用字典中已有的
total
i
的一对值调用
dp
,不会导致进一步的递归调用。因此,导致进一步递归调用的
dp
调用数最多为
(总计+1)*arr.length


由于对
dp
的每次调用最多会导致2次递归调用,因此对
dp
的调用总数最多为
2*(总计+1)*arr.length
。这是
O(总的*arr.length)
。我假设这就是你所说的O(total*n)

这能回答你的问题吗?谢谢,我想我从这个答案中理解了这个想法