我想知道java是否有任何可以帮助我实现minheap和maxheap实现的集合。 我知道我可以使用PriortyQueue数据结构来实现maxheap。 我们可以将它们用于minheap吗?如果是,怎么样?
谢谢, 马南
答案 0 :(得分:2)
我认为你倒退了:堆是实现优先级队列的一种方式。至于最小/最大部分,只需编写适当的Comparator
类。
答案 1 :(得分:0)
你的抽象水平有点倒退。
堆就像一棵树(注意,它实际上不必有一棵树,而是一种将数据点与其“子”相关联的方法(更多见下文))数据结构非常节点与子节点之间的特定关系。
相比之下,优先级队列是一个更抽象的想法。它是一个队列(类似于具有FIFO数据访问模型的数据结构的列表),而不是实际上是FIFO,它首先返回最优先级的对象。
就像在堆中一样,有不同的方法来实现底层结构,在优先级队列中也可以做很多不同的事情。使用堆作为优先级队列的底层结构的好处是您不必再做任何工作。只需根据优先级堆积值,当有人请求值返回头部时。
主要区别在于堆是由树的属性和堆约束定义的,其中优先级队列仅由它与其他队列交互的方式定义。
// A note on creating heaps
// Given that A is an array of n values indexed from 1 to n
// We can model a tree like structure buy stating that for any
// value i in (1,n) it's children are 2 * i and 2 * i + 1
// So with an array you can easily model a heap in this manner