Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 插入排序的运行时分析_Algorithm_Sorting_Insertion - Fatal编程技术网

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
所抵消,因此第4行的大O是

第5行的计算次数必须与第4行的计算次数相同,无论其计算结果是什么,因此这将是
。但它内部的行的运行次数将取决于数组中的值。这是您开始运行最佳情况和最坏情况复杂性的地方

在最佳情况下,数组中的值始终大于100,因此整个算法的复杂度等于第5行的复杂度

在最坏的情况下,
A[j]
中的值将始终小于或等于100,因此将对第6行上的
for
循环进行评估,从而增加整个算法的复杂性

我将留给您去弄清楚剩余的行将如何影响总体复杂性


顺便说一句,在我看来,这不像是插入排序。它不是相互比较数组值并交换它们在数组中的位置。它是将数组值与常量(
100
)进行比较并根据它们在数组中的位置减少它们的值。

请缩进代码。您是否使用大O表示法计算渐近复杂性?基本上,我需要找到@StriplingWarrior的最佳和最坏情况