我正在尝试使用Python的heapq来实现Dijkstra的算法。该算法需要改变一个单元格的值,如果发现一条较短的路径导致它。python heapq替换优先级
我做了这个检查:
if curr_cell[0] + val < prev_cell[0]: # value of new path is less than old value
new_cell = (curr_cell[0] + val, prev_cell[1], curr_cell[1])
heap[index] = new_cell
heapify(heap)
然而,在一个更大的迷宫运行我的程序时,这是需要很长的时间,可能是因为heapify()
通话。
更改堆入口优先级的更有效方法是什么?
您能否帮我理解itertools.count()的用法。我不太明白。 – MarksCode
'itertools.count()'只是产生连续的数字。将计数添加到像[[priority,count,task]]这样的条目可以确保具有相同优先级的条目按照它们的添加顺序进行处理。我想,你可以跳过Dijkstra算法。 –
嗨尤金,我已经在官方文档中检查过了,但我有一个问题。这个实现不是以堆的大小来衡量吗?如果您经常更新优先级,是不是会使堆大小变大?有没有更有效的方式来使用heapq中的私有方法? – SilverSlash