2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Формальная грамматика
Сообщение19.06.2010, 21:15 


27/10/09
78
Надо построить магазинный автомат для языка: $L = \{a^nb^{2n+m}a^{m-1} | n,m\geqslant 1\}$
По правилам надо бы предложить свои действия, но я в ступоре. Мне очень трудно сообразить, какие состояния и какие переходы должны быть у автомата.
Ну, первое, что я могу предположить - это то, что на первом состоянии накручивается символ $a$, записываясь в стек. Дальше, нужно, как мне кажется, стирать из стека символ $a$, заменяя его $b$. Тут я уже не уверен. Дальше - хуже. Не представляю, как сосчитать $a^{m-1}$ на конце...

 Профиль  
                  
 
 Re: Формальная грамматика
Сообщение19.06.2010, 22:40 


27/10/09
78
Меня внезапно осенило, и я сотворил вот такую штуку:
Изображение

Поясняю:
$q_0$ состояние служит для записи количества входных $a^n$ символов, но так как $b$ зависит от $a$ таким образом - $b^{2n}$-, следовательно в стек надо записывать по 2-а символа, чтобы при следующем проходе $b$ занулил все символы $a$ в стеке. Таким образом обеспечивается соответствие количества первых символов $a^n$ и зависимого от этого количества $b^{2n}$ символов.
$q_1$ состояние целиком служит для зануления в стеке символов $a$ силами символов $b$. Следовательно, по окончании этого цикла мы избавимся от зависимости $b$ и $a$(который в начале).
Теперь осталось проверить зависимость между $b^m$ и последними $a^{m-1}$. Следующий за состоянием $q_1$ переход соответствует понижению $b^m$ до $b^{m-1}$. Это облегчает дальнейшие действия так, что, после заполнения оставшихся $b^{m-1}$ символов, теперь осталось занулить весь стек, посредством следующих символов $a$ в состоянии $q_3$.
Если их не осталось, то стек должен быть пуст. Тогда входное слово принадлежит данному языку.
Если $a$ ещё остались, то ими надо занулить весь стек из $b$. Это должно получиться, так как в стеке их ровно столько, сколько должно быть символов $a$ в конце. Занулив стек, мы увидим дно и не должны больше встречать символов $a$, да и вообще больше символов быть не должно. Только в этом случае слово распознано и, следовательно, принадлежит языку (заключительное состояние $q_4$)

Вот так. Я написал это довольно спонтанно, так как с формальной грамматикой у меня большие проблемы и выстроить всё логично у меня не очень получается. То, что я написал выше - это "отражение" моих мыслей в виде слов, то есть - то, как я понимаю этот автомат :).
Если есть косяки, обязательно напишите! Буду очень признателен.

 Профиль  
                  
 
 Re: Формальная грамматика
Сообщение19.06.2010, 23:48 


27/10/09
78
Вот построил ещё КС-грамматику:
$\mathbf{S}\to\mathbf{T}b\mathbf{U}$
$\mathbf{T}\to a\mathbf{T}bb$
$\mathbf{T}\to abb$
$\mathbf{U}\to b\mathbf{U}a$
$\mathbf{U}\to ba$

Нормальная форма Хомского:
$\mathbf{S} \to \mathbf{A_{Tb}}\mathbf{U}$
$\mathbf{A_{Tb}} \to \mathbf{T}\mathbf{A_{b}}$
$\mathbf{T} \to \mathbf{A_{aT}}\mathbf{A_{bb}}$
$\mathbf{A_{aT}} \to \mathbf{A_{a}}\mathbf{T}$
$\mathbf{A_{bb}} \to \mathbf{A_{b}}\mathbf{A_{b}}$
$\mathbf{T} \to \mathbf{A_{a}}\mathbf{A_{bb}}$
$\mathbf{U} \to \mathbf{A_{bU}}\mathbf{A_{a}}$
$\mathbf{A_{bU}} \to \mathbf{A_{b}}\mathbf{U}$
$\mathbf{U} \to \mathbf{A_{b}}\mathbf{A_{a}}$
$\mathbf{A_{a}} \to a$
$\mathbf{A_{b}} \to b$

Не получается по формуле в вики: длина формы Хомского $2n-1$, где $n$ - длина исходной грамматики :)

ЗЫ: а почему тему переместили?
ЗЫЫ: как выровнять выражения по стрелочкам?

 Профиль  
                  
 
 Re: Формальная грамматика
Сообщение20.06.2010, 12:30 
Заслуженный участник


27/04/09
28128

(Оффтоп)

Не знаю, есть ли какой-нибудь специальный для этого в $\TeX$ способ, а можете пока попробовать в следующих сообщениях использовать матрицу с тремя столбцами, во втором — стрелки, слева и справа выражения. Примерно так:$$\begin{array}{rcl} aaaaaa & \to & b \\ c & \to & ddddd \\ eeee & \to & ffff \end{array}$$Но думаю, всё же специальный способ есть.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group