- •31. Биологический подход к решению задач искусственного интеллекта. Генетические алгоритмы и их использование. Нейронные сети и их использование.
- •1. Модель Персептрона.
- •2. Сигмоидальный нейрон.
- •3. Модель Видроу.
- •4. Wta (победитель получает все).
- •5. Нейроны Хебба.
- •6. Стохастическая модель.
- •32.Экспертные системы: структура, назначение, классификация. Методы построения экспертных систем. Понятие о инженерии знаний.
- •Методы построения эс и классификация эс по методам построения
- •33.Математические модели в физике, химии, биологии и экономике
- •2. Модель колебательной системы
- •1) Проверка равномерности распределения генератора случайных чисел.
- •2) Вычисление интеграла.
- •3) Методы случайного поиска
- •36.Основы теории погрешности. Прямая и обратная задача теории погрешности. Оценка погрешности. Понятие погрешности.
- •37.Численные методы решения нелинейных уравнений с одним неизвестным.
- •Оценка погрешности для полинома Лагранжа
- •Разделенные разности
- •40.Численное интегрирование и дифференцирование. Формулы численного дифференцирования. Метод Ньютона-Котеса.
- •Численное интегрирование
- •41.Основные виды задач оптимизации и методы их решения. Линейное программирование. Основные этапы решения задачи симплекс-методом.
- •В задаче линейного программирования (лп) целевая функция может быть представлена как сумма произведений переменных на некие константы:
- •Требования к стандартному виду задачи лп:
- •2.Приведение задачи линейного программирования к стандартной форме
- •2. Алгоритм симплекс-метода
- •42.Основные понятия теории игр. Чистые и смешанные стратегии игры. Седловая точка игры и её поиск.
- •43.Транспортная задача: постановка задачи, поиск опорного плана, оптимизация решения.
- •2.Табличный метод решения транспортной задачи
- •44 Понятие графа, методы описания графа, виды графов. Эйлеровы и гамильтоновы графы.
- •45. Комбинаторные объекты дискретной математики. Алгоритмические задачи комбинаторики. Задача коммивояжера.
- •Разбиения
- •Числа Стирлинга второго рода
- •Числа Белла
- •Разбиение чисел
- •Биноминальные коэффициенты
- •Рекуррентные соотношения.
- •Задача коммивояжера. Общее описание
- •Методы решения зк Жадный алгоритм
- •Деревянный алгоритм.
- •46. Алгоритмические задачи поиска в графах: задачи Прима-Краскала, Дейкстры, Форда-Фалкерсона.
- •47 Рекурсивные функции
- •48. Виртуальные машины Тьюринга. Нормальные алгорифмы Маркова.
- •49. Формальные языки и грамматики.
- •Классификация языков
47 Рекурсивные функции
Для ученых, которых интересуют лишь факты существования или несуществования алгоритмов, а не сами алгоритмы, вовсе не обязательно изучать именно алгоритмы. Достаточно найти такие объекты, которые существуют или не существуют в точности тогда же, когда и алгоритмы. Считают, что такими объектами являются рекурсивные функции. Покажем, как могут функции быть связанными с алгоритмами.
Как известно, величину 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).
Оператор построения по первому нулю
Этот оператор называют обычно оператором наименьшего числа, а в некоторых книгах — оператором минимизации; Этот оператор по заданной функции, зависящей от n+1 аргументов, строит новую функцию от n аргументов. Исчезающий аргумент является вспомогательным и используется при выполнении оператора. Обозначают оператор построения по первому нулю буквой μ, его применение обозначают строкой вида f::= μ[f1;(x)], где x — исчезающий аргумент. С помощью оператора построения по первому нулю получают функцию f, значения которой определяются при выполнении сопутствующего ей алгоритма, который гласит: «Придавать вспомогательному аргументу последовательные значения, начиная с 0, до тех пор, пока не окажется, что функция f стала (в первый раз) равной нулю. Полученное значение вспомогательного аргумента принять за значение определяемой функции, соответствующее тем значениям основных аргументов, при которых осуществлялся описанный процесс».
Другими словами, пусть дана функция f(x1,x2,…,xn). Выберем одну из переменных хк и назовем её у. Получим f(x1,x2,…,xk-1,y,xk+1…,xn)=f(x,y).
Пусть задано уравнение f(x,y)= 0. Найдем корень этого уравнения относительно у при фиксированном значении х. Возможны три ситуации:
1. Нет ни одного корня для натурального значения у,
2. Существует один корень при натуральному;
3. Существует более чем один корень при натуральному. По смыслу задачи нужно найти наименьший или первый корень. В первом случае это невозможно, следовательно, минимизация не определена. Для поиска минимального корня используем следующий простой алгоритм.
1. выбираем y=0;
2. проверяем равны ли нулю значения функции f при заданном у. Если равны, то у - первый корень и выходим из алгоритма. Если у≠0, то переходим к следующему пункту;
3. увеличиваем у на единицу, у=у+1;
4. возвращаемся к пункту 2).
Если функция имеет конечный корень среди натуральных чисел, то алгоритм обязательно даст результат. Если корней несколько, то обязательно будет найден самый меньший среди натуральных корней. Пользуясь данным алгоритмом поиска корня, можно построить функцию g(x1,x2,…,xk-1,xk+1…,xn). Запишем алгоритм построения функции g.
1) фиксируем значение переменных x1,x2,…,xn;
2) строим некую функцию f, к которой будет добавлена переменная хк;
3) определяем, имеет ли относительно этой переменной функция/натуральный корень. Если корней нет, то при данных значениях функция g не определена. Если корни есть, то находим минимальный корень у. Этот корень и есть искомое значение функции g, g=y.
Подобный алгоритм определяет некоторую функцию, которая при одних значениях аргумента определена, а при других значениях не определена.
Функция, полученная по приведенному выше алгоритму, обозначается
g(x1,x2,…,xk-1,xk+1…,xn)= μ[f(x1,x2,…,xk-1,xk+1…,xn);y].
Построим μ[f(x,y);y] для f(x,y) = x-y+1. Очевидно, что данная функция равна нулю при
у = х-1, следовательно g(x) = х-1, при этом функция g не определена при х=0. То есть, μ[f(x,y) = х-у+1, у]=х-1.
Заметим, что базовые функции и функции, получаемые при помощи операторов подстановки и рекурсии, но без применения оператора построения по первому нулю, определены (имеют значения) для любых значений аргументов. Иначе обстоит дело с функциями, полученными при помощи оператора построения по первому нулю. Для некоторых комбинаций значений аргументов (даже для очень многих) они могут быть не определены, потому что исходная функция не принимает нулевых значений.
Для примера в качестве f1 возьмем базовую функцию ψ2,1(x,y).
f=μ[ψ2,1(x,y),(x)]. Оператор для данной функции определен только в одной (.)x=0: ψ2,1(0,y)=0.
f=μ[ψ2,1(x,y),(y)], здесь ψ2,1(x,0)=x.
Итак, рекурсивными называются базовые функции и любые функции, получаемые из них с помощью конечного числа операторов подстановки, рекурсии и построения по первому нулю. При этом функции, получаемые без использования оператора построения по первому нулю, называются примитивно рекурсивными. Это наиболее простые из рекурсивных функций. Примитивно рекурсивные функции, вместе с теми рекурсивными функциями, которые невозможно получить, не прибегая к оператору построения по первому нулю, но которые определены для любых значений аргументов, называют общерекурсивными. Рекурсивные функции, которые определены не для всех возможных значений аргументов, называют частично рекурсивными. Построенная нами выше функция р(х) является частично рекурсивной.
Сформулируем правило минимизации.
Если функция получена с помощью минимизации рекурсивной функции, то она частично рекурсивна, если функция получена с помощью оператора минимизации из частично рекурсивной функции, то она так же частично рекурсивна.
Можно доказать, что функция, полученная из частично рекурсивных функций с помощью операций суперпозиции и примитивной рекурсии является частично рекурсивной.
Изучая рекурсивные и частично рекурсивные функции, можно сформулировать ещё один тезис.
Тезис Черча: Любая всюду определенная вычислимая числовая функция является общерекурсивной. И, наоборот, если всюду определенная числовая функция не является общерекурсивной, то она невычислима.
Перенося тезис Черча на алгоритмы, сопутствующие рекурсивным функциям, мы можем высказать для них следующую гипотезу.
Основной тезис.
Каков бы ни был алгоритм, перерабатывающий наборы целых неотрицательных чисел в целые неотрицательные числа, существует алгоритм, сопутствующий рекурсивной функции, который ему эквивалентен.
Тезис Клини: Любая вычислимая, но не всюду определенная числовая функция является частично рекурсивной. Если частично определенная числовая функция не является частично рекурсивной, то она невычислима.
Интересную форму этой гипотезе, вернее интересное ее обобщение, сделали советские ученые А. Н. Колмогоров и В. А. Успенский. Предположим, что нам задан некоторый алгоритм в интуитивном смысле. На практике всегда удается найти способ нумерации его допустимых исходных данных, а также другой способ нумерации даваемых им результатов. Соответствие номеров исходных данных номерам результатов, устанавливаемое нашим алгоритмом (в интуитивном смысле), всегда совпадает с соответствием между значениями аргумента и значениями некоторой рекурсивной функции от одного независимого переменного. Это значит, что выполнение алгоритма в определенном смысле эквивалентно вычислению значения рекурсивной функции. Это значит, кроме того, что невозможность рекурсивной функции означает и невозможность алгоритма (так как для каждого алгоритма должна быть рекурсивная функция, а ее-то в данном случае и нет).
Заметим, что тезис Черча и следующие из него остальные гипотезы не имеют доказательства и принципиально не могут быть доказаны, так как в них речь идет об алгоритмах в интуитивном смысле, не являющихся математическими объектами.