Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дискретная математика / методические указания.DOC
Скачиваний:
68
Добавлен:
03.03.2016
Размер:
2.53 Mб
Скачать

Твірна функція

Твірна функція — це функція, що дозволяє визначити явний вид загального члена розглядаємої числової послідовності. Якщо мається послідовність {an}, для головного члена a якої потрібно знайти загальну формулу, уведемо функцію

Якщо, використовуючи властивості розглянутої послідовності, удасться вирішити складені для A(x) рівняння, то можна буде одержати елементи послідовності.

Експоненціальною твірною функцією послідовності а0,а1, ..., an, ... називається ряд

Розбиття множини на підмножини

Розбиття n-елементної множини X на k блоків — це сімейство Q = {B1, …, Bk}, у якому B1  …  Bk = X, Bi  Bj = 0, Bi ≠ 0, для 1 ≤ i < j ≤ k. Позначимо множину усіх розбивок множини X на k блоків через Πk(X), а через Π(X) — множина всіх розбивок.

Алгоритм генерування розбивок множини, опишимо в рекурентній формі.

Спочатку зробимо ряд визначень. Можна показати, що розбивка Q множини {1, …, n} однозначно визначає розбивку Qn−1 множини {1, …, n−1}, яка виходить з Q після видалення елемента n (чи порожнього блоку) з відповідного блоку. Також, якщо має місто розбивка W = {B1, …, Bk} множини {1, …, n−1}, то можна відшукати всі розбивки Q множини {1, …, n}, для якої Qn−1 = W. Позначимо таку послідовність через E. Метод генерування разбивок: якщо в нас є список Ln−1 усіх розбивок множини {1, …, n−1}, то список Ln розбивок множини {1, …, n} будемо створювати, замінюючи кожну розбивку Q у списку Ln−1 на відповідну йому послідовність E. Проілюструємо побудову списку Ln для n = 1, 2, 3.

L1 (1)

L2 (1 2) (1)(2)

L3 (1 2 3) (1 2)(3) (1)(2)(3) (1)(2 3) (1 3)(2)

Число Стірлінга другого роду S(nk) — це число розбивок n-елементної множини на k блоків довільного розміру, але таких, що кожен елемент множини виявляється “приписаний” до одного з блоків:

S(nk) = | Πk(X) |,

де множина X складається з n елементів. Наприклад, S(4, 2) = 7.

Деякі тотожності, зв'язані з числами Стірлінга другого роду:

S(nn) = 1, для n ≥ 0,

S(n0) = 0, для n > 0,

S(nk) = S(n−1, k−1) + k(n−1, k), для 0 < k < n

Перші дві формули очевидні. Для довільного k можна вирішити так. Останній елемент або буде являти собою окремий блок у розбивці, і тоді інші елементи можна розбити вже на k — 1 частин S(n — 1, k — 1) способами, або поміщаємо його в непорожній блок. У останньому випадку мається k(n — 1, k) можливих варіантів, оскільки останній елемент ми можемо додавати в кожен блок розбивки перших n — 1 елементів на k частин.

Таким чином,

S(n, k) = S(n — 1, k — 1) + k(n — 1, k),n > 0. (5)

Корисними можуть виявитися також формули, що зв'язують числа Стірлінга з біноміальними коефіцієнтами, що визначають число сполучень:

;

;

Якщо ж значення k тепер не фіксувати і розглянути всі розбивки n-елементної множини, то їхня кількість виражається числом Белла

;

.

Число Белла Bn — це число всіх розбивок n-елементної множини:

Bn = |Π(X)|, де |X| = n.

Розглянемо рекурентне співвідношення:

Для його доказу досить помітити, що множини усіх розбивок множини X = {1, …, n+1} можна розділити на різні класи в залежності від блоку B, що містить елемент n+1, чи в залежності від множини X \ B. Далі для кожної множини X \ B з {1, …, n} маємо |Π(X \ B)| = B|X\B| розбивок множини X, що містить B як блок. Групуючи класи в залежності від потужності множини X \ B, приходимо до необхідного.

Числа Стірлінга першого роду s(nk) — це коефіцієнти при послідовних ступенях перемінної x у багаточлені [x]k:

.

Для них визначаються аналогічні рекурентні співвідношення, що і для чисел другого роду:

s(nn) = 1, для n ≥ 0,

s(n, 0) = 0, для n > 0,

s(nk) = s(n−1, k−1) + (n−1)s(n−1, k), для 0 < k < n.

Розбиття числа (натурального) n на k доданків — це послідовність a1, …, ak, така що n = a1 + … + ak, a1 ≥ … ≥ ak > 0...

Простий спосіб представлення розбивки числа — діаграма Феррерса. Для розбивки a1, …, ak вона складається з k рядків, що відповідають доданкам розбивки, де i-й рядок складається з ai крапок.

@ @ @ @ @ @

@ @ @ @

@ @ @ @

@ @

Приведемо алгоритм генерування всіх розбивок числа. Позначимо через S[1], …, S[d] саму розбивку числа, а через R[1], …, R[d] — інформацію про то, скільки разів доданок S[i] з'являється в розбивці.

1 begin

2 S[1] := n; R[1] := 1; d := 1;

3 write();

4 while S[1] > 1 do

5 begin sum := 0;

6 if S[d] = 1 then

7 begin sum := sum + R[d]; d := d − 1;

8 end;

9 sum := sum + S[d]; R[d] := R[d] − 1; l := S[d] − 1;

10 if R[d] > 0 then d := d + 1;

11 S[d] := l; R[d] := sum div l;

12 l := sum mod l;

13 if l ≠ 0 then

14 begin d := d + 1; S[d] := l; R[d] := 1

15 end;

16 write();

17 end

18 end