Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
C 最坏、平均和最佳情况下求数组最小元素索引的时间复杂度分析 intj=0; 对于(int i=0;i_C_Arrays_Time Complexity_Nested Loops - Fatal编程技术网

C 最坏、平均和最佳情况下求数组最小元素索引的时间复杂度分析 intj=0; 对于(int i=0;i

C 最坏、平均和最佳情况下求数组最小元素索引的时间复杂度分析 intj=0; 对于(int i=0;i,c,arrays,time-complexity,nested-loops,C,Arrays,Time Complexity,Nested Loops,这是一个查找数组中最小元素(第一次出现)的索引的代码,我说最坏的情况是O(n2),最好的情况是O(n) 问题1:在最坏的情况下,我的内部while循环并不总是运行n次,在最多的情况下,它会相对于外部for循环运行1到2次,因此我假设内部循环运行(n-c)次,其中c是某个常数,而外部循环运行n次。我是否正确地认为复杂性是n*(n-c)哪个是O(n2) 在最佳情况下,最小元素位于第一个索引处,我的内部循环在任何时候都不会运行,因此时间复杂度为O(n) 问题2:我如何推导平均情况?你从j=0开始,永远

这是一个查找数组中最小元素(第一次出现)的索引的代码,我说最坏的情况是O(n2),最好的情况是O(n)

问题1:在最坏的情况下,我的内部while循环并不总是运行n次,在最多的情况下,它会相对于外部for循环运行1到2次,因此我假设内部循环运行(n-c)次,其中c是某个常数,而外部循环运行n次。我是否正确地认为复杂性是n*(n-c)哪个是O(n2)

在最佳情况下,最小元素位于第一个索引处,我的内部循环在任何时候都不会运行,因此时间复杂度为O(n)


问题2:我如何推导平均情况?

你从
j=0开始,永远不要递减
j
while
循环的每次迭代将
j
增加一次,而
while
循环具有条件
j
,因此语句
j++
最多可以运行
n
次,即最坏情况下的O(n)。

我们可以在查找大O符号()时忽略常量


为查找数组中最小元素的索引而编写的程序在数组元素按递增顺序时进行n次迭代,在数组元素按递减顺序时进行2*n次迭代。但我们可以简单地得出结论,该算法在所有三种情况下都有O(n)复杂度。

我不明白如何找到一个O(n)以上的算法。只需在数组上迭代一次并取下较低的元素。任何搜索算法的最坏情况可能是O(n)。正如@Stargateur所建议的,您的算法与任何搜索算法一样具有更高的复杂性,不需要内部循环,请尝试消除它。在本链接中回答您的第二个问题时,我们正确地解释了平均情况,并且简单地说,如何实现平均情况是使用基于概率分布或随机数的总体测试算法。是的,我们可以用O(n)来表示,但是我得到了这个代码来计算时间复杂度。帮我找到这个。。!谢谢,是的,谢谢。j在任何时候都不会超过n。因此,在所有3种情况下,时间复杂度都是O(n)。正确的??
int j = 0;
for(int i = 0; i < n; ++i) {
    while(j < n && arr[i] < arr[j]) {
        j++;
    }
}