我最近剛剛啓動了一個已經編寫了一些代碼的項目。我決定研究他的實現,發現他實現了一個帶有單鏈表的優先級隊列。什麼時候優先在堆上使用單鏈表實現優先級隊列?
我對SLL的理解是,因爲您可能需要遍歷整個列表,所以實現它是低效的,這就是爲什麼堆首選的原因。但是,也許我錯過了某種背後的推理,並想知道是否有人曾經爲堆優先級隊列選擇過SLL的SLL?
我最近剛剛啓動了一個已經編寫了一些代碼的項目。我決定研究他的實現,發現他實現了一個帶有單鏈表的優先級隊列。什麼時候優先在堆上使用單鏈表實現優先級隊列?
我對SLL的理解是,因爲您可能需要遍歷整個列表,所以實現它是低效的,這就是爲什麼堆首選的原因。但是,也許我錯過了某種背後的推理,並想知道是否有人曾經爲堆優先級隊列選擇過SLL的SLL?
There is SLL優於堆實現優先隊列的情況。例如:
alarm()
系統調用版本。我根本買不起O(log n)查找時間。與此相關的是,您需要一次刪除多個元素。從SLL中移除k個元素需要O(k)個時間,而需要O(k log n)個時間來處理堆。大學時我被告知我們使用鏈表的唯一原因是幫助我們理解指針。
這對他們來說是一種有效的教育用途,但是他們確實在現實世界中有一些很好的屬性,使它們成爲某些目的的首選數據結構。 –
即使實現二項堆,您也可以學習使用指針。 – Heisenbug
優先級隊列必須支持插入,刪除和更改元素的優先級。一個好的實現將在O(log n)時間(簡單堆)或更好(二項堆,斐波那契堆)中執行任何這些操作。 「他的」實施是否有像這樣的運行時間?回答這個問題,你會回答你自己的問題。 – Nemo