[英]Questions about Time complexity O(1), O(n), O(log n), O(n log n)
我目前正在研究 arraylist 的時間復雜度,特別是關於訪問和搜索。 我對哪個是哪個有點困惑。
但是2和3是正確的嗎??
當 arraylist 被排序並且你不知道索引是 O(n) 時在 arraylist 上搜索......?
時間復雜度 當您需要從未排序的數組列表中查找數據並且您不知道它的索引是 O(n) 時...?
2 和 3 的答案應該一樣嗎? 或排序/未排序的arraylist 會改變時間復雜度嗎?
通過數組列表進行線性搜索時,您正在尋找一些元素。 由於您不知道數據位於哪個索引,因此您必須遍歷每個元素,直到找到您要查找的項目。
在最壞的情況下,您必須一直走到最后一個元素。 Big Oh 作為算法的上限。 在最壞的情況下,我們必須遍歷所有 n 個元素,因此算法是 O(n)。
如果數組列表已排序,則可以使用 O(log n) 的二進制搜索
對於#2,這取決於您如何進行搜索。 如果您進行順序搜索,例如使用indexOf(Object o)
,則性能為O(n) ,無論數據是否已排序。
可以使用二分搜索算法在O(log n) 中搜索已排序的列表或數組。
可以使用Collections.binarySearch()
對List
進行二分搜索。 正如 javadoc 所說:
此方法在log(n)時間內運行,用於“隨機訪問”列表(提供近乎恆定時間的位置訪問)。 如果指定的列表沒有實現
RandomAccess
接口並且很大,則此方法將執行基於迭代器的二進制搜索,執行O(n)鏈接遍歷和O(log n)元素比較。
可以使用Arrays.binarySearch()
對數組進行二分搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.