[英]Find the efficiency in Big-O notation
我對以下問題有疑問
考慮以下嵌套循環構造。 使用“ big-o”表示法根據變量n對其效率進行分類。 假設用省略號(...)表示的語句需要四個主內存訪問(每個都需要一微秒)和兩個磁盤文件訪問(每個都需要一毫秒)。 如果n為1000,則以毫秒表示此構造執行所需的時間。
x = 1;
do
{
y = n;
while (y > 0)
{
...
y--;
}
x *= 2;
} while (x < n*n);
y的內環為O(n)。
外循環以x = 1,2,2 ^ 2,2 ^ 3,... 2 ^ k <n * n運行。 因此,它在O(log(n * n))中運行,即O(2 * log(n))
因此復雜度為O(n * log(n))
只是為了給其他答案增加一些解釋,代碼的一個顯着部分是x * = 2; 即加倍。 所以這部分不是線性的。 因此,您應該考慮使用log2。
因此,x將在log2(n * n)中達到n * n。 = log2(n ^ 2)= 2 x log2(n)。
y倒數是線性的-因此為O(n)
循環中有一個循環,因此您可以將兩個操作相乘,如下所示:
n * 2 x log2(n)= O(n * 2 * log2(n))。 然后,取出常數因子以獲得:O(n * log2(n))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.