Я столкнулся с этим изменением проблемы расстояния редактирования:
Разработайте алгоритм, который преобразовывает исходное слово к выходному слову. например: от главы к хвосту, на каждом шаге, просто можно заменить один символ, и слово должно быть допустимым. Вам дадут словарь.
Это ясно - изменение проблемы расстояния редактирования, но в расстоянии редактирования я не забочусь о том, если слово допустимо или нет. Таким образом, как я добавляю это требование для редактирования расстояния.
Это можно смоделировать как проблему с графом. Вы можете думать о словах как об узлах графа, и два узла связаны тогда и только тогда, когда они имеют одинаковую длину и отличаются одним символом.
Вы можете предварительно обработать словарь и создать этот график, который должен выглядеть так:
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
Вы действительно должны взглянуть на Memcached (превосходная поддержка php .)
Еще одним хорошим вариантом является настройка Squid Cache Server .
-121--4435153-Я рекомендую посмотреть демонстрацию CSS Ninja Font Dragr , которая, хотя и предназначена главным образом для демонстрации файлового API для HTML5 с помощью Firefox, также использует автономное место хранения.
Если ничего другого, этот парень знает свои вещи и может предложить хорошие примеры.
-121--3690462-Я не думаю, что это расстояние редактирования.
Я думаю, что это можно сделать с помощью графика. Просто постройте график из словаря и попытайтесь перейти с помощью любимого алгоритма прохождения графа к месту назначения.
Графовый подход codaddict действителен, хотя для построения каждого графа требуется O (n ^ 2) времени, где n - количество слов заданной длины . Если это проблема, вы можете построить bk-tree гораздо более эффективно, что позволяет находить все слова с заданным расстоянием редактирования (в данном случае 1) целевого слова.