找到算法java的递推方程

时间:2013-06-08 16:18:01

标签: java algorithm recurrence

我真的不知道如何找到算法的递推方程 我已经阅读了关于这个主题的其他问题,但有些东西我仍然没有得到。 例如,在以下代码中(实际上是伪代码:)):

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是什么 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

合并n个元素的排序:

  1. 如果n = 1,则返回孤立元素。
  2. 否则,递归排序[1 ... n / 2]个元素和[n / 2 + 1 ... n]个元素。
  3. 合并2个已排序的数组。
  4. 让合并 - 排序 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 是将元素放置在最终排序数组中的特定位置所需的常量时间。