假設您想計算一個n。一個簡單的算法會乘以n次,如下所示:這個計算^ n的算法如何被重寫爲在O(log n)時間運行?
result = 1;
for(int i =1; i <= n; i++)
result *= a;
該算法需要O(n)個時間。不失一般性,假設N = 2 ^ķ
可以使用以下方案提高算法:
result = a;
for (int i = 1; i <= k; i++)
result = result * result;
該算法需要O(log n)的時間。對於一個任意n,你可以修改算法並證明覆雜度仍然是O(logn)
這麼混亂,那麼n怎麼樣?爲什麼只在第二個例子中顯示k?不明白這是怎麼變成O(logn)的時間複雜度的...
請問,您能否在開始時說明算法試圖解決的問題?這聽起來很像功課...... – codeling
它可能有助於理解你正在考慮一個特例,其中n是2的冪。在這種特殊情況下,你可以更有效地實現例程。 –
@nyarlathotep不作功,但從教科書中的例子,並沒有解釋爲什麼這是如此。 – user2809437