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