Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск образцов в неизвестном тексте, суфф. деревья 
:(
    Опции темы
marsh123
Дата 12.2.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Добрый вечер.

Нужно найти образцы в заранее неизвестном тексте, ну то есть сначала подаются на вход образцы, потом только текст, то есть нужен гуд препроцессинг, чтобы потом поиск можно было осуществить за линейное время, напрашивается Ахо-Корасик, но по заданию надо делать именно через суффиксные деревья.

Я в замешательстве.. Суфф. деревья обычно применяют, когда нужно решить обратную задачу (поиск в тексте неизвестных  образцов, то есть препроцессинг осуществялется именно текста, что логично).

Нашел что-то по теме только в Гасфилде, но там буквально пару слов, мол, да, применяют иногда, так как можно выиграть по времени\памяти Ахо-Корасик в некоторых случаях, но КАК это сделать ничерта не написано  smile 

Помогите пожалуйста, как это делается?

Заранее благодарен.
PM MAIL   Вверх
maxdiver
Дата 12.2.2012, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Задание действительно странное, потому что Ахо-Корасик как раз хранит информацию только о всех образцах, в то время как суффиксное дерево будет хранить информацию и обо всех их суффиксах (что теоретически позволяет искать вхождения не только образцов, а подстрок образцов, но в задаче-то этого не надо).

Т.е., рассуждая так, суффиксное дерево содержит в себе всё то, что "знает" Ахо-Корасик, а, значит, и задачу можно решать аналогично. Построим суфф. дерево для строки "s1 # s2 @ s3 & s4 ...", где #@& - это различные символы, позволяющие отделять каждый образец от остальных (т.е. образцы конкатенируются через эти символы). "Скармливая" такому дереву текст, мы будем совершать переходы по дереву аналогично алгоритму Ахо-Корасик: по возможности переходя по ребру с нужным символом, если такого ребра нет - переходя по суффиксной ссылке. Если пришли в состояние, соответствующее одному из образцов, то значит вот нашли очередное вхождение.
PM MAIL WWW ICQ   Вверх
marsh123
Дата 12.2.2012, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Спасибо, была такая идея, но, думал, может что-то более изящное есть.

Остался только вопрос:
Есть идея как генерить уникальные символы? В задаче используется латинский алфавит, значит все остальные подойдут, но образцов может быть и миллион, как же тогда нагенерить их столько?
PM MAIL   Вверх
maxdiver
Дата 12.2.2012, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



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

(Вообще говоря, для суффиксного дерева размер алфавита может быть практически любым, т.к. размер дерева является величиной O(N) независимо от алфавита, а асимптотика алгоритма Укконена - O(N * log Alphabet).)
PM MAIL WWW ICQ   Вверх
marsh123
Дата 12.2.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Немного не это имел ввиду.. Мой вопрос гораздо более глупый, чем показалось.
Имелось ввиду, как получать эти символы, а затем сопоставлять с номером образца, ведь нужно при встрече терминального символа в дерере сказать, какой именно образец мы встретили.
Я так понимаю, нужно использовать интовый массив вместо чаров и брать символы по порядку начиная с определенного, например сразу после маленькой z и тогда номер образзца получать обычным вычитанием..
PM MAIL   Вверх
maxdiver
Дата 13.2.2012, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Ну да, конечно, как-нибудь так: буквы 'a'-'z' это "нормальные буквы", а дальше идут "псевдо-буквы" для первого, второго, третьего и т.д. образцов.
PM MAIL WWW ICQ   Вверх
marsh123
Дата 14.2.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



А теперь вопрос по самому алгоритму, вообще их 2:
1) Какую роль Вы отводите суффиксным связям, я так и не понял, при переходе по суффиксной связи мы получаем абсолютно те же дочерние дуги, лишь отрезая первый символ, но это нас не особо волнует, он где-то вверху, что же это может изменить? В общем, зачем?
2) Как быть, если прикладывая текст к дереву мы нашли терминальный символ, по идее вхождение, но это может быть суффиксом образца, а не им самим, как же это проверить?

Так что я так ничего и не понял, как правильно искать обрацы, можно уточнить?  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.5199 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.