Алгоритм для преобразования одного слова другому через допустимые слова

Я столкнулся с этим изменением проблемы расстояния редактирования:

Разработайте алгоритм, который преобразовывает исходное слово к выходному слову. например: от главы к хвосту, на каждом шаге, просто можно заменить один символ, и слово должно быть допустимым. Вам дадут словарь.

Это ясно - изменение проблемы расстояния редактирования, но в расстоянии редактирования я не забочусь о том, если слово допустимо или нет. Таким образом, как я добавляю это требование для редактирования расстояния.

43
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

Это можно смоделировать как проблему с графом. Вы можете думать о словах как об узлах графа, и два узла связаны тогда и только тогда, когда они имеют одинаковую длину и отличаются одним символом.

Вы можете предварительно обработать словарь и создать этот график, который должен выглядеть так:

   stack  jack
    |      |
    |      |
   smack  back -- pack -- pick

Затем вы можете получить отображение слова на узел, представляющий слово, для этого вы можете использовать хэш-таблицу, сбалансированную по высоте BST .. .

После того, как у вас есть указанное выше отображение, все, что вам нужно сделать, это посмотреть, существует ли путь между двумя узлами графа, что легко можно сделать с помощью BFS или DFS.

Итак, вы можете резюмировать алгоритм как:

preprocess the dictionary and create the graph.
Given the two inputs words w1 and w2
if length(w1) != length(w2)
 Not possible to convert
else
 n1 = get_node(w1)
 n2 = get_node(w2)

 if(path_exists(n1,n2))
   Possible and nodes in the path represent intermediary words
 else
   Not possible
46
ответ дан 26 November 2019 в 23:00
поделиться

Вы действительно должны взглянуть на Memcached (превосходная поддержка php .)

Еще одним хорошим вариантом является настройка Squid Cache Server .

-121--4435153-

Я рекомендую посмотреть демонстрацию CSS Ninja Font Dragr , которая, хотя и предназначена главным образом для демонстрации файлового API для HTML5 с помощью Firefox, также использует автономное место хранения.

Если ничего другого, этот парень знает свои вещи и может предложить хорошие примеры.

-121--3690462-

Я не думаю, что это расстояние редактирования.

Я думаю, что это можно сделать с помощью графика. Просто постройте график из словаря и попытайтесь перейти с помощью любимого алгоритма прохождения графа к месту назначения.

2
ответ дан 26 November 2019 в 23:00
поделиться

Графовый подход codaddict действителен, хотя для построения каждого графа требуется O (n ^ 2) времени, где n - количество слов заданной длины . Если это проблема, вы можете построить bk-tree гораздо более эффективно, что позволяет находить все слова с заданным расстоянием редактирования (в данном случае 1) целевого слова.

13
ответ дан 26 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: