Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лк8.Формальное определение алгоритма.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
44.32 Кб
Скачать

Лк 8. Машины Тьюринга Основы информатики

Оглавление

Алгоритм 1

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

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

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

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

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

D. Алгоритм сортировки (несортированной) картотеки 3

E. Алгоритм вычисления значения дроби (a + b)/(a — Ь) 4

F. Алгоритм вычисления числа е (т. е. вычисления последовательности дробей — приближения для е) 4

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

Рекурсия и итерация 5

Специальные формы описания алгоритмов 5

алгоритмы Маркова 6

Алгоритм

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

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

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

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

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

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

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

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

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

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

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

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. Напишите программы, реализующие оба алгоритма.