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

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

< Лекция 6 || Лекция 7: 12 || Лекция 8 >

Другой метод доказательства

В предыдущем разделе непосредственно установлена связь между задачей Фибоначчи и комбинаторной задачей. Эту связь можно установить и иначе, непосредственно доказав, что число T(n) решений комбинаторной задачи удовлетворяет тому же рекуррентному соотношению

T(n + 1) = T(n) + T(n - 1), ( 7.5)
что и числа Фибоначчи. В самом деле, возьмем любую (n+1) -последовательность нулей и единиц, удовлетворяющую условию, что никакие две единицы не идут подряд. Она может оканчиваться или на 0, или на 1. Если она оканчивается на 0, то, отбросив его, получим n -последовательность, удовлетворяющую нашему условию. Если взять любую n - последовательность нулей и единиц, в которой подряд не идут две единицы, и приписать к ней нуль, то получим (n + 1) -последовательность с тем же свойством. Таким образом доказано, что число последовательностей, оканчивающихся на нуль, равно T(n).

Пусть теперь последовательность оканчивается на 1. Так как двух единиц подряд быть не может, то перед этой единицей стоит нуль. Иными словами, последовательность оканчивается на 01. Остающаяся же после отбрасывания 0 и 1 (n - 1) -последовательность может быть любой, лишь бы в ней не шли подряд две единицы. Поэтому число последовательностей, оканчивающихся единицей, равно T(n -
1). Но каждая последовательность оканчивается или на 0, или на 1. В силу правила суммы получаем, что T(n + 1) = T(n) + T(n - 1).

Таким образом, получено то же самое рекуррентное соотношение. Отсюда еще не вытекает, что числа T(n) и F(n) совпадают.

Процесс последовательных разбиений

Для решения комбинаторных задач часто применяют метод, использованный в предыдущем пункте: устанавливают для данной задачи рекуррентное соотношение и показывают, что оно совпадает с рекуррентным соотношением для другой задачи, решение которой нам уже известно. Если при этом совпадают и начальные члены последовательностей в достаточном числе, то обе задачи имеют одинаковые решения.

Применим описанный прием для решения следующей задачи.

Пусть дано некоторое множество из n предметов, стоящих в определенном порядке. Разобьем это множество на две непустые части так, чтобы одна из этих частей лежала левее второй (то есть, скажем, одна часть состоит из элементов от первого до m - го, а вторая - из элементов от (m + 1) -го до n -го). После этого каждую из частей таким же образом разобьем на две непустые части (если одна из частей состоит уже из одного предмета, она не подвергается дальнейшим разбиениям). Этот процесс продолжается до тех пор, пока не получим части, состоящие из одного предмета каждая. Сколько существует таких процессов разбиения (два процесса считаются различными, если хотя бы на одном шагу они приводят к разным результатам)?

Обозначим число способов разбиения для множества из n + 1 предметов через B_n. На первом шагу это множество может быть разбито n способами (первая часть может содержать один предмет, два предмета,…, n предметов). В соответствии с этим множество всех процессов разбиений распадается на n классов - в s - класс входят процессы, при которых первая часть состоит из s предметов.

Подсчитаем число процессов в s -м классе. В первой части содержится s элементов. Поэтому ее можно разбивать далее B_{s - 1} различными процессами. Вторая же часть содержит n
- s + 1 элементов, и ее можно разбивать далее B_{n - s} процессами. По правилу произведения получаем, что s - класс состоит из B_{s - 1} B_{n - s} различных процессов. По правилу суммы отсюда вытекает, что

B_n=B_0 B_{n - 1}  + B_1 B_{n - 2}  + \ldots  + B_{n - 1} B_0. ( 7.6)
Таким образом получено рекуррентное соотношение для B_n. Двоичный поиск, поиск делением пополам. Поиском по числам Фибоначчи называется поиск, основанный на том, что область поиска делится в точках, являющихся числами Фибоначчи.

Задача: "Затруднение мажордома"

Бывают комбинаторные задачи, в которых приходится составлять не одно рекуррентное соотношение, а систему соотношений, связывающую несколько последовательностей. Эти соотношения выражают (n + 1) -у члены последовательностей через предыдущие члены не только данной, но и остальных последовательностей.

Задача: "Затруднение мажордома". Однажды мажордом короля Артура обнаружил, что к обеду за круглым столом приглашено 6 пар враждующих рыцарей. Сколькими способами можно рассадить их так, чтобы никакие два врага не сидели рядом?

Если мы найдем какой-то способ рассадки рыцарей, то, пересаживая их по кругу, получим еще 11 способов. Мы не будем сейчас считать различными способы, получающиеся друг из друга такой циклической пересадкой.

Введем следующие обозначения. Пусть число рыцарей равно 2n. Через A_n^{} обозначим число способов рассадки, при которых никакие два врага не сидят рядом. Через B_n обозначим число способов, при которых рядом сидит ровно одна пара врагов, и через C_n - число способов, при которых есть ровно две пары враждующих соседей.

Выведем сначала формулу, выражающую A_{n + 1} через A_n,B_n,C_n. Пусть n + 1 пар рыцарей посажены так, что никакие два врага не сидят рядом. Мы будем считать, что все враждующие пары рыцарей занумерованы. Попросим встать из-за стола пару рыцарей с номером n + 1. Тогда возможны три случая: среди оставшихся за столом нет одной пары соседей- врагов, есть одна такая пара и есть две такие пары (ушедшие рыцари могли разделять эти пары). Мы считаем, что n > 1. При n = 1 последующие рассуждения теряют силу.

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

