我在試圖找出以下代碼塊中的操作總數時遇到了困難:
我的想法是,。
在外回圈中有 floor(log_2(n)) 操作,在內回圈中有 log_2(i) 操作。我不確定我的想法是否正確,以及我將如何從這里開始...... 這怎么能只用n來寫呢?
uj5u.com熱心網友回復: 正如你所說,在外回圈中有 什么是
標籤: 上一篇:錯誤:二進制運算式的運算元無效('vector<int>'和'int')。
下一篇:如何在一個函式中選擇演算法
for(int i = 1; i <= n; i *= 2)}。
for(int i = 1; i <= n; i *= 2) {
for(int j = 1; j <= i; j *= 2) {
//這里的運算元是多少,與n有關?
}
}
floor(log_2(n))操作。為了簡單起見,讓我們說log_2(n)操作。對于大量的輸入來說,這并不重要。在內回圈中,每種情況下的運算元將是log_2(i)。
因此,從i=1到i=n,內回圈操作的數量。
log_2(1)/code> log_2(2)/code> log_2(3)/code> ... log_2(n)
根據對數規則。
log(a)/code> log(b)/code> = log(a*b)/code>
總運算元=log_2(n!)
請注意,在計算機科學中,如果我們談論的是時間的復雜性,對數的基數是假定為2的。
簡而言之,該演算法的時間復雜性將是: O(log(n!))O(log(n!)>呢?好吧,這里有一個小技巧,將其與更熟悉的時間復雜度進行比較。
請注意,。
log(1) log(2) ... log(n) <= log(n) log(n) ... log(n) = n*log(n)
因此。
log(n!) <= n*log(n)(上界)
而根據Big-Oh符號的定義。
O(log(n!))?O(n*log(n))
所以我們也可以說,這個演算法的時間復雜度可以顯示為O(n*log(n))
