Алгоритм. Его виды и свойства

Каждый алгоритм имеет дело с данными – входными, промежуточными и выходными.

Конечность. Понимается двояко: во-первых, алгоритм состоит из отдельных элементарных шагов, или действий, причем множество различных шагов, из которых составлен алгоритм, конечно. Во-вторых, алгоритм должен заканчиваться за конечное число шагов. Если строится бесконечный, сходящийся к искомому решению процесс, то он обрывается на некотором шаге и полученное значение принимается за приближенное решение рассматриваемой задачи. Точность приближения зависит от числа шагов.

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

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

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

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

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

Эффективность. Одну и ту же задачу можно решить по-разному и соответственно за разное время и с различными затратами памяти. Желательно, чтобы алгоритм состоял из минимального числа шагов и при этом решение удовлетворяло бы условию точности и требовало минимальных затрат других ресурсов.

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

Можно обойти проблему интерпретации правил, если наряду с формулировками предписаний описать конструкцию и принцип действия интерпретирующего устройства. Это позволяет избежать неопределенности и неоднозначности в понимании одних и тех же инструкций. Для этого необходимо задать язык, на котором описывается множество правил поведения, либо последовательность действий, а также само устройство, которое может интерпретировать предложения, сделанные на этом языке, и выполнять шаг за шагом каждый точно определенный процесс. Оказывается, что такое устройство (машину) можно выполнить в виде, который остается постоянным независимо от сложности рассматриваемой процедуры.

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

Первый тип связывает понятие алгоритма с наиболее традиционными понятиями математики – вычислениями и числовыми функциями. Второй тип основан на представлении об алгоритме как о некотором детерминированном устройстве, способном выполнять в каждый отдельный момент лишь весьма примитивные операции. Такое представление обеспечивает однозначность алгоритма и элементарность его шагов. Кроме того, такое представление соответствует идеологии построения компьютеров. Основной теоретической моделью этого типа, созданной в 1930-х гг. английским математиком Аланом Тьюрингом, является машина Тьюринга.

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

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

Запись алгоритма на некотором языке представляет собой программу. Если программа написана на специальном алгоритмическом языке (например, на ПАСКАЛе, БЕЙСИКе или каком-нибудь другом), то говорят об исходной программе . Программа, написанная на языке, который непосредственно понимает компьютер (как правило, это двоичные коды), называется машинной, или двоичной.

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

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

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

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

Для записи алгоритмов используют самые разнообразные средства. Выбор средства определяется типом исполняемого алгоритма. Выделяют следующие основные способы записи алгоритмов:

вербальный – алгоритм описывается на человеческом языке;

символьный – алгоритм описывается с помощью набора символов;

графический – алгоритм описывается с помощью набора графических изображений.

Общепринятыми способами записи алгоритма являются графическая запись с помощью схем алгоритмов (блок-схем) и символьная запись с помощью какого-либо алгоритмического языка.

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

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

Начало и конец алгоритма обозначают с помощью одноименных символов (рис. 21.1).

Рис. 21.1.

Шаг алгоритма, связанный с присвоением нового значения некоторой переменной, преобразованием некоторого значения с целью получения другого значения, изображается символом "процесс" (рис. 21.2).

Рис. 21.2.

Выбор направления выполнения алгоритма в зависимости от некоторых переменных условий изображается символом "решение" (рис. 21.3).

Рис. 21.3.

Здесь Р означает предикат (условное выражение, условие). Если условие выполнено (предикат принимает значение ИСТИНА), то выполняется переход к одному шагу алгоритма, а если не выполнено, то к другому.

Имеются примитивы для операций ввода и вывода данных, а также другие графические символы. В настоящий момент они определены стандартом ГОСТ 19.701–90 (ИСО 5807–85) "Единая система программной документации. Схемы алгоритмов, программ данных и систем. Условные обозначения и правила выполнения". Всего сборник ЕСПД содержит 28 документов.

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

В зависимости от последовательности выполнения действий в алгоритме выделяют алгоритмы линейной, разветвленной и циклической структуры.

В алгоритмах линейной структуры действия выполняются последовательно одно за другим.

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

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

В этом случае одно повторение цикла называется итерацией.

а л г о р и ф м) – одно из основных понятий логики и математики. Под А. понимают точное предписание, задающее вычислит. процесс, ведущий от начальных данных, к-рые могут варьировать, к искомому результату. Встречающиеся выше слова "вычисления", "вычислительный" не следует понимать в узком смысле цифровых вычислений. Так, уже в школьном курсе алгебры говорят о буквенных вычислениях, и хотя здесь буквы играют еще роль заместителей чисел, уже в арифметич. вычислениях появляются символы, не обозначающие никаких величин: скобки, знак равенства, знаки арифметич. действий. Можно пойти дальше и рассматривать вычисления с произвольными символами и их комбинациями; именно в таком широком смысле и понимают термин "вычисления" при описании понятия "А.". Так, можно говорить об А. перевода с одного языка на другой, об А. работы поездного диспетчера (перерабатывающего информацию о движении поездов в приказы) и др. примерах алгоритмич. описания процессов управления, изучаемых кибернетикой. З н а ч е н и е А. Само слово "А." восходит к 9 в. (оно происходит от Algoritmi, являющегося, в свою очередь, лат. транслитерацией, произведенной, по-видимому, в 12 в., арабского имени хорезмийского математика аль-Хорезми). В наши дни простейшие А. появляются уже в начальной школе – это А. арифметич. действий (в ср.-век. Европе А. как раз и называлась совр. школьная арифметика, т.е. десятичная позиционная система счисления и искусство счета в ней, поскольку трактат аль-Хорезми был одним из первых, если не самым первым, благодаря к-рому Европа познакомилась с позиционной системой). Подчеркнем, что в начальной школе обучают именно А. счета. Говоря об умении человека складывать числа, имеют в виду не то, что он для любых двух чисел рано или поздно сумеет найти их сумму, а то, что он владеет нек-рым единообразным приемом сложения, применимым к любым двум конкретным записям чисел, т.е., иными словами, А. сложения (примером такого А. является известный А. сложения чисел "столбиком"). А. встречаются в науке на каждом шагу, умение решать задачу "в общем виде" всегда означает, по существу, владение нек-рым А. Понятие задачи "в общем виде" уточняется при помощи понятия массовой проблемы. Под термином "проблема" можно понимать задачу нахождения объекта, обладающего теми или иными свойствами; этот объект наз. решением проблемы (в частности, для проблемы нахождения ответа на какой-то вопрос решением является ответ "да" или "нет" на поставл. вопрос). Проблема неразрешима, если она не имеет решения, т.е. не существует объекта, обладающего нужными свойствами. Ясно поэтому, что неразрешимость проблемы не дает оснований для агностич. выводов; напротив, установление неразрешимости конкретной проблемы есть важный познават. акт. Массовая проблема задается серией отдельных, "единичных" проблем и состоит в требовании найти общий метод (т.е. А.) их решения. Неразрешимость массовой проблемы означает невозможность найти соответств. А. Массовые проблемы чрезвычайно характерны и важны для логики и математики. Даже решение единичных проблем часто ценно именно благодаря тому, что одновременно дает общий метод для решения целого класса проблем; в то же время постановка массовой проблемы означает превращение нек-рого класса проблем в единичную проблему – проблему нахождения А. для решения всех проблем этого класса; здесь проявляется связь таких категорий диалектики, как единичное, особенное и всеобщее. Ролью массовых проблем и определяется значение А. Установление неразрешимости той или иной массовой проблемы (т.е. отсутствия е д и н о г о алгоритма, позволяющего найти решения в с е х единичных проблем данной серии) является важнейшим познавательным актом, показывающим, что для решения конкретных единичных проблем принципиально необходимы специфические для каждой такой проблемы методы. Существование неразрешимых массовых проблем служит, т.о., конкретным воплощением неисчерпаемости процесса познания. Содержат. явления, к-рые легли в основу образования понятия "А.", издавна занимали важное место в науке. Многие задачи, возникавшие в математике и логике, заключались в поисках тех или иных конструктивных методов. Поиски таких методов, особенно усилившиеся в связи с созданием удобной математич. и логич. символики, а также осмысление принципиального отсутствия этих методов в ряде случаев – все это было мощным фактором развития науч. знания. Осознание невозможности решить любую задачу прямым вычислением привело к созданию в 19 в. теоретико-множеств. концепции. Лишь после периода бурного развития этой концепции (в рамках к-рой вопрос о конструктивных методах в совр. их понимании вообще не возникает) оказалось возможным в последние десятилетия вновь вернуться к вопросам конструктивности, но уже на новом уровне, обогащенном выкристаллизовавшимся понятием "А." (еще одна иллюстрация к положению Ленина о спиралеобразном характере развития познания). И хотя понятие "А." не является столь далеко идущей абстракцией, как, скажем, понятие "множество", нельзя считать случайным, что исторически первое из этих понятий возникло позднее второго. П р и м е р ы А. Подобно понятиям "множество", "соответствие", "натуральное число", "отношение" и т.п., понятие "А." является первичным логико-математич. понятием (одной из категорий логики и математики). Оно не допускает формального определения через более простые понятия, а (как и др. математич. категории) абстрагируется непосредственно из опыта. Понятие "А." может быть усвоено лишь на примерах. П р и м е р 1. Возможными начальными данными являются конечные непустые комбинации, составленные из палочек (I), т.е. объекты I, II, III и т.д. А. состоит из след. правил (выполнять к-рые надлежит начиная с правила 1°): 1°. Подчеркни снизу крайнюю слева палочку и перейди к выполнению правила 2°. 2°. Надчеркни сверху крайнюю справа палочку и перейди к выполнению правила 3°. 3°. Рассмотри подчеркнутую палочку и, если она не надчеркнута, перейди к выполнению правила 4°. 4°. Рассмотри палочку непосредственно следующую за подчеркнутой; если она не надчеркнута, перейди к выполнению правила 5°; если же она надчеркнута, перейди к выполнению правила 7°. 5°. Перенеси нижнюю черточку с подчеркнутой палочки на непосредственно за ней следующую и перейди к выполнению правила 6°. 6°. Перенеси верхнюю черточку с надчеркнутой палочки на непосредственно ей предшествующую и перейди к выполнению правила 7°. 7°. Сотри надчеркнутую палочку и все следующие за нею палочки и перейди к выполнению правила 8°. 8°. Сотри нижнюю черточку у подчеркнутой палочки; то, что получилось, и есть результат. Применяя этот А. к комбинации ||||, взятой в качестве начального данного, получим последовательно: по правилу 1° – |||, по правилу 2° – ? || , по правилам 3°, 4°, 5° – | ? | , по правилам 6°, 3°, 4° – | ? | по правилу 7° – | ?, по правилу 8° – || (результат). Если же попытаться применить А. к комбинации |||, то получим: по правилу 1° – ? ||, по правилу 2° – ? | , по правилам 3°, 4°, 5° – | ? , по правилу 6° – | I |, далее нужно перейти к выполнению правила 3°, но правило 3° выполнимо лишь при условии, что подчеркнутая палочка не надчеркнута. Т.о., для создавшейся ситуации А. не содержит указаний, как поступать дальше; произошла т.н. безрезультатная остановка (остановка, не сопровождающаяся получением результата). Легко подметить, что вообще сформулиров. А. дает результат при применении его к любой комбинации из четного числа палочек, и результатом в этом случае является комбинация, состоящая из половинного числа палочек; А. не дает результата в применении к любой комбинации, состоящей из нечетного числа палочек. Пример 2. В логике и математике всякий конечный набор знаков наз. "алфавитом", входящие в него знаки – "буквами" алфавита, а конечная (в т.ч. пустая) последовательность написанных друг за другом букв к.-л. алфавита наз. "словом" в этом алфавите. Напр., арабские цифры образуют алфавит, а всякая десятичная запись целого числа является словом в этом алфавите. Рассмотрим алфавит (а, в) из двух букв: а и в. Примерами слов в этом алфавите являются: в, ав, вва ааававв и т.д. Условимся называть "допустимым" переход от слова в этом алфавите к др. слову в этом же алфавите согласно одному из след. двух правил: 1) если слово имеет вид аР, где P – произвольное слово, перейти к слову Рв; 2) если слово имеет вид ва?, где? – произвольное слово, перейти к слову Рава. Далее формулируется след, предписание: "исходя из к.-л. слова (взятого в качестве начальных данных), делай допустимые переходы до тех пор, пока не получится слово вида аа?; когда слово такого вида получится, отбрось первые две буквы, а то, что останется, и есть результат". Поскольку каждый раз выполнимо не более одного правила перехода, то сформулиров. предписание образует А., возможными начальными данными к-рого служат слова в алфавите (а, в). Возьмем в качестве начальных данных слово ваваа. Согласно правилу 2 получим вааава. Снова применяя правило 2, получим ааваава. В силу нашего предписания надо остановиться; результатом (применения А. к слову ваваа) является ваава. Возьмем в качестве начальных данных слово ваава. По правилу 2 получим аваава. По правилу 1 получим ваавав. Далее получим последовательно ававава, вававав, вававава и т.д. Можно доказать, что процесс никогда не закончится (т.е. никогда не возникает слово, начинающееся с двух букв а, и для каждого из получающихся слов можно будет совершить допустимый переход). Т.о., А. не дает результата при применении к слову ваава. Возьмем в качестве начальных данных слово ваав. Последовательно получим ваавв, аввава, ввавав. Далее ни одно из правил 1 и 2 не выполнимо, и в то же время результат не получился. Поэтому в применении к слову аваав А. также не дает результатов. Основные черты А. По утверждению А. А. Маркова, для А. характерны следующие осн. черты: а) о п р е д е л е н н о с т ь алгоритмич. предписания, заключающаяся в его не оставляющей места произволу точности и общепонятности (в силу этой определенности предписания алгоритмич. процесс является д е т е р м и н и р о в а н н ы м: каждая стадия процесса однозначно определяет следующую стадию); б) м а с с о в о с т ь, заключающаяся в возможности для каждого А. исходить из варьируемых в известных пределах начальных данных; в) результативность, заключающаяся в направленности его на получение искомого результата. Детерминированность А. обеспечивает возможность сообщения его одним лицом другому лицу с тем, что это другое лицо сможет выполнять А. без участия первого; это же свойство детерминированности делает возможным передачу выполнения А. машине. Массовость А. предполагает, что существует нек-рая совокупность (для каждого А. своя) возможных начальных данных. Как задается эта совокупность – это уже другой вопрос. Можно считать, что соответствующая какому-либо А. совокупность возможных начальных данных не задается отдельно от А., а указывается естеств. образом самим содержанием этого А. (так, для А. сложения столбиком соответствующая совокупность состоит из всех пар записей чисел в десятичной системе). Когда какой-то конкретный объект выбирается в качестве начальных данных А., то говорят о п р и м е н е н и и А. к этому объекту. Если А. дает результат при применении его к нек-рому объекту, то говорят, что он п р и м е н и м к этому объекту. Результативность А. вовсе не означает, что А. обязан быть применим к любому объекту из соответствующей совокупности возможных начальных данных (см. примеры1 и 2). Здесь уместно отметить, что можно построить такой А., для к-рого не существует никакого А., к-рый распознавал бы по произвольным начальным данным первого А., применим к ним первый А. или нет. Основные абстракции теории А. В науч. практике сложился ряд специфич. для математики и логики абстракций. Таковы прежде всего абстракция актуальной бесконечности, абстракция отождествления, абстракция потенциальной осуществимости. Сов. ученый А. А. Марков показал, что две последние необходимы при рассмотрении А. Алгоритмич. процесс расчленяется на отд. шаги, каждый из к-рых предполагается настолько элементарным, что возможность его фактич. осуществления не вызывает сомнений. Вместе с тем число этих элементарных шагов, требующееся для получения результата, может быть настолько велико, что достижение результата может считаться практически неосуществимым. Однако представление о практич. осуществимости или неосуществимости того или иного числа шагов является относительным. Оно меняется с развитием вычислит. средств (в принципе может меняться и представление об элементарности отд. шага). В теории А. поэтому отвлекаются от "практич. осуществимости" и считают осуществимым любое конечное число шагов. Тем самым при изучении А. допускают абстракцию потенциальной осуществимости, состоящую в отвлечении от реальных границ наших возможностей. Развитие быстродействующих электронных вычислит. машин быстро отодвигает эти границы все дальше и дальше. То, что было лишь потенциально осуществимым вчера, становится практически осуществимым сегодня. Это сближает теорию А. с практикой работы на вычислит. машинах и позволяет этим двум дисциплинам взаимно обогащать друг друга. Передача машине решения задач к.-л. серии невозможна без предварит. составления А. решения. Составление такого А. имеет, как правило, принципиальное значение (так, в проблеме машинного перевода основным является именно составление А. перевода). Абстракция потенциальной осуществимости необходима при рассмотрении не только алгоритмич. процессов, но и самих объектов, участвующих в этих процессах (в т.ч. "начальных данных" и "результатов"). Так, чтобы говорить о любом натуральном числе (точнее, о записи этого числа, скажем, в десятичной системе), надо разрешить себе рассматривать записи столь больших чисел, что эти записи не уместились бы на земном шаре; т.о., и здесь, отвлекаясь от физич. осуществимости такой записи, используют абстракцию потенциальной осуществимости. Вообще к абстракции потенциальной осуществимости необходимо прибегнуть для того, чтобы рассуждать о сколь угодно длинных словах в заданном алфавите. Объекты, построение и рассмотрение к-рых возможно в рамках абстракции потенциальной осуществимости (при противопоставлении ее абстракции актуальной бесконечности), наз. конструктивными объектами. Таковы натуральные числа, представленные своими записями в к.-л. системе их обозначений, слова в заданном алфавите и т.д., а также пары, тройки и вообще конечные последовательности, составленные из записей чисел, слов в алфавите и т.п.; рациональные числа (к-рые можно представить как тройки натуральных) и др. Конструктивными объектами являются и выражения т.н. исчислений, или формальных систем, что позволяет применить к последним аппарат теории А. Всякий А. (понимаемый как предписание) может (после записи этого предписания в виде комбинации каких-то символов) рассматриваться как конструктивный объект. Напротив, объекты, рассмотрение к-рых невозможно без привлечения абстракции актуальной бесконечности, не относятся к числу конструктивных объектов. Так, напр., конструктивными объектами не являются действительные числа (в смысле Кантора, Дедекинда или Вейерштрасса), геометрич. точки (поскольку анализ такой абстракции, как "точка", приводит к представлению о точке как об актуально бесконечной системе малых тел) и т.д. Конструктивные объекты группируются естеств. образом в совокупности, примерами к-рых служат совокупность всех слов в данном алфавите и вообще любая совокупность всех объектов к.-л. "типа" из числа перечисл. выше типов конструктивных объектов. Каждая такая совокупность конструктивных объектов задается способом конструирования принадлежащих к ней объектов. Другой осн. абстракцией, используемой при рассмотрении конструктивных объектов и А., является абстракция отождествления. В нек-рых случаях о двух объектах говорят как об одинаковых. Условия "одинаковости" устанавливаются каждый раз применительно к данной ситуации. Так, напр., при производстве вычислений человеком на бумаге обычно бывает безразличным шрифт, к-рым пишутся цифры, и записи 1647 и 1647 рассматриваются как одинаковые; однако можно представить себе ситуации, когда существенно различие прямого и курсивного шрифтов (как, напр., при восприятии слов, встречающихся в данной Философской Энциклопедии). Тогда две записи будут уже рассматриваться как неодинаковые, но записи 1647 и 1647 все равно – в обычных случаях – как одинаковые (хотя физически это разные объекты). Обычно принимают, что конструктивные объекты состоят из нек-рых достаточно простых "элементарных частей" (подобно тому, как слова – из букв) и два конструктивных объекта считаются одинаковыми, если они состоят из одинаковых элементарных частей, расположенных в одинаковом порядке. Без понятия "одинаковости", на основе к-рого считаются, напр., одинаковыми цифры, написанные мелом на доске, и цифры, написанные чернилами в тетради, невозможно обучение. Абстракция отождествления позволяет говорить об одинаковых объектах как об одном и том же объекте. Она приводит к образованию понятия "абстрактного объекта": именно, два одинаковых конкретных объекта считаются представителями одного и того же абстрактного объекта. Каждый А. примененный к одинаковым объектам, приводит также к одинаковым объектам. Поэтому можно считать, что каждый А., задает процесс преобразования абстрактных конструктивных объектов. Это свойство А. (вместе с детерминированностью) обусловливает их повторимость или воспроизводимость: будучи выработан в форме А. над абстрактными конструктивными объектами, А. может быть повторно воспроизведен для любых конкретных конструктивных объектов, допустимых для данного А. Из сказанного должно стать ясным, что начальные данные равно как окончат. результаты, возникающие при осуществлении к.-л. А., суть всегда конструктивные объекты (всякое "состояние" алгоритмич. процесса есть конструктивный объект!). Невозможность даже потенциально осуществимых процессов над неконструктивными объектами связана и с отсутствием способа опознавания их как одинаковых или неодинаковых (ср. известное положение кибернетики о преимуществах дискретных форм хранения информации перед непрерывными). Существуют различные т. зр. относительно методов, допустимых при изучении А. Одна из них, выдвигаемая представителями конструктивного направления в математике и логике, состоит в том, что, поскольку для образования понятия А. достаточно абстракций отождествления и потенциальной осуществимости, то развитие теории А. должно вестись в рамках этих абстракций. Другая т. зр. допускает при изучении А. любые методы, вообще допускаемые к логике и математике, в т.ч. и требующие абстракции актуальной бесконечности. Так, можно себе представить случай, когда для доказательства того, что нек-рый А., будучи применен к нек-рому объекту, даст результат, потребуется использование тесно связанного с абстракцией актуальной бесконечности закона исключенного третьего. Основные понятия теории А. К числу осн. понятий, возникающих на основе понятия А., относятся понятия вычислимой функции, разрешимого множества и перечислимого множества. Функция наз. вычислимой, коль скоро существует А., вычисляющий эту функцию в след. смысле: а) А. применим к любому объекту, входящему в область определения функции, и дает в качестве результата то значение функции, к-рое она принимает для этого объекта, взятого в качестве ее аргумента; б) А. не применим ни к какому объекту, не входящему в область определения функции. Множество, расположенное в нек-рой совокупности конструктивных объектов (т.е. множество, составленное из каких-то объектов этой совокупности), наз. разрешимым (относительно объемлющей совокупности), коль скоро существует А., разрешающий это множество (относительно указ. совокупности) в след. смысле: А. применим к любому объекту из объемлющей совокупности и дает в качестве результата ответ на вопрос, принадлежит ли этот объект рассматриваемому множеству или нет. Наконец, непустое множество (см. Пустое) наз. перечислимым, коль скоро существует А., перечисляющий это множество в след. смысле: а) результат применения А. к любому натуральному числу существует и принадлежит рассматриваемому множеству; б) каждый элемент рассматриваемого множества может быть получен как результат применения А. к нек-рому натуральному числу. По определению, пустое множество также относят обычно к классу перечислимых. Одна и та же вычислимая функция (соответственно, разрешимое множество, перечислимое множество) может вычисляться (соответственно, разрешаться, перечисляться) посредством различных А. Из определений вытекает, что аргументы и значения вычислимой функции, элементы разрешимого или перечислимого множества суть всегда конструктивные объекты. Заменяя конструктивные объекты (нек-рой фиксиров. совокупности) их номерами в произвольной алгоритмич. нумерации (т.е. такой нумерации, для к-рой существует А. получения по объекту его номера и обратно), можно, как это часто делают в теории А., ограничиться рассмотрением лишь таких вычислимых функций, аргументы и значения к-рых суть натуральные числа, и лишь таких разрешимых и перечислимых множеств, элементы к-рых суть также натуральные числа. Можно доказать, что всякое разрешимое множество перечислимо. В то же время удалось построить перечислимое, но не разрешимое множество. Этот первый конкретный пример (опубликован амер. ученым А. Черчем в 1936 в статье "Одна неразрешимая проблема элементарной теории чисел") отсутствия А. (а именно, А., разрешающего построенное множество) явился источником или образцом почти всех дальнейших примеров такого рода. Оказалось, что множество разрешимо тогда, и только тогда, когда перечислимо и оно, и его дополнение (до объемлющей совокупности объектов). Т.о., существуют такие дополнения к перечислимым множествам, к-рые сами неперечислимы. Связь теории А. с логикой. Понятия разрешимого и перечислимого множеств тесно связаны о классификацией определений (мы ограничиваемся здесь лишь такими определениями, каждое из к-рых определяет объекты нек-рого типа или, что то же самое, нек-рый класс объектов). Как известно, существуют две осн. схемы определений: "через род и видовое отличие" и "по индукции". При определении "через род и видовое отличие" задается нек-рая объемлющая совокупность объектов ("род") и указывается признак ("видовое отличие"), выделяющий среди объектов указ, совокупности класс определяемых объектов. Если; считать, что это определение конструктивно, т.е. что объекты конструктивны и что наличие или отсутствие видового отличия у элемента рода алгоритмически распознаваемо, то определяемое множество оказывается разрешимым (и каждое разрешимое множество можно определить таким образом). Тем самым разрешимые множества отождествляются с множествами, конструктивно определяемыми через род и видовое отличие. Определение "по индукции" состоит из двух частей: базисной части, содержащей нек-рый перечень объектов, к-рые объявляются принадлежащими к определяемому классу, и индуктивной части, гласящей, что если объекты такого-то и такого-то вида принадлежат к определяемому классу, то и объекты такого-то и такого-то вида, связанные с первыми объектами нек-рым отношением, также принадлежат к определяемому классу. (Возможны и более сложные случаи т.н. перекрестных определений, когда одновременно определяется друг через друга несколько классов объектов). Если предполагать определение конструктивным, т.е. объекты конструктивными, перечень исходных объектов, содержащийся в базисной части, конечным, а содержащиеся в индуктивной части правила перехода от уже определенных объектов к новым алгоритмическими (в том смысле, что наличие или отсутствие отношения, о к-ром идет речь в индуктивной части, распознается посредством какого-то А.), то мы приходим к понятию множества, конструктивно определяемого по индукции, или (синоним) эффективно порождаемого множества (поскольку такое определение задает эффективный порождающий п р о ц е с с, на отд. этапах развертывания к-рого "возникают" или "порождаются" определяемые объекты). Примером конструктивного определения по индукции служит определение допустимых шахматных позиций (т.е. позиций, к-рые могут возникнуть на доске в процессе игры). Базисная часть содержит одну единств. исходную позицию. Индуктивная часть содержит правила ходов фигур. Множество допустимых позиций, т.о., эффективно порождаемо. Другим примером эффективно порождаемого множества служит множество всех доказуемых формул к.-л. формальной системы или исчисления: базисная часть определения доказуемых формул содержит аксиомы, индуктивная часть – правила вывода (аксиомы объявляются доказуемыми по определению и далее говорится, что если какие бы то ни было формулы доказуемы, то и формулы, полученные из них по правилам вывода, также доказуемы). Порождающим процессом является здесь процесс доказательства всех доказуемых формул. Наконец, процесс опровержения всех опровержимых формул исчисления также является примером эффективного порождающего процесса. Понятие эффективного порождающего процесса очень тесно связано с понятием А. Мы дали определение (приблизительное) эффективного порождающего процесса, опирающееся на понятие А. В свою очередь, понятие порождающего процесса позволяет определить на его основе если не само понятие А., то, во всяком случае, понятие вычислимой функции. Действительно, пусть нек-рый порождающий процесс способен "порождать" объекты, имеющие вид пар (х, у), и пусть у любых двух "порожденных" пар с совпадающими первыми членами совпадают и вторые члены. Тогда процесс след. образом определяет функцию y = f(x): функция определена для объекта х0 тогда, и только тогда, когда х0 есть первый член к.-л. порожденной пары: значение функций для аргумента х0 равно в таком случае второму члену этой пары. Функция, определенная в указ. смысле эффективным порождающим процессом, очевидно, вычислима [чтобы найти f(x0), надо развертывать процесс до тех пор, пока не найдем пары с х0 в качестве первого члена]. Обратно, всякую вычислимую функцию можно определить посредством эффективного порождающего процесса. Алгоритмич. процессы и порождающие процессы близки друг другу с логич. точки зрения. В основании каждого из них лежат лишь конструктивные понятия. Различие между ними состоит в том, что алгоритмич. процесс развертывается на основе требования, а порождающий – на основе разрешения действовать определенным образом. Здесь проявляется различие между необходимым и возможным (в алгоритмич. процессе каждый этап однозначно, т.е. с необходимостью, определяется предыдущим этапом, в то время как при развертывании порождающего процесса после каждого этапа возникает лишь множество возможностей для след. этапа). При надлежащих уточнениях понятия эффективного порождающего процесса выясняется, что каждое эффективно порождаемое множество перечислимо, и обратно. Это обстоятельство, в сочетании с приведенными выше взаимоотношениями между перечислимым и разрешимым множествами, позволяет заключить следующее. Всякий класс объектов, допускающий конструктивное определение через род и видовое отличие, допускает и конструктивное определение по индукции, но не обратно: существует класс объектов, конструктивно определяемый по индукции, но не допускающий конструктивного определения через род и видовое отличие; дополнение к этому классу объектов (по объемлющей совокупности конструктивных объектов) не допускает эффективного индуктивного определения. Каждый конструктивный порождающий процесс можно представить в виде процесса получения доказуемых формул подходящего исчисления. Поэтому пример класса, обладающего только что описанными свойствами, можно построить в виде класса всех доказуемых формул нек-рого исчисления. Более того, оказалось, что это обстоятельство имеет место для любого достаточно содержат. исчисления (напр., для исчисления предикатов или для исчислений, формализующих арифметику), т.к., если исчисление достаточно содержательно, то в нем можно выразить любой эффективный порождающий процесс. Класс всех доказуемых формул такого исчисления (являясь, конечно, перечислимым) не является разрешимым, так что не существует А., распознающего доказуемость формул исчисления; в этом смысле говорят, что исчисление неразрешимо. Поскольку класс всех доказуемых формул исчисления не является разрешимым, то дополнит. к нему класс всех недоказуемых формул не является перечислимым и, следовательно, не может быть получен никаким порождающим процессом; в частности, невозможно построить такое исчисление, в к-ром "опровергались" бы все недоказуемые формулы первонач. исчисления и только они; тем более, все эти недоказуемые формулы не могут быть опровергнуты средствами самого первонач. исчисления, так что в первонач. исчислении имеются т.н. неразрешимые (т.е. ни доказуемые, ни опровержимые) формулы. В этих рассуждениях можно ограничиться лишь такими формулами, к-рые при содержат. интерпретации исчисления выражают осмысленные (т.е. либо истинные, либо ложные) суждения, и обнаружить, следовательно, и среди таких формул неразрешимые. Отсюда вытекает, что можно предъявить формулу, выражающую истинное суждение, но не доказуемую в исчислении; в этом смысле говорят, что система неполна. Подчеркнем, что в силу общего характера проводимых рассуждений свойство неполноты присуще любому достаточно содержат. исчислению. Понятие неразрешимости исчисления опирается на понятие А., и неудивительно что факт неразрешимости устанавливается на основе исследований в области теории А. Весьма существенным (и, может быть, неожиданным на первый взгляд) является то обстоятельство, что такой общелогич. факт, как неполнота исчислений (факт, выражающий принципиальную невозможность полностью формализовать процесс логич. вывода и впервые строго доказанный австр. ученым К. Геделем еще в 1931, до уточнения понятия "А."), может быть получен, как мы только что видели, средствами теории А. Это обстоятельство уже одно показывает огромные возможности применений теории А. к вопросам логики. Эти применения не ограничиваются приведенным примером. Еще в 1932 сов. ученый А. Н. Колмогоров предложил истолкование созданной интуиционистами конструктивной логики при помощи содержат. средств, не имеющих никакого отношения к установкам интуиционизма; именно, каждое предложение конструктивной логики Колмогоров предложил истолковывать как проблему. Понятие проблемы требовало, однако, конкретизации, к-рая могла быть дана только на базе уже разработанной теории А. Два конкретных класса проблем, пригодных для интерпретации конструктивной логики, предложили, соответственно, амер. ученый С. К. Клини в 1945 и сов. ученый Ю. Т. Медведев в 1955. В 1956 сов. ученый Н. А. Шанин выдвинул новую концепцию, согласно к-рой не всякое высказывание конструктивной логики требует истолкования в виде проблемы. К этому кругу идей примыкают вопросы "конструктивизации", или "нахождения конструктивных аналогов", классич. математич. понятий и предложений; решение этих вопросов также возможно лишь на основе теории А. Конструктивизация осн. понятий математич. анализа привела к разрабатываемому сейчас т.н. конструктивному математич. анализу. Намечаются пути конструктивизации и др. математич. теорий. Одним из осн. приемов, используемых при конструктивизации, является переход от изучаемых предметов к их именам, к-рые всегда являются конструктивными объектами. П р о б л е м ы р а з р е ш е н и я. Частным случаем массовых проблем являются разрешения проблемы. Проблемы разрешения к.-л. множества есть проблема построения А., разрешающего это множество. Соответств. серия единичных проблем состоит здесь из проблем ответа на вопрос о принадлежности к множеству, поставленный для каждого объекта из объемлющей совокупности конструктивных объектов. Обратно, всякая массовая проблема, соответств. серии единичных проблем ответа на вопрос, может быть рассмотрена как проблема разрешения нек-рого множества, а именно – множества тех единичных проблем, ответом на к-рые служит "да". Отсюда ясна важная роль проблем разрешения. Именно они подвергались изучению с т. зр. их разрешимости. Среди проблем разрешения выделяются проблемы, поставленные для классов доказуемых формул исчислений. Проблема разрешения класса всех доказуемых формул к.-л. исчисления наз. также проблемой разрешения самого исчисления. (В рус. текстах проблему разрешения наз. обычно "проблемой разрешимости"; однако "проблемой разрешимости" лучше называть проблему: "ответить, имеет ли решение данная проблема разрешения"). Неразрешимые массовые проблемы. Проблема разрешения для к.-л. исчисления всегда есть проблема разрешения перечислимого множества. Вообще все естественно возникавшие в математике проблемы разрешения оказывались проблемами разрешения перечислимых множеств. Таков упоминавшийся выше первый пример неразрешимой проблемы разрешения (и одновременно первый пример неразрешимой массовой проблемы вообще), опубликованный Черчем в 1936. Такова т.н. проблема тождества для ассоциативных систем, доказательства неразрешимости к-рой опубликовали в 1947 независимо друг от друга А. А. Марков и амер. ученый Э. Л. Пост; этот результат представляет интерес как первый пример доказательства неразрешимости массовой проблемы, возникшей (еще в 1914) вне логики и теории А. Такова и знаменитая проблема тождества для групп, поставленная еще в 1912, неразрешимость к-рой доказана в 1952 сов. ученым П. С. Новиковым (Ленинская премия, 1957). Каждая из проблем тождества состоит в отыскании А., устанавливающего эквивалентность или неэквивалентность двух слов в заданном алфавите (от того или иного определения эквивалентности зависит, имеем ли мы дело с ассоциативной системой или группой). Поэтому проблему тождества можно рассматривать как проблему разрешения множества всех пар эквивалентных друг другу слов (относительно совокупности всевозможных пар слов). При этом, поскольку можно задать порождающий процесс получения всех пар эквивалентных друг другу слов, множество всех таких пар перечислимо. С в о д и м о с т ь. Начиная с примера Черча 1936 и по 1944 все доказательства неразрешимости массовых проблем проводились или могли быть проведены след. единообразным методом. Заведомо неразрешимая проблема, исследованная Черчем, сводилась к рассматриваемой массовой проблеме, так что если бы рассматриваемая массовая проблема была разрешимой, то оказалась бы разрешимой и проблема Черча (в этом смысле можно сказать, что доказательство неразрешимости рассматриваемой проблемы сводилось к доказательству неразрешимости проблемы Черча). Возник вопрос, для всякой ли неразрешимой проблемы разрешения ее неразрешимость может быть установлена таким способом. Этот вопрос, получивший название проблемы сводимости, был поставлен Постом в 1944; одновременно Пост привел несколько примеров неразрешимых проблем разрешения, неразрешимость к-рых была установлена им методом, отличным от описанного выше (эти примеры не решали еще проблему сводимости, поскольку оставался открытым вопрос, нельзя ли и для них найти такие доказательства неразрешимости, к-рые сводились бы к доказательству неразрешимости проблемы Черча; впоследствии для нек-рых из указанных примеров такие доказательства были действительно найдены). Проблема сводимости стояла в центре исследований по теории А. вплоть до 1956, когда она была решена независимо сов. ученым А. А. Мучником и амер. ученым Р. М. Фридбергом. Выл построен пример неразрешимой проблемы разрешения (для перечислимого множества), неразрешимость к-рой нельзя доказать сведением к этой проблеме проблемы Черча. Мучник показал даже больше, а именно, что не только проблема Черча, но и никакая другая проблема не может служить "стандартной неразрешимой проблемой" в том смысле, что доказательство неразрешимости любой неразрешимой проблемы разрешения для перечислимого множества могл

Понятность - алгоритм должен состоять из команд, "понятных" исполнителю (входящих в систему команд исполнителя).

Дискpетность (прерывность, раздельность) - алгоpитм должен пpедставлять пpоцесс pешения задачи как последовательное выполнение пpостых (или pанее опpеделенных) шагов.

Опpеделенность - т.е. каждое пpавило алгоpитма должно быть четким, однозначным и не оставлять места для пpоизвола. Благодаpя этому свойству выполнение алгоpитма носит формальный хаpактеp и не тpебует никаких дополнительных указаний или сведений о pешаемой задаче.

Pезультативность (или конечность)- алгоpитм должен пpиводить к pешению задачи (или к ответу, что решения нет) за конечное число шагов.

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

Главная особенность любого алгоритма - формальное исполнение, позволяющее выполнять заданные действия (команды) не только человеку, но и техническим устройствам (исполнителям). Таким образом, исполнителями алгоритмов могут быть, например, человек, компьютер, принтер, робот-манипулятор, станок с числовым программным управлением, живая клетка, дрессированное животное, компьютерная программа, компьютерный вирус, "черепашка" в Логорайтере или Логомирах (геометрический исполнитель) и т.д.

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

Эти действия называются допустимыми действиями исполнителя. Только их и можно использовать.

Исполнитель вычислительных алгоритмов называется вычислителем. Вычислитель может иметь дело с числами и переменными, обозначающими числа. Таким образом, алгоритм - это организованная последовательность действий, допустимых для некоторого исполнителя. Один и тот же исполнитель может быть сымитирован на ЭВМ многими способами.

Сложность алгоритма

Сложность алгоритма позволяет оценить, насколько быстро растет трудоёмкость алгоритма с увеличением объема входных данных. Под трудоемкостью понимается количество элементарных операций, которые необходимо выполнить для решения задачи с помощью данного алгоритма. Обычно оценка сложности алгоритма представляется в виде O(f(N)), где O – функция сложности, а N – число обрабатываемых наблюдений или примеров. Наименее затратными являются алгоритмы, для которых функция сложности имеет вид f(N)=C и f(N)=C*N, где С – константа. В первом случае вычислительные затраты не зависят от количества обрабатываемых данных, а во втором случае – линейно возрастают. Самыми затратными являются алгоритмы, сложность которых имеет степенную и факториальную зависимости от числа обрабатываемых наблюдений.



СОРТИРОВКА

Сортировка представляет собой процесс упорядочения множества подобных информационных объектов в порядке возрастания или убывания их значений. Например, список i из n элементов будет отсортирован в порядке возрастания значений элементов, если i <= i <= ... <= i.

