Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.pdf
Скачиваний:
95
Добавлен:
22.05.2015
Размер:
379.64 Кб
Скачать

Комбинаторная теория

23

соответствие не обычные двоичные числа, а числа в коде Грея. Для кода Грея как раз и характерно то, что два соседних двоичных числа отличаются друг от друга не более чем на один разряд. Для генерирования последовательности чисел в коде Грея можно использовать следующий алгоритм (B – двоичное число и G – его код Грея):

начнём с B=0 ;

положим G [1]=B[1] ;

G[i ]=B [i]xor B[i1], 2in .

Втаблице ниже приведено соответствие между обычными трёхразрядными двоичными числами и числами в коде Грея (D обозначает десятичное число):

D

B

G

D

B

G

 

 

 

 

 

 

0

000

000

4

100

110

 

 

 

 

 

 

1

001

001

5

101

111

 

 

 

 

 

 

2

010

011

6

110

101

 

 

 

 

 

 

3

011

010

7

111

100

 

 

 

 

 

 

Генерация размещений без повторений

Алгоритмы генерации размещений без повторений достаточно сложны и здесь не рассматриваются.

Генерация размещений с повторениями

Рассмотрим генерацию размещений с повторениями на примере множества X ={a ,b , c} :

(1,1),(1,2),(1,3)

(2,1),(2,2),(2,3) (3,1),(3,2),(3,3)

Неправда ли, знакомая картина? Для размещений по два и по три можно использовать вложенные циклы, а для большего количества элементов в размещении можно воспользоваться рекурсией.

Генерация сочетаний с повторениями

Аналогично рассмотрим генерацию сочетаний с повторениями на примере множества

X ={a ,b , c} :

(1,1),(1,2), (1,3)

(2,2),(2,3) (3,3)

Также часто встречающаяся последовательность. Для сочетаний по два можно использовать вложенные циклы, а в остальных случаях – рекурсию.

Генерация всех разбиений

Алгоритмы генерации всех разбиений сложны и потребуют отдельную лекцию, поэтому здесь не рассматриваются.

24

Симоненко Е.А. Дискретная математика. Лекции

Библиография

Для первоначального ознакомления с комбинаторикой можно воспользоваться учебником [Кузьмин: комбинаторика], но в нём рассматриваются не все вопросы, кроме того, имеются отличия в терминологии. Хорошее введение в комбинаторику с большим количеством примеров и задач даётся в [Виленкин: комбинаторика]. Можно также почитать [Окулов: ДМ] и [Новиков]. Есть также несколько классических учебников по комбинаторике: [Риордан], [Холл]. Об алгоритмах комбинаторики можно почитать в некоторых книгах по алгоритмам, например, в четвёртом томе «Искусства программирования» Кнута, а также в некоторых учебниках по комбинаторике, написанных специально для программистов, таких как [Окулов: ДМ] и [Новиков].