迪杰特斯拉算法每一步需要选取离X最近的边添加入X集合中。而求解这个最小值如果能够很高效,那么可以进一步提高算法的效率。
由于我们每一步选取最小的,因此我们可以计算出剩余节点离X中点的距离,然后用最小堆的数据结构来直接弹出最小值。最小堆求解最小值的算法复杂度为
最小堆就是一种完全二叉树,但是要保证根节点小于左右节点。最大堆则反之。这里我们介绍最小堆的创建,插入与删除过程。
创建- 先将所有元素按照二叉树结构随意插入。然后进行“自底向上调整”。假设元素为[9 3 7 6 5 1 10 2]
插入操作:先将元素插入二叉树最后,然后进行“调整”---把0调整上去
删除:将根节点删除,然后从末尾元素放在根节点位置,然后自顶向下调整
注意:最大堆基本操作相似,但是与只是比的时候是看谁大