Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algorytm.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
865.28 Кб
Скачать

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

Рассмотрим подробнее ключевые слова в приведенных формулировках алгоритма.

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

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

Решения всех задач, заданного (определенного) класса” означает, что это предписание предназначено для решения класса задач, а не одной отдельной задачи.

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

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

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

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

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

  4. Результативность (направленность, конечность). У алгоритма есть одно или несколько выходных данных (результаты), т.е. величин, полученных за конечное число шагов, и имеющих вполне определенную связь с входными данными. У алгоритма Евклида – только одно выходное значение - НОД. В качестве одного из возможных ответов может быть и установление того факта, что задача решений не имеет (направленность).

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

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

Имеются также некоторые черты неформального понятия алгоритма, относительно которых не достигнуто окончательного соглашения. Эти черты сформулируем в виде вопросов и ответов:

  1. Следует ли фиксировать конечную границу для размера входных данных?

  2. Следует ли фиксировать конечную границу для числа элементарных шагов?

  3. Следует ли фиксировать конечную границу для размера памяти?

  4. Следует ли ограничить число шагов вычисления?

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

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

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

Пример 1.1. Проведение перпендикуляра к прямой MN в заданной точке A.

1. Отложить в обе стороны от точки A на прямой MN циркулем отрезки равной длины с концами B и C.

2. Увеличить раствор циркуля до радиуса, в полтора-два раза большего длины отрезков AB в AC.

3. Провести указанным раствором циркуля последовательно с центрами B и C дуги окружностей так, чтобы они охватили точку A и образовали две точки пересечения друг с другом D и E.

4. Взять линейку и приложить ее к точкам D и E и соединить их отрезком. При правильном построении отрезок пройдет через точку А и будет искомым перпендикуляром.

Рис. 1.1. Проведение перпендикуляра к прямой в заданной точке

Указанное правило, очевидно, рассчитано на исполнителя-человека. Применяя его, человек, разумеется, построит искомый перпендикуляр. Но, тем не менее, это правило алгоритмом не является.

Прежде всего, оно не обладает свойством детерминированности. Так, в пункте 1 требуется от исполнителя сделать выбор отрезка произвольной длины (для построения точек B и C надо провести окружность произвольного радиуса r с центром в точке A). В пункте 2 требуется сделать выбор отрезка в полтора-два раза большего длины отрезков AB и AC. В пункте 3 надо провести дуги, которые также однозначно не определяются их описанием. Человек-исполнитель, применяющий данное правило, к одним и тем же исходным данным (прямой MN и точке A) повторно, получит несовпадающие промежуточные результаты. Это противоречит требованию детерминированности алгоритма.

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

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

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

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

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