Java 是否可以使用堆实现最小优先级队列,或者是否需要二进制堆?

Java 是否可以使用堆实现最小优先级队列,或者是否需要二进制堆?,java,algorithm,data-structures,heap,priority-queue,Java,Algorithm,Data Structures,Heap,Priority Queue,在我的任务中,我一直在研究卫星导航系统,我使用邻接列表来存储所有的地图数据 因此,我想为我的路径规划函数实现dijkstras算法,但我需要首先实现一个最小优先级队列。使用常规堆可以做到这一点,还是需要二进制堆?您的意思似乎是将常规堆作为用于动态内存分配的内存区域。此术语与术语堆作为数据结构(二进制堆是特殊情况)无关,它表示一组值,以特定方式排序您的意思似乎是常规堆作为用于动态内存分配的内存区域。这个术语与术语堆没有关系,因为它是数据结构(二进制堆是特殊情况),它表示一组值,以特定的方式排序您可

在我的任务中,我一直在研究卫星导航系统,我使用邻接列表来存储所有的地图数据


因此,我想为我的路径规划函数实现dijkstras算法,但我需要首先实现一个最小优先级队列。使用常规堆可以做到这一点,还是需要二进制堆?

您的意思似乎是将
常规堆
作为用于动态内存分配的内存区域。此术语与术语
作为数据结构(二进制堆是特殊情况)无关,它表示一组值,以特定方式排序

您的意思似乎是
常规堆
作为用于动态内存分配的内存区域。这个术语与术语
没有关系,因为它是数据结构(二进制堆是特殊情况),它表示一组值,以特定的方式排序

您可以很容易地用常规(基于数组的)堆实现最小优先级队列,但是Dijkstra的算法需要支持一个额外的操作:您必须能够找到任何给定的项目并动态降低其优先级

基于数组的堆通常不会提供一种有效的方法来查找除根以外的任何项,因此需要添加一种方法


一种简单的方法是维护第二个数组,该数组包含堆数组中每个项的索引(如果该项不在堆中,则为-1)。无论何时添加、删除或交换堆项,您都必须更新此数组。

您可以非常轻松地使用常规(基于数组的)堆实现最小优先级队列,但Dijkstra的算法需要支持其他操作:您必须能够找到任何给定项并动态降低其优先级

基于数组的堆通常不会提供一种有效的方法来查找除根以外的任何项,因此需要添加一种方法

一种简单的方法是维护第二个数组,该数组包含堆数组中每个项的索引(如果该项不在堆中,则为-1)。无论何时添加、删除或交换堆项,都必须更新此数组。

相关(可能重复?):相关(可能重复?):