Базисные схемы обработки информации
Функции на пространстве последовательностей
Еще одной ситуацией, в которой общая схема итерации значительно упрощается,
является задача вычисления индуктивных функций. Такие функции определены
на последовательностях элементов из некоторого алфавита
.
Напомним важнейшие из определений
"Высказывания и предикаты"
.
Алфавит — произвольное непустое множество.
Символом алфавита называют любой его элемент, а цепочкой
над алфавитом — произвольную последовательность символов
.
Цепочки часто называют также словами, фразами и предложениями. Пустая цепочка
обозначается специальным символом
, а множество всех
цепочек над
алфавитом
принято обозначать
.
Длиной цепочки
называется количество
входящих в нее символов. Множество всех цепочек длины не менее
обозначают через
. Справедлива следующая последовательность
включений:
Операция конкатенации (или сцепления ) двух цепочек определена следующем
образом.
Пусть
,
,
тогда
.
Теперь можно дать определение индуктивной функции.
Определение 7.4.
Функция называется индуктивной,
если
можно вычислить, зная
и
, т.е. если
такое, что
.
Одним из простейших примеров индуктивной функции является
функция длина цепочки .
Она индуктивна, так как для нее существует
функция
,
определенная
формулой
, удовлетворяющая предыдущему
определению.
Для вычисления значения индуктивной функции
на цепочке
применяется следующая схема.
Схема вычисления индуктивной функции.
Рассматривается последовательность цепочек ,
,
,
,
. Сначала вычисляется значение
функции
на пустой цепочке
, а затем используется отображение
, позволяющее найти значение
функции
на удлиненной цепочке, что дает возможность последовательно определить все
требуемые величины вплоть до
.
На рис. 7.5 приведена графическая иллюстрация схемы вычисления индуктивной функции.
Схема вычисления индуктивной функции напоминает метод доказательства
по индукции.
Аналогом базы индукции является вычисление , а
индуктивному
переходу соответствует вычисление функции
на
удлиненной
цепочке
с использованием вычисленного на
предыдущем шаге
значения
.
Схема вычисления индуктивной функции позволяет легко построить программу
вида "S0;while(e)S;", получающую на каждой следующей итерации цикла
очередной элемент цепочки (последовательности)
, которая
находит значение
. Инвариантом данного цикла является
,
условием продолжения —
, S0 должно
вычислять
, а S — быть программной реализацией
функции
.
Простым и полезным примером, иллюстрирующим схему вычисления индуктивной функции, является задача нахождения значения многочлена, заданного последовательностью его коэффициентов.
Задача 7.6. Напишите программу, определяющую значение в целой точке
многочлена, заданного последовательностью его целых коэффициентов (в порядке
убывания степеней).
Заметим, что








Текст программы
public class Pol { public static void main(String[] args) throws Exception { int t = Xterm.inputInt("t -> "); int y = 0; try { while (true) { int x = Xterm.inputInt("x -> "); y = t*y + x; } } catch (Exception e) { Xterm.println("\ny = " + y); } } }
Этот эффективный метод вычисления значения многочлена в точке носит имя схемы Горнера.
Методы доказательства правильности программ, построенных с помощью схемы вычисления индуктивных функций, и обобщение этой схемы, позволяющее применять аналогичный подход для функций, не являющихся индуктивными, будут рассмотрены ниже в "Индуктивные функции на пространстве последовательностей" .