Скачиваний:
40
Добавлен:
30.05.2020
Размер:
351.31 Кб
Скачать

 

О 1 0 • 1, В, 1 0.1

і ї і 1 0 0 1 1

ЕЛЕМЕНТИ КОМБІНАТОРИКИ

0 0 1 * 0 1 1 0 1 9

 

10 0 1

0 111

 

0 0 0

0 110

В АЛГОРИТМІЧНИХ ЗАДАЧАХ

І

0 1 1 1 0 0

 

 

 

і 0 1 0,8

10 1

 

0 0 1

10 10 0 1

 

0 0 ( 1 1 0 1 1

 

10 11

0

0

1

 

0

0 0

 

1

 

 

1

0

 

1

 

 

Основні поняття комбінаторики

Комбінаторика - це наука, яка вивчає способи вибору та розміщення елементів деякої скінченної множини. Серед по­ нять комбінаторики розглядають наступні.

Перестановки - упорядковані послідовності всіх елементів заданої множини, в яких кожний елемент зустрічається лише один раз.

Розміщення - послідовності довжини М, утворені з N різних елементів заданої множини.

Сполучення - М-елементні підмножини будь-якої множини з N елементів (наприклад, у множини {а, Ь, с} є 3 двоелементні підмножини: {а, Ь), {а, с), {Ь, с}, причому {а, Ь} та {Ь, а} -

однакові сполучення).

Під час розв'язування практичних задач часто доводиться спиратися саме на базові поняття комбінаторики, використову­ ючи їх під час складання алгоритмів: вибирати певну кількість елементів з деякої скінченної множини елементів, що мають ті чи інші властивості, визначати усі можливі підмножини еле­ ментів, розміщувати елементи множин у певному порядку то­ що. Такі задачі називаються комбінаторними.

Наведемо кілька прикладів. Як визначити, які існують ва­ ріанти розміщення N учнів у класі, де є N місць? А які існують варіанти запрошення N знайомих у гості, якщо у вашій віталь­ ні є лише М місць (N > М)? Як визначити, які існують варіан­ ти фарбування М різними кольорами паркану, що складається з N дощок?

Існують формули, за допомогою яких можна підрахувати кількість комбінацій відповідних елементів комбінаторики. Так, кількість перестановок з iV елементів підраховується за

Формулою PN ~ N1, кількість

 

 

 

 

ї ї

ЛП

розміщень - Ад

 

Ам

 

N\

 

 

(N-M)l'

кількість сполучень - С5 =— =

 

 

 

.

 

 

 

 

 

 

 

 

 

Рм

M\(N-M)l

 

21

У цьому розділі ми з вами ознайомимося лише з окремими елементами комбінаторики, що стосуються визначення та підрахунку кількості певних елементів підмножин з усієї зада­ ної кінцевої множини елементів і найчастіше використовують­ ся під час розв'язування алгоритмічних задач. Розглядати ці питання ми будемо лише стосовно побудови алгоритмів, що розв'язують поставлену задачу.

В алгоритмізації існує достатньо задач, розв'язок яких ле­ жить суто у площині комбінаторики. Однак є і багато інших за­ дач, які використовують комбінаторні елементи як фрагмент складніпіого алгоритму. Це говорить про те, що матеріал цього розділу ми будемо використовувати неодноразово й у подаль­ ших розділах посібника.

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

Під час розгляду перестановок (permutation) нас цікавитиме не тільки кількість усіх можливих варіантів перестановок N різних предметів, розташованих на N різних місцях, а і генерування самих цих перестановок. Наприклад, для множини S = {а, Ь, с] існує 6 таких перестановок: abc, acb, bac, bca, cab, cba.

Як зазначалося вище, кількість перестановок обчислюється за формулою PN = ЛП. Цю формулу нескладно отримати за допо­ могою таких міркувань. Пронумеруємо наші елементи від 1 до N. На скількох місцях може знаходитись елемент під номе­ ром 1? Звісно, що на ЛГ місцях. Для решти елементів у нас зали­ шилося вільних (N - 1) місць. Тому елемент під номером 2 мо­ же бути розміщений вже тільки на (N - 1) місці. Загальна кіль­ кість розташувань цих двох елементів становить N * (N - 1). Аналогічно для елемента під номером 3 залишилось для розміщення лише (N - 2) місця, а загальна кількість розміщен­ ня цих трьох елементів на N місцях буде N * {N - 1) * (N - 2)і т. д. У результаті отримаємо наведену на початку формулу для обчислення кількості перестановок ЛГ елементів на N місцях:

PN = N * (N - 1) * (N - 2) * ... * 2 * 1 = Ж.

Якщо поставлена задача вимагає підрахунку кількості мож­ ливих перестановок N елементів, то вона розв'язується дуже просто: достатньо запрограмувати обчислення значення N1. Од­ нак ми вже знаємо, що при цьому навіть для не дуже великих значень N результат виходить за межі стандартних типів змінних мови програмування й у такому разі необхідно засто­ совувати довгу арифметику.

А якщо сформульована інша задача і необхідно визначити не кількість перестановок, а самі перестановки, тобто всі варіанти розміщення ЛГ елементів на N місцях? Саме таку задачу і будемо надалі розв'язувати.

22

Введемо поняття лексикографічного порядку перестановок.

Лексикографічний порядок на множині всіх перестановок визначається таким чином. Кажуть, що Р\ < Р2 тоді і тільки тоді, коли існує таке £>•!, що Pl[t] < P2[t] та Р1[і] = Р2[і] для всіх і < t.

Наведемо приклад. Між словами «алгол» та «алгоритм» існує такий лексикографічний порядок: алгол < алгоритм, оскільки для t = 5 (Р1[5] = л, Р2[5] = р) справедливі відношення Pl[t] < P2[t], Р1[і] = Р2[і] для і = 1,2,...,4.

Під час розв'язування задачі на визначення всіх пере­ становок розв'язується власне задача для отримання на кожно­ му кроці наступної за лексикографічним порядком пере­ становки. У такому разі, розташувавши у лексикографічному порядку всі задані елементи від початкового стану «за зростан­ ням» до кінцевого стану «за спаданням», отримаємо всі мож­ ливі варіанти їх перестановок.

Наведемо приклад. Нехай множина значень має початковий вигляд: 123. Відповідно до лексикографічного порядку наступ­ ним за зростанням буде число 132, оскільки Р1[1] = Р2[1], а Р1[2] < Р2[2]. Запишемо всю лексикографічну послідовність: 123 < 132 < 213 < 231 < 312 < 321.

Тепер можемо зробити висновок, що задача на визначення всіх можливих перестановок перетворюється на задачу про ви­ значення наступного значення у лексикографічному порядку.

Розглянемо спочатку логіку побудови алгоритму. Почнемо з визначення початкового стану заданої множини елементів. Не­ хай це буде послідовність елементів, розташованих за зростан­ ням (мал. 1, а). Перебравши усі можливі варіанти розташуван­ ня її елементів, ми маємо прийти до варіанта їх розташування за спаданням.

За яким же алгоритмом будувати всі проміжні варіанти? Можна запропонувати такий.

Будемо розглядати праві фрагменти заданої послідовності і намагатися покроково упорядковувати їх за спаданням. Спо­ чатку розглянемо лише перший справа елемент. Чи стоїть він на своєму місці? Так, оскільки підпослідовність з одного еле­ мента є спадною. Це означає, що цей фрагмент послідовності задовольняє вимоги кінцевого стану.

Тепер розширимо поточний фрагмент підпослідовності, підключивши до нього попередній елемент, той, що розташова­ ний зліва (мал. 1, б). Новий елемент не задовольняє вимоги кінцевого стану, до якого ми прагнемо. Це означає, що він стоїть не на своєму місці. Зафіксуємо положення цього елемен­ та, визначивши його як граничне. Таким чином, на поточний Момент граничним елементом, що порушив спадання правої Частини послідовності, є 6-й елемент. Тут слід зауважити, що

23

Соседние файлы в папке Методи побудови алгоритмів та їх аналіз. Караванова Т.П.