1.1

Упражнения

[30/60%]
Показать
LaTeX
Задача 1.1

ᴬ Ниже приведены диаграммы состояний двух ДКА, M1M_{1} и M2M_{2}. Ответьте на следующие вопросы для каждой из этих машин.

?
(a)

Что является начальным состоянием?

(b)

Что является множеством допускающих состояний?

(c)

Через какую последовательность состояний проходит машина при входной строке aabb?

(d)

Допускает ли машина строку aabb?

(e)

Допускает ли машина строку ε\varepsilon?

Задача 1.2

ᴬ Приведите формальное описание машин M1M_{1} и M2M_{2}, изображённых в упражнении 1.1.

?
Задача 1.3

Формальное описание ДКА MM — это ({q1,q2,q3,q4,q5},{u,d},δ,q3,{q3})\left(\left\{ q_{1}, q_{2}, q_{3}, q_{4}, q_{5}\right\} ,\left\{ \mathrm{u}, \mathrm{d}\right\} , \delta , q_{3},\left\{ q_{3}\right\} \right), где δ\delta задаётся следующей таблицей. Приведите диаграмму состояний этой машины.

ud
q1q_{1}q1q_{1}q2q_{2}
q2q_{2}q1q_{1}q3q_{3}
q3q_{3}q2q_{2}q4q_{4}
q4q_{4}q3q_{3}q5q_{5}
q5q_{5}q4q_{4}q5q_{5}
?
Задача 1.4

Каждый из следующих языков является пересечением двух более простых языков. В каждом пункте постройте ДКА для более простых языков, а затем объедините их с помощью конструкции, обсуждаемой в сноске 3 (стр. 46), чтобы получить диаграмму состояний ДКА для заданного языка. Во всех пунктах Σ={a,b}\Sigma =\left\{ \mathrm{a}, \mathrm{b}\right\}.

?
(a)

{w∣w содержит не менее трёх букв a и не менее двух букв b}\left\{ w \mid w\text{ содержит не менее трёх букв a и не менее двух букв b}\right\}

(b)

ᴬ {w∣w содержит ровно две буквы a и не менее двух букв b}\left\{ w \mid w\text{ содержит ровно две буквы a и не менее двух букв b}\right\}

(c)

{w∣w содержит чётное число букв a и одну или две буквы b}\left\{ w \mid w\text{ содержит чётное число букв a и одну или две буквы b}\right\}

(d)

ᴬ {w∣w содержит чётное число букв a, и за каждой буквой a следует хотя бы одна буква b}\left\{ w \mid w\text{ содержит чётное число букв a, и за каждой буквой }\mathbf{a}\text{ следует хотя бы одна буква }\mathbf{b}\right\}

(e)

{w∣w начинается с a и содержит не более одной буквы b}\left\{ w \mid w\text{ начинается с }\mathbf{a}\text{ и содержит не более одной буквы }\mathbf{b}\right\}

(f)

{w∣w содержит нечётное число букв a и заканчивается на b}\left\{ w \mid w\text{ содержит нечётное число букв a и заканчивается на b}\right\}

(g)

{w∣w имеет чётную длину и нечётное число букв a}\left\{ w \mid w\text{ имеет чётную длину и нечётное число букв a}\right\}

Задача 1.5

Каждый из следующих языков является дополнением более простого языка. В каждом пункте постройте ДКА для более простого языка, а затем, используя его, приведите диаграмму состояний ДКА для заданного языка. Во всех пунктах Σ={a,b}\Sigma =\left\{ \mathrm{a}, \mathrm{b}\right\}.

?
(a)

ᴬ {w∣w не содержит подстроку ab}\left\{ w \mid w\text{ не содержит подстроку }\mathbf{a b}\right\}

(b)

ᴬ {w∣w не содержит подстроку baba}\left\{ w \mid w\text{ не содержит подстроку baba}\right\}

(c)

