- •Алгоритм
- •Характеристические свойства алгоритмов
- •Примеры алгоритмов
- •A. Алгоритм сложения двух положительных десятичных чисел
- •B. Алгоритм разложения натурального числа на простые множители
- •C. Алгоритм вставки карточки в (упорядоченную) картотеку
- •D. Алгоритм сортировки (несортированной) картотеки
- •F. Алгоритм вычисления числа е (т. Е. Вычисления последовательности дробей — приближения для е)
- •G. Алгоритм, распознающий, можно ли получить последовательность знаков a из последовательности знаков ь посредством вычёркивания некоторых знаков
- •Рекурсия и итерация
- •Специальные формы описания алгоритмов
- •Алгоритмы Маркова
C. Алгоритм вставки карточки в (упорядоченную) картотеку
В случае пустой картотеки (пустой ящик картотеки) вставка карточки тривиальна. В противно случае раскроем картотеку в произвольном месте и сравним открывшуюся карточку с вставляемой карточкой по рассматриваемому признаку („сортировка"). В соответствии с результатом этого сравнения будем действовать тем же самым способом, вставляя карточку соответственно в переднюю или заднюю часть картотеки. Процесс заканчивается, когда карточку нужно вставлять в пустое множество карт.
Упражнения.
Предложите способы для выполнения действия «раскрыть картотеку в произвольном месте».
Вместо упорядоченной картотеки возьмите последовательность упорядоченных чисел, например, 11, 12, 13, 17, 17, 17, 19, 23, 25, 29, 30, 31, 31. Используя описанный алгоритм, вставьте в последовательность число 22, число 1, число 100, число 17.
Как надо уточнить алгоритм, если потребуется, чтобы в случае, когда в последовательности уже есть число, равное вставляемому числу, вставляемое число оказалось первым (или наоборот последним) среди равных чисел.
D. Алгоритм сортировки (несортированной) картотеки
Сортировка пустой или одноэлементной картотеки тривиальна. В противном случае стопка карт произвольным образом разбивается на две непустые части, каждая из частей независимо сортируется, а затем обе сортированные стопки „смешиваются " (сливаются) в одну сортированную картотеку. Разумеется, для такого слияния нужно в свою очередь задать алгоритм. А именно, если одна из двух стопок пуста, то нужно взять вторую. В противном случае сравнивают первые карточки стопок по признаку сортировки. Ту из карточек, которая должна идти перед другой или одного с ней ранга, вынимают, остаток стопки сливают с другой стопкой и перед получившейся в результате слияния стопкой кладется вынутая карточка.
Этот пример демонстрирует иерархическую структуру: алгоритм сортировки основан на алгоритме слияния.
Упражнения.
Выполнить алгоритм слияния для двух непустых последовательностей уже отсортированных целых чисел. Например, для последовательности 2, 3, 5, 7, 11, 13, 17, 19 и 11, 13, 17, 19, 23, 29, 31.
Дана последовательность 18,6,12,42,94,55,44,67. Отсортируйте ее указанным методом.
E. Алгоритм вычисления значения дроби (a + b)/(a — Ь)
Сначала вычисляем (используя алгоритм сложения и вычитания ) значения выражения а + Ъ и а — b (все равно, последовательно или одновременно, поскольку ситуация здесь совместная), а потом образуем частное от деления полученных результатов (используя алгоритм деления).
Здесь обнаруживается как иерархическое строение, так и совместность.
F. Алгоритм вычисления числа е (т. Е. Вычисления последовательности дробей — приближения для е)
Основание натуральных логарифмов е иррационально, поэтому его можно определить только с помощь бесконечной последовательности рациональных чисел, все лучше приближающие е. По Ламберту (1766 г.) такую последовательность можно получить следующим образом.
Начиная
с
последовательно вычислять
и
образовать последовательность
рациональных чисел
.
Здесь речь идёт о незавершающемся алгоритме для вычисления вычислимого вещественного числа, опирающемся на алгоритм из пункта Е.
Упражнения.
Вычислите третье приближение к числу e, то есть величину
.
Обдумайте правило останова для вычисления приближения к числу e с заданной точностью.
