簡體   English   中英

以Big-O表示法查找效率

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM