Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по программированию.DOC
Скачиваний:
50
Добавлен:
01.05.2014
Размер:
1.9 Mб
Скачать

Индуктивные функции

Пусть в файле fint записана последовательность целых чисел   (Z), требуется найти максимальное из них, т. е. Max(). Программа может быть написана из естественного соображения: читаем последовательность  и для каждого очередного элемента x определяем максимальный элемент прочитанной части последовательности. Очевидно, что Max(*x) = max(Max(), x), где max(ab) обозначает максимальное из двух чисел a и b. Доопределив Max() = , получаем фрагмент программы, вычисляющий Max():

var  x, y: Integer; fint: file of Integer; …

Reset(fint); y := 32768; {:= }

while not Eof(fintdo

begin

Read(fintx);

if x > y then y := x

end {while} {y = Max()}

Инвариантом цикла здесь является соотношение y = Max(L(fint)), а ограничивающей функцией  Length(R(fint)).

Функции от последовательностей, подобные рассмотренной, встречаются часто и могут быть названы индуктивными [14], или марковскими [18].

Определение. Функция f: (X)  Y называется индуктивной, если f(*x) можно вычислить, зная f() и x, т. е. если существует G:Y  X  Y,

такая, что для всех   (X), x  X выполняется соотношение f(*x) = G(f(), x).

Рассмотренный пример с Max() записывается в этих обозначениях следующим образом: f() = Max(),X = Z, f: (Z)  Z, G(yx) = max(yx).

Еще один пример индуктивной функции:

f = «число положительных элементов последовательности».

Здесь f: (Z)  N0. Функция f() индуктивна. Действительно, для всех   (Z), x  Z имеем f(*x) = G(f(), x), f() = 0, где GN0Z  N0 и

 y + 1, если > 0,

G(yx) =  

 y, если  0.

Индуктивные функции удобно вычислять. Пусть известно значение f0 = f(). Тогда значение fn = f(n), где n x1 x2 … xn , можно найти так:

= 0*x1, f1 = f(1) = G(f0x1),

= 1*x2, f2 = f(2) = G(f1x2),

n = n  1*xn, fn = f(n) = G(fn  1xn).

Если математическая последовательность представлена в программе файлом fin типа file of X, то эти рекуррентные соотношения можно реализовать в виде следующего фрагмента программы.

Фактически это схема программ, из которой конкретная программа может быть получена интерпретацией абстрактных типов X и Y, переменных xy и y0, функции G(yx). Эта схема имеет инвариант цикла y = f(L(fin)) и ограничивающую функцию Length(R(fin)).

Reset(fin); y := y0; {y0 = f()}

while not Eof(findo

begin Read(finx);

y := G(yx)

end {while}

Пример неиндуктивной функции:

f = «число максимальных элементов последовательности».

Пусть, например x  R, тогда f: (R)  N0. Очевидно, можно положить f() = 0 и записать 1,если x > Max(),

f(*x) =   f() + 1,если x = Max(),  f(),если x < Max().

Поскольку для вычисления f(*x) необходимо кроме f() и x знать еще Max(), то функция f не является индуктивной.

Можно ввести формальный критерий индуктивности

Утверждение. Функция f индуктивна тогда и только тогда, когда

,   : (f() = f())  (f(*x) = f(*x))

для любого x  X.

Для предыдущего примера  = (0, 1, 0, 1),  = (1, 2, 1, 2), f() = 2, f() = 2. При x = 1 получим f(*x) = 3 и f(*x) = 2, т. е. f(*x)  f(*x), и, следовательно, f  неиндуктивна.

Билет№22 Индук ф-ции на пространстве последовател :стацион значения №22