我正在構建一個離散事件模擬器。維基百科提到,有幾個通用優先級隊列很適合在DES中使用。具體來說,它提到日曆隊列是一個很好的結構。我發現了一個提到日曆隊列的pdf(從1988年開始),但大多數情況下我都找不到關於它們的其他內容。有人會介意解釋日曆隊列是什麼,它們是如何使用的,以及在哪裏可以找到示例實現?什麼是日曆隊列?
什麼是日曆隊列?
回答
定義由NIST:
具有快速優先級隊列執行N各自水桶寬度w,或覆蓋瓦特時間。具有比當前優先級更高的項目進入桶(p/w)%N。選擇N並且每個存儲桶中只有少量項目。保持項目在桶內分類。如果項目數量增加或減少很多,則將N加倍或減半並更改w。
Paul E. Black,「日曆隊列」,在Dictionary of Algorithms and Data Structures [在線],Vreda Pieterse和Paul E.Black,eds。 24 2005年1月(2014年3月10日訪問),可從:http://www.nist.gov/dads/HTML/calendarQueue.html
是的,Brown 1988是我知道的第一篇描述日曆隊列的文章,雖然布朗我在他之前的幾位作者。以下是日曆隊列文獻的相對完整的參考書目以及每篇論文的筆記。如果您想要任何出版物的副本,請給我留言。
- Vaucher 1975比較事件列表算法。介紹三種新算法。啓發布朗1988。
- Henricksen 1977和事件列表算法 - 適應的間隔時間,並用數分佈的基礎上,Vaucher和杜瓦爾
- 烏爾裏希1978 Brown1988聲稱這是O(1),除了溢出列表
- 瓊斯表現良好1986年比較優先級隊列,具有日曆隊列的早期版本
- 布朗1988年推出日曆隊列[又名:分類學科的日曆隊列]
- 戴維森1989年發現的一樣,提到了一些重要的改進,布朗承認在改進同一封信,並有自己的一些想法。 Davison建議Jones 1986提供了一些有價值的日曆機制
- Ronngren 1991 The Lazy Queue。一個擁有近遠遠未來的日曆隊列 - 這可以實現延遲排序,從而在測試中大幅提高速度
- Steinman 1994 Event Horizon。生成的事件發生時具有一定的概率分佈,讓我們用它來確定需要排序的內容。允許並行模擬
- Steinman 1996 Event Horizon第2部分。將Steinman1994應用於事件列表管理。修改用於CQ的其他數據結構。
- Ronngren 1997比較許多不同的日曆隊列。 Lazy Queue表現不錯,但Brown1988經常表現更好。 LazyQ和SCQ的最壞情況表現不好,偏斜堆和Sply樹的最壞情況。
- 哦1997年動態懶惰日曆隊列。通過不均勻事件分佈提高常規CQ的性能
- Oh 1999動態日曆隊列。適用於不均勻分佈
- Cazzolla 1998帶分析功能的Lazy Queue的Java實現(不是學術論文)。
- Tan 2000 SNOOPy:通過最佳運行參數CQ進行統計增強。使用統計測試來製作一個桶。在某些情況下,運行速度比DCQ和CQ快100倍
- Hui論文描述Hui 2002論文的許多細節以及其他日曆隊列實施的利弊
- Hui 2002未來事件不需要現在排序;因此,優先級隊列本身的大小可能會受到限制,從而減少調整大小的開銷。
- Goh 2003 MList。多層鏈接列表消除了調整大小的操作。實驗顯示比Calendar Queue,Dynamic CQ,SNOOPy CQ,兩層動態延遲CQ和三層延遲隊列至少快100%Sangsukone 2003 CQ中優化的剷鬥寬度。演示了剷鬥寬度會對性能產生重大影響。
- Goh 2004 DSplay。消除昂貴的調整大小操作。至少比其他日曆隊列快100%。
- 唐2005梯隊。即使在具有無限變化的隊列分佈下也能提供穩定的O(1)性能。類似於Lazy Queue,但更好。
- 嚴2006年緩慢的日曆隊列。當事件大多按順序插入時,可以使用一些統計屬性來實現2階加速。Himmelspach 2007事件具有持續時間 - 不在主要研究範圍內。需要額外的功能,這種算法提供了它,但可能有限的後續工作。
此外,我們最近完成了描述布朗算法的一個變體,它應該表現更好。描述是,我認爲這篇文章提供了一個實現和示例代碼的充分的充分性。該出版物標題爲雷曼,基恩和巴恩斯的Trading Space for Time: Constant-Speed Algorithms for Managing Future Events in Scientific Simulations
,應該在今年秋季的某個時候編入索引。如果您想要一份副本,請發表評論,我會將其發送給您。
要回答問題的不同部分,您可以將日曆隊列視爲優先級隊列,該優先級隊列針對優先級不斷降低的事件進行了優化。通常情況下,事件的優先次序(時間)以某種方式分類,以避免必須觸及所有事件才能插入一個事件(可能會發生在某些形式的堆管理中)。
嗨,理查德,我不認爲我可以要求你的論文副本嗎?我正在研究這樣一個問題,我沒有意識到這方面還在進行研究!儘管我已經閱讀了一些較舊的論文。我明白如果你無法做到這一點,但我只是想我會問 - 一切順利,Kevin – tentimes 2012-11-16 13:24:40
我讀到Cron實現了Franta和Maly的算法,你認爲Cron可能能夠利用這項新研究? – CMCDragonkai 2015-05-28 18:39:15
@CMCDragonkai,你有鏈接嗎? – Richard 2015-05-28 19:59:07
- 1. 什麼是「呼叫隊列」?
- 2. 什麼日曆集成是可能的?
- 3. 什麼是Android 4.0的日曆API?
- 4. 爲什麼從隊列(雙端隊列)
- 5. 此隊列屬性(iOS音頻隊列)的含義是什麼?
- 6. 什麼是隊列長度峯值
- 7. 什麼是Firebase隊列的用例?
- 8. 隊列的符號是什麼?
- 9. 什麼是HBase壓縮隊列大小?
- 10. 指定什麼類型的隊列是
- 11. 什麼是Finalizer隊列和Control + ThreadMethodEntry?
- 12. 什麼是Java等效C#隊列
- 13. 什麼是隊列屬性在dispatch_queue_create
- 14. MassTransit中的總線隊列是什麼?
- 15. 冷凍日曆 - 爲什麼?
- 16. 隊列有什麼問題?
- 17. 死信隊列和退隊隊列有什麼區別?
- 18. 什麼是前端車隊?
- 19. C++中的遍歷隊列
- 20. 我爲什麼會得到需要登錄日曆列表查詢而不是日曆查詢
- 21. 什麼決定Azure隊列中的列?
- 22. 什麼是從簡歷墊
- 23. MSTest的歷史是什麼
- 24. 樹遍歷還是什麼?
- 25. 什麼是歷史學家?
- 26. 管理大型「工作隊列」/「輸入隊列」的最佳方法是什麼?
- 27. 不是ruby隊列線程安全爲什麼隊列不同步?
- 28. 什麼是更快的一個併發隊列或8個無鎖隊列?
- 29. 什麼樣的隊列是列表和字典?
- 30. 什麼是Microsoft消息隊列(MSMQ)?它是如何工作的?
謝謝 - 儘管從描述來看,它好像只是一堆均勻分佈的優先級隊列。 – fbl 2011-05-14 22:43:23