Метод индуктивной функции
Введём обозначения: А- некоторый алфавит, т. е. какое-то конечное или бесконечное множество, например множество букв русского языка или множество действительных чисел; Wk – множество конечных последовательностей длины >= к. f : Wk ® Y. Цель : подсчитать значение функции на этой последовательности. Выделим класс функций, для которых указанная задача решается легко. Функция f называется индуктивной, если $ отображение g:Y*A®Y такое, что " w Î Wk " xÎA f(w*x)=g(f(w),x), где f(w*x) – значение функции на последовательности расширенной на элемент x, т.е. если мы знаем значение функции на последовательности w и нам надо узнать значение на расширенной последовательности w на элемент x, то достаточно знать значение функции для w и сам элемент x. Пусть k = 0 P.GoTop; {Встать в начало} f := f0;{f0 – значение функции на пустой последовательности} while not P.IsEnd do {IsEnd – означает что последовательность прочитана} begin P.Read(x);{или x:=P.Get;P.Skip} f := g(f,x); end; {f=результат} При k = 1. P.GoTop; If not P.IsEnd then Begin P.Read(x); f := f({x}); while not P.IsEnd do begin P.Read(x); f := g(f,x); end; {f=результат} end else … {обработка ошибки};
С ростом k текст программы существенно усложняется. Примером индуктивной функции может служить функция нахождения максимума из последовательности чисел. Определим нашу функцию на пустой последовательности D. Max{x} = x = max(max(D),x). T. e. " x max(D)<= x . Таким образом max(D) = - . P.GoTop; Max := - ; While not P.IsEnd do Begin P.Read(x); if x>max then max := x; end;
Или в другом виде: i := 1; max := -32768; while i<=n do begin x := a[i]; i := i+1; if x>max then max := x; end; Утверждение(критерий индуктивности). F индуктивна Û " a, b ÎW: F (a) = F (b), "xÎX выполнено F (a*x) = F (b*x) т. е. F индуктивна тогда и только тогда, когда из равенства значений F на последовательностях a и b следует равенство и на любых “одинаково удлинненных” последовательностях a*x и b*x. Очень часто мы имеем дело с функциями которые индуктивными не являются. Это означает, что информации, заключенной в F(w) и х, недостаточно для вычисления F (w*x). Можно, однако, посмотреть, какой именно информации нам не хватает, и рассмотреть более сложную функцию, включив в нее и эту информацию тоже. В этом случае можно использовать индуктивное расширение. Определение. F : Wk ® YF называется игдуктивным расширением f:Wk® Yf если 1) F – индуктивна; 2) Всегда значение функции f можно восстановить по F, т.е. $ p:YF®Yf, такое что "wÎWk f(w) = p(F(w)). Например, нахождение номера максимального элемента последовательности не является индуктивной функцией. Индуктивное расширение: 1) номер максимального элемента на w; 2) максимальный элемент на w; 3) номер последнего элемента в w. Теорема. Для любой неиндуктивной функции существует индуктивное расширение. Функция отображающая последовательность в себя, является универсальным индуктивным расширением для любой функции. Определение. Пусть F1, F2 – два индуктивных расширения для функции f. Будем говорить, что F1<=F2 если существует преобразование p:Y2®Y1 такое что "w F1(w) = p(F2(w)). Функция F^ называется минимальным индуктивным расширением функции f, если "F- индуктивное расширение f. 1. F^<=F 2. F^(Wк)=YF^ (если отображение «НА») Теорема. Для любой неиндуктивной функции существует бесконечное количество минимальных индуктивных расширений, но все они изоморфны друг другу.
Практические выводы: 1). С точки зрения информации надо программировать то минимальное индуктивное расширение время обработки которого минимально. 2). Минимальное расширение можно не использовать. Действительно, хранится лишняя информация, но если информация стоит мало памяти, а её использование существенно сокращает время основного преобразования, то есть получаем выигрыш по времени.
То есть использовать или не использовать минимальное расширение зависит от требований по времени и объему памяти в программе.
Общая схема вычисления неиндуктивной функции, с использованием индуктивного расширения. P.GoTop; F:=F0;{вычисление индуктивного расширения не пустой последовательности } while not P.IsEnd do begin P.read(x); {x:=P.Get;P.Skip} F:=g(F,x) {g-преобразование, определ. в определ. индуктивной функции} end; f:=p(F);
Определение: Значение уÎYf называется стационарным для функции f, действующей из пространства последовательности в Yf, то есть f:W®Yf , если
Пример Существует ли в последовательности элемент, удовлетворяющий указанному условию.
Пусть j:W®Yj; f<=j<=F yj=pj(yF) Тогда схему можно изменить
P.GoTop; F:=F0; While not (P.IsEnd or stat (pj(F))) do begin x:=P.Read; F:=g(F,x); end; f:=p(F);
Допустим A={( , ) + ,t}. Рассматриваем класс произвольных формул, построенных на этом алфавите. True False t+t +t (t+t)+t ( ) (t) t+t) ((t)) (t
Написать программу, осуществляющую анализ правильности формулы.
Индуктивное расширение. f0(w)-w может быть продолжено, до правильной формулы F(w)= f1(w)- разность числа открывающих и закрывающих скобок f2(w)- последний символ в w
Докажем, что эта функция является индуктивным расширением. f(w)=истина Û f1(w)=0 & f0(w) & (f2(w))=’t’ Ú f2(w)=’)’)
f0(D)=истина f1(D)= 0 ‘(’ f2(D)= два решения ‘t’
Построение g
f2(w*x)=x x=’(’Þ f1(w)+1 f1(w*x)= x=’)’Þ f1(w)-1 иначе Þ f1(w)
f0(w*x)= f0(w) & (сочетание f2(w) и х-правильное) & (f1(w*x)>=0)
Индуктивное расширение и формула не имеют стационарных точек. Стационарные точки имеют f0
Type Fch= file of char;
Function ok(var f:Fch):boolean; {F-oткрыт для чтения; ok-возвращают правильность формулы}
var x:char; f0:boolean; f1:integer; f2:char; begin seek(F,0); f0:=true; f1:=0; f2:=’(’;
while not(eof(F) or (not(f0)) do begin read(F,x); case x of f ‘(’: f1:=f1+1; ‘)’: f1:=f1-1; end; f0:=(f1>=0) and Sootv(f2,x) f2:=x; end; ok:=f0 and (f1=0) and ((f2=’t’) or (f2=’)’)); end;
function Sootv(a,b:char):boolean; begin sootV:=(((a=’(‘ )or (a=’t’)) and b=’t’) or ((a=’)’) or (a=’t’)) and (b=’t’)) or (((a=’)’) or (a=’t’)) and (b=’)’)) or (((a=’(’) or (a=’+’)) and (b=’(‘)); end;
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1218)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |