Я хочу реализовать простую функцию автозаполнения для веб-сайта. Сначала я хотел использовать структуру данных префикса Trie для этого, и именно так обычно работает автозаполнение, вы вводите префикс и можете искать в Trie возможные суффиксы, однако владелец продукта хочет обработать слова, которые находятся в середине, как хорошо.
Позвольте мне объяснить, что я имею в виду. Представьте, что у меня есть эти названия продуктов:
- плитка для ванной
- плитка для гостиной
- кухонная плитка
- кухонная плитка, черная
- какая-то другая плитка, зелёная
Пользователь ищет «плитку», и он увидит первые 2 результата только в том случае, если я использую трификсный префикс, но я хочу, чтобы все эти результаты всплыли, однако я не знаю какой-либо эффективной структуры данных, чтобы справиться с этим , Можете ли вы предложить что-нибудь? Можно ли изменить префикс Trie для этого?
Я думал о некоторых модификациях, таких как вставка всех суффиксов и т. Д., Но они дадут неправильные результаты, например, я вставил суффиксы для
- кухонная плитка, черная
- какая-то другая плитка, зелёная
и сохранил префиксы в первом узле для каждого суффикса (что-то вроде декартового произведения), чтобы я мог получить результат «какой-то другой плитки, черной», которой не существует. Так что это решение плохо. Также это решение будет использовать много памяти ...