Для подсчета дискретных объектов широко применяется техника
рекуррентных соотношений и производящих функций. Поясним
ее сущность на примерах.
Пример 1.
Рассмотрим следующую задачу: подсчитать количество двоичных слов длины
в которых единицы не могут стоять на соседних местах.
Будем называть такие слова правильными и обозначим через
число
правильных слов длины
Разобъем множество правильных слов длины
на два класса: слова, оканчивающиеся на ноль и слова, оканчивающиеся на
единицу. Количество слов в этих классах обозначим
и
соответственно. Имеем по правилу сложения
Очевидно, что у слова, оканчивающегося на ноль, первые символ
образуют правильное слово длины
или, другими словами, имеется
биекция между множеством правильных слов длины
оканчивающихся
на ноль, и множеством всех правильных слов длины
Следовательно,
Если правильное слово длины оканчивается
на единицу, то предыдущий символ этого слова (
-й)
должен быть нулем, а первые
символа должны образовывать
правильное слово длины
Как и в предыдущем рассуждении, снова
имеем биекцию между множеством правильных слов длины
оканчивающихся на
единицу и множеством всех правильных слов длины
Следовательно,
Подставляя в (2.5), получаем
соотношение
Рекуррентное соотношение в известном смысле решает задачу подсчета, но
требует для данного вычисления всех предыдущих величин. Например,
если нам нужно знать количество правильных слов из 10 символов, то его
можно найти, заполняя следующую таблицу
Пример 2.
Пусть
Замечание. Как пример неассоциативной операции можно привести
векторное произведение. Другой удивительный пример:
-- обычное
сложение или умножение, но выполняемое на компьютере. В силу того, что
представление каждого числа в памяти компьютера ограничено определенным
количеством разрядов, при выполнении каждой операции возникает погрешность
и суммарный результат этих погрешностей зависит от расстановки скобок.
Пусть, например,
максимальное положительное число такое,
что
Это так называемый машинный ноль.
Тогда
в то время как
Обозначив число всевозможных способов расстановки скобок через имеем
![]() |
![]() |
|
![]() |
![]() |
|
![]() |
![]() |
|
![]() |
В случае произвольного разобьем все способы расстановки скобок
на классы, включив в
-й класс способы, при которых сначала вычисляется
"произведение" первых
и последних
операндов (с какой-то
расстановкой скобок), а потом вычисляется их произведение
Согласно определению, количество способов расстановки скобок для вычисления
"произведения" первых операндов равно
последних
--
следовательно, число расстановок скобок
вида (2.8) равно
Суммируя по всевозможным
(правило сложения !), находим
Хотя рекуррентное соотношение в принципе решает задачу подсчета, в ряде случаев желательно иметь выражение для искомой величины в явном виде. Такое явное выражение можно получить для решений одного класса рекуррентных соотношений -- линейных рекуррентных соотношений с постоянными коэффициентами.
Пусть функция в общем определении (2.6) является линейной,
Тогда соотношение (2.10) называют линейным рекуррентным соотношением -го порядка:
(Более точно надо бы говорить "линейное рекуррентное соотношение с постоянными
коэффициентами".)
Соотношение (2.10) мы будем далее рассматривать как уравнение
(относительно неизвестной функции
)
и каждую последовательность
Основные моменты теории линейных рекуррентных соотношений произвольного порядка можно понять на примере уравнений второго порядка -- общий случай сложней только в обозначениях. Поэтому, далее исследуем подробно уравнения второго порядка
Подставив вторую последовательность в (2.11) и поделив на
убеждаемся, что вторая последовательность является решением, поскольку
решением является первая последовательность. Если
то последовательность
состоит из одних нулей. Такая последовательность, очевидно, будет решением
любого линейного рекуррентного соотношения.
Лемма 2.Пусть
Тогда последовательность
Так как
являются решениями, то
![]() |
||
![]() |
Из этих двух простых лемм можно сделать важный вывод. Совокупность всевозможных последовательностей
Лемма 3.Размерность пространства решений рекуррентного соотношения (2.11) равна двум.
Для доказательства заметим, что если последовательность
удовлетворяет рекуррентному соотношению (2.11), то она полностью определяется
заданием первых двух членов. Действительно, если
![]() |
![]() |
|
![]() |
![]() |
|
![]() |
Другими словами, чтобы задать последовательность-решение, достаточно задать
первые два члена последовательности.
Определим базисные решения
и
так
![]() |
||
![]() |
Итак, чтобы найти все решения уравнения (2.11) достаточно как-то отыскать два линейно независимых решения -- каждое решение будет составляться как линейная комбинация базисных.
Путь для отыскания базисных решений подсказывает рассмотрение рекуррентного соотношения первого порядка
Будем и в общем случае искать решение рекуррентного соотношения в виде геометрической прогрессии (2.14). Подстановка (2.14) в (2.11) дает
Для построения базисных решений необходимо различать два случая.
1) Характеристическое уравнение имеет два различных корня
и
В этом случае имеем два решения
и
Чтобы убедиться, что они независимы, покажем, что из формулы
Для доказательства последнего утверждения рассмотрим произвольное решение
Выберем константы
и
так,
чтобы
и
совпадали при
и
Условия (2.17) имеют форму линейной системы, определитель этой системы
2) Характеристическое уравнение имеет кратные корни
В этом случае имеется только одно решение в виде геометрической прогрессии --
однако пространство решений двумерно и необходимо построить второе решение.
Оказывается, что в рассматриваемом случае решением является
последовательность
Действительно, так как
--
кратный корень характеристического уравнения (2.15), то само уравнение
имеет вид
Доказательство того, что решения
и
образуют базис в пространстве решений проводится так же, как в п.1). Формула
![]() |
||
![]() |
В случае соотношения -го порядка (2.10) имеют место утверждения, аналогичные
тем, которые были подробно рассмотрены для уравнений 2-го порядка.
1) Совокупность всех решений линейного рекуррентного соотношения
-го порядка является подпространством в пространстве всех последовательностей.
2) Размерность этого подпространства равна (Каждое решение
однозначно определяется своими первыми
значениями.)
3) Для построения базиса подпространства решений составляется характеристическое уравнение
4) Если характеристическое уравнение имеет различных корней
![]() |
||
![]() |
||
![]() |
||
![]() |
5) Если
-- корень характеристическое уравнение
кратности
то рекуррентное соотношение (2.10)
имеет следующие решения
Пусть характеристическое уравнение (2.19) имеет корни
![]() |
||
![]() |
||
![]() |
||
![]() |
||
![]() |
Тогда общее решение линейного рекуррентного соотношения (2.10) имеет вид
![]() |
![]() |
|
![]() |
Решая ее, найдем
C_1=&lambda#lambda;_1^2&lambda#lambda;_1-&lambda#lambda;_2, C_2=-&lambda#lambda;_2^2&lambda#lambda;_1-&lambda#lambda;_2.Отсюда
или
Выше говорилось о преимуществе явной формулы, подтвердим это на примере
Допустим, что длинную последовательность 0 и 1 (например, бинарный файл)
нужно передать по каналу связи. Канал имеет два состояния: одно для передачи
0 и одно для передачи 1, однако, из-за технических ограничений состояния,
в которых передаются 1, не могут следовать друг за другом. В этих условиях
исходная последовательность 0 и 1 предварительно кодируется: последовательность
разбивается на блоки длины
и каждый блок заменяется правильным
словом длины
Практический интерес представляет такой вопрос. Во сколько раз увеличивается длина блока в результате его кодирования -- в это же количество раз увеличивается время пересылки последовательности по рассматриваемому каналу по сравнению с двоичным каналом без ограничений на чередование состояний.
Для того чтобы правильных слов длины хватило для кодирования
возможных блоков длины
число
надо выбирать
под условием
или после логарифмирования