我是在採訪蛋糕練的一些問題,以及問題2給出的解決方案採用兩個獨立的迴路(未嵌套)和解決方案供應商聲稱,他/她在O(n)時間解決了它。根據我的理解,這將是O(2n)次。我的想法是錯誤的,還是解決方案提供商犯了錯誤?從採訪蛋糕兩次通過數組爲O(n)或O(2N)
回答
大O符號爲您提供關於如何做你的算法執行時間取決於輸入數據的提示。當你看到那個時間複雜度爲O(n)的你明白,有輸入和執行時間之間的線性依賴。常量沒有提及。
根據定義&奧米克;(G(N))是每個的所述下面的語句保持組函數:存在這樣的正的常數Ç和Ñ該0 ≤F(N)≤CG(n)的適用於所有ñ≥ñ。你看定義是使用任意常數Ç,如果你的克(N)本身具有恆定的,不會有任何區別。
最終,我們有:O(CG(n))的 = O(G(N))。在特定情況下O(CN) = O(2N) = 爲O(n)。它們都代表相同的一組功能。
那麼,如果面試官在採訪中要求開發一個在O(n)時間運行的算法,並且我在O(2n)時間內寫一個算法,那麼這不應該是一個主要問題? – Hossam
@Hossam,它只是**冗餘**說* O(2n)*,因爲它與* O(n)*相同。我不認爲這會影響你的採訪結果:)。 –
大O符號是最有用的,看看如何代碼規模。也就是說,如果我將數組的大小加倍,代碼需要多長時間才能運行?如果您的代碼是O(n)
,則需要兩倍的時間,而如果是O(n^2)
,則需要4倍的時間,以此類推。在這種情況下,無論您是否通過循環兩次,將數組的大小加倍會比以前長兩倍(每個循環的長度是兩倍)。
- 1. floor(√2n)的O(log log n)算法?
- 2. 爲什麼兩個O(N)方法被認爲是O(N)?
- 3. Big O - O(N^2)or O(N^2 + 1)?
- 4. O(log_2(n))= O(log_10(n))?
- 5. 時間複雜度:O(logN)或O(N)?
- 6. O(m + n)或O(mlgn)更好
- 7. Python的sort()/ sorted()函數是否調用其可選的'key'參數O(n)次或O(n log n)次?
- 8. 大O符號 - 爲什麼是O(n^2/4)= O(N^2)
- 9. 功能2n^2,100n log n和(log n)^ 3在哪裏適合大O層次?
- 10. 證明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 11. 大O符號 - O(n日誌(N))對O(的log(n^2))
- 12. 大O複雜度O(n日誌n)與O(n日誌m)
- 13. 查找爲O(n)
- 14. O(nlog * n)和O(n)之間?
- 15. 正在將IEnumerable強制轉換爲ArrayList O(N)或O(1)?
- 16. BIG O複雜度n或n^2log(n)
- 17. Python腳本:如何判斷在O(N)或O(N^2)時間?
- 18. 對於數組,PHP的count()函數是O(1)還是O(n)?
- 19. 計數no。 O(n)
- 20. 將素數過濾代碼-O(n^2)改爲O(n)並刪除數組中的冗餘元素
- 21. O(nlogn)+ O(n),O(nlogn)和O(nlogn + n)之間的關係是什麼?
- 22. 如何確定的時間複雜度爲O(M + N)或O(Math.max(M,N))
- 23. 爲什麼TreeSet迭代O(n)而不是O(n * logn)?
- 24. 在JavaScript中將O(n^3)更改爲O(n^2)
- 25. 在漸近分析中,證明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 26. 在O(n)
- 27. 在O(N)
- 28. 證明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 29. 這個函數是O(N + M)還是O(N * M)?
- 30. 爲什麼Data.Sequence.reverse O(n)?
O(n)== O(2n)== O(kn)。常量不重要,只有比例因子。 – azurefrog
O(2n)攤銷到O(n),因爲與「n」相比,因素「2」具有不成比例的小影響(在最壞的情況下) –
完美,謝謝! – Hossam