[英]Time complexity analysis in finding index of smallest element in an array-worst,average and best case
int j = 0;
for(int i = 0; i < n; ++i) {
while(j < n && arr[i] < arr[j]) {
j++;
}
}
这是一个用于查找数组中最小元素(第一次出现)的索引的代码。我说最坏的情况是O(n2)最好的情况是O(n)。
问题1:在最坏的情况下,我的内部while循环并不总是运行n次,在最多的情况下,它将相对于外部for循环运行1或2次,所以我假设内部循环运行(nc)其中c是一些常数而外部循环运行n次。我正确的是复杂性我们n *(nc)是O(n2)?
在最好的情况下,最小元素在第一个索引处,我的内部循环不会在任何时间运行,因此时间复杂度为O(n)。
问题2:我如何得出平均情况?
你从j = 0
开始,永远不会减少j
。 while
循环的每次迭代都将j
增加1,而while
循环的条件j < n
,因此语句j++
最多可运行n
次,即最坏情况为O(n)。
我们可以在找到Big O表示法时忽略常量( 为什么? )。
您编写的用于查找数组中最小元素索引的程序在数组元素按递增顺序时进行n次迭代,在数组元素按递减顺序时进行2 * n次迭代。 但我们可以简单地得出结论,该算法在所有三种情况下都具有总体O(n)复杂度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.