我真的不知道如何找到算法的递推方程 我已经阅读了关于这个主题的其他问题,但有些东西我仍然没有得到。 例如,在以下代码中(实际上是伪代码:)):
MergeSort(list "L" of "n" elements):
if n=<1 then return L
L1 <- MergeSort(L1... n/2)
L2 <- MergeSort(L(n/2 +1) ... n)
L <- Merge(L1, L2)
return L
递推方程式如下: T(1)= b T(n)= c1 + c2.n + 2T(n / 2)
我不知道c1,c2和b是什么 谢谢你的帮助
答案 0 :(得分:1)
合并n个元素的排序:
让合并 - 排序 n 元素数组的总时间为 T(n)。 我们知道基本情况是 n 元素的数量是 1 ,那么我们不需要应用合并排序算法,我们可以返回该元素。
if n=<1 then return L
这需要一个恒定的时间,例如 c1 。
如果元素大于 1 ,则从 [1..n / 2] 和 [n / 2 + 1 ... n]拆分数组] 并递归地合并它们。
L1 <- MergeSort(L1... n/2)
L2 <- MergeSort(L(n/2 +1) ... n)
因此,我们假设合并 - 排序 n 元素所花费的时间是 T(n),那么对每个子数组进行排序所需的时间大约 n / 2 元素将 T(n / 2)。
我们需要在排序后合并子数组,合并 n 元素所需的时间将是 n 的线性函数,即 c2.n 其中 c2 是将元素放置在最终排序数组中的特定位置所需的常量时间。