- •Комбінаторний аналіз методичні вказівки
- •6. 050103 „Програмна інженерія”
- •Комбінаторний аналіз
- •1. Вступ
- •2. Основні правила комбінаторного аналізу. Поняття вибірки
- •3. Алгоритми перебору та лексикографічний порядок
- •4. Алгоритми перебору розміщень
- •5. Алгоритми перебору перестановок
- •6. Алгоритми перебору сполучень
- •7. Обчислення кількості розміщень і сполучень
- •8. Перестановки з повтореннями
- •9. Генерування розбиття множини
- •10. Біном Ньютона
- •3. Винесення за дужки.
- •4. Заміна індексів.
- •11. Задача про цілочислові розв'язки
- •12. Принцип коробок Діріхле
- •13. Приклади виконання практичних завдань
- •14. Завдання до виконання
- •Контрольні запитання.
- •Список літератури
- •Комбінаторний аналіз методичні вказівки
- •6. 050103 “Програмна інженерія”
8. Перестановки з повтореннями
Формулу для кількості перестановок Рп одержують із формули для кількості розміщень без повторень:
Приклад 8.1. Знайдемо кількість рядків, які можна утворити, переставляючи букви слова SOFTWARE. Оскільки жодна буква тут не повторюється, то можна утворити Р8 =8!=40320 рядків. ▲
Розглянемо складніший вид перестановок.
Означення 8.1. Нехай є n елементів k різних типів, а число nj (j=1,…,k) — кількість елементів j-гo типу. Очевидно, що n1+п2+...+nk=п. Перестановки з n елементів за такої умови називають перестановками з повтореннями. Кількість таких перестановок позначають як .
ТЕОРЕМА 8.1. Кількість різних перестановок з повтореннями рівна:
.
Доведення. Щоб знайти явний вираз для ,візьмемо окрему перестановку та замінимо в ній усі однакові елементи різними. Тоді кількість різних перестановок, котрі можна отримати з узятої однієї перестановки, дорівнює . Якщо зробити це для кожної перестановки, то одержимоn! перестановок. Отже, , звідки
.▲
Приклад 8.2. Знайдемо, скільки рядків можна утворити, переставляючи букви слова POSSESSIONLESSNESSES. У цьому слові є повторні входження букв, тому скористаємося формулою для перестановок із повтореннями:
69837768000 слів. ▲
Задача розкладання в ящики. Дано n різних предметів і k ящиків. Потрібно покласти в перший ящик n1 предметів, у другий — n2 предметів,…, k-й — nk предметів, де . Тут— фіксовані числа. Скількома способами можна це зробити?
Розв’язання.
1-й спосіб. Занумеруємо всі n предметів. Кожен предмет попадає у свій ящик:
1-й предмет |
2-й предмет |
… |
… |
n-й предмет |
a1 ящик |
a2 ящик |
… |
… |
an ящик |
Як бачимо, кожному розподілу предметів по ящиках відповідає певна послідовність a1a2…an. Кількість всіх послідовностей відповідає кількості способів розподілу предметів.
Послідовність a1a2…an є перестановкою з повтореннями чисел {1, 2, …, k}, бо перестановкою її елементів ми отримаємо інакший розподіл, а її елементи повторюються. Очевидно, що “1” повторюватиметься n1 разів, “2” повторюватиметься n2 разів, і т.д. Отже, кількість розкладань:
.
2-й спосіб.
Серед п предметів візьмемо довільну n1 підмножину й покладемо її в перший ящик (це можна зробитиспособами). Середп-п1 предметів, що залишились, візьмемо n2 підмножину, покладемо її в другий ящик (це можна зробити способами) і продовжимо цей процес. За правилом добутку загальна кількість розкладань дорівнює:
▲
9. Генерування розбиття множини
Нагадаємо, що розбиттям множини називають сукупність непорожніх множин, які не перетинаються між собою, а їх об’єднання дає вхідну множину A.
Приклад 9.1. Задано множину A = {1, 2, 3}. Знайдемо усі її розбиття: {{1, 2, 3}}, {{1,2}, {3}}, {{2,3}, {1}}, {{1,3}, {2}}, {{1}, {2}, {3}}. ▲
Отримати розбиття множини прямим методом доволі складно. Алгоритм запропонований нижче полягає у тому, що кожне розбиття множини {1, 2, …, п-1, п} можна отримати із розбиття {1, 2, …, п-1}, додавши елемент {п}. Алгоритм має недолік: він вимагає попереднього обчислення всіх розбиттів множин із кількістю елементів 1, 2, 3, 4, …n-1. Існують алгоритми, які можуть робити прямий перебір без додаткових обчислень, але вони суттєво складніші.
Алгоритм перебору всіх розбиттів множини.
Крок 1. Нехай n = 1. Розбиття множини A = {1} є єдине M1= {{1}}. Збільшуємо n на одиницю.
Крок 2. Робимо присвоєння n=n+1. На попередньому кроці ми обчислили усі розбиття Mn-1 множини {1, 2, …, п-1}. Ініціалізуємо розбиття Mn порожньою множиною.
Крок 3. Для кожного з розбиттів множини {1, 2, …, п-1, п} елемент {п} почергово додаємо до кожної з множин розбиття. Отримане розбиття додаємо до Mn. Зауваження: для цього треба організувати подвійний цикл.
Крок 4. Утворюємо розбиття множини {1, 2, …, п-1, п}, додаючи елемент {п} як окрему множину до кожного з розбиттів елементу A та додаємо до Mn.
Крок 5. Переходимо до кроку 2, якщо n не досягло кінцевого значення. ▲
Розглянемо детальніше рекурсивну роботу алгоритму.
Приклад 9.2. Знайдемо розбиття множини M3.
Крок 1. Нехай n = 1. Розбиття множини A = {1} є єдине – M1= {{1}}.
Крок 2. n = 2. Ініціалізуємо M2= {}.
Крок 3. Додаємо до M2 розбиття {{1,2}}.
Крок 4. Додаємо до M2 розбиття {{1},{2}}.
Крок 5. Ми отримали розбиття M2 =[{{1,2}};{{1},{2}}] і переходимо до кроку 2.
Крок 6. Ініціалізуємо M3= {}. Збільшуємо n на одиницю, n=3.
Крок 7. Додаємо до M3 розбиття елемент {3}, до кожної з множин розбиттів {{1,2}} та {{1},{2}}.
Отримуємо: M3 =
Як бачимо із розбиття {{1},{2}}, ми отримали 2 нових розбиття, а з {{1,2}} – лише одне.
Крок 8. Додаємо до M3 розбиття, які отримуються від додавання елементу {3}, до кожної з множин розбиття {{1,2}} та {{1},{2}} як окремої множини.
Отримуємо: M3 =
Крок 9. Оскільки n=3, то алгоритм завершено. ▲
Означення 9.1. Кількість усіх розбиттів n-елементної множини на непорожні частини називають числами Белла і позначають S(п).
Означення 9.2. Кількість розбиттів n-елементної множини на k непорожніх частин називають числами Стірлінга другого роду і позначають S (п, k).
З розглянутого прикладу 9.2:
S(3, 1) = 1; S(3, 2) = 3; S(3, 3) = 1; S(3) = 1 + 3 +1 = 5.
Зв’язок між числами Белла та числами Стірлінга очевидний:
Але для них також виконуються рівності:
;
;
.
Останню рівність легко вивести з алгоритму для генерування множин. Також за її допомогою легко виводити значення чисел Белла та Стірлінга 2-го роду (табл. 9.1).
Таблиця 9.1
n\k |
1 |
2 |
3 |
4 |
5 |
6 |
… |
|
1 |
1 |
|
|
|
|
|
… |
1 |
2 |
1 |
1 |
|
|
|
|
… |
2 |
3 |
1 |
3 |
1 |
|
|
|
… |
5 |
4 |
1 |
7 |
6 |
1 |
|
|
… |
15 |
5 |
1 |
15 |
25 |
10 |
1 |
|
… |
52 |
6 |
1 |
31 |
91 |
65 |
15 |
1 |
… |
203 |
… |
… |
… |
… |
… |
… |
… |
… |
… |
Означення 9.3. Послідовність дійсних чисел називаютьунімодальною, якщо існує такий натуральний номер m, що , тобто:
послідовність строго зростає на відрізку
послідовність строго спадає на відрізку
максимальне значення досягається не більш ніж у двох точках: m і можливо, m+1.
ТЕОРЕМА 9.1. За фіксованого п послідовність k = 1, 2, ..., n унімодальна.