Новосибирский Государственный Университет
Опубликован: 08.11.2006 | Доступ: свободный | Студентов: 1878 / 92 | Оценка: 4.27 / 4.09 | Длительность: 12:16:00
Специальности: Программист
Лекция 7:

Рекуррентные соотношения

< Лекция 6 || Лекция 7: 12 || Лекция 8 >
Аннотация: Размещения без повторений. Перестановки. Сочетания. Рекуррентные соотношения. Другой метод доказательства. Процесс последовательных разбиений. Задача: "Затруднение мажордома".

Размещения без повторений

Имеется n различных предметов. Сколько из них можно составить k -расстановок? При этом две расстановки считаются различными, если они либо отличаются друг от друга хотя бы одним элементом, либо состоят из одних и тех же элементов, но расположенных в разном порядке. Такие расстановки называют размещениями без повторений, а их число обозначают A_n^k. При составлении k -размещений без повторений из n предметов нам надо сделать k выборов. На первом шагу можно выбрать любой из имеющихся n предметов. Если этот выбор уже сделан, то на втором шагу приходится выбирать из оставшихся n - 1 предметов. На k - м шагу n-k+1 предметов. Поэтому по правилу произведения получаем, что число k -размещений без повторения из n предметов выражается следующим образом:

A_n^k  = n(n - 1)\ldots (n - k + 1).

Перестановки

При составлении размещений без повторений из n элементов по k мы получили расстановки, отличающиеся друг от друга и составом, и порядком элементов. Но если брать расстановки, в которые входят все n элементов, то они могут отличаться друг от друга лишь порядком входящих в них элементов. Такие расстановки называют перестановками из n элементов, или, короче, n - перестановками.

Сочетания

В тех случаях, когда нас не интересует порядок элементов в комбинации, а интересует лишь ее состав, говорят о сочетаниях. Итак, k - сочетаниями из n элементов называют всевозможные k - расстановки, составленные из этих элементов и отличающиеся друг от друга составом, но не порядком элементов. Число k -сочетаний, которое можно составить из n элементов, обозначают через C_n^k.

Формула для числа сочетаний получается из формулы для числа размещений. В самом деле, составим сначала все k -сочетания из n элементов, а потом переставим входящие в каждое сочетание элементы всеми возможными способами. При этом получается, что все k -размещения из n элементов, причем каждое только по одному разу. Но из каждого k - сочетания можно сделать k! перестановок, а число этих сочетаний равно C_n^k. Значит справедлива формула

k!C_n^k  = A_n^k.
Из этой формулы находим, что
C_n^k  = \frac{{A_n^k }}{{k!}} = \frac{{n!}}{{(n - k)!k!}}.

Рекуррентные соотношения

При решении многих комбинаторных задач пользуются методом сведения данной задачи к задаче, касающейся меньшего числа предметов. Метод сведения к аналогичной задаче для меньшего числа предметов называется методом рекуррентных соотношений (от латинского "recurrere" - "возвращаться").

Понятие рекуррентных соотношений проиллюстрируем классической проблемой, которая была поставлена около 1202 года Леонардо из Пизы, известным как Фибоначчи. Важность чисел Фибоначчи для анализа комбинаторных алгоритмов делает этот пример весьма подходящим.

Фибоначчи поставил задачу в форме рассказа о скорости роста популяции кроликов при следующих предположениях. Все начинается с одной пары кроликов. Каждая пара становится фертильной через месяц, после чего каждая пара рождает новую пару кроликов каждый месяц. Кролики никогда не умирают, и их воспроизводство никогда не прекращается.

Пусть F_n - число пар кроликов в популяции по прошествии n месяцев, и пусть эта популяция состоит из N_n пар приплода и O_n "старых" пар, то есть F_n  = N_n
 + O_n. Таким образом, в очередном месяце произойдут следующие события: O_{n + 1}  = O_n  + N_n  = F_n. Старая популяция в (n +
1) -й момент увеличится на число родившихся в момент времени n. N_{n + 1} = O_n. Каждая старая пара в момент времени n производит пару приплода в момент времени (n + 1). В последующий месяц эта картина повторяется:

O_{n+2}=O_{n+1}+N_{n+1}=F_{n+1},
N_{n+2} = O_{n + 1}

Объединяя эти равенства, получим следующее рекуррентное соотношение:

F_{n+2}=O_{n+2}+N_{n+2}=F_{n+1}+O_{n+1},
F_{n+2}=F_{n+1}+F_n ( 7.1)

Выбор начальных условий для последовательности чисел Фибоначчи не важен; существенное свойство этой последовательности определяется рекуррентным соотношением. Будем предполагать F_0  = 0,F_1  = 1 (иногда F_0  = F_1  = 1 ).

Рассмотрим эту задачу немного иначе.

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

Из условия задачи следует, что через месяц будет две пары кроликов. Через два месяца приплод даст только первая пара кроликов, и получится 3 пары. А еще через месяц приплод дадут и исходная пара кроликов, и пара кроликов, появившаяся два месяца тому назад. Поэтому всего будет 5 пар кроликов. Обозначим через F(n) количество пар кроликов по истечении n месяцев с начала года. Ясно, что через n + 1 месяцев будут эти F(n) пар и еще столько новорожденных пар кроликов, сколько было в конце месяца n - 1, то есть еще F(n - 1) пар кроликов. Иными словами, имеет место рекуррентное соотношение

F(n + 1) = F(n) + F(n - 1) ( 7.2)
Так как, по условию, F(0) = 1 и F(1) = 2, то последовательно находим
F(2)=3,F(3)=5,F(4)=8
и т.д.

В частности, F(12) = 377.

Числа F(n) называются числами Фибоначчи. Они обладают целым рядом замечательных свойств. Теперь выведем выражение этих чисел через C_m^k. Для этого установим связь между числами Фибоначчи и следующей комбинаторной задачей.

Найти число n последовательностей,состоящих из нулей и единиц, в которых никакие две единицы не идут подряд.

Чтобы установить эту связь, возьмем любую такую последовательность и сопоставим ей пару кроликов по следующему правилу: единицам соответствуют месяцы появления на свет одной из пар "предков" данной пары (включая и исходную), а нулями - все остальные месяцы. Например, последовательность 010010100010 устанавливает такую "генеалогию": сама пара появилась в конце 11-го месяца, ее родители - в конце 7-го месяца, "дед" - в конце 5-го месяца и "прадед" - в конце второго месяца. Исходная пара кроликов тогда зашифровывается последовательностью 000000000000.

Ясно, что при этом ни в одной последовательности не могут стоять две единицы подряд - только что появившаяся пара не может, по условию, принести приплод через месяц. Кроме того, при указанном правиле различным последовательностям отвечают различные пары кроликов, и обратно, две различные пары кроликов всегда имеют разную "генеалогию", так как, по условию, крольчиха дает приплод, состоящий только из одной пары кроликов.

Установленная связь показывает, что число n -последовательностей, обладающих указанным свойством, равно F(n).

Докажем теперь, что

F(n)=C_{n+1}^0+C_n^1+C_{n-1}^2+\ldots+C_{n-p+1}^p, ( 7.3)
где p = \frac{{n + 1}} {2}, если n нечетно, и p = \frac{n} {2}, если n четно. Иными словами, p - целая часть числа \frac{{n + 1}} {2} (в дальнейшем будем обозначать целую часть числа \alpha через E(\alpha ) ; таким образом, p = E(\frac{{n + 1}} {2}) ).

В самом деле, F(n) - это число всех n - последовательностей из 0 и 1, в которых никакие две единицы не стоят рядом. Число же таких последовательностей, в которые входит ровно k единиц и n - k нулей, равно C_{n - k + 1}^k. Так как при этом должно выполняться неравенство k \leqslant n - k + 1, то k изменяется от 0 до E(\frac{{n + 1}}{2}). Применяя правило суммы, приходим к соотношению (7.3).

Равенство (7.3) можно доказать и иначе. Положим G(n)=C_{n+1}^0+C_n^1+C_{n-1}^2+\ldots+C_{n-p+1}^p,\vspace{-1mm} где p = \frac{{n + 1}}{2}. Из равенства C_n^k=C_{n-1}^k+C_{n-1}^{k-1} легко следует, что

G(n)=G(n-1)+G(n-2). ( 7.4)
Кроме того, ясно, что G(1)=2=F(1) и G(2)=3=F(2). Так как обе последовательности F(n) и G(n) удовлетворяют рекуррентному соотношению X(n)=X(n-1)+X(n-2), то имеем
G(3)=G(2)+G(1)=F(2)+F(1)=F(3),
и, вообще, G(n) = F(n).

< Лекция 6 || Лекция 7: 12 || Лекция 8 >
Андрей Посохов
Андрей Посохов
Россия, Санкт-Петербург
Вадим Лелес
Вадим Лелес
Россия