Комбинаторные алгоритмы Индикативные множества Пример комбинаторной задачи:
Комбинаторные алгоритмы Индикативные множества Пример комбинаторной задачи: построение сочетаний с помощью индикативных множеств. Полное построение алгоритма для решения комбинаторной задачи 1
Комбинаторные алгоритмы. Сочетания (выборки) • Задачу имеет смысл называть комбинаторной, если ее решение состоит в переборе элементов x множества X. • Задача: Сколькими способами можно выбрать M из N различных предметов? • Ответ - сочетания Формула Ньютона С i. N = 2 N 2
Комбинаторные алгоритмы. Сочетания • Задача. В союзе кинематографистов (СК) состоит определенное количество кинематографистов. Ежегодно в Канны на кинофестиваль едет некоторое количество из них. Сформировать и вывести последовательность командировок (все возможные варианты), если каждая следующая делегация содержит в себе одного нового члена СК. • (Вариант формулировки: отправка делегации болельщиков на Олимпиаду) 3
Постановка задачи. • Дано: – Общее количество кинематографистов, состоящих в СК – Количество человек, уезжающих в одну командировку. • Надо: – Вывести последовательность ежегодных командировок. • Дополнительная информация: – Каждая новая командировка содержит одного нового члена делегации. 4
Построение модели • Пусть количество кинематографистов 5, а количество членов делегации 3. • Пометим всех их целыми числами (1, 2, 3, 4, 5). • Таким образом, необходимо выписать последовательность сочетания трех чисел из пяти. • Сколько сочетаний по 3 из 5? • Сkn=n!/(k! (n-k)!) 5
Организация сочетаний с помощью индикативных множеств. • C 35 = 5! / (3! (5 -3)!) = 5! / (3!2!) = 1*2*3*4*5 / (1*2*3*1*2) =10 • Как выписать сочетания? • Обозначим состояние поездки одного кинематографиста: 1 - едет; 0 - не едет (бинарная арифметика). • Тогда состав делегации может быть обозначен вектором с пятью компонентами. • Например, вектор (1, 0, 0, 1, 1) означает, что 1, 4, 5 кинематографисты включены в делегацию, а 2 и 3 нет. 6
Организация сочетаний с помощью индикативных множеств • Можно составить множество всех возможных делегаций, количество которых 2 n. Для нашего примера 25=32. • Определение: – Индикативное множество - множество, состоящее только из единиц и нулей. (Индикатор – место, на котором они стоят. ) • Составим индикативное множество из n элементов 7
Организация сочетаний с помощью индикативных множеств 8
Построение алгоритма • Входные данные: – n - количество членов союза кинематографистов (СК); – K - количество членов делегации. • Выходные данные: – Составы делегаций • Алгоритм: – Ввести n и k. – Выписать числа в двоичном коде от 0 до 2 N – Выбрать числа, у которых ровно k единиц. – Для каждого такого числа выписать номера разрядов, в которых стоит единица, и вывести эти номера разрядов (список сочетаний). 9
Проверка правильности алгоритма • Среди всех двоичных чисел от 0 до 2 n найдутся числа с k единицами (k
Анализ алгоритма и его сложности • Размерность задачи n. • Количество двоичных чисел 2 n, • Сл-но, эта часть алгоритма потребует О(2 n) шагов. В каждом числе ищем количество единиц за О(n) шагов (либо сумм, либо сравнений). • Для каждой Сkn выписываем k разрядов за О(Сkn) = О(n!/(k!(n-k)!) k) шагов. • Итого f. A(n)=O(2 n n+ n!/(k!(n-k)!) k) = O(n [2 n+(n-1)!/((k-1)! (n-k)!)] 11 • (применить формулу Стирлинга для вычисления факториала)
• Задание 1: Пусть все члены СК имеют номера членских билетов от 1 до n. Написать программу, которая выводит все возможные составы делегаций из k членов согласно их членским билетам (все возможные сочетания из n по k - Сkn ) • Задание 2: Пусть имеется алфавит, состоящий из n символов. Описать полное построение алгортима, который для заданной строки, составленной из символов данного алфавита, вычисляет частоту появления каждого символа. 12
л3_1 комбинаторика.ppt
- Количество слайдов: 12

