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

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Примеры)
Строка 1: Строка 1:
[[Категория: Теория формальных языков]]
 
 
== Основные понятия ==
 
== Основные понятия ==
 
{{Определение
 
{{Определение
Строка 5: Строка 4:
 
'''Детерминированный конечный автомат (ДКА)''' — набор из пяти элементов <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> — функция переходов.
 
}}
 
}}
 
 
=== Процесс допуска ===
 
=== Процесс допуска ===
 
Опишем процесс допуска автоматом слова <tex>p</tex>. Изначально автомат находится в стартовом состоянии <tex>s</tex>. При считывании очередного символа <tex>p_i</tex> автомат переходит в состояние <tex>\delta(q, p_i)</tex>, где <tex>q</tex> — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.
 
Опишем процесс допуска автоматом слова <tex>p</tex>. Изначально автомат находится в стартовом состоянии <tex>s</tex>. При считывании очередного символа <tex>p_i</tex> автомат переходит в состояние <tex>\delta(q, p_i)</tex>, где <tex>q</tex> — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.
Строка 30: Строка 28:
 
|}
 
|}
  
== Обозначения ==
+
== Автоматные языки ==
 
 
{{Определение
 
|definition=
 
Мгновенное описание (конфигурация) - <q , α>, где q – текущее состояние, α – оставшиеся символы.
 
}}
 
 
 
Для удобства можно ввести следующие обозначения:
 
 
 
1.Переход за 1 шаг:
 
* <tex>\langle q, \alpha \rangle \vdash \langle p, \beta \rangle</tex>, если:
 
** <tex>\alpha = c\beta</tex>
 
** <tex>\delta (q, c)=p </tex>
 
2.Переход за 0 или более шагов:
 
* <tex>\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle</tex>, если <tex>\exists n</tex>:
 
** <tex>\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</tex>
 
 
 
=== Автоматные языки ===
 
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
<tex>L(\mathcal{A})=\{\alpha| \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle t \in T\}</tex> --- язык автомата <tex>\mathcal{A}</tex>.
+
'''Мгновенное описание (конфигурация)''' — пара <tex>\langle q, \alpha \rangle</tex>, где <tex>q</tex> – текущее состояние, <tex>\alpha</tex> – оставшиеся символы.
 
}}
 
}}
 
+
Будем говорить, что конфигурация <tex>\langle p, \beta \rangle</tex> выводима из <tex>\langle q, \alpha \rangle</tex> за 1 шаг <tex>(\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)</tex>, если:
Пример:
+
* <tex>\alpha = c\beta</tex>
 
+
* <tex>\delta (q, c)=p </tex>
Автомат, допускающий слова над алфавитом из символов a и b, допускающий слова в которых перед каждым символом b идёт символ a.
+
Будем говорить, что конфигурация <tex>\langle p, \beta \rangle</tex> выводима из <tex>\langle q, \alpha \rangle</tex> за конечное число шагов <tex>(\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle)</tex>, если:
 
+
<tex>\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</tex>
(a|ab)*
 
 
 
[[Файл:DKA_2.jpg]]
 
 
 
  
 
{{Лемма
 
{{Лемма
Строка 68: Строка 45:
 
<tex>\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.</tex>
 
<tex>\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.</tex>
 
}}
 
}}
 +
{{Определение
 +
|definition=
 +
Множество <tex>L(\mathcal{A})=\{\alpha| \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle t \in T\}</tex> называется '''языком автомата <tex>\mathcal{A}</tex>'''. Множество языков всех автоматов образует множество '''автоматных языков''' <tex>Aut</tex>.
 +
}}
 +
== Способы представления автомата ==
 +
* Диаграмма переходов — граф, в котором состояниям соответствуют вершины, а рёбрам — переходы между состояниям
 +
* Таблица переходов <tex>T (|Q| \times |\Sigma|)</tex>, дающая табличное представление функции <tex>\delta</tex>.
  
== Способ хранения автомата ==
+
== См. также ==
 +
* [[Недетерминированные конечные автоматы]]
 +
* [[Автомат для поиска образца в тексте]]
 +
* [[Алгоритм Ахо-Корасик]]
  
[[Файл:save_DKA.jpg]]
+
== Литература ==
 
+
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)
В ячейке таблицы (i, c) храним номер состояния, в которое можно перейти из состояния i по символу c. В массиве T отмечены допускающие состояния. Таким образом требуется O(|Q||Σ|) памяти.
+
[[Категория: Теория формальных языков]]

Версия 05:26, 30 октября 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
а)без «дьявольской вершины»
б)с «дьявольской вершиной» (отмечена серым цветом)

[math]\bigcirc[/math] — нетерминальное состояние
[math]\circledcirc[/math] — терминальное состояние
Стрелка [math]\downarrow[/math] указывает на начальное состояние

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

Automata.jpg

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

Определение:
Мгновенное описание (конфигурация) — пара [math]\langle q, \alpha \rangle[/math], где [math]q[/math] – текущее состояние, [math]\alpha[/math] – оставшиеся символы.

Будем говорить, что конфигурация [math]\langle p, \beta \rangle[/math] выводима из [math]\langle q, \alpha \rangle[/math] за 1 шаг [math](\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)[/math], если:

  • [math]\alpha = c\beta[/math]
  • [math]\delta (q, c)=p [/math]

Будем говорить, что конфигурация [math]\langle p, \beta \rangle[/math] выводима из [math]\langle q, \alpha \rangle[/math] за конечное число шагов [math](\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle)[/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]\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]
Определение:
Множество [math]L(\mathcal{A})=\{\alpha| \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle t \in T\}[/math] называется языком автомата [math]\mathcal{A}[/math]. Множество языков всех автоматов образует множество автоматных языков [math]Aut[/math].

Способы представления автомата

  • Диаграмма переходов — граф, в котором состояниям соответствуют вершины, а рёбрам — переходы между состояниям
  • Таблица переходов [math]T (|Q| \times |\Sigma|)[/math], дающая табличное представление функции [math]\delta[/math].

См. также

Литература

  • Хопкрофт Д., Мотвани Р., Ульман Д.Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)