Я хотел бы реализовать структуру данных поиска строк для динамических строк, которая будет поддерживать эффективный поиск и вставку. В настоящее время я использую попытку, но я хотел бы уменьшить объем памяти, если это возможно. Эта статья в Википедии описывает DAWG/DAFSA, который, очевидно, сэкономит много места по сравнению с сжатие суффиксов. Тем не менее, хотя он четко проверяет, является ли строка допустимой, для меня не очевидно, есть ли какой-либо способ исключить недопустимые строки. Например, используя слова «цитировать» и «кошка», где «t» и «e» обозначают терминальные состояния, DAWG/DAFSA будет выглядеть следующим образом:
c
/ \
a i
\ /
t
|
e
а «cit» и «cate» будут неправильно распознаны как допустимые строки без какой-либо метаинформации.
Вопросы:
1) Существует ли предпочтительный способ хранения метаинформации о строках/путях (например, законности) в DAWG/DAFSA?
2) Если DAWG/DAFSA несовместима с требованиями (эффективный поиск/вставка и хранение метаинформации), какую структуру данных лучше всего использовать? Минимальный объем памяти был бы хорош, но, возможно, не абсолютно необходим.