Да, это разрешено, в значительной степени по причинам, указанным в ответе mcdowella .
Однако я хотел бы добавить, что зачастую это очень хорошая идея, и оченьболее выгодно, чем подразумевается в этом ответе.Этот тип тай-брейка может привести к гораздо более значительному увеличению производительности , чем только нахождение цели чуть раньше.См., Например, эту страницу , на которой визуализируется, как A * все еще исследует довольно массивную область без прерывателя связей и только очень узкую полосу вдоль оптимального пути с прерывателем связей.
Интуитивно, вы можете понять, что он настолько эффективен, если подумать о различных уровнях «надежности» затрат G
по сравнению с H
.G
затраты очень надежны, они являются истинной правдой, это именно те затраты, которые вы действительно должны были заплатить, чтобы добраться до узла.H
затраты гораздо менее надежны, они эвристические, они могут быть совершенно неверными.Реализуя предложенный вами прерыватель связей, вы, по сути, говорите "всякий раз, когда два узла имеют одинаковое значение для F = G + H
, я предпочитаю те, которые имеют больший G
и меньший H
, чем узлы с меньшим G
ибольше H
".Это разумно, потому что, когда более надежный G
компонент F
доминирует над менее надежным H
компонентом, сам F
также будет более надежным.
Другое важное преимущество, как описано вна странице, на которую я ссылался, этот тай-брейк может избежать исследования больших частей множества разных путей, которые все равны и все оптимальны.