Детерминированные конечные автоматы — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Процесс допуска)
Строка 1: Строка 1:
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория формальных языков]]
== Детерминированный конечный автомат ==
+
== Основные понятия ==
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Детерминированный конечный автомат(ДКА) --- набор из пяти элементов <tex>\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle</tex>, где <tex>\Sigma</tex> -- алфавит, <tex>Q</tex> -- множество состояний автомата, <tex>s</tex> -- начальное состояние автомата, <tex>T</tex> -- Множество допускающих состояний автомата, <tex>\delta</tex> -- функция переходов.
+
'''Детерминированный конечный автомат (ДКА)''' — набор из пяти элементов <tex>\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle</tex>, где <tex>\Sigma</tex> алфавит, <tex>Q</tex> множество состояний автомата, <tex>s</tex> начальное состояние автомата, <tex>T</tex> — множество допускающих состояний автомата, <tex>\delta</tex> функция переходов.
 
}}
 
}}
 
Пример :
 
 
[[Файл:DKA_1.jpg‎]]
 
 
q - начальное состояние.
 
r - допускающее состояние.
 
  
 
=== Процесс допуска ===
 
=== Процесс допуска ===
Процесс допуска слова автоматом выглядит так:
+
Опишем процесс допуска автоматом слова <tex>p</tex>. Изначально автомат находится в стартовом состоянии <tex>s</tex>. При считывании очередного символа <tex>p_i</tex> автомат переходит в состояние <tex>\delta(q, p_i)</tex>, где <tex>q</tex> — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.
* Изначально автомат находится в стартовом состоянии
+
{{Определение
* Ему на вход подается строка
+
|definition=
* Далее на каждом шаге автомат берет новый символ строки и совершает соответствующий переход в новое состояние, ''если для символа не задано никакого перехода из текущего состояния, то слово считается недопущенным ''  
+
Будем говорить, что автомат '''допускает''' слово, если после окончания описанного выше процесса с этим словом автомат окажется в допускающем состоянии.
* Слово считается допущенным, если после того, как прочитаны все его символы, автомат оказался в допускающем состоянии.
+
}}
 +
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''', из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».
  
 +
=== Примеры ===
 +
{| border="1" cellpadding="5" cellspacing="0" style="text-align:center" width=60%
 +
|style="background:#ffffff"|Автомат, принимающий строки из чередующихся символов ''a'' и ''b''
 +
<small><br/>а)без «дьявольской вершины»
 +
<br/>б)с «дьявольской вершиной» (отмечена серым цветом)</small>
 +
|style="background:#ffffff"|[[Файл:Consp dka.png|300 px]]
 +
|-
 +
|style="background:#ffffff"|[[Автомат для поиска образца в тексте]] для строки ''ababb''
 +
|style="background:#ffffff"|<div style="overflow:hidden;">
 +
<div style="margin:-80px 0px -90px 0px;">
 +
[[Файл:Automata.jpg|340px]]
 +
</div>
 +
</div>
 +
|}
 
== Обозначения ==
 
== Обозначения ==
  

Версия 06:41, 29 октября 2011

Основные понятия

Определение:
Детерминированный конечный автомат (ДКА) — набор из пяти элементов [math]\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle[/math], где [math]\Sigma[/math] — алфавит, [math]Q[/math] — множество состояний автомата, [math]s[/math] — начальное состояние автомата, [math]T[/math] — множество допускающих состояний автомата, [math]\delta[/math] — функция переходов.


Процесс допуска

Опишем процесс допуска автоматом слова [math]p[/math]. Изначально автомат находится в стартовом состоянии [math]s[/math]. При считывании очередного символа [math]p_i[/math] автомат переходит в состояние [math]\delta(q, p_i)[/math], где [math]q[/math] — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.

Определение:
Будем говорить, что автомат допускает слово, если после окончания описанного выше процесса с этим словом автомат окажется в допускающем состоянии.

Замечание. Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную «дьявольскую вершину», из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».

Примеры

Автомат, принимающий строки из чередующихся символов a и b


а)без «дьявольской вершины»
б)с «дьявольской вершиной» (отмечена серым цветом)

Consp dka.png
Автомат для поиска образца в тексте для строки ababb

Automata.jpg

Обозначения

Определение:
Мгновенное описание (конфигурация) - , где q – текущее состояние, α – оставшиеся символы.</td></tr>

</table>


Для удобства можно ввести следующие обозначения:

1.Переход за 1 шаг:

  • [math]\langle q, \alpha \rangle \vdash \langle p, \beta \rangle[/math], если:
    • [math]\alpha = c\beta[/math]
    • [math]\delta (q, c)=p [/math]

2.Переход за 0 или более шагов:

  • [math]\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle[/math], если [math]\exists n[/math]:
    • [math]\langle q, c_1 c_2 c_3 ...c_n\beta \rangle \vdash \langle u_1, c_2 c_3 ...c_n\beta \rangle \vdash \langle u_2, c_3 ...c_n\beta \rangle ...\vdash \langle u_{n-1}, c_n\beta \rangle \vdash \langle p, \beta \rangle[/math]

Автоматные языки

Определение:
[math]L(\mathcal{A})=\{\alpha| \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle t \in T\}[/math] --- язык автомата [math]\mathcal{A}[/math].


Пример:

Автомат, допускающий слова над алфавитом из символов a и b, допускающий слова в которых перед каждым символом b идёт символ a.

(a|ab)*

DKA 2.jpg


Лемма:
[math]\langle q, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle, \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle \Rightarrow \langle q, \alpha\beta \rangle \vdash^* \langle r, \varepsilon \rangle[/math]
Доказательство:
[math]\triangleright[/math]
[math]\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.[/math]
[math]\triangleleft[/math]

Способ хранения автомата

Save DKA.jpg

В ячейке таблицы (i, c) храним номер состояния, в которое можно перейти из состояния i по символу c. В массиве T отмечены допускающие состояния. Таким образом требуется O(|Q||Σ|) памяти.