2. Понятие алгоритма, его свойства
Н
азвание
"алгоритм" произошло от латинской
формы имени величайшего среднеазиатского
математика Мухаммеда ибн Муса аль-Хорезми
(Alhorithmi), жившего в 783–850 гг.
Приблизительно в 850 году н.э. арабский ученый математик Мухаммед бен Муса ал-Хорезм (из города Хорезма на реке Аму-Дарья) написал книгу об общих правилах решения арифметических задач при помощи уравнений. Она называлась "Китаб ал-Джебр". Эта книга дала имя науке алгебре. Очень большую роль сыграла еще одна книга ал-Хорезми, в которой он подробно описал индийскую арифметику. Триста лет спустя (в 1120 году) эту книгу перевели на латинский язык, и она стала первым учебником "индийской" (то есть нашей современной) арифметики для всех европейских городов.
Алгоритм – это некоторая конечная последовательность точных предписаний (правил), однозначно определяющая процесс преобразования исходных и промежуточных результатов в конечный результат при решении всех задач данного типа. Это не определение в математическом смысле слова, но довольно подробное описание данного понятия, раскрывающее его сущность.
Если ограничиться только содержательной интерпретацией этого понятия, то под алгоритмом традиционно понимают систему правил или предписаний, определяющих процесс преобразования исходных данных в искомый результат, обладающих следующими свойствами:
а) детерминированностью, т.е. однозначностью понимания для исполнителя и точностью, не оставляющей места для произвола в действиях. Таким образом, алгоритм должен быть представлен в такой форме, чтобы он однозначно понимался любым пользователем и любые исполнители выполняли бы его совершенно одинаково;
б) массовостью, т.е. пригодностью для решения различных вариантов данной задачи. Обычно считается, что алгоритм должен быть пригоден, может быть, за некоторым исключением, для решения целого класса задач;
в) результативностью или направленностью, т.е. свойством приводить в тех случаях, для которых алгоритм создан, к получению искомого результата, и притом за конечное число достаточно простых шагов. Из свойства результативности непосредственно вытекает понятие области применимости алгоритма, которая определяется наибольшей областью исходных данных, в которой алгоритм результативен.
С реализацией алгоритма непосредственно связано умение приложить его к конкретным исходным данным решаемой задачи. Такое применение называется алгоритмическим процессом. Он расчленяется на ряд самостоятельных этапов, каждый из которых предназначен для перевода данных из одного состояния в другое.
Полное построение алгоритма включает несколько основных этапов:
1) постановку задачи;
2) построение математической модели;
3) разработку алгоритма;
4) реализацию алгоритма (составление программы);
5) анализ алгоритма и его сложности;
6) отладку и исполнение программы;
7) анализ и обработку результатов счета;
8) документирование и сопровождение алгоритма и программ.
Алгоритмы характеризуются рядом общих признаков.
Дискретность. Одно из первоначальных требований к записи состоит в том, что рассматриваемый процесс должен быть разделен на отдельные элементарные акты (этапы), возможность выполнения которых человеком или машиной не вызывает сомнений. Возникающая в ходе такого расчленения запись представляет собой упорядоченную совокупность предписаний, образующих дискретную (прерывную) структуру алгоритма. Предписания при этом выполняются в последовательном порядке.
Понятность. Предполагается, что исполнитель всегда знает, как выполнить правило. Говорят, что алгоритм понятен для него. Так как на практике он ориентирован на конкретного пользователя, то нужно знать, какие предписания он может понять и реализовать, а какие нет. У каждого исполнителя имеется перечень предписаний – система предписаний, или система команд. Поэтому, составляя алгоритм, надо иметь в виду исполнителя, для которого он предназначен, и при записи использовать лишь те предписания, которые есть в системе его команд.
Указанное выше свойство алгоритмов будет называться свойством понятности. Таким образом, его можно истолковать как наличие заданного в виде текста алгоритма, описывающего процесс выполнения алгоритма, Следовательно, не только люди могут быть исполнителями алгоритмов.
Детерминированность и определенность. Каждый пункт алгоритма должен быть сформулирован так, чтобы предусматриваемые действия определялись однозначно, т.е. предписание, будучи понятным разным исполнителям, после реализации каждым из них должно давать одинаковый результат. Кроме того, исполнителю должно быть ясно, какое из предписаний должно выполняться на следующем шаге. Это свойство называют определенностью.
Массовость и общность. Как правило, алгоритм может быть применен не только к единственному исходному данному или единственному их набору, но и к целому классу. Например, для алгоритма Евклида ими могут служить любые пары положительных чисел. Это отражает такое свойство алгоритма, как массовость. Общность же означает пригодность для решения более или менее широкого круга сходных задач.
Результативность (потенциальная выполнимость). Смысл этого обязательного требования состоит в том, что при любых допустимых исходных данных и при точном исполнении всех предписаний алгоритма вычислительный процесс должен через конечное число шагов остановиться и будет выдан искомый результат. Так как требование завершения алгоритмического процесса за конечное число шагов не учитывает реальных возможностей, то говорят, что алгоритм потенциально (а не реально) выполним.
Если же результат получить нельзя, хотя исходные данные и допустимы, то алгоритм к ним неприменим. В таком случае либо процесс никогда не оканчивается (при этом говорят, что он бесконечен), либо его выполнение во время одного из шагов наталкивается на препятствие (он безрезультатно обрывается).
Правильность. Под ней подразумевается способность алгоритма обеспечивать получение именно того результата, который требуется постановкой задачи. Неправильность может объясняться неполнотой наших представлений о свойствах математической модели или о возможностях используемых численных методов, а иногда и тем, что некоторые обстоятельства упущены из виду либо сочтены несущественными.
Доказательство правильности алгоритма – это один из самых трудных, а иногда и особенно утомительных этапов его создания. Вероятно, наиболее распространенная процедура – это расчленение на блоки и доказательство правильности какого-либо из них. На практике чаще всего судят о правильности алгоритма по результатам исполнения программы (после прогона ее на разный тестах). Заметим, что такая проверка не является полной по двум причинам: во-первых, контрольные расчеты могут миновать некоторые ветви алгоритма; во-вторых, отрицательный результат может быть следствием ошибок в программе.
Эффективность. Для решения одних и тех же задач могут быть взяты различные алгоритмы. Предположим, что они правильны и реально выполнимы. Для использования выбирается тот из них, который потребует минимального времени для реализации или наименьшей памяти. Говоря об эффективности, чаще всего имеют в виду длительность счета. Основной способ ее количественной оценки – ориентировочный подсчет числа арифметических операции (особенно наиболее медленных – умножения и деления). Для стандартных алгоритмов решения типовых вычислительных задач они обычно известны.
