Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4981

.pdf
Скачиваний:
0
Добавлен:
21.11.2023
Размер:
537.64 Кб
Скачать

Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования

«Нижегородский государственный архитектурно-строительный университет»

М.И.Лиогонький, Т.А.Береговая

Элементы теории конечных автоматов и регулярных языков

Методические указания и расчетно-графическая работа по курсу «Дискретная математика» для студентов ННГАСУ специальности «Информационные системы и технологии»

Нижний Новгород ННГАСУ

2010

УДК 519.95

ББК В18

К–57

Лиогонький М.И., Береговая Т.А. Элементы теории конечных автоматов и регулярных языков. Методические указания и расчетно-графическая работа по курсу «Дискретная математика» для студентов ННГАСУ специальности «Информационные системы и технологии». Нижегород.гос.архит.-строит.ун-т. – Н.Новгород: ННГАСУ, 2010.- 64с.

В методической разработке вводится понятие конечного автомата как простейшей математической модели систем дискретного действия. Изучаются свойства конечных автоматов и языков, ими распознаваемых. Приводятся алгоритмы синтеза и анализа конечных автоматов. Вводится понятие R-языка. Доказывается теорема Клини о совпадении класса R- языков с классом языков, распознаваемых конечными автоматами. Даются задания для выполнения расчетно-графической работы.

Составители: доц. Лиогонький М.И., доц. Береговая Т.А.

©Нижегородский государственный архитектурно-строительнй университет, 2010

2

Введение

Настоящая методическая разработка предназначена для студентов ННГАСУ специализации «Информационные системы и технологии», изучающих курс «Дискретная математика». В ней изложены основные понятия теории конечных автоматов, которые являются простейшими математическими моделями систем дискретного действия. Теория систем дискретного действия охватывает широкий круг вопросов, связанных с исследованием возможности автоматизации тех или иных процессов переработки информации, созданием эффективных методов синтеза автоматов и анализа их работы. Разработка быстродействующих эффективных программ переводчиков и программ компиляторов опирается на интенсивно развивающуюся теорию формальных языков и грамматик. В данной методической разработке вводятся и изучаются простейшие формальные языки, которые называются регулярными языками, и показы-

вается, что класс регулярных языков

совпадает с классом языков распознавае-

мых конечными автоматами.

 

 

Предлагаемая методическая

разработка восполняет отсутствие

в

ННГАСУ доступной литературы по данным вопросам. Авторы разработки с некоторыми разъяснениями конспективно изложили материал, содержащийся в работе Д.И.Когана и Т.С. Бабкиной «Основы теории конечных автоматов и регулярных языков» [1].

Дополнительные сведения по вопросам, рассматриваемым в методической разработке можно найти в книгах [2], [3], [4], [5], [6].

3

§1. Языки над конечным алфавитом. Операции над языками

Конечным алфавитом будем называть произвольное непустое конечное множество А={a1, a2, ..., an}, элементы которого будем называть буквами алфавита. В качестве примеров алфавитов можно рассматривать латинский алфавит, состоящий из 26 букв, или кириллицу, состоящую из 33 букв. Для записи неотрицательных целых чисел в десятичной системе счисления использует-

ся алфавит А={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, а для их записи в двоичной системе счисления используется алфавит А={0,1}.

Словом в алфавите А={a1, a2, ..., an}, называется произвольная запись α вида ai1ai2... ail , где ai1, ai2 ,..., ail какие-то буквы этого алфавита, причем од-

на и та же буква в составе слова может встречаться многократно. Количество букв l в слове α называется его длиной. Длина слова α обозначается так: l(α). Символом λ обозначается единственное пустое слово, имеющее нулевую длину. В алфавите А={a1, a2, ..., an} можно записать nl различных слов длины

l, где l=0, 1, 2, ... . Запись А* будет в дальнейшем обозначать множество всех

слов в алфавите А, включая пустое слово. Очевидно, что множество А* является счетным множеством, т.к. все его элементы можно выстроить в виде некоторой последовательности. Например, в начало этой последовательности можно записать пустое слово, затем записать все слова длины 1, затем все слова длины 2 и т.д.

Если α и β – два произвольных слова в алфавите А, то запись αβ будет обозначать новое слово γ в алфавите А, получаемое путем приписывания к буквам слова α справа всех букв слова β. Для любых слов α и β считается, что

αλ=λα=α, αλβ=αβ.

Языком в алфавите А называется произвольное подмножество слов L из

А*. Если множество L конечно (бесконечно), то и язык, определяемый этим множеством, называется конечным (бесконечным). Язык L называем пустым, если множество L пусто (L= ). Совокупности всех слов русского и всех слов

4

английского языков представляют собой примеры конечных языков. Совокупность записей всех четных чисел в десятичной системе счисления представляет собой бесконечный язык. Множество всех слов русского алфавита (но не русского языка!), заканчивающихся гласной буквой, – тоже бесконечный язык. Язык L в алфавите А называется универсальным, если L=А*.

Теоретико-множественные операции позволяют ввести соответствующие операции над языками. Пусть L1 и L2 – языки в алфавите А.

1)Объединением языков L1 и L2 называется язык, обозначаемый через

L1 L2 , слова которого принадлежат по меньшей мере одному из этих языков.

2)Пересечением языков L1 и L2 называется язык, обозначаемый через

L1∩L2, слова которого принадлежат каждому из этих языков.

3)Разностью языков L1 и L2 называется язык, обозначаемый через L1\L2, слова которого принадлежат языку L1, но не принадлежат языку L2.

4)Пусть L – язык в алфавите А. Дополнением этого языка до универсального называется язык, обозначаемый через Lс, слова которого принад-

лежат А*, но не входят в состав языка L. Иными словами, Lс*\L.

Если, например, язык L состоит из всех слов латинского алфавита А, содержащих хотя бы одну букву а, то язык Lс состоит из слов, не содержащих букву а. Очевидно также, что операция разности представима через опера-

ции пересечения и дополнения, а именно: L1\L2=L1∩(L2)с.

Наряду с теоретико-множественными,

существует еще несколько опе-

раций над языками.

 

 

5) Конкатенацией (сцепкой) языков

L1 и L2 называется язык, обозна-

чаемый через L1L2, произвольное слово γ которого может быть пред-

ставлено в виде αβ, где

α является словом языка L1, а β является

словом языка L2.

 

 

Если один из языков L1 и L2

является пустым, то пустым является и язык

L1L2. Отметим также, что если слово λ L1

, то L2 L1L2 , если же λ L2 , то

5

L1 L1L2 . Знак нередко опускается, и тогда конкатенация языков L1 и L2 за-

писывается так: L1L2.

Если языки L1 и L2 конечны, причем в составе первого языка m слов, а в составе второго n слов, то язык L1L2 состоит максимум из mn слов.

Пусть дан алфавит А={a,b} и пусть язык L1 ={a, abb}, а язык

L2 ={λ, bb}. Тогда язык L1L2 ={a, abb, abbbb}.

6)Операция возведения языка L в целую неотрицательную степень определяется следующим образом:

L0={λ};

L1=L;

L2=LL;

Ln+1=LnL, n=2, 3, ...

7)Пусть L– язык в алфавите А. Итерацией языка L называется язык, который обозначается как L* и получается объединением всех неотрица-

тельных степеней языка L. Иными словами L* = ULi .

i=0

Из определения следует, что пустое слово принадлежит итерации любого языка, а непустое слово α принадлежит итерации языка L тогда и только тогда, когда это слово можно разбить на некоторое количество последовательных частей так, что каждая часть принадлежит языку L. Если язык L содержит все однобуквенные слова алфавита А, то итерацией этого языка является универсальный язык А*. Очевидно, что для любого языка L имеет место (L*)*=L*.

Запись L+ будет в дальнейшем обозначать язык, который получается из языка L* путем изъятия пустого слова.

Проблема принадлежности слова языку состоит в том, чтобы по заданному языку L в алфавите А и по произвольному слову α из А*, определить принадлежит ли слово языку L . Сложность решения данной проблемы существенно зависит от способа задания языка L. Если, например, язык L есть совокупность

6

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

состоит из всех слов русского языка, то по произвольному слову α, записанному кириллицей, не совсем просто выяснить, принадлежит ли слово α языку L , т.к. в данном случае задание языка L не достаточно формализовано.

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

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

7

