Re: Обратная задача: поиск в таблице паттернов
- From
- Vladimir A. Pertzel ()
- To
- Sergei Emantayev
- Date
- 2002-06-30T18:10:21Z
- Area
- RU.ALGORITHMS
From: "Vladimir A. Pertzel" <voldemar@relhum.org>
"Sergei Emantayev" <sergeie@ectel.com> wrote in message news:afn0vl$ig3$1@host.talk.ru...
> Да и вообще подстроки можно не хранить. Если что-то
> нашли, то результат можно из входного потока
> восстановить.
Подстроки - не нужно, а сами строки, скорее всего
удобнее хранить, потому, что иначе, при
восстановлении из исходного потока придется
хранить старые байты. А основная идея конечного
автомата: раз посмотрел на байт, и больше к нему
не возвращаиться.
> VA> Грубо говоря, в конечном автомате, каждое
> VA> состояние
> VA> есть структура, содержащая указатель на
> VA> возвращаемые
> VA> данные (не ноль тогда и только тогда, когда
>
> можно не хранить
Это или указатель на строку-образец поиска,
либо указатель на функцию (представитель класса),
которую (виртуальный метод которого) надо выполнить
по нахождении.
.......
> VA> состояний
> VA> будет около 30 тысяч (на основании своего опыта),
>
> ???? это я не понял почему,
> ну хорошо - пусть будет так.
Пример, ищем строку из набора:
КИТ
КОТ
КОК
КОЛ
состояния автомата соответствуют подстрокам
0: ""
1: К
2: КИ
3: КИТ
4: КО
5: КОТ
6: КОК
7: КОЛ
то есть их 8, что меньше, чем 3х4=12;
> Вообще, идея интересная, надо подумать как
> табличку посильнее сжать. Мне кажется, там
> будет много переходов в нулевое состояние -
> как бы эти нули повыковыривать?
если для каждой буквы алфавита есть слова,
которые начинаются с этой буквы, то нулевых
переходов не будет вообще.
Для развлечения можно попробовать построить
автомат для поиска одного слова "баобаб"
Обратите внимание, что в пятом состоянии
(после последовательности "баоба", буква "о"
переводит автомат не в нулевое состояние, а
в третье.
--- ifmail v.2.15dev5
* Origin: Sent via Graf's Inn at news://news.relhum.org (2:5020/400)