Проще всего посадить их, если за столом рядом сидят две пары врагов. В этом случае один из вновь пришедших садится между рыцарями первой пары, а другой – между рыцарями второй пары. Это можно сделать двумя способами. Но так как число способов рассадки 2n рыцарей, при которых две пары соседей оказались врагами, равно C_n, то всего получилось 2C_n способов.

Пусть теперь рядом сидит только одна пара врагов. Один из вернувшихся должен сесть между ними. Тогда за столом окажутся 2n + 1 рыцарей, между которыми есть 2n + 1 мест. Из них два места - рядом с только что севшим гостем – запретны для второго рыцаря, и ему остается 2n - 1 мест. Так как первым может войти любой из двух вышедших рыцарей, то получается 2(2m-1) способов рассадки. Но число случаев, когда 2n рыцарей сели так, чтобы ровно одна пара врагов оказалась соседями, ровно B_n. Поэтому мы получаем 2(2n -
1)B_n способов посадить гостей требуемым образом.

Наконец, пусть никакие два врага не сидели рядом. В этом случае первый рыцарь садится между любыми двумя гостями - это он может сделать 2n способами. После этого для его врага останется 2n -
1 мест - он может занять любое место, кроме двух мест, соседних с только что севшим рыцарем. Таким образом, если 2n рыцарей уже сидели нужным образом, то вернувшихся гостей можно посадить 2n(2n - 1)A_n способами. Как уже отмечалось, разработанными случаями исчерпываются все возможности. Поэтому имеет место рекуррентное соотношение

A_{n + 1}  = 2n(2n - 1)A_n  + 2(2n - 1)B_n  + 2C. ( 7.7)

Этого соотношения пока недостаточно, чтобы найти A_n для всех значений n. Надо еще узнать, как выражаются B_{n + 1},C_{n + 1} через A_n, B_n, C_n.

Предположим, что среди 2n + 2,n > 1 рыцарей оказалась ровно одна пара врагов-соседей. Мы знаем, что это может произойти в B_{n + 1} случаях. Во избежание ссоры попросим их удалиться из-за стола. Тогда останется 2n рыцарей, причем возможно одно из двух: либо среди оставшихся нет врагов-соседей, либо есть ровно одна пара таких врагов - до ухода покинувших зал они сидели по обе стороны от них и теперь оказались рядом. Во втором случае ушедших можно посадить обратно только на старое место - иначе появится вторая пара враждующих соседей. Но так как 2n рыцарей можно посадить B_n способами так, чтобы была только одна пара враждующих соседей, то мы получаем 2B_n вариантов (возвратившихся рыцарей можно поменять местами). В первом же случае можно посадить ушедших между любыми двумя рыцарями, то есть 2n способами, а так как их еще можно поменять местами, то получится 4n способов. Комбинируя их со всеми способами посадки n пар рыцарей, при которых нет соседей врагов, получаем 4nA_n способов. Наконец, номер ушедшей и вернувшейся пары рыцарей мог быть любым от 1 до n + 1. Отсюда вытекает, что рекуррентное соотношение для B_{n + 1} имеет вид

B_{n + 1}  = 4n(n + 1)A_n  + 2(n + 1)B_n. ( 7.8)

Наконец, разберем случай, когда среди 2n + 2 рыцарей было две пары врагов-соседей. Номера этих пар можно выбрать C_{n + }^2  =
\frac{{n(n + 1)}}{2} способами. Заменим каждую пару одним новым рыцарем, причем будем считать новых двух рыцарей врагами. Тогда за столом будут сидеть 2n рыцарей, причем среди них либо не будет ни одной пары врагов-соседей (если новые рыцари не сидят рядом), либо только одна такая пара.

Первый вариант может быть в A_n случаях. Вернуться к исходной компании мы можем 4 способами благодаря возможности изменить порядок рыцарей в каждой паре. Поэтому первый вариант приводит к 4C_{n+1}^2A_n=2n(n+1)A_n способами.

Второй же вариант может быть в \frac{1}{n}B_n случаях. Имеется B_n случаев, когда какая-нибудь пара врагов сидит рядом. Если указать, какая именно пара должна сидеть рядом, получим в n раз меньше случаев.

Здесь тоже можно вернуться к исходной компании 4 способами, и мы получаем всего 2(m+1)B_n способов. Отсюда вытекает, что при n \geqslant 1

C_{n + 1}  = 2n(n + 1)A_n  + 2(n + 1)B_n. ( 7.9)
Мы получили систему рекуррентных соотношений
A_{n + 1}  = 2n(2n - 1)A_n  + 2(2n - 1)B_n  + 2C ( 7.10)
B_{n + 1}  = 4n(n + 1)A_n  + 2(n + 1)B_n. ( 7.11)
C_{n + 1}  = 2n(n + 1)A_n  + 2(n + 1)B_n. ( 7.12)
Они справедливы при n \geqslant 2. Но простой подсчет показывает, что A_2  = 2,B_2  = 0,C_2  = 4. Поэтому из соотношений 7.10-7.12 вытекает, что A_3 = 32,B_3 = 48,C_3 = 24. Продолжая далее, находим, что гостей можно посадить за стол требуемым образом A_6=12771840 способами.

< Лекция 6 || Лекция 7: 12 || Лекция 8 >