Тема: Основные понятия теории алгоритмов. Интуитивное понятие алгоритма. Словесные алгоритмы. Необходимость формализации понятия алгоритма и появление теории алгоритмов. Основные направления формализации: алгебраические и геометрические. 1. Основные понятия теории алгоритмов. Теория алгоритмов — раздел математики, изучающий общие свойства алгоритмов. Понятие «алгоритм» сформировалось в математике в 20-х годах XX в. Началом систематической разработки теории алгоритмов можно считать 1936 г. и связывают это начало с публикацией работы А.А. Черча. алгоритм - точное предписание, которое задает вычислительный процесс (называемый в этом случае алгоритмическим), начинающийся с произвольного исходного данного (из некоторой совокупности возможных для данного алгоритма исходных данных) и направленный на получение полностью определяемого этим исходным данным результата. Академик А.И.Мальцев (Алгоритмы и рекурсивные функции. М.: Наука, 1986) уточняет понятие процесса: алгоритм - это процесс последовательного построения величин, идущий в дискретном времени таким образом, что в начальный момент задается исходная конечная система величин, а в каждый следующий момент система величин получается по определенному закону из системы величин, имевшихся в предыдущий момент времени. Профессор Стэнфордского университета Д.Кнут (Калифорния, США) в книге «Искусство программирования для ЭВМ» (Т. 1) отмечает, что современное значение слова «алгоритм» очень схоже со значением слов «рецепт», «процесс», «метод», «способ», «процедура», «программа», но имеет свой дополнительный смысловой оттенок. Это уточнение смысла может быть сформулировано как перечень некоторых свойств, которыми должен обладать любой алгоритм. Не все авторы используют для обозначения свойств одинаковые термины и дают равной длины перечни на то и неформальное определение. Но в конечном итоге имеется общее понимание того, что является алгоритмом, а что не является. Прежде всего отметим, что алгоритм - это предписание. Предписание должно быть задано (закодировано) в некоторой форме. Это может быть текст - строка символов в некотором алфавите, таблица, диаграмма, упорядоченный набор пиктограмм и т.д. 2. Интуитивное понятие алгоритма. Мухаммед ибн Муса ал-Хорезми (IX в) в своем арифметическом трактате изложил основы индийской системы счисления и искусство счета в ней. Латинский перевод трактата, относящийся к XII в начинается словами «Dixit algorizmi» — «Сказал аль-Хорезми». С тех пор термин «алгоритм» стал применяться для обозначения первых алгоритмов цифровых вычислений, затем и для произвольных алгоритмов. Интуитивное понятие алгоритма – одно из основных понятий математики, не допускающее определения в терминах более простых понятий. Пусть задано бесконечное множество задач и указано, что понимается под решением каждой из них. Говорят, что существует алгоритм для решения данного бесконечного множества задач, если существует единый способ, позволяющий, для любой задачи этого множества, в конечное число шагов, найти ее решение. Это не является определением, т.к. выражение «единый», «конечное число шагов» лишены математической точности. Черты, характерные для интуитивного понятия алгоритма 1. Дискретность. Это свойство заключается в следующем: в начальный момент задается исходная система величин, а в каждый следующий момент система величин получается из предыдущей системы величин по определенному закону (программе). 2. Детерминированность. Система величин, получаемых в любой, отличный от начального, момент времени, однозначно определяется системой величин в предшествующие моменты времени. 3. Элементарность шагов. Закон получения последующей системы величин из предыдущей должен быть простым и локальным. 4. Эффективность (результативность). Каждый шаг работы алгоритма должен заканчиваться результатом. 5. Массовость алгоритма. Начальная система величин может выбираться из некоторого бесконечного счетного множества Х. 6. Конструктивность. Объекты из Х, над которым работает алгоритм, должны быть конструктивными. Конструктивный объект – тот, который может быть набран весь целиком и представлен для рассмотрения. Примерами конструктивных объектов являются булевы функции, формулы алгебры логики, натуральные и рациональные числа, матрицы с натуральными или рациональными элементами, многочлены от неизвестных с рациональными коэффициентами. Неконструктивными объектами являются, например, любые действительные числа, представления которых в десятичной записи a0 a1…an… ни для какого nиз натуральных чисел не может быть целиком представлено для рассмотрения. Числа и не являются конструктивными объектами. Понятно, что понятие алгоритма, описываемое свойствами 1-6, является нестрогим: в формулировке этих свойств встречаются слова, не имеющие точного математического определения. Необходимо также отметить, что, вообще говоря, не предполагается, что процесс применения алгоритма к исходным данным обязательно должен закончиться результатом через конечное число шагов. Процесс может закончиться безрезультатно или не закончиться вообще. В этом случае говорят, что алгоритм неприменим к рассматриваемым исходным данным. Примеры алгоритмов: Алгоритмы арифметических действий с числами в двоичной системе счисления алгоритм нахождения НОД 2-х целых чисел, 2-х многочленов от переменной х; алгоритм извлечения ?n,?n?N ; алгоритм дифференцирования многочлена от переменной ; алгоритм нахождения определителя квадратной матрицы А над ?; Вплоть до 30-х годов двадцатого столетия понятие алгоритма оставалось интуитивно понятным, имевшем скорее методологическое, а не математическое значение. Так, к началу ХХ в. много ярких примеров дала алгебра и теория чисел. Среди них упомянем алгоритм Евклида нахождения наибольшего общего делителя двух натуральных чисел или двух целочисленных многочленов, алгоритм Гаусса решения системы линейных уравнений над полем, алгоритм нахождения рациональных корней многочленов одного переменного с рациональными коэффициентами, алгоритм Штурма определения числа действительных корней многочлена с действительными коэффициентами на некотором отрезке действительных чисел, алгоритм разложения многочлена одного переменного над конечным полем на неприводимые множители. Указанные алгоритмические проблемы решены путем указания конкретных разрешающих процедур. Для получения результатов такого типа достаточно интуитивного понятия алгоритма. Но тогда же были выдвинуты алгоритмические проблемы, для которых не удавалось построить алгоритм, да и само существование таких алгоритмов было под сомнением. Примеры: 10-я проблема Гильберта о разрешимости произвольного диофантового уравнения; Проблема определения общезначимости произвольной формулы логики предикатов. Указанные проблемы были решены отрицательно, т.е. доказано, что не существует алгоритма для их решения (соответственно Ю. Матиясевич (1970 г.) и А. Черч (1936г.)). Для доказательства несуществования алгоритма, интуитивного понятия алгоритма недостаточно. Оно должно быть уточнено и формализовано. С этой целью построены несколько формальных алгоритмических моделей, представляющих алгоритм как: 1. вычисление функции натурального аргумента (частично- рекурсивные функции); 2. работу некоторой абстрактной машины (машины Тьюринга, машина с неограниченными регистрами); 3. последовательные преобразования слов, записанных в произвольном алфавите (нормальные алгоритмы Маркова). Для теории сложности вычислений, выбор модели, в которой конструируются алгоритмы, не имеет принципиального значения. Существуют способы реализации одних алгоритмических моделей с помощью других. При этом сохраняется принадлежность алгоритмов определенному классу сложности (P, N и др.). Алгоритм, записанный в виде программы на языке программирования высокого уровня, также может быть смоделирован с помощью одной из упомянутых формальных моделей. 3. Словесные алгоритмы. Самой распространенной формой представления алгоритмов, адресуемых человеку, является обычная словесная запись. Форму словесной записи имеют многие так называемые “бытовые” алгоритмы, часто используемые в повседневной практике: как выкрасить изделие, как позвонить по междугородному телефону-автомату, как пользоваться стиральной машиной и т.п. Особенность словесных представлений алгоритмов в том, что таким путем при желании могут быть описаны любые алгоритмы, в том числе и вычислительные. Например. Пусть требуется записать последовательность элементарных действий для вычислений по формуле: При составлении требуемой алгоритмической записи предположим, что правило выполнения арифметических операций сложения, умножения и деления, а также действия извлечения квадратного корня понятны вычислителю, т.е. являются для него элементарными. При этом предположении искомый алгоритм в обычной словесной записи может иметь вид: 1.Прочитать заданное значение х. 2.Умножить х на 8. 3. Из результата второго действия извлечь квадратный корень. 4. К результату третьего действия прибавить 1. 5. Умножить х на 3. 6. Результат пятого действия разделить на результат четвертого действия. 7. Записать значение результата у. Получили словесную запись линейного вычислительного алгоритма. Следует особое внимание обратить на первое и последнее предписания в этой записи, обеспечивающие задание значения исходного данного и выдачу полученного ответа. При всей кажущейся излишней педантичности этих предписаний они имеют первостепенное значение в алгоритмах, адресуемых исполнителям-автоматам. Формулируя эти предписания, автор алгоритма должен четко определить для себя, что в этой задаче «дано», а что «требуется получить». Или, говоря иными словами, какие величины являются носителями исходных значений (входные величены, или аргументы), а какие – носителями значений результатов (выходные величины или результаты). В приведенной выше записи вычислительного алгоритма входной величиной является х, а выходной – у. 4. Необходимость формализации понятия алгоритма и появление теории алгоритмов. Почему необходимо формальное определение алгоритма. После того, как в 30-е годы прошлого века была доказана алгоритмическая неразрешимость некоторых задач в разных разделах математики, возникла совершенно новая ситуация. До тех пор, пока ученые верили в возможность построения алгоритмов для всех поставленных задач, не было повода уточнять интуитивное понятие алгоритма. Доказательство существования алгоритмически неразрешимых проблем означало, что существуют классы задач, для решения которых алгоритм не просто не найден, а его не будет найдено никогда. В отличие от конкретных алгоритмов, доказательство алгоритмической неразрешимости, т.е. доказательство высказывание невозможности, обо всех в мыслимых котором содержалось алгоритмах, бы потребовало формального уточнения понятия «алгоритм». Не имея формального определения, невозможно говорить обо всех мыслимых алгоритмах. 4. Для формального определения алгоритма требуется предварительно рассмотреть некоторые общие понятия, часто используемые в математике. 4.1. Множество. Элемент множества. Примеры множеств. 4.2. Мощность множества. Понятие подмножества. Операции над множествами. 4.3. Декартово произведение множеств. Отображение множеств. 4.4. Частично определенная функция. 5. Основные направления формализации: алгебраические и геометрические