действительно трудно понять суффикс дерева - PullRequest
20 голосов
/ 05 марта 2012

Я долго искал учебники по дереву суффиксов.В SO я нашел 2 сообщения о понимании дерева суффиксов: 1 , 2 .

Но я не могу сказать, что понимаю, как его создать, Ой.В книге Скиены «Руководство по разработке алгоритмов» он говорит:

Поскольку алгоритмы построения дерева с линейным суффиксом времени нетривиальны, я рекомендую использовать существующую реализацию.

Что ж,алгоритм построения суффиксного дерева так сложно?Кто-нибудь может направить меня в правильном направлении, чтобы понять это?

В любом случае, переходя к погоне, кроме конструкции, есть еще одна вещь, которую я не понимаю в дереве суффиксов.Поскольку ребра в дереве суффиксов - это просто пара целых чисел (верно?), Задающих начальный и конечный pos подстроки, то если я хочу найти строку x в этом дереве суффиксов, как мне это сделать?Отмените ссылку на эти целые числа в дереве суффиксов, затем сравните их одно за другим с x?Не может быть так.

Ответы [ 3 ]

21 голосов
/ 05 марта 2012

Во-первых, существует множество способов построения дерева суффиксов.Существует оригинальный метод O (n) от Weiner (1973), улучшенный метод McCreight (1976), наиболее известный Ukkonen (1991/1992), и ряд дополнительных улучшений, в основном связанных с внедрением и хранением.соображения эффективности.Наиболее примечательным среди них является, пожалуй, Эффективная реализация ленивых суффиксных деревьев Гигериха и Курца.

Более того, поскольку прямое построение суффиксных массивов стало возможным в O(n) время в 2003 году (например, с использованием алгоритма Skew , но есть и другие), и поскольку существуют хорошо изученные методы для

  • эмуляции деревьев суффиксов с использованием суффиксамассивы (например, Abouelhoda / Kurtz 2004 )
  • сжатие суффиксных массивов (см. Navarro / Mäkinen 2007 для обзора)

суффиксные массивыобычно предпочтительнее суффиксных деревьев.Поэтому, если вы намерены создать высокооптимизированную реализацию для конкретной цели, вам может потребоваться изучить алгоритмы построения массивов суффиксов.

Однако, если вы заинтересованы в построении дерева суффиксов и, в частности,Алгоритм Ukkonen, я хотел бы предложить вам внимательно взглянуть на описание в этом SO посте , о котором вы уже упоминали, и мы попытаемся улучшить это описание вместе.Это, безусловно, далеко от совершенно интуитивного объяснения.

Чтобы ответить на вопрос о том, как сравнивать входную строку с метками ребер: По соображениям эффективности при построении и поиске начальная буква символ каждой метки ребра обычно хранится в узле.Но остальное нужно искать в основной текстовой строке, как вы сказали, и это действительно может вызвать проблемы, в частности, когда строка настолько велика, что не может быть легко сохранена в памяти.Это (плюс тот факт, что, как и любая прямая реализация дерева, дерево суффиксов - это структура данных, которая содержит много указателей, которые занимают много памяти и затрудняют поддержание ссылочной локальности и кэширование памяти ) - одна из главных причин того, что деревья суффиксов намного сложнее обрабатывать, чем, например, инвертированные индексы.

5 голосов
/ 10 марта 2012

Если вы объедините массив суффиксов с lcp таблицей и дочерней таблицей , что, конечно, вам следует сделать, вы, по сути, получите дерево суффиксов. Этот момент сделан в статье: Ким, Парк и Ким: линеаризованные суффиксные деревья. Таблица lcp обеспечивает довольно неуклюжий обход снизу вверх, а дочерний стол обеспечивает легкий обход любого типа. Так что история о суффиксных деревьях с использованием указателей, вызывающих проблемы с ссылками, на мой взгляд, является устаревшей информацией. Следовательно, дерево суффиксов - «правильный и простой путь», если дерево реализовано с использованием базового массива суффиксов.

В работе Ким, Парк и Ким описан вариант подхода в обманчиво озаглавленной статье Абуэльоды и др.: Замена суффиксных деревьев расширенными массивами суффиксов . В статье Kim et al. Правильно сказано, что это реализация деревьев суффиксов, а не замена . Более того, детали конструкции Абуэльоды и его коллег более просто и интуитивно описаны в работе Кима и др.

.

,

0 голосов
/ 06 ноября 2013

есть реализация линейной конструкции Ukkonen деревьев суффиксов (плюс массивы суффиксов, массив lcp) здесь: http://code.google.com/p/text-indexing/. визуализация, предоставляемая вместе с suffixtree.js, может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...