我以前也被这个绊倒了。这里的瓶颈实际上是if neighbor in closedlist
。
该in语句是如此易于使用,你忘记了它是线性搜索,而当你在列表上进行线性搜索时,它的添加速度很快。你可以做的是将closedlist
转换为set对象。这样可以保留其项目的哈希值,因此in操作员的效率比列表高得多。但是,列表不是可散列的项目,因此你必须将配置更改为元组而不是列表。
如果的顺序对closedlist
算法至关重要,则可以为in运算符使用一个集合,并为结果保留一个并行列表。
我尝试了一个简单的实现,包括aaronasterling
的namedtuple
技巧,它在第一个示例中的执行时间为0.2秒,在第二个示例中的执行时间为2.1秒,但是我没有尝试验证第二个较长示例的结果。