3
A
回答
2
如果您可以按索引訪問每個項目,則可以使用二分查找。
如果您只能看到第一個項目,您需要從隊列中彈出它們,直到搜索鍵低於剛剛彈出的項目的鍵。由於隊列已排序,只要知道密鑰不再在隊列中,就可以立即停止。
[編輯]由於可以通過索引來訪問:經紗在其中它映射到一個「陣列」(即,具有方法的對象的圓形隊列get(index)
其中index
運行從0
到length-1
的且在內部確實((index+start)%length)
這樣的話,你可以從尾部到頭部應用二進制搜索,而不考慮實際的數據佈局。
1
「最好」是一個主觀術語,循環隊列很少大到足以保證二進制搜索,所以我會選擇在沒有關於隊列大小的信息時簡單。最簡單的方法是從頭部開始,檢查每個元素,直到尾部(或者你已經按順序超越了它)來查看它是否存在。
假設您的頭部變量指向將被移除的第一個項目並且尾部指向放置項目的下一個位置。進一步假設你正在浪費一個物品槽來簡化代碼(這是一種簡化代碼並告訴空白隊列和完整隊列之間差異的技巧)。這意味着空隊列由tail == head
表示。
ptr = head
while ptr != tail:
if element[ptr] = searchvalue:
return true
if element[ptr] > searchvalue:
return false
ptr = (ptr + 1) % queuesize;
return false
0
我們可以向相反的方向穿越?也就是說,如果這樣的話,我們可以設計一些可以利用它。即決定進行搜索的方式。
由於它是有序的,我們可以猜測它的位置(只是一個猜測,或者可能利用統計數據),然後開始全面搜索,只在方向上得到更少的結果
相關問題
- 1. Azure隊列:查找項目是否在隊列中
- 2. 在隊列循環中找到最少
- 3. C++中的循環隊列
- 4. C#中的循環隊列#
- 5. 循環瀏覽列表查看項目
- 6. 查看Pydev中的隊列項目debug
- 7. 檢查python中的項目隊列
- 8. 循環隊列Python
- 9. 刪除循環中的列表項目
- 10. 查找循環中列表的索引
- 11. 循環查找VBA列中的字母
- 12. PHP + MySQL的循環隊列
- 13. beanstalkd上的循環隊列
- 14. 循環隊列的缺點?
- 15. jQuery的循環隊列
- 16. 循環隊列和循環鏈表
- 17. 循環遍歷B列在列A中查找值以查找重複項
- 18. 計數總項目 - 循環中循環
- 19. For循環檢查Selenium WebDriver中的項目列表
- 20. 如何跳出僅循環中的一個項目的循環序列,繼續循環其他項目?
- 21. WH_KEYBOARD的SetWindowsHookEx卡在循環/隊列中
- 22. Omnet中循環隊列的初始化
- 23. Silverlight中的循環隊列功能
- 24. pthread_cond_wait fifo循環隊列中的死鎖
- 25. C中的循環隊列打印
- 26. 循環隊列Python實現
- 27. 隊列和While循環
- 28. 循環隊列實現
- 29. 同步循環隊列
- 30. 循環隊列理論
請更多信息。什麼語言/圖書館? – 2009-06-05 13:34:25
不是特定於任何lang,而是一般隊列搜索問題。 – Dhana 2009-06-05 13:36:18
愚蠢的問題:你能否在常量時間訪問隊列中的任何元素(比如數組)還是更像是一個鏈表,你必須遍歷每個元素? – 2009-06-05 13:38:44