簡體   English   中英

遞歸算法的時間復雜度

[英]time complexity of the recursive algorithm

有人可以向我解釋如何計算以下遞歸代碼的復雜性:

long bigmod(long b, long p, long m) {
    if (p == 0)
        return 1;
    else
    if (p % 2 == 0)
        return square(bigmod(b, p / 2, m)) % m;
    else    
        return ((b % m) * bigmod(b, p - 1, m)) % m;
}

這是O(log(p)),因為你每次除以2或減去除以2然后除以2,所以最壞的情況確實需要O(2 * log(p)) - 一個用於除法,一個用於除法減去一個。

請注意,在此示例中,最壞情況和平均情況應該是相同的復雜性。

如果你想對它更正式,那么你可以寫一個遞歸關系並使用Master定理來解決它。 http://en.wikipedia.org/wiki/Master_theorem

它是o(log(N))base 2,因為除以2

它在O(log n)

在函數內部沒有昂貴的操作(因為我比平方或修改更昂貴。沒有循環等),所以我們幾乎可以只計算函數調用。

最好的情況是2的冪,我們將需要准確的log(n)調用。

最糟糕的情況是,我們在每次其他通話中都會得到一個奇數。 這只能使我們的電話加倍。 乘以常數因子,不會漸近變差。 2*f(x) is still O(f(x))

O(logn)

暫無
暫無

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

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