Имеется два вида алгоритмов сортировки: сортировка массивов, которые могут находиться как в операционной памяти, так и на диске в виде файла прямого доступа, и сортировка последовательных файлов, находящихся на дисках или магнитных лентах.

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

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

МЕТОДЫ ПОИСКА

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

– система правил, сформулированная на понятном исполнителю языке, которая определяет процесс перехода от допустимых исходных данных к некоторому результату и обладает свойствами массовости, конечности, определенности, детерминированности.

Слово «алгоритм» происходит от имени великого среднеазиатского ученого 8–9 вв. Аль-Хорезми (Хорезм – историческая область на территории современного Узбекистана). Из математических работ Аль-Хорезми до нас дошли только две – алгебраическая (от названия этой книги родилось слово алгебра) и арифметическая. Вторая книга долгое время считалась потерянной, но в 1857 в библиотеке Кембриджского университета был найден ее перевод на латинский язык. В ней описаны четыре правила арифметических действий, практически те же, что используются и сейчас. Первые строки этой книги были переведены так: «Сказал Алгоритми. Воздадим должную хвалу Богу, нашему вождю и защитнику». Так имя Аль-Хорезми перешло в Алгоритми, откуда и появилось слово алгоритм. Термин алгоритм употреблялся для обозначения четырех арифметических операций, именно в таком значении он и вошел в некоторые европейские языки. Например, в авторитетном словаре английского языка Webster"s New World Dictionary , изданном в 1957, слово алгоритм снабжено пометкой «устаревшее» и объясняется как выполнение арифметических действий с помощью арабских цифр.

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

