我正在学习时间的复杂性,并试图找出一种关系。我的讲义将递归查找函数描述为:
find(array A, item I)
if(arrayEmpty(A)) return BAD;
if(item == A[0]) return GOOD;
return find(allButFirst(A), I);
有用的链接:https://www.youtube.com/watch?v=_cG5KZSn1LE
我的笔记说时间复杂性的起始关系如下:
T(n) = 1 + T(n-1) // I understand this
T(1) = 1 // only one computation, understandable
然后我们展开T(n)
T(N) = 1 + 1 + T(n-2) // every recursive step 1 comparison plus recursive call
T(N) = 1 + 1 + 1 + T(n-3)
T(N) = 1 + 1 + 1 + 1 + T(n-4)
...
T(N) = (n - 1) + T(n-(n-1)) // This point I am lost how they got this generalisation
如果有人可以解释上述关系如何推广到T(N)=(n - 1)+ T(n-(n-1)),并且为了清晰起见,可能会举一个例子。
例如,我想尝试使用某些值的上述关系,所以让我们说A {1,2,3}和I = 3
然后是以下计算
1 + T(n-1) // {2,3}
1 + 1 + T(n-2) // {3}
1 // {3} Found
所以对于上面我们总共有3个比较和2个递归调用。所以我想说这个关系是T(n)= n + t(n-(n-1))= n + t(1)= n。
答案 0 :(得分:2)
在展开模式的每个步骤中,如果我们k
步入递归(第一步k=1
,最后一步,k=n
),则k
1}} 1' s。
在您发布的扩展中,最后一行T(N) = (n - 1) + T(n-(n-1))
是倒数第二步,因为T(n-(n-1))
扩展为T(1)
,因此对于该行,{{1} }。
因此该行中有k=n-1
1个,因此n-1
一词。
同样,在(n-1)
步骤传递给T
的参数是k
减去当前步骤,因为它是剩余步数。对于第一行,即n
,因此n-k = n-1
。对于倒数第二步,它是T(n-1)
,因此n-k = n-(n-1)
。