1

作为一个示例问题,我们被要求创建一个合并排序的变体,它将数组拆分为c>2大小大致相等的数组(当c = 2它将使用常规合并时)

这是解决方案:

 cmerge(a1, a2, .... ac)
    if c = 2 return Merge(a1, a2)
     else 
     b1 = cmerge(a1, a2,...a(c/2), floor(c/2))
     b2 = cmerge(a(roof(c/2)),... ac, roof(c/2))
     return merge(b1,b2) 

我知道他们从哪里得到这个解决方案,但是当它要求重复关系时会有点困惑。在他们声明的问题中,可以合并 c 个排序数组,O(n log c) 这使得第一种情况清楚

T(n) = c(T(n/c)) + nlogc if n>= c
T(n) = theta(n^2) for n<c   <----------- can someone explain where they are getting this?

我只是真的不明白n^2是从哪里来的。在第二种情况下,不是只有一个对 MERGE 的调用吗?theta(n)如果我记得的话,合并就是。

4

0 回答 0