Recursion 为什么这个时间复杂度是O(总*n)?
也就是说,我很难理解为什么在最坏的情况下运行蓝色部分需要(总计)⋅N⋅2) +1步 以下是函数的代码: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]内 因此,字典可能的不同键的数量最多为(
这个截图的视频可以在上找到。我没有看你链接的视频。然而,从代码来看,这似乎是在计算使用数组
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)这能回答你的问题吗?谢谢,我想我从这个答案中理解了这个想法