Uploaded by anton.prav

1. Ponyatie algoritma. Svoystva algoritmov.

advertisement
§1. Понятие алгоритма. Свойства алгоритмов



1.1. Понятие алгоритма
1.2 Свойства алгоритма
1.3 Отличие алгоритмов от инструкций
1.1. Понятие алгоритма
Каждому из нас в повседневной жизни постоянно приходится решать задачи
различной сложности, например, как добраться до школы или спортивной секции
в условиях ограниченного времени, как успеть выполнить намеченные на день
дела. Некоторые задачи настолько сложны, что их решение требует длительных
размышлений. Другие, наоборот, мы решаем уже автоматически, так как
сталкиваемся с ними каждый день на протяжении многих лет (почистить зубы,
заправить постель, перейти улицу и т.д.). В большинстве случаев решение задачи
можно разделить на несколько простых этапов.
Пример 1. Приведем решение задачи «Переход дороги по пешеходному
переходу»:
1) встать на тротуаре лицом к пешеходному переходу;
2) посмотреть налево;
3) если слева от вас нет движущихся в вашем направлении автомобилей или
мотоциклов, перейти дорогу до середины, иначе подождать пока они проедут и
вернуться к пункту 2;
4) остановиться на середине дороги;
5) посмотреть направо;
6) если справа от вас нет движущихся в вашем направлении автомобилей или
мотоциклов, перейти оставшуюся часть дороги, иначе подождать пока они
проедут и вернуться к пункту 5.
Последовательность
шагов,
приведенная
в
примере
1,
является алгоритмом решения задачи "Переход дороги по пешеходному
переходу". Исполнитель этого алгоритма – человек. Объекты этого алгоритма –
дорога, автомобили, мотоциклы.
Термин «алгоритм» возник от европеизированного произношения имени
арабского математика IX века Аль-Хорезми (780-850 гг. н.э.).
Для решения любой задачи надо знать, что дано и что следует получить, то
есть у задачи есть исходные данные (объекты) и искомый результат. Для
получения результатов необходимо знать способ решения задачи, то есть
располагать алгоритмом.
Определение. Алгоритм – это точная конечная система предписаний,
определяющая содержание и порядок действий исполнителя над некоторыми
объектами (исходными и промежуточными данными) для получения (после
конечного числа шагов) искомого результата.
Приведенное определение не является определением в математическом
смысле слова, это – описание понятия алгоритма, раскрывающее его сущность.
Оно не является формальным, потому что в нем используются такие неуточняемые
понятия, как «система предписаний», «действия исполнителя», «объект».
Понятие алгоритма, являющееся фундаментальным понятием математики и
информатики, возникло задолго до появления вычислительных машин.
Первоначально под словом «алгоритм» понимали способ выполнения
арифметических действий над десятичными числами. В дальнейшем это понятие
стали использовать для обозначения любой последовательности действий,
приводящей к решению поставленной задачи.
Приведем пример известного алгоритма – Алгоритма Евклида нахождения
наибольшего общего делителя (НОД) делением двух положительных целых чисел.
Пример 2. Даны два положительных целых числа
не так, то поменяем значения
x и y. Пусть x < y, если это
x и y местами.
1) Разделим
y на x с остатком.
2) Если остаток от деления r равен 0, то число x является НОД. Стоп.
3) Если остаток от деления не равен нулю, то положим y = x, x = r и перейдем
на шаг 1.
Любой алгоритм существует не сам по себе, он всегда предназначен для
определенного исполнителя. Алгоритм описывается в командах исполнителя,
который этот алгоритм будет выполнять. Объекты, над которыми исполнитель
может
совершать
действия,
образуют
так
называемую среду
исполнителя. Исходные данные и результаты любого алгоритма всегда
принадлежат среде того исполнителя, для которого предназначен алгоритм.
1. 2. Свойства алгоритма
Значение слова «алгоритм» очень похоже по значению на слова «рецепт»,
«метод», «способ». Но, однако, любой алгоритм, в отличие от рецепта или
способа, обязательно обладает следующими свойствами.
1. Дискретность. Выполнение алгоритма разбивается на последовательность
законченных действий-шагов, и только выполнив одно действие, можно
приступать к выполнению следующего. Произвести каждое отдельное действие
исполнителю предписывает специальное указание в записи алгоритма,
называемое командой.
Пример 3. Необходимо выполнить арифметические вычисления
S = (x + 5)
– y · 2.
Очевидно, что это выражение удобно разбить на 3 действия:
1) Сложить аргументы в скобках x и 5
2) Умножить y на 2
3) Вычесть из результата, полученного на первом шаге, результат, полученный
на втором шаге.
Стоит заметить, что если исполнитель начнет выполнять 3-е действие раньше,
чем дождется результата выполнения второго действия, то результат нельзя
будет получить.
2. Детерминированность. Каждая
команда
алгоритма
определяет
однозначное действие исполнителя, и однозначно определяет, какая команда
должна выполняться следующей. То есть если алгоритм многократно применяется
к одному и тому же набору входных данных, то каждый раз получаются одни и те
же промежуточные результаты и тот же выходной результат.
3. Понятность. Алгоритм не должен содержать предписаний, смысл которых
может восприниматься исполнителем неоднозначно, то есть запись алгоритма
должна быть настолько четкой и полной, чтобы у исполнителя не возникло
потребности в принятии каких-либо самостоятельных решений. Стоит помнить,
что алгоритм всегда рассчитан на выполнение «неразмышляющим»
исполнителем.
Пример 4. Рассмотрим алгоритма «Погладить белье».
1) Взять гладильную доску.
2) Установить доску на полу рядом с электрической розеткой.
3)
4)
5)
6)
7)
Взять утюг.
Включить утюг в розетку рядом с гладильной доской.
Взять вещь для глажки.
Погладить вещь.
Если есть ещё вещи, перейти к шагу 5.
В этом алгоритме объектами являются гладильная доска, утюг, электрическая
розетка, вещи для глажки. Все эти команды понятны для девочки 12 лет, но для
девочки двух лет, они не являются понятными, а, значит, она не может быть
исполнителем этого алгоритма.
4. Результативность. Под этим свойством понимается содержательная
определенность результата каждого шага и алгоритма в целом. При точном
исполнении команд алгоритма процесс должен прекратиться за конечное число
шагов, и при этом должен быть получен ответ на вопрос задачи. В качестве одного
из возможных ответов может быть и установление того факта, что задача решений
не имеет. Свойство результативности содержит в себе свойство конечности –
завершение работы алгоритма за конечное число шагов.
Пример 5. Человек вытирает книги в шкафу. Есть набор понятных команд ему.
1) Взять самую левую книгу на верхней полке;
2) Вытереть книгу;
3) Поставить книгу на место;
4) Если справа есть книги, взять следующую книгу, иначе, если есть полки
ниже, перейти к шагу 1.
Неразмышляющий исполнитель будет выполнять эти команды последовательно
и никогда не остановится, так как в четвертом шаге забыли указать спуститься
на полку ниже.
5. Массовость. Алгоритм пригоден для решения любой задачи из некоторого
класса задач, то есть алгоритм правильно работает на некотором множестве
исходных данных, которое называется областью применимости алгоритма.
1.3. Алгоритмы и инструкции
Возникает вопрос, возможна ли ситуация, что способ решения задачи есть, но
алгоритмом он не является? Оказывается да, такие ситуации возможны. Не
каждый способ решения задачи является алгоритмом.
Пример 6. Опишем метод построения перпендикуляра к прямой MN,
проходящей через заданную точку А с помощью линейки и циркуля:
1) Отложить в обе стороны от точки A на прямой MN циркулем отрезки равной
длины с концами B и C.
2) Увеличить раствор циркуля до радиуса, в полтора-два раза больше длины
отрезков AB и AC.
3) Провести указанным раствором циркуля дуги окружностей с центрами в
точка B и C так, чтобы они охватили точку А и образовали две точки
пересечения друг с другом (D и
E).
4) Взять линейку, приложить её к точкам
D и E и соединить их отрезком.
При правильном построении отрезок пройдёт через точку A и будет являться
перпендикуляром к прямой.
Указанный способ рассчитан на исполнителя-человека и не является
алгоритмом, так как он не обладает свойством детерминированности.
Детерминированность подразумевает, что на каждом шаге мы будем получать на
одинаковых данных один и тот же результат, а в нашем случае исполнитель сам
может сделать выбор на первом и втором шаге, от которого будет зависеть
результат шага. На первом шаге исполнитель должен выбрать произвольный
раствор циркуля, что позволит ему при повторном выполнении инструкций
получить другой результат на этом шаге. Аналогично и на втором шаге результат
зависит от выбора исполнителем раствора циркуля.
Кроме того, есть задачи, которые человек, вообще говоря, решать умеет, не
зная четкого алгоритма их решения. Например, если перед человеком положить
фотографии лошадей и коров и попросить определить, на каких фотографиях
изображены коровы, а на каких лошади, то человек интуитивно определит, на
каких фотографиях мы видим коров, а на каких – лошадей. Причем большинство
его ответов будут правильными. Но написать формальный алгоритм решения этой
задачи не представляется возможным.
Дадим уточненное понятие алгоритма, которое опять же не является
определением в математическом смысле слова, но более формально описывает
понятие алгоритма.
Определение. Алгоритм – это конечная система правил, сформулированная на
языке исполнителя, которая определяет последовательность перехода от
допустимых исходных данных к конечному результату и которая обладает
свойствами дискретности, детерминированности, результативности, конечности и
массовости.
Download