Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
16_Алгоритмы и способы их описания.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
214.53 Кб
Скачать

Алгоритмы и способы их описания

Понятие алгоритма

Термин «алгоритм» берет начало от названия среднеазиатского города Хорезм. В этом городе в 9 в. жил математик и астроном Мухаммед, который сформировал правила четырех арифметических действий. Арабский вариант его имени Аль-Хорезми, который в Европе записывался на латыни как Algorithmi, и положил начало термину «алгоритм». Однако позднее под словом алгоритм стали понимать правила действий по нахождению наибольшего общего делителя. Эти правила были изложены еще в трудах великого древнегреческого математика Евклида (III в. до н.э.). В наше время понятие алгоритма было обобщено, и словом «алгоритм» стали обозначать описание любой последовательности действий. Понятие алгоритма является одним из фундаментальных понятий в современной математике и информатике.

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

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

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

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

Рассмотрим в качестве примера алгоритм Евклида, придуманный им для нахождения наибольшего общего делителя (НОД) двух натуральных чисел - m и п. Известно, что НОД может быть получен путем последовательного делеybz сначала большего числа на меньшее, затем меньшего числа на полученный остаток, первого остатка на второй остаток и т.д. Деление продолжается до тех пор, пока в остатке не получится нуль. Последний по счету делитель и будет представлять собою НОД. Приведем пример нахождения НОД для пары чисел - 66 и 18:

66 : 18 = 3 +(12)

18 : 12 = 1 + (6)

12 : 6 = 2

Здесь в скобках записан остаток от деления. В последнем равенстве остаток отсутствует, поэтому НОД равен делителю, то есть 6.

Алгоритм решения задачи о НОД для пары чисел т и п записывается следующим образом:

  1. Начало.

  2. Если т > п, то перейти к 3, иначе перейти к 2.

  3. Если n > m, то перейти к 4, иначе перейти к 5.

  4. От m отнять п и считать эту разность новым значением т. Перейти к 1.

  5. От п отнять m и считать эту разность новым значением п. Перейти к 1.

  6. Считать, что НОД равен m.

  7. Конец.

Обратите внимание, что пункты 3, 4 этого алгоритма исполняются лишь в случае т > п либо в случае п > m, то есть, когда от не равно п. Последний пункт 5 исполняется, лишь когда п = т (остаток равен нулю).

Исполнитель и свойства алгоритма

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

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

Пользуясь системой команд, исполнитель может выполнять алгоритм формально, не вникая в содержание поставленной задачи. От исполнителя требуется только строгое выполнение последовательности действий, предусмотренной алгоритмом. Когда алгоритм понятен конкретному исполнителю, говорят, что такой алгоритм обладает свойством определенности. Благодаря определенности многократное выполнение одного алгоритма различными исполнителями при одних и тех же исходных условиях будет приводить к одинаковым результатам. Для получения конкретного результата не допускаются произвольные действия со стороны исполнителя. Образно говоря, алгоритм - это не кулинарный рецепт, и в нем не допустимы предписания типа «Добавить две-три ложки сахара» или «Снять с огня через несколько минут». Предписания, понятные в определенных ситуациях для человека, могут поставить в тупик автомат. Нужно исключать также ситуации, когда после выполнения очередной команды исполнителю неясно, какая команда должна выполняться следующей.

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

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

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

Словесная запись алгоритмов

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

Словесный способ записи основан на том или ином естественном' языке общения (см. алгоритм Евклида). Однако словесная запись алгоритма отличается от обычных языковых конструкций более тщательным подбором слов и фраз, при котором не допускается повторений или двусмысленного толкования. Кроме того, в записи алгоритма могут использоваться математические символы и выражения.

Рассмотрим словесный способ записи еще на одном простом примере. Пусть требуется найти модуль величины X (то есть значение | X |) и присвоить это значение переменной Y. При построении алгоритма воспользуемся определением модуля: | х | =х при х≥0 и | х | =-х при х<0. Алгоритм можно записать следующим образом.

  1. Начало.

  2. Ввести числовое значение величины X.

  3. Если Х>0, то У присвоить значение X, иначе Y присвоить значение -X.

  4. Вывести значение У.

  5. Конец.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]