简化程序的速度*

2021-08-02 15:56:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试优化我自己的A*搜索算法的实现有一段时间了,结果只是改变了实际的算法部分。你知道吗

我一直在想,这种方法是否比普通的A*更快。为什么,或者为什么不?如果是这样的话,有什么理由在这个稍有不同的方法上使用正则A*?你知道吗

def find_path(a, b):
    seen = set()
    opened = set()

    parent = {}
    distance = {a: path_distance(a, b)}

    while opened:
        node = min(opened, key=lambda x: distance[x])

        if node == end:
            path = []

            while node in parent:
                path.append(node)
                node = parent[node]

            return path

        opened.remove(node)

        for neighbor in node.neighbors:
            if neighbor not in seen:
                seen.add(neighbor)
                opened.add(neighbor)

                parent[neighbor] = node
                distance[neighbor] = pathDistance(neighbor, b)

def path_distance(a, b):
    return sum(y - x for x, y in zip(a.position, b.position))

我知道如何使用堆队列,但这不是这个问题的重点。你知道吗