Читайте также: |
|
Для ученых, которых интересуют лишь факты существования или несуществования алгоритмов, а не сами алгоритмы, вовсе не обязательно изучать именно алгоритмы. Достаточно найти такие объекты, которые существуют или не существуют в точности тогда же, когда и алгоритмы. Считают, что такими объектами являются рекурсивные функции. Покажем, как могут функции быть связанными с алгоритмами.
Как известно, величину w называют функцией, а величины x1,x2,…,xn —
Аргументами, или независимыми переменными, если известен закон, который для различных наборов конкретных значений величин x1,x2,…,xn задает определенные значения величины w. При этом для каждого набора допускается одно-единственное значение функции. В частном случае функция может иметь одно независимое переменное (аргумент). Что за закон применяется для определения функции? Математика не накладывает никаких ограничений на него. Она допускает любой мыслимый закон. Но таким законом может быть некоторый алгоритм. В этом случае функцию называют вычислимой, так как имеется способ получения ее значений. Рекурсивными функциями называют один частный класс вычислимых функций. Алгоритмы, являющиеся законами их задания, мы будем называть алгоритмами, сопутствующими рекурсивным функциям.
По Черчу числовая функция называется рекурсивной, если она относится к одному из двух классов:
1. Базовым рекурсивным функциям (алгоритм получения таких функций считается очевидным)
2.Функции, полученные из базовых рекурсивных функций и других рекурсивных функций с помощью операторов суперпозиции, примитивной рекурсии и минимизации.
Замечание. В первой редакции данного определения оператор минимизации отсутствует.
Кроме того, что рекурсивные функции принято делить на общерекурсивные (полученные с помощью оператора суперпозиции и примитивной рекурсии) и частично рекурсивные (полученные с помощью оператора минимизации)
Совокупность рекурсивных функций мы построим следующим образом. Непосредственно опишем наиболее простые из них и назовем базовыми. Сопутствующие этим функциям алгоритмы будут наиболее простыми, одношаговыми. Затем опишем три приема, называемых в теории рекурсивных функций операторами, с помощью которых, исходя из рекурсивных функций можно получить новые функции; их, по определению, тоже будем считать рекурсивными. Эти операторы, по существу, будут алгоритмами; соединяя их, можно получать новые алгоритмы.
Базовые функции Базовые функции бывают трех типов:
1. Функции любого числа независимых переменных, тождественно равные нулю. Для краткости будем называть их «тождественный ноль» Их будем обозначать φn, где п — число аргументов. Например, к числу таких функций относятся у= φ1(x), w=φ3(x, у, z), w=φn(x1,x2,…,xn). Сопутствующий алгоритм для этих функций гласит: «Если функциональный знак имеет вид φn, то любой совокупности значений аргументов данной функции ставится в соответствие ее значение 0».
Например, f(x)=x-x, может быть обозначение: φ(x)=x-x≡0.
Будем считать, что п может быть равно нулю, т. е. что возможна функция этого вида, не зависящая ни от одного аргумента. Эта функция равна 0. Обозначим ее φ0(), или, для краткости, φ0.
2. Функции любого числа независимых переменных, тождественно равные одному из аргументов. Обозначим их ψn,i где п — число аргументов, i — номер одного из аргументов 1< i < n). Сопутствующий этим функциям алгоритм гласит: «Если функциональный знак имеет вид ψn,i, то значением функций считать значение i -го (считая в функциональной записи слева направо) независимого переменного».
Например: ψ1,3(x,y,z)=x.
Для тождественных функций ни n, ни i не может быть равно нулю.
3. Функции следования (иначе — получения последователя) одного независимого переменного. Обозначим их с помощью функционального знака λ(х). Сопутствующий этим функциям алгоритм гласит: «Если функциональный знак имеет вид λ(х), то значением функции считать число, непосредственно следующее за числом, являющимся значением аргумента». Операция «получения последователя», по-видимому, проще сложения. Дети сначала учатся считать, а потом уже овладевают сложением. Первобытные люди тоже сначала овладели счетом, и лишь много позже возникла идея сложения чисел. Это вполне естественно, так как в ту пору числа изображали как последовательности черточек (зарубок). Последователь получали, добавляя еще одну зарубку.
Например: λ(х)=x+1; λ(3)=3+1=4.
Заметим, что, создавая рекурсивные функции, опираясь на которые мы хотим обосновать математику, нельзя пользоваться нашими знаниями даже арифметических действий. Удобно на некоторое время вообразить, что математика нами полностью позабыта (во всяком случае, до тех пор, пока мы не построим класс рекурсивных функций).
Базовые функции имеют значения, только если даны значения их аргументов. Каждый из видов базовых функций имеет простой, понятный алгоритм построения этой функции.
Операции над числовыми функциями принять называть операторами. Операторы - это функции, аргументами и значениями которых являются функции. Таким образом, мы будем порождать новые функции, исходя из примитивных (элементарных арифметических). При этом нас будут интересовать вычислимые операторы, выполнение которых очевидно, а применение к функциям, вычислимым в каком-либо смысле, дает новые функции, вычислимые в том же смысле.
В теории рекурсивных функции особое значение имеют три следующих оператора: Оператор суперпозиции, оператор примитивной рекурсии и оператор минимизации.
Оператор суперпозиции или подстановки. Слова суперпозиция и подстановка в данном случае имеют одно и то же значение. Этот оператор по функции F от п аргументов и по функциям f1,f2,…,fn строит новую функцию Ф такую, что для нее справедливо тождество Ф≡ F(f1,f2,…,fn).
Алгоритм, сопутствующий этому оператору, гласит: «Значения функций f1,f2,…,fn принять за значения аргументов функции F и вычислить ее значение». Оператор подстановки (суперпозиции) обозначим буквой С. Построение функции Ф из функций F и fi с помощью оператора суперпозиции будем записывать так: Ф= С(F,f1,f2,…,fn).
Алгоритм построения суперпозиции (для двух функций).
1. Выбираются две функции f, g.
2. Определяется аргумент xk первой функции f, для которой будем осуществлять подстановку.
3. Подставляем значение аргумента в g и вычисляем её значение go.
4. xk=go.
5. fo=f(x1,x2,…,xn)
Например, если в качестве F принять λ(х), а в качестве f1 взять функцию λ(у), то с помощью операции суперпозиции получим функцию τ(у) = λ(λ(у)). Правило суперпозиции Суперпозиция двух рекурсивных функций является рекурсивной функцией.
Правило суперпозиции означает, что при суперпозиции функций, имеющих алгоритм вычисления, алгоритм их суперпозиции также может быть построен. Т. е. Если рекурсивные функции являются вычислимыми, то исуперпозиция их также вычислима.
Многократной суперпозицией является совокупность нескольких одновременных суперпозиций, когда один аргумент первой функции меняется второй функцией, другой - третьей и так далее.
Пример: F(x,y)=x+y и даны две функции g(x), f(x). Построим суперпозицию: Ф =C(F,g(x),f(y))=g(x)+f(y).
Оператор примитивной рекурсии. Этот оператор по двум функциям, одна из которых имеет п- 1независимых переменных, а другая, кроме указанных независимых переменных, имеет еще два (т. е. зависит от п+ 1переменных), строит функцию n независимых переменных. Один из дополнительных аргументов войдет вместе с аргументами первой функции в число аргументов вновь получаемой функции, а другой играет вспомогательную роль при выполнении оператора рекурсии. Оператор рекурсии будем обозначать Пр; его применение будем записывать в виде строки: f = Пр(φ, ψ), где f означает получаемую функцию, φ — функцию п —1 независимых переменных, ψ — функцию п+ 1независимых переменных.
При описании существа оператора рекурсии удобно не указывать аргументов первой из заданных функций ни в ее функциональной записи, ни в записях двух других функций, подразумевая эти аргументы. Тогда можно сказать, что оператор рекурсии задает функцию с помощью двух условий, в которые входят функции φ и ψ. Алгоритм, сопутствующий оператору рекурсии, гласит: «Значением получаемой функции для нулевого значения главного дополнительного аргумента считать значение исходной функции п -1 аргументов; значением определяемой функции для каждого последующего значения главного аргумента считать значение второй из заданных функций при предыдущем значении главного аргумента и при значении вспомогательного аргумента, совпадающем с предыдущим значением определяемой функции».
Оператор примитивной рекурсии строится по следующему правилу:
1. f(x1,x2,…,xn-1, 0) = φ(х1,х2,…,xn-1).
2. f(x1,x2,…,xn-1, y+1)= ψ(x1,x2,…,xn-1, y,f(x1,x2,…,xn-1, y)).
При этом, f(x1,x2,…,xn-1, y+1)=C(ψ(x1,x2,…, y,xn+1),f(x1,x2,…,xn-1, y)).
Алгоритм построения примитивной рекурсии:
1. Выбираем две функции φ и ψ, у которых количество аргументов п-1 и п+1 соответственно;
2. Определяем значение для п-1 аргумента ификсируем значение хп (п -го аргумента), это будет у;
3. Выбираем значение у=0;
4. Вычисляем f(x1,x2,…,xn-1, 0) = φ(х1,х2,…,xn-1);
5. Увеличиваем у на 1 и получаем функцию
ψ(x1,x2,…,xn-1, y,f(x1,x2,…,xn-1, y)) = f(x1,x2,…,xn-1, y+1).
Правило примитивной рекурсии Если заданы две рекурсивные функции (φот п-1аргумена иψ от п+1 аргумента, то построенная с их помощьюпримитивная рекурсия даст тоже рекурсивную функцию.
Примеры: I. Доказать рекурсивность функции f(x,y)=x+y.
1. f(x,0)=x – рекурсивна, как базовая.
2. f(x,y+1)=x+(y+1)=x+y+1=z+1 – базовая, как функция следования.
z+1=ψ(x,y,z)= ψ(x,y,f(x,y))=(x+y)+1=x+(y+1)=f(x,y+1).
II. Доказать рекурсивность функции f(x,y)=xy.
1. f(x,0)=x0=1=λ(0) – рекурсивна, как базовая.
2. f(x,y+1)=xy+1=xy ٠ x=z ٠ x – рекурсивная.
ψ(x,y,z)=x ٠ z; ψ(x,y, f(x,y))=z ٠ x= xy ٠ x= xy+1= f(x,y+1).
Дата добавления: 2015-07-11; просмотров: 102 | Нарушение авторских прав