Свойства алгоритма

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

Массовость алгоритма

Ценность алгоритма возрастает, если его можно применить к решению не одной, а целого класса задач. Такое свойство алгоритма называется его массовостью. Известные из арифметики правила сложения и умножения чисел «столбиком» — массовые алгоритмы, применяемые к любым слагаемым или сомножителям.

Кулинарные рецепты и инструкции по применению того или иного товара, как правило, не обладают массовостью — они составляются для каждого конкретного случая, и от этого никуда не уйти. Ведь каждый кулинарный рецепт обладает персональными пошаговыми инструкциями приготовления и набором ингредиентов.

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

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

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

***

Конечность

Алгоритм должен решить задачу за конечное число шагов. Мы не можем вечно ждать результата. Если же алгоритм по каким-то причинам не может решить задачу, он должен сообщить об этом и завершить работу.

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

Иногда время решения задачи составляет несколько часов или даже несколько суток. В таком случае в алгоритм обычно вводят инструкции, которые время от времени передают сообщения пользователю, сигнализирующие о нормальной, как говорят — штатной работе алгоритма. Даже программа, работающая непрерывно всего несколько минут, как правило, выводит на экран графические индикаторы своего выполнения — песочные часы, «градусник», различные вращающиеся или бегущие предметы, надписи и т. п., успокаивая таким образом пользователя — «все ok, я не зависла, я работаю!»

Конечность алгоритма обычно связывают с еще одним свойством – результативностью. Под результативностью алгоритма подразумевается, что по завершении каждого шага (или всего алгоритма в целом) должна быть получена среда (результат), в которой все объекты однозначно определены и можно приступать к выполнению следующего шага или следующего алгоритма, либо анализировать полученный результат. Если алгоритм не может получить такую полностью определяемую среду, он должен сообщить пользователю, что порученная задача не имеет однозначного решения.

***

Однозначность

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

Компьютеру не скажешь: «Купи что-нибудь: колбасу или ветчину» и уж тем более — «Сыграй что-нибудь грустное или романтическое». Посылая компьютеризированного робота за покупками (почему бы нет?), надо дать ему точную, однозначную инструкцию: «Если колбаса свежее ветчины, купи колбасу, в противном случае купи ветчину». И даже такая, казалось бы, подробная команда может оказаться недостаточной, если вдруг колбасы в магазине не окажется, либо окажется несколько сортов колбасы или ветчины. Ваш робот растеряется и надолго задумается (если замешательство робота можно считать мыслительным процессом) над неподдающейся его скудному «разуму» задачей.

Требование однозначности (иногда это свойство называют дискретностью) обычно учитывается уже при разработке алгоритмического языка. Сами конструкции языка исключают неоднозначное их толкование и выполнение. На стадии обдумывания программы следует помнить об однозначности применяемого алгоритма.

Часто в программах встречаются несколько вариантов продолжения работы алгоритма. В таком случае нужно тщательно продумать условия выбора одного и только одного варианта.

***

Понятность

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

То же самое в отношении ЭВМ – необходимо быть уверенным, что программная начинка компьютера и его «железо» смогут выполнить последовательность действий, предусмотренных алгоритмом.
Каждый шаг алгоритма обязательно должен представлять собой какое-либо допустимое и выполнимое действие конкретного исполнителя. Это свойство алгоритма и называют понятностью.

***

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

Алгоритмэто точное пошаговое описание в системе команд исполнителя последовательности действий, однозначно приводящей к результату за конечное число шагов.
Это определение свело вместе все отмеченные выше свойства алгоритма. Оно отвечает не на вопрос: «что такое алгоритм», а на вопрос: «что делает алгоритм». В практическом программировании второй вопрос возникает гораздо чаще и ответ на него для программиста-практика значительно важнее.

***

Языки программирования



Rambler's Top100