簡體   English   中英

此實現計數排序的時間復雜度

[英]Time complexity of this implementation of counting sort

我必須確定給定計數排序代碼的時間復雜度。 我知道計數排序應該是O(n + k),但是我看不到這個函數是O(n + k),因為第二個for循環中有一個for循環。

def counting_sort(array, k): # k is max(array)

    count = (k+1) * [0]  
    sorted = []
    for i in array:
        count[i] += 1
    for i in range(len(count)):
        if count[i] != 0:
            sorted += [i for j in range(count[i])]
    return sorted

如果元素是唯一的,最壞的情況不是n + k ^ 2嗎?

第一個循環

for i in array:
    count[i] += 1

進行n次迭代,在第二個循環中,對於列表理解,在最壞情況下執行的指令數:

i for j in range(count[i]) #

count[i] ,並且所有count[i]的總和等於n。 注意比較

        if count[i] != 0:

完成了k次,在最壞的情況下,

sorted +=...

也做了k次。 將所有這些加起來,就可以得到O(n + k)

(假設用於sorted的+ =是常數成本,否則我們必須說+ =是攤銷常數,因此結果帶有警告性)。

暫無
暫無

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

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