{w∣w не содержит ни подстроки ab, ни подстроки ba}\left\{ w \mid w\text{ не содержит ни подстроки ab, ни подстроки ba}\right\}

(d)

{w∣w — произвольная строка, не принадлежащая a∗ b∗}\left\{ w \mid w \text{ — произвольная строка, не принадлежащая } \mathrm{a}^{*} \mathrm{~ b}^{*}\right\}

(e)

{w∣w — произвольная строка, не принадлежащая (ab+)∗}\left\{ w \mid w \text{ — произвольная строка, не принадлежащая } \left(\mathrm{ab}^{+}\right)^{*}\right\}

(f)

{w∣w — произвольная строка, не принадлежащая a∗∪ b∗}\left\{ w \mid w \text{ — произвольная строка, не принадлежащая } \mathrm{a}^{*} \cup \mathrm{~ b}^{*}\right\}

(g)

{w∣w — произвольная строка, которая не содержит ровно две буквы a}\left\{ w \mid w\text{ — произвольная строка, которая не содержит ровно две буквы a}\right\}

(h)

{w∣w — произвольная строка, кроме a и b}\left\{ w \mid w\text{ — произвольная строка, кроме a и b}\right\}

Задача 1.6

Приведите диаграммы состояний ДКА, распознающих следующие языки. Во всех пунктах алфавит равен {0,1}\left\{ 0,1\right\}.

?
(a)

{w∣w начинается с 1 и заканчивается на 0}\left\{ w \mid w\text{ начинается с 1 и заканчивается на 0}\right\}

(b)

{w∣w содержит не менее трёх единиц}\left\{ w \mid w\text{ содержит не менее трёх единиц}\right\}

(c)

{w∣w содержит подстроку 0101 (т.  е. w=x0101y для некоторых x и y)}\left\{ w \mid w\text{ содержит подстроку 0101 (т.\, е. }w=x 0101 y\text{ для некоторых }x\text{ и }y\text{)}\right\}

(d)

{w∣w имеет длину не менее 3, и её третий символ равен 0}\left\{ w \mid w\text{ имеет длину не менее 3, и её третий символ равен 0}\right\}

(e)

{w∣w начинается с 0 и имеет нечётную длину, либо начинается с 1 и имеет чётную длину}\left\{ w \mid w\text{ начинается с 0 и имеет нечётную длину, либо начинается с 1 и имеет чётную длину}\right\}

(f)

{w∣w не содержит подстроку 110}\left\{ w \mid w\text{ не содержит подстроку 110}\right\}

(g)

{w∣ длина w не превышает 5}\left\{ w \mid \text{ длина }w\text{ не превышает 5}\right\}

(h)

{w∣w — произвольная строка, кроме 11 и 111}\left\{ w \mid w\text{ — произвольная строка, кроме 11 и 111}\right\}

(i)

{w∣ каждая нечётная позиция w равна 1}\left\{ w \mid \text{ каждая нечётная позиция }w\text{ равна 1}\right\}

(j)

{w∣w содержит не менее двух нулей и не более одной единицы}\left\{ w \mid w\text{ содержит не менее двух нулей и не более одной единицы}\right\}

(k)

{ε,0}\left\{ \varepsilon , 0\right\}

(l)

{w∣w содержит чётное число нулей, либо содержит ровно две единицы}\left\{ w \mid w\text{ содержит чётное число нулей, либо содержит ровно две единицы}\right\}

(m)

Пустое множество

(n)

Все строки, кроме пустой строки

Задача 1.7

Приведите диаграммы состояний НКА с указанным числом состояний, распознающих каждый из следующих языков. Во всех пунктах алфавит равен {0,1}\left\{ 0,1\right\}.

?
(a)

ᴬ Язык {w∣w заканчивается на 00}\left\{ w \mid w\text{ заканчивается на 00}\right\} с тремя состояниями

(b)

Язык из упражнения 1.6c с пятью состояниями

(c)

Язык из упражнения 1.6l с шестью состояниями

(d)

Язык {0}\left\{ 0\right\} с двумя состояниями

(e)

Язык 0∗1∗0+0^{*} 1^{*} 0^{+} с тремя состояниями

(f)

ᴬ Язык 1∗(001+)∗1^{*}\left(001^{+}\right)^{*} с тремя состояниями

(g)

Язык {ε}\left\{ \varepsilon \right\} с одним состоянием

(h)

Язык 0* с одним состоянием

Задача 1.8

Используя конструкцию из доказательства теоремы 1.45, приведите диаграммы состояний НКА, распознающих объединение языков, описанных в

?
(a)

упражнениях 1.6a и 1.6b.

(b)

упражнениях 1.6c и 1.6f.

Задача 1.9

Используя конструкцию из доказательства теоремы 1.47, приведите диаграммы состояний НКА, распознающих конкатенацию языков, описанных в

?
(a)

упражнениях 1.6g и 1.6i.

(b)

упражнениях 1.6b и 1.6m.

Задача 1.10

Используя конструкцию из доказательства теоремы 1.49, приведите диаграммы состояний НКА, распознающих звезду языков, описанных в

?
(a)

упражнении 1.6b.

(b)

упражнении 1.6j.

(c)

упражнении 1.6m.

Задача 1.11

ᴬ Докажите, что любой НКА можно преобразовать в эквивалентный ему НКА с единственным допускающим состоянием.

?
Задача 1.12

Пусть D={w∣w содержит чётное число букв a, нечётное число букв b и не содержит подстроку ab}D=\left\{ w \mid w\text{ содержит чётное число букв a, нечётное число букв b и не содержит подстроку ab}\right\}. Приведите ДКА с пятью состояниями, распознающий DD, и регулярное выражение, порождающее DD. (Подсказка: опишите DD более простым способом.)

?
Задача 1.13

Пусть FF — язык всех строк над {0,1}\left\{ 0,1\right\}, не содержащих пары единиц, разделённых нечётным числом символов. Приведите диаграмму состояний ДКА с пятью состояниями, распознающего FF. (Возможно, будет полезно сначала найти НКА с 4 состояниями для дополнения FF.)

?
Задача 1.14
?
(a)

Покажите, что если MM — ДКА, распознающий язык BB, то при взаимной замене допускающих и недопускающих состояний в MM получается новый ДКА, распознающий дополнение BB. Сделайте вывод, что класс регулярных языков замкнут относительно операции дополнения.

(b)

Приведя пример, покажите, что если MM — НКА, распознающий язык CC, то при взаимной замене допускающих и недопускающих состояний в MM не обязательно получается новый НКА, распознающий дополнение CC. Замкнут ли класс языков, распознаваемых НКА, относительно операции дополнения? Обоснуйте свой ответ.

Задача 1.15

Приведите контрпример, показывающий, что следующая конструкция не доказывает теорему 1.49 о замкнутости класса регулярных языков относительно операции звезды. 1 Пусть N1=(Q1,Σ,δ1,q1,F1)N_{1}=\left(Q_{1}, \Sigma , \delta_{1}, q_{1}, F_{1}\right) распознаёт A1A_{1}. Построим N=(Q1,Σ,δ,q1,F)N=\left(Q_{1}, \Sigma , \delta , q_{1}, F\right) следующим образом. Предполагается, что NN распознаёт A1∗A_{1}^{*}.

Footnotes

  1. Иными словами, вы должны предъявить конечный автомат N1N_{1}, для которого построенный автомат NN не распознаёт звезду языка N1N_{1}. ↩

?
(a)

Состояния NN — это состояния N1N_{1}.

(b)

Начальное состояние NN совпадает с начальным состоянием N1N_{1}.

(c)

F={q1}∪F1F=\left\{ q_{1}\right\} \cup F_{1}. Допускающие состояния FF — это старые допускающие состояния плюс начальное состояние.

(d)

Определим δ\delta так, чтобы для любых q∈Q1q \in Q_{1} и a∈Σεa \in \Sigma_{\varepsilon },

