编程语言
首页 > 编程语言> > python – 支持修改其元素的堆?

python – 支持修改其元素的堆?

作者:互联网

这是我的情景.我想实现A *(在Python中)而不必求助于线性时间最小值或在操作中.我需要一个堆才能有效地获得最低重量的项目.

我的直接反应是’简单!我会用heapq!’然后我发现生活很少像我们希望的那样简单.事实证明,这种策略对于A *的关键点之一来说并不是最理想的.在考虑孩子时,我需要偶尔更新已经在堆上的孩子的分数.

对于那些A *的记忆稍微过时的人来说,它的要点是我想要一个元素,修改它的权重,并修改堆以反映变化,所有都在亚线性时间内.

有什么建议?

解决方法:

出于复杂性目的,您可能希望尝试二项式或Fibonacci堆;似乎在Python中有两种实现,但没有生产级库.但是,二进制或d-ary堆在实践中可能会更快. heapq页面提到了如何进行更新(保留对插入到堆中的项的引用,将其标记为无效,然后插入新版本).但是,有更快的算法可以在更新后维护堆属性.请查看http://en.wikipedia.org/wiki/D-ary_heap以获取用于快速更新的算法,但您可能需要在数组顶部实现自己的堆.

标签:python,heap,a-star
来源: https://codeday.me/bug/20190626/1297119.html