我想计算以下递归算法的时间复杂度,其中,
n = j - i (size of array)
i ≤ k ≤ j
process(A, i, j) takes Θ(n) time
Algo(Array A[], int i, int j)
if (i<j)
k = process(A, i, j)
Algo(A, i, k)
Algo(A, k+1, j)
我想出了以下内容:
T(n) = Θ(n) + T(k) + T(n-k)
我不确定这是否正确,如果是,如何继续?
更新:
以下是否正确?
k的最坏情况值是i或j,
T(n) = Θ(n) + T(0) + T(n)
答案 0 :(得分:2)
这种递归结构更像是快速排序,其最坏情况下的运行时间为O(n^2)
。
algorithm quicksort(A, lo, hi) is
if lo < hi then
p := partition(A, lo, hi)
quicksort(A, lo, p – 1)
quicksort(A, p + 1, hi)
分区算法需要O(N)
次。如需分析,请参阅Quick-Sort。我无法解释得更好。