Тьюринг А. Может ли машина мыслить ? М., Мир, 1960
Успенский В. Машина Поста. Наука, 1988
Кормен Т., Лейзерсон, Ривес Р. Алгоритмы. Построение и анализ . М., МЦНМО, 1999

Найти "АЛГОРИТМ " на

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

Термин "алгоритм" происходит от имени средневекового математика Абу Джафара ибн Мусы аль-Хорезми. Редакция последней части имени ученого в европейских странах привела к образованию термина "алгорифм" или "алгоритм". Европейцы, начавшие осваивать современную десятичную систему счисления в XII в., знакомились с трудами арабских ученых, и труд упомянутого выше жителя Хорезма, посвященный правилам счета в десятичной системе счисления, был широко известен. Поэтому и наполнение термина "алгоритм" было следующим: операции над числами.

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

4.1. Определение алгоритма

Современное содержание понятия алгоритма можно определить следующим образом.

Алгоритм – точное описание, которое задает алгоритмический процесс, начинающийся с произвольного исходного данного (из некоторой совокупности возможных для данного алгоритма исходных данных) и направленный на получение полностью определенного этим исходным данным результата.

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

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

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

Любой алгоритм должен обладать следующими свойствами:

    дискретность (это означает, что, алгоритм представляет собой конечную последовательность отдельных шагов, каждый из которых определяет законченное действие);

    детерминированность (это означает, что, каждый шаг алгоритма должен быть понятен исполнителю и не должен быть истолкован неоднозначно);

    массовость (это означает, что алгоритм должен предназначаться для реализации целого класса однотипных задач, а не для одной конкретной задачи);

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

