Ответ, который вы пометили как правильный ..
Note: when i say dictionary.. in this post, i mean hash map .. map..
basically i mean a python dictionary
Еще один способ улучшить его производительность, создав инвертированный указатель слов.
Таким образом, вместо того, чтобы вычислять расстояние редактирования для всей базы данных, вы создаете 26 словарей .. у каждого есть ключ алфавит. так что в английском языке 26 алфавитов .. так что клавиши "a", "b" .. "z"
Итак, предположим, что в вашей базе данных есть слово "яблоко"
Итак, в словаре «а» вы добавляете слово «яблоко»
в словаре "p": вы добавляете слово "apple"
в словаре "l": вы добавляете слово "apple"
в словаре «е»: вы добавляете слово «яблоко»
Итак, сделайте это для всех слов в словаре ..
Теперь, когда введено слово с ошибкой ..
скажем, aplse
вы начинаете с "а" и получаете все слова в "а"
затем вы начинаете с "p" и находите пересечение слов между "a" и "p"
затем вы начинаете с "l" и находите пересечение слов между "a", "p" и "l"
и вы делаете это для всех алфавитов.
в итоге у вас будет просто набор слов, состоящих из алфавитов "a", "p", "l", "s", "e"
На следующем шаге вы вычисляете расстояние редактирования между входным словом и набором слов, возвращаемых вышеупомянутыми шагами .. таким образом, резко сокращается время выполнения ..
теперь может быть случай, когда ничего не может быть возвращено ..
так что-то вроде "аклсе" .. есть большая вероятность, что нет слова, которое состоит только из этих алфавитов ..
В этом случае вам придется начать обратный шаг до стадии, на которой осталось конечное число слов.
Итак, что-то вроде начала с * klse (пересечение слов k, l, s, e) num (слова возвращены) = k1
затем a * lse (пересечение слов a, l, s, e) ... numwords = k2
и так далее ..
выберите то, для которого возвращено большее количество слов ... в этом случае на самом деле нет единственного ответа ... так как у многих слов может быть одинаковое расстояние редактирования ... вы можете просто сказать, что если расстояние редактирования больше "k", то нет хорошего совпадения ...
Есть много сложных алгоритмов, построенных поверх этого ..
как и после этих многочисленных шагов, используйте статистические выводы (вероятность, что слово «яблоко», когда ввод «aplse» ... и т. Д.) Затем вы идете путем машинного обучения:)