Algorithm 合并排序变化-时间复杂性

Algorithm 合并排序变化-时间复杂性,algorithm,sorting,data-structures,time,Algorithm,Sorting,Data Structures,Time,假设我们有一个不同的Mergesort变体: MergesortVar(A,p,r) if p < r then q ← (p+r)/2 Bubblesort(A, p, q) MergesortVar(A, q+1, r) Merge(A, p, q, r) MergesortVar(A、p、r) 如果p

假设我们有一个不同的Mergesort变体:

MergesortVar(A,p,r)
  if p < r then
    q ← (p+r)/2
  Bubblesort(A, p, q)
  MergesortVar(A, q+1, r)
  Merge(A, p, q, r)
MergesortVar(A、p、r)
如果p
我想分析最好和最坏情况下的时间复杂性

因此,一般来说,我们在这里:

MergesortVar(A,p,r)         T(n)
  if p < r then             O(1)
    q ← (p+r)/2             O(1)
  Bubblesort(A, p, q)       T(n)
  MergesortVar(A, q+1, r)   T(n)
  Merge(A, p, q, r)         O(n)
MergesortVar(A,p,r)T(n)
如果p
所以T(n)=2T(n)+c•n这是正确的吗

那么,我如何分析最坏和最好的情况呢


非常感谢

伪代码中缺少基本情况,这是一个主要缺陷,除非您在忠实地复制它时出错,否则您应该重新考虑课程的质量

但可能是缩进错误了,因为递归调用永远不应该无条件进行。下面是一个更正:

MergesortVar(A,p,r)
    if p < r then
        q ← (p+r)/2
        Bubblesort(A, p, q)
        MergesortVar(A, q+1, r)
        Merge(A, p, q, r)
MergesortVar(A、p、r)
如果p
现在谈谈复杂性:


Bubblesort
的最坏情况复杂度为O(你的
MergesortVar
缺少一个基本情况。它会重复出现,直到堆栈溢出。我错过了在你的
MergesortVar(a,p,r)
演示中告诉名字和启发性的注释。你为什么认为
Bubblesort
的复杂度是
T(n)
?@trincot这是我们在课堂上得到的函数…@user58697你说得对,它应该是
O(n^2)
它是O(logYes,虽然这会导致一个特定的数字,而你只能说一些关于渐近复杂性的东西,所以这个方程会变成
T(n)=T(n/2)+O(n²/2²+n)=T(n/2)+O(n²)
您编写了
(n/2)^2+n
,我将其包装为
O((n/2)^2+n)
。这是必需的,因为我们计算的不是一个精确的数字--BubbleSort不完全取
(n/2)^2
units of time,也不
Merge
使用确切的
n
时间单位,我们也不能说时间单位是什么,以及它是否是两者的相同单位。我想说的是,这些表达式实际上是一个复杂的顺序,而不是一个精确的数字。因此
O
在这里是合适的。是的,你可以写它也被称为
O(n²/2²)+O(n)
,但第二项与第一项相比并不重要,因此它只是被第一项“吞没”。而且
1/2²
系数与大O符号无关,因此这一切都相当于
O(n²)
。这两者之间没有区别。