Для задания алгоритма необходимо описать следующие его элементы:

      набор объектов, составляющих совокупность возможных исходных данных, промежуточных и конечных результатов;

      правило начала;

      правило непосредственной переработки информации (описание последовательности действий);

      правило окончания;

      правило извлечения результатов.

Алгоритм всегда рассчитан на конкретного исполнителя. В нашем случае таким исполнителем является ЭВМ. Для обеспечения возможности реализации на ЭВМ алгоритм должен быть описан на языке, понятном компьютеру, то есть на языке программирования.

4.3. Основные способы описания алгоритмов

К основным способам описания алгоритмов можно отнести следующие:

    словесно-формульный (пошаговый);

    структурный или блок-схемный;

    с помощью граф-схем;

    с помощью сетей Петри.

Перед составлением программ чаще всего используются словесно-формульный и блок-схемный способы.

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

Пример описания алгоритма . Решение квадратных уравнений. Словесно-формульным способом алгоритм решения этой задачи может быть записан в следующем виде:

Шаг 1. Ввести три числа a ,b ,c .

Шаг 2. Вычислить дискриминант

Шаг 3. Проверить условие: если d <0, то идти на шаг 8, иначе идти на шаг 4.

Шаг 4. Вычислить 1-й корень

Шаг 5. Вычислить 2-й корень

