Глава 8. Понятие алгоритма
Необходимый этап в процессе решения задачи на ЭВМ – это разработка алгоритма. В связи с этим алгоритмы представляют самостоятельную ценность как интеллектуальные ресурсы общества.
Понятие алгоритма, относящееся к фундаментальным понятиям информатики, возникло задолго до появления ЭВМ и стало одним из основных понятий математики.
Слово «алгоритм» произошло от имени великого среднеазиатского математика Мухаммеда аль-Хорезми (IX в.), описавшего правила выполнения четырех арифметических действий: сложения, вычитания, умножения и деления с многозначными числами.
Позже в Европе эти правила назвали алгоритмами от Algorithmi – латинского написания имени Аль-Хорезми.
В настоящее время понятие алгоритма используется не только в математике. Его применяют во многих областях человеческой деятельности, например, говорят об алгоритме управления производственным процессом, алгоритме игры в шахматы, алгоритме пользования бытовым прибором, алгоритме поиска пути в лабиринте, алгоритме управления полетом ракеты и т. п.
Для пояснения понятия «алгоритм» важное значение имеет определение понятия «исполнитель алгоритма». Алгоритм формулируется в расчете на конкретного исполнителя, например человека, особую машину — автомат и т. д.
Алгоритм является руководством к действию для исполнителя, поэтому значение слова «алгоритм» близко по смыслу к значению слов «указание» или «предписание».
Алгоритм — понятное и точное предписание (указание) исполнителю совершить определенную последовательность действий для достижения указанной цели или решения поставленной задачи.
Сказанное не является определением в математическом смысле, а лишь отражает интуитивное понимание алгоритма, сложившееся за долгие годы.
Свойства алгоритма:
1. Результативность
Алгоритм имеет некоторое число входныхвеличин — аргументов, задаваемых до начала работы Цель выполнения алгоритма — получение результата (результатов), имеющего вполне определенное отношение к исходным данным. Можно сказать, что алгоритм указывает последовательность действий по переработке исходных данных в результаты.
2. Массовость (универсальность)
Для алгоритма можно брать различные наборы входных данных, т. е. можно применять один и тот же алгоритм для решения целого класса однотипных задач, различающихся исходными данными. Это свойство алгоритма обычно называют массовостью. Вместе с тем существуют и такие алгоритмы, которые применимы только к единственному набору исходных данных. Поэтому понятие массовости требует уточнения. Можно считать, что для каждого алгоритма существует свой класс объектов, допустимых в качестве исходных данных. Тогда свойство массовости означает применимость алгоритма ко всем объектам этого класса.
3. Понятность
Чтобы алгоритм можно было выполнить, он должен быть понятен исполнителю. Чтобы этот алгоритм мог быть также выполнен человеком, необходимо записать алгоритм на языке, понятном исполнителю. Понятность алгоритма означает знание исполнителя о том, что надо делать для исполнения этого алгоритма. Таким образом, при формулировке алгоритма необходимо учитывать возможности и особенности исполнителя, на которого рассчитан алгоритм.
4. Конечность (дискретность)
Алгоритм представлен в виде конечной последовательности шагов. Говорят, что алгоритм имеет дискретную структуру. Следовательно, его исполнение расчленяется на выполнение отдельных его шагов (выполнение каждого очередного шага начинается после завершения предыдущего). Выполнение алгоритма заканчивается после выполнения конечного числа шагов. При выполнении алгоритма некоторые его шаги могут повторяться многократно. В математике существуют вычислительные процедуры, имеющие алгоритмический характер, но не обладающие свойством конечности. Так, можно сформулировать процедуру вычисления числа p. Такая процедура описывает бесконечный процесс и никогда не завершится. Если же прервать ее искусственно, например, ввести условие завершения процесса вычислений вида: «Закончить вычисления после получения п десятичных знаков числа p», то получится алгоритм вычисления пдесятичных знаков числа p. На этом принципе основано получение многих вычислительных алгоритмов: строится бесконечный, сходящийся к искомому решению процесс. Он обрывается на некотором шаге, и полученное значение принимается за приближенное решение рассматриваемой задачи. При этом точность приближения зависит от числа шагов.
5. Определенность (точность)
Каждый шаг алгоритма должен быть четко и недвусмысленно определен и не должен допускать произвольной трактовки исполнителем. При исполнении алгоритма исполнитель должен действовать строго в соответствии с его правилами и у него не должно возникать потребности предпринимать какие-нибудь действия, отличные от предписанных алгоритмом. Иными словами, алгоритм рассчитан на чисто механическое исполнение. Эта очень важная особенность означает, в частности, что если один и тот же алгоритм поручить для исполнения разным исполнителям, то они придут к одному и тому же результату, лишь бы эти исполнители понимали алгоритм. Именно определенность алгоритма дает возможность поручить его исполнение автомату, не обладающему «здравым смыслом». Таким образом, формулировка алгоритма должна быть так точна, чтобы полностью определять все действия исполнителя.
6. Эффективность
Каждый шаг алгоритма должен быть выполнен точно и за конечное время. В этом смысле говорят, что алгоритм должен быть эффективным, т. е. действия исполнителя на каждом шаге исполнения алгоритма должны быть достаточно простыми, чтобы их можно было выполнить точно и за конечное время. Обычно отдельные указания исполнителю, содержащиеся в каждом шаге алгоритма, называют командами. Таким образом, эффективность алгоритма связана с возможностью выполнения каждой команды за конечное время. Кроме того, эффективность означает, чтоалгоритм может быть выполнен не просто за конечное, а за разумное конечное время.