Алгоритм сопоставления строк - PullRequest
2 голосов
/ 13 января 2012

Скажите, у меня есть 3 строки.А затем еще 1 строка.
Существует ли алгоритм, который позволил бы мне определить, какая из первых 3 строк соответствует 4-й строке наиболее?
просто пытаюсь найти самое близкое соответствие.
И если алгоритм уже существует в STL, это было бы неплохо.

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 13 января 2012

Вы не указываете, что именно вы подразумеваете под «наиболее соответствует», поэтому я предполагаю, что у вас нет точных требований. В этом случае расстояние Левенштейна в разумной метрике. Просто вычислите расстояние Левенштейна между каждой из трех струн и четвертой и выберите ту, которая дает наименьшее расстояние.

1 голос
/ 13 января 2012

Вы можете реализовать алгоритм Расстояние Левенштейна , это очень хорошая мера того, насколько близко совпадение между двумя строками у вас есть.Он измеряет, сколько нажатий клавиш нужно сделать, чтобы превратить одну строку в другую.Вы можете найти реализацию C ++ здесь .

Вычислить расстояние Левенштейна между строкой # 4 и тремя имеющимися у вас строками.Выберите строку с наименьшим расстоянием.

0 голосов
/ 13 января 2012

У вас есть приблизительная проблема соответствия строк.В зависимости от того, какой тип соответствия вы хотите выполнить, вы будете использовать другой алгоритм.Их много .. SOUNDEX , Яро-Винклер , Расстояние Левенштейна , метафора ... и т.д. Что касается STL, я не знаю каких-либо функций, которые реализуютэти алгоритмы, но вы можете посмотреть здесь для некоторого источника с использованием C ++.Кроме того, обратите внимание, что если вы получаете свои строки из базы данных, очень вероятно, что ваш движок базы данных реализует некоторые из этих алгоритмов (скорее всего, SOUNDEX).

0 голосов
/ 13 января 2012

В STL ничего не готово, но вам нужна какая-то строковая метрика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...