Мегаобучалка Главная | О нас | Обратная связь


Метод индуктивной функции



2015-12-07 1218 Обсуждений (0)
Метод индуктивной функции 0.00 из 5.00 0 оценок




Введём обозначения:

А- некоторый алфавит, т. е. какое-то конечное или бесконечное множество, например множество букв русского языка или множество действительных чисел;

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 , если

 

алфавит
"wÎW/ f(w)= y "x ÎA f(w*x)=y

 

Пример Существует ли в последовательности элемент, удовлетворяющий указанному условию.

 

Пусть 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-12-07 1218 Обсуждений (0)
Метод индуктивной функции 0.00 из 5.00 0 оценок









Обсуждение в статье: Метод индуктивной функции

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1218)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)