
- •Содержание курса “Теория алгоритмов и вычислительных процессов”
- •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.2. Частично-рекурсивные функции
Большинство известных арифметических функций принадлежат классу примитивно рекурсивных функций. Но не все вычислимые функции являются примитивно рекурсивными. При построении этих функций могут использоваться другие операции. Более общий класс вычислимых функций строится с помощью операции минимизации (или наименьшего корня).
Операция наименьшего корня дает возможность определить функцию от n аргументов с помощью функции от n+1 аргумента. Она используется в частности для описания функций, которые не имеют значения при некоторых наборах значений аргументов. Пусть задана вычислимая функция g(x1, x2,...,xn,y).
Возьмем некоторый фиксированный набор значений
x1=1 , x2=2 , ... , xn=n : =(1,2,...,n).
Для заданного набора операцией наименьшего корня определяется наименьшее натуральное число y=, для которого g(1,2,...,n,) = 0,
эту операцию обозначим как:
= y[g(1,2,...,n,y)
= 0],
где y – символ операции наименьшего корня, y – выделенная переменная, а выражение g(1,2,...,n,y) = 0 предикат, который имеет значение “истина” при y=.
Очевидно, что значение есть функция от 1,2,...,n. То есть функция f(x1,x2,...,xn-1,xn) является вычислимой с помощью операции наименьшего корня y, примененного к данной функции g(1,2,...,n,y), что записывается как
f(x1, x2,...,xn-1,xn) = y[g(x1,x2,...,xn,y)=0] (6.2)
Итак, для некоторого набора
=(1,2,...,n)N f(1,2,...,n) = 0, если g(1,2,...,n,0) = 0;
f(1,2,...,n) = определена и не равняются 0, если:
g(1,2,...,n,0) 0 , ... , g(1,2,...,n,-1) 0, a g(1,2,...,n,) = 0.
Иначе говоря, величина f(x1, x2,...,xn-1,xn) равняется наименьшему значению последнего аргумента функции g, при котором g(1,2,...,n,) = 0, а для всех предшествующих значений этого аргумента g определена и не равняется нулю.
Понятно, что функция f существует и однозначно определяется заданной функцией g. В этом случае говорят, что функция f(x1, x2,...,xn-1,xn) получена из g(x1,x2,...,xn,y) с помощью операции минимизации. Поэтому, если g(x1,x2,...,xn,y) – вычислимая, то вычислимой будет и функция f(x1, x2,...,xn-1,xn) .
Описанный процесс нахождения значений выражения y[g(x1,x2,...,xn,y)=0]
будет продолжаться бесконечно долго в таких случаях:
а) значение g(x1,x2,...,xn,0) не определено;
б) значения g(x1,x2,...,xn,у) для у=0,1,2,...,-1 определены, но отличные от 0, а значение g(1,2,...,n,) не определено;
в) значения g(x1,x2,...,xn,у) определены для уN, но все они отличные от 0.
Во всех указанных случаях значение выражения (6.2) считается неопределенным. Во всех других случаях процесс нахождения значений (6.2) есть конечным, и дает наименьший корень уравнения g(x1,x2,...,xn,y) = 0, который и будет значением функции
f(x1, x2,...,xn-1,xn) = y[g(x1,x2,...,xn,y) = 0].
Определение 6.2.1. Частичная функция f называется частично-рекурсивною, относительно системы частичных функций Z, если она может быть получена из функций системы Z и наипростейших функций O, S, Imn с помощью применения конечного числа операций подстановки, примитивной рекурсии и минимизации. Если при этом функции указанной последовательности везде определены, то f называется общерекурсивной функцией.
Указанные операции могут быть выполнены в любой последовательности и любое конечное число раз.
С этого определения и замечаний относительно сохранения операторами свойств вычислимости функций вытекает, что каждая частично-рекурсивная функция вычислимая.
Рассмотрим применение операции минимизации для образования новых функций. Работу -оператора можно описать следующим образом. Выделяется переменная (здесь – у). Затем фиксируется значение остальных переменных (x1,...,xn). Значение y последовательно увеличивается, начиная с нуля. Значением -оператора будет значение y, при котором функция впервые обратилась в ноль. Значение -оператора считается неопределенным, если функция вообще не принимает значения ноль, либо она принимает отрицательное значение до того как примет значение ноль.
Пример 6.2.1. Рассмотрим функцию g(x1,x2,y) = x1+x2-y; x1,x2,y N .
Определим функцию f(x1,x2), которую получим при помощи операции .
f(x1,x2) = y[g(x1,x2,y)=0] = y[х1+х2-у =0]
при некоторых фиксированных значениях аргументов x1,x2 имеем:
х1 = х2 = 0. Тогда g(0,0,y) = 0+0-у = 0 при у = 0, т.е. f(0,0) = 0.
х1 = 2, х2 = 1. Тогда g(2,1,y) = 2+1-у = 0 при у = 3.
х1 = 3, х2 = 3. Тогда g(3,3,y) = 3+3-у = 0 при у = 6.
Итак, очевидно, что f(x1,x2) = х1+х2 всюду определена, так как наименьшее значение, при котором для заданных х1 и х2 функция g равняется нулю, есть сумма х1+х2 . Для всех значений y, меньших х1+х2, функция gопределена и не равняется нулю.