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. 查看Pydev中的隊列項目debug
- 2. 查找循環中列表的索引
- 3. 循環查找VBA列中的字母
- 4. PHP + MySQL的循環隊列
- 5. 循環隊列的缺點?
- 6. jQuery的循環隊列
- 7. 循環隊列和循環鏈表
- 8. pthread_cond_wait fifo循環隊列中的死鎖
- 9. WH_KEYBOARD的SetWindowsHookEx卡在循環/隊列中
- 10. 消息隊列循環
- 11. 隊列和While循環
- 12. 檢測併發隊列中的循環循環
- 13. 上傳前檢查隊列項目?
- 14. 查找列表中的最大項目
- 15. 查找多個列表中的項目?
- 16. 查找列表中的項目?
- 17. 查找列表中的列隊元素
- 18. 查找循環圖
- 19. VBA查找循環行和列內
- 20. 作爲「FIFO隊列」的Javascript循環緩衝區隊列實現
- 21. 線性隊列和循環隊列之間的區別
- 22. Python for循環:索引列表中的一個項目列表
- 23. 從通用列表中查找項目
- 24. Sequelize - 在列中查找項目
- 25. 在嵌套列表中查找項目
- 26. 從隊列的中間刪除項目?
- 27. Tkinter:等待隊列中的項目
- 28. 查找在隊列中的最小值,並從隊列
- 29. C#在隊列中添加新項目到隊列中
- 30. 重新循環for循環中的數組項目
請更多信息。什麼語言/圖書館? – 2009-06-05 13:34:25
不是特定於任何lang,而是一般隊列搜索問題。 – Dhana 2009-06-05 13:36:18
愚蠢的問題:你能否在常量時間訪問隊列中的任何元素(比如數組)還是更像是一個鏈表,你必須遍歷每個元素? – 2009-06-05 13:38:44