§2. R-выражения и R-языки

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

Пусть имеются конечный алфавит А={a1, a2, ..., an}. Рассмотрим расширенный алфавит Ã={a1, a2, ..., an, , λ , , ( , ), ,*}, получаемый из А добавлением букв , λ , , ( , ), , * .

Некоторые, так называемые, правильно построенные слова в алфавите Ã называются R-выражениями. Правила построения R-выражений следующие.

1)Символ является R-выражением;

2)символ λ является R-выражением;

3)символ ai, где ai – любая буква алфавита А, является R-выражением;

4)если слова ϕ и ψ являются R-выраженими, то слово (ϕ ψ) также является

R-выражением;

 

 

 

 

 

5) если слова ϕ и ψ являются R-выраженими, то слово (ϕψ)

также является

R-выражением;

 

 

 

 

 

6) если слово ϕ

является R-выражением, то

слово (ϕ)*

также

является

R-выражением;

 

 

 

 

 

7) R-выражениями

являются только такие слова в алфавите Ã, которые могут

быть построены путем конечного применения правил 1)- 6).

 

 

 

Выражения, записанные

в соответствии с правилами 1) – 3), называют-

ся

элементарными R-выражениями, все остальные R-выражения

именуют-

ся

составными. Составные

R-выражения конструируются из элементарных

по

правилам 4) –

6); каждое

правило может

использоваться многократно.

8

R-выражение (ϕ)* называют взятием R-выражения ϕ в итерационные скобки.

Часто в записях R-выражений опускаются знаки и скобки, отсутствие которых не может привести к недоразумениям, при этом предполагается, что наивысшим приоритетом обладает *, затем идет , далее . Если допустим

А={a, b}, то запись а ba* трактуется как (a (b(a)*)).

Из выше сформулированных правил нетрудно понять, что для произвольного слова в алфавите Ã несложно определить, является оно R-выражением или нет. Если, допустим, А={a, b}, то слово (((a b)ο(b)*))* является

R-выражением, а слово (((a b)ο(b)*))*b) не является R-выражением, так как число открывающих скобок меньше, чем закрывающих.

Каждому R-выражению ϕ в алфавите Ã можно поставить в соответствие некоторый язык L в алфавите А. При этом R-выражениям , λ, ai естественно сопоставить соответственно: пустой язык; язык, состоящий из одного пустого слова; и язык, состоящий из одного однобуквенного слова ai. Если R- выражениям ϕ и ψ сопоставлены соответственно языки L1 и L2 то: R- выражению (ϕ ψ) естественно сопоставить объединение этих языков, т.е. язык L1 L2; R-выражению (ϕψ) естественно сопоставить конкатенацию этих языков, т.е. язык L1L2; R-выражению (ϕ)* естественно сопоставить итерацию языка L1, т.е. язык L1* .

В дальнейшем, если R-выражению ϕ в алфавите Ã поставлен в соответствие язык L в алфавите А, то будем говорить, что язык L, определяется R- выражением ϕ . Языки в алфавите А, определяемые R-выражениями будем называть R-языками. Приведем несколько примеров.

1)R-выражение (a b c)* определяет универсальный язык А* для алфавита

А={a, b, c}.

2)R-выражение a(a b c)*a a определяет язык, состоящий из всех слов ал-

фавита А={a, b, c}, которые начинаются и заканчиваются буквой a.

9

3)R-выражение (aa ab ac ba bb bc ca cb cc)* определяет множество всех слов четной длины в том же алфавите А.

4)R-выражение (a b c)*bbbb(a b c)* определяет множество всех слов алфавита А, которые содержат по меньшей мере одно четырехкратное вхождение буквы b подряд.

5)Если рассмотреть алфавит А={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, то R-выражение

(1 2 3... 9) (0 1 2 3... 9)*(0 5)

определяет множество всех целых положительных чисел, записанных в десятичной системе счисления, которые кратны пяти.

Отметим, что взаимно однозначного соответствия между R-выражениями и определяемыми ими языками нет. Каждое R-выражение определяет один язык. Но один и тот же язык может определяться различными R-выражениями. Как R-выражение (a b c)*(b a cb)*, так и R-выражение (a c b)* задает множество всех слов алфавита A={a, b, c}.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]