δ(q,a)={δ1(q,a)q∉F1 или a≠εδ1(q,a)∪{q1}q∈F1 и a=ε. \delta (q, a)= \begin{cases} \delta _{1}(q, a) & q \notin F_{1} \text{ или } a \neq \varepsilon \\ \delta _{1}(q, a) \cup \left\{ q_{1}\right\} & q \in F_{1} \text{ и } a=\varepsilon . \end{cases}

(Подсказка: изобразите эту конструкцию графически, как на рисунке 1.50.)

Задача 1.16

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

?
(a)

(b)

Задача 1.17
?
(a)

Постройте НКА, распознающий язык (01∪001∪010)∗(01 \cup 001 \cup 010)^{*}.

(b)

Преобразуйте этот НКА в эквивалентный ДКА. Приведите только ту часть ДКА, которая достижима из начального состояния.

Задача 1.18

Приведите регулярные выражения, порождающие следующие языки (ср. упражнение 1.6). Во всех пунктах алфавит равен {0,1}\left\{ 0,1\right\}.

?
(a)

{w∣w начинается с 1 и заканчивается на 0}\left\{ w \mid w\text{ начинается с 1 и заканчивается на 0}\right\}

(b)

{w∣w содержит не менее трёх единиц}\left\{ w \mid w\text{ содержит не менее трёх единиц}\right\}

(c)

{w∣w содержит подстроку 0101 (т.  е. w=x0101y для некоторых x и y)}\left\{ w \mid w\text{ содержит подстроку 0101 (т.\, е. }w=x 0101 y\text{ для некоторых }x\text{ и }y\text{)}\right\}

(d)

{w∣w имеет длину не менее 3, и её третий символ равен 0}\left\{ w \mid w\text{ имеет длину не менее 3, и её третий символ равен 0}\right\}

(e)

{w∣w начинается с 0 и имеет нечётную длину, либо начинается с 1 и имеет чётную длину}\left\{ w \mid w\text{ начинается с 0 и имеет нечётную длину, либо начинается с 1 и имеет чётную длину}\right\}

(f)

{w∣w не содержит подстроку 110}\left\{ w \mid w\text{ не содержит подстроку 110}\right\}

(g)

{w∣ длина w не превышает 5}\left\{ w \mid \text{ длина }w\text{ не превышает 5}\right\}

(h)

{w∣w — произвольная строка, кроме 11 и 111}\left\{ w \mid w\text{ — произвольная строка, кроме 11 и 111}\right\}

(i)

{w∣ каждая нечётная позиция w равна 1}\left\{ w \mid \text{ каждая нечётная позиция }w\text{ равна 1}\right\}

(j)

{w∣w содержит не менее двух нулей и не более одной единицы}\left\{ w \mid w\text{ содержит не менее двух нулей и не более одной единицы}\right\}

(k)

{ε,0}\left\{ \varepsilon , 0\right\}

(l)

{w∣w содержит чётное число нулей, либо содержит ровно две единицы}\left\{ w \mid w\text{ содержит чётное число нулей, либо содержит ровно две единицы}\right\}

(m)

Пустое множество

(n)

Все строки, кроме пустой строки

Задача 1.19
?
(a)

(0∪1)∗000(0∪1)∗(0 \cup 1)^{*} 000(0 \cup 1)^{*}

(b)

(((00)*(11)) ∪01)∗\cup 01)^{*}

(c)

∅∗\emptyset^{*}

Задача 1.20
?
(a)

a∗ b∗\mathrm{a}^{*} \mathrm{~ b}^{*}

(b)

a(ba)*b

(c)

a∗∪ b∗\mathrm{a}^{*} \cup \mathrm{~ b}^{*}

(d)

(aaa)∗(\mathrm{aaa})^{*}

(e)

Σ∗aΣ∗ bΣ∗aΣ∗\Sigma^{*} \mathrm{a} \Sigma^{*} \mathrm{~ b} \Sigma^{*} \mathrm{a} \Sigma^{*}

