
- •1.2.2Замечание о кодировке входных и выходных значений алгоритмов
- •§ 1.3Вычислимые функции и разрешимые множества
- •1.3.1Вычислимые функции
- •1.3.2Разрешимые множества
- •§ 1.4Вопросы для самопроверки и задачи к §1.1 и 1.2
- •1.4.1Вопросы для самопроверки
- •1.4.2Задачи к §1.1 и 1.2
- •§ 1.5Исчисления алгоритмов
- •1.5.1Необходимость исчислений
- •1.5.2Методы построения исчислений алгоритмов
- •§ 1.6Марковские подстановки (нормальные алгоритмы)
- •1.6.1Алфавит и правила кодирования
- •1.6.2Элементарные шаги нормального алгоритма – подстановки
- •1.6.3Порядок выполнения подстановок и правила извлечения результатов
- •1.6.4Примеры нормальных алгоритмов
- •§ 1.7Машины Тьюринга (мт)
- •1.7.1Предварительное описание мт
- •1.7.2Описание исчисления мт
- •1.7.3Примеры вычисления функций с помощью мт
- •1.7.4Операции над машинами Тьюринга
- •1.7.4.1Метод первый. Суперпозиция двух мт
- •1.7.4.2Метод второй. Итерация мт
- •1.7.5Операторный язык для синтеза машин Тьюринга
- •§ 1.8Рекурсивное построение вычислимых функций
- •1.8.1Базисные функции и операторы
- •Монина Мария Дмитриевна, преподаватель двггу Классические идеи решения нестандартных задач Тема 1. Элементы теории делимости целых чисел
- •Тема 2. Доказательство от противного
- •Тема 3. Чётность
- •Тема 4. Обратный ход
- •Тема 5. Графы
- •Тема 6. Инварианты
- •Тема 7. Метод крайнего
- •Тема 8. Принцип Дирихле
- •Тема 9. Раскраски
- •Тема 10. Игры
- •Шмарин Сергей Владимирович, преподаватель пггпу олимпиадные планиметрические задачи
- •1. Вписанные углы
- •2. Замечательные точки треугольника
- •3. Вписанные и описанные четырехугольники
- •3.1 Критерии вписанного четырехугольника
- •3.1 Критерии описанного четырехугольника
- •4 Классические теоремы о коллинеарности трех точек
- •Упражнения
- •Разные задачи
Содержание
Содержание 3
§ 1.1 Мендель Виктор Васильевич, доцент ДВГГУ 5
АЛГОРИТМЫ ГЛАЗАМИ МАТЕМАТИКА 5
§ 1.2 Понятие «алгоритм». Свойства алгоритмов 5
§ 1.3 Вычислимые функции и разрешимые множества 6
§ 1.4 Вопросы для самопроверки и задачи к §1.1 и 1.2 9
§ 1.5 Исчисления алгоритмов 11
§ 1.6 Марковские подстановки (нормальные алгоритмы) 12
§ 1.7 Машины Тьюринга (МТ) 15
§ 1.8 Рекурсивное построение вычислимых функций 22
Монина Мария Дмитриевна, преподаватель ДВГГУ 25
Классические идеи решения нестандартных задач 25
Тема 1. Элементы теории делимости целых чисел 25
Тема 2. Доказательство от противного 28
Тема 3. Чётность 28
Тема 4. Обратный ход 28
Тема 5. Графы 29
Тема 6. Инварианты 30
Тема 7. Метод крайнего 30
Тема 8. Принцип Дирихле 31
Тема 9. Раскраски 32
Тема 10. Игры 32
Шмарин Сергей Владимирович, преподаватель ПГГПУ 34
ОЛИМПИАДНЫЕ ПЛАНИМЕТРИЧЕСКИЕ ЗАДАЧИ 34
1. ВПИСАННЫЕ УГЛЫ 34
2. ЗАМЕЧАТЕЛЬНЫЕ ТОЧКИ ТРЕУГОЛЬНИКА 38
3. ВПИСАННЫЕ И ОПИСАННЫЕ ЧЕТЫРЕХУГОЛЬНИКИ 40
Задачи 44
4 Классические теоремы о коллинеарности трех точек 45
Упражнения 49
РАЗНЫЕ ЗАДАЧИ 50
§ 1.1Мендель Виктор Васильевич, доцент ДВГГУ
АЛГОРИТМЫ ГЛАЗАМИ МАТЕМАТИКА
§ 1.2Понятие «алгоритм». Свойства алгоритмов
1.2.1 Уточнение понятия «алгоритм»
Термин «алгоритм» широко используется в научной и бытовой речи. В самом общем случае под алгоритмом понимают некоторую хорошо прописанную последовательность действий (шагов), направленных на решение некоторой, часто возникающей задачи, выполнение которых должно привести (за конечное число операций) к желаемому результату.
Заметим, что слово «выполнение» предполагает, что исполнитель алгоритма в состоянии правильно выполнить каждый его шаг.
Очевидно, что в такой, очень общей интерпретации, изучать алгоритмы и их свойства практически невозможно. Поэтому необходимо уточнить определение этого понятия, его свойства, и объекты, к которым применяются алгоритмы.
Итак, алгоритм – это четкая система инструкций. Такая формулировка предполагает, что каждый шаг алгоритма четко прописан, и, кроме того, указываются точные правила перехода от одного шага к другому, которые вытекают из тех (входных) условий, при которых начал выполняться алгоритм и от выполненных ранее шагов. Это условие называется детерминированностью.
Далее, алгоритм применяется для часто возникающих задач, то есть, речь идет об массовых однотипных (отличающихся только входными или начальными условиями) задачах. Такое свойство алгоритма называется массовость.
Алгоритм должен за конечное число шагов на допустимых начальных условиях приводить к правильному результату. Такое свойство алгоритма называется результативностью или конечностью.
Из предыдущего также вытекает, что сам алгоритм (его запись) должен состоять из конечного числа команд, так как бесконечное число команд за конечное время выполнить нельзя.
Теперь рассмотрим свойства алгоритмов, связанные с исполнителями. Как было отмечено в начале параграфа, исполнитель должен уметь правильно выполнять все шаги алгоритма. Также важно, что при выполнении одного и того же алгоритма при одинаковых начальных условиях, разные исполнители получали один и тот же результат. Такое свойство называется независимостью (от исполнителя).
Сделаем еще одно важное замечание по поводу исполнителей: как бы ни велико было желание заполучить в качестве исполнителя очень опытного и умного человека, но правильнее всего предполагать, что исполнитель – это некоторая машина (автомат), которая умеет выполнять очень небольшой набор самых простых операций. Например: записать или стереть букву, перейти к следующей букве слова, сравнить две буквы и т.п. Требовать от исполнителя сравнить два больших числа, определить, делится одно число на другое или нет, проверить, сварилась ли в супе картошка - неправильно и нелепо.
Теперь мы можем сформулировать более точное определение понятия «алгоритм».
Определение 1.1.1.
Алгоритм решения массовой задачи это конечная последовательность команд, доступных для исполнителя. Каждый шаг при выполнении алгоритма однозначно определяется предыдущими шагами и начальными условиями задачи. Правильное решение (результат) получается за конечное число шагов. Алгоритмический процесс заканчивается только с правильным результатом. Если для некоторых начальных условий задача не имеет решения, то алгоритм работает вечно.
Замечание. Последние два предложения в определении означают, что необходимо корректно формулировать условия задачи и правила получения результата. Приведем пример. Рассмотрим две очень похожих задачи:
Задача 1. Вычислить натуральное число, являющееся квадратным корнем данного натурального числа.
Задача 2. Проверить, является ли квадратный корень из данного натурального числа натуральным числом. Если да, то вычислить этот корень, если нет, напечатать букву «Н».
Алгоритм решения первой задачи должен останавливаться только тогда, когда входное значение является квадратом некоторого натурального числа. Во всех остальных случаях он работает вечно. Алгоритм решения второй задачи должен останавливаться всегда.
1.2.2Замечание о кодировке входных и выходных значений алгоритмов
Мы в дальнейшем будем рассматривать в основном алгоритмы, действующие на множестве натуральных чисел N. В связи с этим возникает проблема записи (кодировки) таких чисел, так как такая кодировка должна быть понятна исполнителю алгоритма. Кроме того, от вида кодировки зачастую существенно зависит вид самого алгоритма решения задачи. Как правило, будут использоваться три кодировки:
десятичная запись числа;
двоичная запись числа;
унарное представление: натуральное число n представляется в виде слова, состоящего из n+1 палочки
.
Кроме этого могут использоваться различные служебные значки (маркеры), символизирующие различные операции или разделяющие пары чисел (если алгоритм предполагает наличие нескольких входных или выходных значений). Подробно на алфавитах и кодировках мы остановимся, когда будем рассматривать исчисления алгоритмов.
§ 1.3Вычислимые функции и разрешимые множества
1.3.1Вычислимые функции
В этом параграфе мы уточним объекты, к которым применяются алгоритмы. Теория алгоритмов изучает в основном вычислительные алгоритмы (в широком смысле этого слова). Действительно, проверку различных условий можно свести к вычислению значений некоторой логической функции, выполнение каких либо действий роботом-автоматом предваряется вычислением параметров этих действий и передачей соответствующих команд периферийным устройствам и т.д.
Заметим, что аргументами вычислительных алгоритмов должны быть конечные числа, результат вычислений также должен быть конечным числом. Действительно, если рассматривать числа, являющиеся бесконечными дробями, то за конечное число шагов нельзя считать данное число, кроме того, результат, являющийся бесконечной дробью, нельзя вывести за конечное время. Это означает, что алгоритмы не применимы, например, к иррациональным числам, стандартная десятичная запись которых является бесконечной дробью.
Читатели имеют опыт арифметических операций над конечными десятичными дробями, а так же над положительными и отрицательными числами. Этот опыт позволяет сделать вывод о том, что сначала выполняется действие над натуральными числами, а затем, по определенным правилам, этот результат превращается в десятичную дробь или число со знаком. Причем наиболее трудоемка первая часть действий.
В принципе, любые входные значения для алгоритма могут быть заданы (описаны) конечным набором слов конечной длины, а результат выведен в таком же словесном формате. Такие входные слова и выходные значения можно интерпретировать как числа, записанные в некоторой системе счисления. Тогда процесс работы алгоритма можно интерпретировать как вычислительный. Таким образом, любой алгоритм, оперирующий с символьными объектами (числами, словами, предложениями и т.п.) можно рассматривать как вычислительный.
Все сказанное выше позволяет сузить область применения алгоритмов на множество натуральных чисел. Мы выделим две группы наиболее важных объектов: вычислимые функции и разрешимые множества.
Будем рассматривать
функцию
,
принимающую значения из множества
натуральных чисел, аргументы которой
xi
определены на подмножествах Mi
множества натуральных чисел N.
Обозначим
,
.
Определение 1.2.2
Функция
,
называется вычислимой, если существует
алгоритм, вычисляющий данную функцию
для всех значений из области M.
Если M совпадает
с Nn,
то она называется тотальной,
в противном случае – частичной.
Рассмотрим примеры вычислимых функций.
Пример 1.2.1
Функция
следования
.
Это, очевидно, тотальная вычислимая функция. Алгоритм ее вычисления в унарной кодировке очень прост: нужно дописать в конце этого числа еще одну палочку.
Пример
1.2.2
Аннулятор
.
Также тотальная вычислимая функция. Для ее вычисления нужно стереть входное значение и написать число «Ноль» (в соответствующей кодировке).
Пример
1.2.3
Функция
– проектор
(зависит от n
натуральных чисел, на выходе дает
значение, равное i-тому
входному аргументу).
Тотальность и вычислимость данной функции также очевидна. Суть алгоритма сводится к тому, что нужно стереть n - 1 записанное число, оставив только i –тое по счету.
Пример
1.2.4
Функция
.
Это вычислимая частичная функция. Коротко опишем алгоритм ее вычисления.
Шаг 1. Вводится число x.
Шаг 2. Числу i присваивается значение 0.
Шаг 3. Вычисляется число y = i2.
Шаг 4. Проверяется условие «y = x». Если условие истинно, то выполняется переход к Шагу 5, иначе числу i присваивается значение i+1 и выполняется переход к Шагу 3.
Шаг 5. Записывается ответ: «корень квадратный из x равен i».
Заметим, что данный алгоритм останавливается только в том случае, когда для данного входного значения существует квадратный корень, являющийся натуральным числом. В остальных случаях алгоритм работает вечно.
Рассмотрим пример частичной функции от двух переменных.
Пример
1.2.5
Функция
Вот схема алгоритма, вычисляющего эту функцию:
Шаг 1. Вводятся числа x и y.
Шаг 2. Числу q присваивается значение 1.
Шаг 3. Вычисляется число z = y q.
Шаг 4. Проверяется условие «z = x». Если условие истинно, то выполняется переход к Шагу 5, иначе числу q присваивается значение q+1 и выполняется переход к Шагу 3.
Шаг 5. Записывается ответ: «x : y равно q».