簡體   English   中英

關於時間復雜度 O(1), O(n), O(log n), O(n log n) 的問題

[英]Questions about Time complexity O(1), O(n), O(log n), O(n log n)

我目前正在研究 arraylist 的時間復雜度,特別是關於訪問和搜索。 我對哪個是哪個有點困惑。

  1. 所以我知道訪問的時間復雜度(當你知道索引時)是 O(1)。

但是2和3是正確的嗎??

  1. 當 arraylist 被排序並且你不知道索引是 O(n) 時在 arraylist 上搜索......?

  2. 時間復雜度 當您需要從未排序的數組列表中查找數據並且您不知道它的索引是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM