use*_*700 4 c++ stl priority-queue prims-algorithm decrease-key
我正在尝试实现Prim的算法,为此我需要为优先级队列使用reduceKey方法(以更新优先级队列中的键值).我可以在STL优先级队列中实现吗?
如果它有帮助,这是我遵循的算法:
我不认为你可以在STL容器中实现它.记住你总是可以根据vector编写自己的堆(优先级队列),但有一个解决方法:
让我们说,保持距离d
.在优先级队列中,您可以放置成对的距离和此距离的顶点索引.当你需要从队列中删除一些值时,不要删除它,只需更新d
数组中的值并将新对放入队列.
每次从队列中获取新值时,请检查对中的距离是否实际上是好的,就像在数组中一样d
.如果不理睬它.
时间相同O(MlogM).内存为O(MlogM),其中M是边数.
还有另一种方法:使用RB-Tree,它可以插入和删除O(logN)中的键,并获得最小值.您可以在std::set
容器中的RB-Tree的STL中找到实现.
但是,虽然时间复杂度相同,但RB-Tree的工作速度较慢且隐藏常数较大,因此可能会稍微慢一些,即appx.慢5倍.当然,取决于数据.
归档时间: |
|
查看次数: |
4777 次 |
最近记录: |