Я сделал аналогичный алгоритм некоторое время назад
Идея состоит в том, чтобы иметь массив char [255] с символами и значениями - это список хэшей слов (идентификаторов слов), который содержит этот символ
При поиске «delete ....» search (d) выдаст пустой список search (e) найдет все с символом e, включая слона (два раза, поскольку у него два «e»), поиск (l) принесетВы новый список, и вам нужно объединить этот список с результатами предыдущего шага
... в конце ввода у вас будет список, затем вы можете попытаться сделать группу по wordHash и упорядочить по desc by count
Также интересная вещь: если в вашем вводе отсутствует один или несколько символов, вы просто получите пустой список в середине поиска, и это не повлияет на эту идею
Мой первоначальный алгоритм был безупорядочение, и я хранил для каждого символа wordId и lineNumber и char позицию.Моя главная проблема заключалась в том, что я хочу найти с помощью ee, чтобы найти 'elephant' с eleant, чтобы найти 'elephant' с antph, чтобы найти 'elephant'. Каждое слово на самом деле было строкой из файла, поэтому оно часто было очень длиннымСтроки были большими, я хотел быстрый поиск каталогов с текстовыми файлами размером более 1 ГБ. Поэтому было даже сложно сохранить их в памяти, для этой идеи вам нужна функция из 3 частей, чтобы заполнить вашу кеш-функцию для поиска по символу от функции ввода до фильтра и, возможно,результаты упорядочения (я не использовал упорядочение, поскольку пытался заполнить кэш в том же порядке, в котором я читал файл, и я хотел поместить строки, содержащие входные данные, в том же порядке сверху)
Я надеюсьэто имеет смысл