簡體   English   中英

計數排序O(n + k)時間復雜度中的k是多少?

[英]What is k in counting sort O(n+k) time complexity?

計算排序的最差,最佳和平均時間復雜度為O(n+k) ,其中n是要排序的元素數。 k是多少? 我看到了不同的定義:最大元素,最大元素和最小元素之間的差異,等等。

  1. 給定數組arr1 [1, 3, 5, 9, 12, 7 ] arr2 [1,2,3,2,1,2,4,1,3,2]arr2 [1,2,3,2,1,2,4,1,3,2]對於arr1arr2什么是k
  2. 是因為n < k (元素值的范圍大於要排序的元素數的范圍),所以用計數排序對arr1進行排序是愚蠢的嗎?

k是鍵的范圍,即覆蓋所有可能值所需的陣列插槽數。 因此,如果是數字, Max-Min+1 當然,這假設您沒有通過將Min分配給第一個插槽,將Max分配給最后一個插槽來浪費空間。

k不超過n的小倍數時,最好使用計數排序,讓nk n.log n ,因為在這種情況下nk可以擊敗n.log n

k是數組中的最大可能值,假設您有長度為5的數組,每個數字都是0到9之間的整數,在此示例中,k等於9

首先,將k個計數的數組清零。 然后讀取數組中的n個元素,並根據n個元素的值增加k個計數的元素。 在計數排序的輸出通道上,讀取k個計數的數組,並寫入n個元素的數組。 因此,共有k次寫入(計數為零),n次讀取,k次讀取和n次寫入,總共進行2n + 2k次操作,但是大O忽略常數2,因此時間復雜度為O(n + k)。

暫無
暫無

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

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