Слово алгоритм происходит от. Понятие алгоритма

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

Алгоритм - это точное предписание, которое определяет процесс, ведущий от исходных данных к требуемому конечному результату. Алгоритмами, например, являются правила сложения, умножения, решения алгебраических уравнений, умножения матриц и т.п. Слово алгоритм происходит отalgoritmi , являющегося латинской транслитерацией арабского имени хорезмийского математика IX века аль-Хорезми . Благодаря латинскому переводу трактатааль-Хорезми европейцы в XII веке познакомились с позиционной системой счисления, и в средневековой Европе алгоритмом называлась десятичная позиционная система счисления и правила счета в ней.

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

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

    результативностью;

    определенностью;

    массовостью.

Результативность означает возможность получения результата после выполнения конечного количества операций.

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

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

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

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

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

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

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

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

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

Таким образом, можно дать следующее определение программы.

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

Способы описания алгоритмов

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

    словесно-формульный;

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

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

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

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

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

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

у = 2а – (х+6).

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

1. Ввести значения а их.

2. Сложить х и 6.

3. Умножить a на 2.

4. Вычесть из сумму (х+6).

5. Вывести у как результат вычисления выражения.

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

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

Оформление программ должно соответствовать определенным требованиям. В настоящее время действует единая система программной документации (ЕСПД), которая устанавливает правила разработки, оформления программ и программной документации. В ЕСПД определены и правила оформления блок-схем алгоритмов (ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД).

Операции обработки данных и носители информации изображаются на схеме соответствующими блоками. Большая часть блоков по построению условно вписана в прямоугольник со сторонамиа и b. Минимальное значениеа = 10 мм , увеличениеа производится на число, кратное5 мм . Размерb=1,5a . Для от дельных блоков допускается соотношение междуа и b, равное 1:2. В пределах одной схемы рекомендуется изображать блоки одинаковых размеров. Все блоки нумеруются. Виды и назначение основных блоков приведены в табл. 1.

Таблица 1. Условные обозначения блоков схем алгоритмов

Наименование

Обозначение

Функции

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

Ввод-вывод

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

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

Термин "алгоритм" происходит от имени средневекового математика Абу Джафара ибн Мусы аль-Хорезми. Редакция последней части имени ученого в европейских странах привела к образованию термина "алгорифм" или "алгоритм". Европейцы, начавшие осваивать современную десятичную систему счисления в 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).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

а л г о р и ф м) – одно из основных понятий логики и математики. Под А. понимают точное предписание, задающее вычислит. процесс, ведущий от начальных данных, к-рые могут варьировать, к искомому результату. Встречающиеся выше слова "вычисления", "вычислительный" не следует понимать в узком смысле цифровых вычислений. Так, уже в школьном курсе алгебры говорят о буквенных вычислениях, и хотя здесь буквы играют еще роль заместителей чисел, уже в арифметич. вычислениях появляются символы, не обозначающие никаких величин: скобки, знак равенства, знаки арифметич. действий. Можно пойти дальше и рассматривать вычисления с произвольными символами и их комбинациями; именно в таком широком смысле и понимают термин "вычисления" при описании понятия "А.". Так, можно говорить об А. перевода с одного языка на другой, об А. работы поездного диспетчера (перерабатывающего информацию о движении поездов в приказы) и др. примерах алгоритмич. описания процессов управления, изучаемых кибернетикой. З н а ч е н и е А. Само слово "А." восходит к 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, когда она была решена независимо сов. ученым А. А. Мучником и амер. ученым Р. М. Фридбергом. Выл построен пример неразрешимой проблемы разрешения (для перечислимого множества), неразрешимость к-рой нельзя доказать сведением к этой проблеме проблемы Черча. Мучник показал даже больше, а именно, что не только проблема Черча, но и никакая другая проблема не может служить "стандартной неразрешимой проблемой" в том смысле, что доказательство неразрешимости любой неразрешимой проблемы разрешения для перечислимого множества могл

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

Ну, а теперь главный вопрос: Что такое алгоритм?

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

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

  1. Конечность(результативность) алгоритма означает, что за конечное число шагов должен быть получен результат;
  2. Дискретность алгоритма означает, что алгоритм должен быть разбит на последовательность выполняемых шагов;
  3. Понятность алгоритма означает, что алгоритм должен содержать только те команды, которые входят в набор команд, который может выполнить конкретный исполнитель;
  4. Точность алгоритма означает, что каждая команда должна пониматься однозначно;
  5. Массовость алгоритма означает, что однажды составленный алгоритм должен подходить для решения подобных задач с разными исходными данными.
  6. Детерминированность (определенность) . Алгоритм обладает свойством детерминированности, если для одних и тех же наборов исходных данных он будет выдавать один и тот же результат, т.е. результат однозначно определяется исходными данными.

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

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


Я хочу порезать апельсин. Как это сделать?

Виды алгоритмов

    • Линейный(Команды последовательны без повторов и переходов);

Пример алгоритма:

Начало
достань нож
порежь апельсин(Именно апельсин, а не любой другой фрукт. За это отвечает ТОЧНОСТЬ)
съешь апельсин
конец

    • Циклический(Есть группа действий, повторяющихся по некоторому условию);

Пример алгоритма:

Начало
достань нож
ПОКА апельсины не закончились
порежь апельсин
съешь все апельсины
конец

    • Разветвляющийся(Выполнение команды зависит от условия).

Пример алгоритма:

Начало
достань нож
ЕСЛИ нож тупой поточи
порежь апельсин
съешь апельсин
конец

Вот и все. На следующем уроке мы с вами рассмотрим структуру программы в Паскаль.