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

Алгоритмы и алгоритмическая сложность Контр. р. 1 в 18

.doc
Скачиваний:
13
Добавлен:
01.04.2014
Размер:
67.07 Кб
Скачать

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

Учреждение образования

Белорусский государственный университет информатики и радиоэлектроники

Факультет непрерывного и дистанционного обучения

Кафедра информационные технологии автоматизированных систем

КОНТРОЛЬНАЯ РАБОТА № 1

ПО ДИСЦИПЛИНЕ

АЛГОРИТМЫ И АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ

на тему: «Машины Тьюринга»

Выполнил ст. гр. хххххххх

хххххххххххххххххххххххх

E-mail: ххххххххххххххххх

Проверил:

А.Л. Гончаревич

Минск 2011

Контрольное задание №1

Написать правила машины Тьюринга для решения указанной задачи.

1 Вариант: на вход поступает последовательность из 0 и 1. Машина должна записать ее в обратном порядке. Пример 0001110 заменяется на 0111000.

Решение:

Q1 – начальное состояние работы машины Тьюринга. Головка находиться на первом левом элементе ленты. В процессе работы перемещается головка относительно ленты. Qfin – конечное состояние машины Тьюринга.

Таблица1.

0

1

Q1

Q1R

0Q2R

1Q2R

Q2

Q3L

0Q4S

1Q4S

Q3

Q3S

Q18R

Q20R

Q4

Q5L

0Q4R

1Q4R

Q5

Q5S

Q7R

Q6R

Q6

1Q8L

0Q6S

1Q6S

Q7

0Q8L

0Q7S

1Q7S

Q8

Q8L

Q13L

Q9L

Q9

Q19S

0Q10R

1Q10R

Q10

Q10R

0Q11R

1Q11R

Q11

1Q12S

0Q11R

1Q11R

Q12

Q8S

0Q12L

1Q12L

Q13

Q17S

0Q14R

1Q14R

Q14

Q14R

0Q15R

1Q15R

Q15

0Q16S

0Q15R

1Q15R

Q16

Q8S

0Q16L

1Q16L

Q17

Q17R

0Q18R

1Q18R

Q18

0-S

0Q18R

1Q18R

Q19

Q19R

0Q20R

1Q20R

Q20

1-S

0Q20R

1Q20R

В данной таблице Qх – состояние машины Тьюринга.

0, 1, . - символы входного алфавита машины.

 - пустой символ.

“–” конечное состояние машины Тьюринга Qfin.

Примеры работы машины:

Заменим пустой символ  на _

Начало работы:

Лента: 0

Лента: 110

Шаг 1 Состояние Q1 (0) -> Q2 (0, R)

Шаг 2 Состояние Q2 (_) -> Q3 (_, L)

Шаг 3 Состояние Q3 (0) -> Q18 (_, R)

Шаг 4 Состояние Q18 (_) -> Qfin (0, S)

Шаг 1 Состояние Q1 (1) -> 2 (1, R)

Шаг 2 Состояние Q2 (1) -> 4 (1, S)

Шаг 3 Состояние Q4 (1) -> 4 (1, R)

Шаг 4 Состояние Q4 (0) -> 4 (0, R)

Шаг 5 Состояние Q4 (_) -> 5 (_, L)

Шаг 6 Состояние Q5 (0) -> 7 (_, R)

Шаг 7 Состояние Q7 (_) -> 8 (0, L)

Шаг 8 Состояние Q8 (_) -> 8 (_, L)

Шаг 9 Состояние Q8 (1) -> 9 (_, L)

Шаг 10 Состояние Q9 (1) -> 10 (1, R)

Шаг 11 Состояние Q10 (_) -> 10 (_, R)

Шаг 12 Состояние Q10 (_) -> 10 (_, R)

Шаг 13 Состояние Q10 (0) -> 11 (0, R)

Шаг 14 Состояние Q11 (_) -> 12 (1, S)

Шаг 15 Состояние Q12 (1) -> 12 (1, L)

Шаг 16 Состояние Q12 (0) -> 12 (0, L)

Шаг 17 Состояние Q12 (_) -> 8 (_, S)

Шаг 18 Состояние Q8 (_) -> 8 (_, L)

Шаг 19 Состояние Q8 (_) -> 8 (_, L)

Шаг 20 Состояние Q8 (1) -> 9 (_, L)

Шаг 21 Состояние Q9 (_) -> 19 (_, S)

Шаг 22 Состояние Q19 (_) -> 19 (_, R)

Шаг 23 Состояние Q19 (_) -> 19 (_, R)

Шаг 24 Состояние Q19 (_) -> 19 (_, R)

Шаг 25 Состояние Q19 (_) -> 19 (_, R)

Шаг 26 Состояние Q19 (0) -> 20 (0, R)

Шаг 27 Состояние Q20 (1) -> 20 (1, R)

Шаг 28 Состояние Q20 (_) -> Qfin (1, S)

Символы ленты на момент завершения работы программы: _ 0

Результат: 0

Символы ленты на момент завершения работы программы: _ _ _ _ 0 1 1

Результат: 0 1 1

Связка состояний Q1 и Q2 читает первый символ и определяет дальнейший ход работы машины. Если за ним оказывается пустой символ машина делает шаг назад, берет символ, вписывает его на пустое место и переходит в конечное состояние Qfin. Если вторым символом оказывается 0 или 1 машина переходит в состояние Q4 и продолжает движение по ленте вправо пока не встретит пустой символ (определит конец ленты); далее машина делает шаг влево считывает символ и вписывает его на пустое место. Этим действием машина определит 1 символ нашей перестановки (состояния Q5,Q6,Q7). Начинаем движение по ленте влево. Встречаем 0 или 1, считываем символ, вписывая на его место пустой, сдвигаем ленту влево еще на один шаг, проверяем находится ли за ним еще 0 или 1 если да - начинаем движение в право. Машина встречает 1 символ перестановки и продолжает движение вправо. Как только на вход поступает пустой символ машина вписывает на его место считаный символ слева и повторяет движение в левую сторону (состояния Q8-Q16). Как только слева после считаного символа появится пустой (достигнут первый элемент ленты) – машина последний раз начнет движение вправо, впишет символ и закончит свою работу (состояния Q17-Q20)

Для демонстрации правильности работы машины Тьюринга была написана программа на Паскале.

Так как последовательность из 0 и 1 представляет собой строку, а строка представляет собой массив символов, следовательно, можно узнать размер этого массива и получить доступ к каждому его элементу. Эта особенность была использована при написании программы.

Листинг:

program Project3;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

s : string;

i,j,l : Integer;

label lb;

begin

lb:

write ('Zadaite posledovatelnost iz 0 и 1: ');

readln(s);

if s='' then

begin

writeln;

writeln(' Oshibka! ');

writeln;

beep;

goto lb

end

else

begin

writeln;

writeln(' Nachalo vipolnenija programmi.');

end;

writeln;

writeln(' Idet proverka lenty . ');

writeln;

for i:=1 to length(s) do

begin

if (s[i]='0') or (s[i]='1') then

begin

write(s[i]) ;

sleep(100);

end

else

begin

writeln(' Oshibka! ');

beep;

writeln;

goto lb

end;

end;

write (' Ok!');

writeln; writeln;

writeln(' Perestanovka.');

writeln;

l:=length(s);

for j:=1 to length(s) do

begin

write(s[l]);

sleep(125);

l:=l-1

end;

write (' Ok!');

beep;

writeln; writeln;

write('Nazmite ENTER dlja vixoda. ');

readln;

end.

7