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

2232

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.29 Mб
Скачать

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

лизом.

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

3.Алгоритм состоит из отдельных элементарных шагов, или действий, причем множество различных шагов, из которых составлен алгоритм, конечно.

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

5.Естественно от алгоритма потребовать результативности, т.е. остановки после конечного числа шагов (зависящего от данных)

суказанием того, что считать результатом. В этом случае говорят, что алгоритм сходится. Задача проверки результативности алгоритма решается гораздо труднее, чем проверка требований, изложенная в п.п. 1-4. Общего метода такой проверки вообще не существует.

6.Следует различать

а) описание алгоритма (инструкцию или программу); б) механизм реализации алгоритма (напр. ЭВМ), включающий

средства пуска, остановки, реализации элементарных шагов, выдачи результатов и обеспечения детерминированности, т.е. управление ходом вычисления;

в) процесс реализации алгоритма, т.е. последовательность шагов, которая будет порождена при применении алгоритма к конкретным данным.

Будем предполагать, что описание алгоритма и механизм его реализации конечные. Требование конечности процесса реализации совпадает с требованием результативности.

Пример 4.1: Рассмотрим следующую задачу: дана последовательность Р из n положительных чисел (n - конечное, но произвольное число). Требуется упорядочить их, т.е. построить последовательность R, в которой эти же числа расположенны в порядке возрастания.

41

Сразу приходит в голову простой способ ее решения: просматриваем Р и находим в ней наименьшее число; вычеркиваем его из Р и записываем его в качестве первого числа R; снова обращаемся к Р находим в ней наименьшее число и приписываем его справа к R и т.д., пока в Р не будут вычеркнуты все числа.

Возникает естественный вопрос “что значит и т.д.?”.

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

Шаг 1. Ищем в Р наименьшее число.

Шаг 2. Найденное число приписываем справа к R (в начальный момент R пуста) и вычеркиваем его из Р.

Шаг 3. Если в Р нет чисел, то переходим к шагу 4. В противном случае к шагу 1.

Шаг 4. Конец. Результатом считать последовательность R, построенную к данному моменту.

Большинство сочтут такое описание достаточно ясным, чтобы, пользуясь им, получить нужный результат. Однако это впечатление ясности опирается на некоторые неявные предположения, к которым мы привыкли, но которые нетрудно нарушить.

Например, что значит „„дана последовательность чисел”? Является ли таковой 73;5 2;15 7;(1,2) ?

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

Итак, необходимо уточнить формы представления данных. При этом нельзя просто заявлять, что допустимо любое представление чисел. Ведь для каждого представления имеется свой алфавит(который помимо цифр может включать запятые, скобки, знаки операций и функций и т.д.) и свой способ сравнения чисел (например способ перевода чисел в десятичную дробь), тогда как конечность алфавита требует фиксировать его заранее, а конечность алгоритма позволяет включать в него лишь заранее фиксированное число способов сравнения.

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

42

Например, какое из чисел 435783086,3499234 и 9582058343,1248927 больше?

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

Таким образом, даже в этом простом примере несложный анализ показывает, что описание, которое выглядит вполне ясно, еще далеко до алгоритма. Мы столкнулись здесь с необходимостью уточнить почти все основные характеристики алгоритма, которые отмечались ранее: алфавит данных и форму их представления, память и размещение в ней элементов Р и R, элементарные шаги (поскольку шаг 1 явно неэлементарен). Кроме того, становится ясным,что выбор механизма реализации (скажем человек или ЭВМ) будет влиять на сам характер уточнения: у человека требования к памяти, представлению данных и к элементарности шагов гораздо более слабые и „„укрупненные”, отдельные незначительные детали он может уточнить сам.

Только два требования к алгоритмам в приведенном описании выполнены в достаточной мере (они и создают впечатление ясности). Очевидна сходимость алгоритма: после выполнения шагов 1 и 2 либо работа заканчивается, либо из Р вычеркивается одно число, из этого следует, что после n выполнения шагов 1 и 2 из P будут вычеркнуты все числа и алгоритм остановится. Не вызывает сомнений и детерминированность: после каждого шага ясно что делать дальше.

4.2. Блок-схемы алгоритмов

Связь между шагами можно изобразить в виде графа. В рассмотренном примере это граф, изображенный на рис.5.

Такой граф, в котором вершинам соответствуют шаги, а ребрам – переходы между шагами, называют блок-схемой алгоритма. Его вершины могут быть двух видов: вершины, из которых выходит одно ребро (их называют операторами), и вершины, из которых выходят 2 ребра (их называют логическими условиями или предика-

43

Начало

 

 

Шаг2 Шаг3 нет

 

 

Шаг1

Конец

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

Рис. 5

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

При всей наглядности языка блок-схемы, не следует переоценивать его возможности. Он достаточно груб и отражает связи лишь по управлению, а не по информации (где этому блоку брать исходные данные). Блок-схемы не содержат сведений ни о данных, ни о памяти, ни об используемом наборе элементарных шагов. В частности, если в блок-схеме нет циклов, это не значит, что нет циклов в алгоритме (они могут быть в каком-либо элементарном блоке). По существу блок-схема – удобное средство для описания детерминизма алгоритма. Условия, т.е. точки ветвления могут быть не только двоичными (данет; x<5 - x 5 ), но и многозначными (x<5;

5x<20; x=20; x>20).

Втеории алгоритмов используется следующий подход: выбирается конечный набор исходных объектов, которые объявляются элементарными, и конечный набор способов построения из них новых объектов. Этот подход уже использован при обсуждении вопроса о „„данных”. Уточнением понятия „„данные” будем считать множества слов в конечных алфавитах. Для уточнения детерминизма используются либо блок-схемы, либо соответствующие словесные описания. Кроме того, нужно зафиксировать набор элементарных шагов и договориться об использовании памяти. После того, как это будет сделано, получится конкретная алгоритмическая модель.

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

I тип связывает понятие алгоритма с наиболее традиционными понятиями математики – вычислениями и числовыми функциями. Наиболее развитая модель этого типа – рекурсивная функция;

44

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

III тип алгоритмических моделей - это преобразование слов в произвольных алфавитах, в которых элементарными операциями являются подстановки, т.е. замены куска слова (подслова) другим словом. Примерами моделей этого типа являются канонические модели Поста и нормальные алгоритмы Маркова.

4.3. Машины Тьюринга

Основные определения:

Машина Тьюринга состоит из:

1) управляющего устройства, которое может находится в одном из состояний, образующих конечное множество

Q={q1, q2, …, qn};

2)ленты, разбитой на ячейки в каждой из которых может быть записан один из символов конечного алфавита А={а1,…., am};

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

q1 и заключительное состояние qZ (z здесь не числовая переменная, а мнемонический знак конца). В начальном состоянии машина находится перед началом работы; попав в заключительное состояние она останавливается.

Таким образом, память машины Тьюринга – это конечное множество состояний (внутренняя память) и лента (внешняя память). Лента бесконечна в обе стороны, однако, в начальный момент времени только конечное число ячеек ленты заполнено непустыми символами, остальные ячейки – пусты, т.е. содержат пустой символ

(пробел). Из характера работы следует, что в любой момент вре-

45

мени лишь конечное число ячеек будет заполнено непустыми символами, важна не бесконечность ленты, а ее неограниченность, т.е. возможность писать на ней сколь угодно длинные, но конечные слова. Данные машины Тьюринга – это слова в алфавите ленты; на ленте записываются и исходные данные и окончательные результаты. Элементарные шаги машины – это считывание и запись символов, сдвиг головки на ячейку вправо или влево, а так же переход управляющего устройства в следующее состояние. Детерминированность машины, т.е. последовательность ее шагов, определяется следующим образом: для любого внутреннего состояния qi и символа aj однозначно заданы:

а) следующее состояние qi

б) символ аj который нужно записать вместо аj в ту же ячейку (стирание символа – занесение пустого символа );

в) направление сдвига головки dk, обозначаемое одним из трех символов: L (влево), R (вправо), E (на месте). Это задание может

описываться либо системой правил (команд), имеющих вид:

 

qi аj q i а j dk,

(4.1)

либо таблицей, строкам которой соответствуют состояния, столбцам

– входные символы, а на пересечении строки qi и столбца аj записана тройка символов q i а j dk и, наконец, блок –схемой, которую называют диаграммой перехода. В этой диаграмме, состояниям соответствуют вершины, а правилу (4.1) – ребро, ведущее из qi в q'i, на котором написано аj а j dk. Условие однозначности требует, чтобы для любого j и любого i z в системе команд (4.1) имелась одна команда, с левой частью qi аj; состояние qz в левых частях не встречается. На диаграмме переходов это выражается условием, что из любой вершины, кроме qz выходит ровно m ребер, причем на разных ребрах левые части различны; в вершине qz нет выходящих ребер.

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

46

Например, конфигурация с внутренним состоянием qi , в которой на ленте записано abcde, а головка обозревает d, запишется abcqide. Стандартной начальной конфигурацией назовем конфигу-

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

Ко всякой не заключительной конфигурации К машины Тьюринга применима ровно одна команда вида (4.1), которая переводит в конфигурацию К , это соотношение между конфигурациями

обозначим К

T

К . Если из контекста ясно, о какой машине Тью-

 

 

 

 

 

 

 

 

 

 

 

 

 

ринга идет речь, то знак Т опускают.

 

 

 

 

 

 

Если для К1

и Кn существует последовательность К1, К2,…..,Кn,

такая, что К1

T

К2

T

,…..,

T

Кn. Обозначим это К1

Кn

 

 

 

 

 

 

 

 

 

 

 

 

Например, если в системе команд машины Тьюринга имеются

команды:

 

 

 

 

 

 

 

 

 

 

 

 

 

q2 a5

q3 a4R и q2 a1L q4 a2, то

 

 

 

 

 

 

q2a5a1a2

a4q3a1a2

 

q4a4a2a2 и, следовательно,

 

 

 

 

q2a5a1a2

q4a4a2a2

 

 

 

 

 

 

 

 

 

Последовательность

конфигураций К1

T

К2

T

,…..

 

 

 

 

 

 

 

 

 

 

 

 

…,

T

Кn

T

… однозначно определяется исходной конфигу-

 

 

 

 

 

 

 

 

 

 

 

 

рацией К1

и полностью описывает работу машины Тьюринга, начи-

ная с К1. Она конечна, если в ней встретится заключительная конфигурация, содержащая qz, или бесконечна в противном случае.

Пример 4.2.1. Машина с алфавитом

A={1, } состояниями

{q1,qz} и системой команд q11 q11R, q1

q11R из любой началь-

ной конфигурации будет работать бесконечно, заполняя единицами ленту вправо от начальной точки.

2. для любой машины Тьюринга, если К1 Кi Кj и Кi = Кj,

последовательность К1

Кi Кj

……. является бесконечной; ее

отрезок Кi

Кj будет повторяться (зацикливаться).

Если

1q1 2

1qz 2 , то говорят, что машина Тьюринга пе-

рерабатывает слово 1

2 в слово

1 2 и обозначают это T( 1 2)=

1 2.Для того, чтобы говорить о том, что могут делать машины Тьюринга, надо уточнить, как будет интерпретироваться их поведение и как будут представляться данные. Исходными данными машины

47

Тьюринга считаем записанные на ленте слова в алфавите исходных данных Аисх А и векторы из таких слов (словарные векторы над Аисх). Запись на ленте начальной конфигурации со словарным вектором ( 1,…, к) назовем правильной, если она имеет вид: 12 к

(при условии Аисх), либо 1 2 …. к, где - специальный символ – разделитель, не входящий в Аисх. Для любого вектора Vисх над

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

А=Аисх Апр Арез.

В простейшем случае Аисхрез и А=Аисх .

Пусть f- функция, отображающая множество векторов над Арез. Машина Тьюринга правильно вычисляет функцию f, если:

1. Для любых V и W, таких, что f(V)=W: q1V* qzW*, где V* и W* - правильные записи V и W.

2. Для любого V, такого, что f(V) не определена, машина Тьюринга запущенная в стандартной начальной конфигурации q1V*, работает бесконечно.

Если для f имеется машина Тьюринга, которая ее правильно вы-

числяет, функция f называется правильно вычислимой по Тьюрингу.

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

Пример 4.2: Если машина Тьюринга содержит команды qi aj

q i a jE и q i a j q i a jdk, то заменив эти две команды одной qi aj q i a jdk, получим машину Тьюринга, эквивалентную Т. Путем таких преобразований можно в машине Тьюринга убрать все команды, содержащие Е и более того, доказывается, что:

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

Определения, связанные с вычислением функций, заданных на словарных векторах, даны с явным „„запасом общности „„ и имеют ввиду переработку нечисловых объектов.

48

Для начала рассмотрим числовые функции, отображающие N в N. Договоримся представлять натуральные числа в единичном (унарном) коде, т.е. для всех числовых функций Аисх={1} либо, Аисх={1,*} и число х представляется словом 1,…., 1=1х, состоящим из х единиц. Таким образом, числовая функция f(x1,…,xn) правильно вычислима по Тьюрингу, если есть машина Тьюринга, такая, что q11

х1 1 х2 … 1 хn

qn1 y, когда f(x1,…,xn)=y, и Т работает бесконечно,

начиная с q11 х1

1 х2 … 1 хn, если f(x1,…,xn) не определена.

Пример 4.3:

1. Сложение: Во введенном унарном представлении, сложить

два числа а и b – значит, слово 1a 1b переработать в слово 1a+b, т.е. удалить разделитель и сдвинуть одно из слагаемых, скажем первое, ко второму. Это преобразование осуществляет машина T+ с четырьмя состояниями и следующей системой команд (первая команда ведена для случая, когда а=0 и исходное слово имеет вид 1b):

q1

qz

R

q11

q2

R

q21

q21R

q2

q31L

q11

q31L

q1

qz

R

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

q1

R

 

qz

 

1 R

1L

 

R

 

q2

q3

 

 

1 1R

 

1

1L

 

 

Рис. 7

 

 

 

2. Копирование (перезапись слова),

т.е. переработка в

.

Для чисел эту задачу решает машина Ткоп, система команд которой приведена в таблице.

49

 

 

 

 

 

Таблица 17

 

1

 

 

 

0

q1

q20R

qz R

q1

L

q11L

q2

q21R

q3 R

q2

R

 

q3

q31R

q41L

 

 

 

q4

q41L

 

q4

L

q10R

Соответствующая диаграмма переходов:

0 1L

q1 1 0R

q2

,

R q3

1L

q4

L

1

1R

1 1R

 

,1 ,1L

R

 

 

 

 

 

qz

 

0

0R

 

 

Рис. 7

4.4. Некоторые операции над машинами Тьюринга

Рассмотрим суперпозицию двух функций f1(x) и f2(у): g(x)=f2(f1(x)).

Для того, чтобы g(x) была определена при данном х надо, чтобы f1 была определена на х и f2 была определена на f1(x).

Теорема: Если f1(x) и f2(у) вычислимы по Тьюрингу, то их суперпозиция f2(f1(x)) так же вычислима по Тьюрингу.

Если Т1 – машина, вычисляющая f2, то машина Тьюринга, вы-

числяющая f2(f1(x)) называется

композицией машин Т1 и Т2 и обо-

значается Т2 1) и изображается блок-схемой:

 

 

 

 

 

 

 

T1

 

 

T2

 

 

 

 

 

 

 

Рис. 8 Эта блок-схема предполагает, что исходными данными ма-

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

50

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