簡體   English   中英

鏟斗分類的復雜程度如何才是O(n + k)?

[英]How could the complexity of bucket sort is O(n+k)?

在說“之前已經被問過”或“找到算法書”之前,請繼續閱讀並告訴我,我的推理部分出了什么問題?

假設你有n個整數,並且你將它們分成k個分區,這將花費O(n)時間。 但是,需要對每個k bin進行排序,如果對每個bin使用快速排序這是一個O((n / k) log(n / k))操作,那么這一步將需要O(n log(n / n) K)+ K)。 最后需要組裝這個數組,這需要O(n + k),(參見這篇文章 ),所以總操作將是O(n + n log(n / k)+ k)。 現在,這個n log(n / k)是如何消失的,我完全無法想象。 我的猜測是有一些數學可以消除這個n * log(n / k)。 有人可以幫忙嗎?

你的假設:

  • k - 桶的數量 - 是任意的

是錯的。

存儲桶排序有兩種變體,因此非常混亂。


一種

存儲桶的數量等於輸入中的項目數

這里的分析


桶的數量等於R - 輸入整數的可能值的數量

請參見此處此處的分析

您的缺陷是假設快速排序用於對鏟斗進行分類。 通常情況並非如此,這就是你如何避免(n / k) log(n / k)條款。

你的分析看起來不錯。 術語Bucketsort用於許多不同的算法,因此根據您查看的算法,其平均運行時間可能是O(n + k)。

如果我不得不猜測,你可能已經看過一個典型的變體,其中一個選擇k非常大,因此n / k將是一個常數。 在另一個流行的變體中甚至是k >> n,所以一個分為k / n桶。

如果你提供詳細的算法和聲稱這是平均O(n + k)的來源我可以重新審視我的答案。

暫無
暫無

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

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