顺序搜索的时间复杂度

时间:2013-03-03 16:53:15

标签: algorithm recursion time-complexity


我试图找到选择排序的时间复杂度,其具有以下等式
T(n)=T(n-1)+O(n)

首先,我认为它的T(n)= T(n-1)+ n .. n更容易..
想象T(n-1) = T(n-2) + (n-1)T(n-2) = T(n-3) + (n-2)

这使得T(n) = (T(n-3) + (n-2)) + (n-1) + n因此T(n) = T(n-3) + 3n - 3 ..

K代替(3).. T(n) = T(n-k) + kn - k

因为n-k> = 0 .. ==> n-k = 0n=k

回到它的... T(n) = T(0)// which is C + n*n - n

使其成为C + n^2 -n ..所以它的O(n ^ 2)..是我做的ryt ??

2 个答案:

答案 0 :(得分:1)

是的,您的解决方案是正确的。你将O(n)与O(n-1),O(n-2)...结合起来并得出O(n ^ 2)。您可以应用O(n) + O(n-1) = O(n),但仅限于有限。在一系列中它是不同的。

T(n) = (0 to n)Σ O(n - i)

在O()中忽略我,你的结果是O(n ^ 2)

对于Selection Sort,您给出的递归关系T(n)=T(n-1)+O(n)为真,其总时间复杂度为O(n ^ 2)。请检查此link以验证

答案 1 :(得分:0)

In selection sort:

在迭代i中,我们找到最小剩余条目的索引min。 然后交换[i]和[min]。

因此选择排序使用

(n-1)+(n-2)+....+2+1+0 = (n-1)*(n-2)/2 = O(n*n) compares

and exactly n exchanges(swappings).

FROM ABOVE

从上面给出的递归关系

=> T(n) = T(n-1)+ O(n)
=> T(n) = T(n-1)+ cn, where c is some positive constant
=> T(n) = cn + T(n-2) + c(n-1)
=> T(n) = cn + c(n-1) +T(n-3)+ c(n-2)

接下来我们终于得到了

=> T(n) = cn + c(n-1) + c(n-2) + ...... c (total no of n terms)
=> T(n) = c(n*(n-1)/2)
=> T(n) = O(n*n)

修改

将theta(n)替换为cn总是更好,其中c是常量。有助于更容易地使方程可视化。