簡體   English   中英

這個for循環的運行時間復雜度是多少

[英]What is the running time complexity of this for loop

for (int p = t; p > 0; p >>= 1) {
    for (int i = 0; i < n - p; ++i) {
        if ((i & p) != 0) {
            sort2(a, i, i+p);
        }
    }
    for(int q = t; q > p; q >>= 1) {
        for(int i = 0; i < n- q; ++i) {
            if ((i & p) != 0) {
                sort2(a, i+p, i+q);
            }
        }
    }
}

這里n是一些正整數,並且t大於n/2 ,但不等於n

根據我的理解,內部for循環運行(np)次,但是我無法弄清楚外部for循環。

我嘗試找到它,如下所示:

如果t=64n=100 ,則采用p的二進制值,該值等於64 ,因此p=1000000 2 p=1000000

我知道,每次它減少一位數,在這種情況下,它總共執行7次。 我不知道怎么算一般時間。

另外,我的理解是第三個for循環

for(int q = t; q > p; q >>= 1)

因為條件q>p不滿足,因為p=q=t所以根本不執行。

這個對嗎? 我只是從算法開始。

為此:復雜度為BigO( log(t)(nt)log(t) )

不包括for循環內的sort2函數復雜性。

說明:

  • 外循環復雜度將為log(p)+1 [每次將位右移1並greater than 0 ],因此對於t = 64,循環將變為[64,32,16,8, 4,2,1]。
  • 內循環復雜度將greater of ( O(np), O((nt)log(t)) )

執行

對於第二個內部循環,嵌套了for循環和最外部的循環:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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