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

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

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

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

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

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

1.[Виленкин: комбинаторика] Виленкин Н.Я., Виленкин А.Н., Виленкин П.А. Комбинаторика. – М.: ФИМА, МЦНМО, 2006. – 400 с.

2.[Кузьмин: комбинаторика] Кузьмин О.В. Перечислительная комбинаторика: учеб. пособ. – М.: Дрофа, 2005. – 110 с.

3.[Новиков] Новиков Ф.А. Дискретная математика для программистов. – 2-е изд. – СПб.: Питер, 2004. – 364 с.

4.[Окулов: ДМ] Окулов С.М. Дискретная математика. Теория и практика решения задач по информатике: учебное пособие. – М.: БИНОМ. Лаборатория знаний, 2008. – 422 с.

5.[Риордан] Риордан Дж. Введение в комбинаторный анализ. – Пер. с англ. – М.: Издательство Иностранной Литературы, 1963. – 288 с.

6.[Холл] Холл М. Комбинаторика. – М.: Мир, 1970. – 424 с.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]