Я читаю о Tries
широко известных деревьях префиксов и Suffix Trees
.
Хотя я нашел код для файла, Trie
я не могу найти пример для Suffix Tree
. Также у меня такое ощущение, что код, строящий a Trie
, такой же, как код для a, Suffix Tree
с той лишь разницей, что в первом случае мы храним префиксы, а во втором - суффиксы.
Это правда? Может ли кто-нибудь помочь мне прояснить это в моей голове? Пример кода будет большим подспорьем!
81
Ответы:
Дерево суффиксов можно рассматривать как структуру данных, построенную на основе дерева, в котором вместо простого добавления самой строки в дерево можно также добавить все возможные суффиксы этой строки. Например, если вы хотите проиндексировать строку banana в дереве суффиксов, вы должны построить дерево со следующими строками:
Как только это будет сделано, вы можете найти любой n-грамм и посмотреть, присутствует ли он в вашей проиндексированной строке. Другими словами, поиск n-грамм - это префиксный поиск всех возможных суффиксов вашей строки.
Это самый простой и медленный способ построить дерево суффиксов. Оказывается, есть много более причудливых вариантов этой структуры данных, которые улучшают как пространство, так и время сборки. Я недостаточно хорошо разбираюсь в этой области, чтобы делать обзор, но вы можете начать с изучения суффиксных массивов или расширенных структур данных этого класса (лекции 16 и 18).
Этот ответ также прекрасно объясняет вариант этой структуры данных.
источник
Если вы представите Trie, в которое вы помещаете суффиксы некоторых слов, вы сможете очень легко запросить у него подстроки строки. Это основная идея суффиксного дерева, в основном это суффиксное дерево.
Но, используя этот наивный подход, построение этого дерева для строки размера n будет O (n ^ 2) и потребует много памяти.
Поскольку все записи этого дерева являются суффиксами одной и той же строки, они разделяют большой объем информации, поэтому существуют оптимизированные алгоритмы, позволяющие создавать их более эффективно. Например, алгоритм Укконена позволяет создавать суффиксное дерево в режиме онлайн за время O (n) сложности.
источник
Отличие очень простое. Суффиксное дерево имеет меньше «фиктивных» узлов, чем суффиксное дерево. Эти фиктивные узлы являются одиночными символами, которые увеличивают поиск в дереве.
источник
Узлы Trie имеют ссылки на более короткий контекст, а в «Дереве» его нет. Если узлы Tree получают ссылку на более короткий контекст, тогда он обращается к Trie; o)
источник