Оценка сложности основной процедуры – преобразование автомата

Министерство образования и науки Российской федерации

Государственное образовательное учреждение высшего профессионального образования «Донской государственный технический университет» ДГТУ

Кафедра «Программное обеспечение вычислительной техники и
автоматизированных систем»

Утверждаю

Зав. каф. «ПОВТ и АС»
________ Нейдорф Р.А.
«18» мая 2012 г.

Пояснительная записка

к курсовой работе

по дисциплине «Алгоритмические языки и программирование»

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

Автор работы Бочаров Дмитрий Владимирович

Группа УСУ21

Специальность 230102 "Автоматизированные системы обработки информации и управления"

Руководитель работы ____________ Романенко Е.А.

(подпись)

Работа защищена «___»___________2012_ г. на оценку ______________

Члены комиссии ____________ __________________________

(подпись) (фамилия, инициалы)

____________ __________________________

(подпись) (фамилия, инициалы)

____________ __________________________

(подпись) (фамилия, инициалы)

 

г. Ростов-на-Дону

2012г.

Министерство образования и науки Российской федерации

Государственное образовательное учреждение высшего профессионального образования «Донской государственный технический университет» ДГТУ

Кафедра «Программное обеспечение вычислительной техники и
автоматизированных систем»

Утверждаю

Зав. каф. «ПОВТ и АС»
________ Нейдорф Р.А.
«18» мая 2012г.

задание

на курсовую работу

по дисциплине «Алгоритмы, построение и анализ»

Студент Бочаров Дмитрий Владимирович

Группа УСУ21

Тема работы: «Добавление и удаление элементов в красно-черном дереве»

Исходные данные: теоретические основы программирования на языке Pascal, лекции по дисциплине «Алгоритмы, построение и анализ»

Руководитель работы ____________ Романенко Е.А.

(подпись)

Задание принял к исполнению ____________ Бочаров Д.В.

(подпись)

 

 

Ростов–на–Дону

2012 год.

 

Постановка задачи

Машина Тьюринга представляет собой вариант конечного автомата,

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

 

 

Блок Схема Алгоритма

 

Листинг программы

ProgramMT; {Mashina Tiuringa}

usescrt;

Type

M=array[1..100] ofinteger;

Var

f,q:M; {Таблица переходов (f) и выходов (q)}

fi:integer;

ProcedurePreObr(vars:string; i:integer);

 

Begin

write(q[f[fi]]);

fi:=f[fi];

end;

Var

s:string;

l:integer; {Длина строки (кол-во введенных символов)}

{MaxState} Ms :integer; {Кол-во состояний исползуемых автоматом}

{MaxInSymbol} Mis:integer; {Кол-во входных символо, попадающих под обработку}

{MaxOutSymbol} Mos :integer; {Кол-во выходных символов, результат работы автомата}

{Таблица переходов (f) и выходов (q)}

i,j:integer;

x,y:shortint;

Begin

write('Введите кол-во используемых состояний автомата: ');

x:=whereX;

y:=whereY;

repeat{Проверка ввода кол-ва состояний, должно быть >0}

readln(Ms);

ifMs > 0 then break;

gotoXY(x,y);

untilfalse;

write('Введите символьную последовательность: ');

readln(s);

l:=length(s); // Кол-во семволов строке- количество итераций автомата.

Writeln('Запилните таблицы f и q : ');

Writeln('{f}');

{Таблица переходов и одного состояния в другое, в ней

указуются номера состояний в которые будет переходить автомат

после очередного выполнения преобразования, начинает работу с выполнения состояния на которое переходит из начального}

fori:=1 toMs do

write('---');

writeln;

write('Ms: ');

fori:=1 toMs do

write('| ',i);

writeln('|');

fori:=1 toMs do

write('---');

writeln;

write('fi: '); {Переход на следующее состояние автомата}

{Таблица преобразования,в нейзадается задается

(в данной программе) чем замениться текущий символ подлежащий обработке.}

fori:=1 toMs do

Begin

write('|');

x:=whereX;

y:=whereY;

readln(f[i]);

gotoXY((x+2),y);

end;

writeln('|');

 

Writeln('{q}');

fori:=1 toMs do

write('---');

writeln;

write('Ms: ');

fori:=1 toMs do

write('| ',i);

writeln('|');

fori:=1 toMs do

write('---');

writeln;

write('qO: '); {qO это выходное значение qOut}

fori:=1 toMs do

Begin

write('|');

x:=whereX;

y:=whereY;

readln(q[i]);

gotoXY((x+2),y);

end;

writeln('|');

Write('Введите ключ, задайте начальное состояние: ');

readln(fi);

{Начальное состояние, можно задавать с клавиатуры.}

 

Write('Результат работы: ');

fori:=1 tol do

PreObr(s,i);

Writeln;

Writeln(' Press Enter...');

readln;

 

end.

 

 

Оценка сложности основной процедуры – преобразование автомата

Оценка сложности процедуры PreObr:

 

l:=length(s) C1
for i:=1 to l do C2 N
begin    
write(q[f[fi]]));   C3 N
fi:=f[fi];   C4 N
end; C5

 

 

T(преобразование автомата)=c1*1+c2*N+c3*N+c4*N+c5*1= (с1+c5) +N*(c2+c3+c4)= N, где единичные операции, в малых не больших количествах, пренебрежительно малы в сравнении с N Общая сложность = Q(n).

 

 

Рекомендации пользователю

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

2. Указать кол-во Вершин.

3. Заполнить массивы F и Q.

4. Задать начальное положение автомата.

5. Вывод результата.

Пример работы программы

Вот пример для замены двух крайних значений местами

 

Начальное состояние 1, значит автомат начинает работу и переходит в состояние 5 , затем по таблиец q смотрит на каким символом надо заменить первый символ «символьной последовательности», и заменяет его на «0», что соответствует столбику 5 в таблице q.

За тем выполнив состояние 5 он переходит по таблице f в состояние 2, и заменяет второй, т е следующий (в соответсвие свойству машины Тьбринга – соседний элемент) символ на символ, «2», судя по таблице q, где во втором столбике написана двойка, и так до последнего элемента,
а когда при обработке последнего символа из состояния 4 переходят в состояние 6 и заменяют последний символ «0» из исходной последовательности на символ «1» в соответствии с текущем состоянием в таблице f и значением соответствующим шестому столбцу в таблице q.

Это пример работы программы и использования машины Тьюринга.

Заключение

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

 

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

 

В результате проделанной работы мы получили программу,реализующую алгоритм Машины Тьюринга.

 

 


Список использованной литературы

1. Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман Глава 8. Введение в теорию машин Тьюринга // Введение в теорию автоматов, языков и вычислений = Introduction to Automata Theory, Languages, and Computation. — М.: «Вильямс», 2002. — С. 528. —

2. http://ru.wikipedia.org/wiki/Машина_Тьюринга

3. Алгоритмы и структуры данных 2008 г. Никлаус Вирт

4. Т. Кормен, Ч. Лейзерсон, Р. Ривест. Алгоритмы: построение и анализ. МЦНМО, Москва, 2001