实现优先级队列有哪些不同的方法?
What is the different ways to implement Priority queue?
优先级队列有哪些不同的实现方式?
我读到:
优先队列可以看作:
视图 1:优先队列作为有序列表。
视图 2:优先级队列作为一个集合。
它们有什么区别?
只是接口和行为构成了优先级队列。您可以按照自己喜欢的任何方式实施它。只要接口和行为相同,实现的种类对客户来说根本就无关紧要。
各种方法的差异主要是对性能或内存使用的影响。例如,当使用排序数组作为底层数据结构时,当 adding/removing 项 to/from 队列时可能需要重新组织整个数组,而使用链表时相同的操作相对便宜.
数据结构和算法的属性将传播到客户端。您必须通过分析最频繁的操作等来选择适合您的用例的实现。
我不认为基于集合的实现很适合这个,因为集合只允许唯一的项目。就像优先级队列一样,有不同的 Set 实现具有不同的属性,但通常,一个集合是无序的,您可能必须查看每个项目才能确定哪个是队列中的下一个。但同样:如果项目的唯一性适合您的用例,您可以使用它。但我宁愿将这样的实现命名为 PrioritySet 或 UniquePriorityQueue 以将属性传达给客户端。
优先级队列有哪些不同的实现方式?
我读到:
优先队列可以看作:
视图 1:优先队列作为有序列表。
视图 2:优先级队列作为一个集合。
它们有什么区别?
只是接口和行为构成了优先级队列。您可以按照自己喜欢的任何方式实施它。只要接口和行为相同,实现的种类对客户来说根本就无关紧要。
各种方法的差异主要是对性能或内存使用的影响。例如,当使用排序数组作为底层数据结构时,当 adding/removing 项 to/from 队列时可能需要重新组织整个数组,而使用链表时相同的操作相对便宜.
数据结构和算法的属性将传播到客户端。您必须通过分析最频繁的操作等来选择适合您的用例的实现。
我不认为基于集合的实现很适合这个,因为集合只允许唯一的项目。就像优先级队列一样,有不同的 Set 实现具有不同的属性,但通常,一个集合是无序的,您可能必须查看每个项目才能确定哪个是队列中的下一个。但同样:如果项目的唯一性适合您的用例,您可以使用它。但我宁愿将这样的实现命名为 PrioritySet 或 UniquePriorityQueue 以将属性传达给客户端。