簡體   English   中英

計數排序O(n+K)時間復雜度如何證明K是輸入范圍?

[英]How to prove that K is the range of inputs for O(n+K) time complexity for counting sort?

如何證明 K 是輸入的范圍? 怎么會和最大元素一樣呢? 使用 geeksforgeeks 作為參考,其中 K 是輸入范圍: https://www.geeksforgeeks.org/counting-sort/ 如果我有一個 5、7、6 的列表,K 是什么?

我的邏輯是如果我有一個 5、7、6 的列表。然后我創建一個 0 到 2 的數組:[0][1][2]。 因為范圍是 5 到 7,所以所有的位置都將存儲在一個位置 + 與最小數字的差值。 如果找到或找不到數字,我將在哪里存儲 0 和 1。 然后,當我檢索值時,我總是添加最小的數字,在這種情況下為 5。 在這種情況下,索引 1 處有一個 0,索引 2 處有一個 1。將 2 和 5 相加得到 K:7。

感覺就像我錯過了什么。

如何證明 K 是輸入的范圍? 怎么會和最大元素一樣呢?

這不必與最大元素相同。 它可以更小或更大。

...它說 K 是輸入的范圍

這是真實的。

如果我有一個 5、7、6 的列表,K 是什么?

需要至少為 max(input) − min(input) + 1。在您的示例中,=3

我制作了一個 0 到 2 的數組:[0][1][2]。

這是正確的方法,它表明您需要 3 個插槽,這正是問題所在。 您總是希望將 map 的輸入范圍縮小到范圍 [0,...,−1]。

將 2 和 5 相加得到 K:7。

不,這沒有關系。 這是關於您需要執行的從 [0,...,−1] 范圍到實際輸入范圍的反向映射。

時間復雜度為 O(+),因為算法需要迭代輸入值 () 並且需要迭代 [0,...,−1] 范圍內的“桶”(計數器)。 如果輸入的數字都是不同的,那么你可以簡化並說復雜度是 O(),那么 ≤。

暫無
暫無

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

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