簡體   English   中英

排序數組中的時間復雜度

[英]Time Complexity in Sorted Array

給定一個降序排列的數組,從該數組中刪除最小元素的時間復雜度是多少?

================================================

我取最小元素將在最后位置,以便O(n)找到它? 還是應該對數組進行排序,還是只用O(1)到達末尾來進行二進制搜索?

這實際上取決於您的意思是“從數組中刪除”。 您有一個按降序排列的數組,並且想要刪除最小元素。

假設數組為[5, 4, 3, 2, 1] 您知道數組有多大,因此找到最小元素是O(1)。 您只需索引a[a.length-1]

但是刪除最后一個元素是什么意思? 您可以輕松地用哨兵值替換那里的值,以表示該位置不再使用,但是下次您嘗試獲取最小元素時,則必須訪問a[a.length-1] ,然后然后進行反向掃描以找到第一個使用的元素。 當您刪除更多項目時,該值接近O(n)。

還是保留一個計數器來告訴您數組中實際使用了多少個值? 因此,您將擁有一個變量count ,以告訴您最后一個元素。 當您想要獲得最少的元素時,您將擁有:

smallest = a[count];
count = count-1;

仍然是O(1),但是它將未使用的項留在數組中。

但是,如果要確保數組長度始終反映其中的項數,則必須重新分配數組以使其更小。 那就是O(n)。

因此,您的問題的答案是“取決於情況”。

由於數組是按降序排序的,因此假設數組中沒有重復項,則始終可以保證最小元素位於數組的最后一個位置。 刪除可以在O(1)

如果需要對陣列進行一系列刪除,則可能需要調整已刪除的索引並指向陣列的正確末端位置。 這可以在恆定時間內完成。

綜上所述,總的時間復雜度為O(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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