首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CHDataStructures:优先级队列?

CHDataStructures:优先级队列?
EN

Stack Overflow用户
提问于 2011-05-09 23:36:38
回答 1查看 236关注 0票数 1

我需要一个优先级队列,我猜在框架中,CHMutableArrayHeap和CHBinaryHeap可以完成这项工作,对吧?

但是,如果我将具有相同优先级的对象发送到队列,则CHMutableArrayHeap和CHBinaryHeap都无法保持它们的添加顺序。

例如,我有从obj1到obj10的对象,它们的优先级是相同的。当我将这10个对象从1到10逐个添加到队列中后,它们的位置与添加顺序不同,obj4可能会排在obj1之前。

那么,Quinn,如果我想要一个优先级队列,如果优先级是相同的,保持添加顺序,你有什么建议?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-07 12:48:36

(对不起,我几乎看不到这个问题。)

堆的本质是它根本不保留插入顺序,因此您必须(1)在另一个数据结构之上构建一个优先级队列,或者(2)用另一个跟踪插入顺序的数据结构来补充堆。但是,堆通常是实现优先级队列的最有效(也是首选)的方法,所以我不知道使用其他方法是否是个好主意。我这么说的主要原因是,您希望插入非常快,这是堆提供的;添加到排序数组则不能。

一种可能性是为每个优先级维护一个队列(例如CHCircularBufferQueue)。(我想您会想要创建一个管理队列的包装器结构,这样调用者就不必直接处理它们了。)您可以将队列存储在以包含优先级的NSNumber为关键字的字典中,但我不知道性能会是什么样子。这显然不能非常有效地扩展到非常广泛的优先级范围,并且可能不适用于大量的插入和删除,但在小型情况下可能是可行的。这只是个想法。

另一个想法是创建一个同时存储优先级和插入时间的包装类,然后按顺序比较它们。在这种情况下,您可能希望使用排序集(例如二叉树)来存储它们。但是,额外的开销意味着您不会获得与堆相同的性能,但我认为这是保持插入顺序的权衡。

更新:我发现了以下相关问题:

https://stackoverflow.com/questions/tagged/priority-queue

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5939159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档