У меня есть сценарий, в котором пользователь может отправлять несколько ответов или фраз через поле формы. Я хотел бы иметь возможность ответить и определить, о чем они просят. Например, если пользователь вводит в автомобиль, поезд, велосипед, реактивный самолет .... Я могу предположить, что они говорят о транспортном средстве и отвечают соответственно. Я понимаю, что я мог бы использовать оператор switch или, возможно, регулярное выражение, тем не менее, чем больше число возможных ответов, тем менее эффективными будут вычисления. Мне интересно, есть ли эффективный алгоритм для сравнения строки с группой строк. Любая информация будет полезной.Самый эффективный алгоритм для сравнения строки с группой строк
ответ
Возможно, вы захотите изучить Aho-Corasick algorithm. Если у вас есть набор строк, которые вы хотите найти, вы можете потратить линейное время на препроцессию на эти строки, и с этого момента вперед можно в O (n) время проверить все возможные совпадения этих строк в текстовом корпусе длины n. Другими словами, с небольшим периодом предварительной обработки, чтобы настроить алгоритм один раз, вы можете чрезвычайно эффективно сканировать множество входных данных снова и снова, ища эти ключевые слова.
Интересно, что алгоритм был специально изобретен для создания быстрого индекса (то есть для поиска множества разных ключевых слов в огромном тексте) и предположительно превосходил другие методы в десять раз. Я думаю, что это будет отлично работать в вашем приложении.
Надеюсь, это поможет!
Если у вас есть большое количество «волшебных» слов, я бы предложил разделить запрос на слова и использовать хэш-поиск, чтобы проверить, распознаются ли слова.
Интересно, что если вы сравните мой подход и ваш подход, то, что вы предлагаете, является обобщением алгоритма Рабина-Карпа, и то, что я предлагаю, является обобщением Кнута-Морриса-Пратта. :-) – templatetypedef
Вы можете проверить структуру Trie. Я думаю, что это одно из лучших решений для вашей проблемы.
- 1. Какой самый эффективный алгоритм для замены строк?
- 2. Эффективный алгоритм сортировки строк
- 3. Самый эффективный алгоритм алгоритма Маркова
- 4. Самый быстрый/самый эффективный способ сравнения двух массивов строк Javascript
- 5. Каков наиболее эффективный алгоритм для сравнения большого количества строк?
- 6. Эффективный алгоритм для сравнения узлов XML
- 7. Эффективный алгоритм для сравнения только обновленных списков
- 8. Эффективный алгоритм поиска строк?
- 9. Эффективный алгоритм для конкатенации строк с перекрытием
- 10. Самый быстрый алгоритм для поиска строки в массиве строк?
- 11. Аналогичный алгоритм сравнения строк
- 12. Самый эффективный алгоритм для нахождения всех комбинаций
- 13. Самый эффективный алгоритм для создания карты сайта?
- 14. самый эффективный алгоритм для установки двойного указателя
- 15. Самый эффективный метод поиска строк
- 16. Эффективный алгоритм поиска для поиска повторяющихся строк
- 17. Алгоритм для сравнения подобия идей (как строки)
- 18. Самый эффективный способ строк MySQL?
- 19. Эффективный алгоритм сравнения частей списков, содержащих наборы
- 20. Самый эффективный способ сравнения переменных? C#
- 21. Самый эффективный способ конкат-строк
- 22. Самый эффективный алгоритм для синтаксического анализа и сравнения строковых ключей в java
- 23. Эффективный алгоритм для нахождения перекрытий строк
- 24. Levenshtein Алгоритм сравнения расстояний/строк для фраз
- 25. Самый элегантный алгоритм сравнения изображений и изображений
- 26. Runtime Эффективный алгоритм для проверки столкновений строк с ограниченной памятью
- 27. Каков наиболее эффективный способ сравнения двух строк?
- 28. Самый эффективный способ визуализации сложных строк таблицы?
- 29. Эффективный алгоритм для переименования
- 30. Что такое алгоритм сравнения строк VBA?
Увлекательный. Я начинаю подозревать, что FSM - это одна из самых недооцененных концепций в области информатики. –
@ SeanU- Я люблю автоматы. Они просто великолепны. Ахо-Корасик определенно недооценен. – templatetypedef