Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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
Java 从while和switch case的逐行代码计算时间复杂度,以及插入排序的示例case_Java_Algorithm_Sorting_Time Complexity - Fatal编程技术网

Java 从while和switch case的逐行代码计算时间复杂度,以及插入排序的示例case

Java 从while和switch case的逐行代码计算时间复杂度,以及插入排序的示例case,java,algorithm,sorting,time-complexity,Java,Algorithm,Sorting,Time Complexity,有许多可用的指南告诉您如何通过查看代码/算法并逐行应用来计算时间复杂度。然而,我发现切换循环时很难执行&切换。有人能帮我弄清楚在这种情况下该怎么办吗 插入排序的示例以及我是如何被卡住的: int i,j,n=a.length,temp; //c1 for(i=1;i<n;i++) // (n) { j=i-1; // c2 temp=a[i]; // c3 while(j>=0&a

有许多可用的指南告诉您如何通过查看代码/算法并逐行应用来计算时间复杂度。然而,我发现
切换
循环时很难执行
&
切换。有人能帮我弄清楚在这种情况下该怎么办吗

插入排序的示例以及我是如何被卡住的:

int i,j,n=a.length,temp; //c1
        for(i=1;i<n;i++) // (n)
        {
            j=i-1; // c2
            temp=a[i]; // c3
            while(j>=0&&a[j]>temp) (Stuck here)
            {
                a[j+1]=a[j];// c4
                j=j-1; //c5
            }
            a[j+1]=temp; //c6
        }
inti,j,n=a.长度,温度//c1
对于(i=1;i=0&&a[j]>temp)(卡在此处)
{
a[j+1]=a[j];//c4
j=j-1;//c5
}
a[j+1]=温度//c6
}

因为您不仅仅是在查看集合,而是在某个时刻根据某种情况打破循环,因此您的结果将有一个最佳情况和一个最坏情况

外部for循环将始终执行
n-1
迭代。计算复杂度时,通常会忽略常数,因此外部循环的复杂度将为
n

while循环取决于两个条件:
j
大于0和
j
大于
temp

如果
a[j]>temp
对每个
n
都保持不变,那么您的代码的复杂性应该是
n

另一方面,如果对于每个
n
,a[j]
,则
j>=0
将是确定条件
j
将开始变小,并随着
n
的增加而增加,因此两个循环将运行
nj


既然
n
,那么您可以得出结论,最佳情况场景的时间复杂度为
n
。另一方面,最坏的情况是
nj
。由于<代码> J= N 1 - <代码>,您可以说,复杂性是<代码> n(n 1)<代码>,这将导致<代码> n ^ 2 -n>代码>,这将粗略地导致<代码> n ^ 2 < /代码>的最坏情况下的时间复杂度。

如果您考虑您的<代码>(j>=0 & & [j]>TEMP)< /C>循环>,则它是最好的实例CiRiRo和O(n)的O(1)。在最坏的情况下

但是,如果将这两个循环都考虑在内,则内部
while
循环的最坏情况会有一点变化。下面是一个例子:

  • 对于
    i=1
    最坏情况,内部
    while
    循环将运行1次

  • 对于
    i=2
    最坏情况,内部
    while
    循环将运行2次

  • 对于
    i=3
    最坏情况,内部
    while
    循环将运行3次

  • 等等

结论:对于最坏的情况,内部
while
循环将执行与
i
值相同的次数,而对于最佳情况,仅执行1次

最坏情况下,内部
while
循环将执行的总次数为
1+2+3+…+n
,可通过以下数学公式表示:
n^2/2+n/2


因此,最坏情况下的时间复杂度为n^2/2+n/2,可以简化为O(n^2)。最好的情况是O(n)。

有人吗?请更正我的计算中是否有任何错误,并尝试找出不同情况下的循环运行-最坏/最佳/平均我知道这一点。但我只是想通过查看代码来计算,就像我在mt示例中介绍的一样。对于For循环,它将是n阶的,我被困在循环中,而复杂度的计算并不总是那么直接。当循环执行的数量取决于实际数据(动态)时,您需要考虑数据集对于您的算法来说是最差/最佳/平均的情况,并根据复杂度来决定复杂度。这里我以排序数组的最佳情况为例,按递增顺序。对于tje For循环,它将按照n顺序进行。如果我考虑两个情况下的while循环,那么你可以解释一下它是O(n)和O(1)的情况。然后,我将了解这里到底发生了什么,然后乘以外环。for@icantcodewhile循环的最佳情况是
a[j]
已经大于
temp
。因此,循环将不会执行,而不执行的部分的时间复杂度是恒定的,即O(1)。@icantcode while循环的最坏情况是
a[j]
永远不会大于
temp
,因此循环将针对整个阵列运行,使其成为O(n)。