对于我的任务,我一直在研究satnav系统,我正在使用邻接列表来存储所有的映射数据。
我因此想为我的路径规划功能实现dijkstras算法,但我需要首先实现最小优先级队列。可以使用常规堆来执行此操作,还是需要二进制堆?
答案 0 :(得分:2)
似乎你的意思是regular heap
作为用于动态内存分配的内存区域。该术语与术语heap
无关,因为数据结构(二进制堆是特殊情况),它代表一组值,以特定方式排序
答案 1 :(得分:0)
您可以非常轻松地实现具有常规(基于数组)堆的最小优先级队列,但Dijkstra的算法需要支持其他操作:您必须能够找到任何给定项并动态降低其优先级。 / p>
基于数组的堆通常不会找到除root之外的任何项目的有效方法,因此您需要添加一种方法来执行此操作。
一种简单的方法是维护第二个数组,其中包含堆数组中每个项目的索引(如果项目不在堆中,则为-1)。每当添加,删除或交换堆项时,都必须更新此数组。