Algorithm 插入排序的运行时分析
我试图计算此插入排序算法的运行时分析:Algorithm 插入排序的运行时分析,algorithm,sorting,insertion,Algorithm,Sorting,Insertion,我试图计算此插入排序算法的运行时分析: 1) n = length[A] 2) count = 0 3) for (i=1; i<=n; i++) 4) for (j=1; j<=i; j++) 5) if A[j] <= 100 6) for (k=j; k<=j+2*i; k++) 7) A[j] = A[j]-1 8) count = count+1
1) n = length[A]
2) count = 0
3) for (i=1; i<=n; i++)
4) for (j=1; j<=i; j++)
5) if A[j] <= 100
6) for (k=j; k<=j+2*i; k++)
7) A[j] = A[j]-1
8) count = count+1
9) return (count)
1)n=长度[A]
2) 计数=0
3) 对于(i=1;i这听起来很像一个家庭作业问题,仅仅给你所有的答案对你没有任何好处,但是这里有一些原则,希望能帮助你自己解决剩下的问题
第4行将在第一次通过外循环时发生一次,第二次发生两次,依此类推,直到第n次通过循环时发生n次
1 + 2 + ... + n
如果我们重新排列它们,将第一个和最后一个加数放在一起,然后将第二个和第二个加数放在一起,我们会看到一种模式:
1 + 2 + ... (n-1) + n
= (n + 1) + (n - 1 + 2) + ... + (n - n/2 + n/2 + 1)
= (n + 1) + (n + 1) + ... + (n + 1)
= (n + 1) * n/2
= n²/2 + n/2
就渐近复杂性而言,常数1/2
和n
被n²
所抵消,因此第4行的大O是n²
第5行的计算次数必须与第4行的计算次数相同,无论其计算结果是什么,因此这将是n²
。但它内部的行的运行次数将取决于数组中的值。这是您开始运行最佳情况和最坏情况复杂性的地方
在最佳情况下,数组中的值始终大于100,因此整个算法的复杂度等于第5行的复杂度
在最坏的情况下,A[j]
中的值将始终小于或等于100,因此将对第6行上的for
循环进行评估,从而增加整个算法的复杂性
我将留给您去弄清楚剩余的行将如何影响总体复杂性
顺便说一句,在我看来,这不像是插入排序。它不是相互比较数组值并交换它们在数组中的位置。它是将数组值与常量(100
)进行比较并根据它们在数组中的位置减少它们的值。请缩进代码。您是否使用大O表示法计算渐近复杂性?基本上,我需要找到@StriplingWarrior的最佳和最坏情况