C. Алгоритм вставки карточки в (упорядоченную) картотеку




Алгоритм

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

Характеристические свойства алгоритмов

Алгоритм — это точное, т. е. сформулированное на определённом языке, конечное описание того или иного общего метода, основанного на применении исполнимых элементарных шагов обработки.

Метод является общим, если его можно применить более чем в одном случае.

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

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

Часто от алгоритма требуют, чтобы он обязательно заканчивался, т. е. содержал конечное число элементарных шагов. Такой алгоритм называется завершающимся. Далее, исполнение алгоритма может не быть однозначно определённым. В таком случае говорят о недетерминистическом алгоритме. Однако многие интересные недетерминистические алгоритмы приводят, тем не менее, к однозначно определенному результату; тогда они называются детерминированными. Конечно, детерминистические алгоритмы все детерминированы.

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

Разумеется, различные алгоритмы могут задавать одно и то же отображение, причём каждый из них может достигать результат своим собственным конструктивным путем. Недетерминированные алгоритмы определяют только соответствия („многозначные функции"), а их исполнение доставляет какой-нибудь результат (осуществляет выбор) из некоторого множества возможных результатов.

Примеры алгоритмов

Приведем несколько примеров, сформулированных неформально (на „разговорном языке").

A. Алгоритм сложения двух положительных десятичных чисел

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

Упражнение. Выполнить алгоритм для целых чисел. Формально описать его и проверить работоспособность алгоритма для нескольких примеров.

B. Алгоритм разложения натурального числа на простые множители

Задача разложения натурального числа на простые множители называется задачей факторизации. Например, 15 = 3*5, а 144 = 2*2*2*2*3*3.

Если в нашем распоряжении имеется достаточно длинная таблица простых чисел, то можно пытаться последовательно делить заданное число на 2, 3, 5, 7,... — не разделится ли без остатка,— пока, наконец, не придём к 1.

Если же таблицы простых чисел в распоряжении нет, то можно также последовательно пытаться делить заданное число на натуральные числа 2, 3, 4, 5, 6, 7,... до тех пор, пока не останется 1; при этом для каждого составного числа как делителя выполняемая попытка деления будет бесполезной. Последовательность полученных делителей даст требуемое разложение на простые множители.

Упражнения.

1. Выпишите таблицу не менее чем из 20 простых чисел: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71. Примените первый вариант алгоритма для факторизации числа 15867. Как понимать фразу «достаточно длинная таблица простых чисел»?

2. Для числа 1008 используйте второй вариант алгоритма. Надо ли проверять делимость на четные числа (кроме числа 2)? На каком натуральном числе надо остановить проверки, чтобы не делать лишних делений?

3. Напишите программы, реализующие оба алгоритма.

C. Алгоритм вставки карточки в (упорядоченную) картотеку

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

Упражнения.

1. Предложите способы для выполнения действия «раскрыть картотеку в произвольном месте».

2. Вместо упорядоченной картотеки возьмите последовательность упорядоченных чисел, например, 11, 12, 13, 17, 17, 17, 19, 23, 25, 29, 30, 31, 31. Используя описанный алгоритм, вставьте в последовательность число 22, число 1, число 100, число 17.

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: