- •Содержание курса “Теория алгоритмов и вычислительных процессов”
- •I. Теория алгоритмов
- •Основные понятия теории алгоритмов
- •1.1. Предварительные сведения
- •1.2. Основные требования к алгоритмам
- •1.3. Необходимость математического понятия алгоритма
- •2. Типы алгоритмов
- •3. Способы представления (описания) алгоритмов
- •3.1. Исполнитель алгоритма
- •3.2. Строчная словесная запись алгоритма
- •3.3. Графическая форма записи
- •3.4. Управляющие структуры
- •4. Описание задачи и выбор алгоритма
- •5. Универсальные алгоритмические модели
- •Понятие конструктивного объекта
- •Понятие об алфавитных алгоритмах
- •5.3. Формализация понятия “алгоритм”
- •5.4. Схема построения алгоритмической системы
- •6. Рекурсивные функции
- •6.1. Примитивно-рекурсивные функции
- •6.1.1. Оператор суперпозиции (подстановки)
- •6.1.2. Оператор примитивной рекурсии
- •6.2. Частично-рекурсивные функции
- •Пример 6.2.2. Рассмотрим функцию
- •6.3. Тезис Черча
- •7. Машины Тьюринга (Поста)
- •7.1. Основные понятия машин Тьюринга
- •7.2. Способы представления машины Тьюринга
- •7.2.1. Представление машины Тьюринга совокупностью команд
- •7.2.2. Представление машины Тьюринга графом
- •7.2.3. Представление машины Тьюринга таблицей соответствия
- •7.3. Примеры построения машин Тьюринга
- •Вычислимость по Тьюрингу
- •7.5. Некоторые операции над машиной Тьюринга
- •7.5.1. Композиция машин Тьюринга
- •7.5.2. Итерация машины Тьюринга
- •7.5.3. Разветвление машин Тьюринга
- •7.4. Универсальная машина Тьюринга
- •7.5. Тезис Тьюринга
- •7.6. Машина Поста
- •9. Алгоритмическая разрешимость. Алгоритмические проблемы
- •10. Сложность алгоритмов и вычислений
- •Анализ скорости выполнения алгоритмов
- •Память или время
- •Временнáя сложность алгоритма
- •Оценка с точностью до порядка
- •Определение сложности
- •Сложность рекурсивных алгоритмов
- •Средний и наихудший случай
- •Общие функции оценки сложности
- •Скорость работы алгоритма в реальных условиях
- •19.5. Труднорешаемые задачи
Понятие об алфавитных алгоритмах
Абстрактным алфавитом А называется конечная совокупность объектов, которые называются буквами или символами этого алфавита, при этом природа букв не имеет значения. Символом абстрактных алфавитов можно считать буквы алфавита какого-либо языка, цифры, любые значки и даже слова некоторого конкретного языка. Основным требованием к алфавиту является его конечность. Таким образом, можно утверждать, что алфавит - это конечное множество различных символов.
Алфавит, как любое множество, задается перечислением его элементов. Конечная упорядоченная последовательность букв алфавита А называется словом в этом алфавите. Например, в алфавите А={a,b,c,d} словами являются последовательности ab, bcd, aabbccdd. Мы также можем рассматривать числа, как слова в алфавите {0,1,2,3,4,5,6,7,8,9,}.
Слово, которое не содержит ни единой буквы называется пустым, и для его обозначения будем использовать символ #.
Два слова S1 и S2 называются равными, если они состоят из одинаковых букв, которые одинаково расположены. Число букв, которые входят в слово, называется его длиной. Если слово S1 входит в слово S2, то слово S1 является подсловом слова S2.
Итак, объекты реального мира можно изображать словами в различных алфавитах. Это позволяет считать, что объектами работы алгоритмов могут быть только слова. Тогда можно сформулировать следующее определение.
Алгоритмом в абстрактном алфавите А называется соответствие между словами в А, которое конструктивно задается конечной системой допустимых операций. То есть, алгоритм есть четкая конечная система правил для преобразования слов из некоторого алфавита в слова из этого же алфавита.
Алгоритм Р применимый к слову X (входное слово), если процесс преобразований входного слова X алгоритмом Р заканчивается некоторым словом Y (выходным словом): Р(X)=Y.
Совокупность всех слов данного алфавита, к которым применимый алгоритм Р, называется областью применения алгоритма Р.
Алгоритмы Р1 и Р2 над алфавитом А называются эквивалентными относительно А, если для любого слова X в алфавите А, к которому применим алгоритм Р1, применим также алгоритм Р2, и результаты их действия совпадают, то есть Р1(X) = Р2(X).
5.3. Формализация понятия “алгоритм”
Проблема, которая, с одной стороны, касается построения алгоритма с заданными свойствами для решения всех задач определенного класса, а с другой стороны, доведения существования алгоритма для решения задач определенного класса, называется алгоритмической проблемой. Такие проблемы еще называют массовыми алгоритмическими проблемами.
Если алгоритм (в интуитивном понимании) построен, то эта проблема есть алгоритмически разрешимой (решенной).
Алгоритмическая неразрешимость определенного класса задач означает, что соответствующего алгоритма не существует, то есть никакими средствами он никогда и никем не может быть построен. Утверждения об алгоритмической неразрешимости определенного класса задач требует обоснования в виде математического доказательства. Но такое доказательство можно построить лишь тогда, когда понятие алгоритма есть объектом некоторой математической теории. Так возникла необходимость уточнения понятия алгоритма. Эта необходимость также была обусловлена тем, что на начало 20 столетия в математике накопилось значительное количество задач, для которых не удавалось построить алгоритма их решения.
Алгоритмические модели, которые будем рассматривать, претендуют на право считаться формализацией понятия “алгоритм”. Это означает, что они должны быть универсальными, т.е. допускать описание любого алгоритма. Хотя эти модели и не совсем адекватно отображают все свойства алгоритмов и программ, поскольку строятся путем абстрагирования, но с их помощью можно установить много полезных свойств.
Эти модели сводятся одна к другой, т.е. каждый алгоритм, описанный способом одной модели, может быть описан способами другой модели. Приводится инвариантная относительно моделей система понять, что дает возможность говорить про свойства алгоритмов независимо от того, какую формализацию алгоритма выбрано. Эта система понятий основывается на понятии вычислимой функции, для вычисления которой существует алгоритм.
В теоретических подходах к построению строгого определения понятия алгоритма исторически выделились три основные направления (подхода), которые были получены в середине 30-х XX в. в трех формах. Первая базировалась на понятии рекурсивной функции, а вторая и третья – на точно определенном классе процессов. Эти формы получили название алгоритмические системы, или универсальные алгоритмические модели, которые будут рассмотрены ниже.
Рассмотрим неформально, что именно в интуитивном понятии алгоритма нуждается в уточнении.
1. Каждый алгоритм имеет дело с данными – входными, промежуточными, выходными. Для того чтобы уточнить понятие данных, фиксируется конечный алфавит исходных символов (цифры, буквы и т.п.) и указываются правила построения алгоритмических объектов. Типичным используемым средством является индуктивное построение. Например, определение идентификатора в АЛГОЛЕ: идентификатор – это либо буква, либо идентификатор, к которому приписана справа либо буква, либо цифра. Слова конечной длины в конечных алфавитах - наиболее обычный тип алгоритмических данных, а число символов в слове - естественная мера объема данных. Другой случай алгоритмических объектов - формулы. Примером могут служить формулы алгебры предикатов и алгебры высказываний. В этом случае не каждое слово в алфавите будет формулой.
2. Алгоритм для размещения данных требует памяти. Память обычно считается однородной и дискретной, т.е. она состоит из одинаковых ячеек, причем каждая ячейка может содержать один символ данных, что позволяет согласовать единицы измерения объема данных и памяти.
3. Алгоритм состоит из отдельных элементарных шагов, причем множество различных шагов, из которых составлен алгоритм, конечно. Типичный пример множества элементарных шагов – система команд ЭВМ.
4. Последовательность шагов алгоритма детерминированна, т.е. после каждого шага указывается, какой шаг следует выполнять дальше, либо указывается, когда следует работу алгоритма считать законченной.
5. Алгоритм должен обладать результативностью, т.е. останавливаться после конечного числа шагов (зависящего от исходных данных) с выдачей результата. Данное свойство иногда называют сходимостью алгоритма.
6. Алгоритм предполагает наличие механизма реализации, который по описанию алгоритма порождает процесс вычисления на основе исходных данных. Предполагается, что описание алгоритма и механизм его реализации конечны.
Можно заметить аналогию с вычислительными машинами. Требование 1 соответствует цифровой природе ЭВМ, требование 2 - памяти ЭВМ, требование 3 – программе машины, требование 4 – ее логической природе, требования 5, 6 – вычислительному устройству и его возможностям.
Имеются также некоторые черты неформального понятия алгоритма, относительно которых не достигнуто окончательного соглашения. Эти черты сформулируем в виде вопросов и ответов.
7.Следует ли фиксировать конечную границу для размера входных данных?
8.Следует ли фиксировать конечную границу для числа элементарных шагов?
9.Следует ли фиксировать конечную границу для размера памяти?
10.Следует ли ограничить число шагов вычисления?
На все эти вопросы далее принимается ответ “НЕТ”, хотя возможны и другие варианты ответов, поскольку у физически существующих ЭВМ соответствующие размеры ограничены. Однако теория, изучающая алгоритмические вычисления, осуществимые в принципе, не должна считаться с такого рода ограничениями, поскольку они преодолимы, по крайней мере, в принципе (например, вообще говоря, любой фиксированный размер памяти всегда можно увеличить на одну ячейку).
Таким образом, уточнение понятия алгоритма связано с уточнением алфавита данных и формы их представления, памяти и размещения в ней данных, элементарных шагов алгоритма и механизма реализации алгоритма. Однако эти понятия сами нуждаются в уточнении. Ясно, что их словесные определения потребуют введения новых понятий, для которых в свою очередь, снова потребуются уточнения и т.д. Поэтому в теории алгоритмов принят другой подход, основанный на конкретной алгоритмической модели, в которой все сформулированные требования выполняются очевидным образом. При этом используемые алгоритмические модели универсальны, т.е. моделируют любые другие разумные алгоритмические модели, что позволяет снять возможное возражение против такого подхода: не приводит ли жесткая фиксация алгоритмической модели к потере общности формализации алгоритма? Поэтому данные алгоритмические модели отождествляются с формальным понятием алгоритма. В дальнейшем будут рассмотрены основные типы алгоритмических моделей, различающиеся исходными трактовками, что такое алгоритм.
Первый подход связывает понятие алгоритма с традиционным представлением – процедурами вычисления значений числовых функций, зависящих от целочисленных значений аргументов – такие функции получили название вычислимых. Понятие вычислимой функции не является строгим, как и понятие алгоритма. Однако, благодаря работам А.Черча, К.Геделя, С.Клини, была обоснована тождественность класса всюду определенных вычислимых функций с классом частично рекурсивных функций, который определяется строго. Это позволило свести проблему алгоритмической разрешимости к доказательству возможности (или невозможности) построения рекурсивной функции, решающей задачу. Именно этим путем А.Черчу удалось доказать неразрешимость одной из проблем математической логики – исчисления истинности предикатов.
Рекурсивная функция это функция, для которой существует алгоритм вычисления ее значений по произвольному значению аргумента. Класс рекурсивных функций был определен строго как конкретный класс функций в некоторой формальной системе. Был сформулирован тезис, так называемый “тезис Черча”, утверждающий, что данный класс функций совпадает с множеством функций, для которых существует алгоритм вычисления значения по значению аргументов.
Другой подход основан на представлении алгоритма как некоторого детерминированного устройства, способного выполнять в каждый отдельный момент некоторые примитивные операции, или инструкции. Такое представление не оставляет сомнений в однозначности алгоритма и элементарности его шагов. Основная идея этого направления состоит в том, что алгоритмические процессы – это процессы, которые может совершать соответствующим образом устроенная «машина». В соответствии с этой идеей были описаны в точных математических терминах довольно узкие классы машин, однако при этом было доказано, что посредством этих машин можно осуществить или имитировать все алгоритмические процессы, которые фактически когда-либо описывались математиками. Данный подход развивался в работах Э.Поста и А.Тьюринга одновременно с упомянутым выше подходом. Доказательство алгоритмической разрешимости задачи сводится к доказательству существования машины, ее решающей.
Основной теоретической моделью этого типа, созданной в 30-х годах, является машина Тьюринга, которая представляет собой автоматную модель, в основе которой лежит анализ процесса выполнения алгоритма как совокупности набора инструкций. Был сформулирован тезис, называемый “тезис Тьюринга”, утверждающий, что любой алгоритм может быть реализован на подходящей машине Тьюринга. Оба данных подхода, а также другие привели к одному и тому же классу алгоритмически вычислимых функций, и подтвердили целесообразность использования тезиса Черча или тезиса Тьюринга для решения алгоритмических проблем.
Третий подход связан с преобразованием слов в произвольных алфавитах, в которых элементарными операциями являются подстановки, т.е. замена частей слова (подслова) другим словом. Преимуществом этого типа моделей – возможность применения понятия алгоритма к объектам произвольного типа (не обязательно числового). Модели второго и третьего типа довольно близки и отличаются в основном эвристическими подходами. Примером модели третьего типа являются нормальные алгоритмы, введенные и разработанные российским математиком А.А. Марковым в начале 50-х гг. XX в.
С появлением такого типа моделей задача алгоритмической разрешимости переформулируется следующим образом. Задача алгоритмически разрешима, если для нее можно построить рекурсивную функцию, или машину Тьюринга, или нормальный алгоритм Маркова. И наоборот, если для нее невозможно построить ни рекурсивную функцию, ни машину Тьюринга, ни нормальный алгоритм Маркова, то задача алгоритмически неразрешима.
Теория алгоритмов оказала существенное влияние на развитие ЭВМ и практику программирования. В теории алгоритмов были предугаданы основные концепции, заложенные в аппаратуру и языки программирования ЭВМ. Так, микропрограммирование строится на идеях машин Тьюринга, структурное программирование заимствовало свои конструкции из теории рекурсивных функций, языки символьной обработки информации (РЕФАЛ, ПРОЛОГ) берут начало от нормальных алгоритмов Маркова и систем Поста.
