Ответ 1
Во-первых, существует много способов построить дерево суффикса. Существует оригинальный метод O (n) Вайнера (1973), усовершенствованный McCreight (1976), наиболее известный Укконеном (1991/1992), и ряд дальнейших улучшений, в основном связанных с реализацией и хранением соображения эффективности. Наиболее примечательным среди них является Эффективная реализация ленивых суффиксных деревьев от Giegerich и Kurtz.
Кроме того, поскольку прямая конструкция массивов суффиксов стала возможной в O (n) времени в 2003 году (например, используя Skew алгоритм, но есть и другие), и поскольку существуют хорошо изученные методы для
- эмуляция деревьев суффикса с использованием массивов суффикса (например, Abouelhoda/Kurtz 2004)
- сжатие массивов суффиксов (см. Navarro/Mäkinen 2007 для опроса)
массивы суффиксов обычно предпочтительнее суффиксов. Поэтому, если вы намерены построить высоко оптимизированную реализацию для определенной цели, вам может понадобиться изучить алгоритмы построения суффикса-массива.
Однако, если ваш интерес заключается в построении дерева суффиксов и, в частности, алгоритме Укконена, я хотел бы предложить вам внимательно ознакомиться с описанием в это сообщение SO, о котором вы уже упоминали, и мы пытаемся улучшить это описание вместе. Это, безусловно, далеко от совершенно интуитивного объяснения.
Чтобы ответить на вопрос о том, как сопоставить входную строку с метками края: По соображениям эффективности во время построения и поиска, начальный символ каждой метки граней обычно хранится в node. Но остальное нужно искать в основной текстовой строке, как вы сказали, и действительно, это может вызвать проблемы, особенно когда строка настолько велика, что ее невозможно легко сохранить в памяти. Это (плюс тот факт, что, как и любая прямая реализация дерева, дерево суффикса представляет собой структуру данных, которая содержит много указателей, которые потребляют много памяти и затрудняют сохранение локальности ссылки и извлекают выгоду из кэширования памяти) одна из основных причин, по которой суффиксные деревья труднее обрабатывать, чем, например, инвертированные индексы.