Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЛиТА. Лаб.практикум.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
6.24 Mб
Скачать

10.1.1. Характерные черты алгоритма и основные требования к алгоритмическим процедурам

Алгоритм имеет общие типичные черты и особенности.

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

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

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

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

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

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

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

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

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

Такое свойство алгоритма говорит о том, что выполнение алгоритмов можно передать машине.

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

Среди допустимых начальных данных для алгоритма могут быть такие, к которым он применим, то есть, отправляясь от которых, можно получить нужный результат, а могут быть и такие, к которым данный алгоритм неприменим, то есть для них искомого результата получить нельзя. Неприменимость алгоритма к допустимым начальным данным может состоять в том, что алгоритмический процесс никогда не оканчивается (в этом случае он бесконечен - «зацикливается»), либо в том, что его выполнение во время одного из шагов наталкивается на препятствие и заходит в тупик. В этом случае он безрезультатно обрывается. Рассмотрим оба случая на примерах.

Пример 10.1

Наиболее простой пример бесконечного алгоритмического процесса можно привести из процедуры деления десятичных дробей. Так, числа 11,5 и 5 являются в этом случае допустимыми начальными данными, применение к которым алгоритма деления приводит к искомому результату – 2,3.

Но все будет по-другому для чисел 40 и 6, которые также являются допустимыми начальными данными. Для них алгоритм деления будет выглядеть следующим образом:

40 6

¯ 36 6,66…

40

¯ 36

40

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

Пример 10.2

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

  1. Исходное число умножить на 2. Перейти к выполнению п.2.

  2. К полученному числу прибавить 1. Перейти к выполнению п.3.

  3. Определить остаток от деления полученной в п.2 суммы на 3. Перейти к выполнению п. 4.

  4. Разделить исходное число на остаток. Частное является искомым результатом. Конец.

Пусть натуральные целые положительные числа будут допустимыми исходными (начальными) данными для этого алгоритма. Для числа 6 алгоритмический процесс будет проходить так:

1-й шаг: 6 · 2 = 12; переходим к п. 2;

2-й шаг: 12 + 1 = 13; переходим к п. 3.

3-й шаг: остаток (13 : 3) = 1, переходим к п. 4.

4-й шаг: 6 : 1 = 6. Конец.

Искомый результат равен 6.

Иначе будет протекать алгоритмический процесс для исходного данного 7:

1-й шаг: 7 · 2 = 14; переходим к п. 2;

2-й шаг: 14 + 1 = 15; переходим к п. 3.

3-й шаг: остаток (15 : 3) = 0, переходим к п. 4.

4-й шаг: 7 : 0 - деление невозможно. Процесс зашел в тупик, натолкнулся на препятствие и безрезультатно оборвался. Конец.

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

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

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

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

Пример 10.3

В качестве примера, дающего логический алгоритм, рассмотрим следующую игру.

Имеется 15 предметов. В игре участвуют двое: начинающий и противник. Каждый игрок по очереди берет один, два или три предмета. Выигрывает тот, кто берет последний предмет. Какой стратегии в игре должен придерживаться начинающий, чтобы выиграть?

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

Таблица 10.1

Таблица выигрышной стратегии начинающего игрока

Номер

хода

Ход

начинающего

Ход

противника

1

3

2

4 -

3

4 -

4

4 -

0

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