
- •Содержание курса “Теория алгоритмов и вычислительных процессов”
- •I. Теория алгоритмов
- •Основные понятия теории алгоритмов
- •1.1. Предварительные сведения
- •1.2. Основные требования к алгоритмам
- •1.3. Необходимость математического понятия алгоритма
- •2. Типы алгоритмов
- •3. Способы представления (описания) алгоритмов
- •3.1. Исполнитель алгоритма
- •3.2. Строчная словесная запись алгоритма
- •3.3. Графическая форма записи
- •3.4. Управляющие структуры
- •4. Описание задачи и выбор алгоритма
- •5. Универсальные алгоритмические модели
- •Понятие конструктивного объекта
- •Понятие об алфавитных алгоритмах
- •5.3. Формализация понятия “алгоритм”
- •5.4. Схема построения алгоритмической системы
- •6. Рекурсивные функции
- •6.1. Примитивно-рекурсивные функции
- •6.1.1. Оператор суперпозиции (подстановки)
- •6.1.2. Оператор примитивной рекурсии
- •6.2. Частично-рекурсивные функции
- •Пример 6.2.2. Рассмотрим функцию
- •6.3. Тезис Черча
- •7. Машины Тьюринга (Поста)
- •7.1. Основные понятия машин Тьюринга
- •7.2. Способы представления машины Тьюринга
- •7.2.1. Представление машины Тьюринга совокупностью команд
- •7.2.2. Представление машины Тьюринга графом
- •7.2.3. Представление машины Тьюринга таблицей соответствия
- •7.3. Примеры построения машин Тьюринга
- •Вычислимость по Тьюрингу
- •7.5. Некоторые операции над машиной Тьюринга
- •7.5.1. Композиция машин Тьюринга
- •7.5.2. Итерация машины Тьюринга
- •7.5.3. Разветвление машин Тьюринга
- •7.4. Универсальная машина Тьюринга
- •7.5. Тезис Тьюринга
- •7.6. Машина Поста
- •9. Алгоритмическая разрешимость. Алгоритмические проблемы
- •10. Сложность алгоритмов и вычислений
- •Анализ скорости выполнения алгоритмов
- •Память или время
- •Временнáя сложность алгоритма
- •Оценка с точностью до порядка
- •Определение сложности
- •Сложность рекурсивных алгоритмов
- •Средний и наихудший случай
- •Общие функции оценки сложности
- •Скорость работы алгоритма в реальных условиях
- •19.5. Труднорешаемые задачи
6. Рекурсивные функции
Рассмотрим подход для представления понятия алгоритма, который базируется на уточнении понятия вычислимой функции. Первой алгоритмической системой была система, основанная на использовании конструктивно определяемых арифметических (целочисленных) функций, получивших специальное название рекурсивных функций.
Применение рекурсивных функций в теории алгоритмов основано на идее нумерации слов в произвольном алфавите последовательными натуральными числами. Наиболее просто такую нумерацию можно осуществить, располагая слова в порядке возрастания их длин, а слова, имеющие одинаковую длину, - в произвольном порядке. После нумерации входных и выходных слов в произвольном алфавитном операторе этот оператор превращается в функцию y = f(x), в которой аргумент х и функция y принимают неотрицательные целочисленные значения. Функция f(x) может быть определена не для всех значений х, а лишь для тех, которые составляют область определения этой функции.
Дадим исторически первую формализацию понятия алгоритма – рекурсивные функции. Долгое время термин "рекурсия" употреблялся математиками, не будучи чётко определённым. Его приблизительный интуитивный смысл можно описать следующим образом. Значение искомой функции f в произвольной точке х (под точкой подразумевается набор значений аргументов) определяется, вообще говоря, через значения этой же функции в других точках h, которые в каком-то смысле предшествуют x.
Само слово "рекурсия" означает возвращение. Рекурсивные функции – это вычислимые функции. Если рассуждать упрощенно, то для рекурсивной функции должен существовать алгоритм, вычисляющий ее значение. По сути дела все вычислимые на компьютерах функции – это рекурсивные функции, но разные компьютерные архитектуры по-разному ведут вычислительные процессы. В теории рекурсивных функций, как и в общем в теории алгоритмов, принято конструктивный подход, основной чертой которого есть то, что все множество исследуемых объектов (здесь - функции) строится из конечного числа начальных объектов (базиса) с помощью простых операций, эффективность выполнения которых достаточно очевидна. Такой способ можно назвать алгебраическим, поскольку построенный с его помощью класс функций порождается путем использования наипростейших (базисных) вычислимых функций и некоторых операций. Этот класс функций получил название рекурсивных функций.
До класса рекурсивных функций почти одновременно пришли К. Гедель и А. Черчь в 1936 г. Но Черчь первым опубликовал свои результаты и выдвинул гипотезу про то, что класс вычислимых функций совпадает с классом рекурсивных функций. Эта гипотеза известна под названием тезиса Черча.
Большой вклад в определение рекурсивных функций был сделан Клини (1937) при решении проблемы формального представления функций, вычислимых алгоритмом. Рекурсивные функции Клини определяется на множестве натуральных чисел. При формальном определении рекурсивные функции впервые были найдены способы построения (конструирования) всех возможных функций, вычислимых алгоритмами. Слова «всех возможных функций» должны пониматься так: если кто-то придумал некоторую (очень сложную) функцию, вычислимую «механическим способом» некоторым процессором (например, человеком), то такая функция может быть записана в виде формальной схемы по правилам рекурсивных функций. Все механизмы конструирования функций, открытые Клини, универсальны и могут быть перенесены на функции любой природы.