Шаг 6. Вывести два числа x 1 ,x 2 .

Шаг 7. Идти на шаг 9.

Шаг 8. Вывести текст "Уравнение не имеет действительных корней".

Шаг 9. Конец.

Блок-схема – это ориентированный граф, вершины которого могут быть одного из трех типов, представленных на рис. 6.1.

Функциональная вершина используется для представления функцииf:X Y .

Предикатная вершина используется для представления функции (или предиката)p :X →(T ,F ), то есть логического выражения, передающего управление по одной из двух возможных ветвей.

Композиция (следование)

Выбор (ветвление)

Итерация (цикл)

Объединяющая вершина представляет передачу управления от одной из двух входящих ветвей к одной выходящей ветви.

Структурная блок-схема – это блок-схема, которая может быть выражена как композиция из четырех элементарных блок-схем (рис. 4.1).

Любая программа для машины может быть представлена структурной блок-схемой.

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

Структурное программирование – процесс разработки алгоритмов с помощью структурных блок-схем.

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

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

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

    принцип модульности;

    принцип нисходящей разработки программы;

    сквозной структурный контроль;

    принцип простой структуры программы.

Эти принципы, предложенные американскими специалистами в конце ХХ века, остаются актуальными и в наше время, особенно при разработке больших и сложных программных комплексов.