[英]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.