Комбинаторика(8).ppt
- Количество слайдов: 61
КОМБИНАТОРИКА
Задачи комбинаторики определение количества объектов заданного типа перебор всех объектов заданного типа нумерация объектов (получить по номеру объекта значение объекта и наоборот) Структуры алгоритмы компьютерной обработки данных 2
Основные комбинаторные объекты Размещения без повторений Размещения с повторениями Перестановки без повторений Перестановки с повторениями Сочетания без повторений Сочетания с повторениями Структуры алгоритмы компьютерной обработки данных 3
Перестановки Перестановка n элементов – последовательность этих элементов в некотором заданном порядке. Структуры алгоритмы компьютерной обработки данных 4
Процедура генерации перестановок perest(k) <если> k<0 <то> <перестановка построена> <иначе> <для> i <от> 0 <до> k a[k] <-> a[i]; perest(k-1); a[k] <-> a[i]; Структуры алгоритмы компьютерной обработки данных 5
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 – 0123 1 – 0132 2 – 0213 3 – 0231 4 – 0312 5 – 0321 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: Структуры алгоритмы компьютерной обработки данных 6
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: Заметим, что количество перестановок, начинающихся с 0, 1, 2 или 3 одинаково и равно 6=3! (количество перестановок из 3 элементов) Структуры алгоритмы компьютерной обработки данных 7
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) Структуры алгоритмы компьютерной обработки данных 8
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) то есть 16 -я перестановка будет находиться во 2 -й группе на 4 -м месте Структуры алгоритмы компьютерной обработки данных 9
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) В исходных элементах находим 2 -ю по порядку начиная с 0 цифру 0 1 2 3 Структуры алгоритмы компьютерной обработки данных 10
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) В исходных элементах находим 2 -ю по порядку начиная с 0 цифру 0 1 2 3 Результат: 2 Структуры алгоритмы компьютерной обработки данных 11
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 16 – 2301 17 – 2310 0 1 2 3 Результат: 2 Структуры алгоритмы компьютерной обработки данных 12
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 16 – 2301 17 – 2310 0 1 2 3 Результат: 2 Структуры алгоритмы компьютерной обработки данных 13
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), то есть 16 -я перестановка будет находиться во 2 -й группе на 0 -м месте : 0 1 2 3 Результат: 2 Структуры алгоритмы компьютерной обработки данных 14
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), В исходных элементах находим 2 -ю по порядку начиная с 0 цифру, учитывая, что 2 уже взяли: 0 1 2 3 Результат: 2 Структуры алгоритмы компьютерной обработки данных 15
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), В исходных элементах находим 2 -ю по порядку начиная с 0 цифру, учитывая, что 2 уже взяли: 0 1 2 3 Результат: 23 Структуры алгоритмы компьютерной обработки данных 16
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 0: 1!=0: 1=0(ост 0), 0 1 2 3 Результат: 23 Структуры алгоритмы компьютерной обработки данных 17
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 0: 1!=0: 1=0(ост 0), то есть 16 -я перестановка будет находиться в 0 -й группе на 0 -м месте : 0 1 2 3 Результат: 23 Структуры алгоритмы компьютерной обработки данных 18
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 0: 1!=0: 1=0(ост 0), В исходных элементах находим 0 -ю по порядку начиная с 0 цифру, учитывая, что 2 и 3 уже взяли: 0 1 2 3 Результат: 23 Структуры алгоритмы компьютерной обработки данных 19
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 0: 1!=0: 1=0(ост 0), В исходных элементах находим 0 -ю по порядку начиная с 0 цифру, учитывая, что 2 и 3 уже взяли: 0 1 2 3 Результат: 230 Структуры алгоритмы компьютерной обработки данных 20
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем перестановку с номером m=16: 3!=16: 6=2(ост 4) 4: 2!=4: 2=2(ост 0), 0: 1!=0: 1=0(ост 0), Последняя оставшаяся цифра равна 1: 0 1 2 3 Результат: 2301 Структуры алгоритмы компьютерной обработки данных 21
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем номер перестановки “ 2130”: 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Структуры алгоритмы компьютерной обработки данных 22
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем номер перестановки “ 2130”: Первая 2 означает, что раньше перестановки “ 2130” находятся 2 группы перестановок (начинающихся с “ 0” и с “ 1”) по 3! элементов в каждой, то есть 2*3! элементов: 0 1 2 3 2*3! Структуры алгоритмы компьютерной обработки данных 23
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 14 – 2103 15 – 2130 16 – 2301 17 – 2310 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем номер перестановки “ 2130”: Вторая 1 означает, что во второй группе раньше перестановки “ 2130” находится 1 группа перестановок (начинающаяся с “ 20”) из 2! элементов, то есть 1*2! элементов: 0 1 2 3 2*3!+1*2! Структуры алгоритмы компьютерной обработки данных 24
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 14 – 2103 15 – 2130 16 – 2301 17 – 2310 Найдем номер перестановки “ 2130”: Третья 3 означает, что раньше перестановки “ 2130” находится еще 1 группа перестановок (начинающаяся с “ 210”) из 1! элементов, то есть 1*1! элементов: 0 1 2 3 2*3!+1*2!+1*1! Структуры алгоритмы компьютерной обработки данных 25
Нумерация перестановок Пронумеруем всевозможные перестановки из n=4 элементов (0, 1, 2, 3), записанные в лексикографическом порядке: 0 1 2 3 4 5 – 0123 – 0132 – 0213 – 0231 – 0312 – 0321 12 – 2013 13 – 2031 6 – 1023 7 – 1032 8 – 1203 9 – 1230 10 – 1302 11 – 1320 18 – 3012 19 – 3021 20 – 3102 21 – 3120 22 – 3201 23 - 3210 Найдем номер перестановки “ 2130”: 14 – 2103 15 – 2130 16 – 2301 17 – 2310 2*3!+1*2!+1*1!=15 Структуры алгоритмы компьютерной обработки данных 26
Размещения с повторениями Размещение с повторениями из n по k – последовательность из чисел 0. . n-1 длиной k. Количество размещений с повторениями n =3, k=2 00 01 02 10 11 12 20 21 22 Структуры алгоритмы компьютерной обработки данных 27
Генерация размещений с повторениями generate(n, k) <если> k=-1 <то> <размещение построено> <иначе> <для> i <от> 0 <до> n-1 a[k]=i generate(n, k-1) Структуры алгоритмы компьютерной обработки данных 28
Нумерация размещений с повторениями Размещению с повторениями соответствует число в системе счисления с основанием n. Значение этого числа можно рассматривать как номер размещения. Пример: n=3, k=2. 0 00 1 01 2 02 3 10 4 11 5 12 6 20 7 21 Найдем размещение с номером m=7: 710=213 Структуры алгоритмы компьютерной обработки данных 8 22 29
Размещения без повторений Размещение без повторений из n по k – последовательность из чисел 0. . n-1 длиной k без повторений. Количество размещений без повторений n =3, k=2 01 02 10 12 20 21 Структуры алгоритмы компьютерной обработки данных 30
Генерация размещений без повторений generate(n, k, s - <множество>); <если> k=0 <то> <размещение построено> <иначе> <для> i <от> 1 <до> n <если> <i не входит в s> <то> a[k]=i generate(n, k-1, s+[i]) Структуры алгоритмы компьютерной обработки данных 31
Нумерация размещений без повторений Нумерация аналогична нумерации перестановок. Например, n=4, k=2: 0 1 2 3 4 5 6 7 8 9 10 11 01 02 03 10 12 13 20 21 23 30 31 32 Найдем размещение с номером m=5: То есть из чисел 0, 1, 2, 3 выбираем 1 -е: Результат: 1 Структуры алгоритмы компьютерной обработки данных 32
Нумерация размещений без повторений Нумерация аналогична нумерации перестановок. Например, n=4, k=2: 0 1 2 3 4 5 6 7 8 9 10 11 01 02 03 10 12 13 20 21 23 30 31 32 Найдем размещение с номером m=5: То есть из чисел 0, 2, 3 выбираем 2 -е: Результат: 13 Структуры алгоритмы компьютерной обработки данных 33
Нумерация размещений без повторений Нумерация аналогична нумерации перестановок. Например, n=4, k=2: 0 1 2 3 4 5 6 7 8 9 10 11 01 02 03 10 12 13 20 21 23 30 31 32 Найдем номер размещения “ 03”. номер будет являться суммой: первое слагаемое равно произведению на количество чисел из 0, 1, 2, 3, меньших 0: Результат: Структуры алгоритмы компьютерной обработки данных 34
Нумерация размещений без повторений Нумерация аналогична нумерации перестановок. Например, n=4, k=2: 0 1 2 3 4 5 6 7 8 9 10 11 01 02 03 10 12 13 20 21 23 30 31 32 Найдем номер размещения “ 03”. второе слагаемое равно произведению количество чисел из 1, 2, 3, меньших 3: на Результат: Структуры алгоритмы компьютерной обработки данных 35
Нумерация размещений без повторений Нумерация аналогична нумерации перестановок. Например, n=4, k=2: 0 1 2 3 4 5 6 7 8 9 10 11 01 02 03 10 12 13 20 21 23 30 31 32 Найдем номер размещения “ 03”. второе слагаемое равно произведению количество чисел из 1, 2, 3, меньших 3: на Результат: Структуры алгоритмы компьютерной обработки данных 36
Сочетания Сочетание из n по k – множество из чисел 1. . n имеющее k элементов. Количество сочетаний n =3, k=2 12 13 23 Структуры алгоритмы компьютерной обработки данных 37
Рекуррентное тождество 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 Треугольник Паскаля Структуры алгоритмы компьютерной обработки данных 38
Генерация сочетаний generate(n, k, s - <множество>); <если> n>=k <то> <если> k=-1 <то> <сочетание построено в s> <иначе> generate(n-1, k-1, s+[n]) generate(n-1, k, s) Структуры алгоритмы компьютерной обработки данных 39
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 40
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 Количество сочетаний располагается в 5 -й строке на 3 -ем месте 1 5 7 8 1 9 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 41
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 Все 10 сочетаний получены как сумма 6 содержащих 1 и 4 1 не содержащих 1 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 42
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 8 -е сочетание будет входить в 4 (7 -е, 8 -е, 9 -е, 10 -е)не 1 содержащих 1 сочетания, на 2 месте 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 43
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 4 сочетания состоят из 3 и 1, причем искомое 2 -е 1 сочетание входит в первые 3 на 2 месте 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 44
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 3 сочетания состоят из 2 и 1, причем искомое 2 -е 1 сочетание входит в первые 2 на 2 месте 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 45
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 2 сочетания состоят из 1 и 1, причем искомое 2 -е 1 сочетание входит во вторую 1 на 1 месте 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 46
Нумерация сочетаний Воспользуемся треугольником Паскаля: n=5 k=3 1 1 2 1 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем сочетание с номером m=8 Заканчиваем путь в вершине треугольника 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 47
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем сочетание с номером m=8 Выделим строки, в которых сдвигались влево, так как в этом 1 случае элемент включался в сочетание 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 48
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 6 5 2 3 1 3 4 5 1 4 10 4 Найдем сочетание с номером m=8 Получаем сочетание: 10 6 5 7 235 1 8 1 9 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 49
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 6 5 2 3 1 3 4 5 1 4 10 4 Найдем номер сочетания “ 134” 10 6 1 5 7 8 1 9 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 50
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Так как 1 входит в сочетание, то сдвигаемся влево 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 51
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Так как 2 не входит в сочетание, то сдвигаемся вправо 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 52
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Так как 3 входит в сочетание, то сдвигаемся влево 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 53
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Так как 4 входит в сочетание, то сдвигаемся влево 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 54
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Так как 5 не входит в сочетание, то сдвигаемся вправо 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 55
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем номер сочетания “ 134” Все сочетания имели номера от 1 до 10, значит первые 6 имеют 1 номера от1 до 6 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 56
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 9 Найдем номер сочетания “ 134” Последние 3 сочетания из 6 имеют номера от 4 до 6 1 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 57
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 3 4 6 5 2 3 1 4 10 4 5 1 10 6 1 5 7 8 1 9 Найдем номер сочетания “ 134” Первые 2 сочетания из 3 имеют номера от 4 до 5 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 58
Нумерация сочетаний Воспользуемся треугольником Паскаля: 5 4 1 3 2 1 1 1 2 1 n=5 k=3 1 3 6 5 2 3 1 3 4 5 1 4 10 4 Найдем номер сочетания “ 134” Первое сочетание из 2 имеет номер 10 6 1 5 7 8 1 9 4 10 123 124 125 134 135 145 234 235 245 345 Структуры алгоритмы компьютерной обработки данных 59
Применение комбинаторных объектов Задача коммивояжера Есть п городов и задана матрица А[1. . п, 1. . п], которая содержит расстояние между всеми парами городов Аi j – расстояние от города i до города j. Найти замкнутый маршрут, проходящий через все города, наименьшей. Задача о рюкзаке Есть п предметов, каждый i предмет имеет массу тi и стоимость сi. Есть рюкзак; максимальная масса предметов, которую он выдерживает, равна М. Надо уложить предметы в рюкзак так, чтобы сумма стоимости их была максимальной. Задача о двух рюкзаках Есть п предметов, каждый i предмет имеет массу тi. Распределить предметы по двум рюкзакам так, чтобы массы рюкзаков были наиболее близки. Структуры алгоритмы компьютерной обработки данных 60
Применение комбинаторных объектов Задача о расстановке ферзей Расставить на шахматной доске размера nxn n ферзей так, чтобы они не били друга. Задача о последовательности из 0 и 1 Из 0 и 1 строят последовательность длины n. Найти все такие последовательности, не содержащие k идущих подряд единиц. Задача о скобочных последовательностях Вывести все правильные скобочные последовательности длины 2 n, используя только круглые скобки. Задача о составлении выражения Между числами a 1, a 2, …, an вставить знаки арифметических операций + и - так, чтобы результат вычисления полученного арифметического выражения был равен заданному целому числу b. Структуры алгоритмы компьютерной обработки данных 61
Комбинаторика(8).ppt