我试图找到选择排序的时间复杂度,其具有以下等式
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 = 0
和n=k
回到它的... T(n) = T(0)// which is C + n*n - n
使其成为C + n^2 -n
..所以它的O(n ^ 2)..是我做的ryt ??
答案 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是常量。有助于更容易地使方程可视化。