Учитывая предопределенный набор фраз, я хотел бы выполнить поиск по запросу пользователя. Например, рассмотрим следующий набор фраз:
index phrase
-----------------------------------------
0 Stack Overflow
1 Math Overflow
2 Super User
3 Webmasters
4 Electrical Engineering
5 Programming Jokes
6 Programming Puzzles
7 Geographic Information Systems
Ожидаемое поведение:
query result
------------------------------------------------------------------------
s Stack Overflow, Super User, Geographic Information Systems
web Webmasters
over Stack Overflow, Math Overflow
super u Super User
user s Super User
e e Electrical Engineering
p Programming Jokes, Programming Puzzles
p p Programming Puzzles
Чтобы реализовать это поведение Я использовал trie. Каждый node в trie имеет массив индексов (пустой изначально).
Чтобы вставить фразу в trie, я сначала разбиваю ее на слова. Например, Programming Puzzles
имеет index = 6
. Поэтому я добавляю 6
ко всем следующим узлам:
p
pr
pro
prog
progr
progra
program
programm
programmi
programmin
programming
pu
puz
puzz
puzzl
puzzle
puzzles
Проблема заключается в том, что когда я ищу запрос prog p
, я сначала получаю список индексов для prog
, который [5, 6]
. Затем я получаю список индексов для p
, который также является [5, 6]
. Наконец, я вычислил пересечение между ними и вернул результат [5, 6]
, что, очевидно, неверно (должно быть [6]
).
Как вы это исправите?