Я уверен, что вы все слышали об «игре в слова», где вы пытаетесь изменить одно слово на другое, меняя одну букву за раз и пропуская только действительные английские слова. Я пытаюсь реализовать алгоритм A * для его решения (просто для того, чтобы конкретизировать мое понимание A *), и одна из вещей, которая необходима, - это эвристика минимального расстояния.
То есть минимальное количество одной из этих трех мутаций, которые могут превратить произвольную строку a в другую строку b:
1) Поменять одну букву на другую
2) Добавить одну букву в месте до или после любой буквы
3) Удалить любую букву
Примеры
aabca => abaca:
aabca
abca
abaca
= 2
abcdebf => bgabf:
abcdebf
bcdebf
bcdbf
bgdbf
bgabf
= 4
Я перепробовал много алгоритмов; Я не могу найти тот, который дает фактический ответ каждый раз. На самом деле, иногда я не уверен, что даже мои человеческие рассуждения находят лучший ответ.
Кто-нибудь знает какой-либо алгоритм для такой цели? Или, может быть, может помочь мне найти один?
(Просто чтобы уточнить, я прошу алгоритм, который может превратить любую произвольную строку в любую другую, не учитывая их английскую достоверность.)