[英]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.