Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
История информационных технологий I.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
8.02 Mб
Скачать

13.Теоретические модели вычислений

Неформально, вычислимая функция – это такая функция, для которой существует вычисляющий ее значения алгоритм [В.А. Успенский. Лекции о вычислимых функциях. Гос. изд-во ф.м. л-ры, М.: 1960]. Понятия алгоритма и вычислимой функции являются одними из центральных понятий современной математики. Их роль в математике XX века, пожалуй, можно сравнить с ролью понятия множества в математике конца XIX века.

13.1.Алгоритм и его свойства

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

Примечание. Термин "алгоритм" происходит от имени средневекового математика Аль-Хорезми, который еще в IX веке описал правила выполнения четырех арифметических операций в десятичной системе счисления. Очевидно, что на эти правила являют собой формальные предписания, которые всегда одинаково выполняются исполнителем (человеком или компьютером).

Более строго, с математической точки зрения, понятие численного алгоритма объясняется следующим образом. Существует декларативная математическая модель – моделирующая числовая функция f которая представляет свойства некоторого объекта прототипа:

f: X  Y (38)

Здесь, X обозначает числами априорно известные свойства объекта прототипа, Y – обозначает числами априорно неизвестные свойства объекта прототипа. Функция f представляет зависимость априорно неизвестных свойств от заданных априори свойств объекта-прототипа.

Примечание. Формат моделирующей числовой функции может быть различным: формула и система формул; уравнения и система уравнений и т.д.

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

Пример. Алгоритм численного сложения преобразует две символьных записи слагаемых в символьную запись результата.

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

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

Пример нечисленного алгоритма. [М.А. Айзерман, Л.А. Гусев и др. Логика, автоматы, алгоритмы. Гос. изд-во ф.м. л-ры, М.: 1963]. Лабиринт Минотавра. Согласно мифу, на Крите когда-то царствовал правитель Минас — царь, законодатель, глава морской державы. Пасифая, жена Миноса, воспылала безумной страстью к быку и навлекла на остров бедствия, породив чудовищного Минотавра. У Миноса был подземный дворец — Лабиринт, из которого найти выход было невозможно. Царь заключил ужасное чудовище в Лабиринт. Раз в девять лет Минос отдавал ему на съедение семерых юношей и девушек. Афинскому герою Тесею удалось убить Минотавра и выйти из Лабиринта с помощью клубка ниток, который дала ему дочь Миноса и Пасифаи Ариадна. 

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

.

Рис. 48. Граф лабиринта Тезея

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

Отметки проходимых коридоров:

  • зеленый - ни разу ни пройден;

  • пройден один раз - желтый;

  • пройден дважды - красный.

Действия: находясь в какой-либо вершине можно совершить два действия:

а) разматывание нити до смежной площадки, коридор помечается желтым;

б) наматывание нити до возвращения к последней пройденной площадке, коридор помечается красным;

Ситуации.

1) площадка F достигнута;

2) петля - от данной площадки расходятся по крайней мере два желтых коридора;

3) зеленая улица - от данной площадки отходит по крайней мере один зеленый коридор;

4) исходная площадка A;

5) отсутствие всех предыдущих признаков.

Метод поиска задается следующей таблицей решений.

Выбор

Признак

Действие

1

Площадка F

Останов -удача

2

Петля

Наматывание нити

3

Зеленая улица

Разматывание нити

4

Площадка A

Останов - неудача

5

Все стальное

Наматывание нити

На основании приведенной выше таблице решений нетрудно записать алгоритм и его программную реализацию.

begin Тек_состояние:="A";

Флаг:=1;

while Флаг=1 do

begin

case Выбор of

2: Тек_состояние : наматывание нити;

3: Тек_состояние : разматывание нити;

5: Тек_состояние : наматывание нити;

else Флаг:=0;

end;

if Выбор=1 then Останов_удача;

if Выбор=4 then Останов_неудача;

end.

Относительно предложенного метода поиска пути можно доказать справедливость трех утверждений.

Первое. При любом взаимном расположении A и F после конечного числа шагов наступит останов либо в A либо в F.

Второе. Если остановка наступит в F - цель достигнута и нить протянута по простому пути из A в F.

Третье. Если останов в A – вершина F недостижима.

Пример трассировки алгоритма.

№ шага

Признак

Действие

Коридор

Цвет коридора

1

Зеленая улица

Разматывание

AB

Желтый

2

Зеленая улица

Разматывание

BC

Желтый

3

Зеленая улица

Разматывание

CD

Желтый

4

Зеленая улица

Разматывание

DH

Желтый

5

Зеленая улица

Разматывание

HJ

Желтый

6

Остальное

Наматывание

IH

Красный

7

Остальное

Наматывание

HD

Красный

8

Зеленая улица

Разматывание

DB

Желтый

9

Петля

Наматывание

BD

Красный

10

Зеленая улица

Разматывание

DF

Желтый

11

Площадка F

Останов

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

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

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

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

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

Описанный алгоритм поиска в лабиринте: массовый и результативный. Но не детерминированный: если существует несколько зеленых коридоров и допустим выбор любого. Детерминированность достигается за счет уточнения: из нескольких зеленых коридоров выбирается первый по часовой стрелке.

Существенная характеристика алгоритма – временная сложность, т.е. время, затрачиваемое алгоритмом как функция размера задачи. Подробное обсуждение этого вопроса выходит за рамки настоящего издания.

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

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