Java中的Min Heap和Max Heap实现

时间:2012-01-25 17:47:33

标签: java data-structures

我想知道java是否有任何可以帮助我实现minheap和maxheap实现的集合。 我知道我可以使用PriortyQueue数据结构来实现maxheap。 我们可以将它们用于minheap吗?如果是,怎么样?

谢谢, 马南

2 个答案:

答案 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