2009-04-10 61 views
6

爲什麼最優先級/堆隊列實現爲0是最高優先級?我假設我錯過了一些關鍵的數學原理。由於最近我正在實現自己的優先級隊列,如果優先級與整數值一起寫入插入函數似乎更容易,但顯然人們比我更聰明,認爲它應該以其他方式。爲什麼優先級隊列大多使用0作爲最重要的優先級?

任何想法?

回答

13

最優先級隊列實現爲類似fibonacci heap什麼的。該數據結構支持在不變的時間內提取最小值,這使得自然而然的是使0成爲最高優先級,並通過提取最小值將元素從隊列中取出。

+0

學到新的東西。謝謝! – 2009-11-19 23:35:48

2

我不認爲有任何的設計理由。這可能只是因爲大多數程序員習慣於將0視爲第一個元素。另一個原因可能是因爲枚舉從0開始,因此第一個定義枚舉「最高」整數值爲0

6

如果它是不斷增加的,你怎麼可能永遠設置什麼的最高優先級? (+1 rossfab的答案:)

2

作爲一個反例,在什麼肯定是最容易獲得的一個(如果不使用)優先級隊列實現,即STL的std::priority_queue,該top()元素是根據一個數值最高operator<。當然,每個人都習慣於排序順序最低的排隊順序,因此在第一次使用它時會吸引很多人。

4

它往往是另一種方式是,優先級隊列採用了類似的Dijkstra和A *,其中優先級的節點的距離算法,並且要首先處理更接近節點的原因。

0

沒有什麼內在的有關優先級隊列,使0當務之急是更好的選擇。然而,對於編寫可重用實現的人來說,您將不得不挑選一些東西,而且無論您爲優先級使用哪種類型的積分或浮點值,定義好的0都是明確的。

即使在編寫私有實現時,如果您決定只需要256個優先級,並使用無符號字符作爲優先級,並且255是您的首要任務,那麼如果您決定要仔細查看所有代碼你需要更多的水平。