Я пытался некоторое время оптимизировать собственную реализацию алгоритма поиска A * и в итоге немного изменил алгоритмическую часть.Скорость упрощения 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))
Я знаю об использовании очередей кучи, но это не в центре внимания этого вопроса.
* Мне было интересно, будет ли этот подход быстрее обычного A * или нет *: Почему вы не просто его протестировали? – sloth
Уход за разъяснениями, которые вы внесли, и аргументация позади них? –
Также что такое «обычный A *»? Я не думаю, что существует конкретная эталонная реализация. – poke