Главная > Дискретная математика. Алгоритмы и программы
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
След.
Макеты страниц

Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO

4.7. Порождение композиций и разбиений

Рассмотрим задачу порождения разбиений положительного числа в последовательность неотрицательных целых чисел так что

Разбиение называется композицией числа если учитывается порядок чисел Как правило, представляют интерес композиции, в которых либо все либо все

Разбиение называется разбиением числа если все и порядок чисел не важен. По сути разбиение числа является мультимножеством (см. п. 1.8).

Рассмотрим примеры разбиения числа

— все композиции числа три из двух частей, — все композиции числа три из трех частей, — все композиции числа три из двух частей,

— все разбиения числа три.

Композиции ...

Композицию где числа можно интерпретировать следующим образом. Каждое значение представим как сумму единиц, количество которых Индекс у элемента 1, показывает его принадлежность разложению числа Таким образом, мы ввели к типов различных элементов значение каждого из них равно единице. Теперь любую композицию можно представить как сумму, составленную из произвольных единиц множества Суммируя подобные единицы 1, с одинаковыми индексами, получим соответствующие значения композиции. Данное соответствие является взаимно однозначным, откуда и следует, что число композиций равно числу сочетаний с повторениями Каждое из сочетаний можно интерпретировать как расстановку длины в которой единиц и нуль, т.е. каждому сочетанию ставим в соответствие - -разрядное число из единиц и нулей; верно и обратное. Суммируя в таком числе слева направо единицы между нулями (их ), будем получать соответствующие значения членов (их k) композиции. Например, одному из сочетаний 11011100111101111111010 соответствует композиция (2,3,0,4,7,1,0) числа 17.

Ясно, что методы предыдущего раздела генерации подмножеств множества легко применить к последовательному порождению рассмотренных композиций

Композиции ...

Удобное представление композиций получается из рассмотрения целого числа как отрезка прямой, состоящего из отрезков единичной длины. Линия разделена точками, и композиция

(см. скан)

получается пометкой некоторых из них. Элементами композиции являются просто расстояния между смежными точками. На рисунке показано графическое представление композиции (2,1,2,2,1) для числа Очевидно, что каждая композиция числа соответствует способу выбора подмножества из точек. Каждой точке можно сопоставить двоичную цифру, и, таким образом, композиции будет соответствовать -разрядное число. В этой интерпретации композиция из Участей соответствует -разрядному числу ровно с единицами, и поэтому существует таких композиций.

Воспользуемся методами предыдущего раздела для генерации композиций Учитывая, что в композиции каждый из тогда для новых переменных соответствующая композиция будет для числа Генерация слагаемых композиции подробно разобрана в предыдущем разделе, добавляя к каждому из по единице, получим слагаемые композиции

Разбиения

Разбиения отличаются от композиций тем, что порядок компонент не важен, так что, например, не делается различия между, скажем, Таким образом, разбиение можно рассматривать как мультимножество, которое записывается следующим способом:

где имеется вхождений вхождений вхождений и т. д. и Каждое разбиение удовлетворяет условию

Рассмотрим пример генерации разбиений для Последовательность генерации разбиений данного примера далее будет положена в основу алгоритма порождения полного списка разбиений.

Идея приведенного списка разбиений состоит в том, чтобы переходить от одного разбиения к следующему, рассматривая самый правый элемент разбиения. Если достаточно

велико можно исключить два для того, чтобы добавить еще одно включить одно если в текущий момент его нет). Если то достаточно велико для того, чтобы добавить Все, что остается, превращается в соответствующее число единиц и формируется новое разбиение.

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

Алгоритм 4.13. Генерация разбиений числа

(см. скан)

Алгоритм 4.13 линеен, так как число операций, необходимых для перехода от одного разбиения к другому, ограничено константой, не зависящей от

Программа на языке Pascal реализации рассмотренного метода генерации разбиений чисел приводится в алгоритме 4.14. Отметим, что в программе число для разбиения читается из файла, а порождаемые разбиения сохраняются в файле. Попутно программа вычисляет полное время генерации всех разбиений с точностью до сотых долей секунды, которое сохраняется в конце файла сгенерированных разбиений.

Алгоритм 4.14. Программа на Pascal'е генерации разбиений числа

(см. скан)

(см. скан)

1
Оглавление
email@scask.ru