Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posob.doc
Скачиваний:
9
Добавлен:
06.11.2018
Размер:
6.17 Mб
Скачать

5. Упражнения

  1. Постройте для входного алфавита  = {0,1} конечный автомат A, кото­рый принимает язык L = || A || = {ww  {01}*, w – двоичное пред­ставление натурального числа, делящегося на 3}. Для простоты можно положить, что  представляет 0 и что разрешены ведущие нули.

Решение. 3 состояния Q = {0,1,2} представ­ляют классы вычетов по модулю 3. Чтение цифры 0 означает умножение на 2 по мо­дулю 3, чтение цифры 1 означает умножение на 2 и сложение с 1 по модулю 3. Это приво­дит к следующему автомату:

  1. (a) Постройте наименьший недетерминированный конечный автомат A с входным алфавитом  = {a,b,c}, такой, что || A || = {a,b,c}*abc{a,b,c}*.

Решение.

Поскольку автомат с не более чем тремя состояниями, при­нимающий слово abc, при принятии этого слова должен делать «петлю» (т.е. по край­ней мере одно состояние в по­следовательности при принятии abc будет встречаться дважды), то должно быть принято по крайней мере одно слово длины меньше 3. Отсюда следует, что указанный автомат является наименьшим из возможных.

(b) Детерминируйте этот автомат.

Решение. Рассмотрите функцию перехода Q    P (Q) и про­должите её до функции : P (Q)   P (Q):

a

b

c

q0

q1

q2

q3

q0q1

ø

ø

q3

q0

q2

ø

q3

q0

ø

q3

q3

q4: q0q1

q5: q0q2

q6: q0q3

q7: q0q1q3

q8: q0q2q3

q0q1

q0q1

q0q1q3

q0q1q3

q0q1q3

q0q2

q0

q0q3

q0q2q3

q0q3

q0

q0q3

q0q3

q0q3

q0q3

Это дает автомат:

Рассматривая состояния q6, q7 и q8, можно видеть, что все эти состоя­ния являются конечными и при чтении любого из символов a, b или c автомат остается в пределах этих состояний, поэтому эти три состоя­ния могут быть объединены в состояние q:

  1. Постройте детерминированный конечный автомат A, который прини­мает только те слова над алфавитом  = {0,1}, которые содержат не­четное число символов 0 и заканчиваются на 11.

Решение. Недетерминированный автомат строится непосредственно:

Детерминация этого автомата путем продолжения функции перехода дает:

0

1

q0

q1

q0

q1

q0

q1q2

q2

ø

q3

q3

ø

ø

q4: q1q2

q0

q1q2q3

q5:  q1q2q3

q0

q1q2q3

и отсюда:

  1. Укажите конечный автомат A с входным алфавитом  = {a, b}, такой, что ||A|| = {w {a, b}*w содержит подслово aa, но не содержит подслово bb}.

Решение. Следующая структура автомата

может быть просто продолжена до:

  1. Докажите, что не существует конечный автомат A, такой, что ||A|| = L = {aibii}. (Отсюда следует, что L не является регулярным.)

Доказательство. Предположим, что существует конечный автомат A = (Q,,,q0,F) c n состояниями, такой, что L = ||A||. Для каждого при­нимаемого слова wi = aibi рассмотрим последовательность состояний при принятии слова wi: при этом через qi обозначим состояние, которое будет достигнуто после обработки ai. Так как A имеет только n состоя­ний, то отсюда следует, что по крайней мере два состояния из {qi | 1  I n} должны быть одинаковыми, например, должно выпол­няться: 0  qk qln. Однако тогда A будет принимать слово albk c kl, что является противоречием к тому, что L = || A ||.

  1. Докажите, что не существует конечный автомат A с входным алфавитом Σ = {a}, такой, что ||A|| = L = {ai² i}.

