我的教授剛剛告訴我們,任何將輸入長度減半的操作都具有O(log(n))複雜度作爲拇指規則。爲什麼它不是O(sqrt(n)),它們都不是等價的嗎?複雜度O(log(n))是否等於O(sqrt(n))?
回答
他們是不等價的:的sqrt(N)會增加很多超過日誌(N)。沒有常數C因此,對於所有N大於某個最小值,您將具有sqrt(N)< C.log(N)。
一種簡單的方法來抓住這個,是日誌(N)將是一個值接近的Ñ(二進制)位的數量,同時SQRT(N)將是一個號碼本身的一半數字N有。或者,指出與平等:
日誌(N)= 2log (開方(N))
所以,你需要採取的對數(! )的sqrt(N),以使其降至與相同的複雜順序log (N)。
例如,對於有11個數字,0b10000000000(= 2 10 )一個二進制數,的平方根是0b100000,但對數僅爲10
對於log(N),+1將是一個接近N的(二進制)位數的值,而sqrt(N)將是一個它自己具有N的一半位數的數字。 –
沒有,它不等價的。
@trincot在他的回答中給出了一個很好的解釋。我再加一點。你的教授教你的
any operation that halves the length of the input has an O(log(n)) complexity
這也是事實,
any operation that reduces the length of the input by 2/3rd, has a O(log3(n)) complexity
any operation that reduces the length of the input by 3/4th, has a O(log4(n)) complexity
any operation that reduces the length of the input by 4/5th, has a O(log5(n)) complexity
So on ...
這是所有還原(B-1)/Bth.
輸入的長度甚至真的,那麼它具有的O(logB(n))
N:B:
O(logB(n))
複雜表示B
基於對數n
假設natural logarithm
(否則只是乘以一個常數),我們有
lim {n->inf} log n/sqrt(n) = (inf/inf)
= lim {n->inf} 1/n/1/(2*sqrt(n)) (by L'Hospital)
= lim {n->inf} 2*sqrt(n)/n
= lim {n->inf} 2/sqrt(n)
= 0 < inf
參見https://en.wikipedia.org/wiki/Big_O_notation用於O(.)
替代認定中並從上方從而我們可以說log n = O(sqrt(n))
,
而且比較以下功能的增長,log n
始終以sqrt(n)
爲大n
的上限。
不,他們不相當於;你甚至可以證明
O(n**k) > O(log(n, base))
的(在sqrt
情況下k = 1/2
)任何k > 0
和base > 1
。
當O(f(n))
交談我們要調查的行爲大n
, 限制是好手段。假設兩個大O
是等價的:
O(n**k) = O(log(n, base))
,這意味着有一個有限的一些常量C
這樣
O(n**k) <= C * O(log(n, base))
不夠n
一些大的開始;把它放在其他方面(log(n, base)
不是0
從大n
開始,這兩個功能是連續可微):
lim(n**k/log(n, base)) = C
n->+inf
要找出限制的值,我們可以使用L'Hospital's Rule,即求導的分子和分母,將它們劃分:
lim(n**k/log(n)) =
lim([k*n**(k-1)]/[ln(base)/n]) =
ln(base) * k * lim(n**k) = +infinity
所以我們可以得出結論,有沒有不斷C
這樣O(n**k) < C*log(n, base)
或者換句話說
O(n**k) > O(log(n, base))
- 1. 時間複雜度 - O(n^2)到O(n log n)搜索
- 2. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 3. 是log(n!)= O((log(n))^ 2)?
- 4. 大O複雜度O(n日誌n)與O(n日誌m)
- 5. 有沒有算法的時間複雜度爲O(sqrt(n)* log(n))?
- 6. BIG O複雜度n或n^2log(n)
- 7. 時間複雜度:O(logN)或O(N)?
- 8. 顯示n^2不是O(n * log(n))?
- 9. 大O符號 - O(n日誌(N))對O(的log(n^2))
- 10. 是這個算法的漸近時間複雜度O(log n)?
- 11. 尋找關於如何計算O(n log n)的複雜度的例子?
- 12. 以下程序的時間複雜度是多少? O(log n)是否正確?
- 13. 爲什麼代碼O(log n)的時間複雜度?
- 14. 查詢的O(log n)複雜度的數據結構
- 15. AVL Tree給我O(c^n)而不是O(log n)
- 16. 爲什麼此循環返回值爲O(n log log n)而不是O(n log n)?
- 17. O(n * log n)工作,然後O(n^2)工作的代碼的複雜性是什麼?
- 18. O(3^n)指數時間複雜度
- 19. O(fib n)複雜度算法?
- 20. 如何在O(n log n)複雜度中以降序將值插入LinkedList?
- 21. 你如何看出O(log n)和O(n log n)之間的差異?
- 22. 爲什麼pop_heap的複雜性是O(2 * log(N))?
- 23. 複雜性理論中的O(lg(n))* O(lg(n))
- 24. 如何計算O(Log(N))?
- 25. 圖形搜索O(log(N)(N + M)
- 26. 爲O(n^log n)的碰撞檢測
- 27. 這是否解決O(N log(N))時間中的3SUM?
- 28. O(n log n)是否有簡寫術語?
- 29. 通過使用O(n log n)複雜度對值進行排序java HashMap複雜度
- 30. 與log(n)相比,log(n^2)的大O是什麼?
將'log(n)'和'sqrt(n)'繪製成大約'n == 1000'的圖形,看看你是否仍然認爲它們是等價的,無論你是什麼意思。 –
log(1)= 0和sqrt(1)= 1 – Sung
對不起,我不知道我在想什麼,但所有的答案都是非常翔實的。謝謝 –