(f)

aba∪baba b a \cup b a b

(g)

(ε∪a)b(\varepsilon \cup a) b

(h)

(a∪ba∪bb)Σ∗(\mathrm{a} \cup \mathrm{ba} \cup \mathrm{bb}) \Sigma^{*}

Задача 1.21

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

?
(a)

(b)

Задача 1.22

В некоторых языках программирования комментарии располагаются между разделителями вида / и /. Пусть CC — язык всех корректно оформленных строк-комментариев с такими разделителями. Элемент CC должен начинаться с / и заканчиваться на /, но не должен содержать / внутри себя. Для простоты будем считать, что алфавит для CC — это Σ={a,b,/,#}\Sigma =\left\{ \mathrm{a}, \mathrm{b}, /, \# \right\}.

?
(a)

Постройте ДКА, распознающий CC.

(b)

Приведите регулярное выражение, порождающее CC.

Задача 1.23

ᴬ Пусть BB — произвольный язык над алфавитом Σ\Sigma. Докажите, что B=B+B=B^{+} тогда и только тогда, когда BB⊆BB B \subseteq B.

?
Задача 1.24

Конечный автомат-преобразователь (finite state transducer, FST) — это разновидность детерминированного конечного автомата, выходом которого является строка, а не просто допуск или отказ. Ниже приведены диаграммы состояний автоматов-преобразователей T1T_{1} и T2T_{2}.

Каждый переход FST помечен двумя символами: один задаёт входной символ для этого перехода, а другой — выходной символ. Эти два символа записываются через косую черту, /, разделяющую их. В T1T_{1} переход из q1q_{1} в q2q_{2} имеет входной символ 2 и выходной символ 1. У некоторых переходов может быть несколько пар вход-выход, как, например, у перехода из T1T_{1} из q1q_{1} в себя. Когда FST работает на входной строке ww, он считывает входные символы w1⋯wnw_{1} \cdots w_{n} один за другим и, начиная с начального состояния, следует по переходам, сопоставляя входные метки с последовательностью символов w1⋯wn=ww_{1} \cdots w_{n}=w. Каждый раз, проходя по переходу, автомат выдаёт соответствующий выходной символ. Например, на входе 2212011 машина T1T_{1} проходит последовательность состояний q1,q2,q2,q2,q2,q1,q1,q1q_{1}, q_{2}, q_{2}, q_{2}, q_{2}, q_{1}, q_{1}, q_{1} и выдаёт на выходе 1111000. На входе abbb автомат T2T_{2} выдаёт на выходе 1011. Укажите последовательность состояний и результат работы для каждого из следующих пунктов.

?
(a)

T1T_{1} на входе 011

(b)

T1T_{1} на входе 211

(c)

T1T_{1} на входе 121

(d)

T1T_{1} на входе 0202

(e)

T2T_{2} на входе b

(f)

T2T_{2} на входе bbab

(g)

T2T_{2} на входе bbbbbb

(h)

T2T_{2} на входе ε\varepsilon

Задача 1.25

Изучите неформальное определение автомата-преобразователя (FST), данное в упражнении 1.24. Дайте формальное определение этой модели по образцу определения 1.5 (стр. 35). Считайте, что у FST есть входной алфавит Σ\Sigma и выходной алфавит Γ\Gamma, но нет множества допускающих состояний. Включите в определение формальное описание вычисления FST. (Подсказка: FST — это пятёрка. Его функция переходов имеет вид δ:Q×Σ⟶Q×Γ\delta : Q \times \Sigma \longrightarrow Q \times \Gamma.)

Упражнение 1.24: Автомат-преобразователь с конечным числом состояний (FST) — это тип детерминированного конечного автомата, выход которого является строкой, а не просто допуском или отклонением. Каждый переход FST помечен двумя символами: один обозначает входной символ для этого перехода, а другой — выходной символ, причём эти два символа записываются через слэш, /, разделяющий их. Некоторые переходы могут иметь несколько пар вход-выход. Когда FST вычисляет на входной строке ww, он берёт входные символы w1⋯wnw_{1} \cdots w_{n} по одному и, начиная с начального состояния, следует переходам, сопоставляя входные метки с последовательностью символов w1⋯wn=ww_{1} \cdots w_{n}=w. Каждый раз, проходя по переходу, он выводит соответствующий выходной символ.

?
Задача 1.26

Используя решение, полученное в упражнении 1.25, приведите формальное описание машин T1T_{1} и T2T_{2}, изображённых в упражнении 1.24.

?
(a)

T1T_{1}

(b)

T2T_{2}

Задача 1.27

Изучите неформальное определение автомата-преобразователя (FST), данное в упражнении 1.24. Приведите диаграмму состояний FST со следующим поведением. Его входной и выходной алфавиты — {0,1}\left\{ 0,1\right\}. Его выходная строка совпадает с входной строкой на чётных позициях, но инвертирована на нечётных позициях. Например, на входе 0000111 он должен выдавать 1010010.

Упражнение 1.24: Автомат-преобразователь с конечным числом состояний (FST) — это тип детерминированного конечного автомата, выход которого является строкой, а не просто допуском или отклонением. Каждый переход FST помечен двумя символами: один обозначает входной символ для этого перехода, а другой — выходной символ, причём эти два символа записываются через слэш, /, разделяющий их. Некоторые переходы могут иметь несколько пар вход-выход. Когда FST вычисляет на входной строке ww, он берёт входные символы w1⋯wnw_{1} \cdots w_{n} по одному и, начиная с начального состояния, следует переходам, сопоставляя входные метки с последовательностью символов w1⋯wn=ww_{1} \cdots w_{n}=w. Каждый раз, проходя по переходу, он выводит соответствующий выходной символ.

?
Задача 1.28

Преобразуйте следующие регулярные выражения в НКА, используя процедуру из теоремы 1.54. Во всех пунктах Σ={a,b}\Sigma =\left\{ \mathrm{a}, \mathrm{b}\right\}.

?
(a)

a(abb)∗∪ b\mathrm{a}(\mathrm{abb})^{*} \cup \mathrm{~ b}

(b)

a+∪(ab)+\mathrm{a}^{+} \cup (\mathrm{ab})^{+}

(c)

(a∪b+)a+b+\left(a \cup b^{+}\right) a^{+} b^{+}

Задача 1.29

Используя лемму о накачке, покажите, что следующие языки не являются регулярными.

?
(a)

ᴬ A1={0n1n2n∣n≥0}A_{1}=\left\{ 0^{n} 1^{n} 2^{n} \mid n \geq 0\right\}

(b)

A2={www∣w∈{a,b}∗}A_{2}=\left\{ w w w \mid w \in \left\{ \mathrm{a}, \mathrm{b}\right\}^{*}\right\}

(c)

ᴬ A3={a2n∣n≥0}A_{3}=\left\{ \mathrm{a}^{2^{n}} \mid n \geq 0\right\} (Здесь a2n\mathrm{a}^{2^{n}} означает строку из 2n2^{n} букв a.)

Задача 1.30

Опишите ошибку в следующем «доказательстве» того, что 0∗1∗0^{*} 1^{*} не является регулярным языком. (Ошибка обязательно есть, поскольку 0∗1∗0^{*} 1^{*} регулярен.) Доказательство ведётся от противного. Предположим, что 0∗1∗0^{*} 1^{*} регулярен. Пусть pp — длина накачки для 0∗1∗0^{*} 1^{*}, задаваемая леммой о накачке. Возьмём в качестве ss строку 0p1p0^{p} 1^{p}. Мы знаем, что ss принадлежит 0∗1∗0^{*} 1^{*}, но пример 1.73 показывает, что ss нельзя накачать. Таким образом, мы приходим к противоречию. Значит, 0∗1∗0^{*} 1^{*} не регулярен.

?