дискретка_все_практики / дискретка / Razdel_4_Praktika_9
.docРаздел 4. Элементы математической логики и теория алгоритмов
ПРАКТИЧЕСКАЯ РАБОТА №9
АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ ТЬЮРИНГА
1. ЦЕЛЬ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Цель работы - овладеть навыками написания машин Тьюринга.
Порядок выполнения:
-
ознакомиться с описанием работы;
-
согласно варианту задания,выданному преподавателем,
разработать алгоритмы решения поставленной задачи;
-
отладить программу;
-
оформить отчет
2. СВЕДЕНИЯ ИЗ ТЕОРИИ
Машина Тьюринга состоит из:
-
внутреннего алфавита - совокупности состояний { q1 , ... ,qn } и команд для каретки.
-
внешнего алфавита А={а1, ... ,аm}, символы которого считываются и заносятся на ленту;
-
устройства обращения к ленте, каретки,которая в каждый момент обозревает ячейку ленты, в зависимости от символа в этой ячейке и состояния управляющего устройства записывает в ячейку символ ,который в соответствии с текущей командой , сдвигается на ячейку вправо или влево или останавливается на месте; при этом управляющее устройство переходит в новое состояние (или остается в старом).
Таким образом, память машины Тьюринга - это конечное множество состояний (внутренняя память) и лента (внешняя память). Лента бесконечна в обе стороны, но в начальный момент времени только конечное число ячеек ленты заполнено непустыми символами. Данные машины Тьюринга - это слова в алфавите ленты; на ленте записываются и исходные данные, и окончательные результаты. Детерменированность машины, т.е. последовательность ее шагов, определяется следующим образом: для любого внутреннего состояния qi и символа aJ однозначно заданы:
а) следующее состояние q`i ;
б) символ a` J,который нужно записать вместо aJ в ту же ячейку;
в) направление сдвига карктки dk, обозначаемое одним из трех символов: L(влево), R (вправо) , E (на месте).Это задание описывается в виде таблицы, строкам которой соответствуют состояния, столбцам - входные символы, а на пересечении строки qi и столбца aJ записана тройка символов q`i a`J dk .
Функциональная схема:
|
|
|
|
aJ |
|
|
|
|
|
|
|
|
|
|
|
|
|
qi
aJ a`J
(лево, право, на месте)
q`i
Некоторые операции над машинами Тьюринга.
Теорема 1. Если f1(x) и f2(x) вычислимы по Тьюрингу то их композиция f2(f1(x)) также вычислима по Тьюрингу.
Пусть T1 - машина, вычисляющая f1 , а T2 - машина, вычисляющая f2 , и множества их состояний соответственно Q1 =( q11, ... , q1n) Q2 =( q21, ... , q2n)
Система команд машины T строится следующим образом: система команд T2 приписывается к системе команд T1 , при этом конечное состояние T1 отождествляется с начальным для T2 . Построенная машина T называется композицией машин T1 и T2 и обозначается T2(T1). Это определение остается в силе, если T1 и T2 вычисляют функции от нескольких перемнных. Важно лишь, чтобы данные для T2 были в обусловленном виде подготовленны машиной T1 .
Вычисление предикатов на машинах Тьюринга.
Машина Т вычисляет предикат Р(а) (а - выражение на ленте), если Р(а)=х, где х=И, когда Р(а) истино, и х=Л, когда Р(а) ложно. Если же Р(а) не определен, то машина Т, как и при вычислении функций, не останавливается. При обычном вычисленни предиката уничтожается а, что может оказаться неудобным, если после Т должна работать другая машина. Поэтому вводится понятие вычисления с восстановлением: машина Т вычисляет Р(а) с восстановлением, если Р(а)=ха. Вычисление с восстановлением можно представить следующей последовательностью: выполняется Tкоп , каретка сдвигается до маркера *, затем вычисляется Р(а) , и наконец х переносится в крайнее левое положение. Машина Т является композицией указанных четырех машин. В конкретных случаях возможны и более простые способы восстановления а.
Пусть функция f(а) задана описанием: « если Р(а) истино, то f(а)=g1(х) , иначе f(а)=g2(х) ». Функция f(а) называется разветвлением или условным переходом к g1(х) и g2(х) по условию Р(а).
Теорема 2. Если g1(x), g2(x) и Р(а) вычислимы по Тьюрингу то разветвление g1 и g2 по Р(а) также вычислимо.
3. ЗАДАНИЕ
Написать машину Тьюринга в соответствии с номером варианта задания.
4. ВАРИАНТЫ ЗАДАНИЙ
1) Вычислить выражение (a+b)/c.
2) Возведение чисел в квадрат.
3) Зеркально отбразить число.
4) Вычислить выражение a(c+b).
5) Умножение нескольких чисел, записаных одно за другим через разделитель.
6) Определить остаток от деления двух чисел.
7) Определить частное от деления двух чисел.
8) Вычислить выражение (a+b)*c.
9) Вычислить a+b , если a и b четные, и a*b , если нечетные.
10) Умножение двух чисел.
11) Вычислить a-b , если a и b четные, и a/b , если нечетные.
12) Деление нескольких чисел нацело, записаных одно за другим через разделитель.
13) Вычислить выражение (a+b)с.
14) Определение НОД.
15) Определить челую часть от выражения (a+b)/c.
5. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
При написании программ, осуществляюших операции над числами необходимо переводить их на ленте из позиционной системы в унарное представление. При этом число х представляется словом 1..1=1х , состоящим из х однотипных знаков.
Перевод числа из позиционной системы в унарное представление .
|
1 |
2 |
3 |
4 |
5 |
6 |
8 9 |
0 |
* |
_ |
$ |
Q1 |
q11R |
q12R |
q13R |
q14R |
q15R |
q16R |
q18Rq19R |
Q10R |
q1*R |
q1_R |
q2$L |
Q2 |
q30L |
q31L |
q32L |
q33L |
q3 4L |
q3 5L |
q3 7Lq3 8L |
Q3 9L |
q4*R |
q3_L |
|
Q3 |
q31L |
q31L |
q31L |
q31L |
q31L |
q31L |
q31Lq31L |
Q31L |
q3*L |
q1*R |
|
Q4 |
|
|
|
|
|
|
q4_R |
Q4_N |
q4_N |
q4_N |
q4_N |
Каретка слева от числа , справа от числа должен стоять знак $
Приложение 1
Ручной просчет:
Задание умножить два числа.
|
1 |
_ |
* |
0 |
~ |
q1 |
q2 0 R |
q6 _ R |
q 1* L |
q1 1 L |
|
q2 |
q2 1 R |
q3 * R |
q3 * R |
|
q2 * L |
q3 |
q 31 R |
q4 1 L |
|
|
q3 1 R |
q4 |
q4 1 L |
|
q4 * L |
q1 0 R |
q4 * L |
q5 |
q6 _ R |
|
q6 _ R |
|
|
q6 |
q6 1 R |
q4 * E |
q7 1 L |
q4 * L |
q4 1 L |
q7 |
|
q7 * L |
|
q4 _L |
q1 0 L |
q8 |
q7 _ R |
q3 1 R |
q4 * L |
q4 * L |
q4 * R |
q9 |
q10 * L |
|
q5 * L |
|
q4 * L |
q10 |
q7 1 L |
q7 _E |
|
q4 * L |
|
Перевод числа из однотипных знаков в десятичную смстему счисления.
|
1 |
2 |
3 |
4 |
5 |
6 |
8 9 |
0 |
* |
_ |
Q1 |
q3 2 N |
q3 3 N |
q3 4 N |
q3 5 N |
q3 6 N |
q3 7 N |
q3 9 Nq1 0 L |
q3 1 N |
q1 *L |
q3 1 N |
Q2 |
q2 1 R |
q2 2 R |
q2 3 R |
q2 4 R |
q2 5 R |
q2 6 R |
q2 8 Rq2 9 R |
q2 0 R |
q1 _ R |
q2 _ L |
Q3 |
q3 1 R |
q3 2 R |
q3 3 R |
q3 4 R |
q3 5 R |
q3 6 R |
q3 8 Rq3 9 R |
q3 0 R |
q1 * R |
q1 _ L |
Сложение. Во введенном представлении сложить числа a и b - это значит слово 1a*1b переработать в слово 1a+b, т.е. удалить разделитель * и сдвинуть одно из слагаемых, скажем первое, к другому. Это преобразование осуществляет машина T+ со следующей системой команд:
|
1 |
* |
_ |
q1 |
q2 _ R |
q2 _ R |
|
q2 |
q2 1 R |
q3 1 L |
|
q3 |
q3 1 L |
|
q3 _E |
Начальное состояние : {q1E} , каретка на левом числе.
Копирование ( перезапись слова ) слова, т.е. переработка слова а в а*а. Для чисел эту задачу решает машина Tкоп, система команд которой приведена в таблице :
|
1 |
_ |
* |
0 |
q1 |
q2 0 R |
q1 _ E |
q 1* L |
q1 1 L |
q2 |
q2 1 R |
q3 * R |
q3 * R |
|
q3 |
q 31 R |
q4 1 L |
|
|
q4 |
q4 1 L |
|
q4 * L |
q1 0 R |
Начальное состояние : {q1E} , каретка на левой единице левого числа.
Машина при каждом проходе исходного слова 1а заменяет левую из его единиц нулем и пишет (в состоянии q3) одну единицу справа от 1а в ближайшую пустую клетку. При первом проходе, кроме того, в состоянии q2 ставится маркер *. Таким образом, копия 1а строится за а проходов. После записи очередной единицы машина переходит в состояние q4 , которое передвигает каретку влево от ближайшего нуля, после чего машина переходит в q1 и цикл повторяется. Он прерывается, когда q1 обнаруживает на ленте не единицу, а маркер. Это значит, что все единицы 1а исчерпаны, т.е. сделано а проходов. Тогда каретка возвращается влево в свое исходное положение, заменяя по дороге все нули единицами.
Пример 3
|
1 |
_ |
* |
0 |
q1 |
q2 0 R |
q6 _ R |
q 1* L |
q1 1 L |
q2 |
q2 1 R |
q3 * R |
q3 * R |
|
q3 |
q 31 R |
q4 1 L |
|
|
q4 |
q4 1 L |
|
q4 * L |
q1 0 R |
q5 |
q6 _ R |
|
q6 _ R |
|
q6 |
q6 1 R |
|
q7 1 L |
|
q7 |
q7 1 L |
q7 _E |
|
|
Начальное состояние : {q1E} , каретка на левой единице числа.
Это система команд машины T+(Tкоп). Она вычисляет функцию f(x)=2х , при этом машина Tкоп строит два числа на ленте, а T+ складывает их.
Пример 4
|
1 |
_ |
q1 |
q3 1 R |
q1 И E |
q2 |
q3 1 R |
q4 1 L |
q3 |
q2 1 R |
q5 1 L |
q4 |
q4 _ L |
q4 И E |
q5 |
q5 _ L |
q5 Л E |
Начальное состояние : {q1E} , каретка на левой единице числа.
Машина вычисляет предикат « а - четное число » : каретка достигает конца числа в состоянии q2 , если число единиц четно, и в состоянии q3 , если число единиц нечетно, после чего она перемещается в исходное положение в состоянии q4 либо q5 и печатает И либо Л соответственно. Для того, чтобы этот предикат вычислялся с восстановлением, достаточно не стирать, а сохранять единицы, т.е. заменить команды q4_L и q5_L на команды q41L и q51L .
Пример 5
а)
|
1 |
_ |
* |
q1 |
q2 _ R |
|
q4 _ R |
q2 |
q2 1 R |
|
q4 1 R |
q3 |
q3 1 L |
q1 _ R |
|
q4 |
q4 1 R |
q5 _ L |
q3 * L |
q5 |
q5 1 L |
q5 _ E |
|
Начальное состояние : {q1E} , каретка на левой единице числа.
Система команд машины T++ для сложения n чисел. Цикл состояний q1 , q2 , q3 - это « зацикленная » машина T+ , в которой заключительное состояние совмещено с начальным. Сумма, полученная на очередном цикле, является первым слагаемым следующего цикла. Состояние q4 реализует разветвление. В нем проверяется условие - есть ли второе слагаемое. Если да ( о чем говорит наличме маркера * ), то происходит переход к следующему циклу; если нет ( о чем говорит пробел поосле единиц ) , то машина выходит из цикла.
б) Пусть машина Т с алфавитом Ат не является правильно вычисляющей и ее заключительная конфигурация на ленте стандартна, но может содержать любые символы Ат ( кроме проделов ) , а результат интерпритируется как число, равное числу единиц на ленте. Построим для Т машину T`++ , которая работает как T++ , а все символы , кроме 1 и пробела , она воспринимает как маркеры , т.е. команды для них - те же, что и для *. Тогда T`++ соберет все единицы в один массив и, следовательно, T`++ (T(а)) правильно вычисляет функцию, вычисляемую машиной T.
Аналогично тому как из машины T+ была построена T++ , можно построить машину Tхх , которая перемножает несколько чисел, и по схеме с использованием T`хх вместо T`++ построить машину, осуществляющую возведение в степень.
6. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
-
наименование работы;
-
текст программы машины Тьюрига по индивидуальному заданию.
7. КОНТРОЛЬНЫЕ ВОПРОСЫ
-
Что представляет собой машина Тьюринга?
-
Что называют внутренним , а что внешним состоянием машины Тьюринга?
3. Для чего предназначена каретка?
4. Какие команды могут быть использованы в программе машины Тьюринга?
-
Тьюринга?
-
Каким образом осуществляется композиция машин Тьюринга?
-
Что является памятью машины Тьюринга?
-
Что представляет из себя условный переход в алгоритмической ситстеме Тьюринга
8. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
-
Кузнецов Дискретная математика для инженеров. 1-е изд. -.:Наука.2008.-86
2. Гаврилов Г.П., Сапоженко А.А. Сборник задач по дискретной математике. – М.: “Наука”, 2010 – 368 с.: ил.