Доказательство. Предположим, что существует конечный автомат A = (Q,,,q0,F) c n состояниями, такой, что L = ||A||. Для каждого при­нимаемого слова wi = ai² рассмотрим последовательность состояний, достигаемых при принятии слова wi: при этом через qi обозначим со­стояние, которое будет достигнуто после обработки ai. Так как A обладает только n состояниями, отсюда следует, что по крайней мере два состояния из {qi | 1  i  n + 1} должны быть одинаковыми, напри­мер: 1  qkqln+1. Однако тогда будет приниматься слово w = al² – (lk) c k < l из A. Справедливо также:

(l – 1)2 = l2 – (l – 1) – l l2 – (l k) – l < l2 – (l k) < l2,

а это означает, что w не является квадратом ни одного натурального чис­ла и поэтому w не содержится в языке L. Это противоречие показывает, что L не может быть языком, принимаемым конечным автоматом A.

  1. Укажите контекстно-свободную грамматику G с алфавитом терми­нальных символов Σ = {a, b}, такую, что L(G) = {anb2n| n > 3}.

Решение. G = ({S, T}, {a, b}, P, S), причем продукции P заданы сле­дующим образом:

SaaaaTbbbbbbbb,

TaTbb,

Tε.

  1. Укажите контекстно-свободную грамматику G над Σ = {a, b, c}, кото­рая порождает язык L = {aibjck| k i + j, i, j, k }.

Ответ. Из того соображения, что для каждого «впереди» читаемого символа a, соответственно b, «позади» может быть выведен символ c либо ε, получается грамматика G = ({S,T,C},{a,b,c},P, S), где продукции P заданы следующим образом:

S → aSC | T,

TbTC | ε,

Cc | ε.

  1. Укажите контекстно-свободную грамматику G над Σ = {a, b, c}, кото­рая порождает язык L = {aibjck| i, j, k  0, j = 2i или i > k}.

Ответ. Рассматривая случаи j = 2i для i  1, i = j = 0 и i > k раздельно, получим, например, грамматику G = ({SS1S2S3TU, BC}, {a, b, c}, P, S), причем продукции P заданы следующим образом:

S S1 | S2 | S3

S1 → aTbbS2

S2 → cS2 | ε

S3 → aU

T → aTbb | ε

U → aUC | B

B → bB | ε

C → c | ε

  1. Укажите контекстно-свободную грамматику G над Σ = {a, b, c}, кото­рая порождает язык L = {aibjck| i j или j k}.

Ответ. Рассмотривая случаи i > j, j > i, j > k и k > j раздельно, получим, например, грамматику G = ({S,T,U,A,B,C}, {a,b,c}, P, S), причем про­дукции P заданы следующим образом:

S → aATC | TbBC | AbBU | AUcC

TaTb | ε

U → bUc | ε

A → aA | ε

B → bB | ε

C → cC | ε

Замечание. Так как можно показать, что язык = { aibjck | i }={a, b,c}*\L не является контекстно-свободным, здесь приведен пример, что допол­нение контекстно-свободного языка не обязано быть контекстно-сво­бодным.

  1. Укажите линейно-контекстно-свободную грамматику G с алфавитом

Σ = {a, b}, которая порождает язык L = {a,b}*\{vm, v = anb | n1, m2}.

(Грамматика называется линейно-контекстно-свободной в том случае, ес­ли она содержит только продукции вида Aa1Ba2 и А → a, где A, B  Ф и a,a1,a2  Σ ∪ { ε }.)

Решение. Можно заметить, что для каждого слова w L выполняется по крайней мере одно из следующих условий:

(а) w содержит подслово baibajb где i j;

(b) w начинается с aibajb, причем i j;

(с) w начинается с b;

(d) w заканчивается на a;

(е) w содержит подслово bb;

(f) w содержит только одно b;

(g) w является пустым словом.

Для каждого из этих случаев можно создать линейную контекстно-сво­бодную грамматику Gi и в результате получить грамматику

G = ({S,S1,T1,U1,V1,W1,X1,S2,T2,U2,V2,W2,S3,T3,S4,T4,S5,T5,U5,V5,S6,T6,U6},{a,b},P,S),

где продукции P заданы следующим образом:

S → S1 | S2 | S3 | S4 | S5 | S6 | ε

S1 → S1a | S1b | X1

X1 → aX1 | bX1 | T1

T1 → bU1b | bW1b

U1 → aU1 | aV1

V1 → aV1a | b

W1 → W1a | V1a

S2 → S2a | S2b | T2

T2 → U2b | W2b

U2 → aU2 | aV2

V2 → aV2a | b

W2 → W2a | V2a

S3 → bT3

T3 → aT3 | bT3 | ε

S4 → T4a

T4 → T4a | T4b | ε

S5 → aS5 | bS5 | T5

T5 → T5a | T5b | U5

U5 → bV5b

V5 → ε

S6 → aS6 | T6

T6 → T6a | U6

U6 → b

12. Покажите: если L * контекстно-свободный и a , то и : = LLRa также контекстно-свободный (LR = {wR | w L}, wRзеркальное отра­жение w).

Решение. Пусть язык L порождает контекстно-свободную грамматику G = (, , P, S). Легко видеть, что контекстно-свободная грамматика GR: = (, , PR, S), где продукции P заданы следующим образом:

T 1n P, i     и T    T → n…1PR,

порождает язык LR. Обозначим теперь через  и  две независимых копии , таким образом, A    A    A   для всех A  . Тогда контекстно-свободная грамматика  = ({    S }, , { S S a P   P }, S) порождает язык , причем продукции P и P определены следующим образом:

P есть копия P, где в продукциях из P каждая встречающаяся пере­менная A   замещается соответствующей переменной A  ;

P есть копия PR, где в продукциях из PR каждая встречающаяся пе­ременная A   замещается соответствующей переменной A  .

  1. (a) Постройте для языка L={anbnn } контекстно-свободную грамма­тику в нормальной форме Грайбах.

Решение. G = ({S, B}, {a, b}, P, S), где продукции P заданы посред­ством:

SaSBε

Bb

(b) Укажите магазинный автомат P, который принимает язык L через конечное состояние и пустую магазинную ленту.

Решение. P= ({q}, {a, b}, {S, B}, δ, q, S, {q}), где функция перехода δ задана следующим образом:

δ(q, a, S) = {(q, SB)}

δ (q, ε, S) = {(q, ε)}

δ(q,b, B) = {(q, ε)}

Автомат представлен следующей схемой:

ε

(c) Укажите детерминированный магазинный автомат P’, который принимает язык L’= {anbn n1} через конечное состояние и пус­тую магазинную ленту.

Решение. Следует рассмотреть, к примеру, контекстно-свободную грамматику G’ = ({S, B}, {a, b}, P, S) с продукциями P:

SaB

BaBbb

Эта грамматика порождает L и приводит к детерминированному магазинному автомату P’ = ({q}, {a, b}, {S, B, b}, δ, q, S, {q}), где функция перехода задана следующим образом:

δ(q, a, S) = {(q, B)}

δ(q, a, B) = {(q, Bb)}

δ(q, b, B) = {(q, ε)}

δ(q, b, b) = {(q, ε)}

Автомат представлен следующей схемой:

(d) Укажите детерминированный магазинный автомат P’’, который принимает язык L’’= L через конечное состояние.

Решение. Исходя из автомата, полученного в пункте (с), можно по­строить следующий детерминированный автомат, который прини­мает L через конечное состояние:

(bbX, q1)

(bbbX, q1)

  1. (a) Постройте для языка L = {wawRw{a, b}*} контекстно-свободную грамматику в нормальной форме Грайбах. (w = a1a2...an, ai   wR = anan-1...a1)

Решение. G = ({S, A, B}, {a, b}, P, S), где продукции P заданы сле­дующим образом:

S → a│aSA│bSB A → a

B → b

(b) Укажите магазинный автомат P, который принимает язык L через конечное состояние и пустую магазинную ленту.

Решение. P = ({q}, {a, b}, {S, A, B}, δ, q, S, {q}), где функция пере­хода δ задана следующим образом:

δ(q, a, S) = {(q, ε), (q, SA)}

δ(q, b, S) = {(q, SB)}

δ(q, a, A) = {(q, ε)}

δ(q, b, B) = {(q, ε)}

  1. (a) Постройте для L = {ww’  {a, b}*wwR и w = w} контекстно-свободную грамматику в нормальной форме Грайбах.

Решение. G = ({S, T, A, B}, {a, b}, P, S), где продукции P заданы следующим образом:

SaSAbSBaTBbTA

TaTAbTBaTBbTAε

Aa

Bb

(b) Укажите магазинный автомат P, который принимает язык L через конечное состояние и пустую магазинную ленту.

Решение. P=({q}, {a, b}, {S, T, A, B}, δ, q, S, {q}), где функция пере­хода δ задана следующим образом:

δ(q, a, S) = {(q, SA), (q, TB)}

δ(q, a, A) = {(q, ε)}

δ(q, b, S) = {(q, SB), (q, TA)}

δ(q, a, B) = {(q, ε)}

δ(q, a, T) = {(q, TA), (q, TB)}

δ(q, ε, T) = {(q, ε)}

δ(q, b, T) = {(q, TA), (q, TB)}

  1. Постройте для языка L = {aibjaki, j, k 0, i + k = j} магазинный авто­мат, такой, что P = L.

Решение. Следует рассмотреть контекстно-свободную грамматику G = = ({S,T, A, B}, {a, b}, P, S), где продукции P заданы следующим об­разом:

S → aBT

B → aBb │b

T → bA

A bAaa

Исходя из этого строят магазинный автомат P = ({q}, {a, b}, {S, T, A, B, a, b}, δ, q, S, {q}), где функция перехода δ задана следующим образом:

δ(q, a, S) = {(q, BT)}

δ(q, b, A) = {(q, Aa)}

δ(q, a, B) = {(q, Bb)}

δ(q, a, A) = {(q, ε)}

δ(q, b, B) = {(q, ε)}

δ(q, a, a) = {(q, ε)}

δ(q, b, T) = {(q, A)}

δ(q, b, b) = {(q, ε)}

Автомат представлен следующей схемой:

  1. Постройте для входного алфавита  = {a, b} магазинный автомат P, та­кой, что P = L = {w*w содержит одинаковое число символов a и b}.

Решение. Вариант 1. Исходя из грамматики G = ({S}, {a, b}, P, S) с продукциями P

S aSbS bSaSε

строят магазинный автомат P = ({q}, {a, b},{S, a, b}, δ, S, {q}), где функция перехода δ задана следующим образом:

δ(q, a, S) = {(q, SbS)}

δ(q, a, a) = {(q, ε)}

δ(q, b, S) = {(q, SaS)}

δ(q, b, b) = {(q, ε)}

δ(q, ε, S) = {(q, ε)}

Вариант 2. Можно непосредственно построить магазинный автомат, если заметить, что требуется только отметить «перевес» символов a или b на магазинной ленте. Это приводит к автомату P = ({q}, {a, b}, { p0, p1, p2}, δ, p0, {q}), где:

δ(q, a, p0) = {(q, p1p0)}

δ(q, b, p0) = {(q, p2p0)}

δ(q, a, p1) = {(q, p1p1)}

δ(q, b, p1) = {(q, ε)}

δ(q, a, p2) = {(q, ε)}

δ(q, b, p2) = {(q, p2p2)}

δ(q, ε, p0) = {(q, ε)}

Этот автомат изображен на следующей схеме:

  1. Постройте грамматику Ван-Вайнгаардена G, которая «вычисляет» фун­к­цию сложения, то есть должно выполняться L(G) = {1m1n1m+nm, n ≥ 0}.

Решение. На основе соглашений об обозначениях в данном пособии (все встречающиеся большие буквы есть метапонятия в Vm, все встречаю­щиеся маленькие буквы и специальные знаки есть синтаксические знаки в Vz или терминальные символы в , S обозначается через start) доста­точно для грамматики Ван-Вайнгаардена G = {Vz, Vm, , R, P, S} указать только множество метапродукций R и множество схем продукций P.

Грамматика Ван-Вайнгаардена, которая вычисляет функцию сложения, определена заданием R и P в нормальной форме Бэкуса.

R:

P:

A:: = 1Aε

 start:: =  A1 A2 A1 plus A2

A1:: = 1 A1ε

A1 plus A2:: =  A1  A2

A2:: = 1 A2ε

1A:: = 1A

ε:: = ε


В качестве примера рассмотрим следующий вывод:

 start  131213 plus 12 *131213 12 *131215

  1. Постройте грамматику Ван-Вайнгаардена G, которая «вычисляет» функ­цию умножения, то есть должно выполняться L(G)={1m1n1m*nm, n ≥ 0}.

Решение. Грамматика Ван-Вайнгаардена, которая вычисляет функцию умножения, определена заданием R и P в нормальной форме Бэкуса.

R:

P:

A:: = 1A│ε

 start:: =  A1 A2 A1 mal A2

A1:: = 1 A1ε

 mal A2:: = ε

A2:: = 1 A2ε

 1 A1 mal A2:: =  A1 mal A2  A2

1A:: = 1A

ε:: = ε


Для примера рассмотрим следующий вывод:

 start  121312 mal 13 *121312mal 13 12131 mal 1313 1213mal 13 13 13 121313 13*131216.

  1. Постройте грамматику Ван-Вайнгаардена G, которая вычисляет функ­цию f(n): = n2, n, то есть должно выполняться: L(G) = {1n1n²n ≥ 0}. Решение. Грамматика Ван-Вайнгаардена, которая вычисляет функцию f, определена заданием R и P в нормальной форме Бэкуса:

R:

P:

A:: = 1Aε

 start:: =  A A quadrat

 quadrat:: = ε

 1A quadrat:: =  A quadrat  1AA

1A:: = 1A

ε:: = ε

Для примера пусть задан следующий вывод:

 start  1313 quadrat * 1313 quadrat 1312 quadrat 11212

131quadrat 111 11212 13quadrat 1 111 11212 131 13 15 *1319.

  1. Постройте грамматику Ван-Вайнгаардена G, которая порождает язык L={anbncnn  }.

Решение. Грамматика Ван-Вайнгаардена G, которая порождает язык L, определена заданием R и P в нормальной форме Бэкуса:

R:

P:

A:: = 1Aε

 start:: = aAbAcA

a1A:: = aaA

a:: = ε

b1A:: = bbA

b:: = ε

c1A:: = ccA

c:: = ε

Для примера пусть задан следующий вывод:

 start  a11 b11 c11  a a1 b11 c11  aa1bb1 c11

aa1bb1cc1*aaabbbccc*aabbcc.

Замечание. Изменение правила для переменной  start:

start:: = abc

даёт L = { n   } для фиксированных ki, mi.

  1. Постройте грамматику Ван-Вайнгаардена G, которая порождает язык L = {aibii, j \0, НОД(i, j) = 1}.

Решение. Воспользуемся тем, что НОД(i, j) = НОД(i, j-i) для ji ≥ 1, соотв. НОД(i, j) = НОД(i-j, j) для j i ≥ 1 и НОД(1, k) = НОД(k, 1) = 1 для k≥1.

Грамматика Ван-Вайнгаардена, которая порождает язык L, определя­ется ниже заданием R и P в нормальной форме Бэкуса:

R:

P:

A:: = 1A│1

 start:: =  A bA A НОД B

B:: = 1B│1

A НОД B1A:: =  A НОД B1

A1:: = 1A11

A1B НОД B :: =  A1 НОД B

B1:: = 1B11

 1 НОД B:: = ε

C:: = 1Cε

A НОД 1 :: = ε

D:: = 1Dε

a1C:: = aaC

a:: = ε

b1D:: = bbD

b:: = ε

В качестве примера пусть задан следующий вывод:

start a111 b11 111 НОД 11 *aaab11 111 НОД 11

* aaabb 111 НОД 11  aaabb 1 НОД 11 aaabb.

Предварительные замечания к машинам Тьюринга. Для решения следующих примеров мы применим модель машины Тьюринга, кото­рая по сравнению с моделью, обсуждаемой в главе 2, является не­сколько ограниченной, – так называемую машину Тьюринга, связанную направлением. Пусть T = (Q, , , , q0, F) произвольная машина Тью­ринга. Если существует переход (.,.) = (q,., L) (соответственно (.,.) = (q, …, R)), то будем говорить, что q достигается путем пере­хода влево (соответственно вправо). Отсюда возможно тогда, что со­стояние q достигается при переходе влево или при некотором другом переходе вправо. Машина Тьюринга, связанная направлением, есть та­кая машина, для которой подобное невозможно: каждое состояние q достигается всегда либо только переходом влево, либо вправо. (Не­трудно показать, что для каждой машины Тьюринга можно построить эквивалентную машину Тьюринга, связанную направлением (т.е. вы­числяющую тот же набор функций, соответственно принимающую тот же самый язык.)

Преимущество машин Тьюринга, связанных направлением, состоит в том, что они (подобно конечным автоматам) позволяют графическое представление, которое обычно наглядней, чем простое табулирование функции перехода . При этом поступают следующим образом: каж­дому состоянию q соответствует узел, в который вписывается «L» или «R» в зависимости от того, достигается q всегда только переходом влево и соответственно только переходом вправо. Для каждого пере­хода (q, A) = (p, B, D), D{L, R} строят направленное ребро от узла q к узлу р, обозначаемое (АВ). Начальное состояние и конечные состоя­ния (если такие имеются) обозначаются подходящим образом (как в конечных автоматах).

23. Постройте машину Тьюринга, которая для входного слова an, n  0 вы­числяет двоичное представление числа n как слово над {0, 1}.

Решение. T = (Q, , , , q0, F), где Q = {q0, q1, q2, q3},  = {a},

Г = {a, 0, 1, e}, F = .

Функция перехода  определена следующим образом:

(q0e) = (q2, 0, L)

При вводе  = а0 возвращается 0.

(q0a) = (q1a, R)

(q1a) = (q1a, R)

(q1, 0) = (q1, 0, R)

(q1, 1) = (q1, 1, R)

(q1e) = (q2e, L)

Головка передвигается на край­ний справа, отличный от е сим­вол. Если этот символ 0 или 1, то вычисление закончено.

(q2a) = (q3e, L)

(q3a) = (q3a, L)

Если это символ а, то он замеща­­ется на е, и головка передвига­ется влево до двоичного числа, стоя­щего перед группой симво­лов а.

(q3, 0) = (q1, 1, R)

(q3, 1) = (q3, 0, L)

(q3e) = (q1, 1, R)

К этому двоичному числу добав­ляется 1.

Графическое представление этой машины Тьюринга, связанной направ­ле­нием, выглядит следующим образом:

(Так как начальное состояние q0 не достигается ни при каком переходе, для него не нужно вписывать никакого направления («L» или «R») или можно было бы взять на выбор «R» или «L».)

24. Постройте машину Тьюринга, которая вычисляет следующую функ­цию:

f: ({a}*)2  {a}*, f(an, am) = an+m, n, m  .

Решение. Простейшая машина Тьюринга, которая вычисляет f, есть Т = ({q}, {a}, {a, e}, , q, ), графическое представление которой за­дано в виде:

Поскольку  нигде не определена, то qaneam для всех n, m   есть конеч­ная конфигурация. Так как qaneam * qaneam (0 шагов), то Т останавлива­ется при любых входных словах (an, am)  {a}*  {a}* в конечной конфи­гурации qaneam. Поэтому для всех входных слов (anam)  {a}*  {a}*:

fT, 2(an, am) = h(aneam) = anam = an+m = f(an, am).

Дополнительные замечания. Т вычисляет все функции f: ({a}*)k  {a}*f(, …, ) = fT, k(, …, ) = h(e, …, e) = = .

Если терминальный алфавит {a} машины Т заменить произвольным алфавитом , то можно показать, что полученная таким путем машина Тьюринга вычисляет все k-местные «функции сцепления» f: (*)k  *, f(w1, …, wk) = w1wk.

25. Постройте машину Тьюринга, которая вычисляет следующую функ­цию:

f: ({a}*)2  {a}*, f(an, am) = an m, n, m  .

Решение. Следующая идея является отправным пунктом для построения.

При вводе (an, am) начальное содержимое ленты есть aneam. Машина стирает первую а в первой а-группе и записывает после аm слово Аm (А – символ ленты). Таким путем образуется an-1eamAm. Теперь снова самое первое а стирается и в конце слова дописывается Аm. Так образуется an2eamA2m. Этот процесс продолжается до тех пор, пока «не израсходу­ется» первая а-группа. Тем самым образуется amAnm. Напоследок все а стираются и все А заменяются на а, тем самым образуется anm = f(an, am). Машина Тьюринга, которая это реализует, есть T = ({0, 1, 2, 3, 4, 5, 6, 7}, {a}, {a, A, B, e}, , 0, ), где  задана следующим графом:

Наглядное значение состояний 0,…, 7 следующее:

0

Стереть первое а первой а-группы.

1

Идти вправо до второй а-группы.

2

Первый символ а, для которого не происхо­дит еще дописывание символов А, маркиро­вать через В.

3, 4

В самом конце дописывать символ А, идти влево до маркировки В; удалить ее (т. е. В за­менить снова на а); идти вправо в состоя­ние 2.

5, 6

Если для всех а второй группы был дописан сзади А, то опять искать начало первой а‑группы и перейти в начальное состояние.

7

Заменить а не е, А на а.

26. Постройте машину Тьюринга, которая вычисляет следующую функцию:

f: {a, b}*  {a, b}*, f(w) = wR, w  {a, b}*

(wR обозначает зеркальное отражение w).

Решение. Следующая идея является отправным пунктом для построения.

Каждая буква входного слова w = c1 cn, (ci  {a, b}), за исключением последней, сдвигается на одну позицию вправо, последняя буква запи­сывается перед с1 (т. е. на первоначальную позицию буквы с1). Таким путем образуется cnc1 cn-1. Далее то же самое делается с c1 cn-1 (при этом cn остается на ленте без изменений). Таким образом, образуется cn сn-1c1 cn-2. Этот процесс повторяется до тех пор, пока «не израсхо­дуется» входное слово. Так образуется cncn-1 c1 = wR. Приводимая ниже машина Тьюринга Т вычисляет wR описанным способом: T = ({0, 1, 2, 3, 4}, {a, b}, {a, b, e}, , 0, ), где  задана следующим графом:

Наглядное значение состояний 0,…, 4 следующее:

0

Сдвинуть слово от позиции головки вправо: стереть первый символ и сделать отметки в состоянии (1 «пометить а», 2 «пометить b»).

1, 2

Каждый следующий знак заменить на поме­ченный и одновременно пометить; послед­ний знак не писать, а сделать отметку в со­стоянии (3 для а, 4 для b).

3, 4

Идти влево к началу сдвинутого слова и впи­сать туда последний символ; после этого – шаг вправо в начальное состояние. Процесс повторяется циклически.

27. Постройте машину Тьюринга, которая принимает следующий язык L:

L = {anb2nc3n | n  } (L  {a, b, c}*).

Решение. Исходным пунктом для построения является следующая идея.

Записанное на ленте слово попеременно пробегается слева направо, при этом (в указанной последовательности) символ а заменяется на А, два b – на В, три с – на С. (Если после замещения а на А выясняется, что больше не имеется в наличии двух b, соответственно трех с, ма­шина останавливается, не принимая слово.) Как только не остается ни одного символа а, то процесс прерывается и проверяется, содержит ли оставшееся слово еще хоть один b или с. Лишь в том случае, если не содержит, машина останавливается в конечном состоянии.

T = ({0, 1, 2, 3, 4, 5, 6, 7, 8}, {a, b, c}, {a, b, c, A, B, C, e}, , 0, {8}),

где  задана следующим графом:

Наглядное значение состояний 0,…, 8 следующее:

0, 7, 8

Если  входное слово, то оно сразу принима­ется, т. е. переходят в конечное состояние 8 ( = а0b20c30). Если существует еще один символ а, то он заменяется на А и тем самым начинается выше описанный «пробег». Если больше не имеется ни одного а, то в состоя­нии 7 проверяется, имеются ли еще символы b или с, и если нет, то слово акцептируется.

1, 2

Заменить первые два b на В.

3, 4, 5

Заменить первые три с на С.

6

Идти налево к позиции после символа А, за­писанного последним.

28. Постройте машину Тьюринга, которая принимает следующий язык L:

L = {an | n  } (L  {a, b}*).

Решение. Отправным пунктом для построения является следующая идея.

Для принимаемого языка L справедливо, что   L и что для всех n, m , an+1bmL выполняется тогда и только тогда, когда anbm-2n-1  L (m = (n + 1)2m – 2n – 1 = n2). Чтобы проверить, лежит ли входное слово в L, поступают следующим образом:  принимается сразу. Из входного слова вида an+1bm путем стирания первого символа а и последних 2n+1 символов b производится слово anbm-2n-1. Это слово рассматривается как новое входное слово, и описанный процесс повто­ряется. Если таким способом первоначальное входное слово сокраща­ется до , то оно принимается. Если символы b остаются лишними, или для процесса стирания символов b не достает, машина останавливается, не принимая слово.

T = ({0, 1, 2, 3, 4, 5, 6, 7, 8}, {a, b}, {a, b, A, e}, , 0, {8}),

где  задана следующим графом:

Содержательное значение состояний 0,…, 8 следующее:

0

Если  входное слово, то оно сразу принима­ется. Если же входное слово начинается с а, то этот а стирается.

1, 2

Последний символ b стирается.

3 – 7

Для каждого а в начале слова стираются два b в конце. (Для этого, при необходимости, один символ а маркируется (аА), ищется конец слова (4, 5), стираются два b (5, 6, 7), ищется маркировка А (7), маркировка опять удаляется (аА) и производится шаг влево в состоянии 3, для того чтобы повторить процесс для следующего а.) После этого производится переход в начальное состояние и оставшееся слово рассматривается как но­вое входное слово.

29. Постройте машину Тьюринга, которая принимает следующий язык L:

L = {ww | w  {a, b}*}.

Решение. Отправным пунктом для построения является следующая идея.

Сначала устанавливается, является ли длина входного слова – четной и одновременно буквы первой половины слова маркируются «одно­кратно» (аа', b b'), а второй половины слова «двукратно» (аа'', b  b''). Если при этом выясняется, что длина входного слова нечетная, то машина останавливается, не принимая слово. В противном случае, при необходимости, первый однократно маркированный символ срав­нивается с первым двукратно маркированным символом. Если эти сим­волы совпадают (без учета маркировки), то первый заменяется на е, а последний – на Х. В противном случае машина останавливается, не ак­цептируя слово. Если таким способом удается получить слово, состоя­щее из одних символов Х, то переходят в конечное состояние.

T = ({0, 1, 2, 3, 4, 5, 6, 7, 8}, {a, b}, {a, b, a', b', a'', b'', X, e}, , 0, {8}),

где  задана следующим графом:

Наглядное значение состояний 0,…, 8 следующее:

0, 1, 2, 3

 принимается сразу же. При вводе непус­того слова первая (вторая) половина этого слова маркируется однократно (двукратно).

4

Идти влево к первому е.

5, 6, 7

Стереть первый однократно маркированный символ и сделать отметку в состоянии (a 6, b' 7). Идти вправо к первому дву­кратно маркированному символу, при совпа­дении заменить на Х и снова перейти в 4. Если на ленте стоят одни только символы Х, то слово принимается.

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