簡體   English   中英

排序列表的排序數組上操作的時間復雜度

[英]Time complexity of operations on a sorted array of sorted lists

我有N個元素的排序數組,這些元素均勻分布在K個列表中,該列表也已排序。 以下內容的時間復雜度(最嚴格的Big-O表示法)將是什么?

  1. 刪除最小的元素。
  2. 移除最小元素后的重排數組。
  3. 刪除所有N個元素

對於第一部分,我認為答案是O(1)因為最小的元素是第一個元素。 但是,包含在其中的列表不一定是第一個列表,因此我不確定。

對於第二部分,我不確定(也許是O(NK)嗎?)

第三部分,因為我們要遍歷整個數組,所以它必須是O(N) ,但是我不確定

具體的例子有幫助。 假設您有三個列表(數組):

[7, 11, 15]
[3, 12, 19]
[2, 4, 6]

刪除最小的物品需要首先找到它。 各個列表是按順序排列的,但是列表的列表不是按順序排列的。 找到最小的項目將需要O(K)時間,因為您必須對列表列表進行順序掃描。

找到最小的項目后,將需要O(m)時間(其中m是包含最小項目的列表的大小)將其刪除。 原因是,當您從列表中刪除第一個項目時,所有其他項目都必須向上移動。 那是:

[2, 4, 6]變為[_, 4, 6] ,然后您必須向上移動以使[4, 6, _] _表示null,或您用來表示“無值”的任何哨兵值。)

我想你可以說去除是O(1),然后對數組重新排序是O(m)。

您可以在O(N)的時間內刪除所有元素,只要您不關心以什么順序刪除它們即可。 如果要按排序順序刪除所有元素,則復雜度為O(n * K),因為每次必須查找最小的元素。 您可以通過實現K路合並來將其提高為O(n * log(K)),以增加O(K)額外的內存為代價。

這取決於您說“ K個列表也已排序”的意思。

如果數字在K個列表中隨機分布,但是K個列表本身都是已排序的,則將需要O(K)時間查看所有列表的開頭以標識最小的元素。 但是,如果數字在K個列表之間划分,則可以對K個列表A,B,C,...進行排序,以使A0 <= AN <= B0 <= BN <= C0 <= CN ... ,那么它需要O(1)時間來找到最小的元素,因為您知道它位於第一個列表的開頭。

刪除數組的最小或最大元素將保留現有的排序順序,因此這需要時間O(1)

“刪除”所有元素所需的時間取決於您的計算模型。 如果將刪除視為簡單地處理整個數據結構,則可能需要O(1)時間。 但是,如果每個元素需要單獨清理,則將花費O(N + K)時間: O(N)表示訪問每個元素的成本, O(K)表示訪問每個列表的成本。

暫無
暫無

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

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