2014-09-18 5 views
-4

случайно наткнулся на это:C++ сравнить два предложения

разработать алгоритм сравнения двух предложений, чтобы увидеть, если они совпадают или нет. Ключевым аспектом этих предложений является то, что слова могут быть в любом порядке (например, «california is hot» и « hot is california» - это два предложения, которые будут соответствовать).

любые идеи?

ответ

5
  1. Parse each sentence into words, use space as delimiters.
  2. Добавить все std::string слова к std::vector<std::string>, то sort.
  3. Используйте ==operator для сравнения двух vector s для обеспечения равенства.
+0

Есть ли независимый от языка способ сделать это? –

+0

@templateboy Я только что описал относительно агностический способ сделать это, реализация будет основана на доступных классах и библиотеках на интересующем языке. – CoryKramer

+0

1. Вы говорите, что == оператор будет игнорировать порядок слов? 2. Если бы мы использовали векторную сортировку, какая была бы сложность? – user2584960

1

Возможно складывать слова в std::map<string, int> и подсчитывать элемент каждый раз, когда вы найдете слово с одной стороны, и вниз с другой стороны, то перебирать карту и убедитесь, что все элементы равны нулю. [Это предполагает, что «california hot hot» не должно быть таким же, как «hot is california», и в этом случае вам нужно немного больше логики, чтобы считать только слова в первый раз, когда вы видите их с каждой стороны]

Или поместите каждое слово в каждое предложение в std::vector<string>, затем отсортируйте каждый вектор и сравните два вектора. Опять же, стратегия меняется, если предложение должно быть распознано независимо от того, сколько раз каждое слово видно.

+0

Теоретически вам нужен только один отсортированный вектор (и N поиск по сложной системе logN), но это может быть медленнее (quicksort является весьма удобным для кеша AFAIK). – dyp

+0

И гораздо проще написать 'if (vector1 == vector2) ...', чем проверять каждый элемент. И если мы не сравним Коран с Библией или некоторые такие, это, вероятно, не будет облагать налогом современный компьютер ...;) –

+0

Использование 'unordered_map ', конечно, асимптотически быстрее, теоретически. Независимо от того, было ли это на практике быстрее, нужно было измерять. – dyp

Смежные вопросы