Algorithm 合并排序变化-时间复杂性
假设我们有一个不同的Mergesort变体: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
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²)
。这两者之间没有区别。