Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксический анализ неполной цепочки 
:(
    Опции темы
WandG
Дата 17.6.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Например, есть язык a^n, b^n (n > 0) - цепочки вида abaabbaaabbb, ...
На входе есть цепочка aab - она не принадлежит этому языку, но может быть подцепочкой корректной цепочки, например, aabb (добавили букву b справа).
Или, например, есть цепочка aba, очевидно, что она сама не принадлежит языку и никакая цепочка ее содержащая тоже языку не принадлежит.

Единственное, что приходит на ум - это модификация анализатора снизу вверх.

Буду рад ссылкам и просто идеям. Спасибо!
PM MAIL   Вверх
AVA12
Дата 17.6.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Странный вопрос. Вообще-то, такой анализ является неотъемлемой частью разбора строки.
Нужно просто следить за состоянием автомата, анализирующего строку (для грамматики (a*n)(b*n) подойдет автомат с магазинной памятью). Если строка переводит автомат в недопускающее состояние (либо для очередного символа отсутствует правило перехода), то она не принадлежит языку и не является префиксом корректной строки. Если строка переводит автомат в допускающее состояние и стек пуст, то строка принадлежит языку. В остальных случаях строка не принадлежит языку, но является корректным префиксом.
PM ICQ Jabber   Вверх
WandG
Дата 17.6.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, за ответ, для определения корректных префиксов такой способ действительно подходит.

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

Для наглядности переделаю пример: язык a^n b^n c^n
цепочка bbbc - она может содержаться в правильной строке, например  aaabbbccc
а вот цепочка содержащая подцепочку ac не принадлежит языку

Но, вообще говоря, интересует любая информация в т.ч. и по разным частным случаям.
PM MAIL   Вверх
AVA12
Дата 17.6.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Это уже гораздо сложнее. Смутно вырисовывается алгоритм с "обратным" автоматом и описанием всех допустимых состояний... Но это все как-то неубедительно. И годится не для всех случаев. Боюсь, для каждой конкретной грамматики придется придумывать отдельный алгоритм.

Если не секрет, откуда взялась такая странная задача?
PM ICQ Jabber   Вверх
WandG
Дата 17.6.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, общий метод тут особо не придумаешь, надо как минимум выделять классы грамматик и т.п.

А исходная задача такая: есть несколько служебных форматов файлов, для которых было бы очень здорово научиться собирать "разбитые" файлы, т.е. есть кусок памяти, надо найти в нем кусочки нашего файла и склеить их. Если формат представить какой-нибудь грамматикой вроде:

файл --> заголовок, тело, конец.
заголовок --> 0x1234, 0x5678, номер_версии.
ну и т.д.

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


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


Опытный
**


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

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



Очень похоже на задачу множественного поиска подстроки в строках. Но в этой задаче подстрока ищется в однозначно определённых строках (из них составляется бор, в нём строятся суффиксные ссылки - алгоритм Ахо-Корасик), а здесь же, похоже, постоянно возникают неопределённости...
PM MAIL WWW ICQ   Вверх
WandG
Дата 18.6.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, почитаю на досуге что это за алгоритм Ахо-Корасика, может что в голову еще прийдет.
PM MAIL   Вверх
maxdiver
Дата 18.6.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, запутался я немножко. Алгоритм Ахо-Корасик ищет сразу несколько слов в качестве подстроки какой-то одной строки. Т.е. строки словаря в данном тексте. А у нас задача обратная... Так что это не подойдет
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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