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