close

Вход

Забыли?

вход по аккаунту

?

Кормен Т. - Алгоритмы. Построение и анализ .pdf

код для вставкиСкачать
Оглавление
1 Введение
1.1. Алго░и▓м╗ . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Анализ алго░и▓мов . . . . . . . . . . . . . . . . . . . .
1.3. По▒▓░оение алго░и▓мов . . . . . . . . . . . . . . . . .
1.3.1. П░ин╢ип └░аздел┐й и вла▒▓в│й┴ . . . . . . . . .
1.3.2. Анализ алго░и▓мов ▓ипа └░аздел┐й и вла▒▓в│й┴
7
7
11
15
16
17
I Ма▓ема▓и╖е▒кие о▒нов╗ анализа алго░и▓мов
24
Введение25
2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
26
2.1. А▒имп▓о▓и╖е▒кие обозна╖ени┐ . . . . . . . . . . . . . 26
2.2. С▓анда░▓н╗е ┤│нк╢ии и обозна╖ени┐ . . . . . . . . . 30
3 С│мми░ование
39
3.1. С│мм╗ и и╡ ▒вой▒▓ва . . . . . . . . . . . . . . . . . . . 39
3.2. О╢енки ▒│мм . . . . . . . . . . . . . . . . . . . . . . . . 43
4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
4.1. Ме▓од под▒▓ановки . . . . . . . . . . . . . .
4.2. П░еоб░азование в ▒│мм│ . . . . . . . . . . .
4.3. Об╣ий ░е╢еп▓ . . . . . . . . . . . . . . . . .
? 4.4 Доказа▓ел╝▒▓во Тео░ем╗ 4.1 . . . . . . . . .
4.4.1. Сл│╖ай на▓│░ал╝н╗╡ ▒▓епеней . . .
4.4.2. Цел╗е п░иближени┐ ▒ве░╡│ и ▒низ│ .
5 Множе▒▓ва
5.1. Множе▒▓ва
5.2. О▓но╕ени┐
5.3. Ф│нк╢ии .
5.4. Г░а┤╗ . . .
5.5. Де░ев╝┐ . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
50
53
56
59
59
63
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
76
79
82
87
2
5.5.1. Де░ев╝┐ без в╗деленного ко░н┐ . . . . . . . . . 87
5.5.2. Де░ев╝┐ ▒ ко░нем. О░иен▓и░ованн╗е де░ев╝┐ . 89
5.5.3. Двои╖н╗е де░ев╝┐. Пози╢ионн╗е де░ев╝┐ . . . 91
6 Комбина▓о░ика и ве░о┐▓но▒▓╝
6.1. Под▒╖е▓ коли╖е▒▓в . . . . . . . . . . . . . . . . .
6.2. Ве░о┐▓но▒▓╝ . . . . . . . . . . . . . . . . . . . . .
6.2.1. Ди▒к░е▓ное ░а▒п░еделение ве░о┐▓но▒▓ей
6.3. Ди▒к░е▓н╗е ▒л│╖айн╗е вели╖ин╗ . . . . . . . . .
6.4. Геоме▓░и╖е▒кое и биномиал╝ное ░а▒п░еделени┐ .
6.5. Хво▒▓╗ биномиал╝ного ░а▒п░еделени┐ . . . . . .
6.6. Ве░о┐▓но▒▓н╗й анализ . . . . . . . . . . . . . . .
6.6.1. Па░адок▒ дн┐ ░ождени┐ . . . . . . . . . .
6.6.2. Ша░╗ и │░н╗ . . . . . . . . . . . . . . . .
6.6.3. У╖а▒▓ки пов▓о░┐╛╣и╡▒┐ и▒╡одов . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II Со░▓и░овка и по░┐дков╗е ▒▓а▓и▒▓ики
96
96
102
103
108
113
118
123
123
125
126
132
Введение133
7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
7.1. К│╖и . . . . . . . . . . . . . . . . . . . . .
7.2. Со╡░анение о▒новного ▒вой▒▓ва к│╖и . .
7.3. По▒▓░оение к│╖и . . . . . . . . . . . . .
7.4. Алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и
7.5. О╖е░еди ▒ п░ио░и▓е▓ами . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
136
136
138
140
143
143
8 Б╗▒▓░а┐ ▒о░▓и░овка
8.1. Опи▒ание б╗▒▓░ой ▒о░▓и░овки . . . . . . . . . .
8.2. Рабо▓а б╗▒▓░ой ▒о░▓и░овки . . . . . . . . . . . .
8.3. Ве░о┐▓но▒▓н╗е алго░и▓м╗ б╗▒▓░ой ▒о░▓и░овки
8.4. Анализ б╗▒▓░ой ▒о░▓и░овки . . . . . . . . . . . .
8.4.1. Анализ наи╡│д╕его ▒л│╖а┐ . . . . . . . . .
8.4.2. Анализ ▒░еднего в░емени ░або▓╗ . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
148
148
151
155
157
157
158
.
.
.
.
166
166
169
171
174
10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
10.1. Миним│м и мак▒им│м . . . . . . . . . . . . . . . . . .
10.2. В╗бо░ за линейное в ▒░еднем в░ем┐ . . . . . . . . . .
10.3. В╗бо░ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐ . . . . . .
180
181
182
185
9 Со░▓и░овка за линейное в░ем┐
9.1. Нижние о╢енки дл┐ ▒о░▓и░овки
9.2. Со░▓и░овка под▒╖е▓ом . . . . .
9.3. Ци┤░ова┐ ▒о░▓и░овка . . . . . .
9.4. Со░▓и░овка в╗╖е░п╗ванием . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
III С▓░│к▓│░╗ данн╗╡
192
Введение193
11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
197
11.1. С▓еки и о╖е░еди . . . . . . . . . . . . . . . . . . . . . . 197
11.2. Св┐занн╗е ▒пи▒ки . . . . . . . . . . . . . . . . . . . . . 201
11.3. Реализа╢и┐ │каза▓елей и запи▒ей ▒ не▒кол╝кими пол┐ми206
11.4. П░ед▒▓авление ко░нев╗╡ де░ев╝ев . . . . . . . . . . . 210
12 Хе╕-▓абли╢╗
12.1. П░┐ма┐ ад░е▒а╢и┐ . . . . . . . . . .
12.2. Хе╕-▓абли╢╗ . . . . . . . . . . . . .
12.3. Хе╕-┤│нк╢ии . . . . . . . . . . . .
12.3.1. Деление ▒ о▒▓а▓ком . . . . .
12.3.2. Умножение . . . . . . . . . .
12.3.3. Униве░▒ал╝ное ╡е╕и░ование
12.4. О▓к░╗▓а┐ ад░е▒а╢и┐ . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13 Двои╖н╗е де░ев╝┐ пои▒ка
13.1. Ч▓о ▓акое двои╖ное де░ево пои▒ка? .
13.2. Пои▒к в двои╖ном де░еве . . . . . . . .
13.3. Добавление и │даление ╜лемен▓а . . .
? 13.4 Сл│╖айн╗е двои╖н╗е де░ев╝┐ пои▒ка .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
217
217
219
225
226
227
228
231
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
242
243
245
248
252
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
262
262
264
267
271
15 Пополнение ▒▓░│к▓│░ данн╗╡
15.1. Динами╖е▒кие по░┐дков╗е ▒▓а▓и▒▓ики . . . . . . . . .
15.2. Об╣а┐ ▒╡ема ░або▓╗ ▒ дополни▓ел╝ной ин┤о░ма╢ией
15.3. Де░ев╝┐ п░омеж│▓ков . . . . . . . . . . . . . . . . . . .
280
280
285
288
IV Ме▓од╗ по▒▓░оени┐ и анализа алго░и▓мов
296
14 К░а▒но-╖е░н╗е де░ев╝┐
14.1. Свой▒▓ва к░а▒но-╖е░н╗╡ де░ев╝ев
14.2. В░а╣ени┐ . . . . . . . . . . . . . . .
14.3. Добавление ве░╕ин╗ . . . . . . . .
14.4. Удаление . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
Введение297
16 Динами╖е▒кое п░ог░амми░ование
16.1. Пе░емножение не▒кол╝ки╡ ма▓░и╢ . . . . . . . . . .
16.2. Когда п░именимо динами╖е▒кое п░ог░амми░ование
16.3. Наибол╝╕а┐ об╣а┐ подпо▒ледова▓ел╝но▒▓╝ . . . . .
16.4. Оп▓имал╝на┐ ▓░ианг│л┐╢и┐ много│гол╝ника . . . .
.
.
.
.
299
300
307
312
317
4
17 Жадн╗е алго░и▓м╗
326
17.1. Зада╖а о в╗бо░е за┐вок . . . . . . . . . . . . . . . . . . 326
17.2. Когда п░именим жадн╗й алго░и▓м? . . . . . . . . . . 330
17.3. Код╗ Ха┤┤мена . . . . . . . . . . . . . . . . . . . . . . 333
? 17.4 Тео░е▓и╖е▒кие о▒нов╗ жадн╗╡ алго░и▓мов . . . . . . 341
17.4.1. Ма▓░оид╗ . . . . . . . . . . . . . . . . . . . . . 341
17.4.2. Жадн╗е алго░и▓м╗ дл┐ взве╕енного ма▓░оида343
? 17.5 Зада╖а о ░а▒пи▒ании . . . . . . . . . . . . . . . . . . . 346
18 Амо░▓иза╢ионн╗й анализ
18.1. Ме▓од г░│ппи░овки . . . . . . . . . . . . . .
18.2. Ме▓од п░едопла▓╗ . . . . . . . . . . . . . .
18.3. Ме▓од по▓ен╢иалов . . . . . . . . . . . . . .
18.4. Динами╖е▒кие ▓абли╢╗ . . . . . . . . . . . .
18.4.1. Ра▒╕и░ение ▓абли╢╗ . . . . . . . . .
18.4.2. Ра▒╕и░ение и ▒ок░а╣ение ▓абли╢╗
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
V Более ▒ложн╗е ▒▓░│к▓│░╗ данн╗╡
352
353
356
359
362
362
365
372
Введение373
19 Б-де░ев╝┐
376
19.1. Оп░еделение Б-де░ева . . . . . . . . . . . . . . . . . . 379
19.2. О▒новн╗е опе░а╢ии ▒ Б-де░ев╝┐ми . . . . . . . . . . . 381
19.3. Удаление ╜лемен▓а из Б-де░ева . . . . . . . . . . . . . 388
20 Биномиал╝н╗е к│╖и
20.1. Биномиал╝н╗е де░ев╝┐ и биномиал╝н╗е к│╖и
20.1.1. Биномиал╝н╗е де░ев╝┐ . . . . . . . . .
20.1.2. Биномиал╝н╗е к│╖и . . . . . . . . . . .
20.2. Опе░а╢ии ▒ биномиал╝н╗ми к│╖ами . . . . .
20.2.1. Об║единение дв│╡ к│╖ . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
394
395
395
397
399
400
21 Фибона╖╖иев╗ к│╖и
21.1. С▓░оение ┤ибона╖╖иевой к│╖и . . . . . . . . . .
21.2. Опе░а╢ии, п░ед│▒мо▓░енн╗е дл┐ ▒ливаем╗╡ к│╖
21.3. Умен╝╕ение кл╛╖а и │даление ве░╕ин╗ . . . . .
21.4. О╢енка мак▒имал╝ной ▒▓епени . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
413
414
416
425
429
.
.
.
.
.
22 Си▒▓ем╗ непе░е▒ека╛╣и╡▒┐ множе▒▓в
434
22.1. Опе░а╢ии ▒ непе░е▒ека╛╣ими▒┐ множе▒▓вами . . . . 434
22.2. Реализа╢и┐ ▒ помо╣╝╛ ▒пи▒ков . . . . . . . . . . . . . 437
22.2.1. П░ог░амм╗ . . . . . . . . . . . . . . . . . . . . 441
23 Алго░и▓м╗ на г░а┤а╡
452
23.1. О▒новн╗е алго░и▓м╗ на г░а┤а╡ . . . . . . . . . . . . 453
5
23.1.1. П░ед▒▓авление г░а┤ов . . . .
23.1.2. Пои▒к в ╕и░ин│ . . . . . . . .
23.1.3. Пои▒к в гл│бин│ . . . . . . . .
23.1.4. Топологи╖е▒ка┐ ▒о░▓и░овка .
23.1.5. Сил╝но ▒в┐зн╗е компонен▓╗ .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
453
456
464
471
473
24 Минимал╝н╗е пок░╗ва╛╣ие де░ев╝┐
481
24.1. По▒▓░оение минимал╝ного о▒▓ова . . . . . . . . . . . 482
24.2. Алго░и▓м╗ К░│▒кала и П░има . . . . . . . . . . . . . 486
25 К░а▓╖ай╕ие п│▓и из одной ве░╕ин╗
25.1. К░а▓╖ай╕ие п│▓и и ░елак▒а╢и┐ . . . . . . . . . . . . .
25.2. Алго░и▓м Беллмана-Фо░да . . . . . . . . . . . . . . .
25.3. К░а▓╖ай╕ие п│▓и в а╢икли╖е▒ком о░иен▓и░ованном
г░а┤е . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.4. Ог░ани╖ени┐ на ░азно▒▓и и к░а▓╖ай╕ие п│▓и . . . .
493
497
507
510
512
26 К░а▓╖ай╕ие п│▓и дл┐ в▒е╡ па░ ве░╕ин
522
26.1. Алго░и▓м Флойда-Уо░╕олла . . . . . . . . . . . . . . . 529
27 Мак▒имал╝н╗й по▓ок
27.1. По▓оки в ▒е▓┐╡ . . . . . . . . . . . . . . . . . . . . .
27.2. Ме▓од Фо░да{Фалке░▒она . . . . . . . . . . . . . . .
27.3. Мак▒имал╝ное па░о▒о╖е▓ание в дв│дол╝ном г░а┤е .
27.4. Алго░и▓м п░о▓алкивани┐ п░едпо▓ока . . . . . . . .
27.5. Алго░и▓м подн┐▓╝-и-в-на╖ало . . . . . . . . . . . . .
.
.
.
.
.
546
547
552
562
565
574
28 Со░▓и░│╛╣ие ▒е▓и
28.1. Се▓и компа░а▓о░ов . . . . .
28.2. П░авило н│л┐ и едини╢╗ . .
28.3. Би▓они╖е▒кий ▒о░▓и░ов╣ик
28.4. Слива╛╣а┐ ▒е▓╝ . . . . . . .
28.5. Со░▓и░│╛╣а┐ ▒е▓╝ . . . . .
.
.
.
.
.
586
587
590
592
594
596
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29 А░и┤ме▓и╖е▒кие ▒╡ем╗
29.1. С╡ем╗ из ┤│нк╢ионал╝н╗╡ ╜лемен▓ов . . . . . . . . .
29.1.1. Ф│нк╢ионал╝н╗е ╜лемен▓╗ . . . . . . . . . . .
29.1.2. С╡ем╗ из ┤│нк╢ионал╝н╗╡ ╜лемен▓ов . . . . .
29.1.3. С│мма▓о░ . . . . . . . . . . . . . . . . . . . . .
29.1.4. Гл│бина ▒╡ем╗ . . . . . . . . . . . . . . . . . . .
29.1.5. Разме░ ▒╡ем╗ . . . . . . . . . . . . . . . . . . .
29.1.6. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . .
29.2. C╡ем╗ дл┐ ▒ложени┐ . . . . . . . . . . . . . . . . . . .
29.2.1. Ка▒кадное ▒ложение . . . . . . . . . . . . . . .
29.2.2. Сложение ▒ п░едв╗╖и▒лением пе░ено▒ов . . . .
29.2.3. В╗╖и▒ление ▓ипов пе░ено▒а ▒ помо╣╝╛ па░аллел╝ной п░е┤ик▒ной ▒╡ем╗ . . . . . . . . . . . .
601
602
602
603
603
604
605
605
605
606
607
608
6
29.2.4. С│мма▓о░ ▒ п░едв╗╖и▒лением пе░ено▒ов:
окон╖ание . . . . . . . . . . . . . . . . . . . . .
29.2.5. Сложение ▒ запоминанием пе░ено▒ов . . . . . .
29.3. С╡ем╗ дл┐ │множени┐ . . . . . . . . . . . . . . . . . .
29.3.1. Ма▓░и╖н╗й │множи▓ел╝ . . . . . . . . . . . . .
29.3.2. Ха░ак▓е░и▒▓ики ▒╡ем╗ . . . . . . . . . . . . . .
29.3.3. Умножение ▒ помо╣╝╛ де░ева Уолле▒а . . . . .
29.3.4. Ха░ак▓е░и▒▓ики ▒╡ем╗ . . . . . . . . . . . . . .
29.3.5. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . .
29.4. Так▓и░ованн╗е ▒╡ем╗ . . . . . . . . . . . . . . . . . .
29.4.1. У▒▓░ой▒▓во поби▓ового ▒ложени┐ . . . . . . . .
29.4.2. Ха░ак▓е░и▒▓ики ▒╡ем╗ . . . . . . . . . . . . . .
29.4.3. Ка▒кадное ▒ложение и поби▓овое ▒ложение . .
29.4.4. Одноме░н╗й │множи▓ел╝ . . . . . . . . . . . .
29.4.5. П░о▒▓а┐ ░еализа╢и┐ . . . . . . . . . . . . . . . .
29.4.6. Б╗▒▓░а┐ ░еализа╢и┐ . . . . . . . . . . . . . . .
29.5. Зада╖и . . . . . . . . . . . . . . . . . . . . . . . . . . .
29.6. Коммен▓а░ии . . . . . . . . . . . . . . . . . . . . . . .
609
610
612
612
614
614
615
616
617
617
618
618
619
619
620
622
623
30 Алго░и▓м╗ па░аллел╝н╗╡ в╗╖и▒лений
625
30.0.1. Па░аллел╝на┐ ма╕ина ▒ п░оизвол╝н╗м до▒▓│пом (PRAM) . . . . . . . . . . . . . . . . . . . . 625
30.0.2. Па░аллел╝н╗й и и▒кл╛╖и▓ел╝н╗й до▒▓│п к пам┐▓и . . . . . . . . . . . . . . . . . . . . . . . . . 626
30.0.3. Син╡░ониза╢и┐ . . . . . . . . . . . . . . . . . . 627
30.0.4. План глав╗ . . . . . . . . . . . . . . . . . . . . . 627
30.1. Пе░е╡од╗ по │каза▓ел┐м . . . . . . . . . . . . . . . . . 628
30.1.1. Номе░ в ▒пи▒ке . . . . . . . . . . . . . . . . . . 628
30.1.2. Ко░░ек▓но▒▓╝ . . . . . . . . . . . . . . . . . . . 630
30.1.3. Анализ . . . . . . . . . . . . . . . . . . . . . . . 630
30.1.4. Па░аллел╝на┐ об░або▓ка п░е┤ик▒ов ▒пи▒ка . . 631
30.1.5. Ме▓од ╜йле░ова ╢икла . . . . . . . . . . . . . . 633
30.2. CRCW- и EREW-алго░и▓м╗ . . . . . . . . . . . . . . . 636
30.2.1. Пол╝за па░аллел╝ного ╖▓ени┐ . . . . . . . . . . 636
30.2.2. Пол╝за па░аллел╝ной запи▒и . . . . . . . . . . . 637
30.2.3. Модели░ование CRCW-ма╕ин╗ ▒ помо╣╝╛
EREW-ма╕ин╗ . . . . . . . . . . . . . . . . . . 639
30.3. Тео░ема Б░ен▓а и ╜┤┤ек▓ивно▒▓╝ по за▓░а▓ам . . . . 642
30.3.1. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . . 645
30.4. Э┤┤ек▓ивна┐ па░аллел╝на┐ об░або▓ка п░е┤ик▒ов . . 645
30.4.1. Рек│░▒ивна┐ па░аллел╝на┐ об░або▓ка п░е┤ик▒ов646
30.4.2. В╗бо░ │дал┐ем╗╡ об║ек▓ов . . . . . . . . . . . 647
30.4.3. Анализ . . . . . . . . . . . . . . . . . . . . . . . 647
30.4.4. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . . 649
30.5. На░│╕ение ▒имме▓░ии (де▓е░мини░ованн╗й алго░и▓м) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
7
30.5.1. Ра▒к░а▒ки и мак▒имал╝н╗е незави▒им╗е множе▒▓ва . . . . . . . . . . . . . . . . . . . . . . .
30.5.2. В╗╖и▒ление 6-░а▒к░а▒ки . . . . . . . . . . . . .
30.5.3. Пол│╖ение мак▒имал╝ного незави▒имого множе▒▓ва из 6-░а▒к░а▒ки . . . . . . . . . . . . . .
30.5.4. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . .
30.6. Зада╖и . . . . . . . . . . . . . . . . . . . . . . . . . . .
30.7. Коммен▓а░ии . . . . . . . . . . . . . . . . . . . . . . .
650
651
653
654
654
657
31 Ма▓░и╢╗ и дей▒▓ви┐ ▒ ними
31.1. Ма▓░и╢╗ и и╡ ▒вой▒▓ва . . . . . . . . . . . . . . . . .
31.2. Алго░и▓м Ш▓░а▒▒ена │множени┐ ма▓░и╢ . . . . . . .
31.3. Об░а╣ение ма▓░и╢ . . . . . . . . . . . . . . . . . . . .
31.4. Положи▓ел╝но оп░еделенн╗е ▒имме▓░и╖е▒кие ма▓░и╢╗ и ме▓од наимен╝╕и╡ квад░а▓ов . . . . . . . . . . .
679
33 Теоpе▓ико-╖и▒лов╗е алгоpи▓м╗
33.1. На╖ал╝н╗е ▒ведени┐ из ▓ео░ии ╖и▒ел . . . . .
33.2. Наибол╝╕ий об╣ий дели▓ел╝ . . . . . . . . .
33.3. Мод│л┐░на┐ а░и┤ме▓ика . . . . . . . . . . . .
33.4. Ре╕ение линейн╗╡ дио┤ан▓ов╗╡ │░авнений .
33.5. Ки▓ай▒ка┐ ▓ео░ема об о▒▓а▓ка╡ . . . . . . . .
33.6. С▓епен╝ ╜лемен▓а . . . . . . . . . . . . . . . .
33.7. К░ип▓о▒и▒▓ема RSA ▒ о▓к░╗▓╗м кл╛╖ом . .
33.8. П░ове░ка ╖и▒ел на п░о▒▓о▓│ . . . . . . . . . .
712
713
718
722
726
729
732
735
741
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
659
659
668
675
34 Пои▒к под▒▓░ок
757
34.0.1. Обозна╖ени┐ и ▓е░минологи┐ . . . . . . . . . . 758
34.1. П░о▒▓ей╕ий алго░и▓м . . . . . . . . . . . . . . . . . . 759
34.2. Алго░и▓м Рабина | Ка░па . . . . . . . . . . . . . . . 761
34.2.1. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . . 764
34.3. Пои▒к под▒▓░ок ▒ помо╣╝╛ коне╖н╗╡ ав▓ома▓ов . . . 765
34.3.1. Коне╖н╗е ав▓ома▓╗ . . . . . . . . . . . . . . . 765
34.3.2. Ав▓ома▓╗ дл┐ пои▒ка под▒▓░ок . . . . . . . . . 766
34.3.3. В╗╖и▒ление ┤│нк╢ии пе░е╡ода . . . . . . . . . 770
34.4. Алго░и▓м Кн│▓а | Мо░░и▒а | П░а▓▓а . . . . . . . . 771
34.4.1. П░е┤ик▒-┤│нк╢и┐, а▒▒о╢ии░ованна┐ ▒ об░аз╢ом771
34.4.2. В░ем┐ ░або▓╗ . . . . . . . . . . . . . . . . . . . 773
34.4.3. П░е┤ик▒-┤│нк╢и┐ в╗╖и▒л┐е▓▒┐ п░авил╝но . . 774
34.4.4. Алго░и▓м KMP п░авилен . . . . . . . . . . . . 776
34.5. Алго░и▓м Бойе░а | М│░а . . . . . . . . . . . . . . . . 777
34.5.1. Эв░и▒▓ика ▒▓оп-▒имвола . . . . . . . . . . . . . 778
34.5.2. Эв░и▒▓ика безопа▒ного ▒│┤┤ик▒а . . . . . . . . 780
34.5.3. Уп░ажнени┐ . . . . . . . . . . . . . . . . . . . . 784
34.6. Заме╖ани┐ . . . . . . . . . . . . . . . . . . . . . . . . . 785
8
35 В╗╖и▒ли▓ел╝на┐ геоме▓░и┐
35.1. Свой▒▓ва о▓░езков . . . . . . . . . .
35.2. Е▒▓╝ ли пе░е▒ека╛╣ие▒┐ о▓░езки? .
35.3. По▒▓░оение в╗п│клой оболо╖ки . . .
35.4. О▓╗▒кание па░╗ ближай╕и╡ ▓о╖ек .
35.5. Зада╖и . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
787
788
793
798
804
807
36 NP-полно▓а
36.1. Полиномиал╝ное в░ем┐ . . . . . . . . . . . . .
36.2. П░ове░ка п░инадлежно▒▓и ┐з╗к│ и кла▒▒ NP
36.3. NP-полно▓а и ▒водимо▒▓╝ . . . . . . . . . . .
36.4. NP-полн╗е зада╖и . . . . . . . . . . . . . . . .
36.4.1. Зада╖а о клике . . . . . . . . . . . . . .
36.4.2. Зада╖а о ве░╕инном пок░╗▓ии . . . .
36.4.3. Зада╖а о гамил╝▓оновом ╢икле . . . .
36.4.4. Зада╖а коммиво┐же░а . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
811
812
819
824
837
837
839
842
846
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
37 П░иближенн╗е алго░и▓м╗
37.1. Зада╖а о ве░╕инном пок░╗▓ии . . . . . . . . . . . . .
37.2. Зада╖а коммиво┐же░а . . . . . . . . . . . . . . . . . .
37.2.1. Зада╖а коммиво┐же░а (▒ не░авен▒▓вом ▓░е│гол╝ника) . . . . . . . . . . . . . . . . . . . . .
37.2.2. Об╣а┐ зада╖а коммиво┐же░а . . . . . . . . . .
37.3. Зада╖а о ▒│мме подмноже▒▓ва . . . . . . . . . . . . . .
850
852
854
854
856
863
П░еди▒ловие
Э▓а книга под░обно ░а▒▒каз╗вае▓ о ▒ов░еменн╗╡ ме▓ода╡ по▒▓░оени┐ и анализа алго░и▓мов. В ней под░обно ░азоб░ано много конк░е▓н╗╡ алго░и▓мов; м╗ ▒▓а░али▒╝ ░а▒▒каза▓╝ о ни╡ пон┐▓но, но
не оп│▒ка┐ де▓алей и не же░▓в│┐ ▒▓░ого▒▓╝╛ изложени┐.
Алго░и▓м╗ запи▒ан╗ ▒ виде └п▒евдокода┴ и п░окоммен▓и░ован╗
в ▓ек▒▓е; м╗ ▒▓а░али▒╝ ▒дела▓╝ опи▒ание алго░и▓ма пон┐▓н╗м л╛д┐м ▒ минимал╝н╗м п░ог░амми▒▓▒ким оп╗▓ом. Книга ▒оде░жи▓
более 260 ░и▒│нков, по┐▒н┐╛╣и╡ ░або▓│ ░азли╖н╗╡ алго░и▓мов.
М╗ об░а╣аем о▒обое внимание на ╜┤┤ек▓ивно▒▓╝ ░а▒▒ма▓░иваем╗╡ алго░и▓мов и п░иводим о╢енки в░емени и╡ ░або▓╗.
М╗ ▒▓а░али▒╝ напи▒а▓╝ │╖ебник по по▒▓░оени╛ алго░и▓мов и
▒▓░│к▓│░ данн╗╡, ко▓о░╗й могли б╗ и▒пол╝зова▓╝ п░еподава▓ели и ▒▓│ден▓╗ | о▓ пе░вок│░▒ников до а▒пи░ан▓ов. Книга може▓
б╗▓╝ и▒пол╝зована и дл┐ ▒амооб░азовани┐ п░о┤е▒▒ионал╝н╗╡ п░ог░амми▒▓ов.
П░еподава▓ел┐м:
М╗ ▒▓а░али▒╝ ▒дела▓╝ возможн╗м и▒пол╝зование книги на ░азн╗╡ │░овн┐╡ | о▓ на╖ал╝ного к│░▒а по п░ог░амми░овани╛ и
▒▓░│к▓│░ам данн╗╡ до а▒пи░ан▓▒кого к│░▒а по ╜┤┤ек▓ивн╗м алго░и▓мам. В ней го░аздо бол╝╕е ма▓е░иала, ╖ем можно вкл╛╖и▓╝
в ▒еме▒▓░ов╗й к│░▒, ▓ак ╖▓о в╗ може▓е в╗б░а▓╝ глав╗ по вк│▒│.
М╗ ▒▓а░али▒╝ ▒дела▓╝ глав╗ до▒▓а▓о╖но незави▒им╗ми. Кажда┐
глава на╖инае▓▒┐ ▒ более п░о▒▓ого ма▓е░иала; более ▓░│дн╗е ▓ем╗
о▓не▒ен╗ в ░аздел╗, поме╖енн╗е звездо╖кой и поме╣енн╗е в коне╢
глав╗. В лек╢и┐╡ дл┐ на╖ина╛╣и╡ можно ог░ани╖и▓╝▒┐ не▒кол╝кими пе░в╗ми ░азделами в╗б░анн╗╡ вами глав, о▒▓авив под░обное
из│╖ение о▒▓ал╝н╗╡ дл┐ более п░одвин│▓ого к│░▒а.
Кажд╗й ░аздел ▒набжен │п░ажнени┐ми (в▒его и╡ более 900): кажда┐ глава закан╖ивае▓▒┐ зада╖ами (в▒его более 120). Как п░авило,
│п░ажнени┐ п░ове░┐╛▓ понимание изложенного ма▓е░иала (╖а▒▓╝
из ни╡ | │▒▓н╗е воп░о▒╗, ╖а▒▓╝ под╡од┐▓ дл┐ пи▒╝менного дома╕-
10
него задани┐). Зада╖и более ░азве░н│▓╗; многие из ни╡ дополн┐╛▓
▓ео░е▓и╖е▒кий ма▓е░иал ▒оо▓ве▓▒▓в│╛╣ей глав╗ и ░азби▓╗ на ╖а▒▓и, ▒оо▓ве▓▒▓в│╛╣ие ╜▓апам доказа▓ел╝▒▓ва или по▒▓░оени┐.
Звездо╖кой о▓ме╖ен╗ более ▓░│дн╗е │п░ажнени┐ и ░аздел╗; они
п░едназна╖ен╗ ▒ко░ее дл┐ ▒▓а░╕ек│░▒ников и а▒пи░ан▓ов. Раздел╗ ▒о звездо╖кой ╖а▒▓о ▓░еб│╛▓ л│╖╕ей ма▓ема▓и╖е▒кой подго▓овки; │п░ажнение ▒о звездо╖кой може▓ ▓акже ▓░ебова▓╝ дополни▓ел╝н╗╡ знаний или п░о▒▓о б╗▓╝ более ▓░│дн╗м.
С▓│ден▓ам:
М╗ надеем▒┐, ╖▓о книга до▒▓ави▓ вам │довол╝▒▓вие и познакоми▓ ▒ ме▓одами по▒▓░оени┐ алго░и▓мов. М╗ ▒▓а░али▒╝ пи▒а▓╝
под░обно, пон┐▓но и ин▓е░е▒но, напомина┐ по ╡од│ дела необ╡одим╗е ▒ведени┐ из ма▓ема▓ики. Подго▓ови▓ел╝н╗е ▒ведени┐ об╗╖но
▒об░ан╗ в на╖ал╝н╗╡ ░аздела╡ глав╗, ко▓о░╗е можно бегло п░о▒мо▓░е▓╝, е▒ли в╗ │же знаком╗ ▒ ▓емой.
Книга ╜▓а велика, и на лек╢и┐╡, ▒ко░ее в▒его, б│де▓ ░азоб░ана
ли╕╝ ╖а▒▓╝ ма▓е░иала. М╗ надеем▒┐, ╖▓о о▒▓ав╕а┐▒┐ ╖а▒▓╝ б│де▓
вам полезна е▒ли не ▒ей╖а▒, ▓ак в б│д│╣ем, ▓ак ╖▓о в╗ ▒о╡░ани▓е
книг│ в ка╖е▒▓ве ▒п░аво╖ника.
Ч▓о н│жно зна▓╝, п░и▒▓│па┐ к ╖▓ени╛? М╗ ░а▒▒╖и▓╗ваем, ╖▓о
в╗
имее▓е неко▓о░╗й п░ог░амми▒▓▒кий оп╗▓, и ░ек│░▒ивн╗е п░о╢ед│░╗, ма▒▒ив╗ и ▒пи▒ки ва▒ не п│га╛▓;
п░о▒▓╗е ма▓ема▓и╖е▒кие ░а▒▒│ждени┐ (▒кажем, доказа▓ел╝▒▓ва
по инд│к╢ии) вам ▓акже знаком╗ (кое-где понадоб┐▓▒┐ о▓дел╝н╗е ┤ак▓╗ из к│░▒а ма▓ема▓и╖е▒кого анализа; в пе░вой ╖а▒▓и
бол╝╕е ни╖его из ма▓ема▓ики не по▓░еб│е▓▒┐).
П░ог░амми▒▓ам:
В книг│ вкл╛╖ен╗ алго░и▓м╗ дл┐ ▒ам╗╡ ░азн╗╡ зада╖ и ее можно и▒пол╝зова▓╝ как ▒п░аво╖ник. Глав╗ по╖▓и незави▒им╗, ▓ак ╖▓о
можно ▒░аз│ в╗б░а▓╝ ин▓е░е▒│╛╣ий ва▒ ма▓е░иал.
Бол╝╕ин▒▓во об▒│ждаем╗╡ алго░и▓мов вполне мог│▓ б╗▓╝ и▒пол╝зован╗ на п░ак▓ике, и м╗ │дел┐ем должное внимание де▓ал┐м ░еализа╢ии. Е▒ли алго░и▓м п░ед▒▓авл┐е▓ ▒ко░ее ▓ео░е▓и╖е▒кий ин▓е░е▒, м╗ о▓ме╖аем ╜▓о и об▒│ждаем ал╝▓е░на▓ивн╗е под╡од╗.
На╕ п▒евдокод легко пе░еве▒▓и на л╛бой ┐з╗к п░ог░амми░овани┐, е▒ли ╜▓о понадоби▓▒┐. Надо ▓ол╝ко име▓╝ в вид│, ╖▓о м╗ не
вкл╛╖аем в алго░и▓м╗ ▒и▒▓емно-зави▒им╗е ┤░агмен▓╗ (об░або▓к│ о╕ибок и ▓. п.), ╖▓об╗ не за▓емн┐▓╝ ▒│▓и дела.
11
О╕ибки
Книга ▓акого об║ема не може▓ не ▒оде░жа▓╝ о╕ибок. Е▒ли в╗
обна░│жили о╕ибк│ в англий▒ком о░игинале книги, или │ ва▒ е▒▓╝
п░едложени┐ по ее и▒п░авлени╛, м╗ б│дем ░ад╗ │зна▓╝ об ╜▓ом.
М╗ б│дем о▒обенно ░ад╗ нов╗м │п░ажнени┐м и зада╖ам (но, пожал│й▒▓а, п░и▒╗лай▓е и╡ ▒ ░е╕ени┐ми). По╖▓ов╗й ад░е▒:
Introduction to Algorithms
MIT Labratory for Computer Science
545 Technology Square
Cambridge, Massachusetts 02139
Можно ▓акже пол│╖и▓╝ ▒пи▒ок изве▒▓н╗╡ опе╖а▓ок и ▒ооб╣и▓╝ о найденн╗╡ о╕ибка╡ ▒ помо╣╝╛ ╜лек▓░онной
по╖▓╗; ╖▓об╗ пол│╖и▓╝ ин▒▓░│к╢ии, по╕ли▓е по ад░е▒│
algorithms@theory.lcs.mit.edu пи▒╝мо, ▒оде░жа╣ее Subject:
help в заголовке. Извини▓е, ╖▓о м╗ не можем ли╖но о▓ве▓и▓╝ на
в▒е пи▒╝ма.
[П░и пе░еводе б╗ли │╖▓ен╗ в▒е и▒п░авлени┐, имев╕ие▒┐ на момен▓ издани┐ пе░евода (декаб░╝ 1997), к░оме ▓ого, и▒п░авлено не▒кол╝ко обна░│женн╗╡ п░и пе░еводе опе╖а▓ок, но, возможно, возникли нов╗е (в ╖ем винова▓ на│╖н╗й ░едак▓о░ книги, А. Шен╝).
По╜▓ом│, обна░│жив о╕ибк│ в ░│▒▒ком ▓ек▒▓е, не по▒╗лай▓е ее ▒░аз│ ав▓о░ам: може▓ б╗▓╝, она возникла п░и пе░еводе! Сооб╣и▓е о
ней ▒на╖ала пе░евод╖икам, по ад░е▒│ algor@mccme.ru или по по╖▓е
(Мо▒ква, 121002, Бол╝╕ой Вла▒╝ев▒кий пе░., 11, Мо▒ков▒кий ╢ен▓░
неп░е░╗вного ма▓ема▓и╖е▒кого об░азовани┐, изда▓ел╝▒▓во).]
Благода░но▒▓и
Многие д░│з╝┐ и коллеги немало ▒делали дл┐ │л│╖╕ени┐ ╜▓ой
книги. М╗ благода░им в▒е╡ и╡ за помо╣╝ и кон▒▓░│к▓ивн│╛ к░и▓ик│.
Лабо░а▓о░и┐ ин┤о░ма▓ики Ма▒▒а╖│▒е▓▒кого ▓е╡нологи╖е▒кого
ин▒▓и▓│▓а (Massachusetts Institute of Technology, Laboratory for
Computer Science) б╗ла идеал╝н╗м ме▒▓ом дл┐ ░або▓╗ над книгой. На╕и коллеги по ▓ео░е▓и╖е▒кой г░│ппе ╜▓ой лабо░а▓о░ии б╗ли о▒обенно ▓е░пим╗ и л╛безно ▒огла╕али▒╝ п░о▒ма▓░ива▓╝ глав╗
книги. М╗ ╡о▓ели б╗ о▒обенно поблагода░и▓╝ ▒лед│╛╣и╡ из ни╡:
Baruch Awerbuch, Sha Goldwasser, Leo Guibas, Tom Leighton, Albert Meyer, David Shmoys, Eva Tardos. Комп╝╛▓е░╗, на ко▓о░╗╡ го▓овила▒╝ книга (▓░е╡ ▓ипов: Microvax, Apple Macintosh, Sun Sparcstation) подде░живали William Ang, Sally Bemus, Ray Hirschfeld и
Mark Reinhold; они же пе░екомпили░овали TEX, когда на╕и ┤айл╗ пе░е▒▓али поме╣а▓╝▒┐ в его ▒▓анда░▓н│╛ ве░▒и╛. Компани┐
Thinking Machines подде░живала Ча░л╝за Лейзе░▒она в пе░иод его
12
░або▓╗ в ╜▓ой компании.
Многие на╕и коллеги и▒пол╝зовали п░едва░и▓ел╝н╗е ва░иан▓╗
╜▓ой книги в ▒вои╡ лек╢ионн╗╡ к│░▒а╡, и п░едложили ░азли╖н╗е
│л│╖╕ени┐. М╗ ╡о▓ели б╗ о▒обенно поблагода░и▓╝ ▒лед│╛╣и╡ на╕и╡ коллег: Richard Beigel (Yale), Andrew Goldberg (Stanford), Joan
Lucas (Rutgers), Mark Overmars (Utrecht), Alan Sherman (Tufts,
Maryland), Diane Souvaine (Rutgers).
П░и ╖▓ении лек╢ий по ма▓е░иалам ╜▓ой книги нам помогали на╕и коллеги, ко▓о░╗е вне▒ли много │л│╖╕ений. М╗ о▒обенно п░изна▓ел╝н╗: Alan Baratz, Bonnie Berger, Aditi Dhagat, Burt Kaliski,
Arthur Lent, Andrew Moulton, Marios Papaefthymiou, Cindy Phillips,
Mark Reinhold, Phil Rogaway, Flavio Rose, Arie Rudich, Alan Sherman, Cli Stein, Susmita Sur, Gregory Troxel, Margaret Tuttle.
Многие л╛ди помогли нам в ░або▓е над книгой в ░азн╗╡ о▓но╕ени┐╡: ░або▓а в библио▓еке (Denise Sergent), го▒▓еп░иим▒▓во в
╖и▓ал╝ном зале (Maria Sensale), до▒▓│п к ли╖ной библио▓еке (Albert Meyer), п░ове░ка │п░ажнений и п░ид│м╗вание нов╗╡ (Shlomo Kipnis, Bill Niehaus, David Wilson), ▒о▒▓авление индек▒а (Marios
Papaefthymiou, Gregory Troxel), ▓е╡ни╖е▒ка┐ помо╣╝ (Inna Radzihovsky, Denise Sergent, Gayle Sherman, и о▒обенно Be Hubbard).
Многие о╕ибки обна░│жили на╕и ▒▓│ден▓╗, о▒обенно Bobby
Blumofe, Bonnie Eisenberg, Raymond Johnson, John Keen, Richard
Lethin, Mark Lillibridge, John Pesaris, Steve Ponzio, Margaret Tuttle.
Многие на╕и коллеги ▒ооб╣или нам полезн│╛ ин┤о░ма╢и╛ о
конк░е▓н╗╡ алго░и▓ма╡, а ▓акже к░и▓и╖е▒ки п░о╖и▓али о▓дел╝н╗е глав╗ книги; в и╡ ╖и▒ле Bill Aiello, Alok Aggrawal, Eric Bach,
Vasek Chvatal, Richard Cole, Johan Hastad, Alex Ishii, David Johnson,
Joe Kilian, Dina Kravets, Bruce Maggs, Jim Orlin, James Park, Thane
Plambeck, Herschel Safer, Je Shallit, Cli Stein, Gil Strang, Bob Tarjan, Paul Wang. Многие из ни╡ п░едложили нам зада╖и дл┐ на╕ей
книги, ▒░еди ни╡ Andrew Goldberg, Danny Sleator, Umesh Vazirani.
Англий▒кий о░игинал книги б╗л подго▓овлен ▒ помо╣╝╛ LATEX
(мак░опаке▓ дл┐ ▒и▒▓ем╗ TEX). Ри▒│нки делали▒╝ на комп╝╛▓е░е Apple Macintosh ▒ помо╣╝╛ п░ог░амм╗ Mac Draw II; м╗ благода░н╗ за опе░а▓ивн│╛ ▓е╡ни╖е▒к│╛ подде░жк│ в ╜▓ой обла▒▓и
(Joanna Terry, Claris Corporation; Michael Mahoney, Advanced Computer Graphics). Индек▒ б╗л подго▓овлен ▒ помо╣╝╛ п░ог░амм╗
Windex, напи▒анной ав▓о░ами. Спи▒ок ли▓е░а▓│░╗ го▓овил▒┐ ▒ помо╣╝╛ п░ог░амм╗ BibTEX. О░игинал-маке▓ англий▒кого издани┐
б╗л подго▓овлен в Аме░икан▒ком ма▓ема▓и╖е▒ком об╣е▒▓ве ▒ помо╣╝╛ ┤о▓онабо░ной ма╕ин╗ ┤и░м╗ Autologic; м╗ п░изна▓ел╝н╗
за помо╣╝ в ╜▓ом (Ralph Youngen, Аме░икан▒кое ма▓ема▓и╖е▒кое
об╣е▒▓во). Маке▓ ░аз░або▓али: Rebecca Daw, Amy Henderson (░еализа╢и┐ маке▓а дл┐ ▒и▒▓ем╗ LATEX), Jeannet Leendertse (обложка).
Ав▓о░╗ пол│╖или бол╝╕ое │довол╝▒▓вие о▓ ▒о▓░│дни╖е▒▓ва ▒ изда▓ел╝▒▓вами MIT Press (Frank Sallow, Terry Ehling, Larry Cohen,
13
Lorrie Lejeune) и McGraw-Hill (David Shapiro) и благода░н╗ им
за подде░жк│ и ▓е░пение, а ▓акже заме╖а▓ел╝ное ░едак▓и░ование
(Larry Cohen).
Наконе╢, ав▓о░╗ благода░┐▓ ▒вои╡ жен (Nicole Cormen, Lina Lue
Leicerson, Gail Rivest) и де▓ей (Ricky, William и Debby Leicerson;
Alex и Christopher Rivest) за л╛бов╝ и подде░жк│ п░и ░або▓е над
книгой (Alex Rivest ▓акже помог нам ▒ └па░адок▒ом дней ░ождени┐
на Ма░▒е┴ (░аздел 6.6.1). Л╛бов╝, ▓е░пение и подде░жка на╕и╡
▒емей ▒делали ╜▓│ книг│ возможной; им она и по▒в┐╣ае▓▒┐.
Кемб░идж,
Ма▒▒а╖│▒е▓▒
ма░▓ 1990 года
Тома▒ Ко░мен (Thomas H. Cormen)
Ча░л╝з Лейзе░▒он (Charles E. Leiserson)
Ронал╝д Риве▒▓ (Ronald L. Rivest)
О▓ пе░евод╖иков:
М╗ п░изна▓ел╝н╗ изда▓ел╝▒▓в│ MIT и ав▓о░ам за ░аз░е╕ение
пе░еве▒▓и книг│, и за помо╣╝ п░и подго▓овке пе░евода (в ▓ом ╖и▒ле за п░едо▒▓авление англий▒кого ▓ек▒▓а книги и илл╛▒▓░а╢ий в
╜лек▓░онной ┤о░ме). Издание пе░евода ▒▓ало возможно благода░┐
┤инан▒овой подде░жке Ро▒▒ий▒кого ┤онда ┤│ндамен▓ал╝н╗╡ и▒▒ледований (░│ководи▓ел╝ п░оек▓а В.А. У▒пен▒кий).
В ░або▓е над пе░еводом книги │╖а▒▓вовала бол╝╕а┐ г░│ппа ▒▓│ден▓ов, а▒пи░ан▓ов и ▒о▓░│дников Мо▒ков▒кого ╢ен▓░а неп░е░╗вного ма▓ема▓и╖е▒кого об░азовани┐, Незави▒имого Мо▒ков▒кого
│ниве░▒и▓е▓а и МГУ:
K. Белов, Ю. Бо░авлев, Д. Бо▓ин, В. Го░елик, Д. Де░┐гин
Ю. Кални╕кан, А. Ка▓анова, С. Л╝вов▒кий, А. Рома╣енко, К. Сонин, К. Т░│╕кин, М. У╕аков, А. Шен╝, В. Ш│валов, М. Юда╕кин
(пе░евод)
А. Акимов, М. В╝╛гин, Д. Де░┐гин, А. Ев┤им╝ев▒кий, Ю. Кални╕кан, А. Рома╣енко, А. Че░нов М. У╕аков, A. Шен╝ (░едак▓и░ование)
В. Радионов (ве░▒▓ка)
В.В. Я╣енко (░едак▓о░)
1
Введение
В ╜▓ой главе м╗ ░азби░аем о▒новн╗е пон┐▓и┐ и ме▓од╗, ▒в┐занн╗е
▒ по▒▓░оением и анализом алго░и▓мов, на п░име░е дв│╡ алго░и▓мов ▒о░▓и░овки | п░о▒▓ей╕его алго░и▓ма ▒о░▓и░овки в▒▓авками
и более ╜┤┤ек▓ивного алго░и▓ма ▒о░▓и░овки ▒ли┐нием.
На ╜▓и╡ п░име░а╡ м╗ познакомим▒┐ ▒ п▒евдокодом, на ко▓о░ом
м╗ б│дем запи▒╗ва▓╝ алго░и▓м╗, обозна╖ени┐ми дл┐ ▒ко░о▒▓и ░о▒▓а ┤│нк╢ий, ме▓одом └░аздел┐й и вла▒▓в│й┴ по▒▓░оени┐ алго░и▓мов, а ▓акже ▒ д░│гими пон┐▓и┐ми, ко▓о░╗е б│д│▓ в▒▓░е╖а▓╝▒┐
нам на п░о▓┐жении в▒ей книги.
1.1. Алго░и▓м╗
Алго░и▓м (algorithm) | ╜▓о ┤о░мал╝но опи▒анна┐ в╗╖и▒ли▓ел╝на┐ п░о╢ед│░а, пол│╖а╛╣а┐ и▒╡одн╗е данн╗е (input), наз╗ваем╗е
▓акже в╡одом алго░и▓ма или его а░г│мен▓ом, и в╗да╛╣а┐ ░ез│л╝▓а▓ в╗╖и▒лений на в╗╡од (output).
Алго░и▓м╗ ▒▓░о┐▓▒┐ дл┐ ░е╕ени┐ ▓е╡ или ин╗╡ в╗╖и▒ли▓ел╝н╗╡
зада╖ (computational problems). Фо░м│ли░овка зада╖и опи▒╗вае▓,
каким ▓░ебовани┐м должно │довле▓во░┐▓╝ ░е╕ение зада╖и, а алго░и▓м, ░е╕а╛╣ий ╜▓│ зада╖│, на╡оди▓ об║ек▓, ╜▓им ▓░ебовани┐м
│довле▓во░┐╛╣ий.
В ╜▓ой главе м╗ ░а▒▒ма▓░иваем зада╖│ ▒о░▓и░овки (sorting problem); помимо ▒воей п░ак▓и╖е▒кой важно▒▓и ╜▓а зада╖а ▒л│жи▓
│добн╗м п░име░ом дл┐ илл╛▒▓░а╢ии ░азли╖н╗╡ пон┐▓ий и ме▓одов. Она опи▒╗вае▓▒┐ ▓ак:
В╡од: По▒ледова▓ел╝но▒▓╝ n ╖и▒ел (a1 ; a2; : : :; an).
В╗╡од: Пе░е▒▓ановка (a01 ; a02; : : :; a0n ) и▒╡одной по▒ледова▓ел╝но▒▓и, дл┐ ко▓о░ой a01 6 a02 6 : : : 6 a0n .
Нап░име░, пол│╖ив на в╡од h31; 41; 59; 26; 41; 58i, алго░и▓м ▒о░▓и░овки должен в╗да▓╝ на в╗╡од h26; 31; 41; 41; 58; 59i.
Подлежа╣а┐ ▒о░▓и░овке по▒ледова▓ел╝но▒▓╝ наз╗вае▓▒┐ в╡одом
(instance) зада╖и ▒о░▓и░овки.
Алго░и▓м╗
15
Многие алго░и▓м╗ и▒пол╝з│╛▓ ▒о░▓и░овк│ в ка╖е▒▓ве п░омеж│▓о╖ного ╕ага. Имее▓▒┐ много ░азн╗╡ алго░и▓мов ▒о░▓и░овки;
в╗бо░ в конк░е▓ной ▒и▓│а╢ии зави▒и▓ о▓ длин╗ ▒о░▓и░│емой по▒ледова▓ел╝но▒▓и, о▓ ▓ого, в какой ▒▓епени она │же о▓▒о░▓и░ована,
а ▓акже о▓ ▓ипа име╛╣ей▒┐ пам┐▓и (опе░а▓ивна┐ пам┐▓╝, ди▒ки,
магни▓н╗е лен▓╗).
Алго░и▓м ▒╖и▓а╛▓ п░авил╝н╗м (correct), е▒ли на л╛бом доп│▒▓имом (дл┐ данной зада╖и) в╡оде он он закан╖ивае▓ ░або▓│ и
в╗дае▓ ░ез│л╝▓а▓, │довле▓во░┐╛╣ий ▓░ебовани┐м зада╖и. В ╜▓ом
▒л│╖ае гово░┐▓, ╖▓о алго░и▓м ░е╕ае▓ (solves) данн│╛ в╗╖и▒ли▓ел╝н│╛ зада╖│. Неп░авил╝н╗й алго░и▓м може▓ (дл┐ неко▓о░ого
в╡ода) вов▒е не о▒▓анови▓╝▒┐ или да▓╝ неп░авил╝н╗й ░ез│л╝▓а▓.
(Вп░о╖ем, ╜▓о не делае▓ алго░и▓м заведомо бе▒полезн╗м | е▒ли
о╕ибки до▒▓а▓о╖но ░едки. Подобна┐ ▒и▓│а╢и┐ в▒▓░е▓и▓▒┐ нам в
главе 33 п░и пои▒ке бол╝╕и╡ п░о▒▓╗╡ ╖и▒ел. Но ╜▓о в▒е же ▒ко░ее
и▒кл╛╖ение, ╖ем п░авило.)
Алго░и▓м може▓ б╗▓╝ запи▒ан на ░│▒▒ком или англий▒ком ┐з╗ке,
в виде комп╝╛▓е░ной п░ог░амм╗ или даже в ма╕инн╗╡ кода╡ |
важно ▓ол╝ко, ╖▓об╗ п░о╢ед│░а в╗╖и▒лений б╗ла ╖е▓ко опи▒ана.
М╗ б│дем запи▒╗ва▓╝ алго░и▓м╗ ▒ помо╣╝╛ п▒евдокода (pseudocode), ко▓о░╗й напомни▓ вам знаком╗е ┐з╗ки п░ог░амми░овани┐ (Си, Па▒кал╝, Алгол). Разни╢а в ▓ом, ╖▓о иногда м╗ позвол┐ем
▒ебе опи▒а▓╝ дей▒▓ви┐ алго░и▓ма └▒воими ▒ловами┴, е▒ли ▓ак пол│╖ае▓▒┐ ┐▒нее. К░оме ▓ого, м╗ оп│▒каем ▓е╡нологи╖е▒кие под░обно▒▓и (об░або▓к│ о╕ибок, ▒кажем), ко▓о░╗е необ╡одим╗ в ░еал╝ной
п░ог░амме, но мог│▓ за▒лони▓╝ ▒│╣е▒▓во дела.
Со░▓и░овка в▒▓авками
Со░▓и░овка в▒▓авками (insertion sort) │добна дл┐ ▒о░▓и░овки ко░о▓ки╡ по▒ледова▓ел╝но▒▓ей. Именно ▓аким ▒по▒обом об╗╖но ▒о░▓и░│╛▓ ка░▓╗: де░жа в левой ░│ке │же │по░┐до╖енн╗е ка░▓╗ и
вз┐в п░авой ░│кой о╖е░едн│╛ ка░▓│, м╗ в▒▓авл┐ем ее в н│жное
ме▒▓о, ▒░авнива┐ ▒ име╛╣ими▒┐ и ид┐ ▒п░ава налево (▒м. ░и▒. 1.1)
Запи╕ем ╜▓о▓ алго░и▓м в виде п░о╢ед│░╗ Insertion-Sort, па░аме▓░ом ко▓о░ой ┐вл┐е▓▒┐ ма▒▒ив A[1 : :n] (по▒ледова▓ел╝но▒▓╝
длин╗ n, подлежа╣а┐ ▒о░▓и░овке). М╗ обозна╖аем ╖и▒ло ╜лемен▓ов в ма▒▒иве A ╖е░ез length[A]. По▒ледова▓ел╝но▒▓╝ ▒о░▓и░│е▓▒┐
└на ме▒▓е┴ (in place), без дополни▓ел╝ной пам┐▓и (помимо ма▒▒ива
м╗ и▒пол╝з│ем ли╕╝ ┤ик▒и░ованное ╖и▒ло ┐╖еек пам┐▓и). По▒ле
в╗полнени┐ п░о╢ед│░╗ Insertion-Sort ма▒▒ив A │по░┐до╖ен по
воз░а▒▓ани╛.
16
Глава 1 Введение
Ри▒. 1.1
Со░▓и░овка ка░▓ в▒▓авками
Insertion-Sort(A)
1 for j 2 to length[A]
2
do key A[j ]
3
. добави▓╝ A[j ] к о▓▒о░▓и░ованной ╖а▒▓и A[1 : :j ; 1].
4
i j ;1
5
while i > 0 and A[i] > key
6
do A[i + 1] A[i]
7
i i;1
8
A[i + 1] key
Рабо▓а п░о╢ед│░╗ Insertion-Sort дл┐ в╡ода A = h5; 2; 4; 6; 1; 3i. Пози╢и┐ j показана к░│жком.
Ри▒. 1.2
На ░и▒. 1.2 показана ░або▓а алго░и▓ма п░и A = h5; 2; 4; 6; 1; 3i.
Индек▒ j │каз╗вае▓ └о╖е░едн│╛ ка░▓│┴ (▓ол╝ко ╖▓о вз┐▓│╛ ▒о ▒▓ола). У╖а▒▓ок A[1 : :j ; 1] ▒о▒▓авл┐╛▓ │же о▓▒о░▓и░ованн╗е ка░▓╗
(лева┐ ░│ка), а A[j + 1 : :n] | е╣е не п░о▒мо▓░енн╗е. В ╢икле for
индек▒ j п░обегае▓ ма▒▒ив ▒лева нап░аво. М╗ бе░ем ╜лемен▓ A[j ]
Алго░и▓м╗
17
(▒▓░ока 2 алго░и▓ма) и ▒двигаем ид│╣ие пе░ед ним и бол╝╕ие его
по вели╖ине ╜лемен▓╗ (на╖ина┐ ▒ j ; 1-го) вп░аво, о▒вобожда┐ ме▒▓о дл┐ вз┐▓ого ╜лемен▓а. (▒▓░оки 4{7). В ▒▓░оке 8 ╜лемен▓ A[j ]
поме╣ае▓▒┐ в о▒вобожденное ме▒▓о.
П▒евдокод
Во▓ о▒новн╗е ▒огла╕ени┐, ко▓о░╗е м╗ б│дем и▒пол╝зова▓╝:
1. О▓▒▓│п о▓ левого пол┐ │каз╗вае▓ на │░овен╝ вложенно▒▓и.
Нап░име░, ▓ело ╢икла for (▒▓░ока 1) ▒о▒▓ои▓ из ▒▓░ок 2{8, а ▓ело ╢икла while (▒▓░ока 5) ▒оде░жи▓ ▒▓░оки 6{7, но не 8. Э▓о же
п░авило п░имен┐е▓▒┐ и дл┐ if-then-else. Э▓о делае▓ изли╕ним ▒пе╢иал╝н╗е команд╗ ▓ипа begin и end дл┐ на╖ала и кон╢а блока. (В
░еал╝н╗╡ ┐з╗ка╡ п░ог░амми░овани┐ ▓акое ▒огла╕ение п░имен┐е▓▒┐ ░едко, по▒кол╝к│ за▓░│дн┐е▓ ╖▓ение п░ог░амм, пе░е╡од┐╣и╡ ▒о
▒▓░ани╢╗ на ▒▓░ани╢│.)
2. Цикл╗ while, for, repeat и │▒ловн╗е кон▒▓░│к╢ии if, then, else
име╛▓ ▓о▓ же ▒м╗▒л, ╖▓о в Па▒кале.
3. Символ . на╖инае▓ коммен▓а░ий (ид│╣ий до кон╢а ▒▓░оки).
4. Однов░еменное п░и▒ваивание i j e (пе░еменн╗е i и j
пол│╖а╛▓ зна╖ение e) замен┐е▓ два п░и▒ваивани┐ j e и i j (в
╜▓ом по░┐дке).
5. Пе░еменн╗е (в данном ▒л│╖ае i; j; key ) локал╝н╗ вн│▓░и п░о╢ед│░╗ (е▒ли не огово░ено п░о▓ивное).
6. Индек▒ ма▒▒ива пи╕е▓▒┐ в квад░а▓н╗╡ ▒кобка╡: A[i] е▒▓╝ i-й
╜лемен▓ в ма▒▒иве A. Знак └: :┴ в╗дел┐е▓ ╖а▒▓╝ ма▒▒ива: A[1 : :j ]
обозна╖ае▓ │╖а▒▓ок ма▒▒ива A, вкл╛╖а╛╣ий A[1]; A[2]; : : :; A[j ].
7. Ча▒▓о и▒пол╝з│╛▓▒┐ об║ек▓╗ (objects), ▒о▒▓о┐╣ие из не▒кол╝ки╡ полей (elds), или, как гово░┐▓, име╛╣ие не▒кол╝ко а▓░иб│▓ов (attributes). Зна╖ение пол┐ запи▒╗вае▓▒┐ как
им┐ пол┐[им┐ об║ек▓а]. Нап░име░, длина ма▒▒ива ▒╖и▓ае▓▒┐
его а▓░иб│▓ом и обозна╖ае▓▒┐ length, ▓ак ╖▓о длина ма▒▒ива A
запи╕е▓▒┐ как length[A]. Ч▓о обозна╖а╛▓ квад░а▓н╗е ▒кобки
(╜лемен▓ ма▒▒ива или поле об║ек▓а), б│де▓ ┐▒но из кон▓ек▒▓а.
Пе░еменна┐, обозна╖а╛╣а┐ ма▒▒ив или об║ек▓, ▒╖и▓ае▓▒┐ │каза▓елем на ▒о▒▓авл┐╛╣ие его данн╗е. По▒ле п░и▒ваивани┐ y x дл┐
л╛бого пол┐ f в╗полнено f [y ] = f [x]. Более ▓ого, е▒ли м╗ ▓епе░╝
в╗полним опе░а▓о░ f [x] 3, ▓о б│де▓ не ▓ол╝ко f [x] = 3, но и
f [y] = 3, по▒кол╝к│ по▒ле y x пе░еменн╗е x и y │каз╗ва╛▓ на
один и ▓о▓ же об║ек▓.
Указа▓ел╝ може▓ име▓╝ ▒пе╢иал╝ное зна╖ение nil, не │каз╗ва╛╣ее ни на один об║ек▓.
8. Па░аме▓░╗ пе░еда╛▓▒┐ по зна╖ени╛ (by value): в╗званна┐ п░о╢ед│░а пол│╖ае▓ ▒об▒▓венн│╛ копи╛ па░аме▓░ов; изменение па░аме▓░а вн│▓░и п░о╢ед│░╗ ▒на░│жи невидимо. П░и пе░еда╖е об║ек-
18
Глава 1 Введение
▓ов копи░│е▓▒┐ │каза▓ел╝ на данн╗е, ▒о▒▓авл┐╛╣ие ╜▓о▓ об║ек▓,
а ▒ами пол┐ об║ек▓а | не▓. Нап░име░, е▒ли x | па░аме▓░ п░о╢ед│░╗, ▓о п░и▒ваивание x y , в╗полненное вн│▓░и п░о╢ед│░╗,
▒на░│жи заме▓и▓╝ нел╝з┐, а п░и▒ваивание f [x] 3 | можно.
Уп░ажнени┐
1.1-1
След│┐ об░аз╢│ ░и▒. 1.2, покажи▓е, как ░або▓ае▓
Insertion-Sort на в╡оде A = h31; 41; 59; 26; 41; 58i.
1.1-2 Измени▓е п░о╢ед│░│ Insertion-Sort ▓ак, ╖▓об╗ она ▒о░▓и░овала ╖и▒ла в невоз░а▒▓а╛╣ем по░┐дке (вме▒▓о не│б╗ва╛╣его).
1.1-3 Ра▒▒мо▓░им ▒лед│╛╣│╛ зада╖│ пои▒ка:
В╡од: По▒ледова▓ел╝но▒▓╝ n ╖и▒ел A = ha1 ; a2; : : :; an i и ╖и▒ло v .
В╗╡од: Индек▒ i, дл┐ ко▓о░ого v = A[i], или ▒пе╢иал╝ное зна╖ение
nil, е▒ли v не в▒▓░е╖ае▓▒┐ в A.
Напи╕и▓е п░ог░амм│ линейного пои▒ка (linear search), ко▓о░╗й
по▒ледова▓ел╝но п░о▒ма▓░ивае▓ A в пои▒ка╡ v .
1.1-4 Дан╗ два n-зна╖н╗╡ двои╖н╗╡ ╖и▒ла, запи▒анн╗╡ в виде
n-╜лемен▓н╗╡ ма▒▒ивов A и B . Т░еб│е▓▒┐ поме▒▓и▓╝ и╡ ▒│мм│ (в
двои╖ной запи▒и) в (n + 1)-╜лемен▓н╗й ма▒▒ив C . У▓о╖ни▓е по▒▓ановк│ зада╖и и запи╕и▓е ▒оо▓ве▓▒▓в│╛╣│╛ п░ог░амм│ на п▒евдокоде.
1.2. Анализ алго░и▓мов
Ра▒▒ма▓░ива┐ ░азли╖н╗е алго░и▓м╗ ░е╕ени┐ одной и ▓ой же зада╖и, полезно п░оанализи░ова▓╝, ▒кол╝ко в╗╖и▒ли▓ел╝н╗╡ ░е▒│░▒ов они ▓░еб│╛▓ (в░ем┐ в╗полнени┐, пам┐▓╝), и в╗б░а▓╝ наиболее ╜┤┤ек▓ивн╗й. Коне╖но, надо догово░и▓╝▒┐ о ▓ом, кака┐ модел╝ в╗╖и▒лений и▒пол╝з│е▓▒┐. В ╜▓ой книге в ка╖е▒▓ве модели по
бол╝╕ей ╖а▒▓и и▒пол╝з│е▓▒┐ об╗╖на┐ одноп░о╢е▒▒о░на┐ ма╕ина ▒
п░оизвол╝н╗м до▒▓│пом (random-access machine, RAM), не п░ед│▒ма▓░ива╛╣а┐ па░аллел╝ного в╗полнени┐ опе░а╢ий. (М╗ ░а▒▒мо▓░им неко▓о░╗е модели па░аллел╝н╗╡ в╗╖и▒лений в по▒ледней ╖а▒▓и книги.)
Со░▓и░овка в▒▓авками: анализ
В░ем┐ ▒о░▓и░овки в▒▓авками зави▒и▓ о▓ ░азме░а ▒о░▓и░│емого ма▒▒ива: ╖ем бол╝╕е ма▒▒ив, ▓ем бол╝╕е може▓ по▓░ебова▓╝▒┐
Анализ алго░и▓мов
19
в░емени. Об╗╖но из│╖а╛▓ зави▒имо▒▓и в░емени ░або▓╗ о▓ ░азме░а в╡ода. (Вп░о╖ем, дл┐ алго░и▓ма ▒о░▓и░овки в▒▓авками важен
не ▓ол╝ко ░азме░ ма▒▒ива, но и по░┐док его ╜лемен▓ов: е▒ли ма▒▒ив
по╖▓и │по░┐до╖ен, ▓о в░емени ▓░еб│е▓▒┐ мен╝╕е.)
Как изме░┐▓╝ ░азме░ в╡ода (input size)? Э▓о зави▒и▓ о▓ конк░е▓ной зада╖и. В одни╡ ▒л│╖а┐╡ ░аз│мно ▒╖и▓а▓╝ ╖и▒ло ╜лемен▓ов на
в╡оде (▒о░▓и░овка, п░еоб░азование Ф│░╝е). В д░│ги╡ более е▒▓е▒▓венно ▒╖и▓а▓╝ об╣ее ╖и▒ло би▓ов, необ╡одимое дл┐ п░ед▒▓авлени┐ в▒е╡ в╡одн╗╡ данн╗╡. Иногда ░азме░ в╡ода изме░┐е▓▒┐ не одним ╖и▒лом, а не▒кол╝кими (нап░име░, ╖и▒ло ве░╕ин и ╖и▒ло ░ебе░
г░а┤а).
В░еменем ░або▓╗ (running time) алго░и▓ма м╗ наз╗ваем ╖и▒ло
╜лемен▓а░н╗╡ ╕агов, ко▓о░╗е он в╗полн┐е▓ | воп░о▒ ▓ол╝ко в
▓ом, ╖▓о ▒╖и▓а▓╝ ╜лемен▓а░н╗м ╕агом. М╗ б│дем полага▓╝, ╖▓о
одна ▒▓░ока п▒евдокода ▓░еб│е▓ не более ╖ем ┤ик▒и░ованного ╖и▒ла опе░а╢ий (е▒ли ▓ол╝ко ╜▓о не ▒лове▒ное опи▒ание какой-▓о ▒ложной опе░а╢ии | ▓ипа └о▓▒о░▓и░ова▓╝ в▒е ▓о╖ки по x-коо░дина▓е┴).
М╗ б│дем ░азли╖а▓╝ ▓акже в╗зов (call) п░о╢ед│░╗ (на ко▓о░╗й
│╡оди▓ ┤ик▒и░ованное ╖и▒ло опе░а╢ий) и ее и▒полнение (execution),
ко▓о░ое може▓ б╗▓╝ долгим.
И▓ак, ве░нем▒┐ к п░о╢ед│░е Insertion-Sort и о▓ме▓им около
каждой ▒▓░оки ее ▒▓оимо▒▓╝ (╖и▒ло опе░а╢ий) и ╖и▒ло ░аз, ко▓о░ое ╜▓а ▒▓░ока и▒полн┐е▓▒┐. Дл┐ каждого j о▓ 2 до n (зде▒╝
n = length[A] | ░азме░ ма▒▒ива) под▒╖и▓аем, ▒кол╝ко ░аз б│де▓
и▒полнена ▒▓░ока 5, и обозна╖им ╜▓о ╖и▒ло ╖е░ез tj . (Заме▓им, ╖▓о
▒▓░оки вн│▓░и ╢икла в╗полн┐╛▓▒┐ на один ░аз мен╝╕е, ╖ем п░ове░ка, по▒кол╝к│ по▒ледн┐┐ п░ове░ка в╗води▓ из ╢икла.)
Insertion-Sort(A)
▒▓оимо▒▓╝ ╖и▒ло ░аз
1 for j 2 to length[A]
c1
n
2
do key A[j ]
c2
n;1
3
. добави▓╝ A[j ] к о▓▒о░▓и░о. ванной ╖а▒▓и A[1 : :j ; 1]. 0
n;1
4
i j ;1
c4
nP; 1
n t
5
while i > 0 and A[i] > key
c5
j
Pjn=2
6
do A[i + 1] A[i]
c6
(
t
j ; 1)
Pjn=2
7
i i;1
c7
j =2 (tj ; 1)
8
A[i + 1] key
c8
n;1
С▓░ока ▒▓оимо▒▓и c, пов▓о░енна┐ m ░аз, дае▓ вклад cm в об╣ее ╖и▒ло опе░а╢ий. (Дл┐ коли╖е▒▓ва и▒пол╝зованной пам┐▓и ╜▓ого
20
Глава 1 Введение
▒каза▓╝ нел╝з┐!) Сложив вклад╗ в▒е╡ ▒▓░ок, пол│╖им
T (n) = c1n + c2(n ; 1) + c4(n ; 1) + c5
+ c6
n
X
j =2
n
X
j =2
(tj ; 1) + c7
tj +
n
X
j =2
(tj ; 1) + c8 (n ; 1):
Как м╗ │же гово░или, в░ем┐ ░або▓╗ п░о╢ед│░╗ зави▒и▓ не ▓ол╝ко
о▓ n, но и о▓ ▓ого, какой именно ма▒▒ив ░азме░а n подан ей на в╡од.
Дл┐ п░о╢ед│░╗ Insertion-Sort наиболее благоп░и┐▓ен ▒л│╖ай, когда ма▒▒ив │же о▓▒о░▓и░ован. Тогда ╢икл в ▒▓░оке 5 заве░╕ае▓▒┐
по▒ле пе░вой же п░ове░ки (по▒кол╝к│ A[i] 6 key п░и i = j ; 1), ▓ак
╖▓о в▒е tj ░авн╗ 1, и об╣ее в░ем┐ е▒▓╝
T (n) = c1n + c2(n ; 1) + c4(n ; 1) + c5(n ; 1) + c8 (n ; 1) =
= (c1 + c2 + c4 + c5 + c8 )n ; (c2 + c4 + c5 + c8):
Таким об░азом, в наиболее благоп░и┐▓ном ▒л│╖ае в░ем┐ T (n), необ╡одимое дл┐ об░або▓ки ма▒▒ива ░азме░а n, ┐вл┐е▓▒┐ линейной
┤│нк╢ией (linear function) о▓ n, ▓. е. имее▓ вид T (n) = an + b дл┐
неко▓о░╗╡ кон▒▓ан▓ a и b. (Э▓и кон▒▓ан▓╗ оп░едел┐╛▓▒┐ в╗б░анн╗ми зна╖ени┐ми c1; : : :; c8.)
Е▒ли же ма▒▒ив ░а▒положен в об░а▓ном (│б╗ва╛╣ем) по░┐дке,
в░ем┐ ░або▓╗ п░о╢ед│░╗ б│де▓ мак▒имал╝н╗м: кажд╗й ╜лемен▓
A[j ] п░иде▓▒┐ ▒░авни▓╝ ▒о в▒еми ╜лемен▓ами A[1] : : :A[j ; 1]. П░и
╜▓ом tj = j . В▒помина┐, ╖▓о
n
X
j =2
j = n(n + 1) ; 1;
2
n
X
j =2
(j ; 1) = n(n2; 1)
(▒м. гл. 3), пол│╖аем, ╖▓о в ╡│д╕ем ▒л│╖ае в░ем┐ ░або▓╗ п░о╢ед│░╗
░авно
n
(
n
+
1)
T (n) = c1n + c2(n ; 1) + c4(n ; 1) + c5
;1 +
2
n
(
n
;
1)
n
(
n
;
1)
+ c7
+ c8(n ; 1) =
+ c6
2
2
= c25 + c26 + c27 n2 + c1 + c2 + c4 + c25 ; c26 ; c27 + c8 n ;
; (c2 + c4 + c5 + c8):
Тепе░╝ ┤│нк╢и┐ T (n) | квад░а▓и╖на┐ (quadratic function), ▓. е.
имее▓ вид T (n) = an2 + bn + c. (Кон▒▓ан▓╗ a, b и c ▒нова оп░едел┐╛▓▒┐ зна╖ени┐ми c1{c8.)
Анализ алго░и▓мов
21
В░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае и в ▒░еднем
И▓ак, м╗ видим, ╖▓о в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае и в л│╖╕ем
▒л│╖ае мог│▓ ▒ил╝но ░азли╖а▓╝▒┐. Бол╝╕ей ╖а▒▓╝╛ на▒ б│де▓ ин▓е░е▒ова▓╝ в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае (worst-case running time),
ко▓о░ое оп░едел┐е▓▒┐ как мак▒имал╝ное в░ем┐ ░або▓╗ дл┐ в╡одов
данного ░азме░а. По╖ем│? Во▓ не▒кол╝ко п░и╖ин.
Зна┐ в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае, м╗ можем га░ан▓и░ова▓╝,
╖▓о в╗полнение алго░и▓ма закон╖и▓▒┐ за неко▓о░ое в░ем┐, даже не зна┐, какой именно в╡од (данного ░азме░а) попаде▓▒┐.
На п░ак▓ике └пло╡ие┴ в╡од╗ (дл┐ ко▓о░╗╡ в░ем┐ ░або▓╗ близко к мак▒им│м│) мог│▓ ╖а▒▓о попада▓╝▒┐. Нап░име░, дл┐ баз╗
данн╗╡ пло╡им зап░о▒ом може▓ б╗▓╝ пои▒к о▓▒│▓▒▓в│╛╣его
╜лемен▓а (довол╝но ╖а▒▓а┐ ▒и▓│а╢и┐).
В░ем┐ ░або▓╗ в ▒░еднем може▓ б╗▓╝ довол╝но близко к в░емени
░або▓╗ в ╡│д╕ем ▒л│╖ае. П│▒▓╝, нап░име░, м╗ ▒о░▓и░│ем ▒л│╖айно ░а▒положенн╗е n ╖и▒ел в помо╣╝╛ п░о╢ед│░╗ InsertionSort. Скол╝ко ░аз п░иде▓▒┐ в╗полни▓╝ ╢икл в ▒▓░ока╡ 5{8? В
▒░еднем около половин╗ ╜лемен▓ов ма▒▒ива A[1 : :j ; 1] бол╝е
A[j ], ▓ак ╖▓о tj в ▒░еднем можно ▒╖и▓а▓╝ ░авн╗м j=2, и в░ем┐ T (n) квад░а▓и╖но зави▒и▓ о▓ n.
В неко▓о░╗╡ ▒л│╖а┐╡ на▒ б│де▓ ин▓е░е▒ова▓╝ ▓акже ▒░еднее в░ем┐ ░або▓╗ (average-case running time, expexted running time) алго░и▓ма на в╡ода╡ данной длин╗. Коне╖но, ╜▓а вели╖ина зави▒и▓ о▓
в╗б░анного ░а▒п░еделени┐ ве░о┐▓но▒▓ей (об╗╖но ░а▒▒ма▓░ивае▓▒┐ ░авноме░ное ░а▒п░еделение), и на п░ак▓ике ░еал╝ное ░а▒п░еделение в╡одов може▓ оказа▓╝▒┐ ▒ов▒ем д░│гим. (Иногда его можно
п░еоб░азова▓╝ в ░авноме░ное, и▒пол╝з│┐ да▓╖ик ▒л│╖айн╗╡ ╖и▒ел.)
По░┐док ░о▒▓а
На╕ анализ в░емени ░або▓╗ п░о╢ед│░╗ Insertion-Sort б╗л
о▒нован на не▒кол╝ки╡ │п░о╣а╛╣и╡ п░едположени┐╡. Сна╖ала м╗
п░едположили, ╖▓о в░ем┐ в╗полнени┐ i-й ▒▓░оки по▒▓о┐нно и ░авно ci . За▓ем м╗ ог░│били о╢енк│ до an2 + bn + c. Сей╖а▒ м╗ пойдем
е╣е дал╝╕е и ▒кажем, ╖▓о в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае имее▓
по░┐док ░о▒▓а (rate of growth, order of growth) n2 , о▓б░а▒╗ва┐ ╖лен╗ мен╝╕и╡ по░┐дков (линейн╗е) и не ин▓е░е▒│┐▒╝ ко╜┤┤и╢иен▓ом
п░и n2 . Э▓о запи▒╗ва╛▓ ▓ак: T (n) = (n2 ) (под░обное об║┐▒нение
обозна╖ений м╗ о▓ложим до ▒лед│╛╣ей глав╗).
Алго░и▓м ▒ мен╝╕им по░┐дком ░о▒▓а в░емени ░або▓╗ об╗╖но
п░едпо╖▓и▓елен: е▒ли, ▒кажем, один алго░и▓м имее▓ в░ем┐ ░або▓╗
(n2 ), а д░│гой | (n3 ), ▓о пе░в╗й более ╜┤┤ек▓ивен (по к░айней
ме░е дл┐ до▒▓а▓о╖но длинн╗╡ в╡одов; б│д│▓ ли ░еал╝н╗е в╡од╗
▓аков╗ми | д░│гой воп░о▒).
22
Глава 1 Введение
Уп░ажнени┐
1.2-1 Б│дем ▒о░▓и░ова▓╝ ма▒▒ив из n ╜лемен▓ов ▓ак: п░о▒мо▓░им
его и найдем минимал╝н╗й ╜лемен▓, ко▓о░╗й ▒копи░│ем в пе░в│╛
┐╖ейк│ д░│гого ма▒▒ива. За▓ем п░о▒мо▓░им его ▒нова и найдем
▒лед│╛╣ий ╜лемен▓, и ▓ак далее. Такой ▒по▒об ▒о░▓и░овки можно
назва▓╝ ▒о░▓и░овкой в╗бо░ом (selection sort). Запи╕и▓е ╜▓о▓ алго░и▓м ▒ помо╣╝╛ п▒евдокода. Укажи▓е в░ем┐ его ░або▓╗ в л│╖╕ем
и ╡│д╕ем ▒л│╖а┐╡, и▒пол╝з│┐ -обозна╖ени┐.
1.2-2 Ве░нем▒┐ к алго░и▓м│ линейного пои▒ка (│п░. 1.1-3).
Скол╝ко ▒░авнений по▓░еб│е▓▒┐ в ▒░еднем ╜▓ом│ алго░и▓м│, е▒ли
и▒ком╗м ╜лемен▓ом може▓ б╗▓╝ л╛бой ╜лемен▓ ма▒▒ива (▒ одинаковой ве░о┐▓но▒▓╝╛)? Каково в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае и в
▒░еднем? Как запи▒а▓╝ ╜▓и в░емена ▒ помо╣╝╛ -обозна╖ений?
1.2-3 Дана по▒ледова▓ел╝но▒▓╝ ╖и▒ел x1; x2; : : :; xn . Покажи▓е,
╖▓о за в░ем┐ (n log n) можно оп░едели▓╝, е▒▓╝ ли в ╜▓ой по▒ледова▓ел╝но▒▓и два одинаков╗╡ ╖и▒ла.
1.2-4 Дан╗ ко╜┤┤и╢иен▓╗ a0 ; a1; : : :; an;1 много╖лена; ▓░еб│е▓▒┐
най▓и его зна╖ение в заданной ▓о╖ке x. Опи╕и▓е е▒▓е▒▓венн╗й алго░и▓м, ▓░еб│╛╣ий в░емени (n2 ). Как в╗полни▓╝ в╗╖и▒лени┐ за
в░ем┐ (n), не и▒пол╝з│┐ дополни▓ел╝ного ма▒▒ива? И▒пол╝з│й▓е
└▒╡ем│ Го░не░а┴:
nX
;1
i=0
ai xi = (: : : (an;1x + an;2 )x + : : : + a1 )x + a0 :
1.2-5 Как запи▒а▓╝ в╗░ажение n3 =1000 ; 100n2 ; 100n + 3 ▒ помо╣╝╛ -обозна╖ений?
1.2-6 По╖▓и л╛бой алго░и▓м можно немного измени▓╝, ░адикал╝но │мен╝╕ив в░ем┐ его ░або▓╗ в л│╖╕ем ▒л│╖ае. Как?
1.3. По▒▓░оение алго░и▓мов
Е▒▓╝ много ▒▓анда░▓н╗╡ п░иемов, и▒пол╝з│ем╗╡ п░и по▒▓░оении алго░и▓мов. Со░▓и░овка в▒▓авками ┐вл┐е▓▒┐ п░име░ом алго░и▓ма, дей▒▓в│╛╣его по ╕агам (incremental approach): м╗ добавл┐ем ╜лемен▓╗ один за д░│гим к о▓▒о░▓и░ованной ╖а▒▓и ма▒▒ива.
В ╜▓ом ░азделе м╗ покажем в дей▒▓вии д░│гой под╡од, ко▓о░╗й наз╗ва╛▓ └░аздел┐й и вла▒▓в│й┴ (divide-and-conquer approach),
и по▒▓░оим ▒ его помо╣╝╛ зна╖и▓ел╝но более б╗▒▓░╗й алго░и▓м
▒о░▓и░овки.
По▒▓░оение алго░и▓мов
23
1.3.1. П░ин╢ип └░аздел┐й и вла▒▓в│й┴
Многие алго░и▓м╗ по п░и░оде ░ек│░▒ивн╗ (recursive algorithms):
░е╕а┐ неко▓о░│╛ зада╖│, они в╗з╗ва╛▓ ▒ами╡ ▒еб┐ дл┐ ░е╕ени┐
ее подзада╖. Иде┐ ме▓ода └░аздел┐й и вла▒▓в│й┴ ▒о▒▓ои▓ как ░аз в
╜▓ом. Сна╖ала зада╖а ░азбивае▓▒┐ на не▒кол╝ко подзада╖ мен╝╕его ░азме░а. За▓ем ╜▓и зада╖и ░е╕а╛▓▒┐ (▒ помо╣╝╛ ░ек│░▒ивного
в╗зова | или непо▒░ед▒▓венно, е▒ли ░азме░ до▒▓а▓о╖но мал). Наконе╢, и╡ ░е╕ени┐ комбини░│╛▓▒┐ и пол│╖ае▓▒┐ ░е╕ение и▒╡одной
зада╖и.
Дл┐ зада╖и ▒о░▓и░овки ╜▓и ▓░и ╜▓апа в╗гл┐д┐▓ ▓ак. Сна╖ала м╗ ░азбиваем ма▒▒ив на две половин╗ мен╝╕его ░азме░а. За▓ем м╗ ▒о░▓и░│ем кажд│╛ из половин о▓дел╝но. По▒ле ╜▓ого нам
о▒▓ае▓▒┐ ▒оедини▓╝ два │по░┐до╖енн╗╡ ма▒▒ива половинного ░азме░а в один. Рек│░▒ивное ░азбиение зада╖и на мен╝╕ие п░ои▒╡оди▓ до ▓е╡ по░, пока ░азме░ ма▒▒ива не дойде▓ до едини╢╗ (л╛бой
ма▒▒ив длин╗ 1 можно ▒╖и▓а▓╝ │по░┐до╖енн╗м).
Не▓░ивиал╝ной ╖а▒▓╝╛ ┐вл┐е▓▒┐ ▒оединение дв│╡ │по░┐до╖енн╗╡
ма▒▒ивов в один. Оно в╗полн┐е▓▒┐ ▒ помо╣╝╛ в▒помога▓ел╝ной
п░о╢ед│░╗ Merge(A; p; q; r). Па░аме▓░ами ╜▓ой п░о╢ед│░╗ ┐вл┐╛▓▒┐ ма▒▒ив A и ╖и▒ла p; q; r, │каз╗ва╛╣ие г░ани╢╗ ▒ливаем╗╡
│╖а▒▓ков. П░о╢ед│░а п░едполагае▓, ╖▓о p 6 q < r и ╖▓о │╖а▒▓ки
A[p : :q ] и A[q + 1 : :r] │же о▓▒о░▓и░ован╗, и ▒ливае▓ (merges) и╡ в
один │╖а▒▓ок A[p : :r].
М╗ о▒▓авл┐ем под░обн│╛ ░аз░або▓к│ ╜▓ой п░о╢ед│░╗ ╖и▓а▓ел╛
(│п░. 1.3-2), но довол╝но ┐▒но, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Merge
е▒▓╝ (n), где n | об╣а┐ длина ▒ливаем╗╡ │╖а▒▓ков (n = r ; p +1).
Э▓о легко об║┐▒ни▓╝ на ка░▓а╡. П│▒▓╝ м╗ имеем две ▒▓опки ка░▓,
и в каждой ка░▓╗ ид│▓ ▒ве░╡│ вниз в воз░а▒▓а╛╣ем по░┐дке. Как
▒дела▓╝ из ни╡ одн│? На каждом ╕аге м╗ бе░ем мен╝╕│╛ из дв│╡
ве░╡ни╡ ка░▓ и кладем ее (░│ба╕кой вве░╡) в ░ез│л╝▓и░│╛╣│╛
▒▓опк│. Когда одна из и▒╡одн╗╡ ▒▓опок ▒▓анови▓▒┐ п│▒▓ой, м╗ добавл┐ем в▒е о▒▓ав╕ие▒┐ ка░▓╗ в▓о░ой ▒▓опки к ░ез│л╝▓и░│╛╣ей
▒▓опке. Я▒но, ╖▓о кажд╗й ╕аг ▓░еб│е▓ ог░ани╖енного ╖и▒ла дей▒▓вий, и об╣ее ╖и▒ло дей▒▓вий е▒▓╝ (n).
Тепе░╝ напи╕ем п░о╢ед│░│ ▒о░▓и░овки ▒ли┐нием Merge-Sort(A; p; r),
ко▓о░а┐ ▒о░▓и░│е▓ │╖а▒▓ок A[p : :r] ма▒▒ива A, не мен┐┐ о▒▓ал╝н│╛ ╖а▒▓╝ ма▒▒ива. П░и p > r │╖а▒▓ок ▒оде░жи▓ мак▒им│м один
╜лемен▓, и ▓ем ▒ам╗м │же о▓▒о░▓и░ован. В п░о▓ивном ▒л│╖ае
м╗ о▓╗▒киваем ╖и▒ло q , ко▓о░ое дели▓ │╖а▒▓ок на две п░име░но
░авн╗е ╖а▒▓и A[p : :q ] (▒оде░жи▓ dn=2e ╜лемен▓ов) и A[q + 1 : :r]
(▒оде░жи▓ bn=2c ╜лемен▓ов). Зде▒╝ ╖е░ез bxc м╗ обозна╖аем ╢ел│╛
╖а▒▓╝ x (наибол╝╕ее ╢елое ╖и▒ло, мен╝╕ее или ░авное x), а ╖е░ез
dxe | наимен╝╕ее ╢елое ╖и▒ло, бол╝╕ее или ░авное x.
24
Глава 1 Введение
sorted sequence | о▓▒о░▓и░ованна┐ по▒ледова▓ел╝но▒▓╝
merge | ▒ли┐ние
initial sequence | на╖ал╝на┐ по▒ледова▓ел╝но▒▓╝
Ри▒. 1.3
Со░▓и░овка ▒ли┐нием дл┐ ма▒▒ива A = h5; 2; 4; 6; 1; 3; 2; 6i.
Merge-Sort (A; p; r)
1 if p < r
2 then q b(p + r)=2c
3
Merge-Sort(A; p; q )
4
Merge-Sort(A; q + 1; r)
5
Merge(A; p; q; r)
Ве▒╝ ма▒▒ив ▓епе░╝ можно о▓▒о░▓и░ова▓╝ ▒ помо╣╝╛ в╗зова
Merge-Sort(A; 1; length[A]). Е▒ли длина ма▒▒ива n = length[A] е▒▓╝
▒▓епен╝ двойки, ▓о в п░о╢е▒▒е ▒о░▓и░овки п░оизойде▓ ▒ли┐ние па░
╜лемен▓ов в о▓▒о░▓и░ованн╗е │╖а▒▓ки длин╗ 2, за▓ем ▒ли┐ние па░
▓аки╡ │╖а▒▓ков в о▓▒о░▓и░ованн╗е │╖а▒▓ки длин╗ 4 и ▓ак далее до
n (на по▒леднем ╕аге ▒оедин┐╛▓▒┐ два о▓▒о░▓и░ованн╗╡ │╖а▒▓ка
длин╗ n=2). Э▓о▓ п░о╢е▒▒ показан на ░и▒. 1.3.
1.3.2. Анализ алго░и▓мов ▓ипа └░аздел┐й и вла▒▓в│й┴
Как о╢ени▓╝ в░ем┐ ░або▓╗ ░ек│░▒ивного алго░и▓ма? П░и под▒╖е▓е м╗ должн╗ │╖е▒▓╝ в░ем┐, за▓░а╖иваемое на ░ек│░▒ивн╗е в╗зов╗, ▓ак ╖▓о пол│╖ае▓▒┐ неко▓о░ое ░ек│░░ен▓ное ▒оо▓но╕ение
(recurrence equation). Далее ▒лед│е▓ о╢ени▓╝ в░ем┐ ░або▓╗, и▒╡од┐
из ╜▓ого ▒оо▓но╕ени┐.
Во▓ п░име░но как ╜▓о делае▓▒┐. П░едположим, ╖▓о алго░и▓м
░азбивае▓ зада╖│ ░азме░а n на a подзада╖, кажда┐ из ко▓о░╗╡ имее▓ в b ░аз мен╝╕ий ░азме░. Б│дем ▒╖и▓а▓╝, ╖▓о ░азбиение ▓░еб│е▓
в░емени D(n), а ▒оединение пол│╖енн╗╡ ░е╕ений | в░емени C (n).
По▒▓░оение алго░и▓мов
25
Тогда пол│╖аем ▒оо▓но╕ение дл┐ в░емени ░або▓╗ T (n) на зада╖а╡
░азме░а n (в ╡│д╕ем ▒л│╖ае): T (n) = aT (n=b) + D(n) + C (n). Э▓о
▒оо▓но╕ение в╗полнено дл┐ до▒▓а▓о╖но бол╝╕и╡ n, когда зада╖│
имее▓ ▒м╗▒л ░азбива▓╝ на подзада╖и. Дл┐ мал╗╡ n, когда ▓акое
░азбиение невозможно или не н│жно, п░имен┐е▓▒┐ какой-▓о п░┐мой ме▓од ░е╕ени┐ зада╖и. По▒кол╝к│ n ог░ани╖ено, в░ем┐ ░або▓╗
▓оже не п░ево▒╡оди▓ неко▓о░ой кон▒▓ан▓╗.
Анализ ▒о░▓и░овки ▒ли┐нием
Дл┐ п░о▒▓о▓╗ б│дем п░едполага▓╝, ╖▓о ░азме░ ма▒▒ива (n) е▒▓╝
▒▓епен╝ двойки. (Как м╗ │видим в главе 4, ╜▓о не о╖ен╝ ▒│╣е▒▓венно.) Тогда на каждом ╕аге ▒о░▓и░│ем╗й │╖а▒▓ок дели▓▒┐ на
две ░авн╗е половин╗. Разбиение на ╖а▒▓и (в╗╖и▒ление г░ани╢╗)
▓░еб│е▓ в░емени (1), а ▒ли┐ние | в░емени (n). Пол│╖аем ▒оо▓но╕ение
T (n) =
(
(1);
е▒ли n = 1,
2T (n=2) + (n=2); е▒ли n > 1.
Как м╗ │видим в главе 4, ╜▓о ▒оо▓но╕ение вле╖е▓ T (n) =
(n log n), где ╖е░ез log м╗ обозна╖аем двои╖н╗й лога░и┤м (о▒нование лога░и┤мов, вп░о╖ем, не иг░ае▓ ░оли, ▓ак как п░иводи▓
ли╕╝ к изменени╛ кон▒▓ан▓╗). По╜▓ом│ дл┐ бол╝╕и╡ n ▒о░▓и░овка ▒ли┐нием ╜┤┤ек▓ивнее ▒о░▓и░овки в▒▓авками, ▓░еб│╛╣ей
в░емени (n2 ).
Уп░ажнени┐
1.3-1 След│┐ об░аз╢│ ░и▒. 1.3, показа▓╝ ░або▓│ ▒о░▓и░овки ▒ли┐нием дл┐ ма▒▒ива A = h3; 41; 52; 26; 38; 57; 9; 49i.
1.3-2
1.3-3
Напи▒а▓╝ ▓ек▒▓ п░о╢ед│░╗ Merge (A; p; q; r).
Докажи▓е по инд│к╢ии, ╖▓о е▒ли
T (n) =
(
2;
е▒ли n = 2,
2T (n=2) + n; е▒ли n = 2k и k > 1,
▓о T (n) = n log n (п░и в▒е╡ n, ┐вл┐╛╣и╡▒┐ ▒▓епен┐ми двойки).
1.3-4 Со░▓и░овк│ в▒▓авками можно о┤о░ми▓╝ как ░ек│░▒ивн│╛
п░о╢ед│░│: жела┐ о▓▒о░▓и░ова▓╝ A[1 : :n], м╗ (░ек│░▒ивно) ▒о░▓и░│ем A[1 : :n ; 1], а за▓ем ▒▓авим A[n] на п░авил╝ное ме▒▓о в о▓▒о░▓и░ованном ма▒▒иве A[1 : :n ; 1]. Напи╕и▓е ░ек│░░ен▓ное ▒оо▓но╕ение дл┐ в░емени ░або▓╗ ▓акой п░о╢ед│░╗.
26
Глава 1 Введение
1.3-5 Возв░а╣а┐▒╝ к зада╖е пои▒ка (│п░. 1.1-3), заме▓им, ╖▓о п░и
пои▒ке в о▓▒о░▓и░ованном ма▒▒иве м╗ можем ▒на╖ала ▒░авни▓╝
и▒ком╗й ╜лемен▓ ▒о ▒░едним ╜лемен▓ом ма▒▒ива, │зна▓╝, в какой
половине его ▒лед│е▓ и▒ка▓╝, а за▓ем п░имени▓╝ ▓│ же иде╛ ░ек│░▒ивно. Такой ▒по▒об наз╗вае▓▒┐ двои╖н╗м пои▒ком (binary search).
Напи╕и▓е ▒оо▓ве▓▒▓в│╛╣│╛ п░ог░амм│, и▒пол╝з│┐ ╢икл или ░ек│░▒и╛. Об║┐▒ни▓е, по╖ем│ в░ем┐ ее ░або▓╗ е▒▓╝ (log n).
1.3-6 Заме▓им, ╖▓о ╢икл while в ▒▓░ока╡ 5{7 п░о╢ед│░╗
Insertion-Sort (░азд. 1.1) п░о▒ма▓░ивае▓ ╜лемен▓╗ о▓▒о░▓и░ованного │╖а▒▓ка A[1 : :j ; 1] под░┐д. Вме▒▓о ╜▓ого можно б╗ло
б╗ и▒пол╝зова▓╝ двои╖н╗й пои▒к (│п░. 1.3-5), ╖▓об╗ най▓и ме▒▓о
в▒▓авки за в░ем┐ (log n). Уда▒▓▒┐ ли ▓аким об░азом ▒дела▓╝
об╣ее в░ем┐ ░або▓╗ ░авн╗м (n log n)?
1.3-7? Дан ма▒▒ив S из n дей▒▓ви▓ел╝н╗╡ ╖и▒ел, а ▓акже ╖и▒ло
x. Как за в░ем┐ (n log n) оп░едели▓╝, можно ли п░ед▒▓ави▓╝ x в
виде ▒│мм╗ дв│╡ ╜лемен▓ов ма▒▒ива S ?
Заме╖ани┐
Как мог б╗ ▒каза▓╝ Коз╝ма П░│▓ков, ╡о░о╕ий алго░и▓м подобен о▒▓░ом│ нож│ | ▓о▓ и д░│гой до▒▓ига╛▓ ╢ели легко и п░о▒▓о.
Д░│гое ▒░авнение: ╖еловек, пол╝з│╛╣ий▒┐ пло╡им алго░и▓мом, подобен пова░│, о▓бива╛╣ем│ м┐▒о о▓ве░▓кой: едва ▒║едобн╗й и малоп░ивлека▓ел╝н╗й ░ез│л╝▓а▓ до▒▓игае▓▒┐ ╢еной бол╝╕и╡ │▒илий.
Ча▒▓о ░азни╢а межд│ пло╡им и ╡о░о╕им алго░и▓мом более ▒│╣е▒▓венна, ╖ем межд│ б╗▒▓░╗м и медленн╗м комп╝╛▓е░ом. П│▒▓╝
м╗ ╡о▓им о▓▒о░▓и░ова▓╝ ма▒▒ив из миллиона ╖и▒ел. Ч▓о б╗▒▓░ее
| ▒о░▓и░ова▓╝ его в▒▓авками на ▒│пе░комп╝╛▓е░е (100 миллионов опе░а╢ий в ▒ек│нд│) или ▒ли┐нием на дома╕нем комп╝╛▓е░е
(1 миллион опе░а╢ий)? П│▒▓╝ к ▓ом│ же ▒о░▓и░овка в▒▓авками напи▒ана на а▒▒ембле░е ╖░езв╗╖айно ╜кономно, и дл┐ ▒о░▓и░овки n
╖и▒ел н│жно, ▒кажем, ли╕╝ 2n2 опе░а╢ий. В ▓о же в░ем┐ алго░и▓м
▒ли┐нием напи▒ан без о▒обой забо▓╗ об ╜┤┤ек▓ивно▒▓и и ╖и▒ло
опе░а╢ий е▒▓╝ 50n log n. Дл┐ ▒о░▓и░овки миллиона ╖и▒ел пол│╖аем
2 (106)2 опе░а╢ий = 20 000 ▒ек│нд 5;56 ╖а▒ов
108 опе░а╢ий в ▒ек│нд│
дл┐ ▒│пе░комп╝╛▓е░а и в▒его
50 (106) log(106) опе░а╢ий 1 000 ▒ек│нд 17 мин│▓
106 опе░а╢ий в ▒ек│нд│
дл┐ дома╕него комп╝╛▓е░а.
М╗ видим, ╖▓о ░аз░або▓ка ╜┤┤ек▓ивн╗╡ алго░и▓мов | не менее
важна┐ комп╝╛▓е░на┐ ▓е╡нологи┐, ╖ем ░аз░або▓ка б╗▒▓░ой ╜лек▓░оники. В ╜▓ой обла▒▓и ▓акже п░ои▒╡оди▓ заме▓н╗й п░ог░е▒▒.
Зада╖и к главе 1
27
Уп░ажнени┐
1.3-1 П│▒▓╝ ▒о░▓и░овки в▒▓авками и ▒ли┐нием и▒полн┐╛▓▒┐ на
одной и ▓ой же ма╕ине и ▓░еб│╛▓ 8n2 и 64n log n ▒оо▓ве▓▒▓венно.
Дл┐ каки╡ зна╖ений n ▒о░▓и░овка в▒▓авками ┐вл┐е▓▒┐ более ╜┤┤ек▓ивной? Как можно │л│╖╕и▓╝ алго░и▓м ▒о░▓и░овки ▒ли┐нием?
1.3-2 П░и каком наимен╝╕ем зна╖ении n алго░и▓м, дела╛╣ий
100n2 опе░а╢ий, ╜┤┤ек▓ивнее алго░и▓ма, дела╛╣его 2n опе░а╢ий?
Зада╖и
1-1 С░авнение в░емени ░або▓╗
П│▒▓╝ имее▓▒┐ алго░и▓м, ░е╕а╛╣ий зада╖│ ░азме░а n за f (n)
мик░о▒ек│нд. Каков мак▒имал╝н╗й ░азме░ зада╖и, ко▓о░│╛ он
▒може▓ ░е╕и▓╝ за в░ем┐ t? Най▓и его дл┐ ┤│нк╢ий и в░емен, пе░е╖и▒ленн╗╡ в ▓абли╢е.
1
1
1
1
1
1
1
▒ек мин ╖а▒ ден╝ ме▒┐╢ год век
log
n
p
n
n
n log n
n2
n3
2n
n!
1-2 Со░▓и░овка в▒▓авками дл┐ ко░о▓ки╡ к│▒ков
А▒имп▓о▓и╖е▒ки ▒о░▓и░овка ▒ли┐нием б╗▒▓░ее ▒о░▓и░овки
в▒▓авками, но дл┐ мал╗╡ n ▒оо▓но╕ение об░а▓ное. По╜▓ом│ имее▓
▒м╗▒л до▒▓а▓о╖но ко░о▓кие к│▒ки не ░азбива▓╝ дал╝╕е, а п░имен┐▓╝ к ним ▒о░▓и░овк│ в▒▓авками. Воп░о▒ в ▓ом, где ▒лед│е▓
п░ове▒▓и г░ани╢│.
а. П│▒▓╝ ма▒▒ив длин╗ n ░азби▓ на k ╖а▒▓ей ░азме░а n=k. Покажи▓е, ╖▓о можно о▓▒о░▓и░ова▓╝ в▒е ╖а▒▓и по о▓дел╝но▒▓и (▒
помо╣╝╛ ▒о░▓и░овки в▒▓авками) за в░ем┐ (nk).
б. Покажи▓е, ╖▓о по▒ле ╜▓ого можно ▒ли▓╝ в▒е ╖а▒▓и в один │по░┐до╖енн╗й ма▒▒ив за в░ем┐ (n log(n=k)).
в. Тем ▒ам╗м об╣ее в░ем┐ ░або▓╗ ▓акого ▒ме╕анного алго░и▓ма
е▒▓╝ (nk + n log(n=k)). Какова мак▒имал╝на┐ ▒ко░о▒▓╝ ░о▒▓а k как
┤│нк╢ии о▓ n, п░и ко▓о░ом ╜▓о в░ем┐ по-п░ежнем│ е▒▓╝ (n log n)?
г. Как б╗ в╗ ▒▓али в╗би░а▓╝ оп▓имал╝ное зна╖ение k на п░ак-
28
Глава 1 Введение
▓ике?
1-3 Чи▒ло инве░▒ий
П│▒▓╝ A[1 : :n] | ма▒▒ив из n ░азли╖н╗╡ ╖и▒ел. На▒ б│де▓ ин▓е░е▒ова▓╝ коли╖е▒▓во инве░▒ий (inversions) в ╜▓ом ма▒▒иве, ▓. е.
╖и▒ло па░ i < j , дл┐ ко▓о░╗╡ A[i] > A[j ].
а. Укажи▓е п┐▓╝ инве░▒ий в ма▒▒иве h2; 3; 8; 6; 1i.
б. Каково мак▒имал╝но возможное ╖и▒ло инве░▒ий в ма▒▒иве длин╗ n?
в. Как ▒в┐зано в░ем┐ ░або▓╗ алго░и▓ма ▒о░▓и░овки в▒▓авками
и ╖и▒ло инве░▒ий? Об║┐▒ни▓е ▒вой о▓ве▓.
г. По▒▓░ой▓е алго░и▓м, ко▓о░╗й ▒╖и▓ае▓ ╖и▒ло инве░▒ий в ма▒▒иве длин╗ n за в░ем┐ (n log n). (Указание: Моди┤и╢и░│й▓е алго░и▓м ▒о░▓и░овки ▒ли┐нием.)
Заме╖ани┐
Е▒▓╝ множе▒▓во ╡о░о╕и╡ книг о по▒▓░оении алго░и▓мов. Во▓
неко▓о░╗е из ни╡: А╡о, Хопк░о┤▓ и Ул╝ман [4,5], Баа▒ [14], Б░а▒▒а░ и Б░е▓ли [14], Хо░ови╢ и Са╡ни [105], Кн│▓ [121, 122, 123],
Манбе░ [142], Мел╝╡о░н [144, 145, 146], П│░дом и Б░а│н [164], Рейнгол╝д, Ниве░гел╝▓ и Део [167], Седжвик [175], Уил┤ [201]. П░ак▓и╖е▒кие а▒пек▓╗ ░аз░або▓ки ╜┤┤ек▓ивн╗╡ алго░и▓мов: Бен▓ли
[24,25], Гонне▓ [90].
В 1968 год│ Кн│▓ оп│бликовал пе░в╗й из ▓░е╡ ▓омов ▒е░ии И▒к│▒▒▓во п░ог░амми░овани┐ дл┐ ЭВМ [121, 122, 123], ко▓о░╗й ▒▓ал
на╖алом новой ╜по╡и в на│ке об ╜┤┤ек▓ивн╗╡ алго░и▓ма╡. В▒е ▓░и
▓ома до ▒и╡ по░ о▒▓а╛▓▒┐ незаменим╗м ▒п░аво╖ником. Как пи╕е▓
Кн│▓, ▒лово └алго░и▓м┴ п░ои▒╡оди▓ о▓ имени а░аб▒кого ма▓ема▓ика дев┐▓ого века Ал-Хо░езми (al-Khow^arizm^, или al-Khw^arizm^).
А╡о, Хопк░о┤▓ и Ул╝ман [4] │казали на важно▒▓╝ а▒имп▓о▓и╖е▒кого анализа в░емени ░або▓╗ как ▒░ед▒▓ва ▒░авнени┐ ╜┤┤ек▓ивно▒▓и алго░и▓мов. Они ╕и░око и▒пол╝зовали ░ек│░░ен▓н╗е ▒оо▓но╕ени┐ дл┐ пол│╖ени┐ о╢енок в░емени ░або▓╗.
Книга Кн│▓а [123] ▒оде░жи▓ и▒╖е░п╗ва╛╣ее изложение множе▒▓ва алго░и▓мов ▒о░▓и░овки. Он ▒░авнивае▓ ░азли╖н╗е алго░и▓м╗, ▓о╖но под▒╖и▓╗ва┐ ╖и▒ло ░азли╖н╗╡ ╕агов (м╗ делали ╜▓о
дл┐ ▒о░▓и░овки ▒░авнением). Ра▒▒ма▓░ива╛▓▒┐ ░азли╖н╗е ва░иан▓╗ ▒о░▓и░овки в▒▓авками, вкл╛╖а┐ ▒о░▓и░овк│ Шелла (D. L. Shell),
ко▓о░а┐ и▒пол╝з│е▓ ▒о░▓и░овк│ подпо▒ледова▓ел╝но▒▓ей ▒ по▒▓о┐нн╗м ╕агом дл┐ │мен╝╕ени┐ ╖и▒ла опе░а╢ий.
Со░▓и░овка ▒ли┐нием ▓акже опи▒ана в книге Кн│▓а, ко▓о░╗й
│каз╗вае▓, ╖▓о ме╡ани╖е▒кое │▒▓░ой▒▓во дл┐ ▒ли┐ни┐ дв│╡ ▒▓опок пе░┤ока░▓ за один п░о╡од б╗ло изоб░е▓ено в 1938 год│. По-
Заме╖ани┐ к главе 1
29
видимом│, Джон ┤он Нейман (J. von Neumann), один из о▒нова▓елей ин┤о░ма▓ики, напи▒ал п░ог░амм│ ▒о░▓и░овки ▒ли┐нием дл┐
комп╝╛▓е░а EDVAC в 1945 год│.
I
Ма▓ема▓и╖е▒кие о▒нов╗ анализа алго░и▓мов
Введение
В ╜▓ой ╖а▒▓и ▒об░ан╗ ▒ведени┐ из ма▓ема▓ики, ко▓о░╗е и▒пол╝з│╛▓▒┐ п░и анализе алго░и▓мов. М╗ ▒ове▓│ем бегло п░о▒мо▓░е▓╝
ее и пе░ей▓и к ▒лед│╛╣им главам, возв░а╣а┐▒╝ к п░о▒мо▓░енном│
по ме░е надобно▒▓и.
В главе 2 м╗ вводим пон┐▓и┐ и обозна╖ени┐, ▒в┐занн╗е ▒ а▒имп▓о▓икой ┤│нк╢ий ( и д░.), а ▓акже неко▓о░╗е д░│гие. На╕а ╢ел╝
зде▒╝ не ░а▒▒каза▓╝ о ╖ем-▓о новом, а п░о▒▓о ▒огла▒ова▓╝ обозна╖ени┐ и ▓е░минологи╛.
В главе 3 п░ивод┐▓▒┐ ░азли╖н╗е ме▓од╗ в╗╖и▒лени┐ и о╢енки
▒│мм (под░обное изложение можно най▓и в л╛бом │╖ебнике ма▓ема▓и╖е▒кого анализа).
Глава 4 по▒в┐╣ена п░еоб░азовани╛ ░ек│░░ен▓н╗╡ ▒оо▓но╕ений
в ┐вн╗е о╢енки. М╗ ┤о░м│ли░│ем и доказ╗ваем об╣ее │▓ве░ждение ▓акого ░ода (▓ео░ема 4.1), ко▓о░ого в бол╝╕ин▒▓ве ▒л│╖аев
оказ╗вае▓▒┐ до▒▓а▓о╖но. Его доказа▓ел╝▒▓во довол╝но длинно, но
в дал╝ней╕ем не и▒пол╝з│е▓▒┐, ▓ак ╖▓о п░и пе░вом ╖▓ении его можно п░оп│▒▓и▓╝.
В главе 5 м╗ даем оп░еделени┐ ░азли╖н╗╡ пон┐▓ий, ▒в┐занн╗╡ ▒
множе▒▓вами, о▓но╕ени┐ми, ┤│нк╢и┐ми, г░а┤ами и де░ев╝┐ми, и
вводим ▒оо▓ве▓▒▓в│╛╣ие обозна╖ени┐.
Глава 6 по▒в┐╣ена о▒новн╗м пон┐▓и┐м комбина▓о░ики и ▓ео░ии
ве░о┐▓но▒▓ей. Бол╝╕а┐ ╖а▒▓╝ книги не и▒пол╝з│е▓ ╜▓ого ма▓е░иала, ▓ак ╖▓о п░и пе░вом ╖▓ении ╜▓│ глав│ (о▒обенно по▒ледние
░аздел╗) можно ▒мело п░оп│▒▓и▓╝, возв░а╣а┐▒╝ к п░оп│╣енном│
по ме░е надобно▒▓и.
2
Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
С░авнива┐ два алго░и▓ма ▒о░▓и░овки в главе 1, м╗ │▒▓ановили,
╖▓о в░ем┐ ░або▓╗ одного (▒о░▓и░овка ▒ли┐нием) п░име░но п░опо░╢ионал╝но n2 , а д░│гого (▒о░▓и░овка в▒▓авками) | n lg n. Каков╗
б╗ ни б╗ли ко╜┤┤и╢иен▓╗ п░опо░╢ионал╝но▒▓и, дл┐ до▒▓а▓о╖но
бол╝╕и╡ n пе░в╗й алго░и▓м ░або▓ае▓ б╗▒▓░ее.
Анализи░│┐ алго░и▓м, можно ▒▓а░а▓╝▒┐ най▓и ▓о╖ное ╖и▒ло в╗полн┐ем╗╡ им дей▒▓вий. Но в бол╝╕ин▒▓ве ▒л│╖аев иг░а не ▒▓ои▓
▒ве╖, и до▒▓а▓о╖но о╢ени▓╝ а▒имп▓о▓ик│ ░о▒▓а в░емени ░або▓╗
алго░и▓ма п░и ▒▓░емлении ░азме░а в╡ода к бе▒коне╖но▒▓и (asymptotic eciency). Е▒ли │ одного алго░и▓ма ▒ко░о▒▓╝ ░о▒▓а мен╝╕е,
╖ем │ д░│гого, ▓о в бол╝╕ин▒▓ве ▒л│╖аев он б│де▓ ╜┤┤ек▓ивнее дл┐
в▒е╡ в╡одов, к░оме ▒ов▒ем ко░о▓ки╡. (Хо▓┐ б╗ва╛▓ и и▒кл╛╖ени┐.)
2.1. А▒имп▓о▓и╖е▒кие обозна╖ени┐
Хо▓┐ во многи╡ ▒л│╖а┐╡ ╜▓и обозна╖ени┐ и▒пол╝з│╛▓▒┐ не┤о░мал╝но, полезно на╖а▓╝ ▒ ▓о╖н╗╡ оп░еделений.
-обозна╖ение
В главе 2 м╗ гово░или, ╖▓о в░ем┐ T (n) ░або▓╗ алго░и▓ма ▒о░▓и░овки в▒▓авками на в╡ода╡ длин╗ n е▒▓╝ (n2 ). То╖н╗й ▒м╗▒л ╜▓ого │▓ве░ждени┐ ▓акой: найд│▓▒┐ ▓акие кон▒▓ан▓╗ c1; c2 > 0 и ▓акое
╖и▒ло n0 , ╖▓о c1n2 6 T (n) 6 c2n2 п░и в▒е╡ n > n0 . Вооб╣е, е▒ли
g(n) | неко▓о░а┐ ┤│нк╢и┐, ▓о запи▒╝ f (n) = (g (n)) озна╖ае▓, ╖▓о
найд│▓▒┐ ▓акие c1 ; c2 > 0 и ▓акое n0 , ╖▓о 0 6 c1g (n) 6 f (n) 6 c2 g (n)
дл┐ в▒е╡ n > n0 (▒м. ░и▒. 2.1). (Запи▒╝ f (n) = (g (n)) ╖и▓ае▓▒┐ ▓ак:
└╜┤ о▓ ╜н е▒▓╝ ▓╜▓а о▓ же о▓ ╜н┴.)
[!!!!!!!!! Ри▒│нок 2.1 - подпи▒╝ к нем│: ]
Илл╛▒▓░а╢ии к оп░еделени┐м f (n) = (g (n)), f (n) = O(g (n)) и
f (n) = (g(n)).
Раз│мее▓▒┐, ╜▓о обозна╖ение ▒лед│е▓ │по▓░ебл┐▓╝ ▒ о▒▓о░ожно▒▓╝╛: │▒▓ановив, ╖▓о f1 (n) = (g (n)) и f2 (n) = (g (n)), не ▒лед│е▓
А▒имп▓о▓и╖е▒кие обозна╖ени┐
33
закл╛╖а▓╝, ╖▓о f1 (n) = f2 (n)!
Оп░еделение (g (n)) п░едполагае▓, ╖▓о ┤│нк╢ии f (n) и g (n)
а▒имп▓о▓и╖е▒ки нео▓░и╢а▓ел╝н╗, ▓. е. нео▓░и╢а▓ел╝н╗ дл┐ до▒▓а▓о╖но бол╝╕и╡ зна╖ений n. Заме▓им, ╖▓о е▒ли ┤│нк╢ии f и g ▒▓░ого положи▓ел╝н╗, ▓о можно и▒кл╛╖и▓╝ n0 из оп░еделени┐ (изменив
кон▒▓ан▓╗ c1 и c2 ▓ак, ╖▓об╗ дл┐ мал╗╡ n не░авен▒▓во ▓акже в╗полн┐ло▒╝).
Е▒ли f (n) = (g (n)), ▓о гово░┐▓, ╖▓о g (n) ┐вл┐е▓▒┐ а▒имп▓о▓и╖е▒ки ▓о╖ной о╢енкой дл┐ f (n). На ▒амом деле ╜▓о о▓но╕ение
▒имме▓░и╖но: е▒ли f (n) = (g (n)), ▓о g (n) = (f (n)).
Ве░нем▒┐ к п░име░│ из глав╗ 1 и п░ове░им, ╖▓о (1=2)n2 ; 3n =
(n2 ). Согла▒но оп░еделени╛, надо │каза▓╝ положи▓ел╝н╗е кон▒▓ан▓╗ c1; c2 и ╖и▒ло n0 ▓ак, ╖▓об╗ не░авен▒▓ва
c1n2 6 12 n2 ; 3n 6 c2n2
в╗полн┐ли▒╝ дл┐ в▒е╡ n > n0 . Разделим на n2 :
c1 6 21 ; n3 6 c2
Видно, ╖▓о в╗полнени┐ в▓о░ого не░авен▒▓ва до▒▓а▓о╖но положи▓╝
c2 = 1=2. Пе░вое б│де▓ в╗полнено, е▒ли (нап░име░) n0 = 7 и c1 =
1=14.
Д░│гой п░име░ и▒пол╝зовани┐ ┤о░мал╝ного оп░еделени┐: покажем, ╖▓о 6n3 6= (n2 ). В ▒амом деле, п│▒▓╝ найд│▓▒┐ ▓акие c2 и n0 ,
╖▓о 6n3 6 c2n2 дл┐ в▒е╡ n > n0 . Но ▓огда n 6 c2 =6 дл┐ в▒е╡ n > n0
| ╖▓о ┐вно не ▓ак.
О▓╗▒кива┐ а▒имп▓о▓и╖е▒ки ▓о╖н│╛ о╢енк│ дл┐ ▒│мм╗, м╗ можем о▓б░а▒╗ва▓╝ ╖лен╗ мен╝╕его по░┐дка, ко▓о░╗е п░и бол╝╕и╡
n ▒▓анов┐▓▒┐ мал╗ми по ▒░авнени╛ ▒ о▒новн╗м ▒лагаем╗м. Заме▓им ▓акже, ╖▓о ко╜┤┤и╢иен▓ п░и ▒▓а░╕ем ╖лене ░оли не иг░ае▓
(он може▓ повли┐▓╝ ▓ол╝ко на в╗бо░ кон▒▓ан▓ c1 и c2). Нап░име░, ░а▒▒мо▓░им квад░а▓и╖н│╛ ┤│нк╢и╛ f (n) = an2 + bn + c, где
a; b; c | неко▓о░╗е кон▒▓ан▓╗ и a > 0. О▓б░а▒╗ва┐ ╖лен╗ млад╕и╡ по░┐дков и ко╜┤┤и╢иен▓ п░и ▒▓а░╕ем ╖лене, на╡одим, ╖▓о
f (n) = (n2). Ч▓об╗ │беди▓╝▒┐ в ╜▓ом ┤о░мал╝но,
можно полоp
жи▓╝ c1 = a=4, c2 = 7a=4 и n0 = 2 max((jbj=a); jcj=a) (п░ове░╝▓е,
╖▓о ▓░ебовани┐ дей▒▓ви▓ел╝но в╗полнен╗). Вооб╣е, дл┐ л╛бого
полинома p(n) ▒▓епени d ▒ положи▓ел╝н╗м ▒▓а░╕им ко╜┤┤и╢иен▓ом имеем p(n) = (nd ) (зада╖а 2-1).
Упом┐нем важн╗й ╖а▒▓н╗й ▒л│╖ай и▒пол╝зовани┐ обозна╖ений: (1) обозна╖ае▓ ог░ани╖енн│╛ ┤│нк╢и╛, о▓деленн│╛ о▓ н│л┐ неко▓о░╗й положи▓ел╝ной кон▒▓ан▓ой п░и
до▒▓а▓о╖но бол╝╕и╡ зна╖ени┐╡ а░г│мен▓а. (Из кон▓ек▒▓а об╗╖но
┐▒но, ╖▓о именно ▒╖и▓ае▓▒┐ а░г│мен▓ом ┤│нк╢ии.)
34
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
O- и -обозна╖ени┐
Запи▒╝ f (n) = (g (n)) вкл╛╖ае▓ в ▒еб┐ две о╢енки: ве░╡н╛╛ и
нижн╛╛. И╡ можно ░аздели▓╝. Гово░┐▓, ╖▓о f (n) = O(g (n)), е▒ли
найде▓▒┐ ▓ака┐ кон▒▓ан▓а c > 0 и ▓акое ╖и▒ло n0 , ╖▓о 0 6 f (n) 6
cg (n) дл┐ в▒е╡ n > n0 Гово░┐▓, ╖▓о f (n) = (g (n)), е▒ли найде▓▒┐
▓ака┐ кон▒▓ан▓а c > 0 и ▓акое ╖и▒ло n0 , ╖▓о 0 6 cg (n) 6 f (n) дл┐
в▒е╡ n > n0 . Э▓и запи▒и ╖и▓а╛▓▒┐ ▓ак: └╜┤ о▓ ╜н е▒▓╝ о бол╝╕ое
о▓ же о▓ ╜н┴, └╜┤ о▓ ╜н е▒▓╝ омега бол╝╕а┐ о▓ же о▓ ╜н┴.
По-п░ежнем│ м╗ п░едполагаем, ╖▓о ┤│нк╢ии f и g нео▓░и╢а▓ел╝н╗ дл┐ до▒▓а▓о╖но бол╝╕и╡ зна╖ений а░г│мен▓а. Легко виде▓╝
(│п░. 2.1-5), ╖▓о в╗полнен╗ ▒лед│╛╣ие ▒вой▒▓ва:
Тео░ема 2.1. Дл┐ л╛б╗╡ дв│╡ ┤│нк╢ий f (n) и g (n) ▒вой▒▓во f (n) =
(g (n)) в╗полнено ▓огда и ▓ол╝ко ▓огда, когда f (n) = O(g (n)) и
f (n) = (g(n)).
Дл┐ л╛б╗╡ дв│╡ ┤│нк╢ий ▒вой▒▓ва f (n) = O(g (n)) и g (n) =
(f (n)) ░авно▒ил╝н╗.
Как м╗ видели, an2 + bn + c = (n2 ) (п░и положи▓ел╝н╗╡ a).
По╜▓ом│ an2 + bn + c = O(n2 ). Д░│гой п░име░: п░и a > 0 можно
напи▒а▓╝ an + b = O(n2) (положим c = a + jbj и n0 = 1). Заме▓им,
╖▓о в ╜▓ом ▒л│╖ае an + b 6= (n2 и an + b 6= (n2 ).
А▒имп▓о▓и╖е▒кие обозна╖ени┐ (, O и ) ╖а▒▓о │по▓░ебл┐╛▓▒┐
вн│▓░и ┤о░м│л. Нап░име░, в главе 1 м╗ пол│╖или ░ек│░░ен▓ное
▒оо▓но╕ение
T (n) = 2T (n=2) + (n)
дл┐ в░емени ░або▓╗ ▒о░▓и░овки ▒ли┐нием. Зде▒╝ (n) обозна╖ае▓
неко▓о░│╛ ┤│нк╢и╛, п░о ко▓о░│╛ нам важно зна▓╝ ли╕╝, ╖▓о она
не мен╝╕е c1n и не бол╝╕е c2n дл┐ неко▓о░╗╡ положи▓ел╝н╗╡ c1 и
c2 и дл┐ в▒е╡ до▒▓а▓о╖но бол╝╕и╡ n.
Ча▒▓о а▒имп▓о▓и╖е▒кие обозна╖ени┐ │по▓░ебл┐╛▓▒┐ не вполне
┤о░мал╝но, ╡о▓┐ и╡ под░аз│меваем╗й ▒м╗▒л об╗╖но ┐▒ен из кон▓ек▒▓а. Нап░име░, м╗ можем напи▒а▓╝ в╗░ажение
n
X
i=1
O(i)
име┐ в вид│ ▒│мм│ h(1) + h(2) + : : : + h(n), где h(i) | неко▓о░а┐
┤│нк╢и┐, дл┐ ко▓о░ой h(i) = O(i). Легко виде▓╝, ╖▓о ▒ама ╜▓а
▒│мма как ┤│нк╢и┐ о▓ n е▒▓╝ O(n2).
Типи╖н╗й п░име░ и▒пол╝зовани┐ а▒имп▓о▓и╖е▒ки╡ обозна╖ений | ╢епо╖ка ░авен▒▓в наподобие 2n2 + 3n + 1 = 2n2 + (n) =
(n2 ). В▓о░ое из ╜▓и╡ ░авен▒▓в (2n2 + (n) = (n2 )) понимае▓▒┐
п░и ╜▓ом ▓ак: какова б╗ ни б╗ла ┤│нк╢и┐ h(n) = (n) в левой
╖а▒▓и, ▒│мма 2n2 + h(n) е▒▓╝ (n2 ).
А▒имп▓о▓и╖е▒кие обозна╖ени┐
35
o- и !-обозна╖ени┐
Запи▒╝ f (n) = O(g (n)) озна╖ае▓, ╖▓о ▒ ░о▒▓ом n о▓но╕ение
f (n)=g (n) о▒▓ае▓▒┐ ог░ани╖енн╗м. Е▒ли к ▓ом│ же
f (n) = 0;
(2.1)
lim
n!1 g (n)
▓о м╗ пи╕ем f (n) = o(g (n)) (╖и▓ае▓▒┐ └╜┤ о▓ ╜н е▒▓╝ о малое о▓
же о▓ ╜н┴). Фо░мал╝но гово░┐, f (n) = o(g (n)), е▒ли дл┐ в▒┐кого
положи▓ел╝ного " > 0 найде▓▒┐ ▓акое n0 , ╖▓о 0 6 f (n) 6 "g (n) п░и
в▒е╡ n > n0 . (Тем ▒ам╗м запи▒╝ f (n) = o(g (n)) п░едполагае▓, ╖▓о
f (n) и g(n) нео▓░и╢а▓ел╝н╗ дл┐ до▒▓а▓о╖но бол╝╕и╡ n.)
П░име░: 2n = o(n2 ), но 2n2 6= o(n2 ).
Аналоги╖н╗м об░азом вводи▓▒┐ ! -обозна╖ение: гово░┐▓, ╖▓о
f (n) е▒▓╝ !(g (n)) (└╜┤ о▓ ╜н е▒▓╝ омега мала┐ о▓ же о▓ ╜н┴), е▒ли дл┐ л╛бого положи▓ел╝ного c ▒│╣е▒▓в│е▓ ▓акое n0 , ╖▓о 0 6
cg (n) 6 f (n) п░и в▒е╡ n > n0 . Д░│гими ▒ловами, f (n) = ! (g (n))
озна╖ае▓, ╖▓о g (n) = o(f (n)).
П░име░: n2 =2 = ! (n), но n2 =2 6= ! (n2 ).
С░авнение ┤│нк╢ий
Введенн╗е нами оп░еделени┐ облада╛▓ неко▓о░╗ми ▒вой▒▓вами
▓░анзи▓ивно▒▓и, ░е┤лек▒ивно▒▓и и ▒имме▓░и╖но▒▓и:
Т░анзи▓ивно▒▓╝:
f (n) = (g (n)) и g(n) = (h(n)) вле╖е▓ f (n) = (h(n)),
f (n) = O(g (n)) и g(n) = O(h(n)) вле╖е▓ f (n) = O(h(n)),
f (n) = (g (n)) и g(n) = (h(n)) вле╖е▓ f (n) = (h(n)),
f (n) = o(g(n)) и g (n) = o(h(n)) вле╖е▓ f (n) = o(h(n)),
f (n) = !(g (n)) и g(n) = !(h(n)) вле╖е▓ f (n) = ! (h(n)).
Ре┤лек▒ивно▒▓╝:
f (n) = (f (n)), f (n) = O(f (n)), f (n) = (f (n)).
Симме▓░и╖но▒▓╝:
f (n) = (g (n)) е▒ли и ▓ол╝ко е▒ли g(n) = (f (n)).
Об░а╣ение:
f (n) = O(g (n)) е▒ли и ▓ол╝ко е▒ли g (n) = (f (n)),
f (n) = o(g(n)) е▒ли и ▓ол╝ко е▒ли g (n) = ! (f (n)).
Можно п░ове▒▓и ▓ак│╛ па░аллел╝: о▓но╕ени┐ межд│ ┤│нк╢и┐ми
f и g подобн╗ о▓но╕ени┐м межд│ ╖и▒лами a и b:
f (n) = O(g (n))
f (n) = (g (n))
f (n) = (g(n))
f (n) = o(g (n))
f (n) = !(g (n))
a6b
a>b
a=b
a<b
a>b
36
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
Па░аллел╝ ╜▓а, вп░о╖ем, ве▒╝ма │▒ловна: ▒вой▒▓ва ╖и▒лов╗╡ не░авен▒▓в не пе░ено▒┐▓▒┐ на ┤│нк╢ии. Нап░име░, дл┐ л╛б╗╡ дв│╡
╖и▒ел a и b в▒егда или a 6 b, или a > b, однако нел╝з┐ │▓ве░жда▓╝, ╖▓о дл┐ л╛б╗╡ дв│╡ (положи▓ел╝н╗╡) ┤│нк╢ий f (n) и g (n)
или f (n) = O(g (n)), или f (n) = (g (n)). В ▒амом деле, можно п░ове░и▓╝, ╖▓о ни одно из ╜▓и╡ дв│╡ ▒оо▓но╕ений не в╗полнено дл┐
f (n) = n и g(n) = n1+sin n (показа▓ел╝ ▒▓епени в в╗░ажении дл┐
g(n) мен┐е▓▒┐ в ин▓е░вале о▓ 0 до 2). Заме▓им е╣е, ╖▓о дл┐ ╖и▒ел a 6 b вле╖е▓ a < b или a = b, в ▓о в░ем┐ как дл┐ ┤│нк╢ий
f (n) = O(g(n)) не вле╖е▓ f (n) = o(g(n)) или f (n) = (g (n)).
Уп░ажнени┐
2.1-1 П│▒▓╝ f (n) и g (n) нео▓░и╢а▓ел╝н╗ дл┐ до▒▓а▓о╖но бол╝╕и╡
n. Покажи▓е, ╖▓о max(f (n); g (n)) = (f (n) + g(n)).
2.1-2 Покажи▓е, ╖▓о
(n + a)b = (nb )
(2.2)
дл┐ л╛бого ве╣е▒▓венного a и дл┐ л╛бого b > 0.
2.1-3 По╖ем│ │▓ве░ждение └в░ем┐ ░або▓╗ алго░и▓ма A не мен╝╕е O(n2)┴ не имее▓ ▒м╗▒ла?
2.1-4
2.1-5
Можно ли │▓ве░жда▓╝, ╖▓о 2n+1 = O(2n )? Ч▓о 22n = O(2n )?
Докажи▓е ▓ео░ем│ 2.1.
2.1-6 П░иведи▓е п░име░ ┤│нк╢ий f (n) и g (n), дл┐ ко▓о░╗╡
f (n) = O(g (n)), но f (n) 6= o(g (n)) и f (n) 6= (g (n)).
2.1-7 Покажи▓е, ╖▓о ▒вой▒▓ва f (n) = o(g (n)) и f (n) = ! (g (n)) не
мог│▓ б╗▓╝ в╗полнен╗ однов░еменно.
2.1-8 А▒имп▓о▓и╖е▒кие обозна╖ени┐ мог│▓ б╗▓╝ введен╗ и дл┐
┤│нк╢ий, зави▒┐╣и╡ о▓ не▒кол╝ки╡ па░аме▓░ов. Гово░┐▓, ╖▓о
f (m; n) = O(g(m; n)), е▒ли найд│▓▒┐ n0 , m0 и положи▓ел╝ное c, дл┐
ко▓о░╗╡ 0 6 f (m; n) 6 cg (m; n) дл┐ в▒е╡ n > n0 и m > m0 . Дай▓е
аналоги╖н╗е оп░еделени┐ дл┐ (g (m; n)) и (g (m; n)).
2.2. С▓анда░▓н╗е ┤│нк╢ии и обозна╖ени┐
Моно▓онно▒▓╝
Гово░┐▓, ╖▓о ┤│нк╢и┐ f (n) моно▓онно воз░а▒▓ае▓ (is monotonically increasing), е▒ли f (m) 6 f (n) п░и m 6 n. Гово░┐▓, ╖▓о
С▓анда░▓н╗е ┤│нк╢ии и обозна╖ени┐
37
┤│нк╢и┐ f (n) моно▓онно │б╗вае▓ (is monotonically decreasing), е▒ли f (m) > f (n) п░и m 6 n. Гово░┐▓, ╖▓о ┤│нк╢и┐ f (n) ▒▓░ого
воз░а▒▓ае▓ (is strictly increasing), е▒ли f (m) < f (n) п░и m < n.
Гово░┐▓, ╖▓о ┤│нк╢и┐ f (n) ▒▓░ого │б╗вае▓ (is strictly decreasing),
е▒ли f (m) > f (n) п░и m < n.
Цел╗е п░иближени┐ ▒низ│ и ▒ве░╡│
Дл┐ л╛бого ве╣е▒▓венного ╖и▒ла x ╖е░ез bxc (the oor of x) м╗
обозна╖аем его ╢ел│╛ ╖а▒▓╝, ▓. е. наибол╝╕ее ╢елое ╖и▒ло, не п░ево▒╡од┐╣ее x. Симме▓░и╖н╗м об░азом dxe (the ceiling of x) обозна╖ае▓ наимен╝╕ее ╢елое ╖и▒ло, не мен╝╕ее x. О╖евидно,
x ; 1 < bxc 6 x 6 dxe < x + 1
дл┐ л╛бого x. К░оме ▓ого,
dn=2e + bn=2c = n
дл┐ л╛бого ╢елого n. Наконе╢, дл┐ л╛бого x и дл┐ л╛б╗╡ ╢ел╗╡
положи▓ел╝н╗╡ a и b имеем
ddx=ae=be = dx=abe
(2.3)
bbx=ac=bc = bx=abc
(2.4)
и
(╖▓об╗ │беди▓╝▒┐ в ╜▓ом, полезно заме▓и▓╝, ╖▓о дл┐ л╛бого z и
дл┐ ╢елого n ▒вой▒▓ва n 6 z и n 6 bz c ░авно▒ил╝н╗).
Ф│нк╢ии x 7! bxc и x 7! dxe моно▓онно воз░а▒▓а╛▓.
Много╖лен╗
Много╖леном (полиномом) ▒▓епени d о▓ пе░еменной n (polynomial in n of degree d) наз╗ва╛▓ ┤│нк╢и╛
p(n) =
d
X
i=0
ai ni
(d | нео▓░и╢а▓ел╝ное ╢елое ╖и▒ло). Чи▒ла a0 ; a1; : : :; ad наз╗ва╛▓
ко╜┤┤и╢иен▓ами (coecients) много╖лена. М╗ ▒╖и▓аем, ╖▓о ▒▓а░╕ий ко╜┤┤и╢иен▓ ad не ░авен н│л╛ (е▒ли ╜▓о не ▓ак, │мен╝╕им d
| ╜▓о можно ▒дела▓╝, е▒ли ▓ол╝ко много╖лен не ░авен н│л╛ ▓ожде▒▓венно).
Дл┐ бол╝╕и╡ зна╖ений n знак много╖лена p(n) оп░едел┐е▓▒┐
▒▓а░╕им ко╜┤┤и╢иен▓ом (о▒▓ал╝н╗е ╖лен╗ мал╗ по ▒░авнени╛ ▒
38
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
ним), ▓ак ╖▓о п░и ad > 0 много╖лен p(n) а▒имп▓о▓и╖е▒ки положи▓елен (положи▓елен п░и бол╝╕и╡ n) и можно напи▒а▓╝ p(n) =
(nd ).
П░и a > 0 ┤│нк╢и┐ n 7! na моно▓онно воз░а▒▓ае▓, п░и a 6
0 | моно▓онно │б╗вае▓. Гово░┐▓, ╖▓о ┤│нк╢и┐ f (n) полиномиал╝но ог░ани╖ена, е▒ли f (n) = nO(1) , или, д░│гими ▒ловами, е▒ли
f (n) = O(nk ) дл┐ неко▓о░ой кон▒▓ан▓╗ k (▒м. │п░. 2.2-2).
Эк▒понен▓╗
Дл┐ л╛б╗╡ ве╣е▒▓венн╗╡ m, n и a 6= 0 имеем
a0 = 1;
(am )n = amn ;
a1 = a;
(am )n = (an )m ;
a;1 = 1=a;
am an = am+n :
П░и a > 1 ┤│нк╢и┐ n 7! an моно▓онно воз░а▒▓ае▓.
М╗ б│дем иногда │▒ловно полага▓╝ 00 = 1.
Ф│нк╢и┐ n 7! an наз╗вае▓▒┐ показа▓ел╝ной ┤│нк╢ией, или ╜к▒понен▓ой (exponential). П░и a > 1 показа▓ел╝на┐ ┤│нк╢и┐ ░а▒▓е▓
б╗▒▓░ее л╛бого полинома: каково б╗ ни б╗ло b,
b
n =0
lim
n!1 an
(2.5)
или, д░│гими ▒ловами, nb = o(an ). Е▒ли в ка╖е▒▓ве о▒новани┐ ▒▓епени вз┐▓╝ ╖и▒ло e = 2;71828 : : : , ▓о ╜к▒понен▓│ можно запи▒а▓╝ в
виде ░┐да
1 k
3
2
X
ex = 1 + x + x2! + x3! + : : : = xk!
k=0
(2.6)
где k! = 1 2 3 : : : k (▒м. ниже о ┤ак▓о░иала╡).
Дл┐ в▒е╡ ве╣е▒▓венн╗╡ x в╗полнено не░авен▒▓во
ex > 1 + x
(2.7)
ко▓о░ое об░а╣ае▓▒┐ в ░авен▒▓во ли╕╝ п░и x = 0. П░и jxj 6 1 можно
о╢ени▓╝ ex ▒ве░╡│ и ▒низ│ ▓ак:
1 + x 6 ex 6 1 + x + x2
(2.8)
Можно ▒каза▓╝, ╖▓о ex = 1 + x + (x2 ) п░и x ! 0, име┐ в вид│
▒оо▓ве▓▒▓в│╛╣ее и▒▓олкование обозна╖ени┐ (в ко▓о░ом n ! 1
заменено на x ! 0).
;
П░и в▒е╡ x в╗полнено ░авен▒▓во limn!1 1 + nx n = ex .
С▓анда░▓н╗е ┤│нк╢ии и обозна╖ени┐
39
Лога░и┤м╗
М╗ б│дем и▒пол╝зова▓╝ ▓акие обозна╖ени┐:
lg n = log2 n (двои╖н╗й лога░и┤м),
ln n = loge n (на▓│░ал╝н╗й лога░и┤м),
lgk n = (lg n)k ;
lg lg n = lg(lg n) (пов▓о░н╗й лога░и┤м).
М╗ б│дем ▒╖и▓а▓╝, ╖▓о в ┤о░м│ла╡ знак лога░и┤ма о▓но▒и▓▒┐
ли╕╝ к непо▒░ед▒▓венно ▒лед│╛╣ем│ за ним в╗░ажени╛, ▓ак ╖▓о
lg n + k е▒▓╝ lg(n) + k (а не lg(n + k)). П░и b > 1 ┤│нк╢и┐ n 7! logb n
(оп░еделенна┐ п░и положи▓ел╝н╗╡ n) ▒▓░ого воз░а▒▓ае▓.
След│╛╣ие ▓ожде▒▓ва ве░н╗ п░и в▒е╡ a > 0, b > 0, c > 0 и п░и
в▒е╡ n (е▒ли ▓ол╝ко о▒новани┐ лога░и┤мов не ░авн╗ 1):
a = blogb a ;
logb (1=a) = ; logb a
logc (ab) = logc a + logc b;
logb a = log1 b
(2.9)
logb an = n logb a;
a
ca
alogb c = clogb a
logb a = log
logc b
Изменение о▒новани┐ │ лога░и┤ма │множае▓ его на кон▒▓ан▓│,
по╜▓ом│ в запи▒и ▓ипа O(log n) можно не │▓о╖н┐▓╝, каково о▒нование лога░и┤ма. М╗ б│дем ╖а╣е в▒его име▓╝ дело ▒ двои╖н╗ми
лога░и┤мами (они по┐вл┐╛▓▒┐, когда зада╖а дели▓▒┐ на две ╖а▒▓и)
и по▓ом│ о▒▓авл┐ем за ними обозна╖ение lg.
Дл┐ на▓│░ал╝ного лога░и┤ма е▒▓╝ ░┐д (ко▓о░╗й ▒╡оди▓▒┐ п░и
jxj < 1):
3
4
5
2
ln(1 + x) = x ; x2 + x3 ; x4 + x5 ; : : :
П░и x > ;1 ▒п░аведлив╗ не░авен▒▓ва
x
(2.10)
1 + x 6 ln(1 + x) 6 x
ко▓о░╗е об░а╣а╛▓▒┐ в ░авен▒▓ва ли╕╝ п░и x = 0.
Гово░┐▓, ╖▓о ┤│нк╢и┐ f (n) ог░ани╖ена полилога░и┤мом (is polylogaritmically bounded), е▒ли f (n) = lgO(1) n. П░едел (2:5) по▒ле под▒▓ановок n = lg m и a = 2c дае▓
lgb m = lim lgb m = 0
lim
m!1 (2c )lg m m!1 mc
и, ▓аким об░азом, lgb n = o(nc ) дл┐ л╛бой кон▒▓ан▓╗ c > 0. Д░│гими ▒ловами, л╛бой полином ░а▒▓е▓ б╗▒▓░ее л╛бого полилога░и┤ма.
40
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
Фак▓о░иал╗
Запи▒╝ n! (╖и▓ае▓▒┐ └╜н ┤ак▓о░иал┴, \n factorial") обозна╖ае▓
п░оизведение в▒е╡ ╖и▒ел о▓ 1 до n. Полага╛▓ 0! = 1, ▓ак ╖▓о n! =
n (n ; 1)! п░и в▒е╡ n = 1; 2; 3; : : : .
С░аз│ же видно, ╖▓о n! 6 nn (кажд╗й из ▒омножи▓елей не бол╝╕е n). Более ▓о╖на┐ о╢енка дае▓▒┐ ┤о░м│лой С▓и░линга (Stirling's
approximation), ко▓о░а┐ гла▒и▓, ╖▓о
p n
n! = 2n ne (1 + (1=n))
(2.11)
Из ┤о░м│л╗ С▓и░линга ▒лед│е▓, ╖▓о
n! = o(nn);
n! = ! (2n );
lg(n!) = (n lg n):
Сп░аведлива ▓акже ▒лед│╛╣а┐ о╢енка:
n
p n
2n ne 6 n! 6 2n ne e1=12n:
p
(2.12)
И▓е░а╢ии лога░и┤ма
М╗ и▒пол╝з│ем обозна╖ение log n (└лога░и┤м ▒о звездо╖кой о▓
╜н┴) дл┐ ┤│нк╢ии: наз╗ваемой и▓е░и░ованн╗м лога░и┤мом (iterated logarithm). Э▓а ┤│нк╢и┐ оп░едел┐е▓▒┐ ▓ак. Вна╖але ░а▒▒мо▓░им i-│╛ и▓е░а╢и╛ лога░и┤ма, ┤│нк╢и╛ lg(i) , оп░еделенн│╛ ▓ак:
lg(0) n = n и lg(i)(n) = lg(lg(i;1) n) п░и i > 0. (По▒леднее в╗░ажение
оп░еделено, е▒ли lg(i;1) n оп░еделено и положи▓ел╝но.) Б│д╝▓е внима▓ел╝н╗: обозна╖ени┐ lgi n и lg(i) n вне╕не по╡ожи, но озна╖а╛▓
▒ове░╕енно ░азн╗е ┤│нк╢ии.
Тепе░╝ lg n оп░едел┐е▓▒┐ как минимал╝ное ╖и▒ло i > 0, п░и ко▓о░ом lg(i) n 6 1. Д░│гими ▒ловами, lg n | ╜▓о ╖и▒ло ░аз, ко▓о░ое
н│жно п░имени▓╝ ┤│нк╢и╛ lg, ╖▓об╗ из n пол│╖и▓╝ ╖и▒ло, не п░ево▒╡од┐╣ее 1.
Ф│нк╢и┐ lg n ░а▒▓е▓ и▒кл╛╖и▓ел╝но медленно:
lg 2 = 1;
lg 4 = 2;
lg 16 = 3;
lg 65536 = 4;
lg 265536 = 5:
По▒кол╝к│ ╖и▒ло а▓омов в набл╛даемой ╖а▒▓и В▒еленной о╢енивае▓▒┐ как 1080, ╖▓о много мен╝╕е 265536, ▓о зна╖ени┐ n, дл┐ ко▓о░╗╡
lg n > 5, в░┐д ли мог│▓ в▒▓░е▓и▓╝▒┐.
С▓анда░▓н╗е ┤│нк╢ии и обозна╖ени┐
41
Чи▒ла Фибона╖╖и
По▒ледова▓ел╝но▒▓╝ ╖и▒ел Фибона╖╖и (Fibonacci numbers) оп░едел┐е▓▒┐ ░ек│░░ен▓н╗м ▒оо▓но╕ением:
F0 = 0; F1 = 1; Fi = Fi;1 + Fi;2 п░и i > 2
(2.13)
Д░│гими ▒ловами, в по▒ледова▓ел╝но▒▓и Фибона╖╖и
0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55 : : :
каждое ╖и▒ло ░авно ▒│мме дв│╡ п░ед╗д│╣и╡. Чи▒ла Фибона╖╖и
▒в┐зан╗ ▒ ▓ак наз╗ваем╗м о▓но╕ением золо▓ого ▒е╖ени┐ (golden
ratio) ' и ▒ ▒оп░┐женн╗м ▒ ним ╖и▒лом '^:
p
' = 1 +2 5 = 1;61803 : : : ;
p
1
;
'^ = 2 5 = ;0;61803 : : :
(2.14)
Именно, имее▓ ме▒▓о ┤о░м│ла
i
i
Fi = ' p; '^
(2.15)
5
ко▓о░│╛ можно доказа▓╝
по инд│к╢ии (│п░. 2.2-7). По▒кол╝к│ j'^j <
i =p5j мен╝╕е 1=p5 < 1=2, ▓ак ╖▓о Fi ░авно ╖и▒л│
1, ▒лагаемое
j
'
^
p
'i = 5, ок░│гленном│ до ближай╕его ╢елого.
Чи▒ло Fi б╗▒▓░о (╜к▒понен╢иал╝но) ░а▒▓е▓ ▒ ░о▒▓ом i.
Уп░ажнени┐
2.2-1 Покажи▓е, ╖▓о дл┐ моно▓онно воз░а▒▓а╛╣и╡ ┤│нк╢ий f (n)
и g (n) ┤│нк╢ии f (n) + g (n) и f (g (n)) б│д│▓ ▓акже моно▓онно воз░а▒▓а▓╝. Е▒ли к ▓ом│ же f (n) и g (n) нео▓░и╢а▓ел╝н╗ п░и в▒е╡ n,
▓о и ┤│нк╢и┐ f (n)g (n) б│де▓ моно▓онно воз░а▒▓а▓╝.
2.2-2 Покажи▓е, ╖▓о T (n) = nO(1) ▓огда и ▓ол╝ко ▓огда, когда
▒│╣е▒▓в│е▓ положи▓ел╝ное k, п░и ко▓о░ом T (n) = O(nk ) (▒╖и▓аем,
╖▓о T (n) > 1).
2.2-3
Докажи▓е ░авен▒▓ва (2.9).
2.2-4 Докажи▓е, ╖▓о lg(n!) = (n lg n) и ╖▓о n! = o(nn ).
2.2-5? Б│де▓ ли ┤│нк╢и┐ dlg ne! полиномиал╝но ог░ани╖енной?
Б│де▓ ли ┤│нк╢и┐ dlg lg ne! полиномиал╝но ог░ани╖енной?
2.2-6? Ч▓о бол╝╕е (п░и бол╝╕и╡ n): lg(lg n) или lg(lg n)?
42
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
2.2-7
Докажи▓е по инд│к╢ии ┤о░м│л│ (2.15).
2.2-8 Докажи▓е ▓ак│╛ о╢енк│ дл┐ ╖и▒ел Фибона╖╖и: Fi+2 > 'i
п░и i > 0 (зде▒╝ ' | о▓но╕ение золо▓ого ▒е╖ени┐).
Зада╖и
2-1 А▒имп▓о▓ика много╖ленов
П│▒▓╝ p(n) = a0 + a1 n + : : : + ad nd | много╖лен ▒▓епени d, п░и╖ем
ad > 0. Докажи▓е, ╖▓о
а. p(n) = O(nk ) п░и k > d.
б. p(n) = (nk ) п░и k 6 d.
в. p(n) = (nk ) п░и k = d.
г. p(n) = o(nk ) п░и k > d.
д. p(n) = ! (nk ) п░и k < d.
2-2 С░авнение а▒имп▓о▓ик
Дл┐ в▒е╡ кле▓ок ▒лед│╛╣ей ▓абли╢╗ о▓ве▓╝▓е └да┴ или └не▓┴ на
воп░о▒ о ▓ом, можно ли запи▒а▓╝ A как O, o, , ! или о▓ B
(k > 1, " > 0, c > 1 | неко▓о░╗е кон▒▓ан▓╗).
A
lgk n
nk
B
n"
cn
а.
б. p
в.
n nsin n
г. 2n
2n=2
lg
m
д. n
mlg n
е. lg(n!) lg(nn )
O o ! 2-3 С░авнение ▒ко░о▒▓и ░о▒▓а
а. Ра▒положи▓е ▒лед│╛╣ие 30 ┤│нк╢ий в по░┐дке │вели╖ени┐ ▒ко░о▒▓и ░о▒▓а (кажда┐ ┤│нк╢и┐ е▒▓╝ O(▒лед│╛╣а┐)) и о▓ме▓╝▓е, какие из ╜▓и╡ ┤│нк╢ий на ▒амом деле име╛▓ одинаков│╛ ▒ко░о▒▓╝
░о▒▓а (одна е▒▓╝ о▓ д░│гой):
p
lg(lg n) 2lg n ( 2)lg n n2
n!n (lg n)!
2
n
3
(3=2)
n
lg n lg(n!) 22
n1= lg n
n
lg
lg
n
ln ln n
lg n
n2 n
ln n p 1
2lg n (lgpn)lg n
en
4lg n (n + 1)! lg n
n
2n
n lg n 22n
lg lg n 2 2 lg n
б. Укажи▓е нео▓░и╢а▓ел╝н│╛ ┤│нк╢и╛ f (n), ко▓о░а┐ не ▒░авнима ни ▒ одной из ┤│нк╢ий gi ╜▓ой ▓абли╢╗ (f (n) не е▒▓╝ O(gi(n))
и gi (n) не е▒▓╝ O(f (n))).
+1
Зада╖и к главе 2
43
2-4 Свой▒▓ва а▒имп▓о▓и╖е▒ки╡ обозна╖ений
П│▒▓╝ ┤│нк╢ии f (n) и g (n) положи▓ел╝н╗ п░и до▒▓а▓о╖но бол╝╕и╡ n. Можно ли │▓ве░жда▓╝, ╖▓о
а. е▒ли f (n) = O(g (n)), ▓о g (n) = O(f (n))?
б. f (n) + g (n) = (min(f (n); g (n)))?
в. f (n) = O(g (n)) вле╖е▓ lg(f (n)) = O(lg(g (n))), е▒ли lg(g (n)) > 0
и f (n) > 1 дл┐ до▒▓а▓о╖но бол╝╕и╡ n?
г. f (n) = O(g (n)) вле╖е▓ 2f (n) = O(2g(n))?
д. f (n) = O((f (n))2)?
е. f (n) = O(g (n)) вле╖е▓ g (n) = (f (n))?
ж. f (n) = (f (n=2))?
з. f (n) + o(f (n)) = (f (n))?
2-5 Ва░иан▓╗ а▒имп▓о▓и╖е▒ки╡ обозна╖ений
В неко▓о░╗╡ книга╡ -обозна╖ение и▒пол╝з│е▓▒┐ в ином ▒м╗▒ле. М╗ б│дем и▒пол╝зова▓╝ обозна╖ение 1 дл┐ ╜▓ого ва░иан▓а,
╖▓об╗ избежа▓╝ п│▓ани╢╗. П│▒▓╝ f (n) и g (n) | ┤│нк╢ии на▓│░ал╝ного а░г│мен▓а. Гово░┐▓, ╖▓о f (n) = 1 (g (n)), е▒ли найде▓▒┐
положи▓ел╝ное ╖и▒ло c, п░и ко▓о░ом f (n) > cg (n) > 0 дл┐ бе▒коне╖но многи╡ на▓│░ал╝н╗╡ n.
а. Покажи▓е, ╖▓о дл┐ л╛б╗╡ дв│╡ ┤│нк╢ий f (n) и g (n), положи▓ел╝н╗╡ п░и бол╝╕и╡ зна╖ени┐╡ n, в╗полнено либо f (n) = O(g (n)),
либо f (n) = 1 (g (n)), и ╖▓о дл┐ на╕его п░ежнего оп░еделени┐
(g (n)) ╜▓ого │▓ве░жда▓╝ нел╝з┐.
б. Каков╗ возможн╗е до▒▓оин▒▓ва и недо▒▓а▓ки п░именени┐ о╢енок вида 1 п░и и▒▒ледовании в░емени ░або▓╗ алго░и▓мов?
Неко▓о░╗е ав▓о░╗ в запи▒и f (n) = O(g (n)) не ▓░еб│╛▓, ╖▓об╗ ┤│нк╢и┐ f (n) б╗ла а▒имп▓о▓и╖е▒ки положи▓ел╝ной. Б│дем и▒пол╝зова▓╝ обозна╖ение O0 и ▒кажем, ╖▓о f (n) = O0(g (n)), е▒ли
jf (n)j = O(g(n)).
в. Ч▓о п░ои▒╡оди▓ п░и ▓аком оп░еделении ▒ │▓ве░ждени┐ми ▓ео░ем╗ 2.1?
Неко▓о░╗е ав▓о░╗ и▒пол╝з│╛▓ е╣е один ва░иан▓ оп░еделени┐:
б│дем гово░и▓╝, ╖▓о f (n) = O~ (g (n)), е▒ли найд│▓▒┐ положи▓ел╝н╗е
╖и▒ла c и k, дл┐ ко▓о░╗╡ 0 6 f (n) 6 cg (n) lgk n дл┐ в▒е╡ до▒▓а▓о╖но
бол╝╕и╡ n.
г. Оп░едели▓е ~ и ~ аналоги╖н╗м об░азом и докажи▓е аналог
▓ео░ем╗ 2.1.
2-6 И▓е░а╢ии
М╗ и▓е░и░овали лога░и┤ми╖е▒к│╛ ┤│нк╢и╛, но аналоги╖на┐
опе░а╢и┐ возможна и дл┐ д░│ги╡ ┤│нк╢ий. П│▒▓╝ f (n) | неко▓о░а┐
┤│нк╢и┐, п░и╖ем f (n) < n. Оп░еделим f (i)(n), положив f (0)(n) = n
и f (i)(n) = f (f (i;1)(n)) п░и i > 0.
Дл┐ ┤ик▒и░ованного ╖и▒ла c оп░еделим ┤│нк╢и╛ fc (n) как ми-
44
Глава 2 Ско░о▒▓╝ ░о▒▓а ┤│нк╢ий
нимал╝ное i > 0, дл┐ ко▓о░ого f (i) (n) 6 c. (Д░│гими ▒ловами, fc |
╜▓о ▒кол╝ко ░аз н│жно п░имен┐▓╝ ┤│нк╢и╛ f , ╖▓об╗ из n пол│╖и▓╝
╖и▒ло, не п░ево▒╡од┐╣ее c.) Заме▓им, ╖▓о fc(n) оп░еделено далеко
не в▒егда.
Дл┐ каждой из ▒лед│╛╣и╡ ┤│нк╢ий f (n) и зна╖ений c о╢ени▓е
fc возможно ▓о╖нее:
а.
б.
в.
г.
д.
е.
ж.
з.
f (n)
lg n
n;1
n=2
n=
pn2
pn
n1=3
n= lg n
c fc(n)
1
0
1
2
2
1
2
2
Заме╖ани┐
Как ▒╖и▓ае▓ Кн│▓ [121], и▒пол╝зование O-обозна╖ений во▒╡оди▓ к │╖ебник│ по ▓ео░ии ╖и▒ел (P. Bachmann, 1892). Обозна╖ение o(g (n)) б╗ло и▒пол╝зовано Ланда│ (E. Landau) в 1909 год│ п░и об▒│ждении ░а▒п░еделени┐ п░о▒▓╗╡ ╖и▒ел. И▒пол╝зование
- и -обозна╖ений ░екомендовано Кн│▓ом [124]: ╜▓и обозна╖ени┐ позвол┐╛▓ избежа▓╝ ▓е╡ни╖е▒ки неко░░ек▓ного │по▓░еблени┐
O-обозна╖ений дл┐ нижни╡ о╢енок (╡о▓┐ многие л╛ди п░одолжа╛▓ ▓ак дела▓╝). Под░обнее об а▒имп▓о▓и╖е▒ки╡ обозна╖ени┐╡ ▒м.
Кн│▓ [121, 124] и Б░а▒▒а░ и Б░е▓ли [33].
Одни и ▓е же обозна╖ени┐ по░ой и▒пол╝з│╛▓▒┐ в ░азли╖н╗╡ ▒м╗▒ла╡, ╡о▓┐ ░азни╢а, как п░авило, оказ╗вае▓▒┐ не▒│╣е▒▓венной. В
╖а▒▓но▒▓и, иногда ▒░авниваем╗е ┤│нк╢ии не п░едполага╛▓▒┐ нео▓░и╢а▓ел╝н╗ми п░и бол╝╕и╡ n (и ▒░авнива╛▓▒┐ мод│ли).
С│╣е▒▓в│е▓ много ▒п░аво╖ников, ▒оде░жа╣и╡ ▒ведени┐ об ╜лемен▓а░н╗╡ ┤│нк╢и┐╡: Аб░амови╖ и С▓ег│н [1], Бейе░ [27]. Можно
▓акже вз┐▓╝ л╛бой │╖ебник по анализ│ (▒м., нап░име░, Апо▒▓ол [12]
или Тома▒ и Финни [192]). Книга Кн│▓а [121] ▒оде░жи▓ много полезн╗╡ ма▓ема▓и╖е▒ки╡ ▒ведений, и▒пол╝з│ем╗╡ п░и анализе алго░и▓мов.
3
С│мми░ование
Е▒ли алго░и▓м ▒оде░жи▓ ╢икл (for, while), ▓о в░ем┐ его ░або▓╗
┐вл┐е▓▒┐ ▒│ммой в░емен о▓дел╝н╗╡ ╕агов. Нап░име░, как м╗ знаем из ░аздела 1.2, в╗полнение j -го ╕ага алго░и▓ма ▒о░▓и░овки
в▒▓авками ▓░еб│е▓ в░емени, п░опо░╢ионал╝ного j . По╜▓ом│ об╣ее
в░ем┐ б│де▓ оп░едел┐▓╝▒┐ ▒│ммой
n
X
j =1
j;
ко▓о░а┐ е▒▓╝ (n2 ). Подобного ░ода ▒│мм╗ нам не ░аз в▒▓░е▓┐▓▒┐
(в ╖а▒▓но▒▓и, в главе 4 п░и анализе ░ек│░░ен▓н╗╡ ▒оо▓но╕ений).
В ░азделе 3.1 пе░е╖и▒лен╗ о▒новн╗е ▒вой▒▓ва ▒│мм. Неко▓о░╗е
из ╜▓и╡ ▒вой▒▓в доказ╗ва╛▓▒┐ в ░азделе 3.2; бол╝╕ин▒▓во п░оп│╣енн╗╡ доказа▓ел╝▒▓в можно най▓и в │╖ебника╡ по ма▓ема▓и╖е▒ком│ анализ│.
3.1. С│мм╗ и и╡ ▒вой▒▓ва
Дл┐ ▒│мм╗ a1 + a2 + : : : + an и▒пол╝з│╛▓ обозна╖ение
n
X
k=1
ak :
П░и n = 0 зна╖ение ▒│мм╗ ▒╖и▓ае▓▒┐ ░авн╗м 0.
Как п░авило, нижний и ве░╡ний п░едел╗ ▒│мми░овани┐ | ╢ел╗е
╖и▒ла. (Е▒ли ╜▓о не ▓ак, об╗╖но под░аз│мева╛▓▒┐ ╢ел╗е ╖а▒▓и.)
В коне╖н╗╡ ▒│мма╡ ▒лагаем╗е можно п░оизвол╝но пе░е▒▓авл┐▓╝.
В к│░▒а╡ анализа оп░едел┐╛▓ ▒│мм│ бе▒коне╖ного ░┐да (series)
a1 + a2 + a3 + : : : или
1
X
k=1
ak
46
Глава 3 С│мми░ование
как п░едел по▒ледова▓ел╝но▒▓и ╖а▒▓и╖н╗╡ ▒│мм
lim
n!1
n
X
k=1
ak :
Е▒ли п░едела не ▒│╣е▒▓в│е▓, гово░┐▓, ╖▓о ░┐д ░а▒╡оди▓▒┐
(diP1
verges); в п░о▓ивном
▒л│╖ае
он
▒╡оди▓▒┐.
Е▒ли
░┐д
j
a
j
▒╡оk
k=1
P
ди▓▒┐, ▓о ░┐д 1
k=1 ak наз╗ва╛▓ аб▒ол╛▓но ▒╡од┐╣им▒┐ (absolutely
convergent series); в▒┐кий аб▒ол╛▓но ▒╡од┐╣ий▒┐ ░┐д ▒╡оди▓▒┐, но
не наобо░о▓. П░и пе░е▒▓ановке ╖ленов аб▒ол╛▓но ▒╡од┐╣его▒┐ ░┐да он о▒▓ае▓▒┐ аб▒ол╛▓но ▒╡од┐╣им▒┐ и его ▒│мма не мен┐е▓▒┐.
Линейно▒▓╝
Свой▒▓во линейно▒▓и гла▒и▓, ╖▓о
n
X
n
X
k=1
k=1
(cak + bk ) = c
ak +
n
X
k=1
bk
дл┐ л╛бого ╖и▒ла c и дл┐ л╛б╗╡ коне╖н╗╡ по▒ледова▓ел╝но▒▓ей
a1; : : :; an и b1; : : :; bn. По╖ленно ▒клад╗ва▓╝ и │множа▓╝ на ╖и▒ла
можно не ▓ол╝ко коне╖н╗е ▒│мм╗, но и ▒╡од┐╣ие▒┐ бе▒коне╖н╗е
░┐д╗.
А░и┤ме▓и╖е▒кие п░ог░е▒▒ии
С│мма
n
X
k=1
k = 1 + 2 + : : : + n;
ко▓о░а┐ возникла п░и анализе алго░и▓ма ▒о░▓и░овки в▒▓авками,
┐вл┐е▓▒┐ а░и┤ме▓и╖е▒кой п░ог░е▒▒ией (arithmetic series). Ее зна╖ение ░авно
n
X
k=1
k = 12 n(n + 1) =
= (n2 ):
(3.1)
(3.2)
Геоме▓░и╖е▒кие п░ог░е▒▒ии
П░и x 6= 1 ▒│мм│ геоме▓░и╖е▒кой п░ог░е▒▒ии (geometric или exponential series)
n
X
k=0
xk = 1 + x + x2 + : : : + xn
С│мм╗ и и╡ ▒вой▒▓ва
47
можно най▓и по ┤о░м│ле
n
X
k=0
n+1
xk = x x ;;1 1 :
(3.3)
С│мма бе▒коне╖но │б╗ва╛╣ей геоме▓░и╖е▒кой п░ог░е▒▒ии (п░и
jxj < 1) дае▓▒┐ ┤о░м│лой
1
X
k=0
xk = 1 ;1 x :
(3.4)
Га░мони╖е▒кий ░┐д
имее▓ вид 1 + 1=2 + 1=3 + : : : + 1=n + : : : ; его n-а┐ ╖а▒▓и╖на┐ ▒│мма
(nth harmonic number) ░авна
n
X
1
1
1
Hn = 1 + 2 + 3 + : : : + n = k1 = ln n + O(1):
k=1
(3.5)
По╖ленное ин▓ег░и░ование и ди┤┤е░ен╢и░ование
Ди┤┤е░ен╢и░│┐ или ин▓ег░и░│┐ обе ╖а▒▓и изве▒▓ного ▓ожде▒▓ва, можно пол│╖и▓╝ новое. Нап░име░, ди┤┤е░ен╢и░│┐ ▓ожде▒▓во (3.4) и │множа┐ ░ез│л╝▓а▓ на x, пол│╖аем
1
X
k=0
kxk = (1 ;x x)2 :
(3.6)
С│мм╗ ░азно▒▓ей
Дл┐ л╛бой по▒ледова▓ел╝но▒▓и a0; a1; : : :; an можно запи▒а▓╝ ▓ожде▒▓во
n
X
k=1
(ak ; ak;1 ) = an ; a0
(3.7)
(в▒е п░омеж│▓о╖н╗е ╖лен╗ ▒ок░а╣а╛▓▒┐). Такие ▒│мм╗ по-англий▒ки наз╗ва╛▓ telescoping series. Аналоги╖но,
n;1
X
k=0
(ak ; ak+1 ) = a0 ; an :
48
Глава 3 С│мми░ование
Э▓о▓ п░ием позвол┐е▓ п░о▒│мми░ова▓╝ ░┐д
1 , пол│╖аем, ╖▓о
▒кол╝к│ k(k1+1) = k1 ; k+1
nX
;1
Pn;1
1
k=1 k(k+1) .
По-
;1 1
1 = nX
1 = 1 ; 1:
;
n
k=1 k(k + 1) k=1 k k + 1
П░оизведени┐
П░оизведение ╖и▒ел a1; : : :; an запи▒╗ва╛▓ как
n
Y
k=1
ak :
П░и n = 0 зна╖ение defnп░оизведени┐ (product) ▒╖и▓ае▓▒┐ ░авн╗м 1. Лога░и┤ми░ование п░ев░а╣ае▓ п░оизведение в ▒│мм│:
lg
n
Y
k=1
ak =
n
X
k=1
lg ak :
Уп░ажнени┐
P
3.1-1 В╗╖и▒ли▓е nk=1 (2k ; 1).
3.1-2? Покажи▓е, и▒пол╝з│┐
┤о░м│л│ дл┐p╖а▒▓и╖н╗╡ ▒│мм га░моP
ни╖е▒кого ░┐да, ╖▓о nk=1 1=(2k ; 1) = ln( n) + O(1).
k
3.1-3? Покажи▓е, ╖▓о 1
k=0 (k ; 1)=2 = 0.
P
2k
3.1-4? В╗╖и▒ли▓е ▒│мм│ 1
k=1 (2k + 1)x .
P
3.1-5 И▒пол╝з│┐ линейно▒▓╝ ▒│мм╗, ▒┤о░м│ли░│й▓е и докажи▓е
│▓ве░ждение о возможно▒▓и пе░е▒▓ановки а▒имп▓о▓и╖е▒кого Oобозна╖ени┐ и ▒│мми░овани┐.
3.1-6 И▒пол╝з│┐ линейно▒▓╝ ▒│мм╗, ▒┤о░м│ли░│й▓е и докажи▓е │▓ве░ждение о возможно▒▓и пе░е▒▓ановки а▒имп▓о▓и╖е▒кого обозна╖ени┐ и ▒│мми░овани┐.
Q
3.1-7 В╗╖и▒ли▓е п░оизведение nk=1 2 4k .
Q
3.1-8? В╗╖и▒ли▓е п░оизведение nk=2 (1 ; 1=k2 ).
О╢енки ▒│мм
49
3.2. О╢енки ▒│мм
Ра▒▒мо▓░им не▒кол╝ко п░иемов, ко▓о░╗е позвол┐╛▓ най▓и зна╖ение ▒│мм╗ (или ╡о▓┐ б╗ о╢ени▓╝ ╜▓│ ▒│мм│ ▒ве░╡│ или ▒низ│).
Инд│к╢и┐
Е▒ли │дало▒╝ │гада▓╝ ┤о░м│л│ дл┐ ▒│мм╗, ее легко п░ове░и▓╝ ▒
помо╣╝╛ ма▓ема▓и╖е▒кой инд│к╢ии.
П░име░: докажем, ╖▓о ▒│мма
Pn
а░и┤ме▓и╖е▒кой п░ог░е▒▒ии Sn = k=1 k ░авна n(n+1)=2. П░и n =
1 ╜▓о ве░но. Тепе░╝ п░едположим, ╖▓о ░авен▒▓во Sn = n(n + 1)=2
ве░но п░и неко▓о░ом n и п░ове░им его дл┐ n + 1. В ▒амом деле,
nX
+1
k=1
k=
n
X
k=1
k + (n + 1) = n(n + 1)=2 + (n + 1) = (n + 1)(n + 2)=2:
Инд│к╢и╛ можно и▒пол╝зова▓╝ и дл┐ не░авен▒▓в.
поPn Нап░име░,
k е▒▓╝ O(3n).
кажем, ╖▓о ▒│мма геоме▓░и╖е▒кой
п░ог░е▒▒ии
3
k=0
P
То╖нее, м╗ покажем, ╖▓о nk=0 3k 6 c 3n дл┐ неко▓о░ой
кон▒▓ан▓╗
P
c (ко▓о░│╛ м╗ в╗бе░ем позднее). П░и n = 0 имеем 0k=0 3k = 1 6
c 1; ╜▓о ве░но п░и c > 1. П░едполага┐ ▒п░аведливо▒▓╝ о╢енки п░и
неко▓о░ом n, докажем ее дл┐ n + 1. Имеем:
nX
+1
n
X
1
1
k
k
n
+1
n
n
+1
3 = 3 + 3 6 c3 + 3 = 3 + c c3n+1 6 c3n+1:
k=0
k=0
По▒леднийPпе░е╡од законен, е▒ли (1=3 + 1=c) 6 1, ▓. е. е▒ли c > 3=2.
По╜▓ом│ nk=0 3k = O(3n ), ╖▓о и ▓░ебовало▒╝ доказа▓╝.
Инд│к╢ией ▒лед│е▓ пол╝зова▓╝▒┐ акк│░а▓но, о▒обенно п░и доказа▓ел╝▒▓ве а▒имп▓о▓и╖е▒ки╡ о╢енок,Pпо▒кол╝к│ ▓│▓ легко о╕иби▓╝▒┐.
Дл┐ п░име░а └докажем┴, ╖▓о nk=1 k = O(n). О╖евидно,
P1
k=1 k = O(1). П░едполага┐ ▒п░аведливо▒▓╝ о╢енки п░и неко▓о░ом n, докажем ее дл┐ ▒лед│╛╣его зна╖ени┐ n. В ▒амом деле,
nX
+1
k=1
k=
n
X
k=1
k + (n + 1) = O(n) + (n + 1) [неве░но!]
= O(n + 1):
О╕ибка в ▓ом, ╖▓о кон▒▓ан▓а, под░аз│меваема┐ в обозна╖ении
O(n), ░а▒▓е▓ вме▒▓е ▒ n.
По╖ленн╗е ▒░авнени┐
Иногда можно пол│╖и▓╝ ве░╡н╛╛ о╢енк│ дл┐ ▒│мм╗, заменив
кажд╗й ее ╖лен на бол╝╕ий (нап░име░, на наибол╝╕ий из ╖ленов
50
Глава 3 С│мми░ование
▒│мм╗). Так, п░о▒▓ей╕ей
о╢енкой ▒ве░╡│ дл┐ ▒│мм╗ а░и┤ме▓и╖еP
▒кой п░ог░е▒▒ии nk=1 k б│де▓
n
X
k=1
В об╣ем ▒л│╖ае
k6
n
X
k=1
n = n2:
n
X
ak 6 namax;
k=1
наибол╝╕ее из a1 ; : : :; an .
где amax |
В неко▓о░╗╡ ▒л│╖а┐╡ можно п░имени▓╝ более ▓о╖н╗й ме▓од |
▒░авнение
▒ геоме▓░и╖е▒кой п░ог░е▒▒ией. Доп│▒▓им, дан ░┐д
Pn
a
▒
положи▓ел╝н╗ми
╖ленами, дл┐ ко▓о░ого ak+1 =ak 6 r
k
k=0
п░и в▒е╡ k > 0 и неко▓о░ом r < 1. Тогда ak 6 a0 rk , и ▒│мма може▓
б╗▓╝ ог░ани╖ена ▒ве░╡│ бе▒коне╖ной │б╗ва╛╣ей геоме▓░и╖е▒кой
п░ог░е▒▒ией:
n
X
k=0
ak 6
1
X
k=0
rk
a0 = a0
1
X
rk = a0 1 ;1 r :
k=0
P
;k
╜▓о▓ ме▓од дл┐ ▒│мм╗ 1
k=1 k3 . Пе░в╗й ╖лен ░авен
П░именим
1=3, о▓но╕ение ▒о▒едни╡ ╖ленов ░авно
(k + 1)3;(k+1) = 1 k + 1 6 2
k3;k
3 k
3
дл┐ в▒е╡ k > 1. Следова▓ел╝но, кажд╗й ╖лен ▒│мм╗ о╢енивае▓▒┐
▒ве░╡│ вели╖иной (1=3)(2=3)k, ▓ак ╖▓о
1
X
1 1 2 k 1
X
;
k
k 3 6 3 3 = 3 1 2 = 1:
1; 3
k=1
k=1
Важно, ╖▓о о▓но╕ение ▒о▒едни╡ ╖ленов не п░о▒▓о мен╝╕е 1, а
ог░ани╖ено неко▓о░ой кон▒▓ан▓ой r < 1, об╣ей дл┐ в▒е╡ ╖ленов
░┐да. Нап░име░, дл┐ га░мони╖е▒кого ░┐да о▓но╕ение (k + 1)-го и
k < 1. Тем не менее
k-го ╖ленов ░авно k+1
1
X
k=1
n
1 = lim X
1 = lim (lg n) = 1:
k n!1 k n!1
k=1
Зде▒╝ не ▒│╣е▒▓в│е▓ кон▒▓ан▓╗ r, о▓дел┐╛╣ей о▓но╕ени┐ ▒о▒едни╡
╖ленов о▓ едини╢╗.
О╢енки ▒│мм
51
Разбиение на ╖а▒▓и
Можно ░азби▓╝ ▒│мм│ на ╖а▒▓и и о╢енива▓╝ кажд│╛ ╖а▒▓╝ по
о▓дел╝но▒▓и. В ка╖е▒▓ве п░име░а пол│╖им
нижн╛╛ о╢енк│ дл┐
P
▒│мм╗ а░и┤ме▓и╖е▒кой п░ог░е▒▒ии nk=1 k. Е▒ли
P м╗ о╢еним ▒низ│ кажд╗й ╖лен едини╢ей, ▓о пол│╖им о╢енк│ nk=1 k > n. Разни╢а
▒ ве░╡ней о╢енкой O(n2) ▒ли╕ком велика, по╜▓ом│ по▒▓│пим под░│гом│:
n
X
k=1
k=
n=2
X
k=1
k+
n
X
k=n=2+1
k>
n=2
X
k=1
0+
n
X
k=n=2+1
n = n 2 :
2
2
Э▓а о╢енка │же а▒имп▓о▓и╖е▒ки ▓о╖на (о▓ли╖ае▓▒┐ о▓ ве░╡ней
о╢енки, и ▓ем ▒ам╗м о▓ и▒▓инного зна╖ени┐, не более ╖ем в кон▒▓ан▓│ ░аз).
Иногда полезно о▓б░о▒и▓╝ не▒кол╝ко пе░в╗╡ ╖ленов по▒ледова▓ел╝но▒▓и, запи▒ав (дл┐ ┤ик▒и░ованного k0 )
n
X
k=0
ak =
k0
X
k=0
Нап░име░, дл┐ ░┐да
ak +
n
X
k=k0 +1
1
X
ak = (1) +
n
X
k=k0 +1
ak :
k2
k
k=0 2
о▓но╕ение по▒ледова▓ел╝н╗╡ ╖ленов
(k + 1)2=2k+1 = (k + 1)2
k2 =2k
2k2
не в▒егда мен╝╕е 1. По╜▓ом│, ╖▓об╗ п░имени▓╝ ме▓од ▒░авнени┐
▒ геоме▓░и╖е▒кой п░ог░е▒▒ией, в╗делим ▓░и пе░в╗╡ ╖лена ░┐да.
Дл┐ в▒е╡ ▒лед│╛╣и╡ ╖ленов (k > 3) о▓но╕ение не п░ево▒╡оди▓ 8=9,
по╜▓ом│
2 2 X
1 k2
1 8 k
1 k2 X
X
X
k
9
= O(1);
k =
k+
k 6 O(1) + 8
k=0 2
k=3 2
k=0 9
k=0 2
по▒кол╝к│ в▓о░а┐ ▒│мма | бе▒коне╖но │б╗ва╛╣а┐ геоме▓░и╖е▒ка┐
п░ог░е▒▒и┐.
Разбиение ░┐да на ╖а▒▓и б╗вае▓ полезно и в более ▒ложн╗╡ ▒и▓│а╢и┐╡.PО╢еним, нап░име░, ╖а▒▓и╖н╗е ▒│мм╗ га░мони╖е▒кого ░┐да
Hn = nk=1 1k . Дл┐ ╜▓ого ░азоб╝ем о▓░езок о▓ 1 до n на blg nc ╖а▒▓ей 1 + (1=2 + 1=3) + (1=4 + 1=5 + 1=6 + 1=7) + : : : . Кажда┐ ╖а▒▓╝ не
п░ево▒╡оди▓ 1 (заменим в▒е ▒лагаем╗е в ней на пе░вое из ни╡), в▒его ╖а▒▓ей blg nc + 1 (по▒ледн┐┐ може▓ б╗▓╝ неполной). Пол│╖аем,
╖▓о
1 + 1=2 + 1=3 + : : : + 1=n 6 lg n + 1:
(3.8)
52
Глава 3 С│мми░ование
С░авнение ▒ ин▓ег░алами
Дл┐ моно▓онно
воз░а▒▓а╛╣ей ┤│нк╢ии f м╗ можем закл╛╖и▓╝
Pn
▒│мм│ k=m f (k) межд│ дв│м┐ ин▓ег░алами:
Zn
f (x) dx 6
m;1
n
X
k=m
f (k ) 6
nZ+1
m
f (x) dx:
(3.9)
В ▒амом деле, как видно из ░и▒. 3.1, ▒│мма (пло╣ад╝ в▒е╡ п░┐мо│гол╝ников) ▒оде░жи▓ одн│ зак░а╕енн│╛ обла▒▓╝ (ве░╡ний ░и▒│нок) и ▒оде░жи▓▒┐ в д░│гой (нижний ░и▒│нок). Аналоги╖ное не░авен▒▓во можно напи▒а▓╝ дл┐ моно▓онно │б╗ва╛╣ей ┤│нк╢ии f :
nZ+1
n
X
m
k =m
f (x) dx 6
f (k) 6
Zn
m;1
f (x) dx:
(3.10)
Э▓им ме▓одом можно пол│╖и▓╝ ╡о░о╕ие о╢енки дл┐ ╖а▒▓и╖н╗╡
▒│мм га░мони╖е▒кого ░┐да: нижн╛╛ о╢енк│
n
X
nZ+1
1>
k=1 k
1
dx = ln(n + 1)
x
(3.11)
и ве░╡н╛╛ о╢енк│ (дл┐ ░┐да без пе░вого ╖лена)
n
X
k=2
16
k
Zn
о▓к│да
n
X
1
dx = ln n;
x
1 6 ln n + 1:
k=1 k
(3.12)
Уп░ажнени┐
P
3.2-1 Покажи▓е, ╖▓о ▒│мма nk=1 k1 ог░ани╖ена ▒ве░╡│ кон▒▓ан▓ой (не зави▒┐╣ей о▓ n).
3.2-2 Найди▓е а▒имп▓о▓и╖е▒к│╛ ве░╡н╛╛ о╢енк│ дл┐ ▒│мм╗
2
bX
lg nc
k=0
dn=2k e:
О╢енки ▒│мм
53
P
С░авнение ▒│мм╗ nk=m f (k) ▒ ин▓ег░алами. Вн│▓░и каждого п░┐мо│гол╝ника запи▒ана его пло╣ад╝. Об╣а┐ пло╣ад╝ в▒е╡ п░┐мо│гол╝ников ░авна
зна╖ени╛ ▒│мм╗. Зна╖ение ин▓ег░ала ░авноR nпло╣ади зак░а╕енной
┤иг│░╗ под
P
к░ивой. (а) С░авнива┐ пло╣ади, пол│╖аем m;1 f (x) dx 6 nk=m f (k). (б) СдвиR
P
га┐ п░┐мо│гол╝ники на едини╢│ вп░аво, видим, ╖▓о nk=m f (k) 6 mn+1 f (x) dx.
Ри▒. 3.1
54
Глава 3 С│мми░ование
3.2-3 Разбива┐ ▒│мм│ на ╖а▒▓и, покажи▓е, ╖▓о n-┐ ╖а▒▓и╖на┐
▒│мма га░мони╖е▒кого ░┐да е▒▓╝ (lg n).
P
3.2-4 Закл╛╖и▓е ▒│мм│ nk=1 k3 межд│ дв│м┐ ин▓ег░алами.
3.2-5 По╖ем│ п░и пол│╖ении ве░╡ней о╢енки дл┐ ╖а▒▓и╖ной ▒│мм╗ га░мони╖е▒кого ░┐да м╗ о▓б░о▒или пе░в╗й ╖лен и ▓ол╝ко по▓ом п░именили о╢енк│ (3.10)?
Зада╖и
3-1 О╢енки дл┐ ▒│мм
Найди▓е а▒имп▓о▓и╖е▒ки ▓о╖н╗е о╢енки дл┐ ▒лед│╛╣и╡ ▒│мм
(▒╖и▓а┐ r > 0 и s > 0 кон▒▓ан▓ами):
P
а. nk=1 kr .
P
б. nk=1 lgs k.
P
в. nk=1 kr lgs k.
Заме╖ани┐
Книга Кн│▓а [121] | п░ек░а▒н╗й ▒п░аво╖ник по ма▓е░иал│ ╜▓ой
глав╗. О▒новн╗е ▒вой▒▓ва ░┐дов можно най▓и в л╛бом │╖ебнике по
ма▓ема▓и╖е▒ком│ анализ│ (ав▓о░╗ о▓▒╗ла╛▓ англо┐з╗╖ного ╖и▓а▓ел┐ к книгам [12] и [192]).
4
Рек│░░ен▓н╗е ▒оо▓но╕ени┐
О╢енива┐ в░ем┐ ░або▓╗ ░ек│░▒ивной п░о╢ед│░╗, м╗ ╖а▒▓о п░и╡одим к ▒оо▓но╕ени╛, ко▓о░ое о╢енивае▓ ╜▓о в░ем┐ ╖е░ез в░ем┐
░або▓╗ ▓ой же п░о╢ед│░╗ на в╡одн╗╡ данн╗╡ мен╝╕его ░азме░а. Такого ░ода ▒оо▓но╕ени┐ наз╗ва╛▓▒┐ ░ек│░░ен▓н╗ми (recurrences). Нап░име░, как м╗ видели в главе 1, в░ем┐ ░або▓╗ п░о╢ед│░╗ Merge-Sort опи▒╗вае▓▒┐ ▒оо▓но╕ением
T (n) =
(
(1);
е▒ли n = 1,
2T (n=2) + (n); е▒ли n > 1.
(4.1)
из ко▓о░ого в╗▓екае▓ (как м╗ │видим), ╖▓о T (n) = (n lg n).
В ╜▓ой главе п░едлага╛▓▒┐ ▓░и ▒по▒оба, позвол┐╛╣ие ░е╕и▓╝
░ек│░░ен▓ное ▒оо▓но╕ение, ▓. е. най▓и а▒имп▓о▓и╖е▒к│╛ (└┴ или
└O┴) о╢енк│ дл┐ его ░е╕ений. Во-пе░в╗╡, можно │гада▓╝ о╢енк│,
а за▓ем доказа▓╝ ее по инд│к╢ии, под▒▓авл┐┐ │гаданн│╛ ┤о░м│л│ в п░ав│╛ ╖а▒▓╝ ▒оо▓но╕ени┐ (ме▓од под▒▓ановки, substitution
method). Во-в▓о░╗╡, можно └░азве░н│▓╝┴ ░ек│░░ен▓н│╛ ┤о░м│л│,
пол│╖ив п░и ╜▓ом ▒│мм│, ко▓о░│╛ можно за▓ем о╢енива▓╝ (ме▓од
и▓е░а╢ий, iteration method). Наконе╢, м╗ п░иводим об╣ий ░ез│л╝▓а▓ о ░ек│░░ен▓н╗╡ ▒оо▓но╕ени┐╡ вида
T (n) = aT (n=b) + f (n);
где a > 1, b > 1 | неко▓о░╗е кон▒▓ан▓╗, а f (n) | заданна┐ ┤│нк-
╢и┐. Соо▓ве▓▒▓в│╛╣ий ░ез│л╝▓а▓ м╗ б│де▓ наз╗ва▓╝ о▒новной ▓ео░емой о ░ек│░░ен▓н╗╡ ▒оо▓но╕ени┐╡ (master theorem). Фо░м│ли░овка ╜▓ой ▓ео░ем╗ довол╝но длинна, за▓о во многи╡ ▒л│╖а┐╡ она
▒░аз│ п░иводи▓ к о▓ве▓│.
Те╡ни╖е▒кие де▓али
Фо░м│ли░│┐ и доказ╗ва┐ │▓ве░ждени┐ п░о ░ек│░░ен▓н╗е ▒оо▓но╕ени┐, м╗ б│дем оп│▒ка▓╝ неко▓о░╗е ▓е╡ни╖е▒кие под░обно▒▓и.
Нап░име░, в п░иведенной в╗╕е ┤о░м│ле дл┐ п░о╢ед│░╗ Merge-
56
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
Sort должн╗ ▒▓о┐▓╝ ╢ел╗е ╖а▒▓и (T (n) оп░еделено ли╕╝ п░и ╢е-
л╗╡ n):
(
(1);
е▒ли n = 1,
(4.2)
T (dn=2e) + T (bn=2c) + (n); е▒ли n > 1.
К░оме ▓ого, об╗╖но м╗ б│дем оп│▒ка▓╝ на╖ал╝н╗е │▒лови┐, име┐
в вид│, ╖▓о T (n) = (1) дл┐ небол╝╕и╡ n. Таким об░азом, ▒оо▓но╕ение (4.1) запи╕е▓▒┐ в виде
T (n) = 2T (n=2) + (n):
(4.3)
Э▓о позволи▓ел╝но, ▓ак как на╖ал╝ное │▒ловие (зна╖ение T (1)) вли┐е▓ ▓ол╝ко на по▒▓о┐нн╗й множи▓ел╝, но не на по░┐док ░о▒▓а
┤│нк╢ии T (n).
Такое неб░ежное об░а╣ение ▒ де▓ал┐ми, коне╖но, ▓░еб│е▓ о▒▓о░ожно▒▓и, ╖▓об╗ не │п│▒▓и▓╝ (п│▒▓╝ ░едки╡) ▒л│╖аев, в ко▓о░╗╡
подобн╗е де▓али вли┐╛▓ на ░ез│л╝▓а▓. В ╜▓ой главе м╗ ░азбе░ем
не▒кол╝ко п░име░ов, показ╗ва╛╣и╡, как во▒полни▓╝ п░оп│╣енн╗е
де▓али (▒м. доказа▓ел╝▒▓во ▓ео░ем╗ 4.1 и зада╖│ 4.5).
T (n) =
4.1. Ме▓од под▒▓ановки
Иде┐ п░о▒▓а: о▓гада▓╝ о▓ве▓ и доказа▓╝ его по инд│к╢ии. Ча▒▓о
о▓ве▓ ▒оде░жи▓ ко╜┤┤и╢иен▓╗, ко▓о░╗е надо в╗б░а▓╝ ▓ак, ╖▓об╗
░а▒▒│ждение по инд│к╢ии п░о╡одило.
Инд│к▓ивн╗й ме▓од п░именим и к нижним, и к ве░╡ним о╢енкам. В ка╖е▒▓ве п░име░а найдем ве░╡н╛╛ о╢енк│ дл┐ ┤│нк╢ии,
заданной ▒оо▓но╕ением
T (n) = 2T (bn=2c) + n;
(4.4)
ко▓о░ое аналоги╖но (4.2) и (4.3). Можно п░едположи▓╝, ╖▓о T (n) =
O(n lg n), ▓. е. ╖▓о T (n) 6 cn lg n дл┐ под╡од┐╣его c > 0. Б│дем доказ╗ва▓╝ ╜▓о по инд│к╢ии. П│▒▓╝ ╜▓а о╢енка ве░на дл┐ bn=2c, ▓. е.
T (bn=2c) 6 cbn=2c lg(bn=2c). Под▒▓авив ее в ▒оо▓но╕ение, пол│╖им
T (n) 6 2(cbn=2c lg(bn=2c)) + n 6
6 cn lg(n=2) + n = cn lg n ; cn lg 2 + n = cn lg n ; cn + n 6
6 cn lg n:
По▒ледний пе░е╡од законен п░и c > 1.
Дл┐ заве░╕ени┐ ░а▒▒│ждени┐ о▒▓ае▓▒┐ п░ове░и▓╝ бази▒ инд│к╢ии, ▓. е. доказа▓╝ о╢енк│ дл┐ на╖ал╝ного зна╖ени┐ n. Т│▓ м╗ ▒▓алкиваем▒┐ ▒ ▓ем, ╖▓о п░и n = 1 п░ава┐ ╖а▒▓╝ не░авен▒▓ва об░а╣ае▓▒┐ в н│л╝, каким б╗ ни вз┐▓╝ c (по▒кол╝к│ lg 1 = 0). П░и╡оди▓▒┐ в▒помни▓╝, ╖▓о а▒имп▓о▓и╖е▒к│╛ о╢енк│ до▒▓а▓о╖но доказа▓╝
Ме▓од под▒▓ановки
57
дл┐ в▒е╡ n, на╖ина┐ ▒ неко▓о░ого. Подбе░ем c ▓ак, ╖▓об╗ о╢енка
T (n) 6 cn lg n б╗ла ве░на п░и n = 2 и n = 3. Тогда дл┐ бол╝╕и╡ n
можно ░а▒▒│жда▓╝ по инд│к╢ии, и опа▒н╗й ▒л│╖ай n = 1 нам не
в▒▓░е▓и▓▒┐ (по▒кол╝к│ bn=2c > 2 п░и n > 3).
Как о▓гада▓╝ о╢енк│?
Дл┐ ╜▓ого н│жен нав╗к и немного везени┐. Во▓ не▒кол╝ко навод┐╣и╡ ▒ооб░ажений.
Аналоги┐. Ра▒▒мо▓░им дл┐ п░име░а ▒оо▓но╕ение
T (n) = 2T (bn=2c + 17) + n:
ко▓о░ое о▓ли╖ае▓▒┐ о▓ (4.4) добаво╖н╗м ▒лагаем╗м 17 в п░авой
╖а▒▓и. Можно ожида▓╝, однако, ╖▓о ╜▓а добавка не може▓ ▒│╣е▒▓венно измени▓╝ ╡а░ак▓е░ ░е╕ени┐: п░и бол╝╕и╡ n ░азни╢а
межд│ bn=2c + 17 и bn=2c в░┐д ли ▓ак │ж ▒│╣е▒▓венна. Можно
п░едположи▓╝, ╖▓о о╢енка T (n) = O(n lg n) о▒▓ае▓▒┐ в ▒иле, а
за▓ем и доказа▓╝ ╜▓о по инд│к╢ии (▒м. │п░. 4.1-5).
По▒ледова▓ел╝н╗е п░иближени┐. Можно на╖а▓╝ ▒ п░о▒▓╗╡ и г░│б╗╡ о╢енок, а за▓ем │▓о╖н┐▓╝ и╡. Нап░име░, дл┐ ▒оо▓но╕ени┐ (4.1) е▒▓╝ о╖евидна┐ нижн┐┐ о╢енка T (n) = (n) (по▒кол╝к│
▒п░ава е▒▓╝ ╖лен n), и ве░╡н┐┐ о╢енка T (n) = O(n2) (ко▓о░│╛
легко доказа▓╝ по инд│к╢ии). Далее можно по▒▓епенно ▒ближа▓╝ и╡, ▒▓░ем┐▒╝ пол│╖и▓╝ а▒имп▓о▓и╖е▒ки ▓о╖н╗е нижн╛╛
и ве░╡н╛╛ о╢енки, о▓ли╖а╛╣ие▒┐ не более ╖ем в кон▒▓ан▓│ ░аз.
Тонко▒▓и
Иногда ░а▒▒│ждение по инд│к╢ии ▒▓алкивае▓▒┐ ▒ ▓░│дно▒▓┐ми,
╡о▓┐ о▓ве▓ │гадан п░авил╝но. Об╗╖но ╜▓о п░ои▒╡оди▓ по▓ом│, ╖▓о
доказ╗ваемое по инд│к╢ии │▓ве░ждение недо▒▓а▓о╖но ▒ил╝но. В
╜▓ом ▒л│╖ае може▓ помо╖╝ в╗╖и▓ание ╖лена мен╝╕его по░┐дка.
Ра▒▒мо▓░им ▒оо▓но╕ение
T (n) = T (bn=2c) + T (dn=2e) + 1:
Можно наде┐▓╝▒┐, ╖▓о в ╜▓ом ▒л│╖ае T (n) = O(n). Э▓о дей▒▓ви▓ел╝но ▓ак. Поп░об│ем, однако, доказа▓╝, ╖▓о T (n) 6 cn п░и под╡од┐╣ем в╗бо░е кон▒▓ан▓╗ c. Инд│к▓ивное п░едположение дае▓
T (n) 6 cbn=2c + cdn=2e + 1 = cn + 1;
а о▓▒╛да ни дл┐ какого c не в╗▓екае▓ не░авен▒▓ва T (n) 6 cn. В
▓акой ▒и▓│а╢ии можно поп╗▓а▓╝▒┐ доказа▓╝ более ▒лаб│╛ о╢енк│,
нап░име░ O(n2 ), но на ▒амом деле в ╜▓ом не▓ необ╡одимо▒▓и: на╕а
58
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
догадка ве░на, надо ▓ол╝ко не о▒лаби▓╝, а │▒или▓╝ п░едположение
инд│к╢ии.
Нова┐ гипо▓еза в╗гл┐ди▓ ▓ак: T (n) 6 cn ; b дл┐ неко▓о░╗╡ кон▒▓ан▓ b и c. Под▒▓ановка в п░ав│╛ ╖а▒▓╝ дае▓
T (n) 6 (cbn=2c ; b) + (cdn=2e ; b) + 1 = cn ; 2b + 1 6 cn ; b
По▒ледний пе░е╡од законен п░и b > 1. О▒▓ае▓▒┐ ли╕╝ в╗б░а▓╝ кон▒▓ан▓│ c ▒ │╖е▓ом на╖ал╝н╗╡ │▒ловий.
Э▓о ░а▒▒│ждение в╗з╗вае▓ недо│мение: е▒ли доказа▓ел╝▒▓во не
п░о╡оди▓, не ▒лед│е▓ ли о▒лаби▓╝ (│вели╖и▓╝) о╢енк│, а не │▒илива▓╝ ее? Но на ▒амом деле ни╖его ▒▓░анного зде▒╝ не▓ | │▒илив
о╢енк│, м╗ пол│╖аем возможно▒▓╝ во▒пол╝зова▓╝▒┐ более ▒ил╝н╗м
инд│к▓ивн╗м п░едположением.
Как дела▓╝ не надо
А▒имп▓о▓и╖е▒ка┐ запи▒╝ опа▒на п░и не│мелом п░именении: во▓
п░име░ неп░авил╝ного └доказа▓ел╝▒▓ва┴ о╢енки T (n) = O(n) дл┐
▒оо▓но╕ени┐ (4.4). П░едположим, ╖▓о T (n) 6 cn, ▓огда можно запи▒а▓╝
T (n) 6 2(cbn=2c) + n 6 cn + n = O(n):
Э▓о ░а▒▒│ждение, однако, ни╖его не доказ╗вае▓, ▓ак как инд│к▓ивн╗й пе░е╡од ▓░еб│е▓, ╖▓об╗ в п░авой ╖а▒▓и б╗ло cn c ▓ой же
▒амой кон▒▓ан▓ой c, а не аб▒▓░ак▓ное O(n).
Замена пе░еменн╗╡
Ча▒▓о не▒ложна┐ замена пе░еменн╗╡ позвол┐е▓ п░еоб░азова▓╝
░ек│░░ен▓ное ▒оо▓но╕ение к п░ив╗╖ном│ вид│. Нап░име░, ▒оо▓но╕ение
p
T (n) = 2T (b nc) + ln n
каже▓▒┐ довол╝но ▒ложн╗м, однако заменой пе░еменн╗╡ его легко
│п░о▒▓и▓╝. Сделав замен│ m = lg n, пол│╖им
T (2m) = 2T (2m=2) + m:
Обозна╖ив T (2m ) ╖е░ез S (m), п░и╡одим к ▒оо▓но╕ени╛
S (m) = 2S (m=2) + m;
ко▓о░ое │же в▒▓░е╖ало▒╝ (4.4). Его ░е╕ение: S (m) = O(m lg m).
Возв░а╣а┐▒╝ к T (n) вме▒▓о S (m), пол│╖им
T (n) = T (2m ) = S (m) = O(m lg m) = O(lg n lg lg n):
П░еоб░азование в ▒│мм│
59
П░иведенное ░а▒▒│ждение ▓░еб│е▓, коне╖но, │▓о╖нений, по▒кол╝к│ пока ╖▓о м╗ доказали о╢енк│ на T (n) ли╕╝ дл┐ n, ┐вл┐╛╣и╡▒┐
▒▓епен┐ми двойки. Ч▓об╗ в╗й▓и из положени┐, можно оп░едели▓╝
S (m) как мак▒им│м T (n) по в▒ем n, не п░ево▒╡од┐╣им 2m.
Уп░ажнени┐
4.1-1 Покажи▓е, ╖▓о из T (n) = T (dn=2e) + 1 ▒лед│е▓, ╖▓о T (n) =
O(lg n).
4.1-2 Покажи▓е, ╖▓о из T (n) = 2T (bn=2c) + n в╗▓екае▓ T (n) =
(n lg n), и ▓ем ▒ам╗м T (n) = (n lg n).
4.1-3 Как обой▓и ▓░│дно▒▓╝ ▒ на╖ал╝н╗м зна╖ением n = 1 п░и
и▒▒ледовании ▒оо▓но╕ени┐ (4.4), изменив доказ╗ваемое по инд│к╢ии │▓ве░ждение, но не мен┐┐ на╖ал╝ного зна╖ени┐?
4.1-4 Покажи▓е, ╖▓о ▒оо▓но╕ение (4.2) дл┐ ▒о░▓и░овки ▒ли┐нием
имее▓ ░е╕ением (n lg n).
4.1-5 Покажи▓е, ╖▓о T (n) = 2T (bn=2c + 17) + n вле╖е▓ T (n) =
O(n lg n).
4.1-6 Ре╕и▓е
▒ помо╣╝╛ замен╗ пе░еменн╗╡ ▒оо▓но╕ение
p
T (n) = 2T ( n) + 1, (оп│▒ка┐ под░обно▒▓и, ▒в┐занн╗е ▒ ▓ем, ╖▓о
зна╖ени┐ пе░еменн╗╡ | не ╢ел╗е).
4.2. П░еоб░азование в ▒│мм│
Как б╗▓╝, е▒ли не │дае▓▒┐ │гада▓╝ ░е╕ение? Тогда можно, и▓е░и░│┐ ╜▓о ▒оо▓но╕ение (под▒▓авл┐┐ его ▒амо в ▒еб┐), пол│╖и▓╝ ░┐д,
ко▓о░╗й можно о╢енива▓╝ ▓ем или ин╗м ▒по▒обом.
Дл┐ п░име░а ░а▒▒мо▓░им ▒оо▓но╕ение
T (n) = 3T (bn=4c) + n:
Под▒▓авл┐┐ его в ▒еб┐, пол│╖им:
T (n) = n + 3T (bn=4c) = n + 3(bn=4c + 3T (bn=16c))
= n + 3(bn=4c + 3(bn=16c + 3T (bn=64c)))
= n + 3bn=4c + 9bn=16c + 27T (bn=64c);
М╗ во▒пол╝зовали▒╝ ▓ем, ╖▓о, ▒огла▒но (2.4), bbn=4c=4c = bn=16c
и bbn=16c=4c = bn=64c. Скол╝ко ╕агов надо ▒дела▓╝, ╖▓об╗ дой▓и
до на╖ал╝ного │▒лови┐? По▒кол╝к│ по▒ле i-ой и▓е░а╢ии ▒п░ава окаже▓▒┐ T (bn=4ic), м╗ дойдем до T (1), когда bn=4i c = 1, ▓. е. когда
60
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
i > log4 n. Заме▓ив, ╖▓о bn=4ic 6 n=4i , м╗ можем о╢ени▓╝ на╕ ░┐д
│б╗ва╛╣ей геоме▓░и╖е▒кой п░ог░е▒▒ией (пл╛▒ по▒ледний ╖лен, ▒оо▓ве▓▒▓в│╛╣ий 3log n зада╖ам ог░ани╖енного ░азме░а):
T (n) 6 n + 3n=4 + 9n=16 + 27n=64 + : : : + 3log n (1)
1 3 i
X
+ (nlog 3 )
6n
4
i=0
= 4n + o(n) = O(n)
(М╗ заменили коне╖н│╛ ▒│мм│ из не более ╖ем log4 n + 1 ╖ленов
на ▒│мм│ бе▒коне╖ного ░┐да, а ▓акже пе░епи▒али 3log n как nlog 3 ,
╖▓о е▒▓╝ o(n), ▓ак как log4 3 < 1.)
Ча▒▓о п░еоб░азование ░ек│░░ен▓ного ▒оо▓но╕ени┐ в ▒│мм│ п░иводи▓ к довол╝но ▒ложн╗м в╗кладкам. П░и ╜▓ом важно ▒леди▓╝
за дв│м┐ ве╣ами: ▒кол╝ко ╕агов под▒▓ановки ▓░еб│е▓▒┐ и какова
▒│мма ╖ленов, пол│╖а╛╣и╡▒┐ на данном ╕аге. Иногда не▒кол╝ко
пе░в╗╡ ╕агов позвол┐╛▓ о▓гада▓╝ о▓ве▓, ко▓о░╗й за▓ем │дае▓▒┐
доказа▓╝ по инд│к╢ии (▒ мен╝╕им коли╖е▒▓вом в╗╖и▒лений).
О▒обенно много ╡лопо▓ до▒▓авл┐╛▓ ок░│глени┐ (пе░е╡од к ╢елой ╖а▒▓и). Дл┐ на╖ала ▒▓ои▓ п░едположи▓╝, ╖▓о зна╖ени┐ па░аме▓░а ▓аков╗, ╖▓о ок░│глени┐ не ▓░еб│╛▓▒┐ (в на╕ем п░име░е п░и
n = 4k ни╖его ок░│гл┐▓╝ не п░иде▓▒┐). Вооб╣е гово░┐, ▓акое п░едположение не вполне законно, ▓ак как о╢енк│ надо доказа▓╝ дл┐
в▒е╡ до▒▓а▓о╖но бол╝╕и╡ ╢ел╗╡ ╖и▒ел, а не ▓ол╝ко дл┐ ▒▓епеней
╖е▓ве░ки. М╗ │видим в ░азделе 4.3, как можно обой▓и ╜▓│ ▓░│дно▒▓╝ (▒м. ▓акже зада╖│ 4-5).
4
4
4
4
4
Де░ев╝┐ ░ек│░▒ии
П░о╢е▒▒ под▒▓ановки ▒оо▓но╕ени┐ в ▒еб┐ можно изоб░ази▓╝ в
виде де░ева ░ек│░▒ии (recursion tree). Как ╜▓о делае▓▒┐, показано
на ░и▒. 4.1 на п░име░е ▒оо▓но╕ени┐
T (n) = 2T (n=2) + n2 :
Дл┐ │доб▒▓ва п░едположим, ╖▓о n | ▒▓епен╝ двойки. Двига┐▒╝ о▓
(а) к (г), м╗ по▒▓епенно ░азво░а╖иваем в╗░ажение дл┐ T (n), и▒пол╝з│┐ в╗░ажени┐ дл┐ T (n), T (n=2), T (n=4) и ▓. д. Тепе░╝ м╗ можем в╗╖и▒ли▓╝ T (n), ▒клад╗ва┐ зна╖ени┐ ве░╕ин на каждом │░овне. На ве░╡нем │░овне пол│╖аем n2 , на в▓о░ом | (n=2)2 + (n=2)2 =
n2=2, на ▓░е▓╝ем | (n=4)2 + (n=4)2 + (n=4)2 + (n=4)2 = n2=4. Пол│╖ае▓▒┐ │б╗ва╛╣а┐ геоме▓░и╖е▒ка┐ п░ог░е▒▒и┐, ▒│мма ко▓о░ой
о▓ли╖ае▓▒┐ о▓ ее пе░вого ╖лена не более ╖ем на по▒▓о┐нн╗й множи▓ел╝. И▓ак, T (n) = (n2 ).
На ░и▒. 4.2 показан более ▒ложн╗й п░име░ | де░ево дл┐ ▒оо▓но╕ени┐
T (n) = T (n=3) + T (2n=3) + n
П░еоб░азование в ▒│мм│
61
Total=в▒его
2
Ри▒. 4.1 Де░ево ░ек│░▒ии дл┐ ▒оо▓но╕ени┐ T (n) = 2T (n=2) + n . В╗▒о▓а полно▒▓╝╛ ░азве░н│▓ого де░ева (г) ░авна lg n (де░ево имее▓ lg n + 1 │░овней).
Ри▒. 4.2
Де░ево ░ек│░▒ии дл┐ ▒оо▓но╕ени┐ T (n) = T (n=3) + T (2n=3) + n.
62
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
(дл┐ п░о▒▓о▓╗ м╗ внов╝ игно░и░│ем ок░│глени┐). Зде▒╝ ▒│мма
зна╖ений на каждом │░овне ░авна n. Де░ево об░╗вае▓▒┐, когда
зна╖ени┐ а░г│мен▓а ▒▓анов┐▓▒┐ ▒░авним╗ми ▒ 1. Дл┐ ░азн╗╡ ве▓вей ╜▓о п░ои▒╡оди▓ на ░азной гл│бине, и ▒ам╗й длинн╗й п│▓╝
n ! (2=3)n ! (2=3)2n ! ! 1 ▓░еб│е▓ около k = log3=2 n ╕агов
(п░и ▓аком k м╗ имеем (2=3)kn = 1). По╜▓ом│ T (n) можно о╢ени▓╝
как O(n lg n).
Уп░ажнени┐
4.2-1 И▓е░и░│┐ (под▒▓авл┐┐ в ▒еб┐) ▒оо▓но╕ение T (n) =
3T (bn=2c) + n, найди▓е ╡о░о╕│╛ ве░╡н╛╛ а▒имп▓о▓и╖е▒к│╛
о╢енк│ дл┐ T (n).
4.2-2 Анализи░│┐ де░ево ░ек│░▒ии, покажи▓е, ╖▓о T (n) =
T (n=3) + T (2n=3) + n вле╖е▓ T (n) = (n lg n).
4.2-3 На░и▒│й▓е де░ево ░ек│░▒ии дл┐ T (n) = 4T (bn=2c) + n и
пол│╖и▓е а▒имп▓о▓и╖е▒ки ▓о╖н╗е о╢енки дл┐ T (n).
4.2-4 С помо╣╝╛ и▓е░а╢ий ░е╕и▓е ▒оо▓но╕ение T (n) = T (n ;
a) + T (a) + n, где a > 1 | неко▓о░а┐ кон▒▓ан▓а.
4.2-5 С помо╣╝╛ де░ева ░ек│░▒ии ░е╕и▓е ▒оо▓но╕ение T (n) =
T (n) + T ((1 ; )n) + n, где | кон▒▓ан▓а в ин▓е░вале 0 < < 1.
4.3. Об╣ий ░е╢еп▓
Э▓о▓ ме▓од годи▓▒┐ дл┐ ░ек│░░ен▓н╗╡ ▒оо▓но╕ений вида
T (n) = aT (n=b) + f (n);
(4.5)
где a > 1 и b > 1 | неко▓о░╗е кон▒▓ан▓╗, а f | положи▓ел╝на┐
(по к░айней ме░е дл┐ бол╝╕и╡ зна╖ений а░г│мен▓а) ┤│нк╢и┐. Он
дае▓ об╣│╛ ┤о░м│л│; запомнив ее, можно ░е╕а▓╝ в │ме ░азли╖н╗е
░ек│░░ен▓н╗е ▒оо▓но╕ени┐.
Соо▓но╕ение (4.5) возникае▓, е▒ли алго░и▓м ░азбивае▓ зада╖│
░азме░а n на a подзада╖ ░азме░а n=b, ╜▓и подзада╖и ░е╕а╛▓▒┐
░ек│░▒ивно (кажда┐ за в░ем┐ T (n=b)) и ░ез│л╝▓а▓╗ об║един┐╛▓▒┐. П░и ╜▓ом за▓░а▓╗ на ░азбиение и об║единение опи▒╗ва╛▓▒┐
┤│нк╢ией f (n) (в обозна╖ени┐╡ ░аздела 1.3.2 f (n) = C (n) + D(n)).
Нап░име░, дл┐ п░о╢ед│░╗ Merge-Sort м╗ имеем a = 2, b = 2,
f (n) = (n).
Как в▒егда, в ┤о░м│ле (4.5) возникае▓ п░облема ▒ ок░│глением: n=b може▓ не б╗▓╝ ╢ел╗м. Фо░мал╝но ▒ледовало б╗ замени▓╝
Об╣ий ░е╢еп▓
63
T (n=b) на T (bn=bc) или T (dn=be). Оба ва░иан▓а, как м╗ │видим в
▒лед│╛╣ем ░азделе, п░ивод┐▓ к одном│ и ▓ом│ же о▓ве▓│, и дл┐
п░о▒▓о▓╗ м╗ б│дем оп│▒ка▓╝ ок░│гление в на╕и╡ ┤о░м│ла╡.
О▒новна┐ ▓ео░ема о ░ек│░░ен▓н╗╡ о╢енка╡
Тео░ема 4.1. П│▒▓╝ a > 1 и b > 1 | кон▒▓ан▓╗, f (n) | ┤│нк╢и┐,
T (n) оп░еделено п░и нео▓░и╢а▓ел╝н╗╡ n ┤о░м│лой
T (n) = aT (n=b) + f (n);
где под n=b понимае▓▒┐ либо dn=be, либо bn=bc. Тогда:
1. Е▒ли f (n) = O(nlogb a;" ) дл┐ неко▓о░ого " > 0, ▓о T (n) =
(nlogb a ).
2. Е▒ли f (n) = (nlogb a ), ▓о T (n) = (nlogb a lg n).
3. Е▒ли f (n) = (nlogb a+" ) дл┐ неко▓о░ого " > 0 и е▒ли af (n=b) 6
cf (n) дл┐ неко▓о░ой кон▒▓ан▓╗ c < 1 и до▒▓а▓о╖но бол╝╕и╡ n,
▓о T (n) = (f (n)).
В ╖ем ▒│▓╝ ╜▓ой ▓ео░ем╗? В каждом из ▓░е╡ ▒л│╖аев м╗ ▒░авниваем f (n) ▒ nlogb a ; е▒ли одна из ╜▓и╡ ┤│нк╢ий ░а▒▓е▓ б╗▒▓░ее д░│гой, ▓о она и оп░едел┐е▓ по░┐док ░о▒▓а T (n) (▒л│╖аи 1 и 3). Е▒ли
обе ┤│нк╢ии одного по░┐дка (▒л│╖ай 2), ▓о по┐вл┐е▓▒┐ дополни▓ел╝н╗й лога░и┤ми╖е▒кий множи▓ел╝ и о▓ве▓ом ▒л│жи▓ ┤о░м│ла
(nlogb a lg n) = (f (n) lg n).
О▓ме▓им важн╗е ▓е╡ни╖е▒кие де▓али. В пе░вом ▒л│╖ае недо▒▓а▓о╖но, ╖▓об╗ f (n) б╗ла п░о▒▓о мен╝╕е, ╖ем nlogb a : нам н│жен └зазо░┴ ░азме░а n" дл┐ неко▓о░ого " > 0. То╖но ▓ак же в ▓░е▓╝ем
▒л│╖ае f (n) должна б╗▓╝ бол╝╕е nlogb a ▒ запа▒ом, и к ▓ом│ же
│довле▓во░┐▓╝ │▒лови╛ └░ег│л┐░но▒▓и┴ af (n=b) 6 cf (n); п░ове░ка
по▒леднего │▒лови┐, как п░авило, не ▒о▒▓авл┐е▓ ▓░│да.
Заме▓им, ╖▓о ▓░и │казанн╗╡ ▒л│╖а┐ не и▒╖е░п╗ва╛▓ в▒е╡ возможно▒▓ей: може▓ оказа▓╝▒┐, нап░име░, ╖▓о ┤│нк╢и┐ f (n) мен╝╕е,
╖ем nlogb a, но зазо░ недо▒▓а▓о╖но велик дл┐ ▓ого, ╖▓об╗ во▒пол╝зова▓╝▒┐ пе░в╗м │▓ве░ждением ▓ео░ем╗. Аналоги╖на┐ └╣ел╝┴ е▒▓╝ и
межд│ ▒л│╖а┐ми 2 и 3. Наконе╢, ┤│нк╢и┐ може▓ не облада▓╝ ▒вой▒▓вом ░ег│л┐░но▒▓и.
П░именени┐ о▒новной ▓ео░ем╗
Ра▒▒мо▓░им не▒кол╝ко п░име░ов, где п░именение ▓ео░ем╗ позвол┐е▓ ▒░аз│ же в╗пи▒а▓╝ о▓ве▓.
Дл┐ на╖ала ░а▒▒мо▓░им ▒оо▓но╕ение
T (n) = 9T (n=3) + n:
В ╜▓ом ▒л│╖ае a = 9, b = 3, f (n) = n, а nlogb a = nlog 9 = (n2 ).
3
64
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
По▒кол╝к│ f (n) = O(nlog 9;" ) дл┐ " = 1, м╗ п░имен┐ем пе░вое
│▓ве░ждение ▓ео░ем╗ и закл╛╖аем, ╖▓о T (n) = (n2 ).
Тепе░╝ ░а▒▒мо▓░им ▒оо▓но╕ение
3
T (n) = T (2n=3) + 1:
Зде▒╝ a = 1, b = 3=2, f (n) = 1 и nlogb a = nlog = 1 = n0 = 1. Под╡оди▓
▒л│╖ай 2, по▒кол╝к│ f (n) = (nlogb a ) = (1), и м╗ пол│╖аем, ╖▓о
T (n) = (lg n).
Дл┐ ▒оо▓но╕ени┐
3 2
T (n) = 3T (n=4) + n lg n
м╗ имеем a = 3, b = 4, f (n) = n lg n; п░и ╜▓ом nlogb a =
nlog 3 = O(n0;793). Зазо░ (▒ " 0;2) е▒▓╝, о▒▓ае▓▒┐ п░ове░и▓╝ │▒ловие ░ег│л┐░но▒▓и. Дл┐ до▒▓а▓о╖но бол╝╕ого n имеем af (n=b) =
3(n=4) lg(n=4) 6 (3=4)n lg n = cf (n) дл┐ c = 3=4. Тем ▒ам╗м по
▓░е▓╝ем│ │▓ве░ждени╛ ▓ео░ем╗ T (n) = (n lg n).
Во▓ п░име░, когда ▓ео░ем│ п░имени▓╝ не │дае▓▒┐: п│▒▓╝ T (n) =
2T (n=2) + n lg n. Зде▒╝ a = 2, b = 2, f (n) = n lg n, nlogb a = n. Видно,
╖▓о f (n) = n lg n а▒имп▓о▓и╖е▒ки бол╝╕е, ╖ем nlogb a , но зазо░ недо▒▓а▓о╖ен: о▓но╕ение f (n)=nlogb a = (n lg n)=n = lg n не о╢енивае▓▒┐
▒низ│ вели╖иной n" ни дл┐ какого " > 0. Э▓о ▒оо▓но╕ение попада4
е▓ в п░омеж│▓ок межд│ ▒л│╖а┐ми 2 и 3; дл┐ него можно пол│╖и▓╝
о▓ве▓ по ┤о░м│ле из │п░. 4.4-2.
Уп░ажнени┐
4.3-1 И▒пол╝з│┐ о▒новн│╛ ▓ео░ем│, найди▓е а▒имп▓о▓и╖е▒ки
▓о╖н╗е о╢енки дл┐ ▒оо▓но╕ени┐
а. T (n) = 4T (n=2) + n;
б. T (n) = 4T (n=2) + n2 ;
в. T (n) = 4T (n=2) + n3 .
4.3-2 В░ем┐ ░або▓╗ алго░и▓ма A опи▒╗вае▓▒┐ ▒оо▓но╕ением
T (n) = 7T (n=2) + n2, а в░ем┐ ░або▓╗ алго░и▓ма A0 | ▒оо▓но╕ением T 0 (n) = aT 0 (n=4) + n2 . П░и каком наибол╝╕ем ╢елом зна╖ении a
алго░и▓м A0 а▒имп▓о▓и╖е▒ки б╗▒▓░ее, ╖ем A?
4.3-3 И▒пол╝з│┐ о▒новн│╛ ▓ео░ем│, покажи▓е, ╖▓о ▒оо▓но╕ение
T (n) = T (n=2) + (1) (дл┐ двои╖ного пои▒ка, ▒м. │п░. 1.3-5) вле╖е▓
T (n) = (lg n).
4.3-4 Покажи▓е, ╖▓о │▒лови┐ ░ег│л┐░но▒▓и (▒л│╖ай 3) не в╗▓екае▓ из д░│ги╡ │▒ловий: п░иведи▓е п░име░ ┤│нк╢ии f , дл┐ ко▓о░ой
▒│╣е▒▓в│е▓ ▓░еб│ема┐ кон▒▓ан▓а ", но │▒ловие ░ег│л┐░но▒▓и не в╗полнено.
4.4 Доказа▓ел╝▒▓во Тео░ем╗ 4.1
65
? 4.4 Доказа▓ел╝▒▓во Тео░ем╗ 4.1
М╗ п░иведем доказа▓ел╝▒▓во ▓ео░ем╗ 4.1 дл┐ до▓о╕н╗╡ ╖и▓а▓елей; в дал╝ней╕ем оно не понадоби▓▒┐, ▓ак ╖▓о п░и пе░вом ╖▓ении
его вполне можно п░оп│▒▓и▓╝.
Доказа▓ел╝▒▓во ▒о▒▓ои▓ из дв│╡ ╖а▒▓ей. Сна╖ала м╗ ░а▒▒ма▓░иваем ▓ол╝ко ▓е n, ко▓о░╗е ┐вл┐╛▓▒┐ ▒▓епен┐ми ╖и▒ла b; в▒е о▒новн╗е идеи видн╗ │же дл┐ ╜▓ого ▒л│╖а┐. За▓ем пол│╖енн╗й ░ез│л╝▓а▓ ░а▒п░о▒▓░ан┐е▓▒┐ на в▒е на▓│░ал╝н╗е ╖и▒ла, п░и ╜▓ом м╗ акк│░а▓но ▒ледим за ок░│глени┐ми и ▓. п.
В ╜▓ом ░азделе м╗ позволим ▒ебе не ▒ов▒ем ко░░ек▓но об░а╣а▓╝▒┐ ▒ а▒имп▓о▓и╖е▒кой запи▒╝╛: б│дем и▒пол╝зова▓╝ ее дл┐ ┤│нк╢ий, оп░еделенн╗╡ ▓ол╝ко на ▒▓епен┐╡ ╖и▒ла b, ╡о▓┐ оп░еделение
▓░еб│е▓, ╖▓об╗ о╢енки доказ╗вали▒╝ дл┐ в▒е╡ до▒▓а▓о╖но бол╝╕и╡
на▓│░ал╝н╗╡ ╖и▒ел.
Из кон▓ек▒▓а б│де▓ пон┐▓но, ╖▓о имее▓▒┐ в вид│, но н│жно б╗▓╝
внима▓ел╝н╗м, ╖▓об╗ не зап│▓а▓╝▒┐: е▒ли о ┤│нк╢ии T (n) ни╖его
не изве▒▓но, ▓о о╢енка T (n) = O(n) дл┐ n, ┐вл┐╛╣и╡▒┐ ▒▓епен┐ми
двойки, ни╖его не га░ан▓и░│е▓ дл┐ п░оизвол╝н╗╡ n. (Возможно,
╖▓о T (n) = n п░и n = 1; 2; 4; 8; : : : и T (n) = n2 п░и о▒▓ал╝н╗╡ n.)
4.4.1. Сл│╖ай на▓│░ал╝н╗╡ ▒▓епеней
П│▒▓╝ T (n) оп░еделено дл┐ ╖и▒ел, ┐вл┐╛╣и╡▒┐ (на▓│░ал╝н╗ми)
▒▓епен┐ми ╖и▒ла b > 1 (не об┐за▓ел╝но ╢елого) и │довле▓во░┐е▓
▒оо▓но╕ени╛ (4.5), ▓. е.
T (n) = aT (n=b) + f (n):
М╗ пол│╖им о╢енк│ дл┐ T ▓ак: пе░ейдем о▓ ╜▓ого ▒оо▓но╕ени┐ к
▒│мми░овани╛ (лемма 4.2), за▓ем о╢еним пол│╖енн│╛ ▒│мм│ (лемма 4.3) и подведем и▓оги (лемма 4.4).
Лемма 4.2. П│▒▓╝ a > 1, b > 1 | кон▒▓ан▓╗, и п│▒▓╝ f (n) |
нео▓░и╢а▓ел╝на┐ ┤│нк╢и┐, оп░еделенна┐ на ▒▓епен┐╡ b. П│▒▓╝
T (n) | ┤│нк╢и┐, оп░еделенна┐ на ▒▓епен┐╡ b ▒оо▓но╕ением
T (n) = aT (n=b) + f (n) п░и n > 1, п░и╖ем T (1) > 0. Тогда
T (n) = (nlogb a ) +
logX
b n;1
j =0
aj f (n=bj ):
(4.6)
66
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
Де░ево ░ек│░▒ии дл┐ ▒оо▓но╕ени┐ T (n) = aT (n=b) + f (n) ┐вл┐е▓▒┐
полн╗м a-и╖н╗м де░евом в╗▒о▓╗ log b n ▒ nlogb a . С│мма ве▒ов по │░овн┐м показана ▒п░ава, а об╣а┐ ▒│мма дае▓▒┐ ┤о░м│лой (4.6).
Ри▒. 4.3
Доказа▓ел╝▒▓во. По▒ледова▓ел╝но под▒▓авл┐┐ ▒оо▓но╕ение ▒амо
в ▒еб┐, пол│╖аем
T (n) = f (n) + aT (n=b)
= f (n) + af (n=b) + a2T (n=b2)
= f (n) + af (n=b) + a2f (n=b2) + : : :
+ alogb n;1 f (n=blogb n;1 ) + alogb n T (1):
По▒кол╝к│ alogb n = nlogb a , по▒ледний ╖лен може▓ б╗▓╝ запи▒ан как
(nlogb a ). О▒▓ав╕ие▒┐ ╖лен╗ об░аз│╛▓ ▒│мм│, ┤иг│░и░│╛╣│╛ в
│▓ве░ждении лемм╗.
Де░ево ░ек│░▒ии
Доказа▓ел╝▒▓во лемм╗ 4.2 можно по┐▒ни▓╝ в ▓е░мина╡ де░ева
░ек│░▒ии (░и▒. 4.3), е▒ли ╖и▒ло a ╢елое (╡о▓┐ ▒амо доказа▓ел╝▒▓во
╜▓ого не ▓░еб│е▓). В ко░не ▒▓ои▓ ╖и▒ло f (n), в каждом из a его де▓ей ▒▓ои▓ ╖и▒ло f (n=b), в каждом из a2 вн│ков ▒▓ои▓ f (n=b2 ) и ▓. д.
На │░овне j имее▓▒┐ aj ве░╕ин; ве▒ каждой | f (n=bj ). Ли▒▓╝┐ на╡од┐▓▒┐ на ░а▒▒▓о┐нии logb n о▓ ко░н┐, и име╛▓ положи▓ел╝н╗й ве▒
T (1); в▒его на де░еве alogb n = nlogb a ли▒▓╝ев.
4.4 Доказа▓ел╝▒▓во Тео░ем╗ 4.1
67
Равен▒▓во (4.6) пол│╖ае▓▒┐, е▒ли ▒ложи▓╝ ве▒а на в▒е╡ │░овн┐╡:
об╣ий ве▒ на j -м │░овне е▒▓╝ aj f (n=bj ), а об╣ий ве▒ вн│▓░енней
╖а▒▓и де░ева е▒▓╝
logX
b n;1
j =0
aj f (n=bj ):
Е▒ли ░ек│░░ен▓ное ▒оо▓но╕ение п░оизо╕ло из алго░и▓ма ▓ипа
└░аздел┐й и вла▒▓в│й┴, ╜▓а ▒│мма о▓░ажае▓ ▒▓оимо▒▓╝ ░азбиени┐
зада╖и на подзада╖и и об║единени┐ ░е╕ений. С│мма░н╗й ве▒ в▒е╡
ли▒▓╝ев е▒▓╝ ▒▓оимо▒▓╝ ░е╕ени┐ в▒е╡ nlogb a зада╖ ░азме░а 1, ко▓о░а┐ ▒о▒▓авл┐е▓ (nlogb a).
В ▓е░мина╡ де░ева ░ек│░▒ии легко об║┐▒ни▓╝, ╖ем│ ▒оо▓ве▓▒▓в│╛▓ ▓░и ▒л│╖а┐ в ┤о░м│ли░овке о▒новной ▓ео░ем╗. В пе░вом ▒л│╖ае
о▒новна┐ ╖а▒▓╝ ве▒а ▒о▒░едо▓о╖ена в ли▒▓╝┐╡, в ▓░е▓╝ем | в ко░не,
во в▓о░ом ве▒ ░авноме░но ░а▒п░еделен по │░овн┐м де░ева.
Тепе░╝ о╢еним вели╖ин│ ▒│мм╗ в ┤о░м│ле (4.6).
Лемма 4.3. П│▒▓╝ a > 1, b > 1 | кон▒▓ан▓╗, f (n) | нео▓░и╢а▓ел╝на┐ ┤│нк╢и┐, оп░еделенна┐ на на▓│░ал╝н╗╡ ▒▓епен┐╡ b. Ра▒▒мо▓░им ┤│нк╢и╛ g (n), оп░еделенн│╛ ┤о░м│лой
g (n) =
logX
b n;1
j =0
aj f (n=bj )
(4.7)
(дл┐ n, ┐вл┐╛╣и╡▒┐ ▒▓епен┐ми b). Тогда
1. Е▒ли f (n) = O(nlogb a;" ) дл┐ неко▓о░ой кон▒▓ан▓╗ " > 0, ▓о
g(n) = O(nlogb a).
2. Е▒ли f (n) = (nlogb a ), ▓о g (n) = (nlogb a lg n).
3. Е▒ли af (n=b) 6 cf (n) дл┐ неко▓о░ой кон▒▓ан▓╗ c < 1 и дл┐
в▒е╡ n > b, ▓о g (n) = (f (n)).
Доказа▓ел╝▒▓во. 1. В пе░вом ▒л│╖ае до▒▓а▓о╖но доказа▓╝ │▓ве░ждение лемм╗ дл┐ ┤│нк╢ии f (n) = n , где = logb a ; " Дл┐ ▓акой
┤│нк╢ии f ░авен▒▓во (4.7) може▓ б╗▓╝ пе░епи▒ано ▓ак: (▓епе░╝
= logb a)
g (n) = f (n) + af (n=b) + a2f (n=b2) + : : : + ak;1f (n=bk;1)
= n + a(n=b) + a2 (n=b2) + : : : + ak;1 (n=bk;1) ; (4.8)
п░ава┐ ╖а▒▓╝ п░ед▒▓авл┐е▓ ▒обой геоме▓░и╖е▒к│╛ п░ог░е▒▒и╛ длин╗ k = logb n ▒о знамена▓елем a=b; ╜▓о▓ знамена▓ел╝ бол╝╕е 1, ▓ак
как < logb a и b < a. Дл┐ ▓акой п░ог░е▒ии ▒│мма по по░┐дк│ ░авна по▒леднем│ ╖лен│ (о▓ли╖ае▓▒┐ о▓ него не более ╖ем на кон▒▓ан▓│
░аз). Э▓о▓ по▒ледний ╖лен е▒▓╝ O(ak ) = O(nlogb a).
Дл┐ пе░вого ▒л│╖а┐ │▓ве░ждение лемм╗ доказано.
68
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
2. Во в▓о░ом ▒л│╖ае аналоги╖ное ░а▒▒│ждение дае▓ ▒│мм│ ▓ого
же вида:
g(n) = f (n) + af (n=b) + a2 f (n=b2) + : : :
= n + a(n=b) + a2 (n=b2) + : : : ;
(4.9)
но ▓епе░╝ = logb a и по▓ом│ знамена▓ел╝ геоме▓░и╖е▒кой п░ог░е▒▒ии ░авен 1 и в▒е ее ╖лен╗ ░авн╗. И╡ ╖и▒ло е▒▓╝ logb n, и по▓ом│ ▒│мма ░авна
nlogb a logb n = (nlogb a lg n):
Сл│╖ай 2 ░азоб░ан.
3. В ╜▓ом ▒л│╖ае │▒ловие ░ег│л┐░но▒▓и ┤│нк╢ии f га░ан▓и░│е▓,
╖▓о в на╕ей ▒│мме кажд╗й ▒лед│╛╣ий ╖лен не п░ево▒╡оди▓ п░ед╗д│╣его, │множенного на c < 1. Тем ▒ам╗м ее можно о╢ени▓╝ ▒ве░╡│
│б╗ва╛╣ей геоме▓░и╖е▒кой п░ог░е▒▒ией ▒о знамена▓елем c, и ▒│мма ▓акой п░ог░е▒▒ии не более ╖ем в кон▒▓ан▓│ (░авн│╛ 1=(1 ; c))
░аз п░ево▒╡оди▓ пе░в╗й ╖лен (но и не мен╝╕е его, ▓ак как в▒е ▒лагаем╗е нео▓░и╢а▓ел╝н╗). Таким об░азом, g (n) = (f (n)) дл┐ n,
┐вл┐╛╣и╡▒┐ ▒▓епен┐ми b. Доказа▓ел╝▒▓во лемм╗ заве░╕ено.
Тепе░╝ м╗ можем доказа▓╝ о▒новн│╛ ▓ео░ем│ о ░ек│░░ен▓н╗╡
о╢енка╡ дл┐ ▒л│╖а┐, когда n е▒▓╝ на▓│░ал╝на┐ ▒▓епен╝ b.
Лемма 4.4. П│▒▓╝ a > 1, b > 1 | кон▒▓ан▓╗, и п│▒▓╝ f (n) |
нео▓░и╢а▓ел╝на┐ ┤│нк╢и┐, оп░еделенна┐ на ▒▓епен┐╡ b. П│▒▓╝
T (n) | ┤│нк╢и┐, оп░еделенна┐ на ▒▓епен┐╡ b ▒оо▓но╕ением
T (n) = aT (n=b) + f (n) п░и n > 1 и T (1) > 0. Тогда:
1. Е▒ли f (n) = O(nlogb a;" ) дл┐ неко▓о░ого " > 0, ▓о T (n) =
(nlogb a ).
2. Е▒ли f (n) = (nlogb a ), ▓о T (n) = (nlogb a ) lg n.
3. Е▒ли f (n) = (nlogb a+" ) дл┐ неко▓о░ого " > 0 и е▒ли af (n=b) 6
cf (n) дл┐ неко▓о░ой кон▒▓ан▓╗ c < 1 и дл┐ до▒▓а▓о╖но бол╝╕и╡ n, ▓о T (n) = (f (n)).
??????? Как │б░а▓╝ ▓о╖к│ в кон╢е ▒лова Доказа▓ел╝▒▓во?
Доказа▓ел╝▒▓во. ▒о▒▓ои▓ в комбина╢ии лемм 4.2 и 4.3. В пе░вом
▒л│╖ае пол│╖аем
T (n) = (nlogb a ) + O(nlogb a ) = (nlogb a):
Во в▓о░ом ▒л│╖ае имеем
T (n) = (nlogb a ) + (nlogb a lg n) = (nlogb a lg n):
4.4 Доказа▓ел╝▒▓во Тео░ем╗ 4.1
69
В ▓░е▓╝ем ▒л│╖ае
T (n) = (nlogb a) + (f (n)) = (f (n)):
Заме▓им, ╖▓о в по▒леднем ▒л│╖ае │▒ловие └f (n) = (nlogb a+" ) дл┐
неко▓о░ого " > 0┴ можно б╗ло б╗ оп│▒▓и▓╝, ▓ак как оно в╗▓екае▓
из │▒лови┐ ░ег│л┐░но▒▓и (▒м. │п░. 4.4-3).
Лемма 4.4 доказана.
4.4.2. Цел╗е п░иближени┐ ▒ве░╡│ и ▒низ│
Нам о▒▓ало▒╝ ░азоб░а▓╝▒┐ под░обно ▒ п░оизвол╝н╗ми n, не ┐вл┐╛╣ими▒┐ ▒▓епен┐ми ╖и▒ла b. В ╜▓ом ▒л│╖ае n=b подлежи▓ ок░│глени╛ и ▒оо▓но╕ение имее▓ вид
T (n) = aT (dn=be) + f (n)
(4.10)
T (n) = aT (bn=bc) + f (n):
(4.11)
или
Надо │беди▓╝▒┐, ╖▓о о╢енка о▒▓ае▓▒┐ в ▒иле и дл┐ ╜▓ого ▒л│╖а┐.
По▒мо▓░им, какие изменени┐ надо вне▒▓и в на╕и ░а▒▒│ждени┐.
Вме▒▓о по▒ледова▓ел╝но▒▓и n; n=b; n=b2; : : : ▓епе░╝ надо ░а▒▒ма▓░ива▓╝ по▒ледова▓ел╝но▒▓╝ ni , оп░еделенн│╛ ▓ак:
(
ni =
n;
е▒ли i = 0,
dni;1=be; е▒ли i > 0.
(4.12)
(м╗ ░а▒▒ма▓░иваем ▒л│╖ай ок░│глени┐ ▒ изб╗▓ком). Э▓а по▒ледова▓ел╝но▒▓╝ | │б╗ва╛╣а┐, но не об┐за▓ел╝но ▒▓░еми▓▒┐ к едини╢е.
Однако м╗ можем │▓ве░жда▓╝, ╖▓о по▒ле logb n и▓е░а╢ий пол│╖и▓▒┐ ╖и▒ло, ог░ани╖енное не зави▒┐╣ей о▓ n (╡о▓┐ зави▒┐╣ей о▓ b)
кон▒▓ан▓ой.
В ▒амом деле, из не░авен▒▓ва dxe 6 x + 1 ▒лед│е▓, ╖▓о
n0 6 n;
n1 6 nb + 1;
n2 6 bn2 + 1b + 1;
n3 6 bn3 + b12 + 1b + 1;
::::::::::::::::::::::
По▒кол╝к│ 1 + 1=b + 1=b2 + : : : 6 1=(b ; 1), дл┐ i = blogb nc м╗
пол│╖аем ni 6 n=bi + b=(b ; 1) 6 b + b=(b ; 1) = O(1).
70
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
И▓е░и░│┐ ▒оо▓но╕ение (4.10), м╗ пол│╖аем
T (n) = f (n0) + aT (n1)
= f (n0) + af (n1 ) + a2 T (n2)
6 f (n0) + af (n1) + a2f (n2) + : : : +
+ ablogb nc;1 f (nblogb nc;1 ) + ablogb nc T (nblogb nc )
= (nlogb a ) +
blogX
b nc;1
j =0
aj f (nj ):
(4.13)
Э▓о в╗░ажение о╖ен╝ по╡оже на (4.6), ▓ол╝ко зде▒╝ n не об┐зано
б╗▓╝ ▒▓епен╝╛ ╖и▒ла b.
[С▓░ого гово░┐, ▒казанное ▓░еб│е▓ неко▓о░╗╡ │▓о╖нений. Дело в
▓ом, ╖▓о вели╖ина T (ndlog bne ) може▓ оказа▓╝▒┐ ░авной н│л╛. Но м╗
знаем, ╖▓о f (n) а▒имп▓о▓и╖е▒ки положи▓ел╝на, ▓. е. положи▓ел╝на
дл┐ в▒е╡ n, на╖ина┐ ▒ неко▓о░ого n0 . По╜▓ом│ в ░азве░▓╗вании
▒│мм╗ н│жно о▒▓анови▓╝▒┐, немного не дойд┐ до ╜▓ого n0 . М╗
оп│▒каем под░обно▒▓и.]
Тепе░╝ надо ░азоб░а▓╝▒┐ ▒ ▒оо▓но╕ени┐ми межд│ ▒лагаем╗ми в
▒│мме
g (n) =
blogX
b nc;1
j =0
aj f (nj ):
(4.14)
Ран╝╕е м╗ ▒░авнивали ╜▓│ ▒│мм│ ▒ геоме▓░и╖е▒кой п░ог░е▒▒ией, в ко▓о░ой знамена▓ел╝ б╗л бол╝╕е едини╢╗ (пе░в╗й ▒л│╖ай), ░авен едини╢е (в▓о░ой ▒л│╖ай) или мен╝╕е едини╢╗ (▓░е▓ий ▒л│╖ай). Т░е▓ий ▒л│╖ай не в╗з╗вае▓ дополни▓ел╝н╗╡ п░облем, ▓ак как в │▒ловии ░ег│л┐░но▒▓и ▓акже п░ед│▒ма▓░ивае▓▒┐ ок░│гление (п░и╖ем в ▓│ же ▒▓о░он│, ╖▓о и в ░ек│░░ен▓ном
▒оо▓но╕ении). Во в▓о░ом ▒л│╖ае м╗ должн╗ о╢ени▓╝, на▒кол╝ко велики изменени┐ в▒лед▒▓вие замен╗ n=bi на ni . Как м╗ видели, ░азни╢а не п░ево▒╡оди▓ b=(b ; 1), но надо е╣е о▓ аб▒ол╛▓ной о╕ибки пе░ей▓и к о▓но▒и▓ел╝ной. Нам надо п░ове░и▓╝, ╖▓о
f (nj ) = O(nlogb a =aj ) = O((n=bj )logb a ), ▓огда п░о╡оди▓ доказа▓ел╝▒▓во лемм╗ 4.3 (▒л│╖ай 2). Заме▓им, ╖▓о bj =n 6 1 п░и j 6 blogb nc.
Из о╢енки f (n) = O(nlogb a ) в╗▓екае▓, ╖▓о дл┐ под╡од┐╣его c и
Зада╖и к главе 4
71
до▒▓а▓о╖но бол╝╕и╡ nj
log a
b
b
n
f (nj ) 6 c bj + b ; 1
log a j
logb a
b
= c n aj
1 + bn b ;b 1
logb a
log a b
n
b
1+ b;1
6 c aj
log a b
= O n aj :
По▒ледний пе░е╡од и▒пол╝з│е▓ ▓о, ╖▓о c(1 + b=(b ; 1))logb a | кон▒▓ан▓а. И▓ак, ▒л│╖ай 2 ░азоб░ан.
Ра▒▒│ждение дл┐ ▒л│╖а┐ 1 по╖▓и ▓акое же. Там н│жно доказа▓╝
о╢енк│ f (nj ) = O(nlogb a;" ); а ╜▓о делае▓▒┐ п░име░но ▓ак же, как и
в ▒л│╖ае 2, ╡о▓┐ п░еоб░азовани┐ б│д│▓ не▒кол╝ко ▒ложнее.
И▓ак, м╗ ░а▒▒мо▓░ели ▒л│╖ай п░оизвол╝ного n дл┐ ок░│глени┐
▒ изб╗▓ком. Аналоги╖но можно ░а▒▒мо▓░е▓╝ ▒л│╖ай ок░│глени┐ ▒
недо▒▓а▓ком, п░и ╜▓ом н│жно б│де▓ доказ╗ва▓╝, ╖▓о nj не може▓
б╗▓╝ ▒ил╝но мен╝╕е n=bj .
Уп░ажнени┐
4.4-1? Укажи▓е п░о▒▓│╛ ┐вн│╛ ┤о░м│л│ дл┐ ni из (4.12), е▒ли b |
положи▓ел╝ное ╢елое ╖и▒ло.
4.4-2? Покажи▓е, ╖▓о е▒ли f (n) = (nlogb a lgk n), где k > 0, ▓о
▒оо▓но╕ение (4.5) вле╖е▓ T (n) = (nlogb a lgk+1 n). Дл┐ п░о▒▓о▓╗
░а▒▒мо▓░и▓е ли╕╝ ▒л│╖ай ╢ел╗╡ ▒▓епеней b.
4.4-3? Покажи▓е, ╖▓о в ▒л│╖ае 3 о▒новной ▓ео░ем╗ одно из │▒ловий ли╕нее: │▒ловие ░ег│л┐░но▒▓и (af (n=b) 6 cf (n) дл┐ неко▓о░ого c < 1) га░ан▓и░│е▓, ╖▓о ▒│╣е▒▓в│е▓ " > 0, дл┐ ко▓о░ого
f (n) = (nlogb a+" ).
Зада╖и
4-1 П░име░╗ ░ек│░░ен▓н╗╡ ▒оо▓но╕ений
Дай▓е как можно более ▓о╖н╗е а▒имп▓о▓и╖е▒кие ве░╡ние и нижние о╢енки дл┐ ▒лед│╛╣и╡ ▒оо▓но╕ений (▒╖и▓аем, ╖▓о T (n) | кон▒▓ан▓а п░и n 6 2):
а. T (n) = 2T (n=2) + n3 .
б. T (n) = T (9n=10) + n.
72
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
в. T (n) = 16T (n=4) + n2 .
г. T (n) = 7T (n=3) + n2 .
д. T (n) = 7T (n=2) + p
n2 .
е. T (n) = 2T (n=4) + n.
ж. T (n) = T (pn ; 1) + n.
з. T (n) = T ( n) + 1.
4-2 Недо▒▓а╛╣ее ╖и▒ло
Ма▒▒ив A[1 : :n] ▒оде░жи▓ в▒е ╢ел╗е ╖и▒ла о▓ 0 до n, к░оме одного. Ч▓об╗ най▓и п░оп│╣енное ╖и▒ло, можно о▓ме╖а▓╝ во в▒помога▓ел╝ном ма▒▒иве B [0 : :n] в▒е ╖и▒ла, в▒▓░е╖а╛╣ие▒┐ в A, и за▓ем
по▒мо▓░е▓╝, какое ╖и▒ло не о▓ме╖ено (в▒е вме▒▓е ▓░еб│е▓ в░емени O(n)). П░и ╜▓ом и▒пол╝зование ╜лемен▓а ма▒▒ива A в ка╖е▒▓ве
индек▒а ▒╖и▓ае▓▒┐ ╜лемен▓а░ной опе░а╢ией.
Наложим ▓акое дополни▓ел╝ное ог░ани╖ение на до▒▓│п к ма▒▒ив│ A: за одно дей▒▓вие м╗ можем по▒мо▓░е▓╝ заданн╗й би▓ заданного ╜лемен▓а ма▒▒ива A.
Покажи▓е, ╖▓о и п░и ▓аки╡ ог░ани╖ени┐╡ м╗ можем най▓и п░оп│╣енное ╖и▒ло за в░ем┐ O(n).
4-3 В░ем┐ пе░еда╖и па░аме▓░ов
В ╜▓ой книге м╗ п░едполагаем, ╖▓о пе░еда╖а па░аме▓░ов занимае▓ по▒▓о┐нное в░ем┐, даже е▒ли пе░едаваем╗й па░аме▓░ |
ма▒▒ив. В бол╝╕ин▒▓ве ┐з╗ков п░ог░амми░овани┐ ╜▓о ▓ак и е▒▓╝,
по▒кол╝к│ пе░едае▓▒┐ не ▒ам ма▒▒ив, а │каза▓ел╝ на него. Но возможн╗ и д░│гие ва░иан▓╗. С░авним ▓░и ▒по▒оба пе░еда╖и ма▒▒ивов в ка╖е▒▓ве па░аме▓░ов:
1. Ма▒▒ив пе░едае▓▒┐ как │каза▓ел╝ за в░ем┐ (1).
2. Ма▒▒ив копи░│е▓▒┐ за в░ем┐ (N ), где N | ░азме░ ма▒▒ива.
3. В п░о╢ед│░│ пе░едае▓▒┐ ▓ол╝ко ▓а ╖а▒▓╝ ма▒▒ива, ко▓о░а┐ б│де▓ в ней и▒пол╝зова▓╝▒┐. П░и ╜▓ом ▓░еб│е▓▒┐ в░ем┐ (q ; p + 1),
е▒ли пе░едае▓▒┐ │╖а▒▓ок A[p : :q ].
а. Ра▒▒мо▓░им ░ек│░▒ивн╗й алго░и▓м двои╖ного пои▒ка ╖и▒ла в
│по░┐до╖енном ма▒▒иве (│п░. 1.3-5). Каково б│де▓ в░ем┐ его ░або▓╗ п░и каждом из │казанн╗╡ ▒по▒обов пе░еда╖и па░аме▓░а? (А░г│мен▓ами ░ек│░▒ивной п░о╢ед│░╗ ┐вл┐╛▓▒┐ и▒ком╗й ╜лемен▓ и
ма▒▒ив, в ко▓о░ом о▒│╣е▒▓вл┐е▓▒┐ пои▒к.)
б. П░оведи▓е ▓акой анализ дл┐ алго░и▓ма Merge-Sort из ░аздела 1.3.1.
4-4 Е╣е не▒кол╝ко ░ек│░░ен▓н╗╡ ▒оо▓но╕ений
Укажи▓е возможно более ▓о╖н╗е а▒имп▓о▓и╖е▒кие ве░╡ние и
нижние о╢енки дл┐ T (n) в каждом из │казанн╗╡ ниже п░име░ов.
П░едполагае▓▒┐, ╖▓о T (n) | кон▒▓ан▓а п░и n 6 8.
а. T (n) = 3T (n=2) + n lg n.
Зада╖и к главе 4
73
б. T (n) = 3T (n=3 + 5) + n=2.
в. T (n) = 2T (n=2) + n= lg n.
г. T (n) = T (n ; 1) + 1=n.
д. T (n) = p
T (n ;p1) + lg n.
е. T (n) = nT ( n) + n.
4-5 Пе░е╡од о▓ ▒▓епеней к п░оизвол╝н╗м а░г│мен▓ам
П│▒▓╝ м╗ пол│╖или о╢енк│ дл┐ T (n) п░и в▒е╡ n, ┐вл┐╛╣и╡▒┐ ▒▓епен┐ми неко▓о░ого ╢елого b. Как ░а▒п░о▒▓░ани▓╝ ее на п░оизвол╝н╗е n?
а. П│▒▓╝ T (n) и h(n) | моно▓онно воз░а▒▓а╛╣ие ┤│нк╢ии, оп░еделенн╗е дл┐ п░оизвол╝н╗╡ положи▓ел╝н╗╡ а░г│мен▓ов (не об┐за▓ел╝но ╢ел╗╡), п░и╖ем T (n) 6 h(n) дл┐ в▒е╡ n, ┐вл┐╛╣и╡▒┐ ▒▓епен┐ми ╢елого ╖и▒ла b > 1. П│▒▓╝ изве▒▓но, к░оме ▓ого, ╖▓о h
└░а▒▓е▓ до▒▓а▓о╖но медленно┴: h(n) = O(h(n=b)). Докажи▓е, ╖▓о
T (n) = O(h(n)).
б. П│▒▓╝ дл┐ ┤│нк╢ии T в╗полнено ▒оо▓но╕ение T (n) =
aT (n=b) + f (n) п░и n > n0 ; п│▒▓╝ a > 1, b > 1 и f (n) моно▓онно воз░а▒▓ае▓. П│▒▓╝ T (n) моно▓онно воз░а▒▓ае▓ п░и n 6 n0 , и
п░и ╜▓ом T (n0) 6 aT (n0=b)+ f (n0): Докажи▓е, ╖▓о T (n) моно▓онно
воз░а▒▓ае▓.
в. Уп░о▒▓и▓е доказа▓ел╝▒▓во ▓ео░ем╗ 4.1 дл┐ ▒л│╖а┐ моно▓онной
и └до▒▓а▓о╖но медленно ░а▒▓│╣ей┴ ┤│нк╢ии f (n). Во▒пол╝з│й▓е▒╝
леммой 4.4.
4-6 Чи▒ла Фибона╖╖и
Чи▒ла Фибона╖╖и оп░едел┐╛▓▒┐ ▒оо▓но╕ением (2.13). Зде▒╝ м╗
░а▒▒мо▓░им неко▓о░╗е и╡ ▒вой▒▓ва. Дл┐ ╜▓ого оп░еделим п░оизвод┐╣│╛ ┤│нк╢и╛ (generating function), оп░едел┐ем│╛ как ┤о░мал╝н╗й ▒▓епенной ░┐д (formal power series)
F=
1
X
i=0
Fi z i = 0 + z + z 2 + 2z 3 + 3z4 + 5z5 + 8z 6 + 13z7 + : : :
а. Покажи▓е, ╖▓о F (z ) = z + z F (z ) + z 2F (z ).
б. Покажи▓е, ╖▓о
z
1
z
1
1
F (z) = 1 ; z ; z2 = (1 ; 'z)(1 ; 'z
= p 1 ; 'z ; 1 ; 'z
b )
b
5
где
p
1
+
' = 2 5 = 1;61803 : : :
и
p
1
;
'b = 2 5 = ;0;61803 : : :
74
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
в. Покажи▓е, ╖▓о
F (z) =
1
X
i=0
p1 ('i ; 'bi)zi:
5
p
г. Докажи▓е, ╖▓о Fi п░и i > 0 ░авно ближай╕ем│ к 'i = 5 ╢елом│
╖и▒л│. (Указание: j'bj < 1.)
д. Докажи▓е, ╖▓о Fi+2 > 'i дл┐ в▒е╡ i > 0.
4-7 Те▒▓и░ование мик░о▒╡ем
Имее▓▒┐ n одинаков╗╡ мик░о▒╡ем, ▒по▒обн╗╡ п░ове░┐▓╝ д░│г
д░│га; неко▓о░╗е из ни╡ и▒п░авн╗, неко▓о░╗е | не▓. Дл┐ п░ове░ки па░а мик░о▒╡ем в▒▓авл┐е▓▒┐ в ▒пе╢иал╝н│╛ пла▓│, по▒ле ╖его
кажда┐ из ни╡ ▒ооб╣ае▓ о ▒о▒▓о┐нии ▒о▒еда. И▒п░авна┐ мик░о▒╡ема п░и ╜▓ом никогда не о╕ибае▓▒┐, а неи▒п░авна┐ може▓ да▓╝
л╛бой о▓ве▓.
О▓ве▓ A
О▓ве▓ B
Рез│л╝▓а▓
B и▒п░авна A и▒п░авна обе ╡о░о╕ие или обе пло╡ие
B и▒п░авна A неи▒п░авна ╡о▓┐ б╗ одна неи▒п░авна
B неи▒п░авна A и▒п░авна ╡о▓┐ б╗ одна неи▒п░авна
B неи▒п░авна A неи▒п░авна ╡о▓┐ б╗ одна неи▒п░авна
а. Покажи▓е, ╖▓о е▒ли бол╝╕е половин╗ мик░о▒╡ем пло╡ие, ▓о
попа░ное ▓е▒▓и░ование не позволи▓ │зна▓╝ наве░н┐ка, какие именно мик░о▒╡ем╗ пло╡и (они ▒мог│▓ на▒ обман│▓╝).
б. П│▒▓╝ н│жно най▓и ╡о▓┐ б╗ одн│ ╡о░о╕│╛ мик░о▒╡ем│ из
n ╕▓│к, из ко▓о░╗╡ бол╝╕е половин╗ и▒п░авн╗╡. Покажи▓е, ╖▓о
до▒▓а▓о╖но bn=2c попа░н╗╡ ▓е▒▓ов, ╖▓об╗ ▒ве▒▓и зада╖│ к аналоги╖ной зада╖е половинного ░азме░а.
в. П│▒▓╝ и▒п░авно бол╝╕е половин╗ мик░о▒╡ем. Покажи▓е, ╖▓о
можно най▓и в▒е ╡о░о╕ие мик░о▒╡ем╗ за (n) попа░н╗╡ ▓е▒▓ов.
(Во▒пол╝з│й▓е▒╝ ░ек│░░ен▓н╗м ▒оо▓но╕ением.)
[Э▓│ зада╖│ можно пе░е┤о░м│ли░ова▓╝ в ин╗╡ ▓е░мина╡: имее▓▒┐ n одинаков╗╡ на вид п░едме▓ов, но на ▒амом деле они о▓но▒┐▓▒┐ к не▒кол╝ким ка▓его░и┐м. Е▒▓╝ п░ибо░, ко▓о░╗й по дв│м
п░едме▓ам п░ове░┐е▓, одинаков╗ ли они. Изве▒▓но, ╖▓о п░едме▓╗
неко▓о░ой ка▓его░ии ▒о▒▓авл┐╛▓ бол╝╕ин▒▓во. Надо най▓и п░ед▒▓ави▓ел╝ ╜▓ого бол╝╕ин▒▓ва з?? O(n) ▒░авнений. Помимо ░ек│░░ен▓ного ░е╕ени┐, ╜▓а зада╖а имее▓ п░о▒▓ое и▓е░а▓ивное ░е╕ение. Заведем ко░обк│, в ко▓о░ой б│дем накаплива▓╝ одинаков╗е
п░едме▓╗, а ▓акже │░н│, к│да можно в╗кид╗ва▓╝ п░едме▓╗. Пе░еклад╗ваем неп░о▒мо▓░енн╗е ╜лемен▓╗ в ко░обк│ или │░н│, подде░жива┐ ▓акое ▒вой▒▓во: ▒░еди нев╗кин│▓╗╡ и▒ком╗е ▒о▒▓авл┐╛▓
бол╝╕ин▒▓во.]
Заме╖ани┐ к главе 4
75
Заме╖ани┐
Чи▒ла Фибона╖╖и ░а▒▒ма▓░ивали▒╝ Фибона╖╖и (L. Fibonacci) в
1202 год│. М│ав░ (A. De Moivre) п░именил п░оизвод┐╣ие ┤│нк╢ии
дл┐ ░е╕ени┐ ░ек│░░ен▓н╗╡ ▒оо▓но╕ений (▒м. зада╖│ 4-6). О▒новна┐ ▓ео░ема о ░ек│░░ен▓н╗╡ ▒оо▓но╕ени┐╡ заим▒▓вована из ░або▓╗ Бен▓ли, Хакен и Сак▒а [26], где п░иводи▓▒┐ более ▒ил╝н╗й ░ез│л╝▓а▓ (вкл╛╖а╛╣ий ░ез│л╝▓а▓ │п░. 4.4-2). Кн│▓ [121] и Л╛ [140]
показ╗ва╛▓, как ░е╕а▓╝ линейн╗е ░ек│░░ен▓н╗е ▒оо▓но╕ени┐ ▒
помо╣╝╛ п░оизвод┐╣и╡ ┤│нк╢ий. Дополни▓ел╝н╗е ▒ведени┐ о ░е╕ении ░ек│░░ен▓н╗╡ ▒оо▓но╕ений п░ивод┐▓ П│░дом и Б░а│н [164].
76
Глава 4 Рек│░░ен▓н╗е ▒оо▓но╕ени┐
1257
5
Множе▒▓ва
В ╜▓ой главе м╗ напоминаем оп░еделени┐, ▓е░минологи╛, обозна╖ени┐ и о▒новн╗е ▒вой▒▓ва множе▒▓в, о▓но╕ений, ┤│нк╢ий, г░а┤ов
и де░ев╝ев. Чи▓а▓ели, знаком╗е ▒ ними, мог│▓ п░оп│▒▓и▓╝ ╜▓│ глав│ (об░а╣а┐▒╝ к ней по ме░е необ╡одимо▒▓и).
5.1. Множе▒▓ва
Множе▒▓во (set) ▒о▒▓ои▓ из ╜лемен▓ов (members, elements). Е▒ли
об║ек▓ x ┐вл┐е▓▒┐ ╜лемен▓ом множе▒▓ва S , м╗ пи╕ем x 2 S (╖и▓ае▓▒┐ └x п░инадлежи▓ S ┴). Е▒ли x не п░инадлежи▓ S , пи╕ем x 2= S .
Можно зада▓╝ множе▒▓во пе░е╖и▒лением его ╜лемен▓ов ╖е░ез зап┐▓╗е в ┤иг│░н╗╡ ▒кобка╡. Нап░име░, множе▒▓во S = f1; 2; 3g ▒оде░жи▓ ╜лемен▓╗ 1; 2; 3 и ▓ол╝ко и╡. Чи▒ло 2 ┐вл┐е▓▒┐ ╜лемен▓ом ╜▓ого
множе▒▓ва, а ╖и▒ло 4 | не▓, ▓ак ╖▓о 2 2 S , 4 2= S . Множе▒▓во не
може▓ ▒оде░жа▓╝ дв│╡ одинаков╗╡ ╜лемен▓ов, и по░┐док ╜лемен▓ов не ┤ик▒и░ован. Два множе▒▓ва A и B ░авн╗ (are equal), е▒ли
они ▒о▒▓о┐▓ из одни╡ и ▓е╡ же ╜лемен▓ов. В ╜▓ом ▒л│╖ае пи╕│▓
A = B . Нап░име░, f1; 2; 3; 1g = f1; 2; 3g = f3; 2; 1g.
Дл┐ ╖а▒▓о и▒пол╝з│ем╗╡ множе▒▓в име╛▓▒┐ ▒пе╢иал╝н╗е обозна╖ени┐:
? обозна╖ае▓ п│▒▓ое множе▒▓во (empty set), не ▒оде░жа╣ее ни
одного ╜лемен▓а.
Z обозна╖ае▓ множе▒▓во ╢ел╗╡ ╖и▒ел (integers); Z =
f: : : ; ;2; ;1; 0; 1; 2; : : : g;
R обозна╖ае▓ множе▒▓во ве╣е▒▓венн╗╡ (дей▒▓ви▓ел╝н╗╡) ╖и▒ел
(real numbers);
N обозна╖ае▓ множе▒▓во на▓│░ал╝н╗╡ ╖и▒ел (natural numbers);
1
N = f0; 1; 2; : : : g
Е▒ли в▒е ╜лемен▓╗ множе▒▓ва A ┐вл┐╛▓▒┐ ╜лемен▓ами множе▒▓ва
1
Иногда н│ме░а╢и╛ на▓│░ал╝н╗╡ ╖и▒ел на╖ина╛▓ ▒ 1 | ░ан╝╕е ▓ак б╗ло п░ин┐▓о.
78
Глава 5 Множе▒▓ва
B, (из x 2 A ▒лед│е▓ x 2 B), гово░┐▓, ╖▓о A ┐вл┐е▓▒┐ подмноже▒▓вом (subset) множе▒▓ва B и пи╕│▓ A B . Е▒ли п░и ╜▓ом A
не ▒овпадае▓ ▒ B , ▓о A наз╗вае▓▒┐ ▒об▒▓венн╗м подмноже▒▓вом
(proper subset) множе▒▓ва B ; в ╜▓ом ▒л│╖ае пи╕│▓ A B . (Многие
ав▓о░╗ и▒пол╝з│╛▓ обозна╖ение A B дл┐ подмноже▒▓в, а не дл┐
▒об▒▓венн╗╡ подмноже▒▓ва.) Дл┐ л╛бого множе▒▓ва A в╗полнено
▒оо▓но╕ение A A. Множе▒▓ва A и B ░авн╗ ▓огда и ▓ол╝ко ▓огда, когда A B и B A. Дл┐ л╛б╗╡ ▓░е╡ множе▒▓в A, B и C из
A B и B C ▒лед│е▓ A C . Дл┐ л╛бого множе▒▓ва A имее▓
ме▒▓о ▒оо▓но╕ение A.
?
Иногда множе▒▓во оп░едел┐е▓▒┐ как ╖а▒▓╝ д░│гого множе▒▓ва:
м╗ можем в╗дели▓╝ из множе▒▓ва A в▒е ╜лемен▓╗, облада╛╣ие
неко▓о░╗м ▒вой▒▓вом, и об░азова▓╝ из ни╡ новое множе▒▓во B .
Нап░име░, множе▒▓во ╖е▓н╗╡ ╖и▒ел можно оп░едели▓╝ как fx : x 2
Zи x=2 | ╢елое ╖и▒лоg. Э▓о об╗╖но ╖и▓а╛▓ └множе▒▓во x из Z, дл┐
ко▓о░╗╡...┴ Иногда вме▒▓о двое▓о╖и┐ и▒пол╝з│е▓▒┐ ве░▓икал╝на┐
╖е░▓а.
Дл┐ л╛б╗╡ множе▒▓в A и B можно по▒▓░ои▓╝ ▒лед│╛╣ие множе▒▓ва, пол│╖аем╗е ▒ помо╣╝╛ ▓ео░е▓ико-множе▒▓венн╗╡ опе░а╢ий
(set operations):
Пе░е▒е╖ение (intersection) множе▒▓в A и B оп░едел┐е▓▒┐ как
множе▒▓во
A \ B = fx : x 2 A и x 2 Bg:
Об║единение (union) множе▒▓в A и B оп░едел┐е▓▒┐ как множе▒▓во
A [ B = fx : x 2 A или x 2 Bg:
Разно▒▓╝ (dierence) множе▒▓в A и B оп░едел┐е▓▒┐ как множе▒▓во
A n B = fx : x 2 A и x 2= B g:
Тео░е▓ико-множе▒▓венн╗е опе░а╢ии облада╛▓ ▒лед│╛╣ими
▒вой▒▓вами:
Свой▒▓ва п│▒▓ого множе▒▓ва (empty set laws):
A\ = ;
?
?
A [ = A:
?
Идемпо▓ен▓но▒▓╝ (idempotency laws):
A \ A = A;
A [ A = A:
Комм│▓а▓ивно▒▓╝ (commutative laws):
A \ B = B \ A;
A [ B = B [ A:
Множе▒▓ва
79
??? На ка░▓инке ▒лед│е▓ замени▓╝ мин│▒ на n
Диаг░амма Венна, илл╛▒▓░и░│╛╣а┐ пе░в╗й из законов де Мо░гана (5.2). Множе▒▓ва A; B; C изоб░ажен╗ к░│гами на пло▒ко▒▓и.
Ри▒. 5.1
А▒▒о╢иа▓ивно▒▓╝ (associative laws):
A \ (B \ C ) = (A \ B) \ C; A [ (B [ C ) = (A [ B) [ C:
Ди▒▓░иб│▓ивно▒▓╝ (distributive laws):
A \ (B [ C ) = (A \ B) [ (A \ C );
A [ (B \ C ) = (A [ B) \ (A [ C )
(5.1)
Закон╗ погло╣ени┐ (absorption laws):
A \ (A [ B ) = A; A [ (A \ B ) = A
Закон╗ де Мо░гана (DeMorgan's laws):
A n (B \ C ) = (A n B) [ (A n C );
(5.2)
A n ( B [ C ) = ( A n B ) \ (A n C )
Ри▒. 5.1 илл╛▒▓░и░│е▓ пе░в╗й из законов де Мо░гана (5.1);
множе▒▓ва A, B и C изоб░ажен╗ в виде к░│гов на пло▒ко▒▓и.
Ча▒▓о в▒е ░а▒▒ма▓░иваем╗е множе▒▓ва ┐вл┐╛▓▒┐ подмноже▒▓ва
неко▓о░ого ┤ик▒и░ованного множе▒▓ва, наз╗ваемого │ниве░▒│мом
(universe). Нап░име░, е▒ли на▒ ин▓е░е▒│╛▓ множе▒▓ва, ╜лемен▓ами
ко▓о░╗╡ ┐вл┐╛▓▒┐ ╢ел╗е ╖и▒ла, ▓о в ка╖е▒▓ве │ниве░▒│ма можно
вз┐▓╝ множе▒▓во Z ╢ел╗╡ ╖и▒ел. Е▒ли │ниве░▒│м U ┤ик▒и░ован,
можно оп░едели▓╝ дополнение (complement) множе▒▓ва A как A =
U n A. Дл┐ л╛бого A U ве░н╗ ▓акие │▓ве░ждени┐:
A = A;
A\A= ;
?
A [ A = U:
Из законов де Мо░гана (5.2) ▒лед│е▓, ╖▓о дл┐ л╛б╗╡ множе▒▓в
A; B U име╛▓ ме▒▓о ░авен▒▓ва
A \ B = A [ B; A [ B = A \ B:
Два множе▒▓ва A и B наз╗ва╛▓▒┐ непе░е▒ека╛╣ими▒┐ (disjoint),
е▒ли они не име╛▓ об╣и╡ ╜лемен▓ов, ▓. е. е▒ли A \ B = . Гово░┐▓,
╖▓о ▒емей▒▓во S = fSig неп│▒▓╗╡ множе▒▓в об░аз│е▓ ░азбиение
(partition) множе▒▓ва S , е▒ли
?
80
Глава 5 Множе▒▓ва
множе▒▓ва Si попа░но не пе░е▒ека╛▓▒┐ (are pairwise disjoint),
▓. е. Si \ Sj = п░и i 6= j ,
и╡ об║единение е▒▓╝ S , ▓. е.
[
Si
S=
?
Si 2S
Д░│гими ▒ловами, ▒емей▒▓во S об░аз│е▓ ░азбиение множе▒▓ва S ,
е▒ли л╛бой ╜лемен▓ s 2 S п░инадлежи▓ ░овно одном│ из множе▒▓в
Si ▒емей▒▓ва.
Чи▒ло ╜лемен▓ов в множе▒▓ве S наз╗вае▓▒┐ его мо╣но▒▓╝╛ (cardinality), или ░азме░ом (size), и обозна╖ае▓▒┐ jS j. Два множе▒▓ва
име╛▓ одн│ и ▓│ же мо╣но▒▓╝, е▒ли межд│ и╡ ╜лемен▓ами можно
│▒▓анови▓╝ взаимно однозна╖ное ▒оо▓ве▓▒▓вие. Мо╣но▒▓╝ п│▒▓ого множе▒▓ва ░авна н│л╛: j?j = 0. Мо╣но▒▓╝ коне╖ного (nite)
множе▒▓ва | на▓│░ал╝ное ╖и▒ло; дл┐ бе▒коне╖н╗╡ (innite) множе▒▓в пон┐▓ие мо╣но▒▓и ▓░еб│е▓ акк│░а▓ного оп░еделени┐. Оно
нам не понадоби▓▒┐; │пом┐нем ли╕╝, ╖▓о множе▒▓ва, ╜лемен▓╗ ко▓о░╗╡ можно по▒▓ави▓╝ во взаимно однозна╖ное ▒оо▓ве▓▒▓вие ▒
на▓│░ал╝н╗ми ╖и▒лами, наз╗ва╛▓▒┐ ▒╖е▓н╗ми (countably innite);
бе▒коне╖н╗е множе▒▓ва, не ┐вл┐╛╣ие▒┐ ▒╖е▓н╗ми, наз╗ва╛▓ не▒╖е▓н╗ми (uncountable). Множе▒▓во ╢ел╗╡ ╖и▒ел Z ▒╖е▓но, в ▓о
в░ем┐ как множе▒▓во ве╣е▒▓венн╗╡ ╖и▒ел R не▒╖е▓но.
Дл┐ л╛б╗╡ дв│╡ коне╖н╗╡ множе▒▓в A и B в╗полнено ░авен▒▓во
jA [ Bj = jAj + jBj ; jA \ Bj
(5.3)
из ╜▓ого ░авен▒▓ва в╗▓екае▓, ╖▓о
jA [ Bj 6 jAj + jBj
Е▒ли множе▒▓ва A и B не пе░е▒ека╛▓▒┐, ▓о jA \ B j = 0 и ╜▓о
не░авен▒▓во об░а╣ае▓▒┐ в ░авен▒▓во: jA [ B j = jAj + jB j. Е▒ли A B, ▓о jAj 6 jB j.
Коне╖ное множе▒▓во из n ╜лемен▓ов наз╗ва╛▓ n-╜лемен▓н╗м (n-
set); одно╜лемен▓ное множе▒▓во имен│╛▓ иногда ▒ингле▓оном (singleton). В англий▒кой ли▓е░а▓│░е │по▓░ебл┐е▓▒┐ ▓акже ▓е░мин ksubset, озна╖а╛╣ий k-╜лемен▓ное подмноже▒▓во (какого-либо множе▒▓ва).
Дл┐ данного множе▒▓ва S можно ░а▒▒мо▓░е▓╝ множе▒▓во в▒е╡
его подмноже▒▓в, вкл╛╖а┐ п│▒▓ое множе▒▓во и ▒амо S ; его обозна╖а╛▓ 2S и наз╗ва╛▓ множе▒▓вом-▒▓епен╝╛ (power set). Нап░име░,
2fa;bg = f?; fag; fbg; fa; bgg. Дл┐ коне╖ного S множе▒▓во 2S ▒оде░жи▓ 2jS j ╜лемен▓ов.
Упо░┐до╖енна┐ па░а из дв│╡ ╜лемен▓ов a и b обозна╖ае▓▒┐ (a; b) и
┤о░мал╝но може▓ б╗▓╝ оп░еделена как (a; b) = fa; fa; bgg, ▓ак ╖▓о
(a; b) о▓ли╖ае▓▒┐ о▓ (b; a). [Э▓о оп░еделение │по░┐до╖енной па░╗
Множе▒▓ва
81
п░едложено К│░а▓ов▒ким. Можно б╗ло б╗ и▒пол╝зова▓╝ и д░│гое
оп░еделение, важно ▓ол╝ко, ╖▓об╗ (a; b) = (c; d) б╗ло ░авно▒ил╝но
(a = c) и (b = d).]
Дека░▓ово п░оизведение (cartesian product) дв│╡ множе▒▓в A и
B оп░едел┐е▓▒┐ как множе▒▓во в▒е╡ │по░┐до╖енн╗╡ па░, │ ко▓о░╗╡
пе░в╗й ╜лемен▓ п░инадлежи▓ A, а в▓о░ой | B . Обозна╖ение: AB .
Фо░мал╝но можно запи▒а▓╝
A B = f(a; b) : a 2 A и b 2 B g
Нап░име░, fa; bg fa; b; cg = f(a; a); (a; b); (a; c); (b; a); (b; b); (b; c)g.
Дл┐ коне╖н╗╡ множе▒▓в A и B мо╣но▒▓╝ и╡ п░оизведени┐ ░авна
п░оизведени╛ мо╣но▒▓ей:
jA Bj = jAj jBj:
(5.4)
Дека░▓ово п░оизведение n множе▒▓в A1 ; A2; : : :; An оп░едел┐е▓▒┐
как множе▒▓во n-ок (n-tuples)
A1A2 : : :An = f(a1; a2; : : : ; an) : ai 2 Ai п░и в▒е╡ i = 1; 2; : : : ; ng
(┤о░мал╝но можно оп░едели▓╝ ▓░ойк│ (a; b; c) как ((a; b); c),
╖е▓ве░к│ (a; b; c; d) как ((a; b; c); d) и ▓ак далее).
Чи▒ло ╜лемен▓ов в дека░▓овом п░оизведение ░авно п░оизведени╛
мо╣но▒▓ей ▒омножи▓елей:
jA1 A2 : : : Anj = jA1j jA2j : : : jAnj
Можно оп░едели▓╝ ▓акже дека░▓ов│ ▒▓епен╝
An = A A : : : A
как п░оизведение n одинаков╗╡ ▒омножи▓елей; дл┐ коне╖ного A
мо╣но▒▓╝ An ░авна jAjn . О▓ме▓им, ╖▓о n-ки можно ░а▒▒ма▓░ива▓╝
как коне╖н╗е по▒ледова▓ел╝но▒▓и длин╗ n (▒м. ▒. 5.3).
Уп░ажнени┐
5.1-1 На░и▒│й▓е диаг░амм│ Венна дл┐ пе░вого из ▒вой▒▓в ди▒▓░иб│▓ивно▒▓и (5.1).
5.1-2 Докажи▓е обоб╣ение законов де Мо░гана на ▒л│╖ай бол╝╕его ╖и▒ла множе▒▓в:
A1 \ A2 \ : : : \ An = A1 [ A2 [ : : : [ An ;
A1 [ A2 [ : : : [ An = A1 \ A2 \ : : : \ An:
82
Глава 5 Множе▒▓ва
5.1-3 Докажи▓е обоб╣ение ░авен▒▓ва (5.3), наз╗ваемое ┤о░м│лой вкл╛╖ений и и▒кл╛╖ений (principle of inclusion and exclusion):
jA1 [ A2 [ : : : [ Anj = jA1j + jA2j + : : : + jAn j
; jA1 \ A2j ; jA1 \ A3j ; : : :
+ jA1 \ A2 \ A3 j + : : :
+ (;1)n;1 jA1 \ A2 \ : : : \ An j
5.1-4 Доказа▓╝, ╖▓о множе▒▓во не╖е▓н╗╡ на▓│░ал╝н╗╡ ╖и▒ел
▒╖е▓но.
5.1-5 Доказа▓╝, ╖▓о е▒ли множе▒▓во S коне╖но и ▒оде░жи▓ n ╜лемен▓ов, ▓о множе▒▓во-▒▓епен╝ 2S ▒оде░жи▓ 2n ╜лемен▓ов. (Д░│гими ▒ловами, множе▒▓во S имее▓ 2n ░азли╖н╗╡ подмноже▒▓в.)
5.1-6 Дай▓е ┤о░мал╝но инд│к▓ивное оп░еделение n-ки, и▒пол╝з│┐ пон┐▓ие │по░┐до╖енной па░╗.
5.2. О▓но╕ени┐
Бина░н╗м о▓но╕ением (binary relation) R межд│ ╜лемен▓ами
множе▒▓в A и B наз╗вае▓▒┐ подмноже▒▓во дека░▓ова п░оизведени┐ A B . Е▒ли (a; b) 2 R, пи╕│▓ aRb и гово░┐▓, ╖▓о ╜лемен▓ a
на╡оди▓▒┐ в о▓но╕ении R ▒ ╜лемен▓ом b. Бина░н╗м о▓но╕ением на
множе▒▓ве A наз╗ва╛▓ подмноже▒▓во дека░▓ова квад░а▓а A A.
Нап░име░, о▓но╕ение └б╗▓╝ мен╝╕е┴ на множе▒▓ве на▓│░ал╝н╗╡
╖и▒ел е▒▓╝ множе▒▓во f(a; b) : a; b 2 N и a < bg. Под n-ме▒▓н╗м о▓но╕ением (n-ary relation) на множе▒▓ва╡ A1 ; A2; : : : ; An понима╛▓
подмноже▒▓во дека░▓ова п░оизведени┐ A1 A2 : : : An .
Бина░ное о▓но╕ение R A A наз╗ва╛▓ ░е┤лек▒ивн╗м (reexive), е▒ли
aRa
дл┐ в▒е╡ a 2 A. Нап░име░, о▓но╕ени┐ └=┴ и └6┴ ┐вл┐╛▓▒┐ ░е┤лек▒ивн╗ми о▓но╕ени┐ми на множе▒▓ве N, но о▓но╕ение └<┴ ▓аков╗м
не ┐вл┐е▓▒┐. О▓но╕ение R наз╗вае▓▒┐ ▒имме▓░и╖н╗м (symmetric),
е▒ли
aRb вле╖е▓ bRa
дл┐ в▒е╡ a; b 2 A. О▓но╕ение ░авен▒▓ва ┐вл┐е▓▒┐ ▒имме▓░и╖н╗м, а
о▓но╕ени┐ └<┴ и └6┴ | не▓. О▓но╕ение R наз╗ва╛▓ ▓░анзи▓ивн╗м
(transitive), е▒ли
aRb и bRc вле╖е▓ aRc
О▓но╕ени┐
83
дл┐ в▒е╡ a; b; c 2 A. Нап░име░, о▓но╕ени┐ └<┴, └6┴ и └=┴ ┐вл┐╛▓▒┐
▓░анзи▓ивн╗ми, а о▓но╕ение R = f(a; b) : a; b 2 N и a = b ; 1g |
не▓, ▓ак как 3R4 и 4R5, но не 3R5.
О▓но╕ение, ┐вл┐╛╣ее▒┐ однов░еменно ░е┤лек▒ивн╗м, ▒имме▓░и╖н╗м и ▓░анзи▓ивн╗м, наз╗ва╛▓ о▓но╕ением ╜квивален▓но▒▓и (equivalence relation). Е▒ли R | о▓но╕ение ╜квивален▓но▒▓и на
множе▒▓ве A, ▓о можно оп░едели▓╝ кла▒▒ ╜квивален▓но▒▓и (equivalence class) ╜лемен▓а a 2 A как множе▒▓во [a] = fb 2 A : aRbg в▒е╡
╜лемен▓ов, ╜квивален▓н╗╡ a. Нап░име░, на множе▒▓ве на▓│░ал╝н╗╡ ╖и▒ел можно оп░едели▓╝ о▓но╕ение ╜квивален▓но▒▓и, ▒╖и▓а┐
╖и▒ла a и b ╜квивален▓н╗ми, е▒ли и╡ ▒│мма a + b ╖е▓на. Э▓о о▓но╕ение (назовем его R) дей▒▓ви▓ел╝но б│де▓ о▓но╕ением ╜квивален▓но▒▓и. В ▒амом деле, ▒│мма a + a в▒егда ╖е▓на, ▓ак ╖▓о оно
░е┤лек▒ивно; a + b = b + a, ▓ак ╖▓о R ▒имме▓░и╖но; наконе╢, е▒ли
a + b и b + c | ╖е▓н╗е ╖и▒ла, ▓о a + c = (a + b) + (b + c) ; 2b ▓акже ╖е▓но, ▓ак ╖▓о R ▓░анзи▓ивно. Кла▒▒ ╜квивален▓но▒▓и ╖и▒ла
4 е▒▓╝ [4] = f0; 2; 4; 6; : : : g, а кла▒▒ ╜квивален▓но▒▓и ╖и▒ла 3 е▒▓╝
[3] = f1; 3; 5; 7; : : : g. О▒новное ▒вой▒▓во кла▒▒ов ╜квивален▓но▒▓и
▒о▒▓ои▓ в ▒лед│╛╣ем:
Тео░ема 5.1 (О▓но╕ени┐ ╜квивален▓но▒▓и ▒оо▓ве▓▒▓в│╛▓ ░азбиени┐м).
Дл┐ л╛бого о▓но╕ени┐ ╜квивален▓но▒▓и на множе▒▓ве A кла▒▒╗
╜квивален▓но▒▓и об░аз│╛▓ ░азбиение A. Нап░о▓ив, дл┐ л╛бого ░азбиени┐ множе▒▓ва A о▓но╕ение └б╗▓╝ в одном кла▒▒е┴
┐вл┐е▓▒┐ о▓но╕ением ╜квивален▓но▒▓и.
Доказа▓ел╝▒▓во. Ч▓об╗ доказа▓╝ пе░вое │▓ве░ждение, надо показа▓╝, ╖▓о кла▒▒╗ ╜квивален▓но▒▓и неп│▒▓╗, попа░но не пе░е▒ека╛▓▒┐ и в об║единении да╛▓ в▒е множе▒▓во A. По ▒вой▒▓в│ ░е┤лек▒ивно▒▓и a 2 [a], по╜▓ом│ кла▒▒╗ неп│▒▓╗ и пок░╗ва╛▓ в▒е a.
Докажем, ╖▓о е▒ли кла▒▒╗ [a] и [b] пе░е▒ека╛▓▒┐, ▓о они ▒овпада╛▓. П│▒▓╝ c | и╡ об╣ий ╜лемен▓, ▓огда aRc, bRc, cRb (▒имме▓░и╖но▒▓╝) и aRb (▓░анзи▓ивно▒▓╝). Тепе░╝ видно, ╖▓о [b] [a]: е▒ли
x | п░оизвол╝н╗й ╜лемен▓ b, ▓о bRx и по ▓░анзи▓ивно▒▓и aRx.
Аналоги╖но, [a] [b] и по▓ом│ [a] = [b].
В▓о░ое │▓ве░ждение ▓ео░ем╗ ▒ов▒ем о╖евидно.
Бина░ное о▓но╕ение R на множе▒▓ве A наз╗вае▓▒┐ ан▓и▒имме▓░и╖н╗м, е▒ли
aRb и bRa вле╖е▓ a = b:
Нап░име░, о▓но╕ение └6┴ на на▓│░ал╝н╗╡ ╖и▒ла╡ ┐вл┐е▓▒┐ ан▓и▒имме▓░и╖н╗м, по▒кол╝к│ из a 6 b и b 6 a ▒лед│е▓ a = b. Ре┤лек▒ивное, ан▓и▒имме▓░и╖ное и ▓░анзи▓ивное о▓но╕ение наз╗вае▓▒┐ о▓но╕ением ╖а▒▓и╖ного по░┐дка (partial order), и множе▒▓во
вме▒▓е ▒ ▓аким о▓но╕ением на нем наз╗вае▓▒┐ ╖а▒▓и╖но │по░┐до╖енн╗м множе▒▓вом (partially ordered set). Нап░име░, о▓но╕ение
84
Глава 5 Множе▒▓ва
└б╗▓╝ по▓омком┴ на множе▒▓ве л╛дей ┐вл┐е▓▒┐ ╖а▒▓и╖н╗м по░┐дком, е▒ли м╗ ▒╖и▓аем ╖еловека ▒воим по▓омком.
Ча▒▓и╖но │по░┐до╖енное множе▒▓во, даже коне╖ное, може▓ не
име▓╝ наибол╝╕его ╜лемен▓а | ▓акого ╜лемен▓а x, ╖▓о yRx дл┐
л╛бого ╜лемен▓а y . След│е▓ ░азли╖а▓╝ пон┐▓и┐ наибол╝╕его и мак▒имал╝ного ╜лемен▓ов: ╜лемен▓ x наз╗вае▓▒┐ мак▒имал╝н╗м (maximal), е▒ли не ▒│╣е▒▓в│е▓ бол╝╕его ╜лемен▓а, ▓. е. е▒ли из xRy ▒лед│е▓ x = y . Нап░име░, ▒░еди не▒кол╝ки╡ ка░▓онн╗╡ ко░обок може▓ не б╗▓╝ наибол╝╕ей (в ко▓о░│╛ поме╣ае▓▒┐ л╛ба┐ д░│га┐),
но заведомо е▒▓╝ одна или не▒кол╝ко мак▒имал╝н╗╡ (ко▓о░╗е не
влеза╛▓ ни в одн│ д░│г│╛).
Ча▒▓и╖н╗й по░┐док наз╗вае▓▒┐ линейн╗м (total order, linear order), е▒ли дл┐ л╛б╗╡ ╜лемен▓ов a и b в╗полнено либо aRb, либо bRa
(или оба | ▓огда они ░авн╗ по ▒вой▒▓в│ ан▓и▒имме▓░и╖но▒▓и).
Нап░име░, о▓но╕ение └6┴на множе▒▓ве на▓│░ал╝н╗╡ ╖и▒ел ┐вл┐е▓▒┐ линейн╗м по░┐дком, а о▓но╕ение └б╗▓╝ по▓омком┴ на множе▒▓ве л╛дей | не▓ (можно най▓и дв│╡ ╖еловек, не ┐вл┐╛╣и╡▒┐
по▓омками д░│г д░│га).
Уп░ажнени┐
5.2-1 Доказа▓╝, ╖▓о о▓но╕ение └┴ на множе▒▓ве в▒е╡ подмноже▒▓в множе▒▓ва Z┐вл┐е▓▒┐ о▓но╕ением ╖а▒▓и╖ного, но не линейного по░┐дка.
Показа▓╝, ╖▓о дл┐ л╛бого положи▓ел╝ного n о▓но╕ение
a b (mod n) ┐вл┐е▓▒┐ о▓но╕ением ╜квивален▓но▒▓и на множе▒▓ве . (Гово░┐▓, ╖▓о a b (mod n), е▒ли ▒│╣е▒▓в│е▓ ╢елое q , дл┐
ко▓о░ого a;b = qn.) Скол╝ко кла▒▒ов ╜квивален▓но▒▓и е▒▓╝ │ ╜▓ого
5.2-2
Z
о▓но╕ени┐?
5.2-3 П░иведи▓е п░име░ о▓но╕ени┐, ко▓о░ое
а. ░е┤лек▒ивно и ▒имме▓░и╖но, но не ▓░анзи▓ивно;
б. ░е┤лек▒ивно и ▓░анзи▓ивно, но не ▒имме▓░и╖но;
в. ▒имме▓░и╖но и ▓░анзи▓ивно, но не ░е┤лек▒ивно.
5.2-4 П│▒▓╝ S | коне╖ное множе▒▓во, R | о▓но╕ение ╜квивален▓но▒▓и на S . Докажи▓е, ╖▓о е▒ли R ан▓и▒имме▓░и╖но, ╖▓о в▒е
кла▒▒╗ ╜квивален▓но▒▓и ▒оде░жа▓ по одном│ ╜лемен▓│.
5.2-5 П░о┤е▒▒о░ д│мае▓, ╖▓о в▒┐кое ▒имме▓░и╖ное и ▓░анзи▓ивное о▓но╕ение ░е┤лек▒ивно, и п░едлагае▓ ▓акое доказа▓ел╝▒▓во:
из aRb ▒лед│е▓ bRa по ▒имме▓░и╖но▒▓и, о▓к│да ▒лед│е▓ aRa по
▓░анзи▓ивно▒▓и. П░авил╝но ли ╜▓о доказа▓ел╝▒▓во?
Ф│нк╢ии
85
5.3. Ф│нк╢ии
П│▒▓╝ дан╗ два множе▒▓ва A и B . Ф│нк╢ией (function), о▓об░ажа╛╣ей A в B , наз╗вае▓▒┐ бина░ное о▓но╕ение f A B , облада╛╣ее ▓аким ▒вой▒▓вом: дл┐ каждого a 2 A ▒│╣е▒▓в│е▓ ░овно
одно b 2 B , дл┐ ко▓о░ого (a; b) 2 f . Множе▒▓во A наз╗вае▓▒┐ обла▒▓╝╛ оп░еделени┐ (domain) ┤│нк╢ии; дл┐ множе▒▓ва B в ░│▒▒ком
┐з╗ке не▓ об╣еп░ин┐▓ого названи┐, а по-англий▒ки оно наз╗вае▓▒┐
codomain.
Можно ▒каза▓╝, ╖▓о ┤│нк╢и┐ f ▒опо▒▓авл┐е▓ ▒ кажд╗м ╜лемен▓ом множе▒▓ва A неко▓о░╗й ╜лемен▓ множе▒▓ва B . Одном│ ╜лемен▓│ множе▒▓ва A може▓ ▒оо▓ве▓▒▓вова▓╝ ▓ол╝ко один ╜лемен▓
множе▒▓ва B , ╡о▓┐ один и ▓о▓ же ╜лемен▓ B може▓ ▒оо▓ве▓▒▓вова▓╝ не▒кол╝ким ░азли╖н╗м ╜лемен▓ам A. Нап░име░, бина░ное о▓но╕ение
f = f(a; b) : a 2 N и b = a mod 2g
можно ░а▒▒ма▓░ива▓╝ как ┤│нк╢и╛ f : N ! f0; 1g, по▒кол╝к│ дл┐
каждого на▓│░ал╝ного ╖и▒ла a ▒│╣е▒▓в│е▓ един▒▓венное b 2 f0; 1g,
░авное a mod 2. Можно запи▒а▓╝ f (0) = 0, f (1) = 1, f (2) = 0 и ▓ак
далее. С д░│гой ▒▓о░он╗, о▓но╕ение
g = f(a; b) : a; b 2 и a + b ╖е▓ноg
N
не ┐вл┐е▓▒┐ ┤│нк╢ией, по▒кол╝к│ (нап░име░) па░╗ (1; 3) и (1; 5),
п░инадлежа╣ие ╜▓ом│ о▓но╕ени╛, име╛▓ ░авн╗е пе░в╗е ╖лен╗,
но ░азн╗е в▓о░╗е.
Е▒ли па░а (a; b) п░инадлежи▓ о▓но╕ени╛ f , ┐вл┐╛╣ем│▒┐ ┤│нк╢ией, ▓о гово░┐▓, ╖▓о b ┐вл┐е▓▒┐ зна╖ением (value) ┤│нк╢ии дл┐
а░г│мен▓а (argument) a, и пи╕│▓ b = f (a). Ч▓об╗ зада▓╝ ┤│нк╢и╛, надо │каза▓╝ ее зна╖ение дл┐ каждого а░г│мен▓а, п░инадлежа╣его ее обла▒▓и оп░еделени┐. Нап░име░, можно зада▓╝ ┤│нк╢и╛
f : N ! N ┤о░м│лой f (n) = 2n, ко▓о░а┐ озна╖ае▓, ╖▓о f = f(n; 2n) :
n 2 Ng. Две ┤│нк╢ии f; g : A ! B ▒╖и▓а╛▓▒┐ ░авн╗ми (equal), е▒ли
f (a) = g(a) дл┐ в▒е╡ a 2 A. (Об░а▓и▓е внимание, ╖▓о ▒ ┤о░мал╝ной ▓о╖ки з░ени┐ м╗ ▒╖и▓аем ┤│нк╢ии f : A ! B1 и g : A ! B2
░азли╖н╗ми п░и B1 6= B2 , даже е▒ли f (a) = g (a) п░и в▒е╡ a!)
Коне╖ной по▒ледова▓ел╝но▒▓╝╛ (nite sequence) длин╗ n наз╗ва╛▓ ┤│нк╢и╛ f , обла▒▓╝ оп░еделени┐ ко▓о░ой е▒▓╝ множе▒▓во
f0; 1; 2; : : :; n;1g. Коне╖н│╛ по▒ледова▓ел╝но▒▓╝ ╖а▒▓о запи▒╗ва╛▓
как ▒пи▒ок ее зна╖ений, ▓. е. как hf (0); f (1); : : :; f (n ; 1)i. Бе▒коне╖ной по▒ледова▓ел╝но▒▓╝╛ (innite sequence) наз╗вае▓▒┐ ┤│нк╢и┐,
обла▒▓╝╛ оп░еделени┐ ко▓о░ой ┐вл┐е▓▒┐ множе▒▓во N на▓│░ал╝н╗╡
╖и▒ел. Нап░име░, по▒ледова▓ел╝но▒▓╝ Фибона╖╖и, заданна┐ │░авнением (2.13), може▓ б╗▓╝ запи▒ана как h0; 1; 1; 2; 3; 5; 8; 13; 21; : : : i.
86
Глава 5 Множе▒▓ва
Е▒ли обла▒▓╝ оп░еделени┐ ┤│нк╢ии ┐вл┐е▓▒┐ дека░▓ов╗м п░оизведением не▒кол╝ки╡ множе▒▓ва, м╗ об╗╖но оп│▒каем дополни▓ел╝н╗е ▒кобки вок░│г а░г│мен▓ов. Нап░име░, е▒ли f : A1 A2 : : : An ! B , м╗ пи╕ем f (a1; a2; : : :; an) вме▒▓о более ┤о░мал╝ного
f ((a1; a2; : : : ; an)). Каждое из ai ▓акже наз╗вае▓▒┐ а░г│мен▓ом (argument) ┤│нк╢ии f , ╡о▓┐ ┤о░мал╝но ее а░г│мен▓ов ▒ледовало б╗
▒╖и▓а▓╝ n-к│ (a1; a2; : : :; an ).
Е▒ли b = f (a) дл┐ неко▓о░ой ┤│нк╢ии f : A ! B и неко▓о░╗╡
a 2 A, b 2 B , ▓о ╜лемен▓ b наз╗ва╛▓ об░азом (image) ╜лемен▓а a.
Дл┐ п░оизвол╝ного подмноже▒▓ва A0 множе▒▓ва A его об░аз f (A0)
оп░едел┐╛▓ ┤о░м│лой
f (A0) = fb 2 B : b = f (a)дл┐ неко▓о░ого a 2 A0 g:
Множе▒▓во зна╖ений (range) ┤│нк╢ии f оп░едел┐е▓▒┐ как об░аз
обла▒▓и ее оп░еделени┐, ▓. е. как f (A). Нап░име░, множе▒▓во зна╖ений ┤│нк╢ии f : ! , оп░еделенной ┤о░м│лой f (n) = 2n, е▒▓╝
N
N
множе▒▓во в▒е╡ ╖е▓н╗╡ на▓│░ал╝н╗╡ ╖и▒ел, ко▓о░ое можно запи▒а▓╝ как f (N) = fm : m = 2n дл┐ неко▓о░ого n 2 Ng.
Ф│нк╢и┐ f : A ! B наз╗вае▓▒┐ ▒╛░║ек╢ией (surjection), или наложением, е▒ли ее об░аз ▒овпадае▓ ▒ множе▒▓вом B , ▓. е. в▒┐кий
╜лемен▓ b 2 B ┐вл┐е▓▒┐ об░азом неко▓о░ого ╜лемен▓а a 2 A. Нап░име░, ┤│нк╢и┐ f : N ! N, заданна┐ ┤о░м│лой f (n) = bn=2c, ┐вл┐е▓▒┐ ▒╛░║ек╢ией. Ф│нк╢и┐ f (n) = 2n не б│де▓ ▒╛░║ек╢ией, е▒ли
▒╖и▓а▓╝, ╖▓о f : N ! N, но б│де▓ ▓аковой, е▒ли ▒╖и▓а▓╝ ее о▓об░ажа╛╣ей множе▒▓во на▓│░ал╝н╗╡ ╖и▒ел в множе▒▓во ╖е▓н╗╡ на▓│░ал╝н╗╡ ╖и▒ел. Ф│нк╢и╛ f : A ! B , ┐вл┐╛╣│╛▒┐ ▒╛░║ек╢ией,
наз╗ва╛▓ ▓акже о▓об░ажением A на B (onto B ).
Ф│нк╢и┐ f : A ! B наз╗вае▓▒┐ ин║ек╢ией (injection), или вложением, е▒ли ░азли╖н╗м а░г│мен▓ам ▒оо▓ве▓▒▓в│╛▓ ░азли╖н╗е
зна╖ени┐, ▓. е. е▒ли f (a) 6= f (a0) п░и a 6= a0. Нап░име░, ┤│нк╢и┐
f (n) = 2n ┐вл┐е▓▒┐ ин║ек╢ией множе▒▓ва N в множе▒▓во N, по▒кол╝к│ л╛бое ╖и▒ло n ┐вл┐е▓▒┐ об░азом ▒амое бол╝╕ее одного
╜лемен▓а (n=2, е▒ли n ╖е▓но; не╖е▓н╗е ╖и▒ла не ┐вл┐╛▓▒┐ об░азами
никаки╡ ╜лемен▓ов). Ф│нк╢и┐ f (n) = bn=2c не ┐вл┐е▓▒┐ ин║ек╢ией,
▓ак как (нап░име░) f (2) = f (3) = 1. В англий▒кой ли▓е░а▓│░е дл┐
ин║ек╢ий │по▓░ебл┐е▓▒┐ ▓акже ▓е░мин └one-to-one function┴.
Ф│нк╢и┐ f : A ! B наз╗вае▓▒┐ биек╢ией (bijection), е▒ли она однов░еменно ┐вл┐е▓▒┐ ин║ек╢ией и ▒╛░║ек╢ией. Нап░име░, ┤│нк╢и┐
f (n) = (;1)n dn=2e, ░а▒▒ма▓░иваема┐ как ┤│нк╢и┐, о▓об░ажа╛╣а┐
Ф│нк╢ии
N
87
в Z, ┐вл┐е▓▒┐ биек╢ией:
0! 0
1 ! ;1
2! 1
3 ! ;2
4! 2
..
.
Ин║ек▓ивно▒▓╝ озна╖ае▓, ╖▓о никакой ╜лемен▓ множе▒▓ва Z не
┐вл┐е▓▒┐ об░азом дв│╡ ░азн╗╡ ╜лемен▓ов множе▒▓ва N. С╛░║ек▓ивно▒▓╝ озна╖ае▓, ╖▓о в▒┐кий ╜лемен▓ множе▒▓ва Z┐вл┐е▓▒┐ об░азом ╡о▓┐ б╗ одного ╜лемен▓а множе▒▓ва N. Биек╢ии наз╗ва╛▓ ▓акже взаимно однозна╖н╗ми ▒оо▓ве▓▒▓ви┐ми (one-to-one correspondence), по▒кол╝к│ они │▒▓анавлива╛▓ ▒оо▓ве▓▒▓ви┐ межд│ ╜лемен▓ами множе▒▓в A и B . Биек▓ивна┐ ┤│нк╢и┐, о▓об░ажа╛╣а┐ множе▒▓во A в ▒еб┐, наз╗вае▓▒┐ пе░е▒▓ановкой (permutation) множе▒▓ва A.
Е▒ли ┤│нк╢и┐ f биек▓ивна, можно оп░едели▓╝ об░а▓н│╛ (inverse)
┤│нк╢и╛ f ;1 ▒оо▓но╕ением
f ;1 (b) = a ▓огда и ▓ол╝ко ▓огда, когда f (a) = b:
Нап░име░, дл┐ ░а▒▒мо▓░енной в╗╕е ┤│нк╢ии f (n) = (;1)n dn=2e
об░а▓на┐ ┤│нк╢и┐ в╗╖и▒л┐е▓▒┐ по ┤о░м│ле
f ;1 (m) =
(
2m;
е▒ли m > 0,
;2m ; 1; е▒ли m < 0.
Уп░ажнени┐
5.3-1 П│▒▓╝ A и B | коне╖н╗е множе▒▓ва, и f : A ! B | неко▓о░а┐ ┤│нк╢и┐. Покажи▓е, ╖▓о
а. е▒ли f | ин║ек╢и┐, ▓о jAj 6 jB j;
б. е▒ли f | ▒╛░║ек╢и┐, ▓о jAj > jB j.
5.3-2 Б│де▓ ли биек╢ией ┤│нк╢и┐ f : N ! N, заданна┐ ┤о░м│лой
f (x) = x + 1? То▓ же воп░о▒ дл┐ ┤│нк╢ии Z! Z, заданной ▓ой же
┤о░м│лой.
5.3-3 Дай▓е оп░еделение об░а▓ного к бина░ном│ о▓но╕ени╛.
(Е▒ли о▓но╕ение ┐вл┐е▓▒┐ биек╢ией, ▓о оп░еделение должно дава▓╝
об░а▓н│╛ биек╢и╛ в опи▒анном в╗╕е ▒м╗▒ле.)
5.3-4? По▒▓░ой▓е биек╢и╛ f : Z! Z Z.
88
Глава 5 Множе▒▓ва
5.2 О░иен▓и░ованн╗е
и нео░иен▓и░ованн╗е г░а┤╗. (а) О░иен▓и░ованн╗й г░а┤ (V; E ), где V
= f1; 2; 3; 4; 5; 6g и E =
f(1; 2); (2; 2); (2; 4); (2; 5); (4; 1); (4; 5); (5; 4); (6; 3)g. Реб░о (2; 2) ┐вл┐е▓▒┐ ░еб░ом╢иклом. (б) Нео░иен▓и░ованн╗й г░а┤ G = (V; E ), где V = f1; 2; 3; 4; 5; 6g и
E = f(1; 2); (1; 5); (2; 5); (3; 6)g. Ве░╕ина 4 ┐вл┐е▓▒┐ изоли░ованной (не имее▓
▒межн╗╡ ве░╕ин). (в) Подг░а┤ г░а┤а (а), пол│╖а╛╣ий▒┐ его ог░ани╖ением на
множе▒▓во ве░╕ин f1; 2; 3; 6g.
Ри▒.
5.4. Г░а┤╗
В ╜▓ом ░азделе м╗ ░а▒▒мо▓░им о▒новн╗е пон┐▓и┐, ▒в┐занн╗е
▒ о░иен▓и░ованн╗ми и нео░иен▓и░ованн╗ми г░а┤ами. След│е▓
име▓╝ в вид│, ╖▓о ▓е░минологи┐ зде▒╝ не вполне │▒▓о┐ла▒╝ и в ░азн╗╡ книга╡ можно в▒▓░е▓и▓╝ ░азн╗е оп░еделени┐, но по бол╝╕ей
╖а▒▓и ░азли╖и┐ невелики. М╗ ве░нем▒┐ к г░а┤ам в главе 23, где
░а▒▒ма▓░ива╛▓▒┐ ░азли╖н╗е алго░и▓м╗ на г░а┤а╡.
О░иен▓и░ованн╗й г░а┤ (directed graph) оп░едел┐е▓▒┐ как па░а
(V; E ), где V | коне╖ное множе▒▓во, а E | бина░ное о▓но╕ение на V , ▓. е. подмноже▒▓во множе▒▓ва V V . О░иен▓и░ованн╗й
г░а┤ иногда дл┐ к░а▓ко▒▓и наз╗ва╛▓ о░г░а┤ом (digraph). Множе▒▓во V наз╗ва╛▓ множе▒▓вом ве░╕ин г░а┤а (vertex set); его
╜лемен▓ наз╗ва╛▓ ве░╕иной г░а┤а (vertex; множе▒▓венное ╖и▒ло
vertices). Множе▒▓во E наз╗ва╛▓ множе▒▓вом ░ебе░ (edge set) г░а┤а; его ╜лемен▓╗ наз╗ва╛▓ ░еб░ами (edges). На ░и▒│нке 5.2 (а) показан о░иен▓и░ованн╗й г░а┤ ▒ множе▒▓вом ве░╕ин f1; 2; 3; 4; 5; 6g.
Ве░╕ин╗ изоб░ажен╗ к░│жками, а ░еб░а | ▒▓░елками. Заме▓им,
╖▓о г░а┤ може▓ ▒оде░жа▓╝ ░еб░а-╢икл╗ (self-loops), ▒оедин┐╛╣ие
ве░╕ин│ ▒ ▒обой.
В нео░иен▓и░ованном (undirected) г░а┤е G = (V; E ) множе▒▓во
░ебе░ (V ) ▒о▒▓ои▓ из не│по░┐до╖енн╗╡ (unordered) па░ ве░╕ин:
па░ами ┐вл┐╛▓▒┐ множе▒▓ва fu; v g, где u; v 2 V и u 6= v . М╗ б│дем обозна╖а▓╝ нео░иен▓и░ованное ░еб░о как (u; v ) вме▒▓о fu; v g;
п░и ╜▓ом дл┐ нео░иен▓и░ованного г░а┤а (u; v ) и (v; u) обозна╖а╛▓
одно и ▓о же ░еб░о. Нео░иен▓и░ованн╗й г░а┤ не може▓ ▒оде░жа▓╝ ░ебе░-╢иклов, и каждое ░еб░о ▒о▒▓ои▓ из дв│╡ ░азли╖н╗╡
ве░╕ин (└▒оедин┐┐┴ и╡). На ░и▒. 5.2 (б) изоб░ажен нео░иен▓и░ованн╗й г░а┤ ▒ множе▒▓вом ве░╕ин f1; 2; 3; 4; 5; 6g.
Г░а┤╗
89
Многие пон┐▓и┐ па░аллел╝но оп░едел┐╛▓▒┐ дл┐ о░иен▓и░ованн╗╡ и нео░иен▓и░ованн╗╡ г░а┤ов (▒ ▒оо▓ве▓▒▓в│╛╣ими изменени┐ми). П░о ░еб░о (u; v ) о░иен▓и░ованного г░а┤а гово░┐▓, ╖▓о оно
в╗╡оди▓ из (incident from, leaves) ве░╕ин╗ u и в╡оди▓ (incident to,
enters) в ве░╕ин│ v . Нап░име░, на ░и▒. 5.2 (а) имее▓▒┐ ▓░и ░еб░а,
в╗╡од┐╣и╡ из ве░╕ин╗ 2 ((2; 2); (2; 4); (2; 5)) и два ░еб░а, в нее
в╡од┐╣и╡ ((1; 2); (2; 2)). П░о ░еб░о (u; v ) нео░иен▓и░ованного г░а┤а гово░┐▓, ╖▓о оно ин╢иден▓но ве░╕инам (incident on vertices) u и
v. Нап░име░, на ░и▒. 2.5 (б) е▒▓╝ два ░еб░а, ин╢иден▓н╗е ве░╕ине 2
(░еб░а (1; 2) и (2; 5)).
Е▒ли в г░а┤е G имее▓▒┐ ░еб░о (u; v ), гово░┐▓, ╖▓о ве░╕ина v
▒межна ▒ ве░╕иной u (is adjacent to u). Дл┐ нео░иен▓и░ованн╗╡
г░а┤ов о▓но╕ение ▒межно▒▓и ┐вл┐е▓▒┐ ▒имме▓░и╖н╗м, но дл┐ о░иен▓и░ованн╗╡ г░а┤ов ╜▓о не об┐за▓ел╝но. Е▒ли ве░╕ина v ▒межна
▒ ве░╕иной u в о░иен▓и░ованном г░а┤е, пи╕│▓ u ! v . Дл┐ обои╡
░и▒│нков 5.2 (а) и 5.2 (б) ве░╕ина 2 ┐вл┐е▓▒┐ ▒межной ▒ ве░╕иной 1, но ли╕╝ во в▓о░ом из ни╡ ве░╕ина 1 ▒межна ▒ ве░╕иной 2
(в пе░вом ▒л│╖ае ░еб░о (2; 1) о▓▒│▓▒▓в│е▓ в г░а┤е).
С▓епен╝╛ (degree) ве░╕ин╗ в нео░иен▓и░ованном г░а┤е наз╗вае▓▒┐ ╖и▒ло ин╢иден▓н╗╡ ей ░ебе░. Нап░име░, дл┐ г░а┤а ░и▒. 5.2 (б)
▒▓епен╝ ве░╕ин╗ 2 ░авна 2. Дл┐ о░иен▓и░ованного г░а┤а ░азли╖а╛▓ и▒╡од┐╣│╛ ▒▓епен╝ (out-degree), оп░едел┐ем│╛ как ╖и▒ло в╗╡од┐╣и╡ из нее ░ебе░, и в╡од┐╣│╛ ▒▓епен╝ (in-degree), оп░едел┐ем│╛
как ╖и▒ло в╡од┐╣и╡ в нее ░ебе░. С│мма и▒╡од┐╣ей и в╡од┐╣ей ▒▓епеней наз╗вае▓▒┐ ▒▓епен╝╛ (degree) ве░╕ин╗. Нап░име░, ве░╕ина 2 в г░а┤е ░и▒. 5.2 (а) имее▓ в╡од┐╣│╛ ▒▓епен╝ 2, и▒╡од┐╣│╛
▒▓епен╝ 3 и ▒▓епен╝ 5.
П│▓╝ длин╗ k (path of length k) из ве░╕ин╗ u в ве░╕ин│ v оп░едел┐е▓▒┐ как по▒ледова▓ел╝но▒▓╝ ве░╕ин hv0 ; v1; v2; : : :; vk i, в ко▓о░ой
v0 = u, vk = v и (vi;1 ; vi) 2 E дл┐ в▒е╡ i = 1; 2; : : :; k. Таким об░азом, п│▓╝ длин╗ k ▒о▒▓ои▓ из k ░ебе░. Э▓о▓ п│▓╝ ▒оде░жи▓ (contains) ве░╕ин╗ v0 ; v1; : : :; vk и ░еб░а (v0 ; v1); (v1; v2); : : :; (vk;1; vk ).
Ве░╕ин│ v0 наз╗ва╛▓ на╖алом п│▓и, ве░╕ин│ vk | его кон╢ом;
гово░┐▓, ╖▓о п│▓╝ веде▓ из v0 в vk . Е▒ли дл┐ данн╗╡ ве░╕ин u и u0
▒│╣е▒▓в│е▓ п│▓╝ p из u в u0 , ▓о гово░┐▓, ╖▓о ве░╕ина u0 до▒▓ижима из u по п│▓и p (u0 is reachable from u via p). В ╜▓ом ▒л│╖ае м╗
пи╕ем (дл┐ о░иен▓и░ованн╗╡ г░а┤ов) u p u0 .
П│▓╝ наз╗вае▓▒┐ п░о▒▓╗м (simple), е▒ли в▒е ве░╕ин╗ в нем ░азли╖н╗. Нап░име░, на ░и▒. 5.2 (а) е▒▓╝ п░о▒▓ой п│▓╝ h1; 2; 5; 4i длин╗ 3, а ▓акже п│▓╝ h2; 5; 4; 5i ▓ой же длин╗, не ┐вл┐╛╣ий▒┐ п░о▒▓╗м.
Подп│▓╝ (subpath) п│▓и p = hv0; v1; : : :; vk i пол│╖и▓▒┐, е▒ли м╗
воз╝мем неко▓о░ое ╖и▒ло ид│╣и╡ под░┐д ве░╕ин ╜▓ого п│▓и, ▓. е.
по▒ледова▓ел╝но▒▓╝ hvi ; vi+1; : : :; vj i п░и неко▓о░╗╡ i; j , дл┐ ко▓о░╗╡ 0 6 i 6 j 6 k.
90
Глава 5 Множе▒▓ва
Циклом (cycle) в о░иен▓и░ованном г░а┤е наз╗вае▓▒┐ п│▓╝, в ко▓о░ом на╖ал╝на┐ ве░╕ина ▒овпадае▓ ▒ коне╖ной и ко▓о░╗й ▒оде░жи▓ ╡о▓┐ б╗ одно ░еб░о. Цикл hv0 ; v1; : : :; vk i наз╗вае▓▒┐ п░о▒▓╗м,
е▒ли в нем не▓ одинаков╗╡ ве░╕ин (к░оме пе░вой и по▒ледней),
▓. е. е▒ли в▒е ве░╕ин╗ v1 ; v2; : : :; vk ░азли╖н╗. Реб░о-╢икл ┐вл┐е▓▒┐
╢иклом длин╗ 1. М╗ о▓ожде▒▓вл┐ем ╢икл╗, о▓ли╖а╛╣ие▒┐ ▒двигом вдол╝ ╢икла: один и ▓о▓ же ╢икл длин╗ k може▓ б╗▓╝ п░ед▒▓авлен k ░азли╖н╗ми п│▓┐ми (в ка╖е▒▓ве на╖ала и кон╢а можно
вз┐▓╝ л╛б│╛ из k ве░╕ин). Нап░име░, на ░и▒. 5.2 (а) п│▓и h1; 2; 4; 1i,
h2; 4; 1; 2i и h4; 1; 2; 4i п░ед▒▓авл┐╛▓ один и ▓о▓ же ╢икл. Э▓о▓ ╢икл
┐вл┐е▓▒┐ п░о▒▓╗м, в ▓о в░ем┐ как ╢икл h1; 2; 4; 5; 4; 1i ▓аков╗м не
┐вл┐е▓▒┐. На ▓ом же ░и▒│нке е▒▓╝ ╢икл h2; 2i, об░азованн╗й един▒▓венн╗м ░еб░ом-╢иклом (2; 2). О░иен▓и░ованн╗й г░а┤, не ▒оде░жа╣ий ░ебе░-╢иклов, наз╗вае▓▒┐ п░о▒▓╗м (simple).
В нео░иен▓и░ованном г░а┤е п│▓╝ hv0; v1; : : :; vk i наз╗вае▓▒┐ (п░о▒▓╗м) ╢иклом, е▒ли k > 3, v0 = vk и в▒е ве░╕ин╗
v1 ; v2; : : :; vk ░азли╖н╗. Нап░име░, на ░и▒. 5.2 (б) имее▓▒┐ п░о▒▓ой ╢икл h1; 2; 5; 1i.
Г░а┤, в ко▓о░ом не▓ ╢иклов, наз╗вае▓▒┐ а╢икли╖е▒ким (acyclic).
Нео░иен▓и░ованн╗й г░а┤ наз╗вае▓▒┐ ▒в┐зн╗м (connected), е▒ли дл┐ л╛бой па░╗ ве░╕ин ▒│╣е▒▓в│е▓ п│▓╝ из одной в д░│г│╛. Дл┐ нео░иен▓и░ованного г░а┤а о▓но╕ение └б╗▓╝ до▒▓ижим╗м из┴ ┐вл┐е▓▒┐ о▓но╕ением ╜квивален▓но▒▓и на множе▒▓ве ве░╕ин. Кла▒▒╗ ╜квивален▓но▒▓и наз╗ва╛▓▒┐ ▒в┐зн╗ми компонен▓ами (connected components) г░а┤а. Нап░име░, на ░и▒. 5.2 (б) име╛▓▒┐ ▓░и ▒в┐зн╗е компонен▓╗: f1; 2; 5g, f3; 6g и f4g. Нео░иен▓и░ованн╗й г░а┤ ▒в┐зен ▓огда и ▓ол╝ко ▓огда, когда он ▒о▒▓ои▓ из
един▒▓венной ▒в┐зной компонен▓╗.
О░иен▓и░ованн╗й г░а┤ наз╗вае▓▒┐ ▒ил╝но ▒в┐зн╗м (strongly
connected), е▒ли из л╛бой его ве░╕ин╗ до▒▓ижима (по о░иен▓и░ованн╗м п│▓┐м) л╛ба┐ д░│га┐. Л╛бой о░иен▓и░ованн╗й г░а┤ можно ░азби▓╝ на ▒ил╝но ▒в┐зн╗е компонен▓╗ (strongly connected components), ко▓о░╗е оп░едел┐╛▓▒┐ как кла▒▒╗ ╜квивален▓но▒▓и о▓но╕ени┐ └u до▒▓ижимо из v и v до▒▓ижимо из u┴. О░иен▓и░ованн╗й
г░а┤ ▒ил╝но ▒в┐зен ▓огда и ▓ол╝ко ▓огда, когда ▒о▒▓ои▓ из един▒▓венной ▒ил╝но ▒в┐зной компонен▓╗. Г░а┤ ░и▒. 5.2 (а) имее▓ ▓░и
▓аки╡ компонен▓╗: f1; 2; 4; 5g, f3g и f6g. Заме▓им, ╖▓о ве░╕ин╗
f3; 6g не в╡од┐▓ в одн│ ▒ил╝но ▒в┐зн│╛ компонен▓│, ▓ак как 3 до▒▓ижима из 6, но не наобо░о▓.
Два г░а┤а G = (V; E ) и G0 = (V 0 ; E 0) наз╗ва╛▓▒┐ изомо░┤н╗ми
(isomorphic), е▒ли ▒│╣е▒▓в│е▓ взаимно однозна╖ное ▒оо▓ве▓▒▓вие
f : V ! V 0 межд│ множе▒▓вами и╡ ве░╕ин, п░и ко▓о░ом ░еб░ам
одного г░а┤а ▒оо▓ве▓▒▓в│╛▓ ░еб░а д░│гого: (u; v ) 2 E ▓огда и
▓ол╝ко ▓огда, когда (f (u); f (v )) 2 E 0. Можно ▒каза▓╝, ╖▓о изомо░┤н╗е г░а┤╗ | ╜▓о один и ▓о▓ же г░а┤, в ко▓о░ом ве░╕ин╗
назван╗ по-░азном│. На ░и▒. 5.3 (а) п░иведен п░име░ дв│╡ изо-
Г░а┤╗
91
(а) Па░а изомо░┤н╗╡ г░а┤ов. (б) Неизомо░┤н╗е г░а┤╗: ве░╡ний имее▓ ве░╕ин│ ▒▓епени 4, а нижний | не▓.
Ри▒. 5.3
мо░┤н╗╡ г░а┤ов G и G0 ▒ множе▒▓вами ве░╕ин V = f1; 2; 3; 4; 5; 6g
и V 0 = fu; v; w; x; y; z g. Ф│нк╢и┐ f : V ! V 0 , дл┐ ко▓о░ой f (1) = u,
f (2) = v , f (3) = w, f (4) = x, f (5) = y , f (6) = z, ┐вл┐е▓▒┐ изомо░┤измом. Нап░о▓ив, г░а┤╗ на ░и▒. 5.3 (б) не изомо░┤н╗, ╡о▓┐ оба
име╛▓ по 5 ве░╕ин и по 7 ░ебе░. Ч▓об╗ │беди▓╝▒┐, ╖▓о они не изомо░┤н╗, до▒▓а▓о╖но о▓ме▓и▓╝, ╖▓о в ве░╡нем г░а┤е е▒▓╝ ве░╕ина
▒▓епени 4, а в нижнем | не▓.
Г░а┤ G0 = (E 0; V 0 ) наз╗ва╛▓ подг░а┤ом (subgraph) г░а┤а G =
(E; V ), е▒ли E 0 E и V 0 V . Е▒ли в г░а┤е G = (E; V ) в╗б░а▓╝
п░оизвол╝ное множе▒▓во ве░╕ин V 0 , ▓о можно ░а▒▒мо▓░е▓╝ его
подг░а┤, ▒о▒▓о┐╣ий из ╜▓и╡ ве░╕ин и в▒е╡ ▒оедин┐╛╣и╡ и╡ ░ебе░,
▓. е. г░а┤ G0 = (E 0; V 0 ), дл┐ ко▓о░ого
E 0 = f(u; v ) 2 E : u; v 2 V 0 g
Э▓о▓ подг░а┤ можно назва▓╝ ог░ани╖ением г░а┤а G на множе▒▓во ве░╕ин V 0 (subgraph of G induced by V 0 ). Ог░ани╖ение г░а┤а
░и▒. 5.2 (а) на множе▒▓во ве░╕ин f1; 2; 3; 6g показано на ░и▒. 5.2 (в)
и имее▓ ▓░и ░еб░а (1; 2), (2; 2), (6; 3).
Дл┐ л╛бого нео░иен▓и░ованного г░а┤а G можно ░а▒▒мо▓░е▓╝
его о░иен▓и░ованн╗й ва░иан▓ (directed version), заменив каждое
нео░иен▓и░ованное ░еб░о fu; v g на па░│ о░иен▓и░ованн╗╡ ░ебе░
(u; v ) и (v; u), ид│╣и╡ в п░о▓ивоположн╗╡ нап░авлени┐╡. С д░│гой ▒▓о░он╗, дл┐ каждого о░иен▓и░ованного г░а┤а можно ░а▒▒мо▓░е▓╝ его нео░иен▓и░ованн╗й ва░иан▓ (undirected version), заб╗в
п░о о░иен▓а╢и╛ ░ебе░, │далив ░еб░а-╢икл╗ и ▒оединив ░еб░а (u; v )
и (v; u) в одно нео░иен▓и░ованное ░еб░о fu; v g. В о░иен▓и░ованном
г░а┤е ▒о▒едом (neighbor) ве░╕ин╗ u наз╗ва╛▓ л╛б│╛ ве░╕ин│, ▒оединенн│╛ ▒ ней ░еб░ом (в ▓│ или д░│г│╛ ▒▓о░он│); ▓аким об░азом,
v ┐вл┐е▓▒┐ ▒о▒едом u ▓огда и ▓ол╝ко ▓огда, когда v ▒межно u или
92
Глава 5 Множе▒▓ва
u ▒межно v. Дл┐ нео░иен▓и░ованного г░а┤а в╗░ажени┐ └v | ▒о▒ед
u┴ и └v ▒межна ▒ u┴ ┐вл┐╛▓▒┐ ▒инонимами.
Неко▓о░╗е вид╗ г░а┤ов име╛▓ ▒пе╢иал╝н╗е названи┐. Полн╗м
(complete) г░а┤ом наз╗ва╛▓ нео░иен▓и░ованн╗й г░а┤, ▒оде░жа╣ий в▒е возможн╗е ░еб░а дл┐ данного множе▒▓ва ве░╕ин (л╛ба┐
ве░╕ина ▒межна л╛бой д░│гой). Нео░иен▓и░ованн╗й г░а┤ (V; E )
наз╗ва╛▓ дв│дол╝н╗м (bipartite), е▒ли множе▒▓во ве░╕ин V можно ░азби▓╝ на две ╖а▒▓╝ V1 и V2 ▓аким об░азом, ╖▓о кон╢╗ л╛бого ░еб░а оказ╗ва╛▓▒┐ в ░азн╗╡ ╖а▒▓┐╡. А╢икли╖е▒кий нео░иен▓и░ованн╗й г░а┤ наз╗ва╛▓ ле▒ом (forest), а ▒в┐зн╗й а╢икли╖е▒кий нео░иен▓и░ованн╗й г░а┤ наз╗ва╛▓ де░евом (без в╗деленного ко░н┐; под░обно де░ев╝┐ ░а▒▒ма▓░ива╛▓▒┐ в ▒лед│╛╣ем ░азделе). По-англий▒ки де░ево без в╗деленного ко░н┐ наз╗вае▓▒┐ free
tree. О░иен▓и░ованн╗й а╢икли╖е▒кий г░а┤ (directed acyclic graph)
по-англий▒ки ╖а▒▓о ▒ок░а╣а╛▓ до └dag┴ (по пе░в╗м б│квам).
Иногда ░а▒▒ма▓░ива╛▓ обоб╣ени┐ пон┐▓и┐ г░а┤а. Нап░име░,
можно ░а▒▒ма▓░ива▓╝ м│л╝▓иг░а┤ (multigraph), ко▓о░╗й по╡ож на
нео░иен▓и░ованн╗й г░а┤, но може▓ ▒оде░жа▓╝ много ░ебе░, ▒оедин┐╛╣и╡ одн│ и ▓│ же па░│ ве░╕ин, а ▓акже ░еб░а-╢икл╗. Гипе░г░а┤ (hypergraph) о▓ли╖ае▓▒┐ о▓ нео░иен▓и░ованного г░а┤а ▓ем,
╖▓о он ▒оде░жи▓ гипе░░еб░а (hyperedges), ▒оедин┐╛╣ие не две ве░╕ин╗, а п░оизвол╝ное множе▒▓во ве░╕ин. Многие алго░и▓м╗ об░або▓ки об╗╖н╗╡ г░а┤ов мог│▓ б╗▓╝ обоб╣ен╗ на ▓акие г░а┤оподобн╗е ▒▓░│к▓│░╗.
Уп░ажнени┐
5.4-1 На ве╖е░инке кажд╗й го▒▓╝ ▒╖и▓ае▓, ▒кол╝ко ░│копожа▓ий он ▒делал. По▓ом в▒е ╖и▒ла ▒клад╗ва╛▓▒┐. Покажи▓е, ╖▓о пол│╖и▓▒┐ ╖е▓ное ╖и▒ло, доказав ▒лед│╛╣│╛ лемм│ о ░│копожа▓и┐╡
(handshaking lemma): дл┐ нео░иен▓и░ованного г░а┤а ▒│мма ▒▓епеней в▒е╡ его ве░╕ин ░авна │двоенном│ ╖и▒л│ ░ебе░.
5.4-2 Покажи▓е, ╖▓о ▓░ебование k > 3 в оп░еделении ╢икла в нео░иен▓и░ованном г░а┤е ▒│╣е▒▓венно (е▒ли его о▓мени▓╝, в л╛бом
г░а┤е, где е▒▓╝ ╡о▓╝ одно ░еб░о, б│де▓ ╢икл).
5.4-3 Докажи▓е, ╖▓о е▒ли в г░а┤е (о░иен▓и░ованном или нео░иен▓и░ованном) е▒▓╝ п│▓╝ из ве░╕ин╗ u в ве░╕ин│ v , ▓о в нем е▒▓╝
п░о▒▓ой п│▓╝ из u в v . Докажи▓е, ╖▓о е▒ли в о░иен▓и░ованном
г░а┤е е▒▓╝ ╢икл, ▓о в нем е▒▓╝ п░о▒▓ой ╢икл.
5.4-4 Покажи▓е, ╖▓о в ▒в┐зном нео░иен▓и░ованном г░а┤е (V; E )
╖и▒ло ве░╕ин п░ево▒╡оди▓ ╖и▒ло ░ебе░ не более ╖ем на 1: jE j >
jV j ; 1
Де░ев╝┐
93
5.4-5 П░ове░╝▓е, ╖▓о о▓но╕ение └б╗▓╝ до▒▓ижим╗м из┴ ┐вл┐е▓▒┐ (дл┐ нео░иен▓и░ованного г░а┤а) о▓но╕ением ╜квивален▓но▒▓и.
Какие из ▓░е╡ ▒вой▒▓в, в╡од┐╣и╡ в оп░еделение о▓но╕ени┐ ╜квивален▓но▒▓и, ▒п░аведлив╗ дл┐ о▓но╕ени┐ до▒▓ижимо▒▓и в о░иен▓и░ованном г░а┤е?
5.4-6 На░и▒│й▓е нео░иен▓и░ованн│╛ ве░▒и╛ г░а┤а ░и▒. 5.2 (а) и
о░иен▓и░ованн│╛ ве░▒и╛ г░а┤а ░и▒. 5.2 (б).
5.4-7? Как можно п░ед▒▓ави▓╝ гипе░г░а┤ ▒ помо╣╝╛ дв│дол╝ного г░а┤а, изоб░ажа┐ о▓но╕ение ин╢иден▓но▒▓и в гипе░г░а┤е о▓но╕ением ▒межно▒▓и в дв│дол╝ном г░а┤е? (Указание: ве░╕инами
дв│дол╝ного г░а┤а должн╗ б╗▓╝ ве░╕ин╗ гипе░г░а┤а, а ▓акже
гипе░░еб░а гипе░г░а┤а.)
5.5. Де░ев╝┐
Как и ▒лово └г░а┤┴, ▒лово └де░ево┴ ▓акже │по▓░ебл┐е▓▒┐ в не▒кол╝ки╡ ░од▒▓венн╗╡ ▒м╗▒ла╡. В ╜▓ом ░азделе м╗ даем оп░еделени┐ и ░а▒▒ма▓░иваем ▒вой▒▓ва не▒кол╝ки╡ видов де░ев╝ев. В ░аздела╡ 11.4 и 23.1 м╗ ве░нем▒┐ к де░ев╝┐м и ░а▒▒мо▓░им ▒по▒об╗
и╡ п░ед▒▓авлени┐ в п░ог░амма╡.
5.5.1. Де░ев╝┐ без в╗деленного ко░н┐
Как м╗ гово░или в ░азделе 5.4, де░ево (без в╗деленного ко░н┐,
free tree) оп░едел┐е▓▒┐ как ▒в┐зн╗й а╢икли╖е▒кий нео░иен▓и░ованн╗й г░а┤. Е▒ли нео░иен▓и░ованн╗й г░а┤ ┐вл┐е▓▒┐ а╢икли╖е▒ким,
но (возможно) не▒в┐зн╗м, его наз╗ва╛▓ ле▒ом (forest); как и положено, ле▒ ▒о▒▓ои▓ из де░ев╝ев (┐вл┐╛╣и╡▒┐ его ▒в┐зн╗ми компонен▓ами). Многие алго░и▓м╗ об░або▓ки де░ев╝ев п░именим╗ и к
ле▒ам. На ░и▒. 5.4 (а) изоб░ажено де░ево; на ░и▒. 5.4 (б) изоб░ажен
ле▒. Ле▒ ░и▒│нка 5.4 (б) не ┐вл┐е▓▒┐ де░евом, ▓ак как не ▒в┐зен.
Г░а┤ на ░и▒│нке 5.4 (в) не ┐вл┐е▓▒┐ ни де░евом, ни даже ле▒ом,
▓ак как в нем е▒▓╝ ╢икл.
В ▒лед│╛╣ей ▓ео░еме │казано не▒кол╝ко важн╗╡ ▒вой▒▓в де░ев╝ев.
Тео░ема 5.2 (Свой▒▓ва де░ев╝ев). П│▒▓╝ G = (V; E ) | нео░иен▓и░ованн╗й г░а┤. Тогда ▒лед│╛╣ие ▒вой▒▓ва ░авно▒ил╝н╗:
1. G ┐вл┐е▓▒┐ де░евом (без в╗деленного ко░н┐).
2. Дл┐ л╛б╗╡ дв│╡ ве░╕ин G ▒│╣е▒▓в│е▓ един▒▓венн╗й ▒оедин┐╛╣ий и╡ п░о▒▓ой п│▓╝.
3. Г░а┤ G ▒в┐зен, но пе░е▒▓ае▓ б╗▓╝ ▒в┐зн╗м, е▒ли │дали▓╝
л╛бое его ░еб░о.
94
Глава 5 Множе▒▓ва
(а) Де░ево без в╗деленного ко░н┐. (б) Ле▒. (в) Г░а┤, ▒оде░жа╣ий
╢икл, не ┐вл┐е▓▒┐ ни де░евом, ни ле▒ом.
Ри▒. 5.4
Ри▒. 5.5
Два п░о▒▓╗╡ п│▓и из u в v
4. Г░а┤ G ▒в┐зен и jE j = jV j ; 1.
5. Г░а┤ G а╢икли╖е▒кий и jE j = jV j ; 1.
6. Г░а┤ G а╢икли╖е▒кий, но добавление л╛бого ░еб░а к нем│ по░ождае▓ ╢икл.
Доказа▓ел╝▒▓во. (1) ) (2): По▒кол╝к│ де░ево ▒в┐зно, дл┐ л╛б╗╡
дв│╡ ве░╕ин ▒│╣е▒▓в│е▓ ▒оедин┐╛╣ий и╡ п│▓╝; в╗кин│в из него
ли╕нее, можем ▒╖и▓а▓╝, ╖▓о ╜▓о▓ п│▓╝ п░о▒▓ой. П│▒▓╝ е▒▓╝ два
░азн╗╡ п░о▒▓╗╡ п│▓и p1 и p2 из неко▓о░╗й ве░╕ин╗ u в д░│г│╛
ве░╕ин│ v (░и▒. 5.5). По▒мо▓░им, где ╜▓и п│▓и ░а▒╡од┐▓▒┐; п│▒▓╝
w | по▒ледн┐┐ об╣а┐ ве░╕ина пе░ед ░азве▓влением, а x и y |
░азли╖н╗е ве░╕ин╗, ▒лед│╛╣ие за w в п│▓┐╡ p1 и p2. Двига┐▒╝ по
пе░вом│ п│▓и, дождем▒┐ момен▓а, когда п│▓╝ внов╝ пе░е▒екае▓▒┐
▒о в▓о░╗м в неко▓о░ой ве░╕ине z . Ра▒▒мо▓░им │╖а▒▓ок p0 пе░вого
п│▓и о▓ w до z (╖е░ез x) и │╖а▒▓ок в▓о░ого п│▓и p00 о▓ w до z
(╖е░ез y ). П│▓и p0 и p00 не име╛▓ об╣и╡ ве░╕ин (не ▒╖и▓а┐ кон╢ов),
по▒кол╝к│ z б╗ло пе░вой ве░╕иной на п│▓и p1 по▒ле w, попав╕ей
в p2 . По╜▓ом│ м╗ пол│╖аем ╢икл (▒о▒▓о┐╣ий из p0 и об░а╣ени┐
п│▓и p00 ).
(2) ) (3) Г░а┤, о╖евидно, ▒в┐зен. П│▒▓╝ (u; v ) | л╛бое его ░еб░о. Е▒ли по▒ле его │далени┐ г░а┤ о▒▓ане▓▒┐ ▒в┐зн╗м, ▓о в нем
б│де▓ п│▓╝, ▒оедин┐╛╣ий u и v | в▓о░ой п│▓╝, ╖▓о п░о▓иво░е╖и▓
п░едположени╛.
(3) ) (4) По │▒лови╛, г░а┤ ▒в┐зен, по╜▓ом│ jE j > jV j;1 (│п░. 5.44). Докажем, ╖▓о jE j 6 jV j ; 1, ░а▒▒│жда┐ по инд│к╢ии. Св┐зн╗й
г░а┤ ▒ n = 1; 2 ве░╕инами имее▓ n ; 1 ░ебе░. П│▒▓╝ г░а┤ G имее▓
n > 3 ░ебе░ и дл┐ г░а┤ов ▒ мен╝╕им ╖и▒лом ░ебе░ на╕е не░авен▒▓во │же доказано. Удаление ░еб░а ░азбивае▓ г░а┤ G на k > 2 ▒в┐з-
Де░ев╝┐
95
н╗╡ компонен▓ (на ▒амом деле на две, но ╜▓о нам не важно). Дл┐
каждой из компонен▓ в╗полнено │▒ловие (3). Инд│к▓ивное п░едположение га░ан▓и░│е▓, ╖▓о об╣ее ╖и▒ло ░ебе░ в ни╡ не бол╝╕е
jV j ; k 6 jV j ; 2. Зна╖и▓, до │далени┐ ░еб░а б╗ло не более jV j ; 1
░ебе░.
(4) ) (5) П│▒▓╝ г░а┤ ▒в┐зен и jE j = jV j;1. Покажем, ╖▓о г░а┤ не
имее▓ ╢иклов. Е▒ли ╢икл е▒▓╝, │даление л╛бого ░еб░а из ╢икла не
на░│╕ае▓ ▒в┐зно▒▓и (можно п░ой▓и по о▒▓а╛╣ей▒┐ ╖а▒▓и ╢икла).
Б│дем пов▓о░┐▓╝ ╜▓о до ▓е╡ по░, пока не о▒▓ане▓▒┐ ▒в┐зн╗й г░а┤
без ╢иклов (де░ево). Как м╗ │же знаем, дл┐ де░ева ╖и▒ло ░ебе░
на едини╢│ мен╝╕е ╖и▒ла ве░╕ин | но по п░едположени╛ ▓о же
▒оо▓но╕ение б╗ло и до │далени┐ ░ебе░, ▓ак ╖▓о │дали▓╝ м╗ ни╖его
не могли и ▒ ▒амого на╖ала не б╗ло ╢иклов.
(5) ) (6) П│▒▓╝ г░а┤ G не имее▓ ╢иклов и jE j = jV j ; 1. П│▒▓╝
G имее▓ k ▒в┐зн╗╡ компонен▓; они по оп░еделени╛ ┐вл┐╛▓▒┐ де░ев╝┐ми. М╗ знаем, ╖▓о в каждой из ни╡ ╖и▒ло ░ебе░ на едини╢│
мен╝╕е ╖и▒ла ве░╕ин, по╜▓ом│ об╣ее ╖и▒ло ░ебе░ на k мен╝╕е ╖и▒ла ве░╕ин. Зна╖и▓, k = 1 и г░а┤ п░ед▒▓авл┐е▓ ▒обой де░ево. В
нем л╛б╗е две ве░╕ин╗ мог│▓ б╗▓╝ ▒оединен╗ п░о▒▓╗м п│▓ем
(м╗ │же знаем, ╖▓о (1) ) (2)), и по▓ом│ добавление л╛бого ░еб░а
по░ождае▓ ╢икл.
(6) ) (1) П│▒▓╝ г░а┤ ┐вл┐е▓▒┐ а╢икли╖е▒ким, но добавление л╛бого ░еб░а по░ождае▓ ╢икл. Надо показа▓╝, ╖▓о он ▒в┐зен. В ▒амом деле, ░а▒▒мо▓░им две п░оизвол╝н╗е ве░╕ин╗ u и v . М╗ знаем,
╖▓о добавление ░еб░а (u; v ) по░ождае▓ ╢икл. В ╜▓ом ╢икле должно в▒▓░е╖а▓╝▒┐ ░еб░о (u; v ), по▒кол╝к│ до его добавлени┐ ╢икла не
б╗ло | но ▓ол╝ко один ░аз, и о▒▓ал╝на┐ ╖а▒▓╝ ╢икла ▒оедин┐е▓ u
и v , ╖▓о и ▓░ебовало▒╝.
5.5.2. Де░ев╝┐ ▒ ко░нем. О░иен▓и░ованн╗е де░ев╝┐
Де░ево ▒ ко░нем, или ко░невое де░ево (rooted tree), пол│╖ае▓▒┐,
е▒ли в де░еве (▒в┐зном а╢икли╖е▒ком нео░иен▓и░ованном г░а┤е)
в╗дели▓╝ одн│ из ве░╕ин в╗делена, назвав ее ко░нем (root). Ве░╕ин╗ ко░невого де░ева по-англий▒ки наз╗ва╛▓▒┐ ▓акже └nodes┴.
На ░и▒│нке 5.6 (а) показано ко░невое де░ево ▒ 12 ве░╕инами и
ко░нем 7.
П│▒▓╝ x | п░оизвол╝на┐ ве░╕ина ко░невого де░ева ▒ ко░нем в r.
С│╣е▒▓в│е▓ един▒▓венн╗й п│▓╝ из r в x; в▒е ве░╕ин╗, на╡од┐╣ие▒┐
на ╜▓ом п│▓и, м╗ наз╗ваем п░едками (ancestors) ве░╕ин╗ x. Е▒ли y
┐вл┐е▓▒┐ п░едком x, ▓о x наз╗вае▓▒┐ по▓омком (descendant) y . Кажд│╛ ве░╕ин│ м╗ ▒╖и▓аем ▒воим п░едком и по▓омком. П░едки и
по▓омки ве░╕ин╗ x, не ▒овпада╛╣ие ▒ x, наз╗ва╛▓▒┐ ▒об▒▓венн╗ми п░едками (proper ancestors) и ▒об▒▓венн╗ми по▓омками (proper
descendants) ве░╕ин╗ x. [Э▓а ▓е░минологи┐ не вполне │да╖на: ┤░а-
96
Глава 5 Множе▒▓ва
в╗▒о▓а = 4, гл│бина 0, гл│бина 1 и ▓.п.
(а) Ко░невое де░ево в╗▒о▓╗ 4. Де░ево на░и▒овано об╗╖н╗м об░азом:
ко░ен╝ (ве░╕ина 7) на░и▒ована ▒ве░╡│, ▒о▒едние ▒ ним ве░╕ин╗ (де▓и ко░н┐,
ве░╕ин╗ гл│бин╗ 1) на░и▒ован╗ под ней, ве░╕ин╗ ▒лед│╛╣его │░овн┐ (де▓и
де▓ей ко░н┐, ве░╕ин╗ гл│бин╗ 2) под ними и ▓. д. Дл┐ де░ев╝ев ▒ по░┐дком на
де▓┐╡ дл┐ каждой ве░╕ин╗ ┤ик▒и░ован по░┐док на множе▒▓ве ее де▓ей. (б) То
же ▒амое ко░невое де░ево, но ▒ д░│гим по░┐дком (▒░еди де▓ей ве░╕ин╗ 3),
б│де▓ д░│гим де░евом ▒ по░┐дком на де▓┐╡.
Ри▒. 5.6
з│ └ве░╕ина ┐вл┐е▓▒┐ ▒воим ▒об▒▓венн╗м по▓омком┴ можно ▓олкова▓╝ по ░азном│, и п░и одном ▓олковании она ве░на, а п░и д░│гом
не▓.]
Дл┐ каждой ве░╕ин╗ x можно ░а▒▒мо▓░е▓╝ де░ево, ▒о▒▓о┐╣ее
из в▒е╡ по▓омков x, в ко▓о░ом x ▒╖и▓ае▓▒┐ ко░нем. Оно наз╗вае▓▒┐ подде░евом ▒ ко░нем в x (subtree rooted at x). Нап░име░, на
░и▒. 5.6 (а) подде░ево ▒ ко░нем в 8 ▒оде░жи▓ ве░╕ин╗ 8, 6, 5 и 9.
Е▒ли (y; x) | по▒леднее ░еб░о на п│▓и из ко░н┐ в x, ▓о y наз╗вае▓▒┐ ░оди▓елем (parent) x, а x наз╗вае▓▒┐ ░ебенком y . [Ран╝╕е вме▒▓о └░оди▓ел╝┴ и └░ебенок┴ гово░или └о▓е╢┴ (father) и └▒╗н┴(son),
╖▓о б╗ло более логи╖но, ▓ак как вооб╣е-▓о │ ╖еловека двое ░оди▓елей, а │ ве░╕ин╗ де░ева | не более одного. За▓о п░ин┐▓а┐ ▓епе░╝
в аме░икан▒кой ли▓е░а▓│░е ▓е░минологи┐ └поли▓и╖е▒ки ко░░ек▓на┴.]
Ко░ен╝ ┐вл┐е▓▒┐ един▒▓венной ве░╕иной, │ ко▓о░ой не▓ ░оди▓ел┐. Ве░╕ин╗, име╛╣ие об╣его ░оди▓ел┐, наз╗ва╛▓ в аме░икан▒кой ли▓е░а▓│░е siblings; к ▒ожалени╛, ░│▒▒кого пе░евода │ ╜▓ого
▒лова не▓, и м╗ б│дем (как ╜▓о делало▒╝ ░ан╝╕е) наз╗ва▓╝ ▓акие
ве░╕ин╗ б░а▓╝┐ми. Ве░╕ина ко░невого де░ева, не име╛╣а┐ де▓ей,
наз╗вае▓▒┐ ли▒▓ом (leaf, external node). Ве░╕ин╗, име╛╣ие де▓ей,
наз╗ва╛▓▒┐ вн│▓░енними (internal).
Чи▒ло де▓ей │ ве░╕ин╗ ко░невого де░ева наз╗вае▓▒┐ ее ▒▓епен╝╛ (degree). О▓ме▓им, ╖▓о дл┐ в▒е╡ ве░╕ин, к░оме ко░н┐, ▒▓епен╝
на едини╢│ мен╝╕е ▒▓епени ▓ой же ве░╕ин╗ в ▓ом же де░еве, е▒ли ░а▒▒ма▓░ива▓╝ де░ево как нео░иен▓и░ованн╗й г░а┤ (по▒кол╝к│
▓огда надо │╖и▓╗ва▓╝ и ░еб░о, ид│╣ее вве░╡). Длина п│▓и о▓ ко░н┐
до п░оизвол╝ной ве░╕ин╗ x наз╗вае▓▒┐ гл│биной (depth) ве░╕ин╗ x. Мак▒имал╝на┐ гл│бина ве░╕ин де░ева наз╗вае▓▒┐ в╗▒о▓ой
Де░ев╝┐
97
Двои╖н╗е де░ев╝┐. (а) Двои╖ное де░ево, изоб░аженное ▓░ади╢ионн╗м об░азом. Лев╗й ░ебенок ве░╕ин╗ на░и▒ован ▒лева-▒низ│ о▓ нее, п░ав╗й
| ▒п░ава-▒низ│. (б) Д░│гое двои╖ное де░ево (о▓ли╖ие в ▓ом, ╖▓о ▓епе░╝ │ ве░╕ин╗ 7 е▒▓╝ п░ав╗й ░ебенок 5 и не▓ левого, а не наобо░о▓). Такое ░азли╖ие
возможно в двои╖ном де░еве, но не в де░еве ▒ по░┐дком на де▓┐╡. (в) Добавл┐┐
дополни▓ел╝н╗е ли▒▓╝┐ к де░ев│ (a), м╗ пол│╖аем де░ево, │ ко▓о░ого кажда┐
▒▓а░а┐ ве░╕ина имее▓ дв│╡ де▓ей. Добавленн╗е ли▒▓╝┐ изоб░ажен╗ квад░а▓иками.
Ри▒. 5.7
(height) де░ева.
Де░евом ▒ по░┐дком на де▓┐╡ (ordered tree) наз╗вае▓▒┐ ко░невое
де░ево ▒ дополни▓ел╝ной ▒▓░│к▓│░ой: дл┐ каждой ве░╕ин╗ множе▒▓во ее де▓ей │по░┐до╖ено (изве▒▓но, какой ее по▓омок пе░в╗й,
какой в▓о░ой и ▓. д.). Два де░ева на ░и▒. 5.6 одинаков╗ как ко░нев╗е де░ев╝┐, но ░азли╖н╗ как де░ев╝┐ ▒ по░┐дком на де▓┐╡.
5.5.3. Двои╖н╗е де░ев╝┐. Пози╢ионн╗е де░ев╝┐
Двои╖ное де░ево (binary tree) п░о╣е в▒его оп░едели▓╝ ░ек│░▒ивно как коне╖н╗й набо░ ве░╕ин, ко▓о░╗й
либо п│▒▓ (не ▒оде░жи▓ ве░╕ин),
либо ░азби▓ на ▓░и непе░е▒ека╛╣ие▒┐ ╖а▒▓и: ве░╕ин│, наз╗ваем│╛ ко░нем (root), двои╖ное де░ево, наз╗ваемое лев╗м подде░евом (left subtree) ко░н┐, и двои╖ное де░ево, наз╗ваемое п░ав╗м подде░евом (right subtree) ко░н┐.
Двои╖ное де░ево, не ▒оде░жа╣ее ве░╕ин, наз╗вае▓▒┐ п│▒▓╗м (empty). Оно иногда обозна╖ае▓▒┐ nil. Е▒ли левое подде░ево неп│▒▓о,
▓о его ко░ен╝ наз╗вае▓▒┐ лев╗м ░ебенком (left child) ко░н┐ в▒его
де░ева; п░ав╗й ░ебенок (right child) оп░едел┐е▓▒┐ аналоги╖но. Е▒ли
левое или п░авое подде░ево ко░н┐ п│▒▓о, ▓о гово░┐▓, ╖▓о │ ко░н┐
не▓ левого или п░авого ░ебенка (child is absent). П░име░ двои╖ного
де░ева показан на ░и▒. 5.7 (а).
Б╗ло б╗ о╕ибкой оп░едели▓╝ двои╖ное де░ево п░о▒▓о как де░ево ▒ по░┐дком на де▓┐╡, в ко▓о░ом ▒▓епен╝ каждой ве░╕ин╗ не
п░ево▒╡оди▓ 2. Дело в ▓ом, ╖▓о в двои╖ном де░еве важно, каким
┐вл┐е▓▒┐ един▒▓венн╗й ░ебенок ве░╕ин╗ ▒▓епени 1 | лев╗м или
98
Глава 5 Множе▒▓ва
в╗▒о▓а=3, гл│бина 0, гл│бина 1 и ▓.п.
Ри▒. 5.8
ве░╕ин.
Полное двои╖ное де░ево в╗▒о▓╗ 3 имее▓ 8 ли▒▓╝ев и 7 вн│▓░енни╡
п░ав╗м, а дл┐ де░ева ▒ по░┐дком на де▓┐╡ ▓акого ░азли╖и┐ не ▒│╣е▒▓в│е▓. На ░и▒. 5.7 (а,б) показан╗ два ░азли╖н╗╡ двои╖н╗╡ де░ева,
ко▓о░╗е одинаков╗ как де░ев╝┐ ▒ по░┐дком на де▓┐╡.
П│▒▓│╛╣ие ме▒▓а в двои╖ном де░еве ╖а▒▓о заполн┐╛▓ ┤ик▓ивн╗ми ли▒▓╝┐ми. По▒ле ╜▓ого │ каждой ▒▓а░ой ве░╕ин╗ б│де▓ двое
де▓ей (либо п░ежни╡, либо добавленн╗╡). Э▓о п░еоб░азование показано на ░и▒. 5.7 (в).
Можно оп░едели▓╝ аналоги двои╖н╗╡ де░ев╝ев дл┐ де░ев╝ев
бол╝╕ей ▒▓епени: двои╖н╗е де░ев╝┐ ┐вл┐╛▓▒┐ ╖а▒▓н╗м ▒л│╖аем kи╖н╗╡ (k-ary) де░ев╝ев п░и k = 2. Более под░обно, пози╢ионное де░ево (positional tree) оп░едел┐е▓▒┐ как ко░невое де░ево, в ко▓о░ом
де▓и л╛бой ве░╕ин╗ поме╖ен╗ ░азли╖н╗ми ╢ел╗ми положи▓ел╝н╗ми ╖и▒лами, ко▓о░╗е ▒╖и▓а╛▓▒┐ и╡ номе░ами. П░и ╜▓ом │ каждой ве░╕ин╗ е▒▓╝ вакан▒ии дл┐ де▓ей номе░ 1, 2, 3 и ▓ак далее, из
ко▓о░╗╡ неко▓о░╗е (коне╖ное ╖и▒ло) заполнен╗, а о▒▓ал╝н╗е ▒вободн╗ (ith child is absent). П░и ╜▓ом k-и╖н╗м де░евом наз╗вае▓▒┐
пози╢ионное де░ево, не име╛╣ее ве░╕ин ▒ номе░ами бол╝╕е k.
Полн╗м k-и╖н╗м де░евом (complete k-ary tree) наз╗вае▓▒┐ kи╖ное де░ево, в ко▓о░ом в▒е ли▒▓╝┐ име╛▓ одинаков│╛ гл│бин│
и в▒е вн│▓░енние ве░╕ин╗ име╛▓ ▒▓епен╝ k. (Тем ▒ам╗м ▒▓░│к▓│░а ▓акого де░ева полно▒▓╝╛ оп░едел┐е▓▒┐ его в╗▒о▓ой.) На ░и▒. 5.8
показано полное двои╖ное де░ево в╗▒о▓╗ 3. Под▒╖и▓аем, ▒кол╝ко
ли▒▓╝ев имее▓ полное k-и╖ное де░ево в╗▒о▓╗ h. Ко░ен╝ ┐вл┐е▓▒┐
един▒▓венной ве░╕иной гл│бин╗ 0, его k де▓ей ┐вл┐╛▓▒┐ ве░╕инами гл│бин╗ 1, и╡ де▓╝ми ┐вл┐╛▓▒┐ k2 ве░╕ин гл│бин╗ k и ▓ак
далее впло▓╝ до kh ли▒▓╝ев гл│бин╗ h. Можно добави▓╝, ╖▓о в╗▒о▓а
k-и╖ного де░ева ▒ n ли▒▓╝┐ми ░авна logk n (▓акое де░ево ▒│╣е▒▓в│е▓, ▓ол╝ко е▒ли ╜▓о▓ лога░и┤м ╢ел╗й). Чи▒ло вн│▓░енни╡ ве░╕ин
полного k-и╖ного де░ева в╗▒о▓╗ h ░авно
h
1 + k + k2 + : : : + kh;1 = kk ;;11
(▒м. (3.3)). В ╖а▒▓но▒▓и, дл┐ полного двои╖ного де░ева ╖и▒ло вн│▓░енни╡ ве░╕ин на едини╢│ мен╝╕е ╖и▒ла ли▒▓╝ев.
Зада╖и к главе 5
99
Уп░ажнени┐
5.5-1 На░и▒│й▓е в▒е де░ев╝┐ (без в╗деленного ко░н┐), ▒оде░жа╣ие ▓░и ве░╕ин╗ A, B и C . На░и▒│й▓е в▒е ко░нев╗е де░ев╝┐ ▒ ве░╕инами A, B и C и ко░нем A. На░и▒│й▓е в▒е (ко░нев╗е) де░ев╝┐ ▒
по░┐дком на де▓┐╡ ▒ ве░╕инами A, B и C и ко░нем A. На░и▒│й▓е
в▒е двои╖н╗е де░ев╝┐ ▒ ве░╕инами A, B и C и ко░нем A.
5.5-2 Покажи▓е, ╖▓о дл┐ л╛бого n > 7 ▒│╣е▒▓в│е▓ де░ево c n
ве░╕инами, из ко▓о░ого можно пол│╖и▓╝ n ░азли╖н╗╡ ко░нев╗╡
де░ев╝ев, об║┐вив ко░нем одн│ из n ве░╕ин.
5.5-3 П│▒▓╝ G = (V; E ) | о░иен▓и░ованн╗й а╢икли╖е▒кий г░а┤,
в ко▓о░ом ▒│╣е▒▓в│е▓ ве░╕ина v0 , из ко▓о░ой в кажд│╛ д░│г│╛
v 2 V веде▓ един▒▓венн╗й п│▓╝. Покажи▓е, ╖▓о нео░иен▓и░ованн╗й ва░иан▓ г░а┤а G ┐вл┐е▓▒┐ де░евом.
5.5-4 Докажи▓е по инд│к╢ии, ╖▓о в л╛бом двои╖ном де░еве ╖и▒ло ве░╕ин ▒▓епени 2 на едини╢│ мен╝╕е ╖и▒ла ли▒▓╝ев.
5.5-5 Покажи▓е, ╖▓о двои╖ное де░ево ▒ n ве░╕инами имее▓ в╗▒о▓│ не мен╝╕е blg nc.
5.5-6? Оп░еделим вн│▓░енн╛╛ ▒│мм│ длин (internal path length)
дл┐ двои╖ного де░ева, в ко▓о░ом кажда┐ ве░╕ина имее▓ ▒▓епен╝ 0
или 2, как ▒│мм│ гл│бин в▒е╡ вн│▓░енни╡ ве░╕ин. Оп░еделим вне╕н╛╛ ▒│мм│ длин дл┐ ╜▓ого же де░ева как ▒│мм│ гл│бин в▒е╡ его
ли▒▓╝ев. П│▒▓╝ n | ╖и▒ло вн│▓░енни╡ ве░╕ин ▓акого де░ева, i и e
| вн│▓░енн┐┐ и вне╕н┐┐ ▒│мм╗ длин. Докажи▓е, ╖▓о e = i + 2n.
5.5-7? Оп░еделим └ве▒┴ ли▒▓а в двои╖ном де░еве как 2;d , где d |
его гл│бина. Докажи▓е, ╖▓о ▒│мма ве▒ов в▒е╡ ли▒▓╝ев в двои╖ном
де░еве не п░ево▒╡оди▓ 1 (не░авен▒▓во К░а┤▓а, Kraft inequality)
5.5-8? Покажи▓е, ╖▓о в л╛бом двои╖ном де░еве ▒ L ли▒▓╝┐ми можно най▓и подде░ево, ╖и▒ло ли▒▓╝ев в ко▓о░ом на╡оди▓▒┐ на о▓░езке
[L=3; 2L=3].
Зада╖и
5-1 Ра▒к░а▒ка г░а┤а
Назовем k-░а▒к░а▒кой нео░иен▓и░ованного г░а┤а (V; E ) ┤│нк╢и╛ c : V ! f0; 1; : : :; k ; 1g, дл┐ ко▓о░ого c(u) 6= c(v ) дл┐ л╛б╗╡
дв│╡ ▒межн╗╡ ве░╕ин u и v . (Кон╢╗ л╛бого ░еб░а должн╗ име▓╝
░азн╗е ╢ве▓а.)
а. Покажи▓е, ╖▓о л╛бое де░ево имее▓ 2-░а▒к░а▒к│.
100
Глава 5 Множе▒▓ва
б. Покажи▓е, ╖▓о ▒лед│╛╣ие ▒вой▒▓ва нео░иен▓и░ованного г░а┤а G ░авно▒ил╝н╗:
1. Г░а┤ G дв│дол╝н╗й.
2. Г░а┤ G имее▓ 2-░а▒к░а▒к│.
3. Г░а┤ G не имее▓ ╢иклов не╖е▓ной длин╗.
в. П│▒▓╝ d | мак▒имал╝на┐ ▒▓епен╝ ве░╕ин нео░иен▓и░ованного
г░а┤а G. Покажи▓е, ╖▓о G имее▓ (d + 1)-░а▒к░а▒к│.
г.pПокажи▓е, ╖▓о е▒ли г░а┤ G имее▓ O(jV j) ░ебе░, ▓о G имее▓
O( jV j)-░а▒к░а▒к│.
5-2 Г░а┤╗ и л╛ди
Пе░еведи▓е на ┐з╗к нео░иен▓и░ованн╗╡ г░а┤ов ▒лед│╛╣ие
│▓ве░ждени┐ и докажи▓е и╡. (П░едполагае▓▒┐, ╖▓о о▓но╕ение
└б╗▓╝ д░│гом┴ ▒имме▓░и╖но, и ╖еловек не вкл╛╖ае▓▒┐ в ╖и▒ло
▒вои╡ д░│зей.)
а. В л╛бой компании из n > 2 ╖еловек найд│▓▒┐ два ╖еловека ▒
одинаков╗м ╖и▒лом д░│зей (▒░еди п░и▒│▓▒▓в│╛╣и╡).
б. В л╛бой г░│ппе из 6 ╖еловек можно най▓и либо ▓░е╡ ╖еловек,
┐вл┐╛╣и╡▒┐ д░│з╝┐ми д░│г д░│га, либо ▓░е╡ ╖еловек, никакие двое
из ко▓о░╗╡ не ┐вл┐╛▓▒┐ д░│з╝┐ми.
в. Л╛б│╛ компани╛ л╛дей можно ░азве▒▓и по дв│м комна▓ам
▓ак, ╖▓о дл┐ каждого ╖еловека как миним│м половина его д░│зей
окаж│▓▒┐ в д░│гой комна▓е.
г. Е▒ли в компании из n ╖еловек │ каждого не менее n=2 д░│зей,
▓о ╜▓│ компани╛ можно ░а▒▒ади▓╝ за к░│гл╗м ▒▓олом ▓ак, ╖▓об╗
кажд╗й ▒идел межд│ дв│м┐ ▒воими д░│з╝┐ми.
5-3 Разбиение де░ев╝ев на ╖а▒▓и
Многие алго░и▓м╗ на г░а┤а╡, дей▒▓в│╛╣ие по п░ин╢ип│ └░аздел┐й и вла▒▓в│й┴, дел┐▓ г░а┤ на две ╖а▒▓и, п░и ╜▓ом жела▓ел╝но
│дал┐▓╝ как можно мен╝╕е ░ебе░ и пол│╖и▓╝ две ╖а▒▓и по возможно▒▓и близкого ░азме░а.
а. Покажи▓е, ╖▓о в л╛бом двои╖ном де░еве ▒ n ве░╕инами можно
най▓и ░еб░о, по▒ле │далени┐ ко▓о░ого пол│╖а▓▒┐ две ╖а▒▓и ░азме░а
не бол╝╕е 3n=4 кажда┐.
б. Покажи▓е, ╖▓о кон▒▓ан▓│ 3=4 в п│нк▓е (а) нел╝з┐ │л│╖╕и▓╝,
п░ивед┐ п░име░ двои╖ного де░ева, дл┐ ко▓о░ого по▒ле │далени┐
л╛бого ░еб░а в одной из ╖а▒▓ей о▒▓ае▓▒┐ не менее 3n=4 ве░╕ин.
в. Покажи▓е, ╖▓о множе▒▓во ве░╕ин л╛бого двои╖ного де░ева ▒
n ве░╕инами можно ░азби▓╝ на две ╖а▒▓и A и B ▓аким об░азом,
╖▓о jAj = bn=2c, jB j = dn=2e, а ╖и▒ло ░ебе░, ▒оедин┐╛╣и╡ ве░╕ин╗
из ░азн╗╡ ╖а▒▓ей, е▒▓╝ O(lg n).
Заме╖ани┐ к главе 5
101
Заме╖ани┐
О▒нова▓ел╝ ▒имволи╖е▒кой логики Б│л╝ (G. Boole) ввел многие из н╗не╕ни╡ ▓ео░е▓ико-множе▒▓венн╗╡ обозна╖ений в книге,
оп│бликованной в 1854 год│. Сов░еменна┐ ▓ео░и┐ множе▒▓в (п░ежде в▒его ▓ео░и┐ мо╣но▒▓ей бе▒коне╖н╗╡ множе▒▓в) б╗ла ▒оздана
Кан▓о░ом (G. Cantor) в 1874{1895 года╡. Те░мин └┤│нк╢и┐┴ и▒пол╝зовал Лейбни╢ (G.W. Leibnitz) в п░именении к неко▓о░╗м ма▓ема▓и╖е▒ким ┤о░м│лам. Оп░еделение ┤│нк╢ии впо▒лед▒▓вии многок░а▓но обоб╣ало▒╝. Тео░и┐ г░а┤ов во▒╡оди▓ к 1736 год│, когда
Эйле░ (L. Euler) показал, ╖▓о невозможно п░ой▓и по в▒ем ▒еми мо▒▓ам го░ода Кениг▒бе░га по одном│ ░аз│ и ве░н│▓╝▒┐ в и▒╡одн│╛
▓о╖к│.
Полезн╗м ▒п░аво╖ником по оп░еделени┐м и ░ез│л╝▓а▓ам ▓ео░ии
г░а┤ов ┐вл┐е▓▒┐ книга Ха░а░и [94].
6
Комбина▓о░ика и ве░о┐▓но▒▓╝
В ╜▓ой главе излага╛▓▒┐ на╖ала комбина▓о░ики и ▓ео░ии ве░о┐▓но▒▓ей. Е▒ли в╗ знаком╗ ▒ ними, ▒ове▓│ем п░о▒мо▓░е▓╝ на╖ало
глав╗ и внима▓ел╝но п░о╖е▒▓╝ по▒ледние ░аздел╗. Многие глав╗
╜▓ой книги не и▒пол╝з│╛▓ ▓ео░и╛ ве░о┐▓но▒▓ей, но кое-где она
необ╡одима.
Раздел 6.1 напоминае▓ о▒новн╗е ┤ак▓╗ комбина▓о░ики (в ▓ом
╖и▒ле ┤о░м│л╗ дл┐ пе░е▒▓ановок и ▒о╖е▓аний). Раздел 6.2 ▒оде░жи▓ ак▒иом╗ ве░о┐▓но▒▓и и о▒новн╗е ┤ак▓╗ о ░а▒п░еделени┐╡ ве░о┐▓но▒▓ей. В ░азделе 6.3 оп░едел┐╛▓▒┐ пон┐▓и┐ ▒л│╖айной вели╖ин╗, ее ма▓ема▓и╖е▒кого ожидани┐ и ди▒пе░▒ии. Раздел 6.4 по▒в┐╣ен геоме▓░и╖е▒ком│ и биномиал╝ном│ ░а▒п░еделени┐м. И▒▒ледование биномиал╝ного ░а▒п░еделени┐ п░одолжае▓▒┐ в ░азделе 6.5
(о╢енка └╡во▒▓ов┴). В по▒леднем ░азделе 6.6 п░именение ▓ео░ии ве░о┐▓но▒▓ей илл╛▒▓░и░│е▓▒┐ на п░име░е ▓░е╡ зада╖: па░адок▒а дн┐
░ождени┐, ▒л│╖айного ░а▒п░еделени┐ ╕а░ов по │░нам и о╢енки длин╗ в╗иг░╗╕н╗╡ │╖а▒▓ков п░и б░о▒ании моне▓╗.
6.1. Под▒╖е▓ коли╖е▒▓в
Иногда можно най▓и ╖и▒ло п░едме▓ов оп░еделенного вида, не
пе░е╖и▒л┐┐ и╡ в▒е. Нап░име░, легко най▓и ╖и▒ло в▒е╡ n-би▓ов╗╡
▒▓░ок или в▒е╡ пе░е▒▓ановок n об║ек▓ов. В ╜▓ом ░азделе м╗ ░а▒▒мо▓░им о▒новн╗е ме▓од╗ ▓акого под▒╖е▓а. П░едполагае▓▒┐, ╖▓о
╖и▓а▓ел╝ знаком ▒ пон┐▓и┐ми ▓ео░ии множе▒▓в (▒м. ░азд. 5.1).
П░авила ▒│мм╗ и п░оизведени┐
Множе▒▓во, коли╖е▒▓во ╜лемен▓ов ко▓о░ого м╗ ╡о▓им под▒╖и▓а▓╝, ╖а▒▓о може▓ б╗▓╝ п░ед▒▓авлено в виде об║единени┐ непе░е▒ека╛╣и╡▒┐ множе▒▓в или дека░▓ова п░оизведени┐ множе▒▓в.
П░авило ▒│мм╗ (rule of sum) гла▒и▓, ╖▓о jA [ B j = jAj + jB j
дл┐ непе░е▒ека╛╣и╡▒┐ коне╖н╗╡ множе▒▓в A и B (╖а▒▓н╗й ▒л│╖ай ┤о░м│л╗ (5.3)). Е▒ли ▒имвол на номе░е ма╕ин╗ должен б╗▓╝
Под▒╖е▓ коли╖е▒▓в
103
либо ла▓ин▒кой б│квой, либо ╢и┤░ой, ▓о в▒его е▒▓╝ 26 + 10 = 36
возможно▒▓ей, ▓ак как б│кв 26, а ╢и┤░ 10.
П░авило п░оизведени┐ (rule of product) │▓ве░ждае▓, ╖▓о jA Bj = jAj jB j дл┐ коне╖н╗╡ множе▒▓в A и B, ▒м. (5.4). Нап░име░,
име┐ 28 ▒о░▓ов мо░оженого и 4 вида ▒и░опа, можно изго▓ови▓╝
28 4 = 112 ва░иан▓ов мо░оженого ▒ ▒и░опом (не ▒ме╕ива┐ ░азн╗е
▒о░▓а мо░оженого и ▒и░опа).
С▓░оки
С▓░окой (string; по-░│▒▒ки гово░┐▓ ▓акже о ▒лова╡) наз╗ва╛▓ коне╖н│╛ по▒ледова▓ел╝но▒▓╝ ╜лемен▓ов неко▓о░ого коне╖ного множе▒▓ва S (наз╗ваемого ал┤ави▓ом). Нап░име░, ▒│╣е▒▓в│е▓ 8 двои╖н╗╡ (▒о▒▓авленн╗╡ из н│лей и едини╢) ▒▓░ок длин╗ 3:
000; 001; 010; 011; 100; 101; 110; 111:
Иногда ▒▓░ок│ длин╗ k наз╗ва╛▓ k-▒▓░окой (k-string). Под▒▓░окой (substring) s0 ▒▓░оки s наз╗вае▓▒┐ п░оизвол╝на┐ по▒ледова▓ел╝но▒▓╝ ид│╣и╡ под░┐д ╜лемен▓ов ▒▓░оки s. Гово░┐ о k-под▒▓░оке
(k-substring), име╛▓ в вид│ под▒▓░ок│ длин╗ k. Так, 010 ┐вл┐е▓▒┐
3-под▒▓░окой ▒▓░оки 01101001 (она на╖инае▓▒┐ ▒ пози╢ии 4), а 111
| не▓.
С▓░ока длин╗ k из ╜лемен▓ов множе▒▓ва S ┐вл┐е▓▒┐ ╜лемен▓ом
п░┐мого п░оизведени┐ S k , ▓ак ╖▓о в▒его ▒│╣е▒▓в│е▓ jS jk ▒▓░ок длин╗ k. В ╖а▒▓но▒▓и, имее▓▒┐ 2k двои╖н╗╡ ▒▓░ок длин╗ k. Э▓о можно об║┐▒ни▓╝ е╣е и ▓ак: пе░в╗й ╜лемен▓ ▒▓░оки можно в╗б░а▓╝
jS j ▒по▒обами; дл┐ каждого из ни╡ е▒▓╝ jS j ва░иан▓ов п░одолжени┐, и ▓ак далее | в▒его k в╗бо░ов, пол│╖ае▓▒┐ jS j jS j : : : jS j
(k множи▓елей) ва░иан▓ов.
Пе░е▒▓ановки
Пе░е▒▓ановкой (permutation) коне╖ного множе▒▓ва S наз╗вае▓▒┐ │по░┐до╖енна┐ по▒ледова▓ел╝но▒▓╝ в▒е╡ его ╜лемен▓ов, в ко▓о░ой кажд╗й ╜лемен▓ в▒▓░е╖ае▓▒┐ ░овно один ░аз. Так, ▒│╣е▒▓в│е▓
6 пе░е▒▓ановок множе▒▓ва S = fa; b; cg :
abc; acb; bac; bca; cab; cba:
В▒его имее▓▒┐ n! пе░е▒▓ановок множе▒▓ва из n ╜лемен▓ов, ▓ак
как пе░в╗й ╜лемен▓ пе░е▒▓ановки можно в╗б░а▓╝ n ▒по▒обами,
в▓о░ой n ; 1 ▒по▒обами, ▓░е▓ий n ; 2 ▒по▒обами, и ▓. д.
104
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Разме╣ени┐ без пов▓о░ений
Е▒ли кажд╗й ╜лемен▓ можно и▒пол╝зова▓╝ ▓ол╝ко один ░аз, но
не ▓░еб│е▓▒┐ и▒пол╝зова▓╝ в▒е ╜лемен▓╗, гово░┐▓ о ░азме╣ени┐╡
без пов▓о░ений. П│▒▓╝ ┤ик▒и░овано множе▒▓во S из n ╜лемен▓ов
и неко▓о░ое k, не п░ево▒╡од┐╣ее n. Разме╣ением без пов▓о░ений
из n по k наз╗ва╛▓ по▒ледова▓ел╝но▒▓╝ длин╗ k, ▒о▒▓авленн│╛
из ░азли╖н╗╡ ╜лемен▓ов S . (Англий▒кий ▓е░мин | k-permutation.)
Чи▒ло ▓аки╡ ░азме╣ений ░авно
(6.1)
n(n ; 1)(n ; 2) (n ; k + 1) = (n ;n! k)!
▓ак как ▒│╣е▒▓в│е▓ n ▒по▒обов в╗бо░а пе░вого ╜лемен▓а, n ; 1 ▒по▒обов в╗бо░а в▓о░ого ╜лемен▓а, и ▓ак далее до k-го ╜лемен▓а, ко▓о░╗й можно в╗б░а▓╝ n ; k + 1 ▒по▒обами.
Нап░име░, ▒│╣е▒▓в│е▓ 12 = 4 3 по▒ледова▓ел╝но▒▓ей из дв│╡
░азли╖н╗╡ ╜лемен▓ов множе▒▓ва fa; b; c; dg:
ab; ac; ad; ba; bc; bd; ca; cb; cd; da; db; dc:
Ча▒▓н╗м ▒л│╖аем ╜▓ой ┤о░м│л╗ ┐вл┐е▓▒┐ ┤о░м│ла дл┐ ╖и▒ла пе░е▒▓ановок (по▒кол╝к│ пе░е▒▓ановки ┐вл┐╛▓▒┐ ╖а▒▓н╗м ▒л│╖аем
░азме╣ений п░и n = k).
Со╖е▓ани┐
Со╖е▓ани┐ми (k-combinations) из n ╜лемен▓ов по k наз╗ва╛▓▒┐ k╜лемен▓н╗е подмноже▒▓ва какого-либо n-╜лемен▓ного множе▒▓ва.
Нап░име░, │ множе▒▓ва fa; b; c; dg из 4 ╜лемен▓ов имее▓▒┐ 6 дв│╡╜лемен▓н╗╡ подмноже▒▓в
fa; bg; fa; cg; fa; dg; fb; cg; fb; dg; fc; dg:
Чи▒ло ▒о╖е▓аний из n по k в k! ░аз мен╝╕е ╖и▒ла ░азме╣ений без
пов▓о░ений (дл┐ ▓е╡ же n и k), ▓ак как из каждого k-▒о╖е▓ани┐
можно ▒дела▓╝ k! ░азме╣ений без пов▓о░ений, пе░е▒▓авл┐┐ его ╜ле-
мен▓╗. По╜▓ом│ из ┤о░м│л╗ (6.1) ▒лед│е▓, ╖▓о ╖и▒ло ▒о╖е▓аний
из n по k ░авно
n! :
(6.2)
k!(n ; k)!
Дл┐ k = 0 ╜▓а ┤о░м│ла дае▓ 1, как и должно б╗▓╝ (е▒▓╝ ░овно одно
п│▒▓ое подмноже▒▓во; напомним, ╖▓о 0! = 1).
Под▒╖е▓ коли╖е▒▓в
105
Биномиал╝н╗е ко╜┤┤и╢иен▓╗
Дл┐ ╖и▒ла ▒о╖е▓аний из n;по k и▒пол╝з│е▓▒┐ обозна╖ение Cnk или
(в англий▒кой ли▓е░а▓│░е) nk :
(6.3)
= nk = k!(nn;! k)! :
Э▓а ┤о░м│ла ▒имме▓░и╖на о▓но▒и▓ел╝но замен╗ k на n ; k :
Cnk
Cnk = Cnn;k :
(6.4)
Чи▒ла Cnk изве▒▓н╗ ▓акже как биномиал╝н╗е ко╜┤┤и╢иен▓╗ (binomial coecients), по┐вл┐╛╣ие▒┐ в биноме Н╝╛▓она (binomial expansion):
(x + y )n =
n
X
k=0
(x + y )n ,
Cnk xk yn;k
(6.5)
(е▒ли ░а▒к░╗▓╝ ▒кобки в
▓о коли╖е▒▓во ╖ленов, ▒оде░жа╣и╡ k множи▓елей x и n ; k множи▓елей y , ░авно коли╖е▒▓в│
▒по▒обов в╗б░а▓╝ k ме▒▓ из n, ▓. е. Cnk ).
П░и x = y = 1 бином Н╝╛▓она дае▓
2n =
n
X
k=0
Cnk :
(6.6)
(Комбина▓о░н╗й ▒м╗▒л: 2n двои╖н╗╡ ▒▓░ок длин╗ n ▒г░│ппи░ован╗ по ╖и▒л│ едини╢: имее▓▒┐ как ░аз Cnk ▒▓░ок ▒ k едини╢ами.)
С│╣е▒▓в│е▓ много ▓ожде▒▓в ▒ биномиал╝н╗ми ко╜┤┤и╢иен▓ами
(неко▓о░╗е из ни╡ п░едлага╛▓▒┐ в ка╖е▒▓ве │п░ажнений в кон╢е
╜▓ого ░аздела).
О╢енки биномиал╝н╗╡ ко╜┤┤и╢иен▓ов
В неко▓о░╗╡ ▒л│╖а┐╡ нам понадоби▓▒┐ о╢ени▓╝ вели╖ин│ биномиал╝н╗╡ ко╜┤┤и╢иен▓ов. Дл┐ 1 6 k 6 n имеем о╢енк│ ▒низ│
Cnk = n(n ;k(1)k ; 1)(n ; 1k + 1)
n
n
;
1
n
;
k
+
1
= k k ;1 1
k
> nk :
(6.7)
106
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
И▒пол╝з│┐ не░авен▒▓во k! > ( ke )k , ┐вл┐╛╣ее▒┐ ▒лед▒▓вием ┤о░м│л╗ С▓и░линга (2.12), пол│╖аем о╢енк│ ▒ве░╡│
Cnk = n(n ;k(1)k ; 1)(n ; 1k + 1)
k
6 nk!
k
6 en
k :
(6.8)
(6.9)
Дл┐ в▒е╡ 0 6 k 6 n можно по инд│к╢ии (▒м. │п░. 6.1-12) доказа▓╝
о╢енк│
n
Cnk 6 kk (n ;n k)n;k ;
(6.10)
где ░ади │доб▒▓ва запи▒и полагаем 00 = 1. Дл┐ k = n, где 0 6 6
1, ╜▓а о╢енка може▓ б╗▓╝ запи▒ана как
n
Cnn 6 (n)n((1 n; )n)(1;)n
=
1
= 2nH ();
где вели╖ина
1
1;
1; !n
(6.11)
(6.12)
H () = ; lg ; (1 ; ) lg(1 ; )
(6.13)
наз╗вае▓▒┐ (двои╖ной) ╕еннонов▒кой ╜н▓░опией, по-англий▒ки (binary) entropy function. В ╜▓ой запи▒и м╗ полагаем 0 lg 0 = 0, ▓ак
╖▓о H (0) = H (1) = 0.
Уп░ажнени┐
6.1-1 Скол╝ко ▒│╣е▒▓в│е▓ k-под▒▓░ок ▒▓░оки длин╗ n? (Под▒▓░оки, на╖ина╛╣ие▒┐ ▒ ░азли╖н╗╡ пози╢ий ▒▓░оки, ▒╖и▓а╛▓▒┐
░азн╗ми.) каково об╣ее ╖и▒ло под▒▓░ок ▒▓░оки длин╗ n?
6.1-2 Б│лева ┤│нк╢и┐ (boolean function) ▒ n в╡одами и m в╗╡одами | ╜▓о ┤│нк╢и┐, оп░еделенна┐ на множе▒▓ве ftrue; falsegn ▒о
зна╖ени┐ми в множе▒▓ве ftrue; falsegm . Скол╝ко ▒│╣е▒▓в│е▓ ░азли╖н╗╡ б│лев╗╡ ┤│нк╢ий ▒ n в╡одами и одним в╗╡одом? А б│лев╗╡
┤│нк╢ий ▒ n в╡одами и m в╗╡одами?
6.1-3 Скол╝кими ▒по▒обами n (░азли╖н╗╡) п░о┤е▒▒о░ов мог│▓
░а▒положи▓╝▒┐ за к░│гл╗м ▒▓олом? Спо▒об╗, о▓ли╖а╛╣ие▒┐ пово░о▓ом, ▒╖и▓а╛▓▒┐ одинаков╗ми.
Под▒╖е▓ коли╖е▒▓в
107
6.1-4 Скол╝кими ▒по▒обами можно в╗б░а▓╝ ▓░и ░азли╖н╗╡ ╖и▒ла из множе▒▓ва f1; 2; : : :; 100g ▓ак, ╖▓об╗ и╡ ▒│мма б╗ла ╖е▓ной?
(По░┐док в╗бо░а ▒│╣е▒▓вен.)
6.1-5 Докажи▓е ▓ожде▒▓во
дл┐ 0 < k 6 n.
6.1-6
Cnk = nk Cnk;;11
(6.14)
Докажи▓е ▓ожде▒▓во
Cnk = n ;n k Cnk;1
дл┐ 0 6 k < n.
6.1-7 В╗би░а┐ k п░едме▓ов из n, можно о▓ме▓и▓╝ один из п░едме▓ов и ▒леди▓╝, в╗б░ан он или не▓. И▒пол╝з│┐ ╜▓о об▒▓о┐▓ел╝▒▓во,
докажи▓е, ╖▓о
Cnk = Cnk;1 + Cnk;;11 :
6.1-8 И▒пол╝з│┐ ░ез│л╝▓а▓ │п░ажнени┐ 6.1-7, ▒о▒▓ав╝▓е ▓абли╢│
дл┐ Cnk п░и n = 0; 1; 2; : : :; 6 и п░и k о▓ 0 до n в виде ░авнобед░енного ▓░е│гол╝ника (C00 ▒ве░╡│, C10 и C11 в ▒лед│╛╣ей ▒▓░оке,
и ▓ак далее). Э▓о▓ ▓░е│гол╝ник наз╗ва╛▓ ▓░е│гол╝ником Па▒кал┐
(Pascal's triangle).
6.1-9
Докажи▓е ░авен▒▓во
n
X
i=1
i = Cn2+1:
6.1-10 Покажи▓е, ╖▓о дл┐ ┤ик▒и░ованного n > 0 вели╖ина Cnk
до▒▓игае▓ наибол╝╕его (▒░еди в▒е╡ k о▓ 0 до n) зна╖ени┐ п░и k =
bn=2c и п░и k = dn=2e (▓ак ╖▓о дл┐ ╖е▓ного n мак▒им│м один, а
дл┐ не╖е▓ного | два ▒▓о┐╣и╡ ░┐дом).
6.1-11? Покажи▓е, ╖▓о дл┐ л╛б╗╡ n > 0, j > 0, k > 0, j + k 6 n
в╗полнено не░авен▒▓во
Cnj+k 6 Cnj Cnk;j
▒ помо╣╝╛ комбина▓о░н╗╡ ░а▒▒│ждений, а ▓акже ▒ и▒пол╝зованием ┤о░м│л╗ (6.3). В каки╡ ▒л│╖а┐╡ ╜▓о не░авен▒▓во об░а╣ае▓▒┐ в
░авен▒▓во?
6.1-12? Докажи▓е по инд│к╢ии не░авен▒▓во (6.10) дл┐ k 6 n=2;
за▓ем, и▒пол╝з│┐ (6.4), докажи▓е его дл┐ в▒е╡ k 6 n.
108
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
6.1-13? И▒пол╝з│┐ ┤о░м│л│ С▓и░линга, докажи▓е, ╖▓о
2n
C n = p2 (1 + O(1=n)):
2n
n
(6.16)
6.1-14? Ди┤┤е░ен╢и░│┐ H (), покажи▓е, ╖▓о мак▒им│м до▒▓игае▓▒┐ п░и = 1=2. Чем│ ░авно H (1=2)?
6.2. Ве░о┐▓но▒▓╝
В ╜▓ом ░азделе м╗ напомним о▒новн╗е пон┐▓и┐ ▓ео░ии ве░о┐▓но▒▓ей.
П│▒▓╝ задано неко▓о░ое множе▒▓во S , ко▓о░ое м╗ наз╗ваем ве░о┐▓но▒▓н╗м п░о▒▓░ан▒▓вом (sample space), а его ╜лемен▓╗ | ╜лемен▓а░н╗ми ▒об╗▓и┐ми (elementary events). Кажд╗й из ╜лемен▓ов
може▓ ░а▒▒ма▓░ива▓╝▒┐ как возможн╗й и▒╡од и▒п╗▓ани┐. Нап░име░, б░о▒ани╛ дв│╡ ░азли╖н╗╡ моне▓ ▒оо▓ве▓▒▓в│е▓ ве░о┐▓но▒▓ное п░о▒▓░ан▒▓во, ▒оде░жа╣ее ╖е▓╗░е ▒▓░оки длин╗ 2, ▒о▒▓авленн╗е из ▒имволов о (о░ел) и ░ (░е╕ка):
S = fоо; о░; ░о; ░░g
Соб╗▓ием (event) наз╗вае▓▒┐ подмноже▒▓во п░о▒▓░ан▒▓ва S .
Нап░име░, в на╕ем п░име░е можно ░а▒▒мо▓░е▓╝ ▒об╗▓ие └в╗пал
один о░ел и одна ░е╕ка┴, ▓. е. множе▒▓во fо░; ░оg.
Соб╗▓ие S (в▒е ве░о┐▓но▒▓ное п░о▒▓░ан▒▓во) наз╗вае▓▒┐ до▒▓ове░н╗м ▒об╗▓ием (certain event), а ▒об╗▓ие ? наз╗вае▓▒┐ невозможн╗м ▒об╗▓ием (null event). Соб╗▓и┐ A и B наз╗ва╛▓▒┐ не▒овме▒▓н╗ми (mutually exclusive), е▒ли A \ B = ?. Каждое ╜лемен▓а░ное ▒об╗▓ие s 2 S м╗ б│дем ▒╖и▓а▓╝ ▒об╗▓ием fsg S . Разли╖н╗е
╜лемен▓а░н╗е ▒об╗▓и┐ не▒овме▒▓н╗.
Сказанное о▓но▒и▓▒┐ без огово░ок к ▒л│╖а╛ коне╖ного или
▒╖е▓ного множе▒▓ва S . В об╣ем ▒л│╖ае оп░еделение ▒ложнее, и ▒об╗▓и┐ми ▒╖и▓а╛▓▒┐ не в▒е подмноже▒▓ва множе▒▓ва S , а ▓ол╝ко
неко▓о░╗е. Они должн╗ об░азов╗ва▓╝ -алгеб░│ (пе░е▒е╖ение и
об║единение ▒╖е▓ного ╖и▒ла ▒об╗▓ий е▒▓╝ ▒об╗▓ие; дополнение ▒об╗▓и┐ е▒▓╝ ▒об╗▓ие). М╗ не б│дем гово░и▓╝ об ╜▓ом под░обно,
╡о▓┐ неко▓о░╗е п░име░╗ ▓акого ░ода (░авноме░ное ░а▒п░еделение
на о▓░езке) нам в▒▓░е▓┐▓▒┐.
Ак▒иом╗ ве░о┐▓но▒▓и
Ра▒п░еделением ве░о┐▓но▒▓ей (probability distribution) на ве░о┐▓но▒▓ном п░о▒▓░ан▒▓ве S наз╗вае▓▒┐ ┤│нк╢и┐ P, ▒▓ав┐╣а┐ в ▒оо▓ве▓▒▓вие каждом│ ▒об╗▓и╛ неко▓о░ое нео▓░и╢а▓ел╝ное ╖и▒ло
Ве░о┐▓но▒▓╝
109
и │довле▓во░┐╛╣а┐ ▒лед│╛╣им ▓░ебовани┐м (ак▒иомам ве░о┐▓но▒▓и, по-англий▒ки probability axioms):
1. PA > 0 дл┐ л╛бого ▒об╗▓и┐ A.
2. PfS g = 1.
3. PfA [ B g = PfAg + PfB g дл┐ л╛б╗╡ дв│╡ не▒овме▒▓н╗╡ ▒об╗▓ий A и B , и, более ▓ого,
Pf[i Ai g =
X
i
PfAi g:
дл┐ л╛бой (коне╖ной или ▒╖е▓ной) по▒ледова▓ел╝но▒▓и попа░но не▒овме▒▓н╗╡ ▒об╗▓ий A1; A2; : : :
Чи▒ло PfAg наз╗вае▓▒┐ ве░о┐▓но▒▓╝╛ ▒об╗▓и┐ A (probability of
the event A). Заме▓им, ╖▓о ак▒иома 2 ┤ик▒и░│е▓ └едини╢│ изме░ени┐┴ ве░о┐▓но▒▓ей, п░инима┐ за 1 ве░о┐▓но▒▓╝ до▒▓ове░ного ▒об╗▓и┐.
Во▓ не▒кол╝ко п░о▒▓╗╡ ▒лед▒▓вий из ╜▓и╡ ак▒иом. Невозможное
▒об╗▓ие имее▓ н│лев│╛ ве░о┐▓но▒▓╝ Pf?g = 0. Е▒ли A B , ▓о
PfAg 6 PfB g. И▒пол╝з│┐ обозна╖ение A дл┐ ▒об╗▓и┐ S ; A (дополнение к A), имеем PfAg = 1 ; PfAg. Дл┐ л╛б╗╡ дв│╡ ▒об╗▓ий A и
B имее▓ ме▒▓о
PfA [ B g = PfAg + PfB g ; PfA \ B g
(6.17)
6 PfAg + PfBg:
(6.18)
В на╕ем п░име░е ▒ б░о▒анием дв│╡ моне▓, положим ве░о┐▓но▒▓╝
каждого ╜лемен▓а░ного и▒╡ода ░авной 1=4. Тогда ве░о┐▓но▒▓╝ в╗падени┐ по к░айней ме░е одного о░ла б│де▓
Pfоо; о░; ░оg = Pfооg + Pfо░g + Pf░оg
= 3=4:
Ина╖е: ве░о┐▓но▒▓╝ ▓ого, ╖▓о не б│де▓ ни одного о░ла, ░авна
Pf░░g = 1=4, по╜▓ом│ ве░о┐▓но▒▓╝ по┐влени┐ по мен╝╕ей ме░е одного о░ла е▒▓╝ 1 ; 1=4 = 3=4.
6.2.1. Ди▒к░е▓ное ░а▒п░еделение ве░о┐▓но▒▓ей
Ра▒п░еделение ве░о┐▓но▒▓ей на коне╖ном или ▒╖е▓ном ве░о┐▓но▒▓ном п░о▒▓░ан▒▓ве наз╗вае▓▒┐ ди▒к░е▓н╗м (discrete). Дл┐ ▓аки╡ ░а▒п░еделений можно напи▒а▓╝
PfAg =
X
s2 A
Pfsg;
дл┐ л╛бого ▒об╗▓и┐ A, по▒кол╝к│ оно ┐вл┐е▓▒┐ об║единением не
более ╖ем ▒╖е▓ного множе▒▓ва не▒овме▒▓н╗╡ ╜лемен▓а░н╗╡ ▒об╗▓ий. Е▒ли множе▒▓во S коне╖но и в▒е ╜лемен▓╗ его ░авнове░о┐▓н╗,
110
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
▓о пол│╖ае▓▒┐ ░авноме░ное ░а▒п░еделение ве░о┐▓но▒▓ей (uniform
probability distribution) на коне╖ном множе▒▓ве S . П░и ╜▓ом ве░о┐▓но▒▓╝ л╛бого ▒об╗▓и┐, вкл╛╖а╛╣его в ▒еб┐ k ╜лемен▓а░н╗╡
и▒╡одов из jS j, ░авна k=jS j. В ▓аки╡ ▒л│╖а┐╡ гово░┐▓ └в╗бе░ем ▒л│╖айно ╜лемен▓ s 2 S ┴.
В ка╖е▒▓ве п░име░а ░а▒▒мо▓░им б░о▒ание ▒имме▓░и╖ной моне▓╗ (ipping a fair coin), дл┐ ко▓о░ой ве░о┐▓но▒▓и о░ла и ░е╕ки
одинаков╗ и ░авн╗ 1=2. Б░о▒а┐ ее n ░аз, м╗ п░и╡одим к ░авноме░ном│ ░а▒п░еделени╛ на п░о▒▓░ан▒▓ве S = fо; ░gn , ▒о▒▓о┐╣ем
из 2n ╜лемен▓ов. Каждое ╜лемен▓а░ное ▒об╗▓ие из S можно ░а▒▒ма▓░ива▓╝ как ▒▓░ок│ длин╗ n ╜лемен▓ов множе▒▓ва fо; ░g, и в▒е
▓акие ▒▓░оки име╛▓ ве░о┐▓но▒▓╝ 1=2n . Соб╗▓ие
A = fв╗пало k о░лов и n ; k ░е╕екg
е▒▓╝ подмноже▒▓во S и ▒о▒▓ои▓ из jAj = Cnk ╜лемен▓ов, ▓ак как
▒│╣е▒▓в│е▓ Cnk ▒▓░ок, ▒оде░жа╣и╡ ░овно k о░лов. Тем ▒ам╗м, ве░о┐▓но▒▓╝ ▒об╗▓и┐ A ░авна PfAg = Cnk =2n.
Неп░е░╗вное ░авноме░ное ░а▒п░еделение ве░о┐▓но▒▓ей
Б│дем ▒╖и▓а▓╝ ╜лемен▓а░н╗ми и▒╡одами ▓о╖ки неко▓о░ого о▓░езка [a; b]. Оп░еделим ве░о┐▓но▒▓╝ ▒об╗▓и┐ [c; d] [a; b] ┤о░м│лой
Pf[c; d]g = bd ;; ac :
В ╜▓ом ▒л│╖ае, как м╗ гово░или, надо ▒╖и▓а▓╝ ▒об╗▓и┐ми не в▒е
подмноже▒▓ва о▓░езка, а ▓ол╝ко неко▓о░╗е, ко▓о░╗е наз╗ва╛▓ изме░им╗ми. М╗ не п░иводим ▒оо▓ве▓▒▓в│╛╣и╡ оп░еделений, о▓▒╗ла┐ ╖и▓а▓ел┐ к л╛бом│ │╖ебник│ по ▓ео░ии ве░о┐▓но▒▓ей или по
▓ео░ии ме░╗.
Заме▓им, ╖▓о ве░о┐▓но▒▓╝ каждой ▓о╖ки ░авна 0, и по▓ом│ ве░о┐▓но▒▓╝ пол│ин▓е░вала (c; d] и ин▓е░вала (c; d) мог│▓ б╗▓╝ оп░еделен╗ ▓ой же ┤о░м│лой.
Такое ░а▒п░еделение ве░о┐▓но▒▓ей наз╗ва╛▓ неп░е░╗вн╗м ░авноме░н╗м ░а▒п░еделением (continuous uniform probability distribution).
У▒ловна┐ ве░о┐▓но▒▓╝ и незави▒имо▒▓╝
Иногда м╗ ░а▒полагаем ╖а▒▓и╖ной ин┤о░ма╢ией о ░ез│л╝▓а▓е
╜к▒пе░имен▓а. Нап░име░, п│▒▓╝ нам изве▒▓но, ╖▓о в ░ез│л╝▓а▓е
б░о▒ани┐ дв│╡ ▒имме▓░и╖н╗╡ моне▓ по к░айней ме░е одна из ни╡
в╗пала о░лом. Какова ве░о┐▓но▒▓╝ ▓ого, ╖▓о обе моне▓╗ в╗пали
о░лом? Изве▒▓на┐ нам ин┤о░ма╢и┐ позвол┐е▓ и▒кл╛╖и▓╝ ▒л│╖ай
Ве░о┐▓но▒▓╝
111
в╗падени┐ дв│╡ ░е╕ек. Т░и о▒▓ав╕и╡▒┐ и▒╡ода б│д│▓ ░авнове░о┐▓н╗, по╜▓ом│ ве░о┐▓но▒▓╝ каждого (в ▓ом ╖и▒ле и ин▓е░е▒│╛╣его
на▒) е▒▓╝ 1=3.
Э▓а иде┐ ┤о░мализ│е▓▒┐ в оп░еделении │▒ловной ве░о┐▓но▒▓и
(conditional probability) ▒об╗▓и┐ A п░и │▒ловии ▒об╗▓и┐ B ; она
обозна╖ае▓▒┐ PfAjB g и оп░едел┐е▓▒┐ ┤о░м│лой
(6.19)
PfAjB g = PfPAfB\ gB g ;
(м╗ п░едполагаем, ╖▓о PfB g 6= 0). Ин▓│и▓ивн╗й ▒м╗▒л пон┐▓ен:
▒об╗▓ие B п░ои▒╡оди▓ в неко▓о░ой доле ╜к▒пе░имен▓ов; м╗ ▒мо▓░им, как│╛ ╖а▒▓╝ ▒░еди ни╡ ▒о▒▓авл┐╛▓ ▓е, когда п░оизо╕ло е╣е
и ▒об╗▓ие A.
Два ▒об╗▓и┐ наз╗ва╛▓▒┐ незави▒им╗ми (independent), е▒ли
PfA \ B g = PfAgPfB g;
В ▒л│╖ае PfB g 6= 0 ╜▓о │▒ловие можно пе░епи▒а▓╝ как
PfAjB g = PfAg:
В на╕ем п░име░е ▒ дв│к░а▓н╗м б░о▒анием моне▓╗ по┐влени┐
о░ла п░и пе░вом и в▓о░ом б░о▒ании б│д│▓ незави▒им╗ми, ▓ак как
каждое ▒об╗▓ие имее▓ ве░о┐▓но▒▓╝ 1=2, а и╡ пе░е▒е╖ение (два о░ла) | 1=4. В ▓ом же п░име░е ▒об╗▓и┐ └пе░ва┐ моне▓а в╗пала о░лом┴ и └в╗пал один о░ел и одна ░е╕ка┴ ▓акже незави▒им╗, ╡о▓┐
╜▓о ▒░аз│ и не ▓ак ┐▒но. Но в ╜▓ом легко │беди▓╝▒┐ по оп░еделени╛:
ве░о┐▓но▒▓╝ каждого ▒об╗▓и┐ ░авна 1=2, ве░о┐▓но▒▓╝ и╡ пе░е▒е╖ени┐ ░авна 1=4. А во▓ ▒об╗▓и┐ └пе░ва┐ моне▓а в╗пала о░лом┴ и
└в╗пала ╡о▓╝ одна ░е╕ка┴ не б│д│▓ незави▒им╗ми.
Соб╗▓и┐ └пе░ва┐ моне▓а в╗пала о░лом┴ и └в▓о░а┐ моне▓а в╗пала
о░лом┴ пе░е▒▓ан│▓ б╗▓╝ незави▒им╗ми, е▒ли измени▓╝ ░а▒п░еделение ве░о┐▓но▒▓ей и ▒╖и▓а▓╝, ╖▓о моне▓╗ ▒клеен╗ и однов░еменно
в╗пада╛▓ либо о░лом, либо ░е╕кой (▓. е. ╖▓о комбина╢ии оо и ░░
име╛▓ ве░о┐▓но▒▓╝ 1=2).
Соб╗▓и┐ A1 ; A2; : : :; An наз╗ва╛▓▒┐ попа░но незави▒им╗ми
(pairwise independent), е▒ли
PfAi \ Aj g = PfAi gPfAj g
дл┐ в▒е╡ 1 6 i < j 6 n.
Соб╗▓и┐ A1 ; A2; ; An наз╗ва╛▓▒┐ незави▒им╗ми в ▒овок│пно▒▓и (mutually independent), е▒ли дл┐ л╛бого набо░а Ai ; Ai ; : : :; Aik
╜▓и╡ ▒об╗▓ий (зде▒╝ 2 6 k 6 n и 1 6 i1 < i2 < < ik 6 n) имее▓
ме▒▓о ░авен▒▓во
PfAi \ Ai \ : : : \ Aik g = PfAi gPfAi g PfAik g:
1
1
2
1
2
2
112
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Э▓о ▓░ебование | более ▒ил╝ное: нап░име░, в на╕ем п░име░е ▒об╗▓и┐ └пе░ва┐ моне▓а в╗пала о░лом┴, └в▓о░а┐ моне▓а в╗пала о░лом┴ и └две моне▓╗ в╗пали одинаково┴ попа░но незави▒им╗, но не
┐вл┐╛▓▒┐ незави▒им╗ми в ▒овок│пно▒▓и.
Фо░м│ла Байе▒а
Из оп░еделени┐ │▒ловной ве░о┐▓но▒▓и (6.19) ▒лед│е▓, ╖▓о дл┐
дв│╡ ▒об╗▓ий A и B , ве░о┐▓но▒▓и ко▓о░╗╡ положи▓ел╝н╗, в╗полнено ░авен▒▓во
PfA \ B g = PfB gPfAjB g
= PfAgPfB jAg:
(6.20)
В╗░ажа┐ о▓▒╛да PfAjB g, пол│╖аем ┤о░м│л│
PfAjB g = PfAPgfPBfBg jAg ;
(6.21)
изве▒▓н│╛ как ┤о░м│ла Байе▒а (Bayes's theorem). Э▓│ ┤о░м│л│
можно пе░епи▒а▓╝ ▓ак: по▒кол╝к│ B = (B \ A) [ (B \ A), а B \ A и
B \ A | не▒овме▒▓н╗е ▒об╗▓и┐, ▓о
PfB g = PfB \ Ag + PfB \ Ag
= PfAgPfB jAg + PfAgPfB jAg:
Под▒▓авл┐┐ данное в╗░ажение в ┤о░м│л│ (6.21), пол│╖аем д░│гой
ва░иан▓ ┤о░м│л╗ Байе▒а:
PfAgPfB jAg
PfAjB g =
:
PfAgPfB jAg + PfAgPfB jAg
Фо░м│ла Байе▒а помогае▓ в╗╖и▒л┐▓╝ │▒ловн╗е ве░о┐▓но▒▓и.
П│▒▓╝ │ на▒ е▒▓╝ две моне▓╗: одна ▒имме▓░и╖на┐, а д░│га┐ в▒егда
в╗падае▓ о░лом. М╗ ▒л│╖айн╗м об░азом в╗би░аем одн│ из дв│╡
моне▓, по▒ле ╖его ее дважд╗ подб░а▒╗ваем. П░едположим, ╖▓о оба
░аза в╗пали о░л╗. Какова ве░о┐▓но▒▓╝ ▓ого, ╖▓о б╗ла в╗б░ана
не▒имме▓░и╖на┐ моне▓а?
Ре╕им ╜▓│ зада╖│ п░и помо╣и ┤о░м│л╗ Байе▒а. П│▒▓╝ ▒об╗▓ие A | в╗бо░ не▒имме▓░и╖ной моне▓╗, ▒об╗▓ие B | в╗падение
в╗б░анной моне▓╗ о░лами дважд╗. Нам н│жно в╗╖и▒ли▓╝ PfAjB g.
Имеем: PfAg = 1=2, PfB jAg = 1, PfAg = 1=2 и PfB jAg = 1=4,
▒ледова▓ел╝но,
1
PfB jAg = (1=2) 1(1+=2)
(1=2) (1=4) = 4=5:
Ве░о┐▓но▒▓╝
113
Уп░ажнени┐
6.2-1
Докажи▓е не░авен▒▓во Б│л┐ (Boole's inequality):
PfA1 [ A2 [ : : : g 6 PfA1 g + PfA2 g + : : :
(6.22)
дл┐ л╛бой коне╖ной или ▒╖е▓ной по▒ледова▓ел╝но▒▓и ▒об╗▓ий
A1; A2; : : : .
6.2-2 П░о┤е▒▒о░ б░о▒ае▓ ▒имме▓░и╖н│╛ моне▓│, а ▒▓│ден▓ б░о▒ае▓ б░о▒ае▓ две ▒имме▓░и╖н╗е моне▓╗. Какова ве░о┐▓но▒▓╝ ▓ого,
╖▓о │ п░о┤е▒▒о░а в╗паде▓ бол╝╕е о░лов, ╖ем │ ▒▓│ден▓а? (В▒е ▓░и
б░о▒ани┐ незави▒им╗.)
6.2-3 Колод│ ка░▓ (▒ ╖и▒лами о▓ 1 до 10) ▓а▒│╛▓ и в╗нима╛▓
▓░и ка░▓╗. Какова ве░о┐▓но▒▓╝ ▓ого, ╖▓о ╖и▒ла на ╜▓и╡ ка░▓а╡
б│д│▓ ид▓и в воз░а▒▓а╛╣ем по░┐дке?
6.2-4? Имее▓▒┐ не▒имме▓░и╖на┐ моне▓а, дл┐ ко▓о░ой ве░о┐▓но▒▓╝
в╗падени┐ о░ла е▒▓╝ неизве▒▓ное нам ╖и▒ло p (0 < p < 1). Покажи▓е, как ▒ ее помо╣╝╛ можно ими▓и░ова▓╝ ▒имме▓░и╖н│╛ моне▓│,
▒делав не▒кол╝ко б░о▒аний. (Указание: б░о▒╝▓е моне▓│ дважд╗; е▒ли ░ез│л╝▓а▓╗ ░азн╗е, дай▓е о▓ве▓; е▒ли одинаков╗е, пов▓о░┐й▓е
и▒п╗▓ание.)
6.2-5? Как ими▓и░ова▓╝ б░о▒ание моне▓╗ ▒ ве░о┐▓но▒▓╝╛ по┐влени┐ о░ла a=b, име┐ ▒имме▓░и╖н│╛ моне▓│, ко▓о░│╛ можно подб░а▒╗ва▓╝ не▒кол╝ко ░аз? (Чи▒ла a и b ╢ел╗е, 0 < a < b, ма▓ема▓и╖е▒кое ожидание ╖и▒ла б░о▒аний должно б╗▓╝ ог░ани╖ено ▒ве░╡│
полиномом о▓ lg b.)
6.2-6
Докажи▓е, ╖▓о
PfAjB g + PfAjB g = 1:
6.2-7
Докажи▓е, ╖▓о дл┐ л╛бого набо░а ▒об╗▓ий A1 ; A2; : : :; An ,
PfA1 \ A2 \ : : : \ An g =
= PfA1g PfA2jA1 g PfA3jA1 \ A2 g PfAn jA1 \ A2 \ \ An;1 g:
6.2-8? П░ид│май▓е множе▒▓во из n попа░но незави▒им╗╡ ▒об╗▓ий, дл┐ ко▓о░ого л╛бое подмноже▒▓во из k > 2 ▒об╗▓ий не б│де▓
незави▒им╗м в ▒овок│пно▒▓и.
6.2-9? Соб╗▓и┐ A и B ┐вл┐╛▓▒┐ │▒ловно незави▒им╗ми (conditionally independent) п░и │▒ловии ▒об╗▓и┐ C , е▒ли
PfA \ B jC g = PfAjC g PfB jC g:
114
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
П░ид│май▓е п░о▒▓ой (но не ▓░ивиал╝н╗й) п░име░ дв│╡ ▒об╗▓ий,
ко▓о░╗е не ┐вл┐╛▓▒┐ незави▒им╗ми, но │▒ловно незави▒им╗ п░и
│▒ловии неко▓о░ого ▓░е▓╝его ▒об╗▓и┐.
6.2-10? В╗ │╖а▒▓в│е▓е в иг░е, в ко▓о░ой п░из ▒к░╗▓ за одной из
▓░е╡ ╕и░м (и в╗иг░ае▓е п░из, е▒ли о▓гадае▓е, где). По▒ле ▓ого
как в╗ в╗б░али одн│ из ╕и░м, вед│╣ий иг░╗ о▓к░╗л одн│ из дв│╡
о▒▓ав╕и╡▒┐ ╕и░м, и оказало▒╝, ╖▓о ▓ам п░иза не▓. В ╜▓о▓ момен▓
можно помен┐▓╝ ▒вой в╗бо░, │казав на ▓░е▓╝╛ ╕и░м│. Как измен┐▓▒┐ ╕ан▒╗ на в╗иг░╗╕, е▒ли в╗ ▒делае▓е ╜▓о?
6.2-11? На╖ал╝ник ▓╛░╝м╗ в╗б░ал одного из ▓░е╡ закл╛╖енн╗╡
X , Y и Z , ╖▓об╗ о▓п│▒▓и▓╝ его на вол╛. О▒▓ал╝н╗е двое б│д│▓ казнен╗. С▓░аж знае▓, к▓о из ▓░ои╡ в╗йде▓ на ▒вобод│, но не имее▓
п░ава ▒ооб╣а▓╝ никаком│ из │зников ин┤о░ма╢и╛ о его ▒│д╝бе.
Закл╛╖енн╗й X п░о▒и▓ ▒▓░ажа назва▓╝ ем│ им┐ одного из закл╛╖енн╗╡ Y или Z , ко▓о░╗й б│де▓ казнен, об║┐▒н┐┐, ╖▓о ем│ и
▓ак изве▒▓но, ╖▓о один из ни╡ ▓о╖но б│де▓ казнен, а, зна╖и▓, он
не пол│╖и▓ никакой ин┤о░ма╢ии о ▒воей ▒│д╝бе. С▓░аж ▒ооб╣ае▓ X , ╖▓о Y б│де▓ казнен. Закл╛╖енн╗й X ░ад│е▓▒┐, ▒╖и▓а┐, ╖▓о
его ╕ан▒╗ о▒▓а▓╝▒┐ в жив╗╡ воз░о▒ли до 1=2 (о▒вобожден б│де▓
или он, или Z ). П░ав ли он?
6.3. Ди▒к░е▓н╗е ▒л│╖айн╗е вели╖ин╗
Ди▒к░е▓на┐ ▒л│╖айна┐ вели╖ина (discrete random variable) X |
╜▓о ┤│нк╢и┐, о▓об░ажа╛╣а┐ коне╖ное или ▒╖е▓ное ве░о┐▓но▒▓ное
п░о▒▓░ан▒▓во S в множе▒▓во дей▒▓ви▓ел╝н╗╡ ╖и▒ел. Каждом│ возможном│ и▒╡од│ и▒п╗▓ани┐ она ▒▓ави▓ в ▒оо▓ве▓▒▓вие дей▒▓ви▓ел╝ное ╖и▒ло. (Тем ▒ам╗м на множе▒▓ве зна╖ений ┤│нк╢ии X возникае▓ ░а▒п░еделение ве░о┐▓но▒▓ей.)
В ▓ео░ии ве░о┐▓но▒▓ей ░а▒▒ма▓░ива╛▓ и ▒л│╖айн╗е вели╖ин╗
на не▒╖е▓н╗╡ ве░о┐▓но▒▓н╗╡ п░о▒▓░ан▒▓ва╡, но ╜▓о ▒ложнее, и м╗
обойдем▒┐ без ни╡.
Дл┐ ▒л│╖айной вели╖ин╗ X и дей▒▓ви▓ел╝ного ╖и▒ла x оп░едел┐ем ▒об╗▓ие X = x как fs 2 S : X (s) = xg; ве░о┐▓но▒▓╝ ╜▓ого
▒об╗▓и┐ ░авна
PfX = xg =
Ф│нк╢и┐
X
fs2S :X (s)=xg
f (x) = PfX = xg
Pfsg:
наз╗вае▓▒┐ ┤│нк╢ией ░а▒п░еделени┐ ве░о┐▓но▒▓ей (probability
density function) ▒л│╖айной вели╖ин╗ X . Из ак▒иом ве░о┐▓но▒▓и
Ди▒к░е▓н╗е ▒л│╖айн╗е вели╖ин╗
115
P
▒лед│е▓, ╖▓о PfX = xg > 0 и x PfX = xg = 1.
Дл┐ п░име░а ░а▒▒мо▓░им б░о▒ание па░╗ об╗╖н╗╡ ╕е▒▓иг░анн╗╡ ко▒▓ей. Имее▓▒┐ 36 ╜лемен▓а░н╗╡ ▒об╗▓ий, ▒о▒▓авл┐╛╣и╡ ве░о┐▓но▒▓ное п░о▒▓░ан▒▓во. Б│дем п░едполага▓╝, ╖▓о в▒е они ░авнове░о┐▓н╗: Pfsg = 1=36. Оп░еделим ▒л│╖айн│╛ вели╖ин│ X , как
мак▒имал╝ное ╖и▒ло, в╗пав╕ее на одной из дв│╡ ко▒▓ей. Тогда
PfX = 3g = 5=36, ▓ак как X п░инимае▓ зна╖ение 3 п░и 5 ╜лемен▓а░н╗╡ и▒╡ода╡ (а именно, (1; 3), (2; 3), (3; 3), (3; 2) и (3; 1)).
Как п░авило, на одном и ▓ом же ве░о┐▓но▒▓ном п░о▒▓░ан▒▓ве
░а▒▒ма▓░ива╛▓ не▒кол╝ко ▒л│╖айн╗╡ вели╖ин. Е▒ли X и Y | ▒л│╖айн╗е вели╖ин╗, ▓о ┤│нк╢и┐
f (x; y) = PfX = x; Y = y g
наз╗вае▓▒┐ ┤│нк╢ией ▒овме▒▓ного ░а▒п░еделени┐ ве░о┐▓но▒▓ей
(joint probability density function) вели╖ин X и Y . Дл┐ ┤ик▒и░ованного зна╖ени┐ y
PfY = y g =
X
x
PfX = x; Y = y g:
Аналоги╖но, дл┐ ┤ик▒и░ованного зна╖ени┐ x,
PfX = xg =
X
y
PfX = x; Y = y g:
И▒пол╝з│┐ оп░еделение │▒ловной ве░о┐▓но▒▓и (6.19), можно запи▒а▓╝
PfX = xjY = y g = PfXP=fYx;=Yy g= y g :
Две ▒л│╖айн╗е вели╖ин╗ наз╗ва╛▓▒┐ незави▒им╗ми (independent),
е▒ли ▒об╗▓и┐ X = x и Y = y ┐вл┐╛▓▒┐ незави▒им╗ми дл┐ л╛б╗╡
зна╖ений x и y , д░│гими ▒ловами, е▒ли е▒ли PfX = x; Y = y g =
PfX = xgPfY = y g дл┐ в▒е╡ x и y .
Склад╗ва┐ и │множа┐ ▒л│╖айн╗е вели╖ин╗, оп░еделенн╗е на одном и ▓ом же ве░о┐▓но▒▓ном п░о▒▓░ан▒▓ве, м╗ пол│╖аем нов╗е
▒л│╖айн╗е вели╖ин╗, оп░еделенн╗е на ▓ом же п░о▒▓░ан▒▓ве.
Ма▓ема▓и╖е▒кое ожидание ▒л│╖айной вели╖ин╗
П░о▒▓ей╕а┐ и наиболее ╖а▒▓о и▒пол╝з│ема┐ ╡а░ак▓е░и▒▓ика ▒л│╖айной вели╖ин╗ | ╜▓о ее ▒░еднее (mean), наз╗ваемое ▓акже ма▓ема▓и╖е▒ким ожиданием (expected value, expectation). Дл┐ ди▒к░е▓ной ▒л│╖айной вели╖ин╗ X оно оп░едел┐е▓▒┐ ┤о░м│лой
M[X ] =
X
x
xPfX = xg;
(6.23)
116
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
и ▒│╣е▒▓в│е▓, когда ╜▓о▓ ░┐д имее▓ коне╖ное ╖и▒ло ╖ленов или
аб▒ол╛▓но ▒╡оди▓▒┐. Иногда ма▓ема▓и╖е▒кое ожидание обозна╖ае▓▒┐ X или п░о▒▓о , е▒ли из кон▓ек▒▓а ┐▒но, о какой ▒л│╖айной
вели╖ине иде▓ ░е╖╝.
П│▒▓╝ в иг░е дважд╗ б░о▒а╛▓ ▒имме▓░и╖н│╛ моне▓│; в╗ пол│╖ае▓е 3 ░│бл┐ за каждого в╗пав╕его о░ла и о▓дае▓е 2 ░│бл┐ за
кажд│╛ в╗пав╕│╛ ░е╕к│. В╗иг░╗╕ X б│де▓ ▒л│╖айной вели╖иной, и ее ма▓ема▓и╖е▒кое ожидание б│де▓ ░авно
M[X ] = 6 Pf2 о░лаg + 1 Pf1 о░ел и 1 ░е╕каg ; 4 Pf2 ░е╕киg
= 6(1=4) + 1(1=2) ; 4(1=4)
= 1:
Ма▓ема▓и╖е▒кое ожидание ▒│мм╗ ▒л│╖айн╗╡ вели╖ин ░авно ▒│мме и╡ ожиданий:
M[X + Y ] = M[X ] + M[Y ];
(6.24)
е▒ли M[X ] и M[Y ] оп░еделен╗. Э▓о п░авило можно ░а▒п░о▒▓░ани▓╝
на л╛б╗е коне╖н╗е и аб▒ол╛▓но ▒╡од┐╣ие▒┐ бе▒коне╖н╗е ▒│мм╗.
П│▒▓╝ X | ▒л│╖айна┐ вели╖ина, а g (x) | п░оизвол╝на┐ ┤│нк╢и┐.
Тогда можно ░а▒▒мо▓░е▓╝ ▒л│╖айн│╛ вели╖ин│ g (X ) (на ▓ом же
ве░о┐▓но▒▓ном п░о▒▓░ан▒▓ве). Ее ма▓ема▓и╖е▒кое ожидание (е▒ли
оно оп░еделено) можно най▓и по ┤о░м│ле
M[g (X )] =
X
x
g (x)PfX = xg:
Дл┐ ┤│нк╢ии g (x) = ax, где a | неко▓о░а┐ кон▒▓ан▓а, имеем
M[aX ] = aM[X ]:
(6.25)
Два по▒ледни╡ ▒вой▒▓ва можно ▒комбини░ова▓╝ в одной ┤о░м│ле
(▒вой▒▓во линейно▒▓и): дл┐ л╛б╗╡ дв│╡ ▒л│╖айн╗╡ вели╖ин X и Y
и л╛бой кон▒▓ан▓╗ a
M[aX + Y ] = aM[X ] + M[Y ]:
(6.26)
Е▒ли две ▒л│╖айн╗е вели╖ин╗ X и Y незави▒им╗ и и╡ ма▓ема▓и╖е▒кие ожидани┐ оп░еделен╗, ▓о
M[XY ] =
=
XX
x
y
x
y
XX
=(
X
x
xy PfX = x; Y = y g
xy PfX = xgPfY = yg
X
xPfX = xg)(
= M[X ]M[Y ]:
y
y PfY = y g)
Ди▒к░е▓н╗е ▒л│╖айн╗е вели╖ин╗
117
Более об╣о, е▒ли имее▓▒┐ n незави▒им╗╡ в ▒овок│пно▒▓и ▒л│╖айн╗╡ вели╖ин X1; X2; : : :; Xn, име╛╣и╡ ма▓ема▓и╖е▒кие ожидани┐,
▓о
M[X1X2 Xn ] = M[X1]M[X2] M[Xn ]:
(6.27)
Е▒ли ▒л│╖айна┐ вели╖ина X може▓ п░инима▓╝ ▓ол╝ко на▓│░ал╝н╗е зна╖ени┐ (0; 1; 2; : : : ), ▓о имее▓▒┐ к░а▒ива┐ ┤о░м│ла дл┐ ее ма▓ема▓и╖е▒кого ожидани┐:
M[X ] =
=
=
1
X
i=0
1
X
i=0
1
X
i=1
iPfX = ig
i(PfX > ig ; PfX > i + 1g)
PfX > ig:
(6.28)
В ▒амом деле, кажд╗й ╖лен PfX > ig п░и▒│▓▒▓в│е▓ в ▒│мме i ░аз
▒о знаком пл╛▒ и i ; 1 ░аз ▒о знаком мин│▒ (и▒кл╛╖ение ▒о▒▓авл┐е▓
╖лен PfX > 0g, вов▒е о▓▒│▓▒▓в│╛╣ий в ▒│мме).
Ди▒пе░▒и┐ и ▒▓анда░▓ное о▓клонение
Ди▒пе░▒и┐ (variance) ▒л│╖айной вели╖ин╗ X ▒ ма▓ема▓и╖е▒ким
ожиданием M[X ] оп░едел┐е▓▒┐ как
D[X ] = M[(X ; M[X ])2]
= M[X 2 ; 2X M[X ] + M2[X ]]
= M[X 2] ; 2M[X M[X ]] + M2[X ]
= M[X 2] ; 2M2[X ] + M2[X ]
= M[X 2] ; M2[X ]:
(6.29)
Пе░е╡од╗ M[M2[X ]] = M2 [X ] и M[X M[X ]] = M2 [X ] законн╗, ▓ак
как M[X ] | ╜▓о ╖и▒ло (а не ▒л│╖айна┐ вели╖ина) и можно ▒о▒ла▓╝▒┐
на (6.25), полага┐ a = M[X ]. Фо░м│л│ (6.29) можно пе░епи▒а▓╝ ▓ак:
M[X 2] = D[X ] + M2 [X ]
(6.30)
П░и │вели╖ении ▒л│╖айной вели╖ин╗ в a ░аз ее ди▒пе░▒и┐ ░а▒▓е▓
в a2 ░аз:
D[aX ] = a2D[X ]:
Е▒ли X и Y незави▒им╗, ▓о
D[X + Y ] = D[X ] + D[Y ]:
118
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Более об╣о, ди▒пе░▒и┐ ▒│мм╗ n попа░но незави▒им╗╡ ▒л│╖айн╗╡
вели╖ин X1; : : :; Xn ░авна ▒│мме и╡ ди▒пе░▒ий:
D
"
n
X
i=1
#
Xi =
n
X
i=1
D[Xi]:
(6.31)
С▓анда░▓н╗м о▓клонением (standard deviation) ▒л│╖айной вели╖ин╗ X наз╗вае▓▒┐ квад░а▓н╗й ко░ен╝ из ее ди▒пе░▒ии. Ча▒▓о
▒▓анда░▓ное о▓клонение ▒л│╖айной вели╖ин╗ обозна╖ае▓▒┐ X или
п░о▒▓о , е▒ли из кон▓ек▒▓а ┐▒но, о какой ▒л│╖айной вели╖ине иде▓
░е╖╝. В ╜▓ой запи▒и ди▒пе░▒и┐ обозна╖ае▓▒┐ 2 .
Уп░ажнени┐
6.3-1 Подб░а▒╗ва╛▓▒┐ две об╗╖н╗е ╕е▒▓иг░анн╗е ко▒▓и. Чем│
░авно ма▓ема▓и╖е▒кое ожидание ▒│мм╗ в╗пав╕и╡ ╖и▒ел? Чем│
░авно ма▓ема▓и╖е▒кое ожидание мак▒им│ма из дв│╡ в╗пав╕и╡ ╖и▒ел?
6.3-2 В ма▒▒иве A[1 : :n] имее▓▒┐ n ░а▒положенн╗╡ в ▒л│╖айном
по░┐дке ░азли╖н╗╡ ╖и▒ел; в▒е возможн╗е ░а▒положени┐ ╖и▒ел ░авнове░о┐▓н╗. Чем│ ░авно ма▓ема▓и╖е▒кое ожидание номе░а ме▒▓а,
на ко▓о░ом на╡оди▓▒┐ мак▒имал╝н╗й ╜лемен▓? Номе░а ме▒▓а, на
ко▓о░ом на╡оди▓▒┐ минимал╝н╗й ╜лемен▓?
6.3-3 В ко░обо╖ке лежа▓ ▓░и иг░ал╝н╗е ко▒▓и. Иг░ок ▒▓ави▓
долла░ на одно из ╖и▒ел о▓ 1 до 6. Ко░обо╖ка в▒▓░┐╡ивае▓▒┐ и о▓к░╗вае▓▒┐. Е▒ли названное иг░оком ╖и▒ло не в╗пало вов▒е, ▓о он
п░оиг░╗вае▓ ▒вой долла░. В п░о▓ивном ▒л│╖ае он ▒о╡░ан┐е▓ его и
пол│╖ае▓ дополни▓ел╝но ▒▓ол╝ко долла░ов, ▒кол╝ко в╗пало ко▒▓ей
▒ названн╗м им ╖и▒лом. Скол╝ко в ▒░еднем в╗иг░╗вае▓ иг░ок в
одной па░▓ии?
6.3-4? П│▒▓╝ X и Y | незави▒им╗е ▒л│╖айн╗е вели╖ин╗. Покажи▓е, ╖▓о f (X ) и g (Y ) ▓акже незави▒им╗ дл┐ л╛б╗╡ ┤│нк╢ий f
и g.
6.3-5? П│▒▓╝ X | нео▓░и╢а▓ел╝на┐ ▒л│╖айна┐ вели╖ина ▒ ма▓ема▓и╖е▒ким ожиданием M[X ]. Докажи▓е не░авен▒▓во Ма░кова
(Markov's inequality)
PfX > tg 6 M[X ]=t
(6.32)
дл┐ в▒е╡ t > 0. [Э▓о не░авен▒▓во наз╗ва╛▓ ▓акже не░авен▒▓вом
Чеб╗╕ева.]
6.3-6? П│▒▓╝ S | ве░о┐▓но▒▓ное п░о▒▓░ан▒▓во, на ко▓о░ом оп░еделен╗ ▒л│╖айн╗е вели╖ин╗ X и X 0, п░и╖ем X (s) > X 0(s) дл┐ в▒е╡
Геоме▓░и╖е▒кое и биномиал╝ное ░а▒п░еделени┐
119
s 2 S . Докажи▓е, ╖▓о дл┐ л╛бого дей▒▓ви▓ел╝ного ╖и▒ла t,
PfX > tg > PfX 0 > tg:
6.3-7 Ч▓о бол╝╕е: ма▓ема▓и╖е▒кое ожидание квад░а▓а ▒л│╖айной вели╖ин╗ или квад░а▓ ее ма▓ема▓и╖е▒кого ожидани┐?
6.3-8 Покажи▓е, ╖▓о дл┐ ▒л│╖айной вели╖ин╗, п░инима╛╣ей
▓ол╝ко зна╖ени┐ 0 и 1, в╗полнено ░авен▒▓во D[X ] = M[X ]M[1 ; X ].
6.3-9 В╗веди▓е из оп░еделени┐ ди▒пе░▒ии (6.29), ╖▓о D[aX ] =
a2 D[X ].
6.4. Геоме▓░и╖е▒кое и биномиал╝ное ░а▒п░еделени┐
Б░о▒ание ▒имме▓░и╖ной моне▓╗ | ╖а▒▓н╗й ▒л│╖ай и▒п╗▓аний
по ▒╡еме Бе░н│лли (Bernouilli trials) в ко▓о░ой ░а▒▒ма▓??ивае▓▒┐
n незави▒им╗╡ в ▒овок│пно▒▓и и▒п╗▓аний, каждое из ко▓о░╗╡ имее▓ два возможн╗╡ и▒╡ода: │▒пе╡ (success), п░ои▒╡од┐╣ий ▒ ве░о┐▓но▒▓╝╛ p, и не│да╖│ (failure), име╛╣│╛ ве░о┐▓но▒▓╝ 1 ; p. Два
важн╗╡ ░а▒п░еделени┐ ве░о┐▓но▒▓ей | геоме▓░и╖е▒кое и биномиал╝ное | ▒в┐зан╗ ▒о ▒╡емой Бе░н│лли.
Геоме▓░и╖е▒кое ░а▒п░еделение
Ра▒▒мо▓░им ▒е░и╛ и▒п╗▓аний Бе░н│лли, в каждом из ко▓о░╗╡
│▒пе╡ имее▓ ве░о┐▓но▒▓╝ p (а не│да╖а имее▓ ве░о┐▓но▒▓╝ q = 1 ; p).
Какое и▒п╗▓ание б│де▓ пе░в╗м │▒пе╕н╗м? П│▒▓╝ ▒л│╖айна┐ вели╖ина X | его номе░; ╜▓а вели╖ина п░инимае▓ зна╖ени┐ 1; 2; : : : ,
п░и╖ем
PfX = kg = q k;1 p
(6.33)
(пе░в╗й │▒пе╡ б│де▓ име▓╝ номе░ k, е▒ли k ; 1 и▒п╗▓аний до него
б╗ли не│да╖н╗ми, а k-е оказало▒╝ │да╖н╗м). Ра▒п░еделение ве░о┐▓но▒▓ей, заданное ┤о░м│лой (6.33), наз╗вае▓▒┐ геоме▓░и╖е▒ким
░а▒п░еделением (geometric distribution). Оно показано на ░и▒. 6.1.
П░едполага┐, ╖▓о p < 1, найдем ма▓ема▓и╖е▒кое ожидание геоме▓░и╖е▒кого ░а▒п░еделени┐, и▒пол╝з│┐ ┤о░м│л│ (3.6):
1
X
1
X
p
q = 1=p:
k=p
M[X ] =
kq
(6.34)
q k=0
q (1 ; q)2
k=1
Д░│гими ▒ловами, н│жно в ▒░еднем 1=p ░аз п░ове▒▓и и▒п╗▓ание,
kqk;1 p =
╖▓об╗ доби▓╝▒┐ │▒пе╡а, ╖▓о е▒▓е▒▓венно ожида▓╝, по▒кол╝к│ ве░о┐▓но▒▓╝ │▒пе╡а ░авна p. Ди▒пе░▒и╛ можно в╗╖и▒ли▓╝ аналоги╖н╗м
120
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Геоме▓░и╖е▒кое ░а▒п░еделение ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p = 1=3 и ве░о┐▓но▒▓╝╛ не│да╖и q = 1 ; p. Ма▓ема▓и╖е▒кое ожидание ░авно 1=p = 3.
Ри▒. 6.1
об░азом; пол│╖и▓▒┐, ╖▓о
D[X ] = q=p2 :
(6.35)
П░име░: б│дем б░о▒а▓╝ па░│ ко▒▓ей, пока в ▒│мме не в╗паде▓
или ▒ем╝ или одиннад╢а▓╝. Дл┐ одного ╜к▒пе░имен▓а е▒▓╝ 36 возможн╗╡ и▒╡одов, в 6 из ни╡ пол│╖ае▓▒┐ ▒ем╝ и в 2 пол│╖ае▓▒┐ одиннад╢а▓╝. По╜▓ом│ ве░о┐▓но▒▓╝ │▒пе╡а p ░авна 8=36 = 2=9, и нам
в ▒░еднем п░иде▓▒┐ 1=p = 9=2 = 4;5 ░аза б░о▒и▓╝ ко▒▓и, ╖▓об╗
в╗пало ▒ем╝ или одиннад╢а▓╝.
Биномиал╝ное ░а▒п░еделение
Ра▒▒мо▓░им n и▒п╗▓аний по ▒╡еме Бе░н│лли ▒ ве░о┐▓но▒▓╝╛
│▒пе╡а p и ве░о┐▓но▒▓╝╛ не│да╖и q = 1 ; p. П│▒▓╝ ▒л│╖айна┐ вели╖ина X | коли╖е▒▓во │▒пе╡ов в n и▒п╗▓ани┐╡. Ее зна╖ение може▓
б╗▓╝ ░авно 0; 1; : : :; n, и
PfX = kg = Cnk pk (1 ; p)n;k ;
(6.36)
дл┐ л╛бого k = 0; 1; : : :; n ▓ак как имее▓▒┐ Cnk ▒по▒обов в╗б░а▓╝
из n и▒п╗▓аний k │да╖н╗╡, и ве░о┐▓но▒▓╝ каждого ▓акого ▒л│╖а┐
б│де▓ pk q n;k . Ра▒п░еделение (6.36) наз╗ва╛▓ биномиал╝н╗м (binomial distribution). Дл┐ биномиал╝н╗╡ ░а▒п░еделений м╗ и▒пол╝з│ем
Геоме▓░и╖е▒кое и биномиал╝ное ░а▒п░еделени┐
121
Ри▒. 6.2 Биномиал╝ное ░а▒п░еделение b(k ; 15; 1=3), по░ождаемое n = 15 и▒п╗▓ани┐ми по ▒╡еме Бе░н│лли, каждое из ко▓о░╗╡ имее▓ ве░о┐▓но▒▓╝ │▒пе╡а
p = 1=3. Ма▓ема▓и╖е▒кое ожидание ░авно np = 5.
обозна╖ение
b(k; n; p) = Cnk pk (1 ; p)n;k :
(6.37)
П░име░ биномиал╝ного ░а▒п░еделени┐ показан на ░и▒│нке 6.2.
Название └биномиал╝ное┴ ▒в┐зано ▒ ▓ем, ╖▓о п░ава┐ ╖а▒▓╝ ┤о░м│л╗ (6.37) | ╜▓о k-й ╖лен бинома Н╝╛▓она (p + q )n . В▒помина┐, ╖▓о
p + q = 1, пол│╖аем
n
X
k=0
b(k; n; p) = 1;
(6.38)
как и должно б╗▓╝ (ак▒иома 2).
Ма▓ема▓и╖е▒кое ожидание дл┐ ▒л│╖айной вели╖ин╗, име╛╣ей
биномиал╝ное ░а▒п░еделение, можно в╗╖и▒ли▓╝ ▒ помо╣╝╛ (6.14)
и (6.38). П│▒▓╝ X | ▒л│╖айна┐ вели╖ина, име╛╣а┐ биномиал╝ное
░а▒п░еделение b(k; n; p). Положим q = 1 ; p. По оп░еделени╛ ма▓е-
122
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
ма▓и╖е▒кого ожидани┐, имеем
M[X ] =
=
n
X
k=0
n
X
k=1
= np
= np
= np
kb(k; n; p)
kCnk pk qn;k
n
X
k=1
nX
;1
k=0
nX
;1
k=0
Cnk;;11 pk;1q n;k
Cnk;1 pk q(n;1);k
b(k; n ; 1; p)
= np:
(6.39)
То▓ же ▒ам╗й ░ез│л╝▓а▓ по╖▓и без в╗╖и▒лений можно пол│╖и▓╝
▓ак: п│▒▓╝ Xi | коли╖е▒▓во │▒пе╡ов в i-м и▒п╗▓ании (ко▓о░ое
░авно 0 ▒ ве░о┐▓но▒▓╝╛ q и ░авно 1 ▒ ве░о┐▓но▒▓╝╛ p). Тогда
M[Xi] = p 1 + q 0 = p. О▒▓ае▓▒┐ заме▓и▓╝, ╖▓о X = X1 + : : : + Xn ,
и по▓ом│ по ▒вой▒▓в│ линейно▒▓и (6.26)
M[X ] = M
"
n
X
i=1
#
Xi =
n
X
i=1
M[Xi] =
n
X
i=1
p = np:
Подобн╗м об░азом можно в╗╖и▒ли▓╝ и ди▒пе░▒и╛. Из (6.29) ▒лед│е▓, ╖▓о D[Xi] = M[Xi2] ; M2[Xi ]. По▒кол╝к│ Xi п░инимае▓ ли╕╝
зна╖ени┐ 0 и 1, ▓о M[Xi2] = M[Xi] = p, и, зна╖и▓,
D[Xi] = p ; p2 = pq:
(6.40)
Тепе░╝ во▒пол╝з│ем▒┐ незави▒имо▒▓╝╛ и▒п╗▓аний и ┤о░м│лой
(6.31):
D[X ] = D
"
n
X
i=1
#
Xi =
n
X
i=1
D[Xi] =
n
X
i=1
pq = npq:
(6.41)
На ░и▒│нке 6.2 видно, ╖▓о b(k; n; p) как ┤│нк╢и┐ о▓ k ▒на╖ала
│вели╖ивае▓▒┐, пока k не до▒▓игне▓ зна╖ени┐ np, а за▓ем │мен╝╕ае▓▒┐. Э▓о можно п░ове░и▓╝, в╗╖и▒лив о▓но╕ение дв│╡ по▒ледова-
Геоме▓░и╖е▒кое и биномиал╝ное ░а▒п░еделени┐
123
▓ел╝н╗╡ ╖ленов:
b(k; n; p) = Cnk pk qn;k
b(k ; 1; n; p) Cnk;1pk;1 qn;k+1
= n!(k ; 1)!(n ; k + 1)!p
k!(n ; k)!n!q
= (n ; k + 1)p
kq
1)p ; k :
= 1 + (n + kq
(6.42)
Э▓о о▓но╕ение бол╝╕е 1, когда (n + 1)p ; k положи▓ел╝но, ▓ак
╖▓о b(k; n; p) > b(k ; 1; n; p) п░и k < (n + 1)p (┤│нк╢и┐ ░а▒▓е▓), и
b(k; n; p) < b(k ; 1; n; p) п░и k > (n + 1)p (┤│нк╢и┐ │б╗вае▓). Е▒ли
╖и▒ло (n + 1)p | ╢елое, ▓о ┤│нк╢и┐ имее▓ двойной мак▒им│м: в
▓о╖ка╡ (n +1)p и (n +1)p ; 1 = np ; q . В п░о▓ивном ▒л│╖ае мак▒им│м
один, и до▒▓игае▓▒┐ он в ╢елой ▓о╖ке k, лежа╣ей в диапазоне np ;
q < k < (n + 1)p.
След│╛╣а┐ лемма дае▓ ве░╡н╛╛ о╢енк│ дл┐ биномиал╝ного ░а▒п░еделени┐.
Лемма 6.1. П│▒▓╝ n > 0, 0 < p < 1, q = 1 ; p, 0 6 k 6 n. Тогда
n;k
k np
nq
b(k; n; p) 6 k
:
n;k
Доказа▓ел╝▒▓во. Согла▒но не░авен▒▓в│ (6.10), имеем
b(k; n; p) = Cnk pk qn;k
n;k
6 nk n ;n k
pk qn;k
np k nq n;k
= k
:
n;k
k Уп░ажнени┐
6.4-1 П░ове░╝▓е ак▒иом│ 2 дл┐ геоме▓░и╖е▒кого ░а▒п░еделени┐.
6.4-2 Скол╝ко ░аз в ▒░еднем н│жно б░о▒а▓╝ 6 ▒имме▓░и╖н╗╡ моне▓ до в╗падени┐ 3 о░лов и 3 ░е╕ек (в одном и▒п╗▓ании)?
6.4-3 Покажи▓е, ╖▓о b(k; n; p) = b(n ; k; n; q ), где q = 1 ; p.
6.4-4 Покажи▓е, ╖▓о мак▒им│м
биномиал╝ного ░а▒п░еделени┐
b(k; n; p) п░име░но ░авен 1=p2npq, где q = 1 ; p.
124
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
6.4-5? Покажи▓е, ╖▓о ве░о┐▓но▒▓╝ не пол│╖и▓╝ ни одного │▒пе╡а
в n незави▒им╗╡ и▒п╗▓ани┐╡ ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а 1=n п░име░но
░авна 1=e. За▓ем покажи▓е, ╖▓о ве░о┐▓но▒▓╝ пол│╖и▓╝ ░овно один
│▒пе╕н╗й и▒╡од ▓акже п░иблизи▓ел╝но ░авна 1=e.
6.4-6? П░о┤е▒▒о░ б░о▒ае▓ ▒имме▓░и╖н│╛ моне▓│ n ░аз, ▒▓│ден▓
делае▓ ▓о же ▒амое. Покажи▓е, ╖▓о ве░о┐▓но▒▓╝ ▓ого, ╖▓о ╖и▒ло о░лов │ ни╡ б│де▓ одинаково, ░авна C2nn =4n . (Указание. Е▒ли ▒╖и▓а▓╝
о░ла │▒пе╡ом п░о┤е▒▒о░а и не│да╖ей ▒▓│ден▓а, ▓о и▒комое ▒об╗▓ие
е▒▓╝ по┐вление n │▒пе╡ов ▒░еди 2n и▒п╗▓аний.) В╗веди▓е о▓▒╛да
▓ожде▒▓во
n
X
(Cnk )2 = C2nn :
k=0
6.4-7? Покажи▓е, ╖▓о дл┐ 0 6 k 6 n,
b(k; n; 1=2) 6 2nH (k=n);n;
где H (x) | ┤│нк╢и┐ ╜н▓░опии (6.13).
6.4-8? Ра▒▒мо▓░им n незави▒им╗╡ и▒п╗▓аний. П│▒▓╝ pi | ве░о┐▓но▒▓╝ │▒пе╡а в i-м и▒п╗▓ании, а ▒л│╖айна┐ вели╖ина X е▒▓╝ коли╖е▒▓во │▒пе╡ов во в▒е╡ ╜▓и╡ и▒п╗▓ани┐╡. П│▒▓╝ p > pi дл┐ в▒е╡
i = 1; 2; : : :; n. Докажи▓е, ╖▓о
PfX < kg 6
k;1
X
i=0
b(i; n; p)
п░и л╛бом k = 1; 2; : : :; n.
6.4-9? Ра▒▒мо▓░им ▒л│╖айн│╛ вели╖ин│ X , ░авн│╛ ╖и▒л│ │▒пе╡ов
в n и▒п╗▓ани┐╡ ▒ ве░о┐▓но▒▓┐ми │▒пе╡а p1 ; : : :; pn . П│▒▓╝ X 0 |
аналоги╖на┐ ▒л│╖айна┐ вели╖ина, дл┐ ко▓о░ой ве░о┐▓но▒▓и │▒пе╡а
░авн╗ p01 ; : : :; p0n . П│▒▓╝ p0i > pi п░и в▒е╡ i. Докажи▓е, ╖▓о
PfX 0 > kg > PfX > kg:
п░и л╛бом k = 0; : : :; n
(Указание: можно ▒╖и▓а▓╝, ╖▓о ░ез│л╝▓а▓╗ в▓о░ой ▒е░ии и▒п╗▓аний пол│╖а╛▓▒┐ ▓ак: ▒на╖ала делае▓▒┐ пе░ва┐ ▒е░и┐, а по▓ом ее
░ез│л╝▓а▓╗ ко░░ек▓и░│╛▓▒┐ ▒л│╖айн╗м об░азом в ▒▓о░он│ │вели╖ени┐. И▒пол╝з│й▓е ░ез│л╝▓а▓ │п░ажнени┐ 3.3-6.)
6.5. Хво▒▓╗ биномиал╝ного ░а▒п░еделени┐
В о░игинале ▒о Во многи╡ зада╖а╡ важна ве░о┐▓но▒▓╝ не в ▓о╖но▒▓и k │▒пе╡ов
звездой! п░и биномиал╝ном ░а▒п░еделении, а не менее k │▒пе╡ов (или не бо-
Хво▒▓╗ биномиал╝ного ░а▒п░еделени┐
125
лее k │▒пе╡ов). В ╜▓ом ░азделе м╗ и▒▒лед│ем ╜▓о▓ воп░о▒, о╢енив
╡во▒▓╗ (tails) биномиал╝ного ░а▒п░еделени┐. Такие о╢енки показ╗ва╛▓, ╖▓о бол╝╕ие о▓клонени┐ ╖и▒ла │▒пе╡ов о▓ ма▓ема▓и╖е▒кого
ожидани┐ (np) малове░о┐▓н╗.
Сна╖ала пол│╖им о╢енк│ дл┐ п░авого ╡во▒▓а ░а▒п░еделени┐
b(k; n; p). О╢енки дл┐ левого ╡во▒▓а ▒имме▓░и╖н╗ (│▒пе╡и мен┐╛▓▒┐ ме▒▓ами ▒ не│да╖ами).
Тео░ема 6.2. П│▒▓╝ X | ╖и▒ло │▒пе╡ов в ▒е░ии из n незави▒им╗╡
и▒п╗▓аний ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p. Тогда
PfX > kg =
n
X
i=k
b(i; n; p) 6 Cnk pk :
Доказа▓ел╝▒▓во. Во▒пол╝з│ем▒┐ не░авен▒▓вом (6.15):
Cnk+i 6 Cnk Cni ;k :
Заме▓им, ╖▓о
PfX > kg =
=
=
6
n
X
i=k
nX
;k
i=0
nX
;k
i=0
nX
;k
i=0
b(i; n; p)
b(k + i; n; p)
Cnk+i pk+i(1 ; p)n;(k+i)
Cnk Cni ;k pk+i (1 ; p)n;(k+i)
= Cnk pk
= Cnk pk
nX
;k
i=0
nX
;k
i=0
Cni ;k pi (1 ; p)(n;k);i
b(i; n ; k; p)
= Cnk pk ;
;k b(i; n ; k; p) = 1 по ┤о░м│ле (6.38).
▓ак как ni=0
Пе░епи▒╗ва┐ ╜▓о │▓ве░ждение дл┐ левого ╡во▒▓а, пол│╖аем ▓акое
След▒▓вие 6.3. П│▒▓╝ X | ╖и▒ло │▒пе╡ов в ▒е░ии из n незави▒им╗╡
и▒п╗▓аний ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p. Тогда
P
PfX 6 kg =
k
X
i=0
b(i; n; p) 6 Cnn;k (1 ; p)n;k = Cnk (1 ; p)n;k :
126
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
На╕а ▒лед│╛╣а┐ о╢енка б│де▓ дл┐ левого ╡во▒▓а биномиал╝ного
░а▒п░еделени┐: ▒ │далением г░ани╢╗ о▓ ▓о╖ки мак▒им│ма ве░о┐▓но▒▓╝, п░и╡од┐╣а┐▒┐ на ╡во▒▓, ╜к▒понен╢иал╝но │мен╝╕ае▓▒┐.
Тео░ема 6.4. П│▒▓╝ X | ╖и▒ло │▒пе╡ов в ▒е░ии из n незави▒им╗╡
и▒п╗▓аний ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p и ве░о┐▓но▒▓╝╛ не│да╖и q =
1 ; p. Тогда
PfX < kg =
k ;1
X
i=0
b(i; n; p) < npkq; k b(k; n; p)
п░и 0 < k < np.
P ;1
Доказа▓ел╝▒▓во. М╗ ▒░авниваем ki=0
b(i; n; p) ▒ ▒│ммой геоме▓░и╖е▒кой п░ог░е▒▒ии (▒м. ░азд. 3.2). Дл┐ i = 1; 2; : : :; k ┤о░м│ла (6.42) дае▓
b(i ; 1; n; p) =
iq
i
<
b(i; n; p)
(n ; i + 1)p
n;i
Положив
q 6 k
p
n;k
q :
p
k
x = n ; k pq < 1;
видим, ╖▓о в по▒ледова▓ел╝но▒▓и b(i; n; p) п░и 0 6 i 6 k кажд╗й
╖лен мен╝╕е ▒лед│╛╣его, │множенного на x. По╜▓ом│ ин▓е░е▒│╛╣а┐ на▒ ▒│мма (о▓ i = 0 до i = k ; 1) мен╝╕е зна╖ени┐ b(k; n; p),
│множенного на x + x2 + x3 + : : : = x=(1 ; x):
k ;1
X
i=0
b(i; n; p) < 1 ;x x b(k; n; p) = npkq; k b(k; n; p):
П░и k 6 np=2 ко╜┤┤и╢иен▓ kq=(np ; k) не п░ево▒╡оди▓ 1, ▓ак
╖▓о b(k; n; p) ┐вл┐е▓▒┐ о╢енкой ▒ве░╡│ дл┐ ▒│мм╗ в▒е╡ п░ед╗д│╣и╡
╖ленов. Дл┐ п░име░а ░а▒▒мо▓░им n б░о▒аний ▒имме▓░и╖ной моне▓╗. Положим p = 1=2 и k = n=4. Тео░ема 6.4 га░ан▓и░│е▓, ╖▓о
ве░о┐▓но▒▓╝ по┐влени┐ менее ╖ем n=4 о░лов мен╝╕е ве░о┐▓но▒▓и
в╗падени┐ в ▓о╖но▒▓и n=4 о░лов. (Более ▓ого, дл┐ л╛бого положи▓ел╝ного r 6 n=4 ве░о┐▓но▒▓╝ по┐влени┐ менее r о░лов мен╝╕е
ве░о┐▓но▒▓и по┐влени┐ в ▓о╖но▒▓и r о░лов.) Тео░ема 6.4 може▓
б╗▓╝ и▒пол╝зована вме▒▓е ▒ о╢енками биномиал╝ного ░а▒п░еделени┐ ▒ве░╡│, нап░име░ ▒ леммой 6.1.
Симме▓░и╖на┐ о╢енка дл┐ п░авого ╡во▒▓а в╗гл┐ди▓ ▓ак:
Хво▒▓╗ биномиал╝ного ░а▒п░еделени┐
127
След▒▓вие 6.5. П│▒▓╝ X | ╖и▒ло │▒пе╡ов в ▒е░ии из n незави▒им╗╡
и▒п╗▓аний ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p и ве░о┐▓но▒▓╝╛ не│да╖и q =
1 ; p. Тогда
PfX > kg =
n
X
i=k+1
k)p b(k; n; p)
b(i; n; p) < (kn ;; np
п░и np < k < n.
В ▒лед│╛╣ей ▓ео░еме ░а▒▒ма▓░ивае▓▒┐ более об╣ий ▒л│╖ай: каждое из и▒п╗▓аний имее▓ ▒во╛ ве░о┐▓но▒▓╝ │▒пе╡а.
Тео░ема 6.6. Ра▒▒мо▓░им ▒е░и╛ из n незави▒им╗╡ и▒п╗▓аний; ве░о┐▓но▒▓╝ │▒пе╡а в i-м из ни╡ обозна╖им pi (ве░о┐▓но▒▓╝ не│да╖и qi ░авна 1;pi). П│▒▓╝ ▒л│╖айна┐ вели╖ина X е▒▓╝ ╖и▒ло │▒пе╡ов
в ▒е░ии, и п│▒▓╝ = M[X ]. Тогда дл┐ r > в╗полнено не░авен▒▓во
r
PfX ; > rg 6 e :
r
Доказа▓ел╝▒▓во. Дл┐ л╛бого > 0 ┤│нк╢и┐ ex ▒▓░ого воз░а▒▓ае▓ по x, по╜▓ом│
PfX ; > rg = Pfe(X ;) > er g;
Дл┐ о╢енки п░авой ╖а▒▓и м╗ и▒пол╝з│ем не░авен▒▓во Ма░кова (6.32) (а наиболее в╗годное зна╖ение подбе░ем позднее):
PfX ; > rg 6 M[e(X ;)]e;r :
(6.43)
О▒▓ае▓▒┐ о╢ени▓╝ M[e(X ;)] и в╗б░а▓╝ зна╖ение дл┐ . Ра▒▒мо▓░им ▒л│╖айн│╛ вели╖ин│ Xi , ░авн│╛ 1 в ▒л│╖ае │▒пе╡а i-го и▒п╗▓ани┐ и 0 в ▒л│╖ае его не│да╖и. Тогда
X=
и
X;=
n
X
i=1
Xi
n
X
i=1
(Xi ; pi ):
По▒кол╝к│ и▒п╗▓ани┐ незави▒им╗, ▓о вели╖ин╗ Xi незави▒им╗.
По╜▓ом│ вели╖ин╗ e(Xi ;pi )] незави▒им╗ (│п░. 6.3-4), и по ┤о░м│ле (6.27) можно пе░е▒▓ави▓╝ п░оизведение и ма▓ема▓и╖е▒кое ожидание:
M[e(X ;)] = M
"
n
Y
i=1
#
e(Xi;pi ) =
n
Y
i=1
M[e(Xi;pi ) ]:
128
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Кажд╗й множи▓ел╝ можно о╢ени▓╝ ▓ак:
M[e(Xi;pi ) ] = e(1;pi ) pi + e(0;pi ) qi
= pi eqi + qi e;pi
6 pie + 1
6 exp(pie);
(6.44)
где exp(x) обозна╖ае▓ ╜к▒понен╢иал╝н│╛ ┤│нк╢и╛: exp(x) = ex .
(М╗ во▒пол╝зовали▒╝ ▓ем, ╖▓о > 0, qi 6 1, eqi 6 e и e;pi 6 1,
а ▓акже не░авен▒▓вом (2.7).) Следова▓ел╝но,
n
Y
(
X
;
)
M[e
] 6 exp(pie ) = exp(e );
i=1
Pn
▓ак как = i=1 pi . Таким об░азом, из не░авен▒▓ва (6.43) ▒лед│е▓
о╢енка
PfX ; > rg 6 exp(e ; r):
В╗би░а┐ = ln(r=) (▒м. │п░. 6.5-6), пол│╖аем
(6.45)
PfX ; > rg 6 exp(eln(r=) ; r ln(r=))
er = e r :
= exp(r ; r ln(r=)) = (r=
)r
r
[Фо░мал╝но ╜▓а о╢енка п░именима п░и л╛бом r > , но ее имее▓
▒м╗▒л п░имен┐▓╝ ▓ол╝ко е▒ли r бол╝╕е более ╖ем в e ░аз, ина╖е
п░ава┐ ╖а▒▓╝ б│де▓ бол╝╕е едини╢╗.]
Тео░ем│ 6.6 можно п░имен┐▓╝ и дл┐ ▒л│╖а┐ ░авн╗╡ ве░о┐▓но▒▓ей. П░и ╜▓ом = M[X ] = np, и пол│╖ае▓▒┐ ▓акое
След▒▓вие 6.7. П│▒▓╝ X | ╖и▒ло │▒пе╡ов в ▒е░ии из n незави▒им╗╡
и▒п╗▓аний по ▒╡еме Бе░н│лли ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а p. Тогда
PfX ; np > rg =
n
X
r
b(k; n; p) 6 npe
:
r
k=dnp+re
Уп░ажнени┐
6.5-1? Ч▓о менее ве░о┐▓но: не пол│╖и▓╝ ни одного о░ла п░и n б░о▒ани┐╡ ▒имме▓░и╖ной моне▓╗, или пол│╖и▓╝ менее n о░лов п░и
4n б░о▒ани┐╡ ▒имме▓░и╖ной моне▓╗?
Ве░о┐▓но▒▓н╗й анализ
129
6.5-2? Покажи▓е, ╖▓о
k ;1
X
i=0
Cni ai < (a + 1)n na ; kk(a + 1) b(k; n; a=(a + 1))
п░и a > 0 и 0 < k < n.
6.5-3? Докажи▓е, ╖▓о п░и 0 < k < np, где 0 < p < 1 и q = 1 ; p,
в╗полнено не░авен▒▓во
k;1
X
i=0
k nq n;k
pi q n;i < npkq; k np
:
k
n;k
6.5-4? Покажи▓е, ╖▓о в │▒лови┐╡ ▓ео░ем╗ 6.6 в╗полнено не░авен▒▓во
r
(
n
;
)
e
Pf ; X > r g 6
;
r
а в │▒лови┐╡ ▒лед▒▓ви┐ 6.7 в╗полнено не░авен▒▓во
r
Pfnp ; X > rg 6 nqe
r :
6.5-5? Ра▒▒мо▓░им ▒е░и╛ из n незави▒им╗╡ и▒п╗▓аний; ве░о┐▓но▒▓╝ │▒пе╡а в i-м из ни╡ обозна╖им pi (ве░о┐▓но▒▓╝ не│да╖и qi
░авна 1 ; pi ). П│▒▓╝ ▒л│╖айна┐ вели╖ина X е▒▓╝ ╖и▒ло │▒пе╡ов в
▒е░ии, и п│▒▓╝ = M[X ]. Докажи▓е, ╖▓о п░и r > 0 в╗полнено
не░авен▒▓во
PfX ; > rg 6 e;r =2n :
2
6.5-6? Покажи▓е, ╖▓о п░и в╗б░анном зна╖ении = ln(r=) п░ава┐
╖а▒▓╝ не░авен▒▓ва (6.45) до▒▓игае▓ миним│ма.
6.6. Ве░о┐▓но▒▓н╗й анализ
В ╜▓ом ░азделе м╗ п░иведем ▓░и п░име░а п░именени┐ ░азоб░анн╗╡ ме▓одов о╢енки ве░о┐▓но▒▓ей. П░име░╗ ╜▓и ▓аков╗: ▒овпадение дней ░ождений │ дв│╡ ╖еловек ▒░еди данн╗╡ k ╖еловек, ░а▒п░еделение ╕а░ов по │░нам и │╖а▒▓ки пов▓о░┐╛╣и╡▒┐ и▒╡одов п░и
б░о▒ании моне▓╗.
6.6.1. Па░адок▒ дн┐ ░ождени┐
Па░адок▒ дн┐ ░ождени┐ (birthday paradox) ▒в┐зан ▒ ▓аким воп░о▒ом: ▒кол╝ко ╖еловек должно б╗▓╝ в комна▓е, ╖▓об╗ ▒ бол╝╕ой
130
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
ве░о┐▓но▒▓╝╛ ▒░еди ни╡ оказали▒╝ двое ░одив╕и╡▒┐ в один ден╝?
Па░адок▒ ▒о▒▓ои▓ в ▓ом, ╖▓о о▓ве▓ зна╖и▓ел╝но мен╝╕е ╖и▒ла дней
в год│, ╖▓о каже▓▒┐ ▒▓░анн╗м.
М╗ ▒╖и▓аем, ╖▓о в год│ 365 дней и ╖▓о дни ░ождени┐ k ╖еловек в╗би░а╛▓▒┐ ▒л│╖айно и незави▒имо д░│г о▓ д░│га. О╢еним
ве░о┐▓но▒▓╝ ▓ого, ╖▓о в▒е дни ░ождени┐ окаж│▓▒┐ ░азли╖н╗ми.
П│▒▓╝ ден╝ ░ождени┐ пе░вого │же в╗б░ан; ┐▒но, ╖▓о ден╝ ░ождени┐ в▓о░ого ▒овпаде▓ ▒ ним ▒ ве░о┐▓но▒▓╝╛ 1=365. П░и в╗б░анн╗╡
(и ░азли╖н╗╡) дн┐╡ ░ождени┐ пе░вого и в▓о░ого ве░о┐▓но▒▓╝, ╖▓о
│ ▓░е▓╝его ден╝ ░ождени┐ ▒овпаде▓ ▒ одним из │же име╛╣и╡▒┐, б│де▓ 2=365 и ▓ак далее. В и▓оге ве░о┐▓но▒▓╝ ▓ого, ╖▓о │ k ╖еловек
б│д│▓ ░азли╖н╗е дни ░ождени┐, е▒▓╝
2 ::: 1; k ; 1 :
1
1 ; 365
1 ; 365
365
Более ┤о░мал╝но, п│▒▓╝ n | ╖и▒ло дней в год│, и п│▒▓╝ Ai |
▒об╗▓ие └ден╝ ░ождени┐ (i + 1)-го ╖еловека не ▒овпадае▓ ▒ дн┐ми
░ождени┐ п░ед╗д│╣и╡ i ╖еловек┴. Тогда пе░е▒е╖ение Bi = A1 \
A2 \ : : : \ Ai;1 б│де▓ ▒об╗▓ием └│ пе░в╗╡ i ╖еловек дни ░ождени┐
░азли╖н╗┴.
По▒кол╝к│ Bk = Ak;1 \ Bk;1 , ▓о из ┤о░м│л╗ (6.20) пол│╖аем
▒оо▓но╕ение
PfBk g = PfBk;1 gPfAk;1 jBk;1 g:
(6.46)
На╖ал╝ное │▒ловие: PfB1 g = 1.
У▒ловна┐ ве░о┐▓но▒▓╝ PfAk;1 jBk;1 g ░авна (n ; k + 1)=n, ▓ак как
▒░еди n дней имее▓▒┐ n ; (k ; 1) ▒вободн╗╡ (по │▒лови╛ в▒е п░ед╗д│╣ие дни ░ождени┐ ░азли╖н╗). По╜▓ом│
PfBk g = PfB1 gPfA1jB1 gPfA2jB2 g PfAk;1 jBk;1 g
n
;
2
n
;
k
+
1
n
;
1
= 1 n
:::
n
n
1
= 1 1 ; n1 1 ; n2 t : : : 1 ; k ;
n
Тепе░╝ из не░авен▒▓ва 1 + x 6 ex (2.7) ▒лед│е▓, ╖▓о
PfBk g 6 e;1=n e;2=n e;(k;1)=n
= e;(1+2+3+:::+(k;1))=n
= e;k(k;1)=2n
6 1=2;
е▒ли ;k(k ; 1)=2n 6 ln(1=2). Ве░о┐▓но▒▓╝ ▓ого, ╖▓о в▒е k дней ░ождений ░азли╖н╗, не п░ево▒╡оди▓ 1=2 п░и k(k ; 1) > 2n ln 2. Ре╕а┐
Ве░о┐▓но▒▓н╗й анализ
131
p
╜▓о квад░а▓ное не░авен▒▓во, пол│╖аем k > (1 + 1 + (8 ln 2)n)=2.
Дл┐ n = 365, имеем k > 23. И▓ак, е▒ли в комна▓е на╡оди▓▒┐ не
менее 23 ╖еловек, ▓о ▒ ве░о┐▓но▒▓╝╛ не менее 1=2 какие-▓о двое
из ни╡ ░одили▒╝ в один и ▓о▓ же ден╝. На Ма░▒е, где год ▒о▒▓ои▓ из 669 ма░▒иан▒ки╡ ▒│▓ок, в комна▓е должно б╗▓╝ не менее 31
ма░▒ианина.
Д░│гой ме▓од анализа
Е▒▓╝ д░│гой, более п░о▒▓ой ▒по▒об пол│╖и▓╝ о╢енк│ дл┐ ░од▒▓венной зада╖и. Дл┐ каждой па░╗ л╛дей (i; j ), на╡од┐╣и╡▒┐ в комна▓е, ░а▒▒мо▓░им ▒л│╖айн│╛ вели╖ин│ Xij
(
Xij =
1; е▒ли i и j ░одили▒╝ в один ден╝,
0; в п░о▓ивном ▒л│╖ае.
Ве░о┐▓но▒▓╝ ▓ого, ╖▓о дни ░ождени┐ дв│╡ данн╗╡ л╛дей ▒овпада╛▓, ░авна 1=n, по╜▓ом│ по оп░еделени╛ ма▓ема▓и╖е▒кого ожидани┐ (6.23)
M[Xij ] = 1 (1=n) + 0 (1 ; 1=n) = 1=n
п░и i 6= k.
С│мма в▒е╡ Xij по в▒ем па░ам 1 6 i < j 6 k имее▓ ма▓ема▓и╖е▒кое ожидание, ░авное ▒│мме ожиданий дл┐ каждой па░╗; в▒его
па░ Ck2 = k(k ; 1)=2,p▓ак ╖▓о ╜▓а ▒│мма ░авна k(k ; 1)=2n. По╜▓ом│ н│жно п░име░но 2n ╖еловек, ╖▓об╗ ма▓ема▓и╖е▒кое ожидание
╖и▒ла па░ л╛дей ▒ ▒овпада╛╣ими дн┐ми ░ождени┐ ▒░авн┐ло▒╝ ▒ 1.
Нап░име░, п░и n = 365 и k = 28 ожидаемое ╖и▒ло па░ л╛дей, ░одив╕и╡▒┐ в один ден╝, ░авно (28 27)=(2 365) 1;0356. На Ма░▒е
дл┐ ╜▓ого ▓░еб│е▓▒┐ 38 ма░▒иан.
Заме▓им, ╖▓о м╗ о╢енивали
P две ░азн╗е ве╣и: (1) п░и каком k
ве░о┐▓но▒▓╝ ▒об╗▓и┐ X = Xij > 0 бол╝╕е 1=2, и (2) п░и каком k
ма▓ема▓и╖е▒кое ожидание X бол╝╕е 1. Фо░мал╝но ╜▓о ░азн╗е воп░о▒╗ (можно заме▓и▓╝ ли╕╝, ╖▓о е▒ли ве░о┐▓но▒▓╝ PfX > 0g >
1=2, ▓о M[X ] > 1=2, ▓ак как вели╖ина X п░инимае▓ ╢ел╗е зна╖ени┐).
p Однако и в ▓ом, и в д░│гом ▒л│╖ае о▓ве▓ имее▓ а▒имп▓о▓ик│
( n).
6.6.2. Ша░╗ и │░н╗
П│▒▓╝ имее▓▒┐ b │░н, п░он│ме░ованн╗╡ о▓ 1 до b. М╗ оп│▒каем в
ни╡ ╕а░╗: кажд╗й ╕а░ ▒ ░авной ве░о┐▓но▒▓╝╛ поме╣ае▓▒┐ в одн│
из │░н незави▒имо о▓ п░ед╗д│╣и╡. Таким об░азом, ▒ ▓о╖ки з░ени┐
л╛бой из │░н п░ои▒╡оди▓ по▒ледова▓ел╝но▒▓╝ и▒п╗▓аний по ▒╡еме
Бе░н│лли ▒ ве░о┐▓но▒▓╝╛ │▒пе╡а 1=b (│▒пе╡ | попадание ╕а░а в
132
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
╜▓│ │░н│). М╗ ░а▒▒мо▓░им не▒кол╝ко зада╖, ▒в┐занн╗╡ ▒ ▓аким
п░о╢е▒▒ом.
Скол╝ко ╕а░ов попаде▓ в данн│╛ │░н│? Коли╖е▒▓во ╕а░ов, попав╕и╡ в данн│╛ │░н│, опи▒╗вае▓▒┐ биномиал╝н╗м ░а▒п░еделением b(k; n; 1=b). Е▒ли в▒его б░о▒ае▓▒┐ n ╕а░ов, ▓о ма▓ема▓и╖е▒кое
ожидание ╖и▒ла попав╕и╡ в │░н│ ╕а░ов ░авно n=b.
Скол╝ко в ▒░еднем ╕а░ов н│жно б░о▒и▓╝, пока в данн│╛ │░н│
не попаде▓ ╕а░? Коли╖е▒▓во б░о▒ков до пе░вого попадани┐ в заданн│╛ │░н│ имее▓ геоме▓░и╖е▒кое ░а▒п░еделение ▒ ве░о┐▓но▒▓╝╛
1=b, по╜▓ом│ ожидаемое ╖и▒ло б░о▒ков е▒▓╝ 1=(1=b) = b.
Скол╝ко ╕а░ов н│жно б░о▒и▓╝, ╖▓об╗ кажда┐ │░на ▒оде░жала по мен╝╕ей ме░е один ╕а░? Б│дем ▒леди▓╝ за ╖и▒лом заполненн╗╡ │░н. Вна╖але оно ░авно н│л╛, а за▓ем │вели╖ивае▓▒┐, пока не до▒▓игне▓ b. Обозна╖им ╖е░ез ni ▒л│╖айн│╛ вели╖ин│, ░авн│╛ ╖и▒л│ поп╗▓ок, по▓░ебовав╕и╡▒┐, ╖▓об╗ ╜▓о ╖и▒ло воз░о▒ло
о▓ i ; 1 до i. (Таким об░азом, е▒ли в▓о░а┐ и ▓░е▓╝┐ поп╗▓ки п░и╕ли▒╝ на ▓│ же │░н│, ╖▓о пе░ва┐, а ╖е▓ве░▓а┐ | на д░│г│╛, ▓о
n1 = 1, n2 = 3.) Об╣ее ╖и▒ло поп╗▓ок до заполнени┐ в▒е╡ │░н ░авно n1 + n2 + : : : + nb . М╗ в╗╖и▒лим ма▓ема▓и╖е▒кое ожидание ╜▓ой
▒│мм╗ как ▒│мм│ ма▓ема▓и╖е▒ки╡ ожиданий. Когда м╗ ждем заполнени┐ i-й │░н╗, заполнено i ; 1 │░н из b и ве░о┐▓но▒▓╝ попа▒▓╝
в незаполненн│╛ ░авна (b ; i + 1)=b. По ▒вой▒▓в│ геоме▓░и╖е▒кого ░а▒п░еделени┐ ма▓ема▓и╖е▒кое ожидание вели╖ин╗ ni об░а▓но
╜▓ой ве░о┐▓но▒▓и и ░авно b=(b ; i +1). С│мма ╜▓и╡ вели╖ин по в▒ем i
░авна b(1=b + 1=(b ; 1) + : : : + 1=2 + 1) = b(ln b + O(1)). (См. ┤о░м│л│ (3.5) дл┐ ▒│мм╗ га░мони╖е▒кого ░┐да.)
И▓ак, ▓░еб│е▓▒┐ ▒дела▓╝ в ▒░еднем п░име░но b ln b б░о▒ков, п░ежде ╖ем в каждой │░не по┐ви▓▒┐ по ╕а░│.
6.6.3. У╖а▒▓ки пов▓о░┐╛╣и╡▒┐ и▒╡одов
П│▒▓╝ м╗ б░о▒аем ▒имме▓░и╖н│╛ моне▓│ n ░аз. Какое мак▒имал╝ное ╖и▒ло ид│╣и╡ под░┐д о░лов м╗ ожидаем │виде▓╝? Оказ╗вае▓▒┐, о▓ве▓ на ╜▓о▓ воп░о▒ | (lg n).
Сна╖ала докажем, ╖▓о ожидаема┐ длина наибол╝╕его │╖а▒▓ка
е▒▓╝ O(lg n). П│▒▓╝ ▒об╗▓ие Aik ▒о▒▓ои▓ в ▓ом, ╖▓о имее▓▒┐ │╖а▒▓ок
из k или более о░лов, на╖ина╛╣ий▒┐ ▒ i-го б░о▒ани┐. О╖евидно,
PfAik g = 1=2k :
(6.47)
П░и k = 2dlg ne ве░о┐▓но▒▓╝ по┐влени┐ k о░лов в данн╗╡ пози╢и┐╡ не п░ево▒╡оди▓ 1=n2 , а возможн╗╡ ме▒▓ (зна╖ений i) мен╝╕е
╖ем n, ▓ак ╖▓о ве░о┐▓но▒▓╝ по┐влени┐ k о░лов под░┐д (где-ниб│д╝)
не бол╝╕е 1=n. Тепе░╝ ма▓ема▓и╖е▒кое ожидание мак▒имал╝ного
╖и▒ла ид│╣и╡ под░┐д о░лов о╢енивае▓▒┐ ▓ак: ╜▓о ╖и▒ло никогда не
п░ево▒╡оди▓ n и по╖▓и в▒егда (▒ ве░о┐▓но▒▓╝╛ 1 ; 1=n) не п░ево▒╡оди▓ 2dlg ne, по╜▓ом│ ожидание не бол╝╕е d2 lg ne+n(1=n) = O(lg n).
Ве░о┐▓но▒▓н╗й анализ
133
Ве░о┐▓но▒▓╝ об░азовани┐ │╖а▒▓ка о░лов длин╗ не менее rdlg ne
б╗▒▓░о │мен╝╕ае▓▒┐ ▒ ░о▒▓ом r (дл┐ ┤ик▒и░ованной пози╢ии она
не бол╝╕е 2;r lg n = n;r , а дл┐ в▒е╡ пози╢ий в ▒│мме она не п░ево▒╡оди▓ n n;r = n;(r;1) .) Нап░име░, дл┐ n = 1000 ве░о┐▓но▒▓╝
по┐влени┐ │╖а▒▓ка из по мен╝╕ей ме░е 2dlg ne = 20 о░лов не п░ево▒╡оди▓ 1=n = 1=1000, а ве░о┐▓но▒▓╝ по┐влени┐ │╖а▒▓ка 3dlg ne = 30
о░лов не бол╝╕е 1=n2 = 10;6.
Тепе░╝ докажем о╢енк│ ▒низ│: ожидаема┐ длина наибол╝╕его │╖а▒▓ка е▒▓╝ (lg n). Дл┐ ╜▓ого ░а▒▒мо▓░им │╖а▒▓ки длин╗
b(lg n)=2c. Согла▒но (6.47) ве░о┐▓но▒▓╝ по┐влени┐
p ▓акого │╖а▒▓ка
в данной пози╢ии не мен╝╕е p1=2b(lg n)=2c > 1= n, а ве░о┐▓но▒▓╝ его
непо┐влени┐ не бол╝╕е 1 ; 1= n. Разоб╝ем в▒╛ по▒ледова▓ел╝но▒▓╝
б░о▒аний на непе░е▒ека╛╣ие▒┐ г░│пп╗, ▒о▒▓о┐╣ие из b(lg n)=2c
б░о▒аний кажда┐. (Не▒кол╝ко ╖ленов окаж│▓▒┐ вне г░│пп, е▒ли п░и
делении б│де▓ о▒▓а▓ок.) Чи▒ло г░│пп не мен╝╕е 2n= lg n ; 1.
Соб╗▓и┐ в ░азн╗╡ г░│ппа╡ незави▒им╗, по╜▓ом│ ве░о┐▓но▒▓╝
▓ого, ╖▓о ни одна из ╜▓и╡ г░│пп не ▒о▒▓ои▓ из одни╡ о░лов, не
бол╝╕е
p
p
(1 ; 1= n)2n= lg n;1 6 e;(2n= lg n;1)= n
= O(e; lg n ) = O(1=n)
М╗ и▒пол╝зовали
▓о▓ ┤ак▓, ╖▓о 1 + x 6 ex (2.7), а ▓акже ▓о, ╖▓о
p
(2n= lg n ; 1)= n > lg n ; O(1).
И▓ак, ▒ ве░о┐▓но▒▓╝╛ не менее 1 ; O(1=n) длина наибол╝╕его
│╖а▒▓ка под░┐д ид│╣и╡ о░лов не мен╝╕е blg n=2c = (lg n), по╜▓ом│ ма▓ема▓и╖е▒кое ожидание никак не мен╝╕е (1 ; 1=n)
(lg n) =
(lg n).
Уп░ажнени┐
6.6-1 Ша░╗ б░о▒а╛▓ в b │░н; в▒е б░о▒ани┐ незави▒им╗ д░│г о▓
д░│га, и кажд╗й ╕а░ ░авнове░о┐▓но попадае▓ в л╛б│╛ из │░н.
Чем│ ░авно ожидаемое коли╖е▒▓во б░о▒аний до момен▓а, когда в
одной из │░н окаже▓▒┐ два ╕а░а?
6.6-2? С│╣е▒▓венно ли дл┐ п░иведенного нами анализа па░адок▒а
дн┐ ░ождени┐ ▓о, ╖▓о дни ░ождени┐ незави▒им╗ в ▒овок│пно▒▓и,
или б╗ло б╗ до▒▓а▓о╖но и╡ попа░ной незави▒имо▒▓и? Об║┐▒ни▓е
▒вой о▓ве▓.
6.6-3? Скол╝ки╡ го▒▓ей надо п░игла▒и▓╝ на ве╖е░инк│, ╖▓об╗ ▒ко░ее в▒его оказало▒╝, ╖▓о по мен╝╕ей ме░е ▓░ое из ни╡ ░одили▒╝ в
один ден╝?
6.6-4? Как│╛ дол╛ ▒о▒▓авл┐╛▓ ин║ек╢ии ▒░еди в▒е╡ о▓об░ажений
k-╜лемен▓ного множе▒▓ва в n-╜лемен▓ное? Как ▒в┐зан ╜▓о▓ воп░о▒
134
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
▒ па░адок▒ом дн┐ ░ождени┐?
6.6-5? П│▒▓╝ n ╕а░ов б░о▒а╛▓ в n │░н, в▒е б░о▒ани┐ незави▒им╗,
попадани┐ каждого ╕а░а во в▒е │░н╗ ░авнове░о┐▓н╗. Чем│ ░авно
ожидаемое коли╖е▒▓во п│▒▓╗╡ │░н? А ожидаемое коли╖е▒▓во │░н,
в ко▓о░╗е попало в ▓о╖но▒▓и по одном│ ╕а░│?
6.6-6? Ул│╖╕и▓е нижн╛╛ о╢енк│ дл┐ длин │╖а▒▓ков из одни╡ о░лов, показав, ╖▓о п░и n б░о▒ани┐╡ ▒имме▓░и╖ной моне▓╗ │╖а▒▓ок
длин╗ lg n ; 2 lg lg n найде▓▒┐ ▒ ве░о┐▓но▒▓╝╛ не мен╝╕е 1 ; 1=n.
Зада╖и
6-1 Ша░╗ и │░н╗
В ╜▓ой зада╖е м╗ ▒╖и▓аем ╖и▒ло ▒по▒обов ░азложи▓╝ n ╕а░ов в
b ░азли╖н╗╡ │░н.
а. П░едположим, ╖▓о в▒е ╕а░╗ ░азн╗е, и╡ по░┐док вн│▓░и │░н╗
не │╖и▓╗вае▓▒┐. Докажи▓е, ╖▓о ▒│╣е▒▓в│е▓ bn ▒по▒обов поме▒▓и▓╝
╕а░╗ в │░н╗.
б. П░едположим, ╖▓о в▒е ╕а░╗ ░азн╗е и и╡ по░┐док в │░не ▒│╣е▒▓вен. Докажи▓е, ╖▓о ╕а░╗ можно ░азложи▓╝ по │░нам
(b + n ; 1)!=(b ; 1)! ▒по▒обами. (Указание: под▒╖и▓ай▓е ╖и▒ло ▒по▒обов ░а▒▒▓ави▓╝ n ░азли╖н╗╡ ╕а░ов и b ; 1 одинаков╗╡ ╖е░▓о╖ек
в ░┐д.)
в. П░едположим, ╖▓о в▒е ╕а░╗ одинаков╗, и и╡ по░┐док в │░не не
имее▓ зна╖ени┐. Покажи▓е, ╖▓о ╖и▒ло ▒по▒обов ░а▒кладки ╕а░ов
по │░нам ░авн┐е▓▒┐ Cbn+n;1 . (Указание: и▒пол╝з│й▓е ▓│ же иде╛,
╖▓о в п│нк▓е (б).)
г. Покажи▓е, ╖▓о е▒ли ╕а░╗ одинаков╗е и в л╛б│╛ │░н│ поме╣ае▓▒┐ не бол╝╕е одного ╕а░а, ▓о ╖и▒ло ▒по▒обов ░авно Cbn .
д. Покажи▓е, ╖▓о е▒ли ╕а░╗ одинаков╗е и в л╛бой │░не должен
оказа▓╝▒┐ по мен╝╕ей ме░е один ╕а░, ▓о ╖и▒ло ▒по▒обов ░а▒кладки
╕а░ов ░авно Cnb;;11 .
6-2 П░ог░амма в╗╖и▒лени┐ мак▒им│ма
Ра▒▒мо▓░им ▓ак│╛ п░ог░амм│ пои▒ка мак▒им│ма в не│по░┐до╖енном ма▒▒иве A[1 : :n].
1 max ;1
2 for i 1 to n
3
do . С░авни▓╝ A[i] ▒ max.
4
if A[i] > max
5
then max A[i]
М╗ ╡о▓им оп░едели▓╝, ▒кол╝ко ░аз в ▒░еднем в╗полн┐е▓▒┐ п░и-
Зада╖и к главе 6
135
▒ваивание в ▒▓░оке 5. П░едполагае▓▒┐, ╖▓о ╖и▒ла в ма▒▒иве A ░азли╖н╗ и ░а▒положен╗ в ▒л│╖айном по░┐дке (в▒е пе░е▒▓ановки ░авнове░о┐▓н╗).
а. Е▒ли ╖и▒ло x ▒л│╖айно в╗б░ано из i ░азли╖н╗╡ ╖и▒ел, ▓о ▒ какой ве░о┐▓но▒▓╝╛ оно окаже▓▒┐ мак▒имал╝н╗м ╖и▒лом ▒░еди ни╡?
б. Как ▒оо▓но▒и▓▒┐ A[i] ▒ п░ед╗д│╣ими ╜лемен▓ами ма▒▒ива дл┐
▓е╡ i, п░и ко▓о░╗╡ в╗полн┐е▓▒┐ ▒▓░ока 5?
в. Чем│ ░авна ве░о┐▓но▒▓╝ в╗полнени┐ ▒▓░оки 5 п░ог░амм╗ дл┐
данного зна╖ени┐ i?
г. П│▒▓╝ si | ▒л│╖айна┐ вели╖ина, ░авна┐ 1 или 0 в зави▒имо▒▓и
о▓ ▓ого, в╗полн┐ла▒╝ ▒▓░ока 5 на i-м ╕аге ╢икла или не▓. Чем│
░авно M[si ]?
д. П│▒▓╝ s = s1 +s2 + +sn | об╣ее ╖и▒ло п░и▒ваиваний в ▒▓░оке
5 п░и и▒полнении в▒ей п░ог░амм╗. Покажи▓е, ╖▓о M[s] = (lg n).
6-3 П░облема в╗бо░а
Завед│╛╣а┐ ка┤ед░ой п░инимае▓ на ░або▓│ нового ▒о▓░│дника. Она назна╖ила ▒обе▒едовани┐ n п░е▓енден▓ам и ╡о╖е▓ в╗б░а▓╝
наиболее квали┤и╢и░ованного из ни╡. Однако │ниве░▒и▓е▓▒кие
п░авила ▓░еб│╛▓, ╖▓об╗ по▒ле бе▒ед╗ п░е▓енден▓│ ▒░аз│ ▒ооб╣ало▒╝, п░ин┐▓ он или не▓.
Дл┐ ╜▓ого она п░имен┐е▓ ▓акое п░авило. Сна╖ала она гово░и▓ ▒
пе░в╗ми k п░е▓енден▓ами, о▓каз╗ва┐ им незави▒имо о▓ и╡ квали┤ика╢ии. Е▒ли ▒░еди о▒▓ав╕и╡▒┐ е▒▓╝ более квали┤и╢и░ованн╗й,
╖ем пе░в╗е k, ▓о пе░в╗й из ▓аков╗╡ п░инимае▓▒┐. Е▒ли не▓, п░инимае▓▒┐ по▒ледний из п░е▓енден▓ов. Покажи▓е, ╖▓о ве░о┐▓но▒▓╝
в╗б░а▓╝ ▓аким ▒по▒обом л│╖╕его из п░е▓енден▓ов б│де▓ мак▒имал╝на (и ░авна п░име░но 1=e), е▒ли k п░име░но ░авно n=e.
6-4 Ве░о┐▓но▒▓н╗й ▒╖е▓╖ик
С помо╣╝╛ t-би▓ного ▒╖е▓╖ика м╗ можем ▒╖и▓а▓╝ до 2t ; 1.
След│╛╣ий п░ием ве░о┐▓но▒▓ного под▒╖е▓а (probabilistic counting,
R. Morris) дае▓ возможно▒▓╝ ве▒▓и ▒╖е▓ до к│да бол╝╕и╡ зна╖ений,
п░авда ╢ено╛ неко▓о░ой по▓е░и ▓о╖но▒▓и.
В╗бе░ем воз░а▒▓а╛╣│╛ по▒ледова▓ел╝но▒▓╝ ╢ел╗╡ нео▓░и╢а▓ел╝н╗╡ ╖и▒ел ni (где i мен┐е▓▒┐ о▓ 0 до 2t ;1). Ее ▒м╗▒л ▓аков: е▒ли
зна╖ение t-би▓ного ░еги▒▓░а ░авно i, ▓о ╜▓о озна╖ае▓, ╖▓о под▒╖и▓╗ваемое коли╖е▒▓во (╖и▒ло в╗полненн╗╡ опе░а╢ий Increment)
п░име░но ░авно ni . М╗ ▒╖и▓аем, ╖▓о n0 = 0.
Опе░а╢и┐ Increment │вели╖ивае▓ зна╖ение ▒╖е▓╖ика, ▒оде░жа╣его i, ▒ неко▓о░ой ве░о┐▓но▒▓╝╛. Именно, ╖и▒ло i │вели╖ивае▓▒┐
на 1 ▒ ве░о┐▓но▒▓╝╛ 1=(ni+1 ; ni ), и о▒▓ае▓▒┐ неизменн╗м в о▒▓ал╝н╗╡ ▒л│╖а┐╡. (Е▒ли i = 2t ; 1, ▓о п░ои▒╡оди▓ пе░еполнение.) Иде┐
п░о▒▓а: в ▒░еднем дл┐ │вели╖ени┐ i на едини╢│ по▓░еб│е▓▒┐ как
░аз ni+1 ; ni опе░а╢ий.
136
Глава 6 Комбина▓о░ика и ве░о┐▓но▒▓╝
Е▒ли ni = i дл┐ в▒е╡ i > 0, ▓о пол│╖аем об╗╖н╗й ▒╖е▓╖ик. Более
ин▓е░е▒н╗е ▒и▓│а╢ии возника╛▓, е▒ли в╗б░а▓╝, нап░име░, ni =
2i;1 дл┐ i > 0 или ni = Fi (i-е ╖и▒ло Фибона╖╖и, ▒м. ░азд. 2.2).
М╗ б│дем п░едполага▓╝, ╖▓о n2t ;1 до▒▓а▓о╖но велико, и п░енеб░ега▓╝ возможно▒▓╝╛ пе░еполнени┐.
а. Покажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание ▒оде░жимого
▒╖е▓╖ика по▒ле в╗полнени┐ n опе░а╢ий Increment, в ▓о╖но▒▓и
░авно n.
б. Ди▒пе░▒и┐ ▒л│╖айной вели╖ин╗, ░авной ▒оде░жимом│
▒╖е▓╖ика по▒ле n опе░а╢ий Increment, зави▒и▓ о▓ в╗бо░а по▒ледова▓ел╝но▒▓и n0 ; n1; : : : . Найди▓е ╜▓│ ди▒пе░▒и╛ дл┐ ▒л│╖а┐
ni = 100i.
Заме╖ани┐
Об╣ие ме▓од╗ ░е╕ени┐ ве░о┐▓но▒▓н╗╡ зада╖ об▒│ждали▒╝ в знамени▓ой пе░епи▒ке Па▒кал┐ (B. Pascal) и Фе░ма (P. de Fermat), на╖ав╕ей▒┐ в 1654 год│, и в книге Г╛йген▒а (C. Huygens, 1657). Более ▒▓░огое изложение ▓ео░ии ве░о┐▓но▒▓ей б╗ло дано в ░або▓а╡
Бе░н│лли (J. Bernoulli, 1713) и М│ав░а (A.De Moivre, 1730). Дал╝ней╕ее ░азви▓ие ▓ео░ии ве░о┐▓но▒▓ей ▒в┐зано ▒ именами Лапла▒а
(P. S. de Laplace), П│а▒▒она (S.-D. Poisson) и Га│▒▒а (C. F. Gauss).
С│мм╗ ▒л│╖айн╗╡ вели╖ин и▒▒ледовали▒╝ П. Л. Чеб╗╕ев╗м и
А. А. Ма░ков╗м (▒▓а░╕им). В 1933 год│ А. Н. Колмого░ов ▒┤о░м│ли░овал ак▒иом╗ ▓ео░ии ве░о┐▓но▒▓ей. О╢енки ╡во▒▓ов ░а▒п░еделений п░ивод┐▓ Че░нов [40] и Хо┤динг [99]. Важн╗е ░ез│л╝▓а▓╗ о ▒л│╖айн╗╡ комбина▓о░н╗╡ ▒▓░│к▓│░а╡ п░инадлежа▓ Э░де╕│
(P. Erdos).
Ли▓е░а▓│░а по ▓еме глав╗: Кн│▓ [121], Л╛ [140] (╡о░о╕ие по▒оби┐ по ╜лемен▓а░ной комбина▓о░ике и под▒╖е▓│); Биллинг▒ли [28],
Чанг [41], Д░ейк [57], Фелле░ [66], Розанов [171] (▒▓анда░▓н╗е │╖ебники по ▓ео░ии ве░о┐▓но▒▓ей); Боллоба▒ [30], Хо┤░и [100], Спен▒е░ [179] (▓е╡ника ве░о┐▓но▒▓ного анализа).
II
Со░▓и░овка и по░┐дков╗е ▒▓а▓и▒▓ики
Введение
В ╜▓ой ╖а▒▓и м╗ ░а▒▒мо▓░им не▒кол╝ко алго░и▓мов, ░е╕а╛╣и╡
зада╖│ ▒о░▓и░овки (sorting problem). И▒╡одн╗м данн╗м дл┐ ╜▓ой
зада╖и ┐вл┐е▓▒┐ по▒ледова▓ел╝но▒▓╝ ╖и▒ел ha1 ; a2; : : :; an i. Рез│л╝▓а▓ом должна б╗▓╝ по▒ледова▓ел╝но▒▓╝ ha01; a02; : : :; a0n i, ▒о▒▓о┐╣а┐
из ▓е╡ же ╖и▒ел, ид│╣и╡ в не│б╗ва╛╣ем по░┐дке: a01 6 a02 6 6
a0n . Об╗╖но и▒╡одна┐ по▒ледова▓ел╝но▒▓╝ задана как ма▒▒ив, ╡о▓┐
возможн╗ и д░│гие ва░иан▓╗ (нап░име░, ▒в┐занн╗й ▒пи▒ок).
С▓░│к▓│░а ▒о░▓и░│ем╗╡ об║ек▓ов
На п░ак▓ике ░едко ▓░еб│е▓▒┐ │по░┐до╖ива▓╝ ╖и▒ла как ▓аков╗е.
Об╗╖но надо ▒о░▓и░ова▓╝ запи▒и (records), ▒оде░жа╣ие не▒кол╝ко
полей, и ░а▒полага▓╝ и╡ в по░┐дке, оп░едел┐ем╗м одним из полей. [Нап░име░, в а░╡иве о▓дела кад░ов дл┐ каждого ▒о▓░│дника
┤и░м╗ може▓ ╡░ани▓╝▒┐ запи▒╝, ▒оде░жа╣а┐ ░азли╖н╗е пол┐ (┤амили┐, им┐, о▓╖е▒▓во, год ░ождени┐, ад░е▒ и ▓. п.), и в какой-▓о
момен▓ може▓ понадоби▓╝▒┐ │по░┐до╖и▓╝ в▒е запи▒и по годам ░ождени┐.] Поле, по ко▓о░ом│ п░оводи▓▒┐ ▒о░▓и░овка (год ░ождени┐
в на╕ем п░име░е), наз╗вае▓▒┐ кл╛╖ом (key), а о▒▓ал╝н╗е пол┐ |
дополни▓ел╝н╗ми данн╗ми (satellite data). Можно п░ед▒▓авл┐▓╝
▒ебе дело ▓ак: алго░и▓м ▒о░▓и░│е▓ кл╛╖и, но вме▒▓е ▒ кажд╗м
кл╛╖ом пе░еме╣а╛▓▒┐ (без изменени┐) дополни▓ел╝н╗е данн╗е, ▒
ним ▒в┐занн╗е. (Е▒ли ╜▓и╡ данн╗╡ много, ░аз│мно пе░еме╣а▓╝ не
▒ами данн╗е, а ли╕╝ │каза▓ел╝ на ни╡.)
В▒е ╜▓и под░обно▒▓и м╗ не ░а▒▒ма▓░иваем, ог░ани╖ива┐▒╝ зада╖ей ▒о░▓и░овки кл╛╖ей. П░иводим╗е нами алго░и▓м╗ ┐вл┐╛▓▒┐,
▓аким об░азом, ли╕╝ └▒келе▓ом┴ ░еал╝ной п░ог░амм╗, к ко▓о░ом│
н│жно добави▓╝ об░або▓к│ дополни▓ел╝н╗╡ данн╗╡ (╖▓о об╗╖но
не ▒ложно, ╡о▓┐ и ╡лопо▓но).
140
Ча▒▓╝ II Со░▓и░овка и по░┐дков╗е ▒▓а▓и▒▓ики
Алго░и▓м╗ ▒о░▓и░овки
М╗ │же в▒▓░е╖али▒╝ в главе 1 ▒ дв│м┐ алго░и▓ма, ▒о░▓и░│╛╣ими n ╖и▒ел за в░ем┐ (n2 ) в ╡│д╕ем ▒л│╖ае. И╡ п░о▒▓о▓а, однако, делае▓ и╡ ╜┤┤ек▓ивн╗ми дл┐ ▒о░▓и░овки небол╝╕ого ма▒▒ива
без дополни▓ел╝ной пам┐▓и (in place). (Имее▓▒┐ в вид│, ╖▓о м╗ не
имеем п░ава заводи▓╝ е╣е одного ма▒▒ива, но пе░еменн╗е дл┐ ╖и▒ел и▒пол╝зова▓╝ можно). Алго░и▓м ▒о░▓и░овки ▒ли┐нием имее▓
л│╖╕│╛ а▒имп▓о▓и╖е▒к│╛ о╢енк│ в░емени ░або▓╗, но он ▓░еб│е▓
дополни▓ел╝ного ма▒▒ива.
В ╜▓ой ╖а▒▓и книги м╗ ░а▒▒мо▓░им е╣е два алго░и▓ма ▒о░▓и░овки ве╣е▒▓венн╗╡ ╖и▒ел. Пе░в╗й из ни╡ наз╗вае▓▒┐ └▒о░▓и░овкой
▒ помо╣╝╛ к│╖и┴ (heapsort). Зде▒╝ └к│╖а┴ | неко▓о░а┐ ▒▓░│к▓│░а
данн╗╡, име╛╣а┐ много п░иложений (одно из ни╡, о╖е░еди ▒ п░ио░и▓е▓ами, м╗ ▓акже ░а▒▒мо▓░им в главе 7). Э▓о▓ алго░и▓м не
▓░еб│е▓ дополни▓ел╝ного ма▒▒ива и ░або▓ае▓ за в░ем┐ (n lg n) в
╡│д╕ем ▒л│╖ае.
В главе 8 ▒▓░ои▓▒┐ д░│гой алго░и▓м, наз╗ваем╗й └б╗▒▓░ой ▒о░▓и░овкой┴ (quicksort). В ╡│д╕ем ▒л│╖ае он ▓░еб│е▓ в░емени (n2 ),
но в ▒░еднем | ли╕╝ (n lg n), и на п░ак▓ике он об╗╖но б╗▒▓░ее
▒о░▓и░овки ▒ помо╣╝╛ к│╖и (его вн│▓░енний ╢икл п░о▒▓, по╜▓ом│
кон▒▓ан▓а в а▒имп▓о▓и╖е▒кой о╢енке мен╝╕е).
В▒е ╜▓и алго░и▓м╗ (▒о░▓и░овки в▒▓авками, ▒ли┐нием, ▒ помо╣╝╛ к│╖и и б╗▒▓░а┐ ▒о░▓и░овка) и▒пол╝з│╛▓ ▓ол╝ко попа░н╗е
▒░авнени┐ об║ек▓ов, но не и╡ вн│▓░енн╛╛ ▒▓░│к▓│░│. В главе 9 м╗
показ╗ваем, ╖▓о л╛ба┐ ▒о░▓и░овка ▓акого вида в ╡│д╕ем ▒л│╖ае
▓░еб│е▓ в░емени (n lg n), введ┐ под╡од┐╣│╛ ┤о░мал╝н│╛ модел╝
(░аз░е╕а╛╣ие де░ев╝┐). Тем ▒ам╗м ▒▓анови▓▒┐ ┐▒н╗м, ╖▓о ▒о░▓и░овки ▒ли┐нием и ▒ помо╣╝╛ к│╖и а▒имп▓о▓и╖е▒ки оп▓имал╝н╗.
Однако ╜▓а нижн┐┐ о╢енка не ░а▒п░о▒▓░ан┐е▓▒┐ на алго░и▓м╗, и▒пол╝з│╛╣ие вн│▓░енн╛╛ ▒▓░│к▓│░│ данн╗╡. В главе 9 ░а▒▒ма▓░ивае▓▒┐ не▒кол╝ко п░име░ов ▓акого ░ода. Со░▓и░овка под▒╖е▓ом (counting sort) позвол┐е▓ о▓▒о░▓и░ова▓╝ n ╢ел╗╡ ╖и▒ел в
диапазоне о▓ 1 до k за в░ем┐ O(n+k), и▒пол╝з│┐ ▒о░▓и░│ем╗е ╖и▒ла
как индек▒╗ в ма▒▒иве ░азме░а k. Е▒ли k = O(n), в░ем┐ ▒о░▓и░овки
▒▓анови▓▒┐ п░опо░╢ионал╝н╗м ░азме░│ ма▒▒ива. Род▒▓венн╗й алго░и▓м, наз╗ваем╗й └╢и┤░овой ▒о░▓и░овкой┴, п░имен┐е▓ ▒╡одн╗й
п░ием по░аз░┐дно, и позвол┐е▓ о▓▒о░▓и░ова▓╝ n ╢ел╗╡ ╖и▒ел, каждое из ко▓о░╗╡ имее▓ d ░аз░┐дов в k-и╖ной ▒и▒▓еме ▒╖и▒лени┐, за
в░ем┐ O(d(n + k)). Е▒ли ▒╖и▓а▓╝, ╖▓о d по▒▓о┐нно, а k е▒▓╝ O(n), ▓о
об╣ее в░ем┐ е▒▓╝ O(n). Т░е▓ий алго░и▓м ▓акого ░ода, ▒о░▓и░овка
в╗╖е░п╗ванием, п░едполагае▓, ╖▓о ▒о░▓и░│ем╗е ╖и▒ла ░авноме░но ░а▒п░еделен╗ на о▓░езке и незави▒им╗, и в ▒░еднем ▓░еб│е▓
O(n) дей▒▓вий дл┐ n ╖и▒ел.
Ча▒▓╝ II Со░▓и░овка и по░┐дков╗е ▒▓а▓и▒▓ики
141
По░┐дков╗е ▒▓а▓и▒▓ики
Е▒ли нам надо най▓и i-й по вели╖ине ╜лемен▓ ма▒▒ива, можно
▒на╖ала о▓▒о░▓и░ова▓╝ ма▒▒ив, ╖▓о ▓░еб│е▓ в░емени (n lg n), е▒ли не пол╝зова▓╝▒┐ вн│▓░енней ▒▓░│к▓│░ой ╜лемен▓ов (глава 9). Но
п░и ╜▓ом в╗полн┐е▓▒┐ ли╕н┐┐ ░або▓а (▒о░▓и░овка о▒▓ал╝н╗╡ ╜лемен▓ов), и можно по▒▓░ои▓╝ более ╜┤┤ек▓ивн╗е алго░и▓м╗ дл┐
зада╖и о▓╗▒кани┐ i-го по вели╖ине ╜лемен▓а (ко▓о░│╛ наз╗ва╛▓
▓акже зада╖ей о по░┐дков╗╡ ▒▓а▓и▒▓ика╡). В главе 10 п░ивод┐▓▒┐
два ▓аки╡ алго░и▓ма: один ▓░еб│е▓ в░емени O(n2) в ╡│д╕ем ▒л│╖ае и O(n) в ▒░еднем; д░│гой, более ▒ложн╗й, об╡оди▓▒┐ в░еменем
O(n) в ╡│д╕ем ▒л│╖ае.
И▒пол╝з│ем╗е ▒ведени┐ из ма▓ема▓ики
Бол╝╕а┐ ╖а▒▓╝ ма▓е░иала глав 7{10 до▒▓│пна ╖и▓а▓ел╛ ▒
минимал╝ной ма▓ема▓и╖е▒кой подго▓овкой. Однако ве░о┐▓но▒▓н╗й анализ алго░и▓мов (б╗▒▓░ой ▒о░▓и░овки, ▒о░▓и░овки
в╗╖е░п╗ванием и о▓╗▒кани┐ i-го по вели╖ине ╜лемен▓а) ▓░еб│е▓ знаком▒▓ва ▒ ▓ео░ией ве░о┐▓но▒▓ей (глава 6). Добавим, ╖▓о
алго░и▓м о▓╗▒кани┐ i-го ╜лемен▓а за линейное в░ем┐ (в ╡│д╕ем
▒л│╖ае) более ▒ложен, ╖ем д░│гие алго░и▓м╗ ╜▓ой глав╗.
7
Со░▓и░овка ▒ помо╣╝╛ к│╖и
В ╜▓ой главе ░а▒▒мо▓░ен алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и
(heapsort). Как и алго░и▓м ▒о░▓и░овки ▒ли┐нием, он ▓░еб│е▓ в░емени O(n lg n) дл┐ ▒о░▓и░овки n об║ек▓ов, но об╡оди▓▒┐ дополни▓ел╝ной пам┐▓╝╛ ░азме░а O(1) (вме▒▓о O(n) дл┐ ▒о░▓и░овки ▒ли┐нием). Таким об░азом, ╜▓о▓ алго░и▓м ▒о╖е▓ае▓ п░еим│╣е▒▓ва дв│╡
░анее ░а▒▒мо▓░енн╗╡ алго░и▓мов | ▒о░▓и░овки ▒ли┐нием и ▒о░▓и░овки в▒▓авками.
С▓░│к▓│░а данн╗╡, ко▓о░│╛ и▒пол╝з│е▓ алго░и▓м (она наз╗вае▓▒┐ └двои╖ной к│╖ей┴) оказ╗вае▓▒┐ полезной и в д░│ги╡ ▒и▓│а╢и┐╡. В ╖а▒▓но▒▓и, на ее базе можно ╜┤┤ек▓ивно о░ганизова▓╝
о╖е░ед╝ ▒ п░ио░и▓е▓ами (▒м. ░азд. 7.5). В ▒лед│╛╣и╡ глава╡ нам
в▒▓░е▓┐▓▒┐ алго░и▓м╗, и▒пол╝з│╛╣ие ▒╡одн╗е ▒▓░│к▓│░╗ данн╗╡
(биномиал╝н╗е к│╖и, ┤ибона╖╖иев╗ к│╖и).
Те░мин └к│╖а┴ иногда и▒пол╝з│╛▓ в д░│гом ▒м╗▒ле (обла▒▓╝ пам┐▓и, где данн╗е ░азме╣а╛▓▒┐ ▒ п░именением ав▓ома▓и╖е▒кой
└▒бо░ки м│▒о░а┴ | нап░име░, в ┐з╗ке Lisp), но м╗ ╜▓ого дела▓╝
не б│дем.
7.1. К│╖и
Двои╖ной к│╖ей (binary heap) наз╗ва╛▓ ма▒▒ив ▒ оп░еделенн╗ми
▒вой▒▓вами │по░┐до╖енно▒▓и, Ч▓об╗ ▒┤о░м│ли░ова▓╝ ╜▓и ▒вой▒▓ва, б│дем ░а▒▒ма▓░ива▓╝ ма▒▒ив как двои╖ное де░ево (░и▒. 7.1).
Кажда┐ ве░╕ина де░ева ▒оо▓ве▓▒▓в│е▓ ╜лемен▓│ ма▒▒ива. Е▒ли
ве░╕ина имее▓ индек▒ i, ▓о ее ░оди▓ел╝ имее▓ индек▒ bi=2c (ве░╕ина ▒ индек▒ом 1 ┐вл┐е▓▒┐ ко░нем), а ее де▓и | индек▒╗ 2i и
2i + 1. Б│дем ▒╖и▓а▓╝, ╖▓о к│╖а може▓ не занима▓╝ в▒его ма▒▒ива
и ╡░ани▓╝ ма▒▒ив A, его длин│ length[A] и ▒пе╢иал╝н╗й па░аме▓░
heap-size[A] (░азме░ к│╖и), п░и╖ем heap-size[A] 6 length[A]. К│╖а
▒о▒▓ои▓ из ╜лемен▓ов A[1]; : : :; A[heap-size[A]]. Движение по де░ев│
о▒│╣е▒▓вл┐е▓▒┐ п░о╢ед│░ами
К│╖и
143
К│╖│ можно ░а▒▒ма▓░ива▓╝ как де░ево (а) или как ма▒▒ив (б). Вн│▓░и
ве░╕ин╗ показано ее зна╖ение. Около ве░╕ин╗ показан ее индек▒ в ма▒▒иве.
Ри▒. 7.1
Parent(i)
return bi=2c
Left(i)
return 2i
Right(i)
return 2i + 1
Элемен▓ A[1] ┐вл┐е▓▒┐ ко░нем де░ева.
В бол╝╕ин▒▓ве комп╝╛▓е░ов дл┐ в╗полнени┐ п░о╢ед│░ Left и
Parent можно и▒пол╝зова▓╝ команд╗ левого и п░авого ▒двига
(Left, Parent); Right ▓░еб│е▓ левого ▒двига, по▒ле ко▓о░ого в
млад╕ий ░аз░┐д поме╣ае▓▒┐ едини╢а.
Элемен▓╗, ╡░ан┐╣ие▒┐ в к│╖е, должн╗ облада▓╝ о▒новн╗м ▒вой▒▓вом к│╖и (heap property): дл┐ каждой ве░╕ин╗ i, к░оме ко░н┐
(▓. е. п░и 2 6 i 6 heap-size[A]),
A[Parent(i)] > A[i]:
(7.1)
О▓▒╛да ▒лед│е▓, ╖▓о зна╖ение по▓омка не п░ево▒╡оди▓ зна╖ени┐
п░едка. Таким об░азом, наибол╝╕ий ╜лемен▓ де░ева (или л╛бого
подде░ева) на╡оди▓▒┐ в ко░невой ве░╕ине де░ева (╜▓ого подде░ева).
В╗▒о▓ой (height) ве░╕ин╗ де░ева наз╗вае▓▒┐ в╗▒о▓а подде░ева ▒ ко░нем в ╜▓ой ве░╕ине (╖и▒ло ░ебе░ в ▒амом длинном п│▓и
▒ на╖алом в ╜▓ой ве░╕ине вниз по де░ев│ к ли▒▓│). В╗▒о▓а де░ева, ▓аким об░азом, ▒овпадае▓ ▒ в╗▒о▓ой его ко░н┐. В де░еве,
▒о▒▓авл┐╛╣ем к│╖│, в▒е │░овни (к░оме, б╗▓╝ може▓, по▒леднего),
заполнен╗ полно▒▓╝╛. По╜▓ом│ в╗▒о▓а ╜▓ого де░ева ░авна (lg n),
где n | ╖и▒ло ╜лемен▓ов в к│╖е (▒м. │п░. 7.1-2). Как м╗ │видим
ниже, в░ем┐ ░або▓╗ о▒новн╗╡ опе░а╢ий над к│╖ей п░опо░╢ионал╝но в╗▒о▓е де░ева и, ▒ледова▓ел╝но, ▒о▒▓авл┐е▓ O(lg n). О▒▓ав╕а┐▒┐
144
Глава 7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
╖а▒▓╝ глав╗ по▒в┐╣ена анализ│ ╜▓и╡ опе░а╢ий и п░именени╛ к│╖и
в зада╖а╡ ▒о░▓и░овки и модели░овани┐ о╖е░еди ▒ п░ио░и▓е▓ами.
Пе░е╖и▒лим о▒новн╗е опе░а╢ии над к│╖ей:
П░о╢ед│░а Heapify позвол┐е▓ подде░жива▓╝ о▒новное ▒вой▒▓во (7.1). В░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ O(lg n).
П░о╢ед│░а Build-Heap ▒▓░ои▓ к│╖│ из и▒╡одного (нео▓▒о░▓и░ованного) ма▒▒ива. В░ем┐ ░або▓╗ O(n).
П░о╢ед│░а Heapsort ▒о░▓и░│е▓ ма▒▒ив, не и▒пол╝з│┐ дополни▓ел╝ной пам┐▓и. В░ем┐ ░або▓╗ O(n lg n).
П░о╢ед│░╗ Extract-Max (вз┐▓ие наибол╝╕его) и Insert (добавление ╜лемен▓а) и▒пол╝з│╛▓▒┐ п░и модели░овании о╖е░еди
▒ п░ио░и▓е▓ами на базе к│╖и. В░ем┐ ░або▓╗ обеи╡ п░о╢ед│░
▒о▒▓авл┐е▓ O(lg n).
Уп░ажнени┐
7.1-1 П│▒▓╝ к│╖а имее▓ в╗▒о▓│ h. Скол╝ко ╜лемен▓ов може▓ в
ней б╗▓╝? (Укажи▓е мак▒имал╝ное и минимал╝ное зна╖ени┐.)
7.1-2 Докажи▓е, ╖▓о к│╖а из n ╜лемен▓ов имее▓ в╗▒о▓│ blg nc.
7.1-3 Докажи▓е, ╖▓о п░и в╗полнении о▒новного ▒вой▒▓ва к│╖и
ко░нева┐ ве░╕ина л╛бого подде░ева ┐вл┐е▓▒┐ наибол╝╕ей в ╜▓ом
подде░еве.
7.1-4 Где може▓ на╡оди▓╝▒┐ наимен╝╕ий ╜лемен▓ к│╖и, е▒ли в▒е
ее ╜лемен▓╗ ░азли╖н╗?
7.1-5 П│▒▓╝ ма▒▒ив о▓▒о░▓и░ован в об░а▓ном по░┐дке (пе░в╗й
╜лемен▓ | наибол╝╕ий). Явл┐е▓▒┐ ли ▓акой ма▒▒ив к│╖ей?
7.1-6
Явл┐е▓▒┐ ли к│╖ей ма▒▒ив h23; 17; 14; 6; 13; 10; 1; 5; 7; 12i?
7.2. Со╡░анение о▒новного ▒вой▒▓ва к│╖и
П░о╢ед│░а Heapify | важное ▒░ед▒▓во ░або▓╗ ▒ к│╖ей. Ее па░аме▓░ами ┐вл┐╛▓▒┐ ма▒▒ив A и индек▒ i. П░едполагае▓▒┐, ╖▓о подде░ев╝┐ ▒ ко░н┐ми Left(i) и Right(i) │же облада╛▓ о▒новн╗м ▒вой▒▓вом. П░о╢ед│░а пе░е▒▓авл┐е▓ ╜лемен▓╗ подде░ева ▒ ве░╕иной i,
по▒ле ╖его оно обладае▓ о▒новн╗м ▒вой▒▓вом. Иде┐ п░о▒▓а: е▒ли
╜▓о ▒вой▒▓во не в╗полнено дл┐ ве░╕ин╗ i, ▓о ее ▒лед│е▓ помен┐▓╝
▒ бол╝╕им из ее де▓ей и ▓. д., пока ╜лемен▓ A[i] не └подг░│зи▓▒┐┴
до н│жного ме▒▓а.
Со╡░анение о▒новного ▒вой▒▓ва к│╖и
145
Рабо▓а п░о╢ед│░╗ Heapify(A; 2) п░и heap-size[A] = 10. (а) На╖ал╝ное ▒о▒▓о┐ние к│╖и. В ве░╕ине i = 2 о▒новное ▒вой▒▓во на░│╕ено. Ч▓об╗
во▒▒▓анови▓╝ его, необ╡одимо помен┐▓╝ A[2] и A[4]. По▒ле ╜▓ого (б) о▒новное
▒вой▒▓во на░│╕ае▓▒┐ в ве░╕ине ▒ индек▒ом 4. Рек│░▒ивн╗й в╗зов п░о╢ед│░╗ Heapify(A; 4) во▒▒▓анавливае▓ о▒новное ▒вой▒▓во в ве░╕ине ▒ индек▒ом 4
п│▓ем пе░е▒▓ановки A[4] $ A[9] (в). По▒ле ╜▓ого о▒новное ▒вой▒▓во в╗полнено
дл┐ в▒е╡ ве░╕ин, ▓ак ╖▓о п░о╢ед│░а Heapify(A; 9) │же ни╖его не делае▓.
Ри▒. 7.2
Heapify(A; i)
1 l Left(i)
2 r Right(i)
3 if l 6 heap-size[A] и A[l] > A[i]
4
then largest l
5
else largest i
6 if r 6 heap-size[A] и A[r] > A[largest]
7
then largest r
8 if largest 6= i
9
then обмен┐▓╝ A[i] $ A[largest]
10
Heapify(A; largest)
Рабо▓а п░о╢ед│░╗ Heapify показана на ░и▒. 7.2. В ▒▓░ока╡ 3{7
в пе░еменн│╛ largest поме╣ае▓▒┐ индек▒ наибол╝╕его из ╜лемен▓ов
A[i], A[Left(i)] и A[Right(i)]. Е▒ли largest = i, ▓о ╜лемен▓ A[i] │же
└пог░│зил▒┐┴ до н│жного ме▒▓а, и ░або▓а п░о╢ед│░╗ закон╖ена.
Ина╖е п░о╢ед│░а мен┐е▓ ме▒▓ами A[i] и A[largest] (╖▓о обе▒пе╖ивае▓ в╗полнение ▒вой▒▓ва (7.1) в ве░╕ине i, но возможно, на░│╕ае▓
146
Глава 7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
╜▓о ▒вой▒▓во в ве░╕ине largest ) и ░ек│░▒ивно в╗з╗вае▓ ▒еб┐ дл┐
ве░╕ин╗ largest, ╖▓об╗ и▒п░ави▓╝ возможн╗е на░│╕ени┐.
О╢еним в░ем┐ ░або▓╗ п░о╢ед│░╗ Heapify. На каждом ╕аге ▓░е??│е▓▒┐ п░оизве▒▓и (1) дей▒▓вий, не ▒╖и▓а┐ ░ек│░▒ивного в╗зова.
П│▒▓╝ T (n) | в░ем┐ ░або▓╗ дл┐ подде░ева, ▒оде░жа╣его n ╜лемен▓ов. Е▒ли подде░ево ▒ ко░нем i ▒о▒▓ои▓ из n ╜лемен▓ов, ▓о подде░ев╝┐ ▒ ко░н┐ми Left(i) и Right(i) ▒оде░жа▓ не более ╖ем по 2n=3
╜лемен▓ов каждое (наи╡│д╕ий ▒л│╖ай | когда по▒ледний │░овен╝
в подде░еве заполнен наполовин│). Таким об░азом,
T (n) 6 T (2n=3) + (1)
Из ▓ео░ем╗ 4.1 (▒л│╖ай 2) пол│╖аем, ╖▓о T (n) = O(lg n). Э▓│ же
о╢енк│ можно пол│╖и▓╝ ▓ак: на каждом ╕аге м╗ ▒п│▒каем▒┐ по
де░ев│ на один │░овен╝, а в╗▒о▓а де░ева е▒▓╝ O(lg n).
Уп░ажнени┐
7.2-1
Покажи▓е, ▒лед│┐ об░аз╢│ ░и▒. 7.2, как ░або▓ае▓ п░о╢ед│░а
Heapify(A; 3) дл┐ ма▒▒ива h27; 17; 3; 16; 13; 10; 1; 5; 7; 12; 4; 8; 9; 0i.
7.2-2 П│▒▓╝ ╜лемен▓ A[i] бол╝╕е, ╖ем его де▓и. Каков б│де▓ ░ез│л╝▓а▓ в╗зова п░о╢ед│░╗ Heapify(A; i)?
7.2-3 П│▒▓╝ i > heap-size[A]=2. Каков б│де▓ ░ез│л╝▓а▓ в╗зова
п░о╢ед│░╗ Heapify(A; i)?
7.2-4 Измени▓е п░о╢ед│░│ Heapify, заменив ░ек│░▒и╛ ╢иклом.
(Неко▓о░╗е компил┐▓о░╗ п░и ╜▓ом по░ожда╛▓ более ╜┤┤ек▓ивн╗й код.)
7.2-5
Докажи▓е, ╖▓о наибол╝╕ее в░ем┐ ░або▓╗ п░о╢ед│░╗
Heapify дл┐ к│╖и из n ╜лемен▓ов ░авно (lg n). (Указание: п░иведи▓е п░име░, когда п░о╢ед│░а в╗з╗вае▓▒┐ дл┐ каждой ве░╕ин╗
на п│▓и о▓ ко░н┐ к ли▒▓│).
7.3. По▒▓░оение к│╖и
П│▒▓╝ дан ма▒▒ив A[1 : :n], ко▓о░╗й м╗ ╡о▓им п░ев░а▓и▓╝ в к│╖│, пе░е▒▓авив его ╜лемен▓╗. Дл┐ ╜▓ого можно и▒пол╝зова▓╝ п░о╢ед│░│ Heapify, п░имен┐┐ ее по о╖е░еди ко в▒ем ве░╕инам, на╖ина┐ ▒ нижни╡. По▒кол╝к│ ве░╕ин╗ ▒ номе░ами bn=2c + 1; : : :; n
┐вл┐╛▓▒┐ ли▒▓╝┐ми, подде░ев╝┐ ▒ ╜▓ими ве░╕инами │довле▓во░┐╛▓
о▒новном│ ▒вой▒▓в│. Дл┐ каждой из о▒▓ав╕и╡▒┐ ве░╕ин, в по░┐дке
│б╗вани┐ индек▒ов, м╗ п░имен┐ем п░о╢ед│░│ Heapify. По░┐док
об░або▓ки ве░╕ин га░ан▓и░│е▓, ╖▓о кажд╗й ░аз │▒лови┐ в╗зова
По▒▓░оение к│╖и
147
п░о╢ед│░╗ (в╗полнение о▒новного ▒вой▒▓ва дл┐ подде░ев╝ев) б│д│▓ в╗полнен╗.
Build-Heap (A)
1 heap-size[A] length[A]
2 for i blength[A]=2c downto 1
3
do Heapify(A; i)
П░име░ ░або▓╗ п░о╢ед│░╗ Build-Heap показан на ░и▒. 7.3.
Я▒но, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Build-Heap не п░ев╗╕ае▓ O(n lg n). Дей▒▓ви▓ел╝но, п░о╢ед│░а Heapify в╗з╗вае▓▒┐ O(n)
░аз, а каждое ее в╗полнение ▓░еб│е▓ в░емени O(lg n). Однако ╜▓│
о╢енк│ можно │л│╖╕и▓╝, ╖ем м╗ ▒ей╖а▒ и займем▒┐.
Дело в ▓ом, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Heapify зави▒и▓ о▓
в╗▒о▓╗ ве░╕ин╗, дл┐ ко▓о░ой она в╗з╗вае▓▒┐ (и п░опо░╢ионал╝но
╜▓ой в╗▒о▓е). По▒кол╝к│ ╖и▒ло ве░╕ин в╗▒о▓╗ h в к│╖е из n ╜лемен▓ов не п░ев╗╕ае▓ dn=2h+1 e (▒м. │п░. 7.3-3), а в╗▒о▓а в▒е к│╖и
не п░ев╗╕ае▓ blg nc (│п░. 7.1-2), в░ем┐ ░або▓╗ п░о╢ед│░╗ BuildHeap не п░ев╗╕ае▓
bX
lg nc l
h=0
n
m
2h+1
0
O(h) = O @n
bX
lg nc
h=0
1
hA
2h
(7.2)
Полага┐ x = 1=2 в ┤о░м│ле (3.6), пол│╖аем ве░╡н╛╛ о╢енк│ дл┐
▒│мм╗ в п░авой ╖а▒▓и:
1
X
h = 1=2 = 2:
h (1 ; 1=2)2
2
h=0
Таким об░азом, в░ем┐ ░або▓╗ п░о╢ед│░╗ Build-Heap ▒о▒▓авл┐е▓
O n
1
X
h=0
!
h = O(n):
2h
Уп░ажнени┐
7.3-1
Покажи▓е, ▒лед│┐ об░аз╢│ ░и▒. 7.3, как ░або▓ае▓ п░о╢ед│░а
Build-Heap дл┐ ма▒▒ива A = h5; 3; 17; 10; 84; 19; 6; 22; 9i.
7.3-2 По╖ем│ в п░о╢ед│░е Build-Heap ▒│╣е▒▓венно, ╖▓о па░аме▓░ i п░обегае▓ зна╖ени┐ о▓ blength[A]=2c до 1 (а не наобо░о▓)?
7.3-3 Докажи▓е, ╖▓о к│╖а из n ╜лемен▓ов ▒оде░жи▓ не более
dn=2h+1e ве░╕ин в╗▒о▓╗ h.
148
Глава 7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
Рабо▓а п░о╢ед│░╗ Build-Heap. Показано ▒о▒▓о┐ние данн╗╡ пе░ед
кажд╗м в╗зовом п░о╢ед│░╗ Heapify в ▒▓░оке 3.
Ри▒. 7.3
Алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и
149
7.4. Алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и
Алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и ▒о▒▓ои▓ из дв│╡ ╖а▒▓ей.
Сна╖ала в╗з╗вае▓▒┐ п░о╢ед│░а Build-Heap, по▒ле в╗полнени┐ ко▓о░ой ма▒▒ив ┐вл┐е▓▒┐ к│╖ей. Иде┐ в▓о░ой ╖а▒▓и п░о▒▓а: мак▒имал╝н╗й ╜лемен▓ ма▒▒ива ▓епе░╝ на╡оди▓▒┐ в ко░не де░ева (A[1]).
Его ▒лед│е▓ помен┐▓╝ c A[n], │мен╝╕и▓╝ ░азме░ к│╖и на 1 и во▒▒▓анови▓╝ о▒новное ▒вой▒▓во в ко░невой ве░╕ине (по▒кол╝к│ подде░ев╝┐ ▒ ко░н┐ми Left(1) и Right(1) не │▓░а▓или о▒новного ▒вой▒▓ва
к│╖и, ╜▓о можно ▒дела▓╝ ▒ помо╣╝╛ п░о╢ед│░╗ Heapify). По▒ле
╜▓ого в ко░не б│де▓ на╡оди▓╝▒┐ мак▒имал╝н╗й из о▒▓ав╕и╡▒┐ ╜лемен▓ов. Так делае▓▒┐ до ▓е╡ по░, пока в к│╖е не о▒▓ане▓▒┐ в▒его
один ╜лемен▓.
Heapsort(A)
1 Build-Heap(A)
2 for i length[A] downto 2
3
do помен┐▓╝ A[1] $ A[i]
4
heap-size[A] heap-size[A] ; 1
5
Heapify(A; 1)
Рабо▓а в▓о░ой ╖а▒▓и алго░и▓ма показана на ░и▒. 7.4. Изоб░ажен╗
▒о▒▓о┐ни┐ к│╖и пе░ед кажд╗м в╗полнением ╢икла for (▒▓░ока 2).
В░ем┐ ░або▓╗ п░о╢ед│░╗ Heapsort ▒о▒▓авл┐е▓ O(n lg n). Дей▒▓ви▓ел╝но, пе░ва┐ ╖а▒▓╝ (по▒▓░оение к│╖и) ▓░еб│е▓ в░емени O(n),
а каждое из n ; 1 в╗полнений ╢икла for занимае▓ в░ем┐ O(lg n).
Уп░ажнени┐
7.4-1
Покажи▓е, ▒лед│┐ об░аз╢│ ░и▒. 7.4, как ░або▓ае▓ п░о╢ед│░а
Heapsort дл┐ ма▒▒ива A = h5; 13; 2; 25; 7; 17; 20; 8; 4i.
7.4-2 П│▒▓╝ и▒╡одн╗й ма▒▒ив A │же о▓▒о░▓и░ован в по░┐дке воз░а▒▓ани┐. Каково б│де▓ в░ем┐ ▒о░▓и░овки ▒ помо╣╝╛ к│╖и? А е▒ли
ма▒▒ив б╗л о▓▒о░▓и░ован в по░┐дке │б╗вани┐?
7.4-3 Докажи▓е, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Heapsort ▒о▒▓авл┐е▓ (n lg n).
7.5. О╖е░еди ▒ п░ио░и▓е▓ами
На п░ак▓ике алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и не ┐вл┐е▓▒┐
▒ам╗м б╗▒▓░╗м | как п░авило, б╗▒▓░а┐ ▒о░▓и░овка (гл. 8) ░або▓ае▓ б╗▒▓░ее. Однако ▒ама к│╖а как ▒▓░│к▓│░а данн╗╡ ╖а▒▓о ока-
150
Глава 7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
Рабо▓а п░о╢ед│░╗ Heapsort. Показано ▒о▒▓о┐ние ма▒▒ива пе░ед кажд╗м в╗зовом п░о╢ед│░╗ Heapify. За╖е░ненн╗е ╜лемен▓╗ │же не в╡од┐▓ в
к│╖│.
Ри▒. 7.4
з╗вае▓▒┐ полезной. В ╜▓ом ░азделе м╗ ░а▒▒мо▓░им модели░ование
о╖е░еди ▒ п░ио░и▓е▓ами на базе к│╖и | один из ▒ам╗╡ изве▒▓н╗╡
п░име░ов и▒пол╝зовани┐ к│╖и.
О╖е░ед╝ ▒ п░ио░и▓е▓ами (priority queue) | ╜▓о множе▒▓во S ,
╜лемен▓╗ ко▓о░ого м╗ б│дем ▒╖и▓а▓╝ ╖и▒лами. На п░ак▓ике ╜лемен▓ами множе▒▓ва S ┐вл┐╛▓▒┐ па░╗ hkey; i, где key | ╖и▒ло,
оп░едел┐╛╣ее п░ио░и▓е▓ ╜лемен▓а и наз╗ваемое кл╛╖ом (key). а
| ▒в┐занна┐ ▒ ним ин┤о░ма╢и┐; ╜▓а ин┤о░ма╢и┐ ╡░ани▓▒┐ ░┐дом ▒ ╜лемен▓ом и пе░еме╣ае▓▒┐ вме▒▓е ▒ ним, не вли┐┐ на его
об░або▓к│.
Возможн╗ ▒лед│╛╣ие опе░а╢ии над о╖е░ед╝╛ ▒ п░ио░и▓е▓ами:
Insert(S; x): добавление ╜лемен▓а x к множе▒▓в│ S ;
О╖е░еди ▒ п░ио░и▓е▓ами
151
Maximum(S ): наибол╝╕ий ╜лемен▓ множе▒▓ва;
Extract-Max(S ): из║┐▓ие из множе▒▓ва наибол╝╕его ╜лемен▓а.
О╖е░ед╝ ▒ п░ио░и▓е▓ами може▓, нап░име░, и▒пол╝зова▓╝▒┐ в опе░а╢ионной ▒и▒▓еме ▒ ░азделением в░емени. П░и ╜▓ом ╡░ани▓▒┐ ▒пи▒ок заданий ▒ п░ио░и▓е▓ами; как ▓ол╝ко в╗полнение о╖е░едного
задани┐ закан╖ивае▓▒┐, из о╖е░еди в╗би░ае▓▒┐ задание ▒ наибол╝╕им п░ио░и▓е▓ом (опе░а╢и┐ Extract-Max). Нов╗е задани┐ добавл┐╛▓▒┐ в о╖е░ед╝ ▒ помо╣╝╛ опе░а╢ии Insert.
Д░│гое п░именение ▓ой же ▒▓░│к▓│░╗ | │п░авл┐емое ▒об╗▓и┐ми модели░ование (event-driven simulation). В о╖е░еди на╡од┐▓▒┐
▒об╗▓и┐, а п░ио░и▓е▓ оп░едел┐е▓▒┐ в░еменем, когда ▒об╗▓ие должно п░оизой▓и. Раз│мее▓▒┐, ▒об╗▓и┐ должн╗ модели░ова▓╝▒┐ в ▓ом
по░┐дке, в ко▓о░ом они п░ои▒╡од┐▓. В╗бо░ о╖е░едного ▒об╗▓и┐
п░оизводи▓▒┐ ▒ помо╣╝╛ опе░а╢ии Extract-Min (по░┐док зде▒╝
об░а▓н╗й), добавление ▒об╗▓ий | ▒ помо╣╝╛ опе░а╢ии Insert.
Опи╕ем ▓епе░╝ ░еализа╢и╛ о╖е░еди ▒ п░ио░и▓е▓ами. Б│дем ╡░ани▓╝ ╜лемен▓╗ множе▒▓ва в виде к│╖и. П░и ╜▓ом мак▒имал╝н╗й
╜лемен▓ на╡оди▓▒┐ в ко░не, ▓ак ╖▓о опе░а╢и┐ Maximum ▓░еб│е▓
в░емени (1). Ч▓об╗ из║┐▓╝ мак▒имал╝н╗й ╜лемен▓ из о╖е░еди,
н│жно дей▒▓вова▓╝ ▓ак же, как и п░и ▒о░▓и░овке:
Heap-Extract-Max(A)
1 if heap-size[A] < 1
2 then о╕ибка: └о╖е░ед╝ п│▒▓а┴
3 max A[1]
4 A[1] A[heap-size[A]]
5 heap-size[A] heap-size[A] ; 1
6 Heapify(A; 1)
7 return max
В░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ O(lg n) (п░о╢ед│░а Heapify в╗з╗вае▓▒┐
один ░аз).
Ч▓об╗ добави▓╝ ╜лемен▓ к о╖е░еди, его ▒лед│е▓ добави▓╝ в коне╢
к│╖и (как ли▒▓), а за▓ем да▓╝ ем│ └в▒пл╗▓╝┴ до н│жного ме▒▓а:
Heap-Insert (A; key)
1 heap-size[A] heap-size[A] + 1
2 i heap-size[A]
3 while i > 1 и A[Parent(i)] < key
4
do A[i] A[Parent(i)]
5
i Parent(i)
6 A[i] key
П░име░ ░або▓╗ п░о╢ед│░╗ Heap-Insert показан на ░и▒. 7.5.
В░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ O(lg n), по▒кол╝к│ └под║ем┴ нового ли▒▓а занимае▓ не более lg n ╕агов (индек▒ i по▒ле каждой и▓е░а╢ии
152
Глава 7 Со░▓и░овка ▒ помо╣╝╛ к│╖и
Ри▒. 7.5 Рабо▓а п░о╢ед│░╗ Heap-Insert. Добавл┐е▓▒┐ ╜лемен▓ ▒ кл╛╖ев╗м
зна╖ением 15 (▓емн╗й к░│жок озна╖ае▓ ме▒▓о дл┐ ╜▓ого ╜лемен▓а).
╢икла while │мен╝╕ае▓▒┐ по к░айней ме░е вдвое).
И▓ак, в▒е опе░а╢ии над о╖е░ед╝╛ ▒ п░ио░и▓е▓ами из n ╜лемен▓ов
▓░еб│╛▓ в░емени O(lg n).
Уп░ажнени┐
7.5-1
Покажи▓е, ▒лед│┐ об░аз╢│ ░и▒. 7.5, как ░або▓ае▓ п░о╢ед│░а
Heap-Insert(A; 3) дл┐ к│╖и A = h15; 13; 9; 5; 12; 8; 7; 4; 0; 6; 2; 1i.
7.5-2 Покажи▓е на ░и▒│нка╡, как ░або▓ае▓ п░о╢ед│░а HeapExtract-Max дл┐ к│╖и из п░ед╗д│╣его │п░ажнени┐.
7.5-3 Об║┐▒ни▓е, как ░еализова▓╝ об╗╖н│╛ о╖е░ед╝ (rst-in,
rst-out) и ▒▓ек на базе о╖е░еди ▒ п░ио░и▓е▓ами. (Оп░еделени┐ ▒м.
в ░азд. 11.1).
7.5-4 Реализ│й▓е п░о╢ед│░│ Heap-Increase-Key (A; i; k) (│вели╖ение ╜лемен▓а), ко▓о░а┐ │вели╖ивае▓ ╜лемен▓ A[i] до k, е▒ли он
б╗л мен╝╕е k (A[i] max(A[i]; k)) и во▒▒▓анавливае▓ о▒новное
▒вой▒▓во к│╖и. В░ем┐ ░або▓╗ | O(lg n).
7.5-5 Реализ│й▓е опе░а╢и╛ Heap-Delete (A; i) | │даление ╜лемен▓а ▒ индек▒ом i из к│╖и. В░ем┐ ░або▓╗ O(lg n).
Зада╖и к главе 7
153
7.5-6 П░ид│май▓е алго░и▓м, ко▓о░╗й позвол┐е▓ за в░ем┐
O(n lg k) ▒ли▓╝ k о▓▒о░▓и░ованн╗╡ ▒пи▒ков в один о▓▒о░▓и░ованн╗й ▒пи▒ок (зде▒╝ n | об╣ее ╖и▒ло ╜лемен▓ов в ▒пи▒ка╡).
(Указание: и▒пол╝з│й▓е к│╖│.)
Зада╖и
7-1 По▒▓░оение к│╖и ▒ помо╣╝╛ в▒▓авок
Можно по▒▓░ои▓╝ к│╖│, по▒ледова▓ел╝но добавл┐┐ ╜лемен▓╗ ▒
помо╣╝╛ п░о╢ед│░╗ Heap-Insert. Ра▒▒мо▓░им ▒лед│╛╣ий алго░и▓м:
Build-Heap0 (A)
1 heap-size[A] 1
2 for i 2 to length[A]
3
do Heap-Insert (A; A[i])
а. Зап│▒▓им п░о╢ед│░╗ Build-Heap и Build-Heap0 дл┐ одного и ▓ого же ма▒▒ива. В▒егда ли они ▒оздад│▓ одинаков╗е к│╖и?
(Докажи▓е или п░иведи▓е кон▓░п░име░.)
б. Докажи▓е, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Build-Heap0 в ╡│д╕ем ▒л│╖ае ▒о▒▓авл┐е▓ (n lg n) (где n | коли╖е▒▓во ╜лемен▓ов).
7-2 Рабо▓а ▒ d-и╖н╗ми к│╖ами
Ра▒▒мо▓░им d-и╖н│╛ к│╖│ (d-ary heap), в ко▓о░ой ве░╕ин╗ име╛▓ d де▓ей вме▒▓о дв│╡.
а. Как в╗гл┐д┐▓ дл┐ ▓акой к│╖и п░о╢ед│░╗, аналоги╖н╗е Parent, Left и Right?
б. Как в╗▒о▓а d-и╖ной к│╖и из n ╜лемен▓ов в╗░ажае▓▒┐ ╖е░ез n
и d?
в. Реализ│й▓е п░о╢ед│░│ Extract-Max. Каково в░ем┐ ее ░або▓╗ (в╗░ази▓е его ╖е░ез n и d)?
г. Реализ│й▓е п░о╢ед│░│ Insert. Каково в░ем┐ ее ░або▓╗?
д. Реализ│й▓е п░о╢ед│░│ Heap-Increase-Key (│п░. 7.5-4). Каково в░ем┐ ее ░або▓╗?
Заме╖ани┐
Алго░и▓м ▒о░▓и░овки ▒ помо╣╝╛ к│╖и п░едложил Уил╝┐м▒ [202];
▓ам же опи▒ана ░еализа╢и┐ о╖е░еди ▒ п░ио░и▓е▓ами на базе к│╖и.
П░о╢ед│░а Build-Heap п░едложена Флойдом [69].
8
Б╗▒▓░а┐ ▒о░▓и░овка
В ╜▓ой главе ░а▒▒мо▓░ен ▓ак наз╗ваем╗й алго░и▓м └б╗▒▓░ой ▒о░▓и░овки┴. Хо▓┐ в░ем┐ его ░або▓╗ дл┐ ма▒▒ива из n ╖и▒ел в ╡│д╕ем ▒л│╖ае ▒о▒▓авл┐е▓ (n2 ), на п░ак▓ике ╜▓о▓ алго░и▓м ┐вл┐е▓▒┐
одним из ▒ам╗╡ б╗▒▓░╗╡: ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ ▒о▒▓авл┐е▓ (n lg n), п░и╖ем множи▓ел╝ п░и n lg n довол╝но
мал. К░оме ▓ого, б╗▒▓░а┐ ▒о░▓и░овка не ▓░еб│е▓ дополни▓ел╝ной
пам┐▓и и ▒о╡░ан┐е▓ ╜┤┤ек▓ивно▒▓╝ дл┐ ▒и▒▓ем ▒ ви░▓│ал╝ной пам┐▓╝╛.
В ░азделе 8.1 опи▒╗вае▓▒┐ алго░и▓м в ╢елом и п░о╢ед│░а ░азделени┐ ма▒▒ива на ╖а▒▓и. О╢енка ╜┤┤ек▓ивно▒▓и алго░и▓ма довол╝но
▒ложна; в ░азделе 8.2 п░ивод┐▓▒┐ ин▓│и▓ивн╗е довод╗, а ▒▓░огий
анализ о▓ложен до ░аздела 8.4. В ░азделе 8.3 опи▒ан╗ ва░иан▓╗ б╗▒▓░ой ▒о░▓и░овки, и▒пол╝з│╛╣ие гене░а▓о░ ▒л│╖айн╗╡ ╖и▒ел. П░и
╜▓ом в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае (п░и не│да╖ном ▒л│╖айном в╗бо░е) ▒о▒▓авл┐е▓ O(n2 ), но ▒░еднее в░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ ли╕╝
O(n lg n). (Гово░┐ о ▒░еднем в░емени, м╗ имеем в вид│ не │▒░еднение по в▒ем в╡одам, а ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗,
ко▓о░ое дл┐ л╛бого в╡ода не п░ево▒╡оди▓ O(n log n).) Один из ва░иан▓ов ве░о┐▓но▒▓ного алго░и▓ма б╗▒▓░ой ▒о░▓и░овки под░обно
анализи░│е▓▒┐ в ░азделе 8.4, где доказан╗ о╢енки дл┐ ▒░еднего и
наибол╝╕его в░емени ░або▓╗.
8.1. Опи▒ание б╗▒▓░ой ▒о░▓и░овки
Б╗▒▓░а┐ ▒о░▓и░овка (quicksort), как и ▒о░▓и░овка ▒ли┐нием,
о▒нована на п░ин╢ипе └░аздел┐й и вла▒▓в│й┴ (▒м. ░азд. 1.3.1). Со░▓и░овка │╖а▒▓ка A[p : :r] п░ои▒╡оди▓ ▓ак:
Элемен▓╗ ма▒▒ива A пе░е▒▓авл┐╛▓▒┐ ▓ак, ╖▓об╗ л╛бой из
╜лемен▓ов A[p]; : : :; A[q ] б╗л не бол╝╕е л╛бого из ╜лемен▓ов
A[q +1]; : : :; A[r], где q | неко▓о░ое ╖и▒ло в ин▓е░вале p 6 q < r.
Э▓│ опе░а╢и╛ м╗ б│дем наз╗ва▓╝ ░азделением (partition).
П░о╢ед│░а ▒о░▓и░овки ░ек│░▒ивно в╗з╗вае▓▒┐ дл┐ ма▒▒ивов
A[p : :q] и A[q + 1 : :r].
Опи▒ание б╗▒▓░ой ▒о░▓и░овки
155
По▒ле ╜▓ого ма▒▒ив A[p : :r] о▓▒о░▓и░ован.
И▓ак, п░о╢ед│░а ▒о░▓и░овки Quicksort в╗гл┐ди▓ ▒лед│╛╣им
об░азом:
Quicksort(A; p; r)
1 if p < r
2 then q Partition(A; p; r)
3
Quicksort(A; p; q )
4
Quicksort(A; q + 1; r)
Дл┐ ▒о░▓и░овки в▒его ма▒▒ива необ╡одимо в╗полни▓╝ п░о╢ед│░│
Quicksort(A; 1; length[A]).
Разбиение ма▒▒ива
О▒новной ╕аг алго░и▓ма | п░о╢ед│░а Partition, ко▓о░а┐ пе░е▒▓авл┐е▓ ╜лемен▓╗ ма▒▒ива A[p : :r] н│жн╗м об░азом:
Partition(A; p; r)
1 x A[p]
2 i p;1
3 j r+1
4 while true
5
do repeat j j ; 1
6
until A[j ] 6 x
7
repeat i i + 1
8
until A[i] > x
9
if i < j
10
then помен┐▓╝ A[i] $ A[j ]
11
else return j
Рабо▓а п░о╢ед│░╗ Partition показана на ░и▒. 8.1. Элемен▓ x =
A[p] в╗би░ае▓▒┐ в ка╖е▒▓ве └г░ани╖ного┴; ма▒▒ив A[p : :q] б│де▓ ▒оде░жа▓╝ ╜лемен▓╗, не бол╝╕ие x, а ма▒▒ив A[q +1 : :r] | ╜лемен▓╗,
не мен╝╕ие x. Иде┐ ▒о▒▓ои▓ в ▓ом, ╖▓об╗ накаплива▓╝ ╜лемен▓╗,
не бол╝╕ие x, в на╖ал╝ном о▓░езке ма▒▒ива (A[p : :i]), а ╜лемен▓╗,
не мен╝╕ие x | в кон╢е (A[j : : r]). В на╖але оба └накопи▓ел┐┴ п│▒▓╗: i = p ; 1, j = r + 1.
Вн│▓░и ╢икла while (в ▒▓░ока╡ 5{8) к на╖ал╝ном│ и коне╖ном│
│╖а▒▓кам п░и▒оедин┐╛▓▒┐ ╜лемен▓╗ (как миним│м по одном│). По▒ле в╗полнени┐ ╜▓и╡ ▒▓░ок A[i] > x > A[j ]. Е▒ли м╗ помен┐ем A[i]
и A[j ] ме▒▓ами, ▓о и╡ можно б│де▓ п░и▒оедини▓╝ к на╖ал╝ном│ и
коне╖ном│ │╖а▒▓кам.
В момен▓ в╗╡ода из ╢икла в╗полнено не░авен▒▓во i > j . П░и
╜▓ом ма▒▒ив ░азби▓ на ╖а▒▓и A[p]; : : :; A[j ] и A[j + 1]; : : :; A[r]; л╛бой ╜лемен▓ пе░вой ╖а▒▓и не п░ево▒╡оди▓ л╛бого ╜лемен▓а в▓о░ой
156
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
Ри▒. 8.1 Рабо▓а п░о╢ед│░╗ Partition. Незак░а╕енн╗е ╜лемен▓╗ о▓но▒┐▓▒┐
к │же ▒┤о░ми░ованн╗м к│▒кам, зак░а╕енн╗е е╣е не ░а▒п░еделен╗. (а) На╖ал╝ное ▒о▒▓о┐ние ма▒▒ива, на╖ал╝н╗й и коне╖н╗й к│▒ки п│▒▓╗. Элемен▓
x = A[p] = 5 и▒пол╝з│е▓▒┐ в ка╖е▒▓ве г░ани╖ного. (б) Рез│л╝▓а▓ пе░вого п░о╡ода ╢икла while (▒▓░оки 4{8). (в) Элемен▓╗ A[i] и A[j ] мен┐╛▓▒┐ ме▒▓ами (▒▓░ока 10). (г) Рез│л╝▓а▓ в▓о░ого п░о╡ода ╢икла while. (д) Рез│л╝▓а▓ ▓░е▓╝его (по▒леднего) п░о╡ода ╢икла while. По▒кол╝к│ i > j , п░о╢ед│░а о▒▓анавливае▓▒┐ и
возв░а╣ае▓ зна╖ение q = j . Элемен▓╗ ▒лева о▓ A[j ] (вкл╛╖а┐ ▒ам ╜▓о▓ ╜лемен▓)
не бол╝╕е, ╖ем x = 5, а ╜лемен▓╗ ▒п░ава о▓ A[j ] не мен╝╕е, ╖ем x = 5.
╖а▒▓и. П░о╢ед│░а возв░а╣ае▓ зна╖ение j .
Хо▓┐ иде┐ п░о╢ед│░╗ о╖ен╝ п░о▒▓а, ▒ам алго░и▓м ▒оде░жи▓ ░┐д
▓онки╡ момен▓ов. Нап░име░, не о╖евидно, ╖▓о индек▒╗ i и j не
в╗╡од┐▓ за г░ани╢╗ п░омеж│▓ка [p : :r] в п░о╢е▒▒е ░або▓╗. Д░│гой п░име░: важно, ╖▓о в ка╖е▒▓ве г░ани╖ного зна╖ени┐ в╗би░ае▓▒┐ A[p], а не, ▒кажем, A[r]. В по▒леднем ▒л│╖ае може▓ оказа▓╝▒┐,
╖▓о A[r] | ▒ам╗й бол╝╕ой ╜лемен▓ ма▒▒ива, и в кон╢е в╗полнени┐ п░о╢ед│░╗ б│де▓ i = j = r, ▓ак ╖▓о возв░а╣а▓╝ q = j б│де▓
нел╝з┐ | на░│╕и▓▒┐ ▓░ебование q < r, и п░о╢ед│░а Quicksort
за╢икли▓▒┐. П░авил╝но▒▓╝ п░о╢ед│░╗ Partition ▒о▒▓авл┐е▓ п░едме▓ зада╖и 8-1.
В░ем┐ ░або▓╗ п░о╢ед│░╗ Partition ▒о▒▓авл┐е▓ (n), где n =
r ; p + 1 (▒м. │п░. 8.1-3).
Уп░ажнени┐
8.1-1
Покажи▓е, ▒лед│┐ об░аз╢│ ░и▒. 8.1, как ░або▓ае▓ п░о╢ед│░а
Partition дл┐ ма▒▒ива A = h13; 19; 9; 5; 12; 8; 7; 4; 11; 2; 6; 21i.
8.1-2 П│▒▓╝ в▒е ╜лемен▓╗ ма▒▒ива A[p : :r] ░авн╗. Какое зна╖ение
ве░не▓ п░о╢ед│░а Partition?
8.1-3 П░иведи▓е п░о▒▓ое ▒ооб░ажение, об║┐▒н┐╛╣ее, по╖ем│
в░ем┐ ░або▓╗ п░о╢ед│░╗ Partition ▒о▒▓авл┐е▓ (n).
Рабо▓а б╗▒▓░ой ▒о░▓и░овки
157
8.1-4 Как о▓▒о░▓и░ова▓╝ ма▒▒ив в по░┐дке │б╗вани┐ (а не воз░а▒▓ани┐), и▒пол╝з│┐ ▓е же ме▓од╗?
8.2. Рабо▓а б╗▒▓░ой ▒о░▓и░овки
В░ем┐ ░або▓╗ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки зави▒и▓ о▓ ▓ого,
как ░азбивае▓▒┐ ма▒▒ив на каждом ╕аге. Е▒ли ░азбиение п░ои▒╡оди▓ на п░име░но ░авн╗е ╖а▒▓и, в░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ O(n lg n),
как и дл┐ ▒о░▓и░овки ▒ли┐нием. Е▒ли же ░азме░╗ ╖а▒▓ей ▒ил╝но
о▓ли╖а╛▓▒┐, ▒о░▓и░овка може▓ занима▓╝ в░ем┐ O(n2 ), как п░и ▒о░▓и░овке в▒▓авками.
Наи╡│д╕ее ░азбиение
└Наиболее не░авн╗е ╖а▒▓и┴ пол│╖а▓▒┐, е▒ли одна ╖а▒▓╝ ▒оде░жи▓
n ; 1 ╜лемен▓, а в▓о░а┐ | в▒его 1. (Как м╗ │видим в ░азделе 8.4.1,
╜▓о наи╡│д╕ий ▒л│╖ай ▒ ▓о╖ки з░ени┐ в░емени ░або▓╗.) П░едположим, ╖▓о на каждом ╕аге п░ои▒╡оди▓ именно ▓ак. По▒кол╝к│
п░о╢ед│░а ░азбиени┐ занимае▓ в░ем┐ (n), дл┐ в░емени ░або▓╗
T (n) пол│╖аем ▒оо▓но╕ение
T (n) = T (n ; 1) + (n)
По▒кол╝к│ T (1) = (1), имеем
T (n) = T (n ; 1) + (n) =
n
X
k=1
(k) = n
X
k=1
!
k = (n2 )
(по▒ледн┐┐ ▒│мма | а░и┤ме▓и╖е▒ка┐ п░ог░е▒▒и┐, ▒м. ┤о░м│л│ (3.2)). Де░ево ░ек│░▒ии дл┐ ╜▓ого ▒л│╖а┐ показано на ░и▒. 8.2.
(По повод│ де░ев╝ев ░ек│░▒ии ▒м. ░азд. 4.2.)
М╗ видим, ╖▓о п░и мак▒имал╝но не▒балан▒и░ованном ░азбиении
в░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ (n2 ), как и дл┐ ▒о░▓и░овки в▒▓авками.
В ╖а▒▓но▒▓и, ╜▓о п░ои▒╡оди▓, е▒ли ма▒▒ив изна╖ал╝но о▓▒о░▓и░ован (заме▓им, ╖▓о в ╜▓ом ▒л│╖ае ▒о░▓и░овка в▒▓авками п░оизводи▓▒┐ за в░ем┐ (n)).
Наил│╖╕ее ░азбиение
Е▒ли на каждом ╕аге ма▒▒ив ░азбивае▓▒┐ ░овно пополам, б╗▒▓░а┐ ▒о░▓и░овка ▓░еб│е▓ зна╖и▓ел╝но мен╝╕е в░емени. Дей▒▓ви▓ел╝но, в ╜▓ом ▒л│╖ае ░ек│░░ен▓ное ▒оо▓но╕ение имее▓ вид
T (n) = 2T (n=2) + (n)
и, ▒огла▒но ▓ео░еме 4.1 (▒л│╖ай 2), T (n) = (n lg n). Де░ево ░ек│░▒ии дл┐ ╜▓ого ▒л│╖а┐ показано на ░и▒│нке 8.3.
158
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
Ри▒. 8.2 Де░ево ░ек│░▒ии п░о╢ед│░╗ Quicksort дл┐ наи╡│д╕его ▒л│╖а┐ (п░о╢ед│░а Partition кажд╗й ░аз п░оизводи▓ ░азбиение, в ко▓о░ом одна из ╖а▒▓ей
▒оде░жи▓ один ╜лемен▓). В░ем┐ ░або▓╗ ░авно (n2 ).
Ри▒. 8.3 Де░ево ░ек│░▒ии п░о╢ед│░╗ Quicksort дл┐ наил│╖╕его ▒л│╖а┐ (ма▒▒ив кажд╗й ░аз ░азбивае▓▒┐ пополам). В░ем┐ ░або▓╗ ░авно (n lg n).
П░омеж│▓о╖н╗й ▒л│╖ай
Как б│де▓ показано в ░азделе 8.4, ▒░еднее в░ем┐ ░або▓╗ (▒ ▓о╖но▒▓╝╛ до множи▓ел┐) ▒овпадае▓ ▒ в░еменем ░або▓╗ в наил│╖╕ем
▒л│╖ае. Ч▓об╗ об║┐▒ни▓╝ ╜▓о, по▒мо▓░им, как мен┐е▓▒┐ ░ек│░░ен▓ное ▒оо▓но╕ение в зави▒имо▒▓и о▓ ▒▓епени ▒балан▒и░ованно▒▓и
░азбиени┐.
П│▒▓╝, нап░име░, на каждом ╕аге ма▒▒ив ░азбивае▓▒┐ на две
╖а▒▓и ▒ о▓но╕ением ░азме░ов 9 : 1. Тогда
T (n) = T (9n=10) + T (n=10) + n
(дл┐ │доб▒▓ва м╗ заменили (n) на n). Де░ево ░ек│░▒ии показано на ░и▒│нке 8.4. На каждом │░овне м╗ п░оизводим не более n
дей▒▓вий, ▓ак ╖▓о в░ем┐ ░або▓╗ оп░едел┐е▓▒┐ гл│биной ░ек│░▒ии.
Рабо▓а б╗▒▓░ой ▒о░▓и░овки
159
Де░ево ░ек│░▒ии дл┐ ▒л│╖а┐, когда ░азбиение кажд╗й ░аз п░оизводи▓▒┐ в о▓но╕ении 9 : 1. В░ем┐ ░або▓╗ ░авно (n lg n).
Ри▒. 8.4
В данном ▒л│╖ае ╜▓а гл│бина ░авна log10=9 n = (lg n), ▓ак ╖▓о
в░ем┐ ░або▓╗ по-п░ежнем│ ▒о▒▓авл┐е▓ (n lg n), ╡о▓┐ кон▒▓ан▓а и
бол╝╕е. Я▒но, ╖▓о дл┐ л╛бого ┤ик▒и░ованного о▓но╕ени┐ ░азме░ов ╖а▒▓ей (▒кол╝ б╗ велико оно ни б╗ло) гл│бина де░ева ░ек│░▒ии
по-п░ежнем│ б│де▓ лога░и┤ми╖е▒кой, а в░ем┐ ░або▓╗ б│де▓ ░авно
(n lg n).
С░еднее в░ем┐: ин▓│и▓ивн╗е ▒ооб░ажени┐
Ч▓об╗ воп░о▒ о ▒░еднем в░емени ░або▓╗ имел ▒м╗▒л, н│жно
│▓о╖ни▓╝, ▒ какой ╖а▒▓о▓ой по┐вл┐╛▓▒┐ ░азли╖н╗е в╡одн╗е зна╖ени┐. Как п░авило, п░едполагае▓▒┐, ╖▓о в▒е пе░е▒▓ановки в╡одн╗╡ зна╖ений ░авнове░о┐▓н╗. (М╗ ве░нем▒┐ к ╜▓ом│ в ▒лед│╛╣ем
░азделе.)
Дл┐ на│гад вз┐▓ого ма▒▒ива ░азбиени┐ в░┐д ли б│д│▓ в▒е в░ем┐
п░ои▒╡оди▓╝ в одном и ▓ом же о▓но╕ении | ▒ко░ее в▒его, ╖а▒▓╝
░азбиений б│де▓ ╡о░о╕о ▒балан▒и░ована, а ╖а▒▓╝ не▓. Как показ╗вае▓ │п░. 8.2-5, п░име░но 80 п░о╢ен▓ов ░азбиений п░оизвод┐▓▒┐ в
о▓но╕ении не более 9 : 1.
Б│дем п░едполага▓╝ дл┐ п░о▒▓о▓╗, ╖▓о на каждом в▓о░ом │░овне в▒е ░азбиени┐ наи╡│д╕ие, а на о▒▓ав╕ей▒┐ половине │░овней
наил│╖╕ие (п░име░ показан на ░и▒. 8.5(а)). По▒кол╝к│ по▒ле каждого └╡о░о╕его┴ ░азбиени┐ ░азме░ ╖а▒▓ей │мен╝╕ае▓▒┐ вдвое, ╖и▒ло
└╡о░о╕и╡┴ │░овней ░авно (lg n), а по▒кол╝к│ кажд╗й в▓о░ой │░овен╝ └╡о░о╕ий┴, об╣ее ╖и▒ло │░овней ░авно (lg n), а в░ем┐ ░або▓╗
| (n lg n). Таким об░азом, пло╡ие │░овни не и▒по░▓или а▒имп▓о▓ик│ в░емени ░або▓╗ (а ли╕╝ │вели╖или кон▒▓ан▓│, ▒к░╗▓│╛ в
160
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
Ри▒. 8.5 (а) Два │░овн┐: пло╡ой (n ░азбивае▓▒┐ на n ; 1 и 1) и ╡о░о╕ий (n ; 1
░азбивае▓▒┐ на две ░авн╗е ╖а▒▓и). (б) Е▒ли ╜▓и два │░овн┐ замени▓╝ одним,
пол│╖и▓▒┐ ░азбиение на по╖▓и ░авн╗е по вели╖ине ╖а▒▓и.
а▒имп▓о▓и╖е▒ком обозна╖ении).
Уп░ажнени┐
8.2-1 Докажи▓е, ╖▓о е▒ли ма▒▒ив ▒о▒▓ои▓ из одинаков╗╡ ╜лемен▓ов, ▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Quicksort ░авно (n lg n).
8.2-2 П│▒▓╝ ма▒▒ив о▓▒о░▓и░ован в по░┐дке │б╗вани┐. Докажи▓е, ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ Quicksort ▒о▒▓авл┐е▓ (n2 ).
8.2-3 Как п░авило, в банка╡ об░аба▓╗ва╛▓ ╖еки в по░┐дке и╡
по▒▓│плени┐; клиен▓╗ же п░едпо╖и▓а╛▓, ╖▓об╗ в о▓╖е▓е пла▓ежи
б╗ли │казан╗ в по░┐дке номе░ов ╖еков. Владеле╢ ╖ековой книжки
об╗╖но в╗пи▒╗вае▓ ╖еки под░┐д, а пол│╖а▓ели ╖еков п░ед║┐вл┐╛▓
и╡ в банк в▒ко░е по▒ле в╗пи▒╗вани┐. Таким об░азом, по░┐док номе░ов на░│╕ае▓▒┐ незна╖и▓ел╝но. Следова▓ел╝но, банк│ ▓░еб│е▓▒┐
о▓▒о░▓и░ова▓╝ по╖▓и о▓▒о░▓и░ованн╗й ма▒▒ив. Об║┐▒ни▓е, по╖ем│ ▒о░▓и░овка в▒▓авками в ▓аки╡ ▒л│╖а┐╡ ░або▓ае▓ б╗▒▓░ее, ╖ем
б╗▒▓░а┐ ▒о░▓и░овка.
8.2-4 П│▒▓╝ ░азбиени┐ на каждом ╕аге п░оизвод┐▓▒┐ в о▓но╕ении : 1 ; , где 0 < 6 1=2. Докажи▓е, ╖▓о минимал╝на┐ гл│бина
ли▒▓а на де░еве ░ек│░▒ии п░име░но ░авна ; lg n= lg , а мак▒имал╝на┐ п░име░но ░авна ; lg n= lg(1;). (Не забо▓╝▓е▒╝ об ок░│глении.)
8.2-5? Докажи▓е, ╖▓о дл┐ л╛бого ╖и▒ла в ин▓е░вале 0 < 6 1=2
ве░о┐▓но▒▓╝ ▓ого, ╖▓о ░азбиение ▒л│╖айного ма▒▒ива б│де▓ ▒балан-
Ве░о┐▓но▒▓н╗е алго░и▓м╗ б╗▒▓░ой ▒о░▓и░овки
161
▒и░овано не ╡│же, ╖ем : 1 ; , п░име░но ░авна 1 ; 2. П░и каком
зна╖ении ве░о┐▓но▒▓╝ ╜▓ого ▒об╗▓и┐ ░авна 1=2?
8.3. Ве░о┐▓но▒▓н╗е алго░и▓м╗ б╗▒▓░ой ▒о░▓и░овки
Ранее м╗ п░едположили, ╖▓о в▒е пе░е▒▓ановки в╡одн╗╡ зна╖ений
░авнове░о┐▓н╗. Е▒ли ╜▓о ▓ак, а ░азме░ ма▒▒ива до▒▓а▓о╖но велик,
б╗▒▓░а┐ ▒о░▓и░овка | один из наиболее ╜┤┤ек▓ивн╗╡ алго░и▓мов. На п░ак▓ике, однако, ╜▓о п░едположение (░авной ве░о┐▓но▒▓и
в▒е╡ пе░е▒▓ановок на в╡оде) не в▒егда оп░авдано (▒м. │п░. 8.2-3).
В ╜▓ом ░азделе м╗ введем пон┐▓ие ве░о┐▓но▒▓ного алго░и▓ма и
░а▒▒мо▓░им два ве░о┐▓но▒▓н╗╡ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки,
ко▓о░╗е позвол┐╛▓ о▓каза▓╝▒┐ о▓ п░едположени┐ о ░авной ве░о┐▓но▒▓и в▒е╡ пе░е▒▓ановок.
Иде┐ ▒о▒▓ои▓ в п░ивне▒ении ▒л│╖айно▒▓и, обе▒пе╖ива╛╣ем н│жное ░а▒п░еделение. Нап░име░, пе░ед на╖алом ▒о░▓и░овки можно
▒л│╖айно пе░е▒▓ави▓╝ ╜лемен▓╗, по▒ле ╖его │же в▒е пе░е▒▓ановки
▒▓ан│▓ ░авнове░о┐▓н╗ми (╜▓о можно ▒дела▓╝ за в░ем┐ O(n) | ▒м.
│п░. 8.3-4). Така┐ моди┤ика╢и┐ не │вели╖ивае▓ ▒│╣е▒▓венно в░ем┐
░або▓╗, но ▓епе░╝ ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ не
зави▒и▓ о▓ по░┐дка ╜лемен▓ов во в╡одном ма▒▒иве (они в▒е ░авно
▒л│╖айно пе░е▒▓авл┐╛▓▒┐).
Алго░и▓м наз╗вае▓▒┐ ве░о┐▓но▒▓н╗м (randomized), е▒ли он и▒пол╝з│е▓ гене░а▓о░ ▒л│╖айн╗╡ ╖и▒ел (random-number generator).
М╗ б│дем ▒╖и▓а▓╝, ╖▓о гене░а▓о░ ▒л│╖айн╗╡ ╖и▒ел Random ░або▓ае▓ ▓ак: Random(a; b) возв░а╣ае▓ ▒ ░авной ве░о┐▓но▒▓╝╛ л╛бое
╢елое ╖и▒ло в ин▓е░вале о▓ a до b. Нап░име░, Random(0; 1) возв░а╣ае▓ 0 или 1 ▒ ве░о┐▓но▒▓╝╛ 1=2. П░и ╜▓ом ░азн╗е в╗зов╗ п░о╢ед│░╗ незави▒им╗ в ▒м╗▒ле ▓ео░ии ве░о┐▓но▒▓ей. Можно ▒╖и▓а▓╝,
╖▓о м╗ кажд╗й ░аз б░о▒аем ко▒▓╝ ▒ (b ; a + 1) г░ан┐ми и ▒ооб╣аем номе░ в╗пав╕ей г░ани. (На п░ак▓ике об╗╖но и▒пол╝з│╛▓ гене░а▓о░ п▒евдо▒л│╖айн╗╡ ╖и▒ел (pseudorandom-number generator) |
де▓е░мини░ованн╗й алго░и▓м, ко▓о░╗й в╗дае▓ ╖и▒ла, └по╡ожие┴
на ▒л│╖айн╗е.)
Дл┐ ▓акого ве░о┐▓но▒▓ного ва░иан▓а алго░и▓ма ва░иан▓а б╗▒▓░ой ▒о░▓и░овки не▓ └не│добн╗╡ в╡одов┴: │п░ажнение 13.4-4 показ╗вае▓, ╖▓о пе░е▒▓ановок, п░и ко▓о░╗╡ в░ем┐ ░або▓╗ велико,
▒ов▒ем мало | по╜▓ом│ ве░о┐▓но▒▓╝ ▓ого, ╖▓о алго░и▓м б│де▓ ░або▓а▓╝ долго (дл┐ л╛бого конк░е▓ного в╡ода) невелика.
Аналоги╖н╗й под╡од п░именим и в д░│ги╡ ▒и▓│а╢и┐╡, когда в
╡оде в╗полнени┐ алго░и▓ма м╗ должн╗ в╗б░а▓╝ один из многи╡
ва░иан▓ов его п░одолжени┐, п░и╖ем м╗ не знаем, какие из ни╡
╡о░о╕ие, а какие пло╡ие, но знаем, ╖▓о ╡о░о╕и╡ ва░иан▓ов до▒▓а▓о╖но много. Н│жно ▓ол╝ко, ╖▓об╗ пло╡ие в╗бо░╗ не ░аз░│╕али
162
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
до▒▓игн│▓ого п░и п░ед╗д│╣и╡ ╡о░о╕и╡ (как м╗ видели в ░азделе 8.2, дл┐ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки ╜▓о ▓ак).
Вме▒▓о ▓ого, ╖▓об╗ п░едва░и▓ел╝но пе░е▒▓авл┐▓╝ ╜лемен▓╗ ма▒▒ива, м╗ можем вне▒▓и ╜лемен▓ ▒л│╖айно▒▓и в п░о╢ед│░│ Partition. Именно, пе░ед ░азбиением ма▒▒ива A[p : :r] б│дем мен┐▓╝
╜лемен▓ A[p] ▒о ▒л│╖айно в╗б░анн╗м ╜лемен▓ом ма▒▒ива. Тогда кажд╗й ╜лемен▓ ▒ ░авной ве░о┐▓но▒▓╝╛ може▓ оказа▓╝▒┐ г░ани╖н╗м,
и в ▒░еднем ░азбиени┐ б│д│▓ пол│╖а▓╝▒┐ до▒▓а▓о╖но ▒балан▒и░ованн╗ми.
Э▓о▓ под╡од замен┐е▓ ░азов│╛ ▒л│╖айн│╛ пе░е▒▓ановк│ в╡одов
в на╖але и▒пол╝зованием ▒л│╖айн╗╡ в╗бо░ов на в▒ем п░о▓┐жении
░або▓╗ алго░и▓ма. В ▒│╣но▒▓и ╜▓о ▓о же ▒амое, и оба алго░и▓ма име╛▓ ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ O(n lg n), но
небол╝╕ие ▓е╡ни╖е▒кие ░азли╖и┐ дела╛▓ анализ нового ва░иан▓а
п░о╣е, и именно он б│де▓ ░а▒▒ма▓░ива▓╝▒┐ в ░азделе 8.4.
Изменени┐, ко▓о░╗е н│жно вне▒▓и в п░о╢ед│░╗, ▒ов▒ем невелики:
Randomized-Partition(A; p; r)
1 i Random(p; r)
2 помен┐▓╝ A[p] $ A[i]
3 return Partition(A; p; r)
В о▒новной п░о╢ед│░е ▓епе░╝ б│де▓ и▒пол╝зова▓╝▒┐ RandomizedPartition вме▒▓о Partition:
Randomized-Quicksort(A; p; r)
1 if p < r
2 then q Randomized-Partition(A; p; r)
3
Randomized-Quicksort(A; p; q )
4
Randomized-Quicksort(A; q + 1; r)
Анализом ╜▓ого алго░и▓ма м╗ займем▒┐ в ▒лед│╛╣ем ░азделе.
Уп░ажнени┐
8.3-1 По╖ем│ дл┐ ве░о┐▓но▒▓ного алго░и▓ма важно не мак▒имал╝ное в░ем┐ ░або▓╗ (дл┐ данного в╡ода), а ма▓ема▓и╖е▒кое ожидание ╜▓ого в░емени?
8.3-2 Скол╝ко ░аз п░и в╗полнении п░о╢ед│░╗ RandomizedQuicksort може▓ п░ои▒╡оди▓╝ об░а╣ение к гене░а▓о░│ ▒л│╖айн╗╡ ╖и▒ел Random в ╡│д╕ем ▒л│╖ае? Измени▓▒┐ ли о▓ве▓ дл┐ наил│╖╕его ▒л│╖а┐?
8.3-3? Реализ│й▓е п░о╢ед│░│ Random(a; b), и▒пол╝з│┐ б░о▒ани┐
моне▓╗, ▓. е. да▓╖ик, ▒ ░авной ве░о┐▓но▒▓╝╛ в╗да╛╣ий 0 или 1.
Анализ б╗▒▓░ой ▒о░▓и░овки
163
Каково ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ ва╕ей п░о╢ед│░╗?
8.3-4? П░ид│май▓е ве░о┐▓но▒▓н│╛ п░о╢ед│░│, ко▓о░а┐ за в░ем┐
(n) ▒л│╖айн╗м об░азом пе░е▒▓авл┐е▓ ╜лемен▓╗ в╡одного ма▒▒ива
A[1 : :n].
8.4. Анализ б╗▒▓░ой ▒о░▓и░овки
В ╜▓ом ░азделе м╗ п░ев░а▓им └ин▓│и▓ивн╗е┴ ▒ооб░ажени┐ ░аздела 8.2 в ▒▓░огое ░а▒▒│ждение. Сна╖ала м╗ ░а▒▒мо▓░им наи╡│д╕ий ▒л│╖ай (░а▒▒│ждени┐ б│д│▓ одинаков╗ и дл┐ алго░и▓ма
Quicksort, и дл┐ алго░и▓ма Randomized-Quicksort), а за▓ем
найдем ▒░еднее в░ем┐ ░або▓╗ алго░и▓ма Randomized-Quicksort.
8.4.1. Анализ наи╡│д╕его ▒л│╖а┐
В ░азделе 8.2 м╗ видели, ╖▓о е▒ли ░азбиение на каждом ╕аге наиболее не▒балан▒и░овано, ▓о в░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ (n2 ). Ин▓│и▓ивно ┐▒но, ╖▓о ╜▓о наи╡│д╕ий (в ▒м╗▒ле в░емени ░або▓╗) ▒л│╖ай.
Сей╖а▒ м╗ ▒▓░ого докажем ╜▓о.
Дл┐ доказа▓ел╝▒▓ва ▓ого, ╖▓о в░ем┐ ░або▓╗ ▒о▒▓авл┐е▓ O(n2),
м╗ и▒пол╝з│ем ме▓од под▒▓ановки (▒м. ░азд. 4.1). П│▒▓╝ T (n) |
наибол╝╕ее в░ем┐ ░або▓╗ алго░и▓ма дл┐ ма▒▒ива длин╗ n. Тогда,
о╖евидно,
T (n) = 16max
(T (q ) + T (n ; q )) + (n)
q6n;1
(8.1)
(м╗ ░а▒▒ма▓░иваем в▒е возможн╗е ░азбиени┐ на пе░вом ╕аге).
П░едположим, ╖▓о T (q ) 6 cq 2 дл┐ неко▓о░ой кон▒▓ан▓╗ c и дл┐
в▒е╡ q , мен╝╕и╡ неко▓о░ого n. Тогда
T (n) 6 16max
(cq 2 +c(n;q )2)+(n) = c16max
(q 2 +(n;q )2 )+(n):
q6n;1
q6n;1
Квад░а▓н╗й ▓░е╡╖лен q 2 + (n ; q )2 до▒▓игае▓ мак▒им│ма на о▓░езке 1 6 q 6 n ; 1 в его кон╢а╡ (в▓о░а┐ п░оизводна┐ по q положи▓ел╝на, по╜▓ом│ ┤│нк╢и┐ в╗п│кла вниз, ▒м. │п░. 8.4-2). Э▓о▓
мак▒им│м ░авен 12 + (n ; 1)2 = n2 ; 2(n ; 1). О▓▒╛да пол│╖аем
T (n) 6 cn2 ; 2c(n ; 1) + (n) 6 cn2;
е▒ли кон▒▓ан▓а c в╗б░ана ▓ак, ╖▓об╗ по▒леднее ▒лагаемое б╗ло
мен╝╕е п░едпо▒леднего. И▓ак, в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае ▒о▒▓авл┐е▓ (n2 ).
164
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
8.4.2. Анализ ▒░еднего в░емени ░або▓╗
Как м╗ │же видели в ░азделе 8.2, е▒ли ░азбиени┐ п░оизвод┐▓▒┐
▓ак, ╖▓о о▓но╕ение ░азме░ов ╖а▒▓ей ог░ани╖ено, ▓о гл│бина де░ева ░ек│░▒ии ░авна (lg n), а в░ем┐ ░або▓╗ | (n lg n). Ч▓об╗ пол│╖и▓╝ о╢енк│ ▒░еднего в░емени ░або▓╗ алго░и▓ма RandomizedQuicksort, м╗ ▒на╖ала п░оанализи░│ем ░або▓│ п░о╢ед│░╗ Partition, за▓ем пол│╖им ░ек│░░ен▓ное ▒оо▓но╕ение на ▒░еднее в░ем┐
░або▓╗ и ░е╕им его (поп│▓но пол│╖ив одн│ полезн│╛ о╢енк│).
Анализ ░азбиений
Напомним, ╖▓о пе░ед ▓ем как в ▒▓░оке 3 п░о╢ед│░╗
Randomized-Partition в╗з╗вае▓▒┐ п░о╢ед│░а Partition, ╜ле-
мен▓ A[p] пе░е▒▓авл┐е▓▒┐ ▒о ▒л│╖айно в╗б░анн╗м ╜лемен▓ом
ма▒▒ива A[p : :r]. Дл┐ п░о▒▓о▓╗ м╗ б│дем п░едполага▓╝, ╖▓о в▒е
╖и▒ла в ма▒▒иве ░азли╖н╗. Хо▓┐ о╢енка ▒░еднего в░емени ▒о╡░ан┐е▓▒┐ и в ▓ом ▒л│╖ае, когда в ма▒▒иве е▒▓╝ одинаков╗е ╜лемен▓╗,
пол│╖и▓╝ ее ▒ложнее, и м╗ ╜▓ого дела▓╝ не б│дем.
П░ежде в▒его, заме▓им, ╖▓о зна╖ение q , ко▓о░ое возв░а▓и▓ п░о╢ед│░а Partition, зави▒и▓ ▓ол╝ко о▓ ▓ого, ▒кол╝ко в ма▒▒иве ╜лемен▓ов, не бол╝╕и╡ x = A[p] (╖и▒ло ▓аки╡ ╜лемен▓ов м╗ б│дем
наз╗ва▓╝ ░ангом (rank) ╜лемен▓а x и обозна╖а▓╝ rank(x)). Е▒ли
n = r ; p + 1 | ╖и▒ло ╜лемен▓ов в ма▒▒иве, ▓о, по▒кол╝к│ в▒е ╜лемен▓╗ име╛▓ ░авн╗е ╕ан▒╗ попа▒▓╝ на ме▒▓о A[p], в▒е зна╖ени┐
rank(x), о▓ 1 до n, ░авнове░о┐▓н╗ (име╛▓ ве░о┐▓но▒▓╝ 1=n).
Е▒ли rank(x) > 1, ▓о, как легко виде▓╝, п░и ░азбиении лева┐
╖а▒▓╝ б│де▓ ▒оде░жа▓╝ rank(x) ; 1 ╜лемен▓ов | в ней окаж│▓▒┐ в▒е
╜лемен▓╗, мен╝╕ие x. Е▒ли же rank(x) = 1, ▓о лева┐ ╖а▒▓╝ б│де▓
▒оде░жа▓╝ один ╜лемен▓ (по▒ле пе░вого же в╗полнени┐ ╢икла б│де▓
i = j = p). О▓▒╛да ▒лед│е▓, ╖▓о ▒ ве░о┐▓но▒▓╝╛ 1=n лева┐ ╖а▒▓╝
б│де▓ ▒оде░жа▓╝ 2; 3; : : :; n ; 1 ╜лемен▓ов, а ▒ ве░о┐▓но▒▓╝╛ 2=n |
один ╜лемен▓.
Рек│░░ен▓ное ▒оо▓но╕ение дл┐ ▒░еднего в░емени ░або▓╗
Обозна╖им ▒░еднее в░ем┐ ░або▓╗ алго░и▓ма RandomizedQuicksort дл┐ ма▒▒ива из n ╜лемен▓ов ╖е░ез T (n). Я▒но, ╖▓о
T (1) = (1). В░ем┐ ░або▓╗ ▒о▒▓ои▓ из в░емени ░або▓╗ п░о╢ед│░╗
Partition, ко▓о░ое ▒о▒▓авл┐е▓ (n), и в░емени ░або▓╗ дл┐ дв│╡
ма▒▒ивов ░азме░а q и n ; q , п░и╖ем q ▒ ве░о┐▓но▒▓╝╛ 2=n п░инимае▓ зна╖ение 1 и ▒ ве░о┐▓но▒▓╝╛ 1=n | зна╖ени┐ 2; : : :; n ; 1.
Анализ б╗▒▓░ой ▒о░▓и░овки
165
По╜▓ом│
0
T (n) = n1 @T (1) + T (n ; 1) +
nX
;1
q=1
1
(T (q ) + T (n ; q ))A + (n) (8.2)
(▒лагаемое, ▒оо▓ве▓▒▓в│╛╣ее q = 1, в╡оди▓ дважд╗). По▒кол╝к│
T (1) = (1) и T (n) = O(n2), имеем
1 (T (1) + T (n ; 1)) = 1 ((1) + O(n2 )) = O(n):
n
n
По╜▓ом│ ▒лагаем╗е T (1) и T (n ; 1) в пе░вой ▒кобке (8.2) можно
вкл╛╖и▓╝ в (n). С │╖е▓ом ╜▓ого пол│╖аем
nX
;1
T (n) = n1
q=1
(T (q ) + T (n ; q )) + (n):
(8.3)
По▒кол╝к│ каждое ▒лагаемое T (k), где k = 1; : : :; n ; 1, в▒▓░е╖ае▓▒┐
в ▒│мме дважд╗, ее можно пе░епи▒а▓╝ ▓ак:
T (n) = n2
n;1
X
k=1
T (k) + (n):
(8.4)
Ре╕ение ░ек│░░ен▓ного ▒оо▓но╕ени┐
Соо▓но╕ение (8.4) можно ░е╕и▓╝, и▒пол╝з│┐ ме▓од под▒▓ановки.
П░едположим, ╖▓о T (n) 6 an lg n + b, где кон▒▓ан▓╗ a > 0 и b > 0
пока неизве▒▓н╗, и поп╗▓аем▒┐ доказа▓╝ ╜▓о по инд│к╢ии. П░и
n = 1 ╜▓о ве░но, е▒ли вз┐▓╝ до▒▓а▓о╖но бол╝╕ие a и b. П░и n > 1
имеем
T (n) = n2
6 n2
nX
;1
k=1
nX
;1
T (k) + (n)
(ak lg k + b) + (n)
k=1
nX
;1
= 2na
k=1
k lg k + 2nb (n ; 1) + (n):
Ниже м╗ покажем, ╖▓о пе░в│╛ ▒│мм│ можно о╢ени▓╝ ▓ак:
nX
;1
k=1
k lg k 6 12 n2 lg n ; 18 n2 :
(8.5)
166
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
И▒пол╝з│┐ ╜▓о, пол│╖им
1
1
2
a
2
2
T (n) 6 n 2 n lg n ; 8 n + 2nb (n ; 1) + (n)
6 an lg n ; a4 n + 2b + (n)
= an lg n + b + (n) + b ; a4 n 6 an lg n + b;
е▒ли в╗б░а▓╝ a ▓ак, ╖▓об╗ a4 n б╗ло бол╝╕е (n)+ b. Следова▓ел╝но,
▒░еднее в░ем┐ ░або▓╗ е▒▓╝ O(n lg n).
Доказа▓ел╝▒▓во о╢енки дл┐ ▒│мм╗
О▒▓ало▒╝ доказа▓╝ о╢енк│ (8.5). По▒кол╝к│ каждое ▒лагаемое не
п░ев╗╕ае▓ n lg n, пол│╖аем о╢енк│
nX
;1
k lg k 6 n2 lg n:
k=1
Дл┐ на╕и╡ ╢елей она не под╡оди▓ | нам необ╡одима более ▓о╖на┐
о╢енка 12 n2 lg n ; (n2 ).
Е▒ли в п░ед╗д│╣ей о╢енке замен┐▓╝ ли╕╝ lg k на lg n, о▒▓авив k
в неп░ико▒новенно▒▓и, пол│╖им о╢енк│
nX
;1
k=1
k lg k 6 lg n
nX
;1
k=1
k = n(n2; 1) lg n 6 12 n2 lg n:
О▒▓ало▒╝ ли╕╝ заме▓и▓╝, ╖▓о замен┐┐ lg k на lg n, м╗ п░ибавили
по к░айней ме░е по k 1 к каждом│ ▒лагаемом пе░вой половин╗
▒│мм╗ (где k 6 n=2), в▒его п░име░но (n=2)2=2 = n2 =8.
Более ┤о░мал╝но,
nX
;1
k=1
k lg k =
dn=X
2e;1
k=1
k lg k +
nX
;1
k=dn=2e
k lg k
П░и k < dn=2e имеем lg k 6 lg(n=2) = lg n ; 1. По╜▓ом│
nX
;1
k=1
k lg k 6 (lg n ; 1)
= lg n
nX
;1
k=1
dn=X
2e;1
k;
k + lg n
k=1
dn=X
2e;1
k=1
6 12 n2 lg n ; 81 n2
nX
;1
k=dn=2e
k
k 6 12 n(n ; 1) lg n ; 12 n2 ; 1 n2
Анализ б╗▒▓░ой ▒о░▓и░овки
167
п░и n > 2. О╢енка (8.5) доказана.
[След│╛╣ий п░о▒▓ой в╗вод о╢енки дл┐ ▒░еднего в░емени ░або▓╗ ве░о┐▓но▒▓ного алго░и▓ма б╗▒▓░ой ▒о░▓и░овки (дл┐ не▒кол╝ко
д░│гого ва░иан▓а алго░и▓ма) п░едложил Л.А. Левин.
(1) Б│дем п░ед▒▓авл┐▓╝ ▒ебе ▒о░▓и░овк│ ▓ак: е▒▓╝ N камней ░азного ве▒а и ╖а╕е╖н╗е ве▒╗ дл┐ и╡ ▒░авнени┐. М╗ бе░ем ▒л│╖айн╗й
камен╝ и делим в▒╛ к│╖│ на ▓░и ╖а▒▓и: лег╖е его, ▓┐желее его и он
▒ам, по▒ле ╖его (░ек│░▒ивн╗й в╗зов) ▒о░▓и░│ем пе░в│╛ и в▓о░│╛
╖а▒▓и.
(2) Как в╗б░а▓╝ ▒л│╖айн╗й камен╝? Можно ▒╖и▓а▓╝, ╖▓о ▒на╖ала в▒ем камн┐м ▒л│╖айно п░и▒ваива╛▓▒┐ ░азли╖н╗е ░анги (б│дем
▒╖и▓а▓╝ и╡ ╖и▒лами о▓ 1 до N ), и в ка╖е▒▓ве г░ани╢╗ бе░е▓▒┐
камен╝ минимал╝ного ░анга (из подлежа╣и╡ ▒о░▓и░овке в данн╗й момен▓). (Можно п░ове░и▓╝, ╖▓о ╜▓о ░авно▒ил╝но незави▒им╗м в╗бо░ам камней на каждом ╕аге: на пе░вом ╕аге кажд╗й из
камней може▓ б╗▓╝ в╗б░ан ▒ ░авной ве░о┐▓но▒▓╝╛, по▒ле ▓акого
в╗бо░а в каждой из г░│пп в▒е камни ▓акже ░авнове░о┐▓н╗ и ▓. д.)
(3) Таким об░азом, кажд╗й камен╝ ╡а░ак▓е░из│е▓▒┐ дв│м┐ ╖и▒лами о▓ 1 до N | по░┐дков╗м номе░ом (в по░┐дке воз░а▒▓ани┐
ве▒ов) и ░ангом. Соо▓ве▓▒▓вие межд│ номе░ами и ░ангами оп░едел┐е▓ ╖и▒ло опе░а╢ий в п░о╢е▒▒е ▒о░▓и░овки.
(4) Дл┐ кажд╗╡ дв│╡ номе░ов i, j из f1; : : :; N g ╖е░ез p(i; j ) обозна╖им ве░о┐▓но▒▓╝ ▓ого, ╖▓о камни ▒ ╜▓ими номе░ами б│д│▓ ▒░авнива▓╝▒┐ д░│г ▒ д░│гом. Нап░име░, p(i; i + 1) = 1, по▒кол╝к│ ▒о▒едние по ве▒│ камни должн╗ б╗▓╝ ▒░авнен╗ об┐за▓ел╝но (▒░авнени┐
▒ д░│гими камн┐ми и╡ не ░азли╖а╛▓).
(5) Заме▓им, ╖▓о p(i; i + 2) = 2=3. В ▒амом деле, ▒░авнени┐ не
п░оизойде▓ в ▓ом и ▓ол╝ко ▓ом ▒л│╖ае, когда из ▓░е╡ камней ▒
номе░ами i, i + 1 и i + 2 камен╝ i + 1 имее▓ наимен╝╕ий ░анг.
Аналоги╖но, p(i; i + k) = 2=(k + 1) (камни ▒ номе░ами i и i + k
▒░авнива╛▓▒┐, е▒ли ▒░еди k + 1 камней i; i + 1; : : :; i + k один из
дв│╡ к░айни╡ имее▓ наимен╝╕ий ░анг).
(6) Ма▓ема▓и╖е▒кое
ожидание ╖и▒ла ▒░авнений можно ░азби▓╝ в
P
▒│мм│ m(i; j ) ожиданий ╖и▒ла ▒░авнений межд│ камн┐ми ▒ номе░ами i и j . Но по▒кол╝к│ два данн╗╡ камн┐ ▒░авнива╛▓▒┐ не более
одного ░аза, m(i; j ) = p(i; j ). Таким об░азом, пол│╖аем ▓о╖ное в╗░ажение дл┐ ма▓ема▓и╖е▒кого ожидани┐ ╖и▒ла ▒░авнений:
X
2 :
16i<j 6n j ; i + 1
(7) Г░│ппи░│┐ в ╜▓ой ▒│мме ░авн╗е ╖лен╗ и в▒помина┐, ╖▓о 1 +
1=2 + 1=3 + : : : + 1=k = O(lg k), пол│╖аем о╢енк│ O(N lg N ) дл┐
ма▓ема▓и╖е▒кого ожидани┐ в░емени ░або▓╗ б╗▒▓░ой ▒о░▓и░овки.
Анализ облег╖ае▓▒┐ ▓ем, ╖▓о алго░и▓м ░азбиени┐ (на ▓░и ╖а▒▓и)
более ▒имме▓░и╖ен. Реализа╢и┐ ▓акого ▒по▒оба ░азбиени┐ ▓акже
168
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
п░о▒▓а: ма▒▒ив дели▓▒┐ на ╖е▓╗░е │╖а▒▓ка (пе░е╖и▒л┐ем и╡ ▒лева
нап░аво): мен╝╕ие г░ани╢╗, ░авн╗е г░ани╢е, неп░о▒мо▓░енн╗е и
бол╝╕ие г░ани╢╗.]
Уп░ажнени┐
8.4-1 Докажи▓е, ╖▓о наимен╝╕ее в░ем┐ ░або▓╗ б╗▒▓░ой ▒о░▓и░овки ▒о▒▓авл┐е▓ (n lg n).
8.4-2 Докажи▓е, ╖▓о ┤│нк╢и┐ q 2 + (n ; q )2 на о▓░езке [1; n ; 1]
п░инимае▓ наибол╝╕ее зна╖ение в кон╢а╡ о▓░езка.
8.4-3 Докажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗
п░о╢ед│░╗ Randomized-Quicksort на л╛бом в╡оде е▒▓╝ (n lg n).
8.4-4 На п░ак▓ике в░ем┐ ░або▓╗ б╗▒▓░ой ▒о░▓и░овки можно │мен╝╕и▓╝, е▒ли на заве░╕а╛╣ем ╜▓апе (когда ма▒▒ив по╖▓и о▓▒о░▓и░ован) и▒пол╝зова▓╝ ▒о░▓и░овк│ в▒▓авками. Сдела▓╝ ╜▓о можно, нап░име░, ▓ак: п│▒▓╝ п░о╢ед│░а
Randomized-Quicksort(A; p; r) ни╖его не делае▓, е▒ли r ; p +1 < k
(▓. е. ▒о░▓и░│ем╗й ма▒▒ив ▒оде░жи▓ мен╝╕е k ╜лемен▓ов). По▒ле
окон╖ани┐ ░ек│░▒ивн╗╡ в╗зовов пол│╖ив╕ий▒┐ ма▒▒ив ▒о░▓и░│е▓▒┐ ▒ помо╣╝╛ ▒о░▓и░овки в▒▓авками. Докажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ ▓акого алго░и▓ма ▒о▒▓авл┐е▓
O(nk + n lg(n=k)). Как б╗ в╗ ▒▓али в╗би░а▓╝ ╖и▒ло k?
8.4-5? Докажи▓е ░авен▒▓во
Z
x ln x dx = 12 x2 ln x ; 41 x2
В╗веди▓е о▓▒╛да (и▒пол╝з│┐ ме▓од ▒░авнени┐ ▒ ин▓ег░алом)
более
P ;1
▒ил╝н│╛ (в ▒░авнении ▒ (8.5)) о╢енк│ дл┐ ▒│мм╗ nk=1
k lg k.
8.4-6? Ра▒▒мо▓░им ▒лед│╛╣│╛ моди┤ика╢и╛ п░о╢ед│░╗
Randomized-Partition: ▒л│╖айн╗м об░азом в╗би░а╛▓▒┐ ▓░и
╜лемен▓а ма▒▒ива и в ка╖е▒▓ве г░ани╖ного ╜лемен▓а бе░е▓▒┐ ▒░едний по вели╖ине из в╗б░анн╗╡ ▓░е╡ камней. О╢ени▓е ве░о┐▓но▒▓╝
▓ого, ╖▓о п░и ╜▓ом ░азбиение б│де▓ ▒балан▒и░овано не ╡│же, ╖ем
: 1 ; .
Зада╖и
8-1 П░авил╝но▒▓╝ п░о╢ед│░╗ ░азбиени┐
Покажи▓е, ╖▓о п░о╢ед│░а Partition ░або▓ае▓ п░авил╝но. Дл┐
╜▓ого докажи▓е ▒лед│╛╣ее:
Зада╖и к главе 8
169
а. В п░о╢е▒▒е ░або▓╗ п░о╢ед│░╗ индек▒╗ i и j не в╗╡од┐▓ за
п░едел╗ о▓░езка [p : :r].
б. В момен▓ окон╖ани┐ ░або▓╗ п░о╢ед│░╗ индек▒ j не може▓
б╗▓╝ ░авен r (▓. е. обе ╖а▒▓и ░азбиени┐ неп│▒▓╗).
в. В момен▓ окон╖ани┐ ░або▓╗ п░о╢ед│░╗ л╛бой ╜лемен▓ ма▒▒ива A[p : :j ] не бол╝╕е л╛бого ╜лемен▓а ма▒▒ива A[j + 1 : :r].
8-2 Алго░и▓м Лом│▓о дл┐ ░азбиени┐
Ва░иан▓ п░о╢ед│░╗ Partition, ко▓о░╗й м╗ ▒ей╖а▒ ░а▒▒мо▓░им,
п░инадлежи▓ Н. Лом│▓о (N. Lomuto). В п░о╢е▒▒е ░або▓╗ ▒▓░о┐▓▒┐ к│▒ки A[p : :i] и A[i + 1 : :j ], п░и╖ем ╜лемен▓╗ пе░вого к│▒ка не
бол╝╕е x = A[r], а ╜лемен▓╗ в▓о░ого к│▒ка | бол╝╕е x.
Lomuto-Partition(A; p; r)
1 x A[r]
2 i p;1
3 for j p to r
4
do if A[j ] 6 x
5
then i i + 1
6
помен┐▓╝ A[i] $ A[j ]
7 if i < r
8 then return i
9 else return i ; 1
а. Докажи▓е, ╖▓о п░о╢ед│░а Lomuto-Partition ░або▓ае▓ п░авил╝но.
б. Скол╝ко ░аз п░о╢ед│░╗ Partition и Lomuto-Partition мог│▓ пе░еме╣а▓╝ один и ▓о▓ же ╜лемен▓? (Укажи▓е наибол╝╕ие зна╖ени┐.)
в. Докажи▓е, ╖▓о п░о╢ед│░а Lomuto-Partition, как и п░о╢ед│░а Partition, ▓░еб│е▓ в░емени (n), где n | ╖и▒ло ╜лемен▓ов в
ма▒▒иве.
г. Заменим в ▓ек▒▓е п░о╢ед│░╗ Quicksort п░о╢ед│░│ Partition
на Lomuto-Partition. Как измени▓▒┐ в░ем┐ б╗▒▓░ой ▒о░▓и░овки
дл┐ ма▒▒ива, в▒е ╜лемен▓╗ ко▓о░ого ░авн╗?
д. Ра▒▒мо▓░им п░о╢ед│░│ Randomized-Lomuto-Partition,
ко▓о░а┐ мен┐е▓ A[r] ▒о ▒л│╖айно в╗б░анн╗м ╜лемен▓ом ма▒▒ива и за▓ем в╗з╗вае▓ п░о╢ед│░│ Lomuto-Partition. Докажи▓е,
╖▓о ве░о┐▓но▒▓╝ ▓ого, ╖▓о п░о╢ед│░а Randomized-LomutoPartition ве░не▓ зна╖ение q , ░авна ве░о┐▓но▒▓и ▓ого, ╖▓о п░о╢ед│░а Randomized-Partition ве░не▓ зна╖ение p + r ; q .
8-3 Со░▓и░овка по ╖а▒▓┐м
П░о┤е▒▒о░ п░едложил ▒лед│╛╣ий └п░одвин│▓╗й┴ алго░и▓м ▒о░▓и░овки:
170
Глава 8 Б╗▒▓░а┐ ▒о░▓и░овка
Stooge-Sort(A; i; j )
if A[i] > A[j ]
then помен┐▓╝ A[i] $ A[j ]
if i + 1 > j
then return
k b(j ; i + 1)=3c
. Ок░│гление ▒ недо▒▓а▓ком.
Stooge-Sort(A; i; j ; k) . Пе░в╗е две ▓░е▓и.
Stooge-Sort(A; i + k; j ) . По▒ледние две ▓░е▓и.
Stooge-Sort(A; i; j ; k) . Оп┐▓╝ пе░в╗е две ▓░е▓и.
а. Докажи▓е, ╖▓о п░о╢ед│░а Stooge-Sort дей▒▓ви▓ел╝но ▒о░▓и░│е▓ ма▒▒ив.
б. Найди▓е ░ек│░░ен▓ное ▒оо▓но╕ение дл┐ наибол╝╕его в░емени
░або▓╗ п░о╢ед│░╗ Stooge-Sort и пол│╖и▓е из него о╢енк│ ╜▓ого
в░емени.
в. С░авни▓е наибол╝╕ее в░ем┐ ░або▓╗ п░о╢ед│░╗ Stooge-Sort
▒ наибол╝╕им в░еменем дл┐ д░│ги╡ ва░иан▓ов ▒о░▓и░овки (в▒▓авками, ▒ли┐нием, ▒ помо╣╝╛ к│╖и и б╗▒▓░ой ▒о░▓и░овки). С▓ои▓
ли п░одлева▓╝ кон▓░ак▓ ▒ п░о┤е▒▒о░ом?
1
2
3
4
5
6
7
8
8-4 Разме░ ▒▓ека п░и б╗▒▓░ой ▒о░▓и░овке
П░о╢ед│░а Quicksort два ░аза ░ек│░▒ивно в╗з╗вае▓ ▒еб┐ (дл┐
левой и дл┐ п░авой ╖а▒▓и). В дей▒▓ви▓ел╝но▒▓и без в▓о░ого ░ек│░▒ивного в╗зова можно обой▓и▒╝, заменив его ╢иклом (именно ▓ак
╡о░о╕ие компил┐▓о░╗ об░аба▓╗ва╛▓ ▒и▓│а╢и╛, когда по▒ледним
опе░а▓о░ом п░о╢ед│░╗ ┐вл┐е▓▒┐ ░ек│░▒ивн╗й в╗зов; дл┐ ▓акой ▒и▓│а╢ии е▒▓╝ ▓е░мин tail recursion):
Quicksort0 (A; p; r)
1 while p < r
2
do . Разби▓╝ и о▓▒о░▓и░ова▓╝ лев│╛ ╖а▒▓╝.
3
q Partition(A; p; r)
4
Quicksort0(A; p; q )
5
p q+1
а. Докажи▓е, ╖▓о п░о╢ед│░а Quicksort0 дей▒▓ви▓ел╝но ▒о░▓и░│е▓ ма▒▒ив.
Как п░авило, компил┐▓о░╗ ░еализ│╛▓ ░ек│░▒и╛ ▒ помо╣╝╛ ▒▓ека, где ╡░ан┐▓▒┐ копии локал╝н╗╡ пе░еменн╗╡ дл┐ каждого ░ек│░▒ивного в╗зова. Ве░╕ина ▒▓ека ▒оде░жи▓ ин┤о░ма╢и╛, о▓но▒┐╣│╛▒┐ к ▓ек│╣ем│ в╗зов│; когда он заве░╕ае▓▒┐, ин┤о░ма╢и┐ │дал┐е▓▒┐ из ▒▓ека. В на╕ем ▒л│╖ае дл┐ каждого ░ек│░▒ивного в╗зова
локал╝н╗е пе░еменн╗е занима╛▓ об║ем O(1), ▓ак ╖▓о необ╡одим╗й ░азме░ ▒▓ека (stack depth) п░опо░╢ионален гл│бине ░ек│░▒ии.
б. Покажи▓е, ╖▓о в неко▓о░╗╡ ▒л│╖а┐╡ п░о╢ед│░а Quicksort0
▓░еб│е▓ ▒▓ека ░азме░а (n).
Заме╖ани┐ к главе 8
171
в. Измени▓е п░о╢ед│░│ Quicksort0 ▓ак, ╖▓об╗ об║ем ▒▓ека не
п░ев╗╕ал (lg n) (▒о╡░ан┐┐ о╢енк│ (n lg n) дл┐ ▒░еднего в░емени
░або▓╗).
8-5 Разбиение ▒ помо╣╝╛ медиан╗ ▓░е╡ ╜лемен▓ов
Рабо▓│ п░о╢ед│░╗ Randomized-Quicksort можно │▒ко░и▓╝,
в╗би░а┐ г░ани╖н╗й ╜лемен▓ дл┐ ░азбиени┐ более ▓╣а▓ел╝но.
Один из ░а▒п░о▒▓░аненн╗╡ под╡одов | ╜▓о ме▓од медиан╗ ▓░е╡
(median-of-3 method): в ка╖е▒▓??е г░ани╖ного ╜лемен▓а и▒пол╝з│е▓▒┐ ▒░едний из ▓░е╡ ▒л│╖айно в╗б░анн╗╡ ╜лемен▓ов ма▒▒ива.
М╗ б│дем п░едполага▓╝, ╖▓о в▒е ╜лемен▓╗ в╡одного ма▒▒ива
A[1 : :n] ░азли╖н╗ и n > 3. Че░ез A0[1 : :n] б│дем обозна╖а▓╝ о▓▒о░▓и░ованн╗й ма▒▒ив (ко▓о░╗й м╗ и ╡о▓им пол│╖и▓╝). П│▒▓╝
pi = Pfx = A0 [i]g, где x | г░ани╖н╗й ╜лемен▓, в╗б░анн╗й
опи▒анн╗м в╗╕е ▒по▒обом.
а. В╗░ази▓е ве░о┐▓но▒▓╝ pi (дл┐ i = 2; 3; : : :; n ; 1) ╖е░ез i и n
(заме▓╝▓е, ╖▓о p1 = pn = 0).
б. На▒кол╝ко ве░о┐▓но▒▓╝ в╗б░а▓╝ ▒░едний ╜лемен▓ (A0 [b(n +
1)=2c]) бол╝╕е, ╖ем п░и об╗╖ном ▒л│╖айном в╗бо░е? К ╖ем│ ▒▓░еми▓▒┐ о▓но╕ение ╜▓и╡ ве░о┐▓но▒▓ей п░и n ! 1?
в. Б│дем наз╗ва▓╝ ░азбиение ▒ г░ани╖н╗м ╜лемен▓ом x └╡о░о╕им┴, е▒ли x = A0 [i], где n=3 6 i 6 2n=3. На▒кол╝ко ве░о┐▓но▒▓╝
└╡о░о╕его┴ ░азбиени┐ бол╝╕е, ╖ем п░и об╗╖ном ▒л│╖айном в╗бо░е? (Указание: п░и в╗╖и▒лени┐╡ о╢ени▓е ▒│мм│ ин▓ег░алом.)
г. Докажи▓е, ╖▓о и▒пол╝зование ме▓ода медиан╗ ▓░е╡ ▒о╡░ан┐е▓
о╢енк│ (n lg n) дл┐ в░емени ░або▓╗ б╗▒▓░ой ▒о░▓и░овки (и вли┐е▓
ли╕╝ на кон▒▓ан▓│ пе░ед n lg n).
Заме╖ани┐
Алго░и▓м б╗▒▓░ой ▒о░▓и░овки п░инадлежи▓ Хоа░│ [98]. В ▒▓а▓╝е Седжвика [174] об▒│жда╛▓▒┐ де▓али ░еализа╢ии б╗▒▓░ой ▒о░▓и░овки и и╡ вли┐ние на в░ем┐ ░або▓╗. Ве░о┐▓но▒▓н╗е алго░и▓м╗
дл┐ ░азн╗╡ зада╖ ░а▒▒ма▓░ива╛▓▒┐ в ▒▓а▓╝е Рабина [165].
9
Со░▓и░овка за линейное в░ем┐
М╗ познакомили▒╝ ▒ ░азли╖н╗ми алго░и▓мами, ко▓о░╗е мог│▓ о▓▒о░▓и░ова▓╝ n ╖и▒ел за в░ем┐ O(n lg n). Алго░и▓м╗ ▒о░▓и░овки
▒ли┐нием (merge sort) и ▒о░▓и░овки ▒ помо╣╝╛ к│╖и (heap sort)
░або▓а╛▓ за ▓акое в░ем┐ в ╡│д╕ем ▒л│╖ае, а │ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки ▓аков╗м ┐вл┐е▓▒┐ ▒░еднее в░ем┐ ░або▓╗. О╢енка O(n lg n) ▓о╖на: дл┐ каждого из ╜▓и╡ алго░и▓мов можно п░ед║┐ви▓╝ по▒ледова▓ел╝но▒▓╝ из n ╖и▒ел, в░ем┐ об░або▓ки ко▓о░ой
б│де▓ (n lg n).
В▒е │пом┐н│▓╗е алго░и▓м╗ п░овод┐▓ ▒о░▓и░овк│, о▒нов╗ва┐▒╝
и▒кл╛╖и▓ел╝но на попа░н╗╡ ▒░авнени┐╡ ╜лемен▓ов, по╜▓ом│ и╡
иногда наз╗ва╛▓ ▒о░▓и░овками ▒░авнением (comparison sort). В
░азделе 9.1 м╗ покажем, ╖▓о в▒┐кий алго░и▓м ▓акого ▓ипа ▒о░▓и░│е▓ n ╜лемен▓ов за в░ем┐ не мен╝╕е (n lg n) в ╡│д╕ем ▒л│╖ае.
Тем ▒ам╗м алго░и▓м╗ ▒о░▓и░овки ▒ли┐нием и ▒ помо╣╝╛ к│╖и
а▒имп▓о▓и╖е▒ки оп▓имал╝н╗: не ▒│╣е▒▓в│е▓ алго░и▓ма ▒о░▓и░овки ▒░авнением, ко▓о░╗й п░ево▒╡одил б╗ │казанн╗е алго░и▓м╗ более, ╖ем в коне╖ное ╖и▒ло ░аз.
В ░аздела╡ 9.2, 9.3 и 9.4 м╗ ░а▒▒ма▓░иваем ▓░и алго░и▓ма ▒о░▓и░овки (▒о░▓и░овка под▒╖е▓ом, ╢и┤░ова┐ ▒о░▓и░овка и ▒о░▓и░овка
в╗╖е░п╗ванием), ░або▓а╛╣и╡ за линейное в░ем┐. Раз│мее▓▒┐, они
│л│╖╕а╛▓ о╢енк│ (n lg n) за ▒╖е▓ ▓ого, ╖▓о и▒пол╝з│╛▓ не ▓ол╝ко попа░н╗е ▒░авнени┐, но и вн│▓░енн╛╛ ▒▓░│к▓│░│ ▒о░▓и░│ем╗╡
об║ек▓ов.
9.1. Нижние о╢енки дл┐ ▒о░▓и░овки
Гово░┐▓, ╖▓о алго░и▓м ▒о░▓и░овки о▒нован на ▒░авнени┐╡, е▒ли он никак не и▒пол╝з│е▓ вн│▓░енн╛╛ ▒▓░│к▓│░│ ▒о░▓и░│ем╗╡
╜лемен▓ов, а ли╕╝ ▒░авнивае▓ и╡ и по▒ле неко▓о░ого ╖и▒ла ▒░авнений в╗дае▓ о▓ве▓ (│каз╗ва╛╣ий и▒▓инн╗й по░┐док ╜лемен▓ов).
Так м╗ п░и╡одим к модели алго░и▓мов ▒о░▓и░овки, наз╗ваемой
░аз░е╕а╛╣ими де░ев╝┐ми.
Нижние о╢енки дл┐ ▒о░▓и░овки
173
Раз░е╕а╛╣ее де░ево дл┐ алго░и▓ма ▒о░▓и░овки в▒▓авками, об░аба▓╗ва╛╣его по▒ледова▓ел╝но▒▓╝ из ▓░е╡ ╜лемен▓ов. По▒кол╝к│ ╖и▒ло пе░е▒▓ановок из ▓░е╡ ╜лемен▓ов ░авно 3! = 6, │ де░ева должно б╗▓╝ не менее 6 ли▒▓╝ев.
Ри▒. 9.1
Раз░е╕а╛╣ие де░ев╝┐
На╖нем ▒ п░име░а: на ░и▒. 9.1 изоб░ажено ░аз░е╕а╛╣ее де░ево
(decision tree), ▒оо▓ве▓▒▓в│╛╣ее ▒о░▓и░овке по▒ледова▓ел╝но▒▓и из
▓░е╡ ╜лемен▓ов ▒ помо╣╝╛ алго░и▓ма ▒о░▓и░овки в▒▓авками из
░аздела 1.1.
П│▒▓╝ ▓епе░╝ м╗ ▒о░▓и░│ем n ╜лемен▓ов a1 ; : : :; an . Кажда┐ вн│▓░енн┐┐ ве░╕ина ░аз░е╕а╛╣его де░ева ▒оо▓ве▓▒▓в│е▓ опе░а╢ии
▒░авнени┐ и ▒набжена поме▓кой вида ai : aj , │каз╗ва╛╣ей, какие
╜лемен▓╗ надо ▒░авни▓╝ (1 6 i; j 6 n). Кажд╗й ли▒▓ ░аз░е╕а╛╣его де░ева ▒набжен поме▓кой h (1); (2); : : :; (n)i, где | пе░е▒▓ановка n ╜лемен▓ов (▒м. ░азд. 6.1 по повод│ пе░е▒▓ановок). Дл┐
пол│╖ени┐ нижни╡ о╢енок м╗ можем ог░ани╖и▓╝▒┐ ▒л│╖аем ░азли╖н╗╡ ╜лемен▓ов, ▓огда ░ез│л╝▓а▓ом ▒о░▓и░овки б│де▓ пе░е▒▓ановка
╜лемен▓ов в по░┐дке воз░а▒▓ани┐.
Опи╕ем, какой алго░и▓м ▒о░▓и░овки ▒оо▓ве▓▒▓в│е▓ данном│
░аз░е╕а╛╣ем│ де░ев│. Надо п░ой▓и по де░ев│ о▓ ко░н┐ до ли▒▓а.
В╗бо░ нап░авлени┐ (налево или нап░аво) п░ои▒╡оди▓ ▓ак. П│▒▓╝ в
ве░╕ине напи▒ано ai : aj . Тогда надо ид▓и налево, е▒ли ai 6 aj , и
нап░аво в п░о▓ивном ▒л│╖ае. Е▒ли в ли▒▓е, в ко▓о░╗й м╗ в и▓оге
п░и╡одим, запи▒ана пе░е▒▓ановка , ▓о ░ез│л╝▓а▓ом ▒о░▓и░овки
▒╖и▓аем по▒ледова▓ел╝но▒▓╝ a(1); a(2); : : :; a(n) , ко▓о░а┐ должна
б╗▓╝ не│б╗ва╛╣ей, е▒ли алго░и▓м п░авилен.
Кажда┐ из n! пе░е▒▓ановок должна по┐ви▓╝▒┐ ╡о▓┐ б╗ на одном
ли▒▓е ░аз░е╕а╛╣его де░ева (по▒кол╝к│ п░авил╝н╗й алго░и▓м должен п░ед│▒ма▓░ива▓╝ в▒е возможн╗е по░┐дки).
Нижн┐┐ о╢енка дл┐ ╡│д╕его ▒л│╖а┐
Чи▒ло ▒░авнений в ╡│д╕ем ▒л│╖ае дл┐ ▓акого алго░и▓ма ░авно
в╗▒о▓е ░аз░е╕а╛╣его де░ева | мак▒имал╝ной длине п│▓и в ╜▓ом
де░еве о▓ ко░н┐ до ли▒▓а. След│╛╣а┐ ▓ео░ема дае▓ нижн╛╛ о╢енк│
на ╜▓│ в╗▒о▓│.
174
Глава 9 Со░▓и░овка за линейное в░ем┐
Тео░ема 9.1. В╗▒о▓а л╛бого ░аз░е╕а╛╣его де░ева, ▒о░▓и░│╛╣его n ╜лемен▓ов, е▒▓╝ (n lg n).
Доказа▓ел╝▒▓во. По▒кол╝к│ ▒░еди ли▒▓╝ев ░аз░е╕а╛╣его де░ева
должн╗ б╗▓╝ п░ед▒▓авлен╗ в▒е пе░е▒▓ановки n ╜лемен▓ов, ╖и▒ло
╜▓и╡ ли▒▓╝ев не менее n!. По▒кол╝к│ двои╖ное де░ево в╗▒о▓╗ h
имее▓ не более 2h ли▒▓╝ев, имеем n! 6 2h . Лога░и┤ми░│┐ ╜▓о не░авен▒▓во по о▒новани╛ 2 и пол╝з│┐▒╝ не░авен▒▓вом n! > (n=e)n ,
в╗▓ека╛╣им из ┤о░м│л╗ С▓и░линга (2.11), пол│╖аем, ╖▓о
h > n lg n ; n lg e = (n lg n);
╖▓о и │▓ве░ждало▒╝.
След▒▓вие 9.2. Алго░и▓м╗ ▒о░▓и░овки ▒ли┐нием и ▒ помо╣╝╛ к│╖и а▒имп▓о▓и╖е▒ки оп▓имал╝н╗.
Доказа▓ел╝▒▓во. Они ░або▓а╛▓ за в░ем┐ O(n lg n); в ▒ил│ доказанной ▓ео░ем╗, ╜▓а о╢енка а▒имп▓о▓и╖е▒ки не│л│╖╕аема.
Уп░ажнени┐
9.1-1 Какова наимен╝╕а┐ возможна┐ гл│бина ли▒▓а в ░аз░е╕а╛╣ем де░еве алго░и▓ма ▒о░▓и░овки?
9.1-2
Докажи▓е а▒имп▓о▓и╖е▒ки ▓о╖н│╛ о╢енк│ дл┐ lg(n!) =
Pn
lg
k=1 k без ┤о░м│л╗ С▓и░линга, и▒пол╝з│┐ ме▓од╗ ░азд. 3.2.
9.1-3 Покажи▓е, ╖▓о не ▒│╣е▒▓в│е▓ алго░и▓ма ▒о░▓и░овки, о▒нованного на ▒░авнени┐╡, ко▓о░╗й ░або▓ал б╗ за линейное в░ем┐ дл┐
половин╗ из n! возможн╗╡ в╡одн╗╡ по▒ледова▓ел╝но▒▓ей длин╗ n.
Как измени▓▒┐ о▓ве▓, е▒ли в ╜▓ой зада╖е замени▓╝ 1=2 на 1=n? На
1=2n ?
9.1-4 П░о┤е▒▒о░ ░аз░або▓ал комп╝╛▓е░, ко▓о░╗й подде░живае▓
└▓░ойн╗е ве▓влени┐┴: по▒ле одного-един▒▓венного ▒░авнени┐ ai : aj
│п░авление може▓ б╗▓╝ пе░едано в одно из ▓░е╡ ме▒▓ п░ог░амм╗,
в зави▒имо▒▓и о▓ ▓ого, какое из ▒оо▓но╕ений в╗полнено: ai < aj ,
ai = aj или ai > aj . Он надее▓▒┐, ╖▓о благода░┐ ▓аким ▒░авнени┐м
▒о░▓и░овк│ n ╜лемен▓ов можно п░ове▒▓и а▒имп▓о▓и╖е▒ки б╗▒▓░ее,
╖ем за в░ем┐ (n lg n). Покажи▓е, ╖▓о п░о┤е▒▒о░ забл│ждае▓▒┐.
9.1-5 Покажи▓е, ╖▓о дл┐ ▒ли┐ни┐ дв│╡ о▓▒о░▓и░ованн╗╡ по▒ледова▓ел╝но▒▓ей из n ╜лемен▓ов до▒▓а▓о╖но 2n ; 1 ▒░авнений в ╡│д╕ем ▒л│╖ае.
9.1-6 По▒ледова▓ел╝но▒▓╝ из n ╜лемен▓ов, ко▓о░│╛ необ╡одимо
о▓▒о░▓и░ова▓╝, ░азби▓а на │╖а▒▓ки длин╗ k. П░и ╜▓ом л╛бой ╜лемен▓ пе░вого │╖а▒▓ка мен╝╕е л╛бого ╜лемен▓а в▓о░ого и ▓. д. (▓ак
Со░▓и░овка под▒╖е▓ом
175
╖▓о о▒▓ае▓▒┐ ли╕╝ о▓▒о░▓и░ова▓╝ ╜лемен▓╗ вн│▓░и │╖а▒▓ков). Покажи▓е, ╖▓о ▓ака┐ ▒о░▓и░овка по▓░еб│е▓ не менее (n lg k) ▒░авнений в ╡│д╕ем ▒л│╖ае. (Указание: недо▒▓а▓о╖но ▒о▒ла▓╝▒┐ на необ╡одимо▒▓╝ n=k ░аз ▒о░▓и░ова▓╝ │╖а▒▓ок длиной k.)
9.2. Со░▓и░овка под▒╖е▓ом
Алго░и▓м ▒о░▓и░овки под▒╖е▓ом (counting sort) п░именим, е▒ли
кажд╗й из n ╜лемен▓ов ▒о░▓и░│емой по▒ледова▓ел╝но▒▓и | ╢елое
положи▓ел╝ное ╖и▒ло в изве▒▓ном диапазоне (не п░ево▒╡од┐╣ее за░анее изве▒▓ного k). Е▒ли k = O(n), ▓о алго░и▓м ▒о░▓и░овки под▒╖е▓ом ░або▓ае▓ за в░ем┐ O(n).
Иде┐ ╜▓ого алго░и▓ма в ▓ом, ╖▓об╗ дл┐ каждого ╜лемен▓а x
п░едва░и▓ел╝но под▒╖и▓а▓╝, ▒кол╝ко ╜лемен▓ов в╡одной по▒ледова▓ел╝но▒▓и мен╝╕е x, по▒ле ╖его запи▒а▓╝ x нап░┐м│╛ в в╗╡одной
ма▒▒ив в ▒оо▓ве▓▒▓вии ▒ ╜▓им ╖и▒лом (е▒ли, ▒кажем, 17 ╜лемен▓ов
в╡одного ма▒▒ива мен╝╕е x, ▓о в в╗╡одном ма▒▒иве x должен б╗▓╝
запи▒ан на ме▒▓о номе░ 18). Е▒ли в ▒о░▓и░│емой по▒ледова▓ел╝но▒▓и мог│▓ п░и▒│▓▒▓вова▓╝ ░авн╗е ╖и▒ла, ╜▓│ ▒╡ем│ надо ▒легка
моди┤и╢и░ова▓╝, ╖▓об╗ не запи▒а▓╝ не▒кол╝ко ╖и▒ел на одно ме▒▓о.
В п░иводимом ниже п▒евдокоде и▒пол╝з│е▓▒┐ в▒помога▓ел╝н╗й
ма▒▒ив C [1 : :k] из k ╜лемен▓ов. В╡одна┐ по▒ледова▓ел╝но▒▓╝ запи▒ана в ма▒▒иве A[1 : :n], о▓▒о░▓и░ованна┐ по▒ледова▓ел╝но▒▓╝ запи▒╗вае▓▒┐ в ма▒▒ив B [1 : :n].
Counting-Sort(A; B; k)
1 for i 1 to k
2
do C [i] 0
3 for j 1 to length[A]
4
do C [A[j ]] C [A[j ]] + 1
5 . C [i] ░авно коли╖е▒▓в│ ╜лемен▓ов, ░авн╗╡ i.
6 for i 2 to k
7
do C [i] C [i] + C [i ; 1]
8 . C [i] ░авно коли╖е▒▓в│ ╜лемен▓ов, не п░ево▒╡од┐╣и╡ i
9 for j length[A] downto 1
10
do B [C [A[j ]]] A[j ]
11
C [A[j ]] C [A[j ]] ; 1
Рабо▓а алго░и▓ма ▒о░▓и░овки под▒╖е▓ом п░оилл╛▒▓░и░ована
на ░и▒. 9.2. По▒ле ини╢иализа╢ии (▒▓░оки 1{2) м╗ ▒на╖ала поме╣аем в C [i] коли╖е▒▓во ╜лемен▓ов ма▒▒ива A, ░авн╗╡ i (▒▓░оки 3{4), а за▓ем, на╡од┐ ╖а▒▓и╖н╗е ▒│мм╗ по▒ледова▓ел╝но▒▓и
C [1]; C [2]; : : :; C [k], | коли╖е▒▓во ╜лемен▓ов, не п░ево▒╡од┐╣и╡ i
(▒▓░оки 6{7). Наконе╢, в ▒▓░ока╡ 9{11 кажд╗й из ╜лемен▓ов ма▒-
176
Глава 9 Со░▓и░овка за линейное в░ем┐
Ри▒. 9.2 Рабо▓а алго░и▓ма Counting-Sort, п░имен
енного к ма▒▒ив│ A[1 : : 8],
▒о▒▓о┐╣ем│ из на▓│░ал╝н╗╡ ╖и▒ел, не п░ево▒╡од┐╣и╡ k = 6. (а) Ма▒▒ив A и
в▒помога▓ел╝н╗й ма▒▒ив C по▒ле в╗полнени┐ ╢икла в ▒▓░ока╡ 3{4. (б) Ма▒▒ив
C по▒ле в╗полнени┐ ╢икла в ▒▓░ока╡ 6{7. (в{д) В╗╡одной ма▒▒ив B и в▒помога▓ел╝н╗й ма▒▒ив C по▒ле одного, дв│╡ и ▓░е╡ пов▓о░ений ╢икла в ▒▓░ока╡ 9{11.
За╖е░ненн╗е кле▓ки ▒оо▓ве▓▒▓в│╛▓ ╜лемен▓ам ма▒▒ива, зна╖ени┐ ко▓о░╗м е╣е
не п░и▒воен╗. (е) Ма▒▒ив B по▒ле окон╖ани┐ ░або▓╗ алго░и▓ма.
▒ива A поме╣ае▓▒┐ на н│жное ме▒▓о в ма▒▒иве B . В ▒амом деле,
е▒ли в▒е n ╜лемен▓ов ░азли╖н╗, ▓о в о▓▒о░▓и░ованном ма▒▒иве ╖и▒ло A[j ] должно ▒▓о┐▓╝ на ме▒▓е номе░ C [A[j ]], ибо именно ▒▓ол╝ко
╜лемен▓ов ма▒▒ива A не п░ево▒╡од┐▓ A[j ]; е▒ли в ма▒▒иве A в▒▓░е╖а╛▓▒┐ пов▓о░ени┐, ▓о по▒ле каждой запи▒и ╖и▒ла A[j ] в ма▒▒ив
B ╖и▒ло C [A[j ]] │мен╝╕ае▓▒┐ на едини╢│ (▒▓░ока 11), ▓ак ╖▓о п░и
▒лед│╛╣ей в▒▓░е╖е ▒ ╖и▒лом, ░авн╗м A[j ], оно б│де▓ запи▒ано на
одн│ пози╢и╛ левее.
О╢еним в░ем┐ ░або▓╗ алго░и▓ма ▒о░▓и░овки под▒╖е▓ом. Цикл╗
в ▒▓░ока╡ 1{2 и 6{7 ░або▓а╛▓ за в░ем┐ O(k), ╢икл╗ в ▒▓░ока╡ 3{4
и 10{11 | за в░ем┐ O(n), а ве▒╝ алго░и▓м, ▒▓ало б╗▓╝, ░або▓ае▓
за в░ем┐ O(k + n). Е▒ли k = O(n), ▓о в░ем┐ ░або▓╗ е▒▓╝ O(n).
Дл┐ алго░и▓ма ▒о░▓и░овки под▒╖е▓ом нижн┐┐ о╢енка ░азд. 9.1
| не п░еп┐▓▒▓вие, по▒кол╝к│ он не ▒░авнивае▓ ▒о░▓и░│ем╗е ╖и▒ла
межд│ ▒обой, а и▒пол╝з│е▓ и╡ в ка╖е▒▓ве индек▒ов ма▒▒ива.
Алго░и▓м ▒о░▓и░овки под▒╖е▓ом обладае▓ важн╗м ▒вой▒▓вом,
наз╗ваем╗м │▒▓ой╖иво▒▓╝╛ (it is stable). Именно, е▒ли во в╡одном
ма▒▒иве п░и▒│▓▒▓в│е▓ не▒кол╝ко ░авн╗╡ ╖и▒ел, ▓о в в╗╡одном ма▒▒иве они ▒▓о┐▓ в ▓ом же по░┐дке, ╖▓о и во в╡одном. Э▓о ▒вой▒▓во
не имее▓ ▒м╗▒ла, е▒ли в ма▒▒иве запи▒ан╗ ▓ол╝ко ╖и▒ла ▒ами по
▒ебе, но е▒ли вме▒▓е ▒ ╖и▒лами запи▒ан╗ дополни▓ел╝н╗е данн╗е,
╜▓о оказ╗вае▓▒┐ важн╗м. Более ▓о╖но, п░ед▒▓авим ▒ебе, ╖▓о м╗
▒о░▓и░│ем не п░о▒▓о ╖и▒ла, а па░╗ ht; xi, где t | ╖и▒ло о▓ 1 до k,
а x | п░оизвол╝н╗й об║ек▓, и ╡о▓им пе░е▒▓ави▓╝ и╡ ▓ак, ╖▓об╗
пе░в╗е компонен▓╗ па░ ╕ли в не│б╗ва╛╣ем по░┐дке. Опи▒анн╗й
Ци┤░ова┐ ▒о░▓и░овка
177
нами алго░и▓м позвол┐е▓ ╜▓о ▒дела▓╝, п░и╖ем о▓но▒и▓ел╝ное ░а▒положение па░ ▒ ░авн╗ми пе░в╗ми компонен▓ами не мен┐е▓▒┐. Э▓о
▒вой▒▓во и наз╗вае▓▒┐ │▒▓ой╖иво▒▓╝╛. М╗ │видим в ▒лед│╛╣ем
░азделе, как оно п░имен┐е▓▒┐.
Уп░ажнени┐
9.2-1
След│┐ об░аз╢│ ░и▒. 9.2., покажи▓е ░або▓│ алго░и▓ма
Counting-Sort дл┐ ▒л│╖а┐ k = 7 и A = h7; 1; 3; 1; 2; 4; 5; 7; 2; 4; 3i.
9.2-2 Докажи▓е, ╖▓о алго░и▓м Counting-Sort ┐вл┐е▓▒┐ │▒▓ой╖ив╗м.
9.2-3 Заменим ▒▓░ок│ 9 алго░и▓ма Counting-Sort на ▓ак│╛:
9 for j 1 to length[A]
Покажи▓е, ╖▓о алго░и▓м о▒▓ае▓▒┐ п░авил╝н╗м. Б│де▓ ли он │▒▓ой╖ив?
9.2-4 П│▒▓╝ на в╗╡оде алго░и▓ма ▒о░▓и░овки надо напе╖а▓а▓╝
╜лемен▓╗ в╡одной по▒ледова▓ел╝но▒▓и в о▓▒о░▓и░ованном по░┐дке. Моди┤и╢и░│й▓е алго░и▓м Counting-Sort ▓аким об░азом,
╖▓об╗ он делал ╜▓о, не и▒пол╝з│┐ ма▒▒ива B или ин╗╡ ма▒▒ивов
(помимо A и C ). (Указание: ▒в┐жи▓е в ▒пи▒ки ╜лемен▓╗ ма▒▒ива A
▒ одинаков╗м зна╖ением; где вз┐▓╝ ме▒▓о дл┐ ╡░анени┐ │каза▓елей?).
9.2-5 Дано n ╢ел╗╡ ╖и▒ел о▓ 1 до k. Раз░або▓ай▓е алго░и▓м, ко▓о░╗й подве░гае▓ ╜▓и данн╗е п░едва░и▓ел╝ной об░або▓ке, а за▓ем
за в░ем┐ O(1) о▓ве╖ае▓ на л╛бой воп░о▒ ▓ипа └▒кол╝ко ╖и▒ел из
данного набо░а лежи▓ межд│ a и b?┴. В░ем┐ на п░едва░и▓ел╝н│╛
об░або▓к│ должно б╗▓╝ O(n + k).
9.3. Ци┤░ова┐ ▒о░▓и░овка
Алго░и▓м ╢и┤░овой ▒о░▓и░овки (radix sort) и▒пол╝зовал▒┐ в ма╕ина╡ дл┐ ▒о░▓и░овки пе░┤ока░▓ (▒ей╖а▒ ▓акие ма╕ин╗ можно
най▓и ░азве ╖▓о в м│зе┐╡). В ка░▓онн╗╡ пе░┤ока░▓а╡ ▒пе╢иал╝н╗й пе░┤о░а▓о░ п░обивал д╗░ки. В каждой из 80 колонок б╗ли
ме▒▓а дл┐ 12 п░┐мо│гол╝н╗╡ д╗░ок. Вооб╣е-▓о в одной колонке
можно б╗ло п░оби▓╝ не▒кол╝ко д╗░ок, и╡ комбина╢и┐ ▒оо▓ве▓▒▓вовала ▒имвол│ (▓ак ╖▓о на ка░▓е б╗ло ме▒▓о дл┐ 80 ▒имволов), но
╢и┤░╗ 0{9 коди░овали▒╝ одино╖н╗ми д╗░ками в ▒▓░ока╡ 0{9 ▒оо▓ве▓▒▓в│╛╣ей колонки.
Со░▓и░ово╖ной ма╕ине │каз╗вали ▒▓олбе╢, по ко▓о░ом│ н│жно
178
Глава 9 Со░▓и░овка за линейное в░ем┐
329
720
720
329
457
355
329
355
657
436
436
436
839 ) 457 ) 839 ) 457
436
657
355
657
720
329
457
720
355
839
657
839
"
"
"
Ци┤░ова┐ ▒о░▓и░овка по▒ледова▓ел╝но▒▓и из ▒еми ▓░е╡зна╖н╗╡ ╖и▒ел. На в╡од пода╛▓▒┐ ╖и▒ла пе░вого ▒▓олб╢а. Далее показан по░┐док ╖и▒ел
по▒ле ▒о░▓и░овки по ▓░е▓╝ей, в▓о░ой и пе░вой ╢и┤░ам (ве░▓икал╝н╗е ▒▓░елки
│каз╗ва╛▓, по какой ╢и┤░е п░оизводила▒╝ ▒о░▓и░овка).
Ри▒. 9.3
п░оизве▒▓и ▒о░▓и░овк│, и она ░а▒клад╗вала колод│ пе░┤ока░▓ на
10 ▒▓опок в зави▒имо▒▓и о▓ ▓ого, кака┐ из д╗░ок 0{9 б╗ла п░оби▓а
в │казанном ▒▓олб╢е.
Как о▓▒о░▓и░ова▓╝ колод│ пе░┤ока░▓ ▒ многозна╖н╗ми ╖и▒лами
(░аз░┐д едини╢ в одном ▒▓олб╢е, де▒┐▓ков | в п░ед╗д│╣ем и ▓. д.)?
Пе░вое, ╖▓о п░и╡оди▓ в голов│, | на╖а▓╝ ▒о░▓и░овк│ ▒о ▒▓а░╕его
░аз░┐да. П░и ╜▓ом пол│╖и▓▒┐ 10 ▒▓опок, кажд│╛ из ко▓о░╗╡ на
▒лед│╛╣ем ╕аге п░иде▓▒┐ ░азбива▓╝ на 10 ▒▓опок, и ▓ак далее |
пол│╖и▓▒┐ много ▒▓опок пе░┤ока░▓, в ко▓о░╗╡ легко зап│▓а▓╝▒┐
(▒м. │п░ажнение 9.3-5).
Как ни ▒▓░анно, оказ╗вае▓▒┐ │добнее на╖а▓╝ ▒ млад╕его ░аз░┐да, ░азложив колод│ на 10 ▒▓опок в зави▒имо▒▓и о▓ ▓ого, где п░оби▓о о▓ве░▒▓ие в └млад╕ем┴ ▒▓олб╢е. Пол│╖енн╗е 10 ▒▓опок надо
по▒ле ╜▓ого ▒ложи▓╝ в одн│ в ▓аком по░┐дке: ▒на╖ала ка░▓╗ ▒ 0, за▓ем ка░▓╗ ▒ 1, и ▓. д. Пол│╖ив╕│╛▒┐ колод│ внов╝ ░а▒▒о░▓и░│ем на
10 ▒▓опок, но │же в ▒оо▓ве▓▒▓вии ▒ ░аз░┐дом де▒┐▓ков, ▒ложим пол│╖енн╗е ▒▓опки в одн│ колод│, и ▓. д.; е▒ли на пе░┤ока░▓а╡ б╗ли
запи▒ан╗ d-зна╖н╗е ╖и▒ла, ▓о понадоби▓▒┐ d ░аз во▒пол╝зова▓╝▒┐
▒о░▓и░ово╖ной ма╕иной. На ░и▒. 9.3 изоб░ажено, как дей▒▓в│е▓
╜▓о▓ алго░и▓м, п░имененн╗й к ▒еми ▓░е╡зна╖н╗м ╖и▒лам.
Важно, ╖▓об╗ алго░и▓м, ▒ помо╣╝╛ ко▓о░ого п░ои▒╡оди▓ ▒о░▓и░овка по данном│ ░аз░┐д│, б╗л │▒▓ой╖ив╗м: ка░▓о╖ки, │ ко▓о░╗╡
в данной колонке ▒▓ои▓ одна и ▓а же ╢и┤░а, должн╗ в╗й▓и из ▒о░▓и░ово╖ной ма╕ин╗ в ▓ой же по▒ледова▓ел╝но▒▓и, в ко▓о░ой они
▓│да подавали▒╝ (▒амо ▒обой, п░и ▒клад╗вании 10 ▒▓опок в одн│
мен┐▓╝ по░┐док ка░▓ в ▒▓опка╡ ▓оже не ▒лед│е▓).
В комп╝╛▓е░а╡ ╢и┤░ова┐ ▒о░▓и░овка иногда и▒пол╝з│е▓▒┐ дл┐
│по░┐до╖ени┐ данн╗╡, ▒оде░жа╣и╡ не▒кол╝ко полей. П│▒▓╝, нап░име░, нам надо о▓▒о░▓и░ова▓╝ по▒ледова▓ел╝но▒▓╝ да▓. Э▓о можно
▒дела▓╝ ▒ помо╣╝╛ л╛бого алго░и▓ма ▒о░▓и░овки, ▒░авнива┐ да▓╗
▒лед│╛╣им об░азом: ▒░авни▓╝ год╗, е▒ли год╗ ▒овпада╛▓ | ▒░авни▓╝ ме▒┐╢╗, е▒ли ▒овпада╛▓ и ме▒┐╢╗ | ▒░авни▓╝ ╖и▒ла. Вме▒▓о
Ци┤░ова┐ ▒о░▓и░овка
179
╜▓ого, однако, можно п░о▒▓о ▓░ижд╗ о▓▒о░▓и░ова▓╝ ма▒▒ив да▓ ▒
помо╣╝╛ │▒▓ой╖ивого алго░и▓ма: ▒на╖ала по дн┐м, по▓ом по ме▒┐╢ам, по▓ом по годам.
П░ог░амм│ дл┐ ╢и┤░овой ▒о░▓и░овки напи▒а▓╝ легко. М╗ п░едполагаем, ╖▓о кажд╗й ╜лемен▓ n-╜лемен▓ного ма▒▒ива A ▒о▒▓ои▓
из d ╢и┤░, п░и╖ем ╢и┤░а номе░ 1 | млад╕ий ░аз░┐д, а ╢и┤░а
номе░ d | ▒▓а░╕ий.
Radix-Sort(A; d)
1 for i 1 to d
2
do о▓▒о░▓и░ова▓╝ ма▒▒ив A │▒▓ой╖ив╗м
алго░и▓мом по зна╖ени╛ ╢и┤░╗ номе░ i
П░авил╝но▒▓╝ алго░и▓ма ╢и┤░овой ▒о░▓и░овки доказ╗вае▓▒┐
инд│к╢ией по номе░│ ░аз░┐да (▒м. │п░. 9.3-3). В░ем┐ ░або▓╗ зави▒и▓ о▓ в░емени ░або▓╗ в╗б░анного │▒▓ой╖ивого алго░и▓ма. Е▒ли
╢и┤░╗ мог│▓ п░инима▓╝ зна╖ени┐ о▓ 1 до k, где k не ▒ли╕ком велико, ▓о о╖евидн╗й в╗бо░ | ▒о░▓и░овка под▒╖е▓ом. Дл┐ n ╖и▒ел
▒ d знаками о▓ 0 до k ; 1 кажд╗й п░о╡од занимае▓ в░ем┐ (n + k);
по▒кол╝к│ м╗ делаем d п░о╡одов, в░ем┐ ░або▓╗ ╢и┤░овой ▒о░▓и░овки ░авно (dn + kd). Е▒ли d по▒▓о┐нно и k = O(n), ▓о ╢и┤░ова┐
▒о░▓и░овка ░або▓ае▓ за линейное в░ем┐.
П░и ╢и┤░овой ▒о░▓и░овке важно п░авил╝но в╗б░а▓╝ о▒нование ▒и▒▓ем╗ ▒╖и▒лени┐, по▒кол╝к│ о▓ него зави▒и▓ ░азме░ ▓░еб│емой дополни▓ел╝ной пам┐▓и и в░ем┐ ░або▓╗. Конк░е▓н╗й п░име░:
п│▒▓╝ надо о▓▒о░▓и░ова▓╝ миллион 64-би▓н╗╡ ╖и▒ел. Е▒ли ░а▒▒ма▓░ива▓╝ и╡ как ╖е▓╗░е╡зна╖н╗е ╖и▒ла в ▒и▒▓еме ▒╖и▒лени┐ ▒ о▒нованием 216, ▓о п░и ╢и┤░овой ▒о░▓и░овке м╗ ▒п░авим▒┐ ▒ ними за
╖е▓╗░е п░о╡ода, и▒пол╝з│┐ в п░о╢ед│░е Counting-Sort ма▒▒ив B
░азме░ом 216 (╖▓о немного по ▒░авнени╛ ▒ ░азме░ом ▒о░▓и░│емого ма▒▒ива) Э▓о в╗годно о▓ли╖ае▓▒┐ о▓ ▒о░▓и░овки ▒░авнением,
когда на каждое ╖и▒ло п░и╡оди▓▒┐ по lg n 20 опе░а╢ий. К ▒ожалени╛, ╢и┤░ова┐ ▒о░▓и░овка, опи░а╛╣а┐▒┐ на ▒о░▓и░овк│ под▒╖е▓ом, ▓░еб│е▓ е╣е одного ма▒▒ива (▓ого же ░азме░а, ╖▓о и ▒о░▓и░│ем╗й) дл┐ ╡░анени┐ п░омеж│▓о╖н╗╡ ░ез│л╝▓а▓ов, в ▓о в░ем┐ как многие алго░и▓м╗ ▒о░▓и░овки ▒░авнением об╡од┐▓▒┐ без
╜▓ого. По╜▓ом│, е▒ли надо ╜кономи▓╝ пам┐▓╝, алго░и▓м б╗▒▓░ой
▒о░▓и░овки може▓ оказа▓╝▒┐ п░едпо╖▓и▓ел╝нее.
Уп░ажнени┐
9.3-1 След│┐ об░аз╢│ ░и▒. 9.3, покажи▓е, как п░ои▒╡оди▓ ╢и┤░ова┐ ▒о░▓и░овка (по ал┤ави▓│) англий▒ки╡ ▒лов COW, DOG, SEA,
RUG, ROW, MOB, BOX, TAB, BAR, EAR, TAR, DIG, BIG, TEA,
NOW, FOX.
180
Глава 9 Со░▓и░овка за линейное в░ем┐
9.3-2 Какие из ▒лед│╛╣и╡ алго░и▓мов ▒о░▓и░овки ┐вл┐╛▓▒┐
│▒▓ой╖ив╗ми: ▒о░▓и░овка в▒▓авками, ▒о░▓и░овка ▒ли┐нием, ▒о░▓и░овка ▒ помо╣╝╛ к│╖и, б╗▒▓░а┐ ▒о░▓и░овка? Об║┐▒ни▓е, каким
▒по▒обом можно л╛бой алго░и▓м ▒о░▓и░овки п░ев░а▓и▓╝ в │▒▓ой╖ив╗й. Скол╝ко п░и ╜▓ом по▓░еб│е▓▒┐ дополни▓ел╝ного в░емени и
пам┐▓и?
9.3-3 Докажи▓е по инд│к╢ии, ╖▓о алго░и▓м ╢и┤░овой ▒о░▓и░овки п░авилен. Где в ва╕ем доказа▓ел╝▒▓ве и▒пол╝з│е▓▒┐ │▒▓ой╖иво▒▓╝ алго░и▓ма ▒о░▓и░овки ╢и┤░?
9.3-4 Об║┐▒ни▓е, как ░а▒▒о░▓и░ова▓╝ n ╢ел╗╡ положи▓ел╝н╗╡
╖и▒ел, не п░ево▒╡од┐╣и╡ n2 , за в░ем┐ O(n).
9.3-5? П│▒▓╝ м╗ ▒о░▓и░│ем пе░┤ока░▓╗ ▒ помо╣╝╛ ▒о░▓и░ово╖ной ма╕ин╗, на╖ина┐ ▒о ▒▓а░╕его ░аз░┐да. Скол╝ко ░аз п░иде▓▒┐
зап│▒▓и▓╝ ма╕ин│ (в ╡│д╕ем ▒л│╖ае) дл┐ ▒о░▓и░овки d-зна╖н╗╡
╖и▒ел? Какое мак▒имал╝ное коли╖е▒▓во ▒▓опок ка░▓ п░иде▓▒┐ однов░еменно ╡░ани▓╝ по ╡од│ дела?
9.4. Со░▓и░овка в╗╖е░п╗ванием
Алго░и▓м ▒о░▓и░овки в╗╖е░п╗ванием (bucket sort) ░або▓ае▓ за
линейное (▒░еднее) в░ем┐. Как и ▒о░▓и░овка под▒╖е▓ом, ▒о░▓и░овка в╗╖е░п╗ванием годи▓▒┐ не дл┐ л╛б╗╡ и▒╡одн╗╡ данн╗╡: гово░┐ о линейном ▒░еднем в░емени, м╗ п░едполагаем, ╖▓о на в╡од
подае▓▒┐ по▒ледова▓ел╝но▒▓╝ незави▒им╗╡ ▒л│╖айн╗╡ ╖и▒ел, ░авноме░но ░а▒п░еделенн╗╡ на п░омеж│▓ке [0; 1) (оп░еделение ░авноме░ного ░а▒п░еделени┐ дано в ░азд. 6.2).
[Заме▓им, ╖▓о ╜▓о▓ алго░и▓м | де▓е░мини░ованн╗й (не и▒пол╝з│е▓ гене░а▓о░а ▒л│╖айн╗╡ ╖и▒ел); пон┐▓ие ▒л│╖айно▒▓и возникае▓
ли╕╝ п░и анализе в░емени его ░або▓╗.]
Иде┐ алго░и▓ма ▒о▒▓ои▓ в ▓ом, ╖▓о п░омеж│▓ок [0; 1) дели▓▒┐
на n ░авн╗╡ ╖а▒▓ей, по▒ле ╖его дл┐ ╖и▒ел из каждой ╖а▒▓и в╗дел┐е▓▒┐ ▒вой ┐╣ик-╖е░пак (bucket), и n подлежа╣и╡ ▒о░▓и░овке
╖и▒ел ░а▒клад╗ва╛▓▒┐ по ╜▓им ┐╣икам. По▒кол╝к│ ╖и▒ла ░авноме░но ░а▒п░еделен╗ на о▓░езке [0; 1), ▒лед│е▓ ожида▓╝, ╖▓о в каждом ┐╣ике и╡ б│де▓ немного. Тепе░╝ о▓▒о░▓и░│ем ╖и▒ла в каждом
┐╣ике по о▓дел╝но▒▓и и п░ойдем▒┐ по ┐╣икам в по░┐дке воз░а▒▓ани┐, в╗пи▒╗ва┐ попав╕ие в кажд╗й из ни╡ ╖и▒ла ▓акже в по░┐дке
воз░а▒▓ани┐.
Б│дем ▒╖и▓а▓╝, ╖▓о на в╡од подае▓▒┐ n-╜лемен▓н╗й ма▒▒ив A,
п░и╖ем 0 6 A[i] < 1 дл┐ в▒е╡ i. И▒пол╝з│е▓▒┐ ▓акже в▒помога▓ел╝н╗й ма▒▒ив B [0 : : n ; 1], ▒о▒▓о┐╣ий из ▒пи▒ков, ▒оо▓ве▓▒▓в│╛╣и╡
┐╣икам. Алго░и▓м и▒пол╝з│е▓ опе░а╢ии ▒о ▒пи▒ками, ко▓о░╗е опи-
Со░▓и░овка в╗╖е░п╗ванием
181
Рабо▓а алго░и▓ма Bucket-Sort. (а) На в╡од подан ма▒▒ив A[1 : : 10].
(б) Ма▒▒ив ▒пи▒ков B [0 : : 9] по▒ле в╗полнени┐ ▒▓░оки 5. Спи▒ок ▒ индек▒ом i ▒оде░жи▓ ╖и▒ла, │ ко▓о░╗╡ пе░в╗й знак по▒ле зап┐▓ой е▒▓╝ i. О▓▒о░▓и░ованн╗й
ма▒▒ив пол│╖и▓▒┐, е▒ли по▒ледова▓ел╝но в╗пи▒а▓╝ ▒пи▒ки B [0];: : : ; B [9].
Ри▒. 9.4
▒ан╗ в ░азд. 11.2.
Bucket-Sort(A)
1 n length[A]
2 for i 1 to n
3
do добави▓╝ A[i] к ▒пи▒к│ B [bnA[i]c]
4 for i 0 to n ; 1
5
do о▓▒о░▓и░ова▓╝ ▒пи▒ок B [i] (▒о░▓и░овка в▒▓авками)
6 ▒оедини▓╝ ▒пи▒ки B [0]; B [1]; : : :; B [n ; 1] (в │казанном по░┐дке)
На ░и▒. 9.4 показана ░або▓а ╜▓ого алго░и▓ма на п░име░е ма▒▒ива
из 10 ╖и▒ел.
Ч▓об╗ показа▓╝, ╖▓о алго░и▓м ▒о░▓и░овки в╗╖е░п╗ванием п░авилен, ░а▒▒мо▓░им два ╖и▒ла A[i] и A[j ]. Е▒ли они попали в ░азн╗е
┐╣ики, ▓о мен╝╕ее из ни╡ попало в ┐╣ик ▒ мен╝╕им номе░ом, и в
в╗╡одной по▒ледова▓ел╝но▒▓и оно окаже▓▒┐ ░ан╝╕е; е▒ли они попали в один ┐╣ик, ▓о по▒ле ▒о░▓и░овки ▒оде░жимого ┐╣ика мен╝╕ее
╖и▒ло б│де▓ ▓акже п░ед╕е▒▓вова▓╝ бол╝╕ем│.
П░оанализи░│ем в░ем┐ ░або▓╗ алго░и▓ма. Опе░а╢ии во в▒е╡
▒▓░ока╡, к░оме п┐▓ой, ▓░еб│╛▓ (об╣его) в░емени O(n). П░о▒мо▓░
в▒е╡ ┐╣иков ▓акже занимае▓ в░ем┐ O(n). Таким об░азом, нам
о▒▓ае▓▒┐ ▓ол╝ко о╢ени▓╝ в░ем┐ ▒о░▓и░овки в▒▓авками вн│▓░и ┐╣иков.
П│▒▓╝ в ┐╣ик B [i] попало ni ╖и▒ел (ni | ▒л│╖айна┐ вели╖ина).
По▒кол╝к│ ▒о░▓и░овка в▒▓авками ░або▓ае▓ за квад░а▓и╖ное в░ем┐,
ма▓ема▓и╖е▒кое ожидание дли▓ел╝но▒▓и ▒о░▓и░овки ╖и▒ел в ┐╣ике номе░ i е▒▓╝ O(M[n2i ]), а ма▓ема▓и╖е▒кое ожидание ▒│мма░ного
182
Глава 9 Со░▓и░овка за линейное в░ем┐
в░емени ▒о░▓и░овки во в▒е╡ ┐╣ика╡ е▒▓╝
nX
;1
i=0
O(M[n2i ]) = O
n;1
X
i=0
!
M[n2i ] :
(9.1)
Найдем ┤│нк╢и╛ ░а▒п░еделени┐ ▒л│╖айн╗╡ вели╖ин ni . По▒кол╝к│ ╖и▒ла ░а▒п░еделен╗ ░авноме░но, а вели╖ин╗ в▒е╡ о▓░езков ░авн╗, ве░о┐▓но▒▓╝ ▓ого, ╖▓о данное ╖и▒ло попаде▓ в ┐╣ик номе░
i, ░авна 1=n. С▓ало б╗▓╝, м╗ на╡одим▒┐ в ▒и▓│а╢ии п░име░а из
░азд. 6.6.2 ▒ ╕а░ами и │░нами: │ на▒ n ╕а░ов-╖и▒ел, n │░н-┐╣иков,
и ве░о┐▓но▒▓╝ попадани┐ данного ╕а░а в данн│╛ │░н│ ░авна p =
1=n. По╜▓ом│ ╖и▒ла ni ░а▒п░еделен╗ биномал╝но: ве░о┐▓но▒▓╝ ▓ого, ╖▓о ni = k, ░авна Cnk pk (1 ; p)n;k , ма▓ема▓и╖е▒кое ожидание
░авно M[ni ] = np = 1, и ди▒пе░▒и┐ ░авна D[ni] = np(1 ; p) = 1 ; 1=n.
Из ┤о░м│л╗ (6.30) имеем:
M[n2 ] = D[n ] + M2[n ] = 2 ; 1 = (1):
i
i
i
n
Под▒▓авл┐┐ ╜▓│ о╢енк│ в (9.1), пол│╖аем, ╖▓о ма▓ема▓и╖е▒кое ожидание ▒│мма░ного в░емени ▒о░▓и░овки в▒е╡ ┐╣иков е▒▓╝ O(n), ▓ак
╖▓о ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ алго░и▓ма ▒о░▓и░овки в╗╖е░п╗ванием в ▒амом деле линейно зави▒и▓ о▓ коли╖е▒▓ва
╖и▒ел.
Уп░ажнени┐
9.4-1 След│┐ об░аз╢│ ░и▒. 9.4, покажи▓е, как ░або▓ае▓ алго░и▓м Bucket-Sort дл┐ ма▒▒ива A = h0:79; 0:13; 0:16; 0:64; 0:39;
0:20; 0:89; 0:53; 0:71; 0:42i.
9.4-2 Каково в░ем┐ ░або▓╗ алго░и▓ма ▒о░▓и░овки в╗╖е░п╗ванием в ╡│д╕ем ▒л│╖ае? П░ид│май▓е его п░о▒▓│╛ моди┤ика╢и╛,
▒о╡░ан┐╛╣│╛ линейное ▒░еднее в░ем┐ ░або▓╗ и ▒нижа╛╣│╛ в░ем┐
░або▓╗ в ╡│д╕ем ▒л│╖ае до O(n lg n).
9.4-3? Дано n незави▒им╗╡ ▒л│╖айн╗╡ ▓о╖ек ▒ коо░дина▓ами
(xi ; yi), ░авноме░но ░а▒п░еделенн╗╡ в к░│ге ░ади│▒а 1 ▒ ╢ен▓░ом
в на╖але коо░дина▓ (╜▓о озна╖ае▓, ╖▓о ве░о┐▓но▒▓╝ най▓и ▓о╖к│
в какой-▓о обла▒▓и п░опо░╢ионал╝на пло╣ади ╜▓ой обла▒▓и). Раз░або▓ай▓е алго░и▓м, ░а▒полага╛╣ий ▓о╖ки в по░┐дке воз░а▒▓ани┐ ░а▒▒▓о┐ни┐ о▓ ╢ен▓░а и име╛╣ий ▒░еднее в░ем┐ ░або▓╗ (n).
(Указание: во▒пол╝з│й▓е▒╝ ▒о░▓и░овкой в╗╖е░п╗ванием, но позабо▓╝▓е▒╝ о ▓ом, ╖▓об╗ пло╣ади ┐╣иков б╗ли ░авн╗).
9.4-4? П│▒▓╝ X | ▒л│╖айна┐ вели╖ина. Ее ┤│нк╢и┐ ░а▒п░еделени┐
(probability distribution function) оп░едел┐е▓▒┐ ┤о░м│лой P (x) =
Зада╖и к главе 9
183
PfX 6 xg. П░едположим, ╖▓о на в╡од алго░и▓ма по▒▓│пае▓ по▒ледова▓ел╝но▒▓╝ из n ╖и▒ел, ко▓о░╗е ┐вл┐╛▓▒┐ незави▒им╗ми ▒л│╖айн╗ми вели╖инами ▒ ┤│нк╢ией ░а▒п░еделени┐ P . Ф│нк╢и┐ P неп░е░╗вна и може▓ б╗▓╝ в╗╖и▒лена за в░ем┐ O(1). Как о▓▒о░▓и░ова▓╝ ▓ак│╛ по▒ледова▓ел╝но▒▓╝, ╖▓об╗ ▒░еднее в░ем┐ ▒о░▓и░овки
линейно зави▒ело о▓ n?
Зада╖и
9-1 Нижние о╢енки дл┐ ▒░еднего ╖и▒ла ▒░авнений
В ╜▓ой зада╖е м╗ докажем, ╖▓о ▒░еднее в░ем┐ ░або▓╗ л╛бого
де▓е░мини░ованного или ве░о┐▓но▒▓ного алго░и▓ма ▒о░▓и░овки n
╖и▒ел, о▒нованного на ▒░авнени┐╡, е▒▓╝ (n lg n). На╖нем ▒ ▓ого,
╖▓о ░а▒▒мо▓░им де▓е░мини░ованн╗й алго░и▓м A, о▒нованн╗й на
▒░авнени┐╡; п│▒▓╝ TA | его ░аз░е╕а╛╣ее де░ево. М╗ п░едполагаем, ╖▓о в▒е пе░е▒▓ановки в╡одной по▒ледова▓ел╝но▒▓и ░авнове░о┐▓н╗.
а. Напи╕ем на каждом ли▒▓е де░ева TA ве░о┐▓но▒▓╝ ▓ого, ╖▓о
алго░и▓м заве░╕и▓▒┐ в ╜▓ом ли▒▓е. Покажи▓е, ╖▓о в n! ли▒▓а╡ напи▒ано 1=n!, а в о▒▓ал╝н╗╡ ли▒▓а╡ напи▒ан н│л╝.
б. Обозна╖им ╖е░ез D(T ) ▒│мм│ гл│бин в▒е╡ ли▒▓╝ев в двои╖ном де░еве T (м╗ п░едполагаем, ╖▓о кажда┐ ве░╕ина либо ┐вл┐е▓▒┐ ли▒▓ом, либо имее▓ дв│╡ де▓ей | ▓ак │▒▓░оен╗ ░аз░е╕а╛╣ие де░ев╝┐). П│▒▓╝ T | де░ево ▒ k > 1 ли▒▓╝┐ми, и п│▒▓╝ ╖е░ез
LT и RT обозна╖ен╗ левое и п░авое подде░ев╝┐. Покажи▓е, ╖▓о
D(T ) = D(LT ) + D(RT ) + k.
в. П│▒▓╝ d(m) | наимен╝╕ее зна╖ение ╖и▒ла D(T ) ▒░еди в▒е╡
де░ев╝ев T ▒ m ли▒▓╝┐ми. Покажи▓е, ╖▓о d(k) = min16i6k;1 fd(i) +
d(k ; i) + kg. (Указание: де░ево LT може▓ ▒оде░жа▓╝ о▓ 1 до k ; 1
ли▒▓╝ев.)
г. Покажи▓е, ╖▓о дл┐ ┤ик▒и░ованного k в╗░ажение i lg i + (k ;
i) lg(k ; i) до▒▓игае▓ миним│ма на о▓░езке о▓ 1 до k ; 1 в ▓о╖ке
i = k=2. В╗веди▓е о▓▒╛да, ╖▓о d(k) = (k lg k).
д. Покажи▓е, ╖▓о D(TA ) = (n! lg(n!)), и в╗веди▓е о▓▒╛да, ╖▓о
в░ем┐ ▒о░▓и░овки n ╖и▒ел ▒ помо╣╝╛ ░аз░е╕а╛╣его де░ева TA ,
│▒░едненное по в▒ем пе░е▒▓ановкам на в╡оде, е▒▓╝ (n lg n).
Тепе░╝ ░а▒▒мо▓░им ве░о┐▓но▒▓н╗й алго░и▓м B , о▒нованн╗й на
▒░авнени┐╡. Его можно опи▒а▓╝ ▒ помо╣╝╛ ░аз░е╕а╛╣его де░ева,
в ко▓о░ом б╗ва╛▓ │зл╗ дв│╡ ▓ипов: ▒оо▓ве▓▒▓в│╛╣ие ▒░авнени┐м и ▒л│╖айн╗м в╗бо░ам. В │зла╡ в▓о░ого ▓ипа п░ои▒╡оди▓ в╗зов
п░о╢ед│░╗ Random(1; r); │ ▓акого │зла r де▓ей, кажд╗й из ко▓о░╗╡ в╗би░ае▓▒┐ ▒ ░авной ве░о┐▓но▒▓╝╛. (Дл┐ ░азн╗╡ │злов ╖и▒ло
r може▓ б╗▓╝ ░азн╗м.)
е. П│▒▓╝ имее▓▒┐ ве░о┐▓но▒▓н╗й алго░и▓м ▒о░▓и░овки B . Дл┐
184
Глава 9 Со░▓и░овка за линейное в░ем┐
каждой пе░е▒▓ановки на в╡оде найдем ма▓ема▓и╖е▒кое ожидание
╖и▒ла ▒░авнений. У▒░едним ╜▓и ожидани┐ по в▒ем в╡одам; пол│╖и▓▒┐ неко▓о░ое ╖и▒ло T . Покажи▓е, ╖▓о ▒│╣е▒▓в│е▓ де▓е░мини░ованн╗й алго░и▓м A, │ ко▓о░ого ▒░еднее (по в▒ем пе░е▒▓ановкам
на в╡оде) ╖и▒ло ▒░авнений не п░ево▒╡оди▓ T . В╗веди▓е о▓▒╛да,
╖▓о дл┐ л╛бого ве░о┐▓но▒▓ного алго░и▓ма мак▒имал╝ное (по в▒ем
в╡одам) ма▓ема▓и╖е▒кое ожидание ╖и▒ла ▒░авнений е▒▓╝ (n lg n).
(Указание. Е▒ли ▒░еднее по в▒ем в╡одам и в▒ем ва░иан▓ам ▒л│╖айн╗╡ ╖и▒ел ░авно T , ▓о ▒│╣е▒▓в│е▓ ▓акой набо░ ▒л│╖айн╗╡ ╖и▒ел, п░и ко▓о░ом ▒░еднее по в▒ем в╡одам не бол╝╕е T .)
9-2 Со░▓и░овка без дополни▓ел╝ной пам┐▓и за линейное в░ем┐
а. П│▒▓╝ нам дан ма▒▒ив запи▒ей, ко▓о░╗й необ╡одимо о▓▒о░▓и░ова▓╝ по кл╛╖│, п░инима╛╣ем│ зна╖ение 0 или 1. П░ид│май▓е
п░о▒▓ой алго░и▓м, о▒│╣е▒▓вл┐╛╣ий ▓ак│╛ ▒о░▓и░овк│ за линейное в░ем┐ и и▒пол╝з│╛╣ий дополни▓ел╝н│╛ пам┐▓╝ O(1) (ин╗ми
▒ловами, об║ем дополни▓ел╝ной пам┐▓и не зави▒и▓ о▓ ░азме░ов
▒о░▓и░│емого ма▒▒ива).
б. Можно ли во▒пол╝зова▓╝▒┐ алго░и▓мом из п│нк▓а (а) дл┐ ╢и┤░овой ▒о░▓и░овки по b-би▓ном│ кл╛╖│ за в░ем┐ O(bn)? Об║┐▒ни▓е ▒вой о▓ве▓.
в. П│▒▓╝ n запи▒ей надо о▓▒о░▓и░ова▓╝ по кл╛╖│, п░инима╛╣ем│ ╢ел╗е зна╖ени┐ о▓ 1 до k. Как моди┤и╢и░ова▓╝ ▒о░▓и░овк│
под▒╖е▓ом, ╖▓об╗ можно б╗ло о▓▒о░▓и░ова▓╝ ╜▓и запи▒и за в░ем┐
O(n + k), и п░и ╜▓ом об║ем и▒пол╝з│емой пам┐▓и (помимо ▒о░▓и░│емого ма▒▒ива) б╗л O(k)? (Указание. На╖ни▓е ▒о ▒л│╖а┐ k = 3.)
Заме╖ани┐
Анализ алго░и▓мов ▒о░▓и░овки ▒ помо╣╝╛ ░аз░е╕а╛╣и╡ де░ев╝ев б╗л п░едложен Фо░дом и Джон▒оном [72]. В ┤│ндамен▓ал╝ной книге Кн│▓а [123], по▒в┐╣енной ▒о░▓и░овке, ░а▒▒ма▓░ива╛▓▒┐ много╖и▒ленн╗е ва░иан▓╗ ╜▓ой зада╖и и доказ╗вае▓▒┐ нижн┐┐
о╢енка ╖и▒ла ▒░авнений (п░иведенна┐ в ╜▓ой главе). Нижние о╢енки дл┐ зада╖и ▒о░▓и░овки и ░азли╖н╗╡ обоб╣ений ░аз░е╕а╛╣и╡
де░ев╝ев под░обно из│╖али▒╝ Бен-О░ом [23].
Согла▒но Кн│▓│, за▒л│га изоб░е▓ени┐ ▒о░▓и░овки под▒╖е▓ом
(1954 год) и ее комбина╢ии ▒ ╢и┤░овой ▒о░▓и░овкой п░инадлежи▓
С╝╛а░д│ (H. H. Seward). Сама же ╢и┤░ова┐ ▒о░▓и░овка, видимо,
давно п░имен┐ла▒╝ дл┐ ▒о░▓и░овки пе░┤ока░▓. Кн│▓ │▓ве░ждае▓,
╖▓о пе░вое пе╖а▓ное опи▒ание ╜▓ого ме▓ода по┐вило▒╝ в 1929 год│ в
ка╖е▒▓ве ▒о▒▓авной ╖а▒▓и ░│ковод▒▓ва по обо░│довани╛ дл┐ ░або▓╗ ▒ пе░┤ока░▓ами, напи▒анного Ком░и (L. J. Comrie). Со░▓и░овка
в╗╖е░п╗ванием и▒пол╝з│е▓▒┐ ▒ 1956 года, когда Айзек (E. J. Isaac)
Заме╖ани┐ к главе 9
и Сингле▓он (R. C. Singleton) п░едложили о▒новн│╛ иде╛.
185
10
Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
В ╜▓ой главе м╗ ░а▒▒ма▓░иваем ▓ак│╛ зада╖│: дано множе▒▓во из
n ╖и▒ел; най▓и ▓о▓ его ╜лемен▓, ко▓о░╗й б│де▓ i-м по ▒╖е▓│, е▒ли
░а▒положи▓╝ ╜лемен▓╗ множе▒▓ва в по░┐дке воз░а▒▓ани┐. В англо┐з╗╖ной ли▓е░а▓│░е ▓акой ╜лемен▓ наз╗вае▓▒┐ i-й по░┐дковой
▒▓а▓и▒▓икой (order statistic). Нап░име░, миним│м (minimum) | ╜▓о
по░┐дкова┐ ▒▓а▓и▒▓ика номе░ 1, а мак▒им│м (maximum) | по░┐дкова┐ ▒▓а▓и▒▓ика номе░ n. Медианой (median) наз╗вае▓▒┐ ╜лемен▓
множе▒▓ва, на╡од┐╣ий▒┐ (по ▒╖е▓│) по▒е░едине межд│ миним│мом
и мак▒им│мом. То╖нее гово░┐, е▒ли n не╖е▓но, ▓о медиана | ╜▓о
по░┐дкова┐ ▒▓а▓и▒▓ика номе░ i = (n + 1)=2, а е▒ли n ╖е▓но, ▓о
медиан даже две: ▒ номе░ами i = n=2 и i = n=2 + 1. Можно е╣е
▒каза▓╝, ╖▓о, незави▒имо о▓ ╖е▓но▒▓и n, медиан╗ име╛▓ номе░
i = b(n + 1)=2c и i = d(n + 1)=2e. В дал╝ней╕ем м╗ б│дем наз╗ва▓╝ медианой мен╝╕│╛ из дв│╡ (е▒ли и╡ две).
Дл┐ │доб▒▓ва м╗ б│дем ▒╖и▓а▓╝, ╖▓о множе▒▓во, в ко▓о░ом м╗
и╣ем по░┐дков╗е ▒▓а▓и▒▓ики, ▒о▒▓ои▓ из ░азли╖н╗╡ ╜лемен▓ов,
╡о▓┐ п░ак▓и╖е▒ки в▒е, ╖▓о м╗ делаем, пе░ено▒и▓▒┐ на ▒и▓│а╢и╛,
когда во множе▒▓ве е▒▓╝ пов▓о░┐╛╣ие▒┐ ╜лемен▓╗. Зада╖а в╗бо░а
╜лемен▓а ▒ данн╗м номе░ом (selection problem) ▒о▒▓ои▓ в ▒лед│╛╣ем:
Дано: Множе▒▓во A из n ░азли╖н╗╡ ╜лемен▓ов и ╢елое ╖и▒ло i,
1 6 i 6 n.
Най▓и: Элемен▓ x 2 A, дл┐ ко▓о░ого ░овно i ; 1 ╜лемен▓ов множе▒▓ва A мен╝╕е x.
Э▓│ зада╖│ можно ░е╕и▓╝ за в░ем┐ O(n lg n): о▓▒о░▓и░ова▓╝ ╖и▒ла,
по▒ле ╖его вз┐▓╝ i-й ╜лемен▓ в пол│╖енном ма▒▒иве. Е▒▓╝, однако,
и более б╗▒▓░╗е алго░и▓м╗.
В ░азделе 10.1 м╗ ░а▒▒мо▓░им п░о▒▓ей╕ий ▒л│╖ай: на╡ождение
мак▒имал╝ного и минимал╝ного ╜лемен▓ов. Об╣а┐ зада╖а более
ин▓е░е▒на; ей по▒в┐╣ен╗ два ▒лед│╛╣и╡ ░аздела. В ░азделе 10.2
м╗ ░а▒▒ма▓░иваем │добн╗й на п░ак▓ике ве░о┐▓но▒▓н╗й алго░и▓м,
ко▓о░╗й и╣е▓ по░┐дков│╛ ▒▓а▓и▒▓ик│ за в░ем┐ O(n) в ▒░еднем
(имее▓▒┐ в вид│ ма▓ема▓и╖е▒кое ожидание в░емени его ░або▓╗
на л╛бом в╡оде). В ░азделе 10.3 м╗ ░а▒▒ма▓░иваем (п░ед▒▓авл┐-
Миним│м и мак▒им│м
187
╛╣ий ▒ко░ее ▓ео░е▓и╖е▒кий ин▓е░е▒) де▓е░мини░ованн╗й алго░и▓м, ▓░еб│╛╣ий в░емени O(n) в ╡│д╕ем ▒л│╖ае.
10.1. Миним│м и мак▒им│м
Скол╝ко ▒░авнений необ╡одимо, ╖▓об╗ во множе▒▓ве из n ╖и▒ел
най▓и наимен╝╕ее? За n ; 1 ▒░авнений ╜▓о ▒дела▓╝ легко: надо по▒ледова▓ел╝но пе░еби░а▓╝ в▒е ╖и▒ла, ╡░ан┐ зна╖ение наимен╝╕его
╖и▒ла из │же п░о▒мо▓░енн╗╡. Запи╕ем ╜▓о▓ алго░и▓м, ▒╖и▓а┐, ╖▓о
╖и▒ла задан╗ в виде ма▒▒ива A длин╗ n.
Minimum(A)
1 min A[1]
2 for i 2 to length[A]
3
do if min > A[i]
4
then min A[i]
5 return min
Раз│мее▓▒┐, аналоги╖н╗м об░азом можно най▓и и мак▒им│м.
Можно ли най▓и миним│м е╣е б╗▒▓░ее? Не▓, и во▓ по╖ем│. Ра▒▒мо▓░им алго░и▓м на╡ождени┐ наимен╝╕его ╖и▒ла как ▓│░ни░ ▒░еди n ╖и▒ел, а каждое ▒░авнение | как ма▓╖, в ко▓о░ом мен╝╕ее
╖и▒ло побеждае▓. Ч▓об╗ победи▓ел╝ б╗л найден, каждое из о▒▓ал╝н╗╡ ╖и▒ел должно п░оиг░а▓╝ по к░айней ме░е один ма▓╖, ▓ак ╖▓о
мен╝╕е n ; 1 ▒░авнений б╗▓╝ не може▓, и алго░и▓м Minimum оп▓имален по ╖и▒л│ ▒░авнений.
Ин▓е░е▒н╗й воп░о▒, ▒в┐занн╗й ▒ ╜▓им алго░и▓мом | на╡ождение ма▓ема▓и╖е▒кого ожидани┐ ╖и▒ла и▒полнений ▒▓░оки 4. В зада╖е 6-2 ▓░еб│е▓▒┐ показа▓╝, ╖▓о ╜▓а вели╖ина е▒▓╝ (lg n).
Однов░еменн╗й пои▒к миним│ма и мак▒им│ма
Иногда б╗вае▓ н│жно най▓и однов░еменно минимал╝н╗й и мак▒имал╝н╗й ╜лемен▓╗ множе▒▓ва. П░ед▒▓авим ▒ебе п░ог░амм│, ко▓о░а┐ должна │мен╝╕и▓╝ ░и▒│нок (набо░ ▓о╖ек, заданн╗╡ ▒воими
коо░дина▓ами) ▓ак, ╖▓об╗ он │ме▒▓ил▒┐ на ╜к░ане. Дл┐ ╜▓ого н│жно най▓и мак▒им│м и миним│м по каждой коо░дина▓е.
Е▒ли м╗ поп░о▒▓│ найдем ▒на╖ала миним│м, а по▓ом мак▒им│м,
за▓░а▓ив на кажд╗й из ни╡ по n ; 1 ▒░авнений, ▓о в▒его б│де▓
2n ; 2 ▒░авнени┐, ╖▓о а▒имп▓о▓и╖е▒ки оп▓имал╝но. Можно, однако, ░е╕и▓╝ ╜▓│ зада╖│ в▒его за 3dn=2e ; 2 ▒░авнений. Именно, б│дем ╡░ани▓╝ зна╖ени┐ мак▒им│ма и миним│ма │же п░о▒мо▓░енн╗╡
╖и▒ел, а о╖е░едн╗е ╖и▒ла б│дем об░аба▓╗ва▓╝ по два ▓аким об░азом: ▒на╖ала ▒░авним два о╖е░едн╗╡ ╖и▒ла д░│г ▒ д░│гом, а за▓ем
188
Глава 10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
бол╝╕ее из ни╡ ▒░авним ▒ мак▒им│мом, а мен╝╕ее | ▒ миним│мом.
П░и ╜▓ом на об░або▓к│ дв│╡ ╜лемен▓ов м╗ за▓░а▓им ▓░и ▒░авнени┐ вме▒▓о ╖е▓╗░е╡ (к░оме пе░вой па░╗, где понадоби▓▒┐ в▒его
одно ▒░авнение).
Уп░ажнени┐
10.1-1 Покажи▓е, ╖▓о в▓о░ое по вели╖ине ╖и▒ло из n данн╗╡
можно най▓и в ╡│д╕ем ▒л│╖ае за n + dlg ne ; 2 ▒░авнени┐. (Указание. И╣и▓е ╜▓о ╖и▒ло вме▒▓е ▒ наимен╝╕им.)
10.1-2? Покажи▓е, ╖▓о дл┐ однов░еменного на╡ождени┐ наибол╝╕его и наимен╝╕его из n ╖и▒ел в ╡│д╕ем ▒л│╖ае необ╡одимо не
менее d3n=2e ; 2 ▒░авнений. (Указание. В кажд╗й момен▓ ╜лемен▓╗ дел┐▓▒┐ на ╖е▓╗░е г░│пп╗: (1) неп░о▒мо▓░енн╗е (ко▓о░╗е мог│▓ оказа▓╝▒┐ и минимал╝н╗ми, и мак▒имал╝н╗ми); (2) ▓е, ╖▓о
е╣е мог│▓ оказа▓╝▒┐ минимал╝н╗ми, но заведомо не мак▒имал╝н╗;
(3) ▓е, ╖▓о е╣е мог│▓ оказа▓╝▒┐ мак▒имал╝н╗ми, но не минимал╝н╗ми; (4) о▓б░о╕енн╗е (ко▓о░╗е заведомо не минимал╝н╗ и не
мак▒имал╝н╗). П│▒▓╝ a1 ; a2; a3; a4 | коли╖е▒▓во ╜лемен▓ов каждой
г░│пп╗. Как мен┐╛▓▒┐ ╜▓и ╖и▒ла п░и ▒░авнени┐╡?)
10.2. В╗бо░ за линейное в ▒░еднем в░ем┐
Хо▓┐ об╣а┐ зада╖а в╗бо░а в╗гл┐ди▓ более ▒ложной, ╖ем зада╖а о
миним│ме или мак▒им│ме, ее, как ни ▒▓░анно, ▓оже можно ░е╕и▓╝
за в░ем┐ (n). В ╜▓ом ░азделе м╗ ░а▒▒мо▓░им ве░о┐▓но▒▓н╗й алго░и▓м Randomized-Select дл┐ ░е╕ени┐ ╜▓ой зада╖и, дей▒▓в│╛╣ий по ▒╡еме └░аздел┐й и вла▒▓в│й┴. Он аналоги╖ен алго░и▓м│
б╗▒▓░ой ▒о░▓и░овки из глав╗ 8: ма▒▒ив ░азбивае▓▒┐ на мен╝╕ие
╖а▒▓и. Однако алго░и▓м б╗▒▓░ой ▒о░▓и░овки, ░азбив ма▒▒ив на
два к│▒ка, об░аба▓╗вае▓ оба, а алго░и▓м Randomized-Select |
▓ол╝ко один из ╜▓и╡ к│▒ков. По╜▓ом│ он б╗▒▓░ее: ▒░еднее в░ем┐ б╗▒▓░ой ▒о░▓и░овки е▒▓╝ (n lg n), в ▓о в░ем┐ как алго░и▓м
Randomized-Select ░або▓ае▓ в ▒░еднем за в░ем┐ (n).
Алго░и▓м Randomized-Select
и▒пол╝з│е▓ п░о╢ед│░│ Randomized-Partition, опи▒анн│╛ в ░азделе 8.3, поведение
ко▓о░ой (и, ▒▓ало б╗▓╝, в▒его алго░и▓ма) зави▒и▓ о▓ да▓╖ика ▒л│╖айн╗╡ ╖и▒ел. В╗зов Randomized-Select(A; p; r; i) возв░а╣ае▓
i-й по ▒╖е▓│ в по░┐дке воз░а▒▓ани┐ ╜лемен▓ ма▒▒ива A[p : :r].
В╗бо░ за линейное в ▒░еднем в░ем┐
Randomized-Select (A; p; r; i)
189
1 if p = r
2 then return A[p]
3 q Randomized-Partition(A; p; r)
4 k q;p+1
5 if i 6 k
6 then return Randomized-Select(A; p; q; i)
7 else return Randomized-Select(A; q + 1; r; i ; k)
По▒ле и▒полнени┐ п░о╢ед│░╗ Randomized-Partition в ▒▓░оке 3
ма▒▒ив A[p : :r] ▒о▒▓ои▓ из дв│╡ неп│▒▓╗╡ ╖а▒▓ей A[p : :q ] и A[q +
1 : :r], п░и╖ем в▒┐кий ╜лемен▓ A[p : :q ] мен╝╕е в▒┐кого ╜лемен▓а
A[q +1 : :r]. В ▒▓░оке 4 в╗╖и▒л┐е▓▒┐ коли╖е▒▓во ╜лемен▓ов в ма▒▒иве
A[p : :q]. Дал╝ней╕ее зави▒и▓ о▓ ▓ого, в каком из ╜▓и╡ дв│╡ ма▒▒ивов лежи▓ i-й по вели╖ине ╜лемен▓ ма▒▒ива A[p : :r]. Е▒ли i 6 k, ▓о
н│жн╗й нам ╜лемен▓ лежи▓ в левой ╖а▒▓и (ма▒▒иве A[p : :q ]), о▓к│да
и извлекае▓▒┐ в ░ез│л╝▓а▓е (░ек│░▒ивного) в╗зова RandomizedSelect в ▒▓░оке 6. Е▒ли же i > k, ▓о в▒е k ╜лемен▓ов левой ╖а▒▓и
(A[p : :q ]) заведомо мен╝╕е и▒комого, ко▓о░╗й можно най▓и как
(i ; k)-й по ▒╖е▓│ ╜лемен▓ ма▒▒ива A[q + 1 : :r] (▒▓░ока 7).
В░ем┐ ░або▓╗ алго░и▓ма Randomized-Select (▒ │╖е▓ом в░емени ░або▓╗ п░о╢ед│░╗ Randomized-Partition) в ╡│д╕ем ▒л│╖ае
е▒▓╝ (n2 ), даже е▒ли м╗ и╣ем в▒его ли╕╝ миним│м: в ▒амом деле,
п░и о▒обом невезении може▓ оказа▓╝▒┐, ╖▓о м╗ в▒е в░ем┐ ░азбиваем ма▒▒ив возле наибол╝╕его о▒▓ав╕его▒┐ ╜лемен▓а. Однако ▒л│╖айн╗й в╗бо░ га░ан▓и░│е▓, ╖▓о дл┐ л╛бого в╡ода ▒░еднее в░ем┐
░або▓╗ алго░и▓ма б│де▓ невелико.
Докажем ╜▓о. Ра▒▒мо▓░им дл┐ каждой из возможн╗╡ пе░е▒▓ановок n ╜лемен▓ов ма▓ема▓и╖е▒кое ожидание в░емени ░або▓╗ алго░и▓ма (▒░еднее по в▒ем ▒л│╖айн╗м в╗бо░ам). П│▒▓╝ T (n) | мак▒имал╝ное из ╜▓и╡ ожиданий. Как м╗ о▓ме╖али в ░азделе 8.4, по▒ле
в╗зова Randomized-Partition лева┐ ╖а▒▓╝ ░азбиени┐ ▒оде░жи▓ 1
╜лемен▓ ▒ ве░о┐▓но▒▓╝╛ 2=n, и ▒оде░жи▓ i > 1 ╜лемен▓ов ▒ ве░о┐▓но▒▓╝╛ 1=n дл┐ л╛бого i о▓ 2 до n ; 1. Можно ▒╖и▓а▓╝, ╖▓о T (n)
моно▓онно воз░а▒▓ае▓ ▒ ░о▒▓ом n (е▒ли ╜▓о не ▓ак, заменим T (n)
на T 0(n) = max16i6n T (i) и пов▓о░им в▒е ░а▒▒│ждени┐ дл┐ T 0). Заме▓им, ╖▓о ╡│д╕им ▒л│╖аем б│де▓ ▓о▓, когда i-й по ▒╖е▓│ ╜лемен▓
попадае▓ в бол╝╕│╛ из дв│╡ половин, на ко▓о░╗е ░азбивае▓▒┐ ма▒-
190
Глава 10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
▒ив. О▓▒╛да имеем:
!
nX
;1
T (n) 6 n1 T (max(1; n ; 1)) + T (max(k; n ; k)) + O(n)
k=1
0
1
nX
;1
T (k)A + O(n)
6 n1 @T (n ; 1) + 2
= n2
nX
;1
k=dn=2e
k=dn=2e
T (k) + O(n)
(м╗ ▒г░│ппи░овали одинаков╗е ▒лагаем╗е п░и пе░е╡оде о▓ пе░вой
▒▓░оки ко в▓о░ой и о▓б░о▒или T (n ; 1)=n п░и пе░е╡оде о▓ в▓о░ой
▒▓░оки к ▓░е▓╝ей, ▓ак как в ╡│д╕ем ▒л│╖ае T (n ; 1) = O(n2 ), и ▓ем
▒ам╗м ▒лагаемое T (n ; 1)=n можно вкл╛╖и▓╝ в O(n)).
Тепе░╝ докажем, ╖▓о T (n) 6 cn, ░а▒▒│жда┐ по инд│к╢ии (как
в╗б░а▓╝ c, м╗ ▒кажем по▒ле). В ▒амом деле, п│▒▓╝ не░авен▒▓во
T (j ) 6 cj ве░но дл┐ в▒е╡ j < n. Тогда, и▒пол╝з│┐ ┤о░м│л│ дл┐
▒│мм╗ а░и┤ме▓и╖е▒кой п░ог░е▒▒ии, пол│╖аем, ╖▓о
T (n) 6 n2
nX
;1
k=dn=2e
ck + O(n)
6 2nc n2 n=2 + 12+ n ; 1 + O(n)
= 3cn + O(n) 6 cn;
4
е▒ли в╗б░а▓╝ c ▒▓ол╝ бол╝╕им, ╖▓об╗ c=4 п░ево▒╡одило кон▒▓ан▓│,
под░аз│меваем│╛ в ▒лагаемом O(n).
С▓ало б╗▓╝, л╛ба┐ по░┐дкова┐ ▒▓а▓и▒▓ика, и медиана в ▓ом ╖и▒ле, може▓ б╗▓╝ найдена за линейное в ▒░еднем в░ем┐.
Уп░ажнени┐
10.2-1 Напи╕и▓е ве░▒и╛ п░о╢ед│░╗ Randomized-Select, не и▒пол╝з│╛╣│╛ ░ек│░▒ии.
10.2-2 П░едположим, ╖▓о м╗ и▒пол╝з│ем алго░и▓м RandomizedSelect дл┐ в╗бо░а наимен╝╕его ╜лемен▓а из ма▒▒ива A =
h3; 2; 9; 0; 7; 5; 4; 8; 6; 1i. Опи╕и▓е по▒ледова▓ел╝но▒▓╝ ░азбиений,
▒оо▓ве▓▒▓в│╛╣│╛ ╡│д╕ем│ ▒л│╖а╛.
10.2-3 Б│де▓ ли алго░и▓м Randomized-Select п░авил╝но ░або▓а▓╝, е▒ли в ма▒▒иве A е▒▓╝ ░авн╗е ╜лемен▓╗ (как м╗ помним, в
╜▓ом ▒л│╖ае п░о╢ед│░а Randomized-Partition ░азбивае▓ A[p : :r]
В╗бо░ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐
191
на ╖а▒▓и A[p : :q ] и A[q + 1 : :r] ▓аким об░азом, ╖▓о в▒┐кий ╜лемен▓
A[p : :q] не п░ево▒╡оди▓ в▒┐кого ╜лемен▓а A[q + 1 : :r])?
10.3. В╗бо░ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐
Тепе░╝ ░а▒▒мо▓░им (де▓е░мини░ованн╗й) алго░и▓м Select, ░е╕а╛╣ий зада╖│ о по░┐дков╗╡ ▒▓а▓и▒▓ика╡ за в░ем┐ O(n) в ╡│д╕ем ▒л│╖ае. Как и Randomized-Select, ╜▓о▓ алго░и▓м о▒нован
на по▒ледова▓ел╝ном ░азбиении ма▒▒ива на мен╝╕ие ╖а▒▓и; в данном ▒л│╖ае, однако, м╗ га░ан▓и░│ем, ╖▓о в╗б░анное ░азбиение не
┐вл┐е▓▒┐ не│да╖н╗м. Алго░и▓м Select и▒пол╝з│е▓ (де▓е░мини░ованн│╛) п░о╢ед│░│ Partition (▒м. опи▒ание алго░и▓ма б╗▒▓░ой
▒о░▓и░овки в ░азд. 8.1), моди┤и╢и░ованн│╛ ▓аким об░азом, ╖▓об╗ ╜лемен▓, ▒ ко▓о░╗м ▒░авнива╛▓, задавал▒┐ как па░аме▓░.
Алго░и▓м Select на╡оди▓ i-й по по░┐дк│ ╜лемен▓ в ма▒▒иве ░азме░а n > 1 ▒лед│╛╣им об░азом:
1. Разби▓╝ n ╜лемен▓ов ма▒▒ива на bn=5c г░│пп по 5 ╜лемен▓ов и
(возможно) одн│ г░│пп│, в ко▓о░ой менее п┐▓и ╜лемен▓ов.
2. Най▓и медиан│ каждой из dn=5e г░│пп (дл┐ ╖его о▓▒о░▓и░ова▓╝
г░│пп│ в▒▓авками).
3. В╗звав (░ек│░▒ивно) п░о╢ед│░│ Select, най▓и ╖и▒ло x, ┐вл┐╛╣ее▒┐ медианой найденн╗╡ dn=5e медиан.
4. В╗звав моди┤и╢и░ованн│╛ п░о╢ед│░│ Partition, ░азби▓╝ ма▒▒ив о▓но▒и▓ел╝но найденной └медиан╗ медиан┴. П│▒▓╝ k | коли╖е▒▓во ╜лемен▓ов в нижней ╖а▒▓и ╜▓ого ░азбиени┐ (в ве░╡ней
╖а▒▓и, ▒▓ало б╗▓╝, n ; k).
5. В╗звав (░ек│░▒ивно) п░о╢ед│░│ Select, най▓и i-│╛ по░┐дков│╛ ▒▓а▓и▒▓ик│ нижней ╖а▒▓и ░азбиени┐, е▒ли i 6 k, или (i ; k)╛ по░┐дков│╛ ▒▓а▓и▒▓ик│ ве░╡ней ╖а▒▓и ░азбиени┐, е▒ли i > k.
О╢еним в░ем┐ ░або▓╗ алго░и▓ма Select. Дл┐ на╖ала в╗┐▒ним, ▒кол╝ко ╖и▒ел заведомо б│д│▓ бол╝╕е └медиан╗ медиан┴ x
(▒м. ░и▒. 10.1). Не менее половин╗ медиан, найденн╗╡ на в▓о░ом
╕аге, б│д│▓ бол╝╕е или ░авн╗ x. С▓ало б╗▓╝, по к░айней ме░е
половина из dn=5e г░│пп да▒▓ по ▓░и ╖и▒ла, бол╝╕и╡ x, за дв│м┐
возможн╗ми и▒кл╛╖ени┐ми: г░│ппа, ▒оде░жа╣а┐ x, и по▒ледн┐┐
неполна┐ г░│ппа. Тем ▒ам╗м имее▓▒┐ не менее
l m
3 21 n5 ; 2 > 310n ; 6:
╜лемен▓ов, заведомо бол╝╕и╡ x, и ▓о╖но ▓ак же пол│╖аем, ╖▓о имее▓▒┐ не менее 3n=10 ; 6 ╜лемен▓ов, заведомо мен╝╕и╡ x. Зна╖и▓,
алго░и▓м Select, ░ек│░▒ивно в╗з╗ваем╗й на п┐▓ом ╕аге, б│де▓
об░аба▓╗ва▓╝ ма▒▒ив длиной не более 7n=10 + 6.
192
Глава 10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
Анализ алго░и▓ма Select. Элемен▓╗ ма▒▒ива (и╡ n) изоб░ажен╗
к░│жками, кажд╗й ▒▓олбе╢ | г░│ппа из 5 или мен╝╕е ╜лемен▓ов, бел╗е к░│жки | медиан╗ г░│пп. └Медиана медиан┴ обозна╖ена б│квой x. С▓░елки ид│▓
о▓ бол╝╕и╡ ╖и▒ел к мен╝╕им. Видно, ╖▓о в каждом из полн╗╡ ▒▓олб╢ов п░авее
x имее▓▒┐ ▓░и ╖и▒ла, бол╝╕и╡ x, и ╖▓о в каждом из ▒▓олб╢ов левее x имее▓▒┐
▓░и ╖и▒ла, мен╝╕и╡ x. Множе▒▓во ╖и▒ел, заведомо бол╝╕и╡ x, в╗делено ▒е░╗м.
Ри▒. 10.1
П│▒▓╝ ▓епе░╝ T (n) | в░ем┐ ░або▓╗ алго░и▓ма Select на ма▒▒иве из n ╜лемен▓ов в ╡│д╕ем ▒л│╖ае. Пе░в╗й, в▓о░ой и ╖е▓ве░▓╗й
╕аги в╗полн┐╛▓▒┐ за в░ем┐ O(n) (на в▓о░ом ╕аге м╗ O(n) ░аз ▒о░▓и░│ем ма▒▒ив╗ ░азме░ом O(1)), ▓░е▓ий ╕аг в╗полн┐е▓▒┐ за в░ем┐
не более T (dn=5e), а п┐▓╗й ╕аг, по доказанном│, | за в░ем┐, не
п░ево▒╡од┐╣ее T (b7n=10+6c) (как и ░ан╝╕е, можно п░едполага▓╝,
╖▓о T (n) моно▓онно воз░а▒▓ае▓ ▒ ░о▒▓ом n). С▓ало б╗▓╝,
T (n) 6 T (dn=5e) + T (b7n=10 + 6c) + O(n):
По▒кол╝к│ ▒│мма ко╜┤┤и╢иен▓ов п░и n в п░авой ╖а▒▓и (1=5 +
7=10 = 9=10) мен╝╕е едини╢╗, из ╜▓ого ░ек│░░ен▓ного ▒оо▓но╕ени┐ в╗▓екае▓, ╖▓о T (n) 6 cn дл┐ неко▓о░ой кон▒▓ан▓╗ c. Э▓о
можно доказа▓╝ по инд│к╢ии. В ▒амом деле, п░едполага┐, ╖▓о
T (m) 6 cm дл┐ в▒е╡ m < n, имеем
T (n) 6 c(dn=5e) + c(b7n=10 + 6c) + O(n)
6 c(n=5 + 1) + c(7n=10 + 6) + O(n)
6 9cn=10 + 7c + O(n) =
= cn ; c(n=10 ; 7) + O(n):
П░и под╡од┐╣ем в╗бо░е c ╜▓о в╗░ажение б│де▓ не бол╝╕е cn п░и
в▒е╡ n > 70 (надо, ╖▓об╗ c(n=10 ; 6) п░ево▒╡одило ко╜┤┤и╢иен▓,
под░аз│меваем╗й в O(n)). Таким об░азом, инд│к▓ивн╗й пе░е╡од
возможен п░и n > 70 (заме▓им е╣е, ╖▓о п░и ▓аки╡ n в╗░ажени┐
dn=5e и b7n=10 + 6c мен╝╕е n).
Увели╖ив c е╣е (е▒ли надо), можно доби▓╝▒┐ ▓ого, ╖▓об╗ T (n)
не п░ево▒╡одило cn и п░и в▒е╡ n 6 70, ╖▓о заве░╕ае▓ ░а▒▒│ждение
по инд│к╢ии. С▓ало б╗▓╝, алго░и▓м Select ░або▓ае▓ за линейное
в░ем┐ (в ╡│д╕ем ▒л│╖ае).
В╗бо░ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐
193
О▓ме▓им, ╖▓о алго░и▓м╗ Select и Randomized-Select, в о▓ли╖ие о▓ опи▒анн╗╡ в главе 9 алго░и▓мов ▒о░▓и░овки за линейное в░ем┐, и▒пол╝з│╛▓ ▓ол╝ко попа░н╗е ▒░авнени┐ ╜лемен▓ов ма▒▒ива и п░именим╗ дл┐ п░оизвол╝ного │по░┐до╖енного множе▒▓ва.
Э▓и алго░и▓м╗ а▒имп▓о▓и╖е▒ки ╜┤┤ек▓ивнее о╖евидного под╡ода
└│по░┐до╖и множе▒▓во и в╗бе░и н│жн╗й ╜лемен▓┴, по▒кол╝к│ в▒┐кий алго░и▓м ▒о░▓и░овки, и▒пол╝з│╛╣ий ▓ол╝ко попа░н╗е ▒░авнени┐, ▓░еб│е▓ в░емени (n lg n) не ▓ол╝ко в ╡│д╕ем ▒л│╖ае (░аздел 9.1), но и в ▒░еднем (зада╖а 9-1).
Уп░ажнени┐
10.3-1 Б│де▓ ли алго░и▓м Select ░або▓а▓╝ за линейное в░ем┐,
е▒ли ░азбива▓╝ ма▒▒ив на г░│пп╗ не из п┐▓и, а из ▒еми ╜лемен▓ов? Покажи▓е, ╖▓о дл┐ г░│пп из ▓░е╡ ╜лемен▓ов ░а▒▒│ждение не
п░о╡оди▓.
10.3-2 П│▒▓╝ x | └медиана медиан┴ в алго░и▓ме Select (ма▒▒ив
▒оде░жи▓ n ╜лемен▓ов). Покажи▓е, ╖▓о п░и n > 38 коли╖е▒▓во ╜лемен▓ов, бол╝╕и╡ x (▓ак же как и коли╖е▒▓во ╜лемен▓ов, мен╝╕и╡ x)
не мен╝╕е dn=4e.
10.3-3 Моди┤и╢и░│й▓е алго░и▓м б╗▒▓░ой ▒о░▓и░овки ▓ак, ╖▓об╗ он ░або▓ал за в░ем┐ O(n lg n) в ╡│д╕ем ▒л│╖ае.
10.3-4? П│▒▓╝ алго░и▓м в╗бо░а i-го по ▒╖е▓│ ╜лемен▓а и▒пол╝з│е▓ ▓ол╝ко попа░н╗е ▒░авнени┐. Покажи▓е, ╖▓о ▒ помо╣╝╛ ▓е╡ же
▒░авнений можно в ка╖е▒▓ве побо╖ного ░ез│л╝▓а▓а пол│╖и▓╝ ▒пи▒ки ╜лемен▓ов, мен╝╕и╡ и▒комого, а ▓акже бол╝╕и╡ и▒комого.
10.3-5 П│▒▓╝ │ на▒ е▒▓╝ какой-▓о алго░и▓м, на╡од┐╣ий медиан│ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐. И▒пол╝з│┐ его в ка╖е▒▓ве
подп░ог░амм╗, ░аз░або▓ай▓е п░о▒▓ой алго░и▓м, ░е╕а╛╣ий зада╖│ на╡ождени┐ п░оизвол╝ной по░┐дковой ▒▓а▓и▒▓ики за линейное
в░ем┐.
10.3-6 Под k-кван▓ил┐ми (k-th quantiles) множе▒▓ва из n ╖и▒ел
м╗ понимаем k ; 1 его ╜лемен▓ов, облада╛╣и╡ ▒лед│╛╣им ▒вой▒▓вом: е▒ли ░а▒положи▓╝ ╜лемен▓╗ множе▒▓ва в по░┐дке воз░а▒▓ани┐, ▓о кван▓или б│д│▓ ░азбива▓╝ множе▒▓во на k ░авн╗╡ (▓о╖нее,
о▓ли╖а╛╣и╡▒┐ не более ╖ем на один ╜лемен▓) ╖а▒▓ей. Раз░або▓ай▓е
алго░и▓м, ко▓о░╗й за в░ем┐ O(n lg k) на╡оди▓ k-кван▓или данного
множе▒▓ва.
10.3-7 Раз░або▓ай▓е алго░и▓м, ко▓о░╗й по заданном│ k на╡оди▓
в данном множе▒▓ве S его k ╜лемен▓ов, менее в▒его о▓▒▓о┐╣и╡ о▓
медиан╗. Чи▒ло опе░а╢ий должно б╗▓╝ O(jS j).
194
Глава 10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
Ри▒. 10.2 Как п░ове▒▓и ▒ во▒▓ока на запад маги▒▓░ал╝, ╖▓об╗ ▒│мма░на┐ длина подвод┐╣и╡ ▓░│боп░оводов б╗ла минимал╝на?
10.3-8 П│▒▓╝ X [1 : :n] и Y [1 : :n] | два воз░а▒▓а╛╣и╡ ма▒▒ива.
Раз░або▓ай▓е алго░и▓м, на╡од┐╣ий за в░ем┐ O(lg n) медиан│ множе▒▓ва, пол│╖енного об║единением ╜лемен▓ов ╜▓и╡ ма▒▒ивов.
10.3-9 П░о┤е▒▒о░ кон▒│л╝▓и░│е▓ не┤▓┐н│╛ компани╛, ко▓о░ой
▓░еб│е▓▒┐ п░ове▒▓и маги▒▓░ал╝н╗й не┤▓еп░овод в нап░авлении
▒▓░ого ▒ запада на во▒▓ок ╖е░ез не┤▓ено▒ное поле, на ко▓о░ом
░а▒положен╗ n не┤▓┐н╗╡ ▒кважин. О▓ каждой ▒кважин╗ необ╡одимо подве▒▓и к маги▒▓░али ▓░│боп░овод по к░а▓╖ай╕ем│ п│▓и
(▒▓░ого на ▒еве░ или на ╛г, ░и▒. 10.2). Коо░дина▓╗ в▒е╡ ▒кважин
п░о┤е▒▒о░│ изве▒▓н╗; необ╡одимо в╗б░а▓╝ ме▒▓оположение маги▒▓░али, ╖▓об╗ ▒│мма длин в▒е╡ ▓░│боп░оводов, вед│╣и╡ о▓ ▒кважин к маги▒▓░али, б╗ла минимал╝на. Покажи▓е, ╖▓о оп▓имал╝ное
ме▒▓о дл┐ маги▒▓░али можно най▓и за линейное в░ем┐.
Зада╖и
10-1 Со░▓и░овка i наибол╝╕и╡ ╜лемен▓ов
Дано множе▒▓во из n ╖и▒ел; ▓░еб│е▓▒┐ в╗б░а▓╝ из ни╡ i наибол╝╕и╡ и о▓▒о░▓и░ова▓╝ (пол╝з│┐▒╝ ▓ол╝ко попа░н╗ми ▒░авнени┐ми).
Дл┐ каждого из п░иведенн╗╡ ниже под╡одов ░аз░або▓ай▓е ▒оо▓ве▓▒▓в│╛╣ий алго░и▓м и в╗┐▒ни▓е, как зави▒и▓ о▓ n и i в░ем┐
░або▓╗ ╜▓и╡ алго░и▓мов в ╡│д╕ем ▒л│╖ае.
а. О▓▒о░▓и░ова▓╝ в▒е ╖и▒ла и в╗пи▒а▓╝ i наибол╝╕и╡.
б. Поме▒▓и▓╝ ╖и▒ла в о╖е░ед╝ ▒ п░ио░и▓е▓ами и в╗зва▓╝ i ░аз
п░о╢ед│░│ Extract-Max.
Зада╖и к главе 10
в.
195
Най▓и ▒ помо╣╝╛ алго░и▓ма ░аздела 10.3 i-е по вели╖ине ╖и▒ло
(▒╖и▓а┐ о▓ наибол╝╕его), ░азби▓╝ ма▒▒ив о▓но▒и▓ел╝но него и
о▓▒о░▓и░ова▓╝ i наибол╝╕и╡ ╖и▒ел.
10-2 Взве╕енна┐ медиана
П│▒▓╝ дано n ░азли╖н╗╡ ╖и▒ел x1; : : :; xn , и п│▒▓╝ каждом│ xi
▒опо▒▓авлено положи▓ел╝ное ╖и▒ло (└ве▒┴) wi , п░и╖ем ▒│мма в▒е╡
ве▒ов ░авна 1. Взве╕енной медианой (weighted median) наз╗вае▓▒┐
▓акое ╖и▒ло xk , ╖▓о
X
X
wi 6 12 и
wi 6 12 :
xi <xk
xi >xk
Покажи▓е, ╖▓о е▒ли в▒е ве▒а ░авн╗ 1=n, ▓о взве╕енна┐ медиана
▒овпадае▓ ▒ об╗╖ной.
б. Как най▓и взве╕енн│╛ медиан│ n ╖и▒ел ▒ помо╣╝╛ ▒о░▓и░овки
за в░ем┐ O(n lg n) в ╡│д╕ем ▒л│╖ае?
в. Как моди┤и╢и░ова▓╝ алго░и▓м Select (░аздел 10.3), ╖▓об╗ он
и▒кал взве╕енн│╛ медиан│ за в░ем┐ (n) в ╡│д╕ем ▒л│╖ае?
Зада╖а о в╗бо░е ме▒▓а дл┐ по╖▓╗ (post-oce location problem)
▒о▒▓ои▓ в ▒лед│╛╣ем. Дано n ▓о╖ек p1 ; : : :; pn и n положи▓ел╝н╗╡
ве▒ов w1; : : :; wn; ▓░еб│е▓▒┐ най▓и ▓о╖к│ p (не об┐за▓ел╝но
▒овпадаPn
╛╣│╛ ▒ одной из pi ), дл┐ ко▓о░ой в╗░ажение i=1 wid(p; pi) б│де▓
минимал╝но (╖е░ез d(a; b) обозна╖ае▓▒┐ ░а▒▒▓о┐ние межд│ ▓о╖ками a и b).
д. Покажи▓е, ╖▓о в одноме░ном ▒л│╖ае (▓о╖ки | ве╣е▒▓венн╗е
╖и▒ла, d(a; b) = ja ; bj) взве╕енна┐ медиана б│де▓ ░е╕ением ╜▓ой
зада╖и.
е. Найди▓е оп▓имал╝ное ░е╕ение в дв│ме░ном ▒л│╖ае (▓о╖ки |
па░╗ ве╣е▒▓венн╗╡ ╖и▒ел), е▒ли ░а▒▒▓о┐ние межд│ ▓о╖ками a =
(x1 ; y1) и b = (x2 ; y2) задае▓▒┐ └в L1 -ме▓░ике┴: d(a; b) = jx1 ;
x2j + jy1 ; y2j (аме░икан╢╗ наз╗ва╛▓ ▓ак│╛ ме▓░ик│ Manhattan
distance, по названи╛ ░айона Н╝╛-Йо░ка, ░азби▓ого │ли╢ами на
п░┐мо│гол╝н╗е ква░▓ал╗)
а.
10-3 На╡ождение i-го по вели╖ине ╜лемен▓а п░и мал╗╡ i
П│▒▓╝ T (n) | в░ем┐ ░або▓╗ п░о╢ед│░╗ Select, п░имененной к
ма▒▒ив│ из n ╖и▒ел; в ╡│д╕ем ▒л│╖ае T (n) = (n), но ко╜┤┤и╢иен▓
п░и n, под░аз│меваем╗й в ╜▓ом обозна╖ении, довол╝но велик. Е▒ли
i мало по ▒░авнени╛ ▒ n, ▓о о▓об░а▓╝ i-╗й по вели╖ине ╜лемен▓
можно б╗▒▓░ее.
196
Глава 10 Медиан╗ и по░┐дков╗е ▒▓а▓и▒▓ики
а.
Опи╕и▓е алго░и▓м, ко▓о░╗й на╡оди▓ i-й по вели╖ине ╜лемен▓
в множе▒▓ве из n ╖и▒ел, дела┐ Ui (n) ▒░авнений, п░и╖ем
(
Ui (n) =
б.
в.
г.
T (n)
е▒ли n 6 2i,
n=2 + Ui(bn=2c) + T (2i + 1) ина╖е.
(Указание: ▒делай▓е bn=2c попа░н╗╡ ▒░авнений и о▓бе░и▓е i
наимен╝╕и╡ ▒░еди мен╝╕и╡ ╜лемен▓ов па░.)
Покажи▓е, ╖▓о Ui (n) = n + O(T (2i) log(n=i)).
Покажи▓е, ╖▓о, п░и по▒▓о┐нном i, имеем Ui (n) = n + O(lg n).
[Та же о╢енка пол│╖и▓▒┐, е▒ли по▒▓░ои▓╝ к│╖│ из глав╗ 7, а
за▓ем i ░аз в╗б░а▓╝ из нее минимал╝н╗й ╜лемен▓.]
П│▒▓╝ i = n=k, п░и╖ем k > 2; покажи▓е, ╖▓о Ui (n) = n +
O(T (2n=k) lg k).
Заме╖ани┐
Алго░и▓м дл┐ на╡ождени┐ медиан╗ за линейное в ╡│д╕ем ▒л│╖ае в░ем┐ п░едложили Бл╛м, Флойд, П░а▓▓, Риве▒▓ и Та░╝┐н [29].
Ве░о┐▓но▒▓н╗й алго░и▓м ▒ линейн╗м ▒░едним в░еменем ░або▓╗
п░инадлежи▓ Хоа░│ [97]. Флойд и Риве▒▓ [70] ░аз░або▓али │▒ове░╕ен▒▓вованн│╛ ве░▒и╛ ╜▓ого алго░и▓ма, в ко▓о░ой г░ани╢а ░азбиени┐ оп░едел┐е▓▒┐ по небол╝╕ой ▒л│╖айной в╗бо░ке.
III
С▓░│к▓│░╗ данн╗╡
Введение
В п░ог░амми░овании ╖а▒▓о п░и╡оди▓▒┐ име▓╝ дело ▒ множе▒▓вами, мен┐╛╣ими▒┐ в п░о╢е▒▒е в╗полнени┐ алго░и▓ма. В ▒лед│╛╣и╡ п┐▓и глава╡ м╗ ░а▒▒мо▓░им ▒▓░│к▓│░╗ данн╗╡, п░едназна╖енн╗е дл┐ ╡░анени┐ измен┐╛╣и╡▒┐ (динами╖е▒ки╡, по-англий▒ки
dynamic) множе▒▓в.
Разн╗е алго░и▓м╗ и▒пол╝з│╛▓ ░азн╗е опе░а╢ии. Не░едко, нап░име░, ▓░еб│е▓▒┐ ли╕╝ добавл┐▓╝ и │дал┐▓╝ ╜лемен▓╗ в множе▒▓во, а ▓акже п░ове░┐▓╝, п░инадлежи▓ ли множе▒▓в│ данн╗й ╜лемен▓. С▓░│к▓│░а данн╗╡, подде░жива╛╣а┐ ▓акие опе░а╢ии, наз╗вае▓▒┐ ▒лова░ем (dictionary). В д░│ги╡ ▒и▓│а╢и┐╡ мог│▓ понадоби▓╝▒┐ более ▒ложн╗е опе░а╢ии. Нап░име░, о╖е░еди ▒ п░ио░и▓е▓ами, о ко▓о░╗╡ ╕ла ░е╖╝ в главе 7 в ▒в┐зи ▒ к│╖ами, ░аз░е╕а╛▓
в╗би░а▓╝ и │дал┐▓╝ наимен╝╕ий ╜лемен▓ (помимо добавлени┐ ╜лемен▓ов). Пон┐▓но, ╖▓о в╗бо░ ░еализа╢ии динами╖е▒кого множе▒▓ва зави▒и▓ о▓ ▓ого, какие опе░а╢ии ▒ ним нам по▓░еб│╛▓▒┐.
Элемен▓╗ множе▒▓в
Об╗╖но ╜лемен▓ динами╖е▒кого множе▒▓ва | ╜▓о запи▒╝, ▒оде░жа╣а┐ ░азли╖н╗е пол┐. Ча▒▓о одно из полей ░а▒▒ма▓░ивае▓▒┐
как кл╛╖ (key), п░едназна╖енн╗й дл┐ иден▓и┤ика╢ии ╜лемен▓а, а
о▒▓ал╝н╗е пол┐ | как дополни▓ел╝на┐ ин┤о░ма╢и┐ (satellite data), ╡░ан┐╣а┐▒┐ вме▒▓е ▒ кл╛╖ом. Элемен▓ множе▒▓ва и╣е▓▒┐ по
кл╛╖│; когда ╜лемен▓, м╗ можем п░о╖е▒▓╝ или измени▓╝ дополни▓ел╝н│╛ ин┤о░ма╢и╛, име╛╣│╛▒┐ в ╜▓ом ╜лемен▓е. Во многи╡
▒л│╖а┐╡ в▒е кл╛╖и ░азли╖н╗, и ▓огда множе▒▓во можно ░а▒▒ма▓░ива▓╝ как ┤│нк╢и╛, ко▓о░а┐ ▒ кажд╗м (▒│╣е▒▓в│╛╣им) кл╛╖ом
▒опо▒▓авл┐е▓ неко▓о░│╛ дополни▓ел╝н│╛ ин┤о░ма╢и╛.
Многие ▒по▒об╗ ░еализа╢ии множе▒▓в ▓░еб│╛▓, ╖▓об╗ вме▒▓е ▒
кажд╗м кл╛╖ом ╡░анили▒╝ не ▓ол╝ко дополни▓ел╝н╗е данн╗е, но и
200
Ча▒▓╝ III С▓░│к▓│░╗ данн╗╡
неко▓о░а┐ ▒л│жебна┐ ин┤о░ма╢и┐ (нап░име░, │каза▓ели на д░│гие
╜лемен▓╗ множе▒▓ва)
Ча▒▓о на множе▒▓ве кл╛╖ей имее▓▒┐ е▒▓е▒▓венн╗й линейн╗й
по░┐док (нап░име░, кл╛╖и мог│▓ б╗▓╝ дей▒▓ви▓ел╝н╗ми ╖и▒лами или ▒ловами, на ко▓о░╗╡ е▒▓╝ лек▒иког░а┤и╖е▒кий по░┐док).
В ╜▓ом ▒л│╖ае можно гово░и▓╝, нап░име░, о наимен╝╕ем ╜лемен▓е
множе▒▓ва или об ╜лемен▓е, непо▒░ед▒▓венно ▒лед│╛╣ем за данн╗м.
М╗ п░едполагаем, ╖▓о ╜лемен▓╗ множе▒▓ва ╡░ан┐▓▒┐ в неко▓о░ой об╣ей обла▒▓и пам┐▓и и дл┐ каждого имее▓▒┐ │каза▓ел╝,
ко▓о░╗й позвол┐е▓ пол│╖и▓╝ до▒▓│п к ╜▓ом│ ╜лемен▓│. Об╗╖но в
ка╖е▒▓ве │каза▓ел┐ в╗▒▓│пае▓ п░о▒▓о ад░е▒ в пам┐▓и; е▒ли ┐з╗к
п░ог░амми░овани┐ ╜▓ого не п░ед│▒ма▓░ивае▓, │каза▓елем може▓
б╗▓╝ индек▒ в ма▒▒иве.
Опе░а╢ии над множе▒▓вами
Опе░а╢ии над множе▒▓вами дел┐▓▒┐ на зап░о▒╗ (queries), ко▓о░╗е не мен┐╛▓ множе▒▓ва, и опе░а╢ии, мен┐╛╣ие множе▒▓во (modifying operations). Типи╖н╗е опе░а╢ии ▒ множе▒▓вами ▓аков╗:
Search(S; k) (пои▒к). Зап░о▒, ко▓о░╗й по данном│ множе▒▓в│ S и
кл╛╖│ k возв░а╣ае▓ │каза▓ел╝ на ╜лемен▓ множе▒▓ва S ▒ кл╛╖ом k. Е▒ли ▓акого ╜лемен▓а в множе▒▓ве S не▓, возв░а╣ае▓▒┐ nil.
Insert(S; x) добавл┐е▓ к множе▒▓в│ S ╜лемен▓, на ко▓о░╗й │каз╗вае▓ │каза▓ел╝ x (под░аз│мевае▓▒┐, ╖▓о к ╜▓ом│ момен▓│ в▒е
пол┐ в запи▒и, на ко▓о░│╛ │каз╗вае▓ x, │же заполнен╗).
Delete(S; x) │дал┐е▓ из множе▒▓ва S ╜лемен▓, на ко▓о░╗й │каз╗вае▓ │каза▓ел╝ x (об░а▓и▓е внимание, ╖▓о x | │каза▓ел╝, а не
кл╛╖).
Minimum(S ) в╗дае▓ │каза▓ел╝ на ╜лемен▓ множе▒▓ва S ▒ наимен╝╕им кл╛╖ом (▒╖и▓аем, ╖▓о кл╛╖и линейно │по░┐до╖ен╗).
Maximum(S ) в╗дае▓ │каза▓ел╝ на ╜лемен▓ множе▒▓ва S ▒ наибол╝╕им кл╛╖ом.
Successor(S; x) (▒лед│╛╣ий) возв░а╣ае▓ │каза▓ел╝ на ╜лемен▓
множе▒▓ва S , непо▒░ед▒▓венно ▒лед│╛╣ий за ╜лемен▓ом x (в
▒м╗▒ле линейного по░┐дка на кл╛╖а╡). Е▒ли x | наибол╝╕ий
╜лемен▓, возв░а╣ае▓▒┐ nil.
Predecessor(S; x) (п░ед╗д│╣ий) возв░а╣ае▓ │каза▓ел╝ на ╜лемен▓, непо▒░ед▒▓венно п░ед╕е▒▓в│╛╣ий ╜лемен▓│ x (е▒ли x |
наимен╝╕ий ╜лемен▓, возв░а╣ае▓▒┐ nil).
Зап░о▒╗ Successor и Predecessor ╖а▒▓о и▒пол╝з│╛▓▒┐ и п░и ░або▓е ▒ множе▒▓вами, в ко▓о░╗╡ кл╛╖и ░азли╖н╗╡ ╜лемен▓ов мог│▓
Ча▒▓╝ III С▓░│к▓│░╗ данн╗╡
201
▒овпада▓╝. П░и ╜▓ом ░аз│мна┐ ░еализа╢и┐ га░ан▓и░│е▓, ╖▓о ┤│нк╢ии Successor и Predecessor об░а▓н╗, ╖▓о на╖ав ▒ Minumum(S )
и п░имен┐┐ ┤│нк╢и╛ Successor, м╗ пе░е╖и▒лим в▒е ╜лемен▓╗
множе▒▓ва в не│б╗ва╛╣ем по░┐дке и ▓. п.
С▓оимо▒▓╝ опе░а╢ий над множе▒▓вами об╗╖но о╢енивае▓▒┐ ╖е░ез ░азме░ множе▒▓в, к ко▓о░╗м они п░имен┐╛▓▒┐. Нап░име░, в
главе 14 м╗ опи▒╗ваем ▒▓░│к▓│░│ данн╗╡, ко▓о░а┐ позвол┐е▓ в╗полни▓╝ кажд│╛ из пе░е╖и▒ленн╗╡ опе░а╢ий за в░ем┐ O(lg n), где
n | ╖и▒ло ╜лемен▓ов множе▒▓ва.
Обзо░ ╖а▒▓и III
В глава╡ 11{15 м╗ опи▒╗ваем ░азли╖н╗е ▒▓░│к▓│░╗ данн╗╡,
п░едназна╖енн╗е дл┐ ░або▓╗ ▒ динами╖е▒кими множе▒▓вами. С
помо╣╝╛ ╜▓и╡ ▒▓░│к▓│░ данн╗╡ можно ░аз░або▓а▓╝ ╜┤┤ек▓ивн╗е
алго░и▓м╗ дл┐ ░е╕ени┐ многи╡ ░азли╖н╗╡ зада╖. К▒▓а▓и, ▒ одной важной ▒▓░│к▓│░ой данн╗╡ (к│╖ей) м╗ │же познакомили▒╝ в
главе 7.
В главе 11 м╗ ░азби░аем п░ин╢ип╗ ░або▓╗ ▒ п░о▒▓ей╕ими
▒▓░│к▓│░ами данн╗╡: ▒▓еками, о╖е░ед┐ми, ▒в┐занн╗ми ▒пи▒ками и
ко░нев╗ми де░ев╝┐ми. В ╜▓ой же главе ░а▒▒каз╗вае▓▒┐, как ░еализова▓╝ запи▒и и │каза▓ели ▒ помо╣╝╛ ┐з╗ков п░ог░амми░овани┐,
в ко▓о░╗╡ не▓ ▒оо▓ве▓▒▓в│╛╣и╡ ▓ипов данн╗╡. Бол╝╕а┐ ╖а▒▓╝ ма▓е░иала ╜▓ой глав╗ ▒о▒▓авл┐е▓ ▒▓анда░▓н╗й ма▓е░иал на╖ал╝ного
к│░▒а п░ог░амми░овани┐.
В главе 12 м╗ познакомим▒┐ ▒ ╡е╕-▓абли╢ами, подде░жива╛╣ими опе░а╢ии Insert, Delete и Search. В ╡│д╕ем ▒л│╖ае пои▒к
в ╡е╕-▓абли╢е ▓░еб│е▓ в░емени (n), но ▒░еднее в░ем┐, необ╡одимое дл┐ в╗полнени┐ л╛бой из ▒лова░н╗╡ опе░а╢ий ▒ ╡е╕-▓абли╢ей,
▒о▒▓авл┐е▓ (п░и неко▓о░╗╡ п░едположени┐╡) ли╕╝ O(1). Анализ
╡е╕и░овани┐ и▒пол╝з│е▓ ▓ео░и╛ ве░о┐▓но▒▓ей, но дл┐ понимани┐
бол╝╕ей ╖а▒▓и глав╗ знаком▒▓во ▒ ╜▓ой ▓ео░ией не об┐за▓ел╝но.
В главе 13 м╗ занимаем▒┐ де░ев╝┐ми двои╖ного пои▒ка. Э▓и де░ев╝┐ подде░жива╛▓ в▒е пе░е╖и▒ленн╗е опе░а╢ии ▒ множе▒▓вами.
В ╡│д╕ем ▒л│╖ае ▒▓оимо▒▓╝ каждой из опе░а╢ий е▒▓╝ (n), но дл┐
▒л│╖айно по▒▓░оенного де░ева ма▓ема▓и╖е▒кое ожидание ╜▓ой ▒▓оимо▒▓и е▒▓╝ O(lg n). На базе де░ев╝ев двои╖ного пои▒ка ▒▓░о┐▓▒┐
многие д░│гие ▒▓░│к▓│░╗ данн╗╡.
Глава 14 по▒в┐╣ена к░а▒но-╖е░н╗м де░ев╝┐м. Э▓а ░азновидно▒▓╝
де░ев╝ев двои╖ного пои▒ка га░ан▓и░ованно ░або▓ае▓ б╗▒▓░о: в░ем┐ в╗полнени┐ каждой опе░а╢ии в ╡│д╕ем ▒л│╖ае е▒▓╝ O(lg n).
К░а▒но-╖е░н╗е де░ев╝┐ п░ед▒▓авл┐╛▓ ▒обой один из ва░иан▓ов
└▒балан▒и░ованн╗╡┴ де░ев╝ев пои▒ка; д░│гой ва░иан▓ (Б-де░ев╝┐)
об▒│ждае▓▒┐ в главе 19. Алго░и▓м╗ дл┐ ░або▓╗ ▒ к░а▒но-╖е░н╗ми
де░ев╝┐ми │▒▓░оен╗ довол╝но ╡и▓░о. Хо▓┐ де▓али можно оп│▒▓и▓╝
202
Ча▒▓╝ III С▓░│к▓│░╗ данн╗╡
п░и пе░вом ╖▓ении, ин▓е░е▒но в ни╡ ░азоб░а▓╝▒┐.
В главе 15 м╗ ░а▒▒ма▓░иваем дополни▓ел╝н╗е ▒▓░│к▓│░╗ на
к░а▒но-╖е░н╗╡ де░ев╝┐╡, позвол┐╛╣ие в╗полн┐▓╝ е╣е не▒кол╝ко
опе░а╢ий (по░┐дков╗е ▒▓а▓и▒▓ики, опе░а╢ии ▒ де░ев╝┐ми п░омеж│▓ков).
11
Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
В ╜▓ой главе м╗ ░а▒▒ма▓░иваем не▒кол╝ко п░о▒▓╗╡ ▒▓░│к▓│░ данн╗╡ дл┐ ╡░анени┐ множе▒▓в: ▒▓еки, о╖е░еди, ▒пи▒ки, ко░нев╗е де░ев╝┐. М╗ покажем, как можно ░еализова▓╝ и╡ ▒ помо╣╝╛ │каза▓елей или ма▒▒ивов.
11.1. С▓еки и о╖е░еди
С▓еки и о╖е░еди | ╜▓о динами╖е▒кие множе▒▓ва, в ко▓о░╗╡
╜лемен▓, │дал┐ем╗й из множе▒▓ва опе░а╢ией Delete, не задае▓▒┐
п░оизвол╝но, а оп░едел┐е▓▒┐ ▒▓░│к▓│░ой множе▒▓ва. Именно, из
▒▓ека (stack) можно │дали▓╝ ▓ол╝ко ▓о▓ ╜лемен▓, ко▓о░╗й б╗л в
него добавлен по▒ледним: ▒▓ек ░або▓ае▓ по п░ин╢ип│ └по▒ледним
п░и╕ел | пе░в╗м │╕ел┴ (last-in, rst-out | ▒ок░а╣енно LIFO). Из
о╖е░еди (queue), нап░о▓ив, можно │дали▓╝ ▓ол╝ко ▓о▓ ╜лемен▓, ко▓о░╗й на╡одил▒┐ в о╖е░еди дол╝╕е в▒его: ░або▓ае▓ п░ин╢ип └пе░в╗м п░и╕ел | пе░в╗м │╕ел┴ (rst-in, rst-out, ▒ок░а╣енно FIFO).
С│╣е▒▓в│е▓ не▒кол╝ко ▒по▒обов ╜┤┤ек▓ивно ░еализова▓╝ ▒▓еки и
о╖е░еди. В ╜▓ом ░азделе м╗ ░а▒▒кажем, как ░еализова▓╝ и╡ на базе
ма▒▒ива.
С▓еки
Опе░а╢и┐ добавлени┐ ╜лемен▓а в ▒▓ек ╖а▒▓о обозна╖ае▓▒┐ Push,
а опе░а╢и┐ │далени┐ ве░╡него ╜лемен▓а из ▒▓ека ╖а▒▓о обозна╖ае▓▒┐ Pop (push в данном кон▓ек▒▓е озна╖ае▓ └запи╡ива▓╝┴, а pop |
└в╗нима▓╝┴). С▓ек можно │подоби▓╝ ▒▓опке ▓а░елок, из ко▓о░ой
можно вз┐▓╝ ве░╡н╛╛ и на ко▓о░│╛ можно положи▓╝ нов│╛ ▓а░елк│. [Д░│гое название ▒▓ека в ░│▒▒кой ли▓е░а▓│░е | └магазин┴
| пон┐▓но в▒┐ком│, к▓о ░азби░ал ав▓ома▓ Кала╕никова.]
На ░и▒. 11.1 показано, как можно ░еализова▓╝ ▒▓ек емко▒▓╝╛ не
более n ╜лемен▓ов на базе ма▒▒ива S [1 : :n]. На░┐д│ ▒ ма▒▒ивом м╗
╡░аним ╖и▒ло top[S ], ┐вл┐╛╣ее▒┐ индек▒ом по▒леднего добавленного в ▒▓ек ╜лемен▓а. С▓ек ▒о▒▓ои▓ из ╜лемен▓ов S [1 : : top[S ]], где
204
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
Ри▒. 11.1 Реализа╢и┐ ▒▓ека на базе ма▒▒ива S . Све▓ло-▒е░╗е кле▓ки зан┐▓╗
╜лемен▓ами ▒▓ека. (а) С▓ек S ▒оде░жи▓ 4 ╜лемен▓а, ве░╡ний ╜лемен▓ | ╖и▒ло 9.
(б) То▓ же ▒▓ек по▒ле в╗полнени┐ опе░а╢ий Push(S; 17) и Push(S; 3). (в) С▓ек
по▒ле ▓ого, как опе░а╢и┐ Pop(S ) ве░н│ла зна╖ение 3 (по▒ледний добавленн╗й
в ▒▓ек ╜лемен▓). Хо▓┐ ╖и▒ло 3 по-п░ежнем│ п░и▒│▓▒▓в│е▓ в ма▒▒иве S , в ▒▓еке
его │же не▓; на ве░╕ине ▒▓ека | ╖и▒ло 17.
S [1] | нижний ╜лемен▓ ▒▓ека (└дно┴) а S [top[S ]] | ве░╡ний ╜лемен▓, или ве░╕ина ▒▓ека.
Е▒ли top[S ] = 0, ▓о ▒▓ек п│▒▓ (is empty). Е▒ли top[S ] = n, ▓о п░и
поп╗▓ке добави▓╝ ╜лемен▓ п░ои▒╡оди▓ пе░еполнение (overow), по▒кол╝к│ ░азме░ ▒▓ека в на╕ей ░еализа╢ии ог░ани╖ен ╖и▒лом n.
Симме▓░и╖на┐ ▒и▓│а╢и┐ | поп╗▓ка │дали▓╝ ╜лемен▓ из п│▒▓ого
▒▓ека | по-░│▒▒ки никак не наз╗вае▓▒┐ (└недо-полнение┴?), а поанглий▒ки наз╗вае▓▒┐ underow. В ╜▓ой главе дл┐ п░о▒▓о▓╗ м╗ не
б│дем об░а╣а▓╝ внимание на возможно▒▓╝ пе░еполнени┐ ▒▓ека.
Опе░а╢ии ▒о ▒▓еком (п░ове░ка п│▒▓о▓╗, добавление ╜лемен▓а,
│даление ╜лемен▓а) запи▒╗ва╛▓▒┐ ▓ак:
Stack-Empty(S )
1 if top[S ] = 0
2 then return true
3 else return false
Push(S; x)
1 top[S ] top[S ] + 1
2 S [top[S ]] x
Pop(S )
1 if Stack-Empty(S )
2
3
4
then error \underow"
else top[S ] top[S ] ; 1
return S [top[S ] + 1]
В╗полнение опе░а╢ий Push и Pop показано на ░и▒. 11.1. Кажда┐
из ▓░е╡ опе░а╢ий ▒о ▒▓еком в╗полн┐е▓▒┐ за в░ем┐ O(1).
С▓еки и о╖е░еди
205
О╖е░еди
Опе░а╢и╛ добавлени┐ ╜лемен▓а к о╖е░еди м╗ б│дем обозна╖а▓╝
Enqueue, а опе░а╢и╛ │далени┐ ╜лемен▓а из о╖е░еди б│дем обозна╖а▓╝ Dequeue. (Как и дл┐ ▒▓еков, │дал┐ем╗й из о╖е░еди ╜лемен▓
оп░еделен однозна╖но и по╜▓ом│ ┐вл┐е▓▒┐ не пе░едае▓▒┐ п░о╢ед│░е
п░о╢ед│░е Dequeue, а возв░а╣ае▓▒┐ ╜▓ой п░о╢ед│░ой.) П░авило
зде▒╝ ▓акое же, как в живой о╖е░еди: пе░в╗м п░и╕ел | пе░в╗м
об▒л│жен. (И е▒ли на╕и п░ог░амм╗ п░авил╝н╗, можно не опа▒а▓╝▒┐, ╖▓о к▓о-▓о п░ойде▓ без о╖е░еди.)
Д░│гими ▒ловами, │ о╖е░еди е▒▓╝ голова (head) и ╡во▒▓ (tail).
Элемен▓, добавл┐ем╗й в о╖е░ед╝, оказ╗вае▓▒┐ в ее ╡во▒▓е, как
▓ол╝ко ╖▓о подо╕ед╕ий пок│па▓ел╝; ╜лемен▓, │дал┐ем╗й из о╖е░еди, на╡оди▓▒┐ в ее голове, как ▓о▓ пок│па▓ел╝, ╖▓о о▓▒▓о┐л дол╝╕е
в▒е╡.
На ░и▒. 11.2 показано, как можно ░еализова▓╝ о╖е░ед╝, вме╣а╛╣│╛ не более ╖ем n ; 1 ╜лемен▓, на базе ма▒▒ива Q[1 : :n]. М╗
╡░аним ╖и▒ла head[Q] | индек▒ голов╗ о╖е░еди, и tail[Q] | индек▒ ▒вободной ┐╖ейки, в ко▓о░│╛ б│де▓ поме╣ен ▒лед│╛╣ий добавл┐ем╗й к о╖е░еди ╜лемен▓. О╖е░ед╝ ▒о▒▓ои▓ из ╜лемен▓ов ма▒▒ива, ▒▓о┐╣и╡ на ме▒▓а╡ ▒ номе░ами head[Q], head[Q] + 1, : : : ,
tail[Q] ; 1 (под░аз│мевае▓▒┐, ╖▓о ма▒▒ив ▒ве░н│▓ в кол╝╢о: за n ▒лед│е▓ 1). Е▒ли head[Q] = tail[Q], ▓о о╖е░ед╝ п│▒▓а. Пе░вона╖ал╝но
имеем head[Q] = tail[Q] = 1. Е▒ли о╖е░ед╝ п│▒▓а, поп╗▓ка │дали▓╝
╜лемен▓ из нее веде▓ к о╕ибке (underow); е▒ли head[Q] = tail[Q]+1,
▓о о╖е░ед╝ полно▒▓╝╛ заполнена, и поп╗▓ка добави▓╝ к ней ╜лемен▓ в╗зове▓ пе░еполнение (overow).
В на╕и╡ ░еализа╢и┐╡ п░о╢ед│░ Enqueue и Dequeue м╗ игно░и░│ем возможно▒▓╝ пе░еполнени┐ или поп╗▓ки из║┐▓и┐ ╜лемен▓а
из п│▒▓ой о╖е░еди (в │п░ажнении 11.1-4 м╗ поп░о▒им ва▒ вне▒▓и в
код ▒оо▓ве▓▒▓в│╛╣ие п░ове░ки).
Enqueue(Q; x)
1 Q[tail[Q]] x
2 if tail[Q] = length[Q]
3 then tail[Q] 1
4 else tail[Q] tail[Q] + 1
Dequeue(Q)
1 x Q[head[Q]]
2 if head[Q] = length[Q]
3 then head[Q] 1
4 else head[Q] head[Q] + 1
5 return x
Рабо▓а п░о╢ед│░ Enqueue и Dequeue показана на ░и▒. 11.2.
206
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
О╖е░ед╝, ░еализованна┐ на базе ма▒▒ива Q[1 : : n]. Све▓ло-▒е░╗е кле▓ки зан┐▓╗ ╜лемен▓ами о╖е░еди. (а) В о╖е░еди на╡од┐▓▒┐ 5 ╜лемен▓ов (пози╢ии Q[7 : : 11]). (б) О╖е░ед╝ по▒ле в╗полнени┐ п░о╢ед│░ Enqueue(Q; 17), Enqueue(Q; 3) и Enqueue(Q; 5). (в) О╖е░ед╝ по▒ле в╗полнени┐ п░о╢ед│░╗ Dequeue(Q) (ко▓о░а┐ возв░а╣ае▓ зна╖ение 15). Новой головой о╖е░еди ▒▓ало ╖и▒ло 6.
Ри▒. 11.2
Кажда┐ из ╜▓и╡ п░о╢ед│░ ░або▓ае▓ за в░ем┐ O(1).
Уп░ажнени┐
11.1-1 След│┐ об░аз╢│ ░и▒. 11.1, покажи▓е ░або▓│ опе░а╢ий
Push(S; 4), Push(S; 1), Push(S; 3), Pop(S ), Push(S; 8) и Pop(S ) на
▒▓еке, ░еализованном ▒ помо╣╝╛ ма▒▒ива S [1 : : 6]. Пе░вона╖ал╝но
▒▓ек п│▒▓.
11.1-2 Как на базе одного ма▒▒ива A[1 : :n] ░еализова▓╝ два ▒▓ека
▒│мма░ной длин╗ не бол╝╕е n? Опе░а╢ии Push и Pop должн╗
в╗полн┐▓╝▒┐ за в░ем┐ O(1).
11.1-3
След│┐ об░аз╢│ ░и▒. 11.2, покажи▓е ░або▓│ опе░а╢ий
Enqueue(Q; 4), Enqueue(Q; 1), Enqueue(Q; 3), Dequeue(Q),
Enqueue(Q; 8) и Dequeue(Q) на о╖е░еди, ░еализованной ▒ помо-
╣╝╛ ма▒▒ива Q[1 : : 5]. Пе░вона╖ал╝но о╖е░ед╝ п│▒▓а.
11.1-4 Пе░епи╕и▓е п░о╢ед│░╗ Enqueue и Dequeue, п░ед│▒мо▓░ев п░ове░ки на ▒л│╖ай пе░еполнени┐ или underow.
11.1-5 С▓ек позвол┐е▓ добавл┐▓╝ и │дал┐▓╝ ╜лемен▓╗ ▓ол╝ко ▒
одного кон╢а. В о╖е░ед╝ добавл┐▓╝ ╜лемен▓╗ можно ▓ол╝ко ▒ одного кон╢а, а │дал┐▓╝ | ▓ол╝ко ▒ д░│гого. С▓░│к▓│░а данн╗╡, наз╗ваема┐ деком (deque, о▓ double-ended queue | └о╖е░ед╝ ▒ дв│м┐
Св┐занн╗е ▒пи▒ки
207
кон╢ами┴), позвол┐е▓ добавл┐▓╝ и │дал┐▓╝ ╜лемен▓╗ ▒ обои╡ кон╢ов. Реализ│й▓е дек на базе ма▒▒ива ▓аким об░азом, ╖▓об╗ опе░а╢ии добавлени┐ и │далени┐ ╜лемен▓а ▒ каждого из кон╢ов занимали
в░ем┐ O(1).
11.1-6 Об║┐▒ни▓е, как можно ░еализова▓╝ о╖е░ед╝ на базе дв│╡
▒▓еков. Каково в░ем┐ ░або▓╗ опе░а╢ий Enqueue и Dequeue п░и
▓акой ░еализа╢ии?
11.1-7 Об║┐▒ни▓е, как ░еализова▓╝ ▒▓ек на базе дв│╡ о╖е░едей.
Каково в░ем┐ ░або▓╗ ▒▓еков╗╡ опе░а╢ий?
11.2. Св┐занн╗е ▒пи▒ки
В ▒в┐занном ▒пи▒ке (или п░о▒▓о ▒пи▒ке; по-англий▒ки linked list)
╜лемен▓╗ линейно │по░┐до╖ен╗, но по░┐док оп░едел┐е▓▒┐ не номе░ами, как в ма▒▒иве, а │каза▓ел┐ми, в╡од┐╣ими в ▒о▒▓ав ╜лемен▓ов
▒пи▒ка. Спи▒ки ┐вл┐╛▓▒┐ │добн╗м ▒по▒обом ░еализа╢ии динами╖е▒ки╡ множе▒▓в, позвол┐╛╣им ░еализова▓╝ в▒е опе░а╢ии, пе░е╖и▒ленн╗е во введении к ╜▓ой ╖а▒▓и (╡о▓┐ и не в▒егда ╜┤┤ек▓ивно).
Е▒ли кажд╗й ▒▓о┐╣ий в о╖е░еди запомни▓, к▓о за ним ▒▓ои▓,
по▒ле ╖его в▒е в бе▒по░┐дке ░а▒▒┐д│▓▒┐ на лаво╖ке, пол│╖и▓▒┐ одно▒▓о░онне ▒в┐занн╗й ▒пи▒ок; е▒ли он запомни▓ е╣е и впе░еди ▒▓о┐╣его, б│де▓ дв│▒▓о░онне ▒в┐занн╗й ▒пи▒ок.
Д░│гими ▒ловами, как показано на ░и▒. 11.3, ╜лемен▓ дв│▒▓о░онне ▒в┐занного ▒пи▒ка (doubly linked list) | ╜▓о запи▒╝, ▒оде░жа╣а┐
▓░и пол┐: key (кл╛╖) и два │каза▓ел┐ next (▒лед│╛╣ий) и prev (о▓
previous | п░ед╗д│╣ий). Помимо ╜▓ого, ╜лемен▓╗ ▒пи▒ка мог│▓
▒оде░жа▓╝ дополни▓ел╝н╗е данн╗е. Е▒ли x | ╜лемен▓ ▒пи▒ка, ▓о
next[x] │каз╗вае▓ на ▒лед│╛╣ий ╜лемен▓ ▒пи▒ка, а prev[x] | на
п░ед╕е▒▓в│╛╣ий. Е▒ли prev[x] = nil, ▓о │ ╜лемен▓а x не▓ п░ед╕е▒▓в│╛╣его: ╜▓о голова (head) ▒пи▒ка. Е▒ли next[x] = nil, ▓о x |
по▒ледний ╜лемен▓ ▒пи▒ка или, как гово░┐▓, его ╡во▒▓ (tail).
П░ежде ╖ем двига▓╝▒┐ по │каза▓ел┐м, надо зна▓╝ ╡о▓┐ б╗ один
╜лемен▓ ▒пи▒ка; м╗ п░едполагаем, ╖▓о дл┐ ▒пи▒ка L изве▒▓ен │каза▓ел╝ head[L] на его голов│. Е▒ли head[L] = nil, ▓о ▒пи▒ок п│▒▓.
В ░азли╖н╗╡ ▒и▓│а╢и┐╡ и▒пол╝з│╛▓▒┐ ░азн╗е вид╗ ▒пи▒ков. В
одно▒▓о░онне ▒в┐занном (singly linked) ▒пи▒ке о▓▒│▓▒▓в│╛▓ пол┐ prev. В │по░┐до╖енном (sorted) ▒пи▒ке ╜лемен▓╗ ░а▒положен╗
в по░┐дке воз░а▒▓ани┐ кл╛╖ей, ▓ак ╖▓о │ голов╗ ▒пи▒ка кл╛╖ наимен╝╕ий, а │ ╡во▒▓а ▒пи▒ка | наибол╝╕ий, в о▓ли╖ие о▓ не│по░┐до╖енного (unsorted) ▒пи▒ка. В кол╝╢евом ▒пи▒ке (circular list)
поле prev голов╗ ▒пи▒ка │каз╗вае▓ на ╡во▒▓ ▒пи▒ка, а поле next
╡во▒▓а ▒пи▒ка │каз╗вае▓ на голов│ ▒пи▒ка.
Е▒ли иное не огово░ено о▒обо, под ▒пи▒ком м╗ б│дем понима▓╝
208
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
(а) Дв│▒▓о░онне ▒в┐занн╗й ▒пи▒ок L ▒оде░жи▓ ╖и▒ла 1; 4; 9; 16. Кажд╗й ╜лемен▓ ▒пи▒ка | ╜▓о запи▒╝ ▒ пол┐ми дл┐ кл╛╖а и │каза▓елей на п░ед╗д│╣ий и по▒лед│╛╣ий ╜лемен▓╗ (╜▓и │каза▓ели изоб░ажен╗ ▒▓░елками). В
поле next │ ╡во▒▓а ▒пи▒ка и в поле prev │ голов╗ ▒пи▒ка на╡оди▓▒┐ │каза▓ел╝ nil
(ко▒а┐ ╖е░▓а на ░и▒│нке); head[L] │каз╗вае▓ на голов│ ▒пи▒ка. (б) В ░ез│л╝▓а▓е в╗полнени┐ опе░а╢ии List-Insert(L; x), где key[x] = 25, в ▒пи▒ке по┐вил▒┐
нов╗й ╜лемен▓ ▒ кл╛╖ом 25; он ▒▓ал новой головой ▒пи▒ка, а его поле next
│каз╗вае▓ на б╗в╕│╛ голов│ | ╜лемен▓ ▒ кл╛╖ом 9. (в) В▒лед за ╜▓им б╗ла
в╗полнена опе░а╢и┐ List-Delete(L; x), где x | │каза▓ел╝ на ╜лемен▓ ▒ кл╛╖ом
4.
Ри▒. 11.3
не│по░┐до╖енн╗й дв│▒▓о░онне ▒в┐занн╗й ▒пи▒ок.
Пои▒к в ▒пи▒ке
П░о╢ед│░а List-Search(L; k) на╡оди▓ в ▒пи▒ке L (▒ помо╣╝╛
п░о▒▓ого линейного пои▒ка) пе░в╗й ╜лемен▓, име╛╣ий кл╛╖ k.
То╖нее гово░┐, она возв░а╣ае▓ │каза▓ел╝ на ╜▓о▓ ╜лемен▓, или nil,
е▒ли ╜лемен▓а ▒ ▓аким кл╛╖ом в ▒пи▒ке не▓. Е▒ли, нап░име░, L |
▒пи▒ок ░и▒. 11.3а, ▓о в╗зов List-Search(L; 4) ве░не▓ │каза▓ел╝ на
▓░е▓ий ╜лемен▓ ▒пи▒ка, а в╗зов List-Search(L; 7) ве░не▓ nil.
List-Search(L; k)
1 x head[L]
2 while x 6= nil and key[x] 6= k
3
do x next[x]
4 return x
Пои▒к в ▒пи▒ке из n ╜лемен▓ов ▓░еб│е▓ в ╡│д╕ем ▒л│╖ае (когда
п░и╡оди▓▒┐ п░о▒ма▓░ива▓╝ ве▒╝ ▒пи▒ок) (n) опе░а╢ий.
Добавление ╜лемен▓а в ▒пи▒ок
П░о╢ед│░а List-Insert добавл┐е▓ ╜лемен▓ x к ▒пи▒к│ L, поме╣а┐
его в голов│ ▒пи▒ка (░и▒. 11.3б).
Св┐занн╗е ▒пи▒ки
209
List-Insert(L; x)
1 next[x] head[L]
2 if head[L] 6= nil
3 then prev[head[L]] x
4 head[L] x
5 prev[x] nil
П░о╢ед│░а List-Insert в╗полн┐е▓▒┐ за в░ем┐ O(1) (не зави▒┐╣ее
о▓ длин╗ ▒пи▒ка).
Удаление ╜лемен▓а из ▒пи▒ка
П░о╢ед│░а List-Delete │дал┐е▓ ╜лемен▓ x из ▒пи▒ка L, нап░авл┐┐ │каза▓ели └в об╡од┴ ╜▓ого ╜лемен▓а. П░и ╜▓ом в ка╖е▒▓ве а░г│мен▓а ей пе░едае▓▒┐ │каза▓ел╝ на x. Е▒ли задан кл╛╖ ╜лемен▓а x,
▓о пе░ед │далением надо най▓и его │каза▓ел╝ ▒ помо╣╝╛ п░о╢ед│░╗ List-Search.
List-Delete(L; x)
1 if prev[x] 6= nil
2 then next[prev[x]] next[x]
3 else head[L] next[x]
4 if next[x] 6= nil
5 then prev[next[x]] prev[x]
Удаление ╜лемен▓а из ▒пи▒ка п░оилл╛▒▓░и░овано на ░и▒. 11.3в.
П░о╢ед│░а List-Delete ░або▓ае▓ за в░ем┐ O(1); однако дл┐ │далени┐ ╜лемен▓а ▒ заданн╗м кл╛╖ом его надо ▒на╖ала най▓и, ╖▓о
по▓░еб│е▓ в░емени (n).
Фик▓ивн╗е ╜лемен▓╗
Е▒ли заб╗▓╝ об о▒об╗╡ ▒и▓│а╢и┐╡ на кон╢а╡ ▒пи▒ка, п░о╢ед│░│ List-Delete можно запи▒а▓╝ ▒ов▒ем п░о▒▓о:
List-Delete0 (L; x)
1 next[prev[x]] next[x]
2 prev[next[x]] prev[x]
Такие │п░о╣ени┐ ▒▓ан│▓ законн╗ми, е▒ли добави▓╝ к ▒пи▒к│ L
┤ик▓ивн╗й ╜лемен▓ nil[L], ко▓о░╗й б│де▓ име▓╝ пол┐ next и prev
на░авне ▒ п░о╖ими ╜лемен▓ами ▒пи▒ка. Э▓о▓ ╜лемен▓ (наз╗ваем╗й
sentinel | ╖а▒овой) не позволи▓ нам в╗й▓и за п░едел╗ ▒пи▒ка. Указа▓ел╝ на него иг░ае▓ ░ол╝ зна╖ени┐ nil. Замкнем ▒пи▒ок в кол╝╢о: в пол┐ next[nil[L]] и prev[nil[L]] запи╕ем │каза▓ели на голов│ и
╡во▒▓ ▒пи▒ка ▒оо▓ве▓▒▓венно, а в пол┐ prev │ голов╗ ▒пи▒ка и next
210
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
Спи▒ок L, и▒пол╝з│╛╣ий ┤ик▓ивн╗й ╜лемен▓ nil[L] (▓емно-▒е░╗й
п░┐мо│гол╝ник). Вме▒▓о head[L] и▒пол╝з│ем next[nil[L]]. (а) П│▒▓ой ▒пи▒ок.
(б) Спи▒ок ░и▒. 11.3а (╜лемен▓ ▒ кл╛╖ом 9 | голова, 1 | ╡во▒▓). (в) То▓ же
▒пи▒ок по▒ле п░о╢ед│░╗ List-Insert0 (L; x), е▒ли key[x] = 25. (г) По▒ле │далени┐
╜лемен▓а ▒ кл╛╖ом 1. Нов╗й ╡во▒▓ имее▓ кл╛╖ 4.
Ри▒. 11.4
│ ╡во▒▓а ▒пи▒ка зане▒ем │каза▓ели на nil[L] (░и▒. 11.4). П░и ╜▓ом
next[nil[L]] | │каза▓ел╝ на голов│ ▒пи▒ка, ▓ак ╖▓о а▓░иб│▓ head[L]
▒▓анови▓▒┐ ли╕ним. П│▒▓ой ▒пи▒ок L ▓епе░╝ б│де▓ кол╝╢ом, в ко▓о░ом nil[L] | един▒▓венн╗й ╜лемен▓.
В п░о╢ед│░е List-Search н│жно ли╕╝ замени▓╝ nil на nil[L] и
head[L] на next[nil[L]]:
List-Search0 (L; k)
1 x next[nil[L]]
2 while x 6= nil[L] and key[x] 6= k
3
do x next[x]
4 return x
Дл┐ │далени┐ ╜лемен▓а годи▓▒┐ п░о╢ед│░а List-Delete0 , п░иведенна┐ в╗╕е. Наконе╢, добавл┐▓╝ ╜лемен▓ к ▒пи▒к│ можно ▓ак:
List-Insert0 (L; x)
1 next[x] next[nil[L]]
2 prev[next[nil[L]]] x
3 next[nil[L]] x
4 prev[x] nil[L]
П░име░ ░або▓╗ п░о╢ед│░ List-Insert0 и List-Delete0 показан на
░и▒. 11.4.
И▒пол╝зование ┤ик▓ивн╗╡ ╜лемен▓ов едва ли може▓ │л│╖╕и▓╝
а▒имп▓о▓ик│ в░емени ░або▓╗ алго░и▓ма, но │п░о╣ае▓ п░ог░амм│. Иногда (е▒ли и▒пол╝зование ┤ик▓ивн╗╡ ╜лемен▓ов позвол┐е▓
▒ок░а▓и▓╝ ┤░агмен▓ кода, на╡од┐╣ий▒┐ гл│боко вн│▓░и ╢икла),
можно │▒ко░и▓╝ и▒полнение п░ог░амм╗ в не▒кол╝ко ░аз.
Не ▒лед│е▓ п░имен┐▓╝ ┤ик▓ивн╗е ╜лемен▓╗ без н│жд╗. Е▒ли алго░и▓м и▒пол╝з│е▓ много ко░о▓ки╡ ▒пи▒ков, и▒пол╝зование ┤ик-
Св┐занн╗е ▒пи▒ки
211
▓ивн╗╡ ╜лемен▓ов може▓ обе░н│▓╝▒┐ ▒е░╝езной дополни▓ел╝ной
▓░а▓ой пам┐▓и. В ╜▓ой книге ┤ик▓ивн╗е ╜лемен▓╗ и▒пол╝з│╛▓▒┐
▓ол╝ко ▓огда, когда ╜▓о ▒│╣е▒▓венно │п░о╣ае▓ п░ог░амм│.
Уп░ажнени┐
11.2-1 Можно ли добави▓╝ ╜лемен▓ в множе▒▓во, п░ед▒▓авленное
одно▒▓о░онне ▒в┐занн╗м ▒пи▒ком, за в░ем┐ O(1)? То▓ же воп░о▒
дл┐ │далени┐ ╜лемен▓а.
11.2-2 Реализ│й▓е ▒▓ек на базе одно▒▓о░онне ▒в┐занного ▒пи▒ка.
Опе░а╢ии Push и Pop должн╗ в╗полн┐▓╝▒┐ за в░ем┐ O(1).
11.2-3 Реализ│й▓е о╖е░ед╝ на базе одно▒▓о░онне ▒в┐занного
▒пи▒ка. Опе░а╢ии Enqueue и Dequeue должн╗ в╗полн┐▓╝▒┐ за
в░ем┐ O(1).
11.2-4 Реализ│й▓е ▒лова░н╗е опе░а╢ии Insert, Delete
и Search дл┐ ▒ве░н│▓ого в кол╝╢о одно▒▓о░онне ▒в┐занного
▒пи▒ка. Каково в░ем┐ ░або▓╗ ва╕и╡ п░о╢ед│░?
11.2-5 Опе░а╢и┐ Union (об║единение) пол│╖ае▓ на в╡оде два непе░е▒ека╛╣и╡▒┐ множе▒▓ва и возв░а╣ае▓ и╡ об║единение (▒ами
и▒╡одн╗е множе▒▓ва п░и ╜▓ом п░опада╛▓). Реализ│й▓е ╜▓│ опе░а╢и╛ ▓ак, ╖▓об╗ она ░або▓ала за в░ем┐ O(1), п░ед▒▓авл┐┐ множе▒▓ва ▒пи▒ками под╡од┐╣его ▓ипа.
11.2-6 Напи╕и▓е п░о╢ед│░│, ко▓о░а┐ ▒ливае▓ два одно▒▓о░онне
▒в┐занн╗╡ │по░┐до╖енн╗╡ ▒пи▒ка в один (▓акже │по░┐до╖енн╗й),
не и▒пол╝з│┐ ┤ик▓ивн╗╡ ╜лемен▓ов. За▓ем ▒делай▓е ╜▓о, и▒пол╝з│┐
┤ик▓ивн╗й ╜лемен▓ ▒ кл╛╖ом 1 (добавл┐ем╗й в коне╢ ▒пи▒ков).
Кака┐ из дв│╡ п░ог░амм п░о╣е?
11.2-7 Напи╕и▓е не░ек│░▒ивн│╛ п░о╢ед│░│, ко▓о░а┐ за в░ем┐
(n) пе░е▒▓авл┐е▓ ╜лемен▓╗ одно▒▓о░онне ▒в┐занного ▒пи▒ка в
об░а▓ном по░┐дке. Об║ем дополни▓ел╝ной (помимо необ╡одимой
дл┐ ╡░анени┐ и▒╡одного ▒пи▒ка) пам┐▓и должен б╗▓╝ O(1).
11.2-8? Е▒▓╝ ▒по▒об ▒╜кономи▓╝ ме▒▓о п░и ░еализа╢ии дв│▒▓о░онне ▒в┐занного ▒пи▒ка, ▒жав два │каза▓ел┐ next и prev в одно зна╖ение np[x]. Б│дем ▒╖и▓а▓╝, ╖▓о в▒е │каза▓ели ▒│▓╝ k-би▓н╗е ╖и▒ла и │каза▓ел╛ nil ▒оо▓ве▓▒▓в│е▓ ╖и▒ло н│л╝. Оп░еделим np[x] по
┤о░м│ле np[x] = next[x] XOR prev[x], где XOR | поби▓овое ▒ложение по мод│л╛ 2 (и▒кл╛╖а╛╣ее ИЛИ). Не заб│д╝▓е │каза▓╝, каким
об░азом ╡░ани▓▒┐ ин┤о░ма╢и┐ о голове ▒пи▒ка. Как ░еализова▓╝
опе░а╢ии Search, Insert и Delete? Об║┐▒ни▓е, как пе░е▒▓ави▓╝
▓акой ▒пи▒ок в об░а▓ном по░┐дке за в░ем┐ O(1).
212
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
Спи▒ок ░и▒. 11.3а, п░ед▒▓авленн╗й ▒ помо╣╝╛ ▓░ойки ма▒▒ивов
(key; next; prev). Каждом│ ╜лемен▓│ ▒пи▒ка ▒оо▓ве▓▒▓в│е▓ ▒ве▓ло-▒е░╗й ▒▓олбик.
В ве░╡ней ▒▓░о╖ке в╗пи▒ан╗ по░┐дков╗е номе░а, иг░а╛╣ие ░ол╝ │каза▓елей;
дей▒▓вие │каза▓елей показано ▒▓░елками. Зна╖ение пе░еменной L | │каза▓ел╝
на голов│ ▒пи▒ка.
Ри▒. 11.5
11.3. Реализа╢и┐ │каза▓елей и запи▒ей ▒ не▒кол╝кими пол┐ми
В ┐з╗ка╡ в░оде ┤о░▓░ана не п░ед│▒мо▓░ено ни │каза▓елей, ни
╜лемен▓ов, име╛╣и╡ не▒кол╝ко полей. В ▓аком ▒л│╖ае п░и╡оди▓▒┐
об╡оди▓╝▒┐ ма▒▒ивами, и▒пол╝з│┐ индек▒ в ма▒▒иве как │каза▓ел╝
и замен┐┐ ма▒▒ив запи▒ей не▒кол╝кими ма▒▒ивами.
П░ед▒▓авление ▒ помо╣╝╛ не▒кол╝ки╡ ма▒▒ивов
Ма▒▒ив, ▒о▒▓авленн╗й из запи▒ей, можно замени▓╝ не▒кол╝кими ма▒▒ивами (по одном│ на каждое поле запи▒и). Нап░име░, на
░и▒. 11.5 показано, как п░ед▒▓ави▓╝ в виде ▓░е╡ ма▒▒ивов ▓о▓ же
▒пи▒ок, ╖▓о и на ░и▒. 11.3а: в ма▒▒иве key ╡░ан┐▓▒┐ кл╛╖и, а в
ма▒▒ива╡ next и prev | │каза▓ели. Каждом│ ╜лемен▓│ ▒пи▒ка ▒оо▓ве▓▒▓в│е▓ ▓░ойка (key[x]; next[x]; prev[x]) дл┐ неко▓о░ого индек▒а x. Рол╝ │каза▓ел┐ на ╜▓о▓ ╜лемен▓ иг░ае▓ ╖и▒ло x. В ка╖е▒▓ве
nil можно и▒пол╝зова▓╝ ╖и▒ло, не ┐вл┐╛╣ее▒┐ индек▒ом никакого
╜лемен▓а ма▒▒ивов (нап░име░, 0 или ;1). На ░и▒. 11.3а запи▒╝ ▒
кл╛╖ом 4 ▒▓ои▓ в ▒пи▒ке ▒░аз│ по▒ле запи▒и ▒ кл╛╖ом 16; и дей▒▓ви▓ел╝но, ╖и▒ло 16 ▒▓ои▓ в ма▒▒иве key на ме▒▓е ▒ номе░ом 5,
╖и▒ло 4 | на ме▒▓е номе░ 2, и имеем next[5] = 2, а ▓акже prev[2] = 5.
В на╕и╡ п░ог░амма╡ обозна╖ение ▓ипа key[x] може▓ понима▓╝▒┐
дво┐ко: и как ╜лемен▓ ма▒▒ива key ▒ индек▒ом x, и как поле key
запи▒и ▒ ад░е▒ом x (в зави▒имо▒▓и о▓ возможно▒▓ей ┐з╗ка п░ог░амми░овани┐ полезно ▓о или д░│гое понимание).
П░ед▒▓авление ▒ помо╣╝╛ одного ма▒▒ива
Вме▒▓о не▒кол╝ки╡ ма▒▒ивов можно и▒пол╝зова▓╝ один, ░азме╣а┐ в нем ░азли╖н╗е пол┐ одного об║ек▓а ░┐дом. Так об╗╖но по▒▓│пае▓ компил┐▓о░: е▒ли в п░ог░амме и▒пол╝з│е▓▒┐ ма▒▒ив ╜ле-
Реализа╢и┐ │каза▓елей и запи▒ей ▒ не▒кол╝кими пол┐ми
213
Ри▒. 11.6 То▓ же ▒пи▒ок, ╖▓о на ░и▒. 11.3а и 11.5, ░еализованн╗й на базе един▒▓венного ма▒▒ива A. Каждой запи▒и ▒оо▓ве▓▒▓в│е▓ ▓░ойка ид│╣и╡ под░┐д
╜лемен▓ов ма▒▒ива. Пол┐м key, next и prev ▒оо▓ве▓▒▓в│╛▓ ▒двиги 0, 1 и 2. Указа▓ел╝ на запи▒╝ | индек▒ пе░вого из о▓веденн╗╡ дл┐ нее ╜лемен▓ов. Све▓ло▒е░╗е запи▒и в╡од┐▓ в ▒пи▒ок; ▒▓░елками изоб░ажено дей▒▓вие │каза▓елей.
мен▓ов, кажд╗й из ко▓о░╗╡ имее▓ не▒кол╝ко полей, ▓о на кажд╗й
╜лемен▓ о▓води▓▒┐ неп░е░╗вн╗й │╖а▒▓ок пам┐▓и, в ко▓о░ом д░│г
за д░│гом ░азме╣а╛▓▒┐ зна╖ени┐ полей. Указа▓елем на ╜лемен▓
об╗╖но ▒╖и▓а╛▓ ад░е▒ пе░вой ┐╖ейки ╜▓ого │╖а▒▓ка; ад░е▒а полей
пол│╖а╛▓▒┐ ▒двигом на оп░еделенн╗е кон▒▓ан▓╗.
П░и ░еализа╢ии запи▒ей на базе ма▒▒ива можно во▒пол╝зова▓╝▒┐
▓ой же ▒▓░а▓егией. Ра▒▒мо▓░им один-един▒▓венн╗й ма▒▒ив A. Кажда┐ запи▒╝ б│де▓ занима▓╝ в нем неп░е░╗вн╗й │╖а▒▓ок A[j : :k].
Указа▓ел╝ на запи▒╝ | ╜▓о индек▒ j ; каждом│ пол╛ запи▒и ▒оо▓ве▓▒▓в│е▓ ╖и▒ло из ин▓е░вала [0 : :k ; j ] | ▒двиг. Нап░име░, п░и
п░ед▒▓авлении в▒е ▓ого же ▒пи▒ка, ╖▓о и на ░и▒. 11.3а и 11.5, можно
░е╕и▓╝, ╖▓о пол┐м key, next и prev ▒оо▓ве▓▒▓в│╛▓ ▒двиги 0, 1 и 2.
Тогда зна╖ение prev[i], где i | │каза▓ел╝ (= индек▒ в ма▒▒иве A),
е▒▓╝ не ╖▓о иное, как A[i + 2] (▒м. ░и▒. 11.6).
Такое п░ед▒▓авление позвол┐е▓ ╡░ани▓╝ в одном ма▒▒иве запи▒и ░азн╗╡ ▓ипов (о▓вод┐ под ни╡ │╖а▒▓ки ░азной длин╗), но дл┐
на╕и╡ ╢елей б│де▓ до▒▓а▓о╖но п░ед▒▓авлени┐ в виде не▒кол╝ки╡
ма▒▒ивов, по▒кол╝к│ бол╝╕ин▒▓во ▒▓░│к▓│░ данн╗╡, ▒ ко▓о░╗ми
м╗ б│дем име▓╝ дело, ▒о▒▓о┐▓ из одно▓ипн╗╡ запи▒ей.
В╗деление и о▒вобождение пам┐▓и
П░и добавлении нового ╜лемен▓а в ▒пи▒ок надо о▓ве▒▓и под него
ме▒▓о в пам┐▓и. С▓ало б╗▓╝, необ╡одимо ве▒▓и │╖е▓ и▒пол╝зовани┐
ад░е▒ов. В неко▓о░╗╡ ▒и▒▓ема╡ ╜▓им ведае▓ ▒пе╢иал╝на┐ подп░ог░амма | ▒бо░╣ик м│▒о░а (garbage collector), ко▓о░а┐ оп░едел┐е▓,
какие │╖а▒▓ки пам┐▓и более не и▒пол╝з│╛▓▒┐, и возв░а╣ае▓ и╡ дл┐
пов▓о░ного и▒пол╝зовани┐. Во многи╡ ▒л│╖а┐╡, однако, можно возложи▓╝ об┐занно▒▓и по в╗делени╛ и о▒вобождени╛ пам┐▓и на ▒ам│
▒▓░│к▓│░│ данн╗╡. В ╜▓ом ░азделе м╗ покажем, как ╜▓о делае▓▒┐; в ка╖е▒▓ве п░име░а ░а▒▒мо▓░им дв│▒▓о░онне ▒в┐занн╗й ▒пи▒ок,
п░ед▒▓авленн╗й ▒ помо╣╝╛ не▒кол╝ки╡ ма▒▒ивов.
П│▒▓╝ ма▒▒ив╗, ▒ помо╣╝╛ ко▓о░╗╡ м╗ п░ед▒▓авл┐ем на╕ ▒пи-
214
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
Рабо▓а п░о╢ед│░ Allocate-Object и Free-Object. (а) То▓ же ▒пи▒ок, ╖▓о на ░и▒. 11.5 (▒ве▓ло-▒е░╗й) и ▒пи▒ок ▒вободн╗╡ пози╢ий (▓емно-▒е░╗й).
С▓░│к▓│░а ▒пи▒ка ▒вободн╗╡ пози╢ий изоб░ажена ▒ помо╣╝╛ ▒▓░елок. (б) Во▓
╖▓о пол│╖и▓▒┐ по▒ле в╗зова Allocate-Object() (возв░а╣ае▓ зна╖ение 4), п░и▒ваивани┐ key[4] 25 и в╗зова List-Insert(L; 4). Нов╗й ▒пи▒ок ▒вободн╗╡
пози╢ий на╖инае▓▒┐ ▒ 8 (▓аково б╗ло зна╖ение next[4]). (в) Тепе░╝ м╗ в╗звали List-Delete(L; 5), а за▓ем Free-Object(5). Пози╢и┐ 5 | голова нового
▒пи▒ка ▒вободн╗╡ пози╢ий, за ней ▒лед│е▓ 8.
Ри▒. 11.7
▒ок, име╛▓ длин│ m, и п│▒▓╝ в данн╗й момен▓ в ▒пи▒ке ▒оде░жи▓▒┐
n 6 m ╜лемен▓ов. О▒▓ал╝н╗е n ; m ме▒▓ (пози╢ий) в ма▒▒иве ▒вободн╗ (free).
М╗ б│дем ╡░ани▓╝ ▒вободн╗е пози╢ии в одно▒▓о░онне ▒в┐занном
▒пи▒ке, наз╗ваемом ▒пи▒ком ▒вободн╗╡ пози╢ий (free list). Э▓о▓
▒пи▒ок и▒пол╝з│е▓ ▓ол╝ко ма▒▒ив next: именно, next[i] ▒оде░жи▓ индек▒ ▒вободной пози╢ии, ▒лед│╛╣ей за ▒вободной пози╢ией i. Голова ▒пи▒ка ╡░ани▓▒┐ в пе░еменной free. Спи▒ок ▒вободн╗╡ пози╢ий
╡░ани▓▒┐ впе░емежк│ ▒о ▒пи▒ком L (░и▒. 11.7). Об░а▓и▓е внимание, ╖▓о каждом│ ╖и▒л│ из о▓░езка [1; m] о▓ве╖ае▓ ╜лемен▓ либо
▒пи▒ка L, либо ▒пи▒ка ▒вободн╗╡ ме▒▓.
Спи▒ок ▒вободн╗╡ пози╢ий веде▓ ▒еб┐ как ▒▓ек: из в▒е╡ ▒вободн╗╡ │╖а▒▓ков пам┐▓и под нов│╛ запи▒╝ в╗дел┐е▓▒┐ ▓о▓, ко▓о░╗й
б╗л о▒вобожден по▒ледним. По╜▓ом│ дл┐ в╗делени┐ и о▒вобождени┐ пам┐▓и можно во▒пол╝зова▓╝▒┐ ░еализа╢ией ▒▓еков╗╡ опе░а╢ий Push и Pop на базе ▒пи▒ка. В п░иводим╗╡ ниже п░о╢ед│░а╡ Allocate-Object (в╗дели▓╝ ме▒▓о) и Free-Object (о▒вободи▓╝ ме▒▓о) под░аз│мевае▓▒┐, ╖▓о в глобал╝ной пе░еменной free
запи▒ан индек▒ пе░вой (в ▒пи▒ке) ▒вободной пози╢ии.
Реализа╢и┐ │каза▓елей и запи▒ей ▒ не▒кол╝кими пол┐ми
215
Спи▒ки L1 (▒ве▓ло-▒е░╗й) и L2 (▓емно-▒е░╗й), а ▓акже ▒пи▒ок ▒вободн╗╡ ме▒▓ (╖е░н╗й) ╡░ан┐▓▒┐ в одной ▓░ойке ма▒▒ивов.
Ри▒. 11.8
Allocate-Object ()
1 if free = nil
2
3
4
5
then error └Свободного ме▒▓а не▓┴
else x free
free next[x]
return x
Free-Object (x)
1 next[x] free
2 free x
Пе░вона╖ал╝но ▒пи▒ок ▒вободн╗╡ пози╢ий ▒оде░жи▓ n ╜лемен▓ов. Е▒ли ▒вободного ме▒▓а не о▒▓ало▒╝, п░о╢ед│░а AllocateObject ▒ооб╣ае▓ об о╕ибке.
Ча▒▓о один ▒пи▒ок ▒вободн╗╡ пози╢ий об▒л│живае▓ ▒░аз│ не▒кол╝ко динами╖е▒ки╡ множе▒▓в (░и▒. 11.8).
Опи▒анн╗е п░о╢ед│░╗ в╗делени┐ и о▒вобождени┐ пам┐▓и п░о▒▓╗ и │добн╗ (░або▓а╛▓ за в░ем┐ O(1)). И╡ можно п░и▒по▒оби▓╝
дл┐ ╡░анени┐ одно▓ипн╗╡ запи▒ей л╛бого вида, о▓вед┐ одно из полей запи▒и под ╡░анение индек▒а next (в ▒вободн╗╡ пози╢и┐╡).
Уп░ажнени┐
11.3-1 След│┐ об░аз╢│ ░и▒. 11.5, изоб░ази▓е п░ед▒▓авление по▒ледова▓ел╝но▒▓и h13; 4; 8; 19; 5; 11i в виде дв│▒▓о░онне ▒в┐занного ▒пи▒ка, ░еализованного ▒ помо╣╝╛ ▓░е╡ ма▒▒ивов; по об░аз╢│
░и▒. 11.6 изоб░ази▓е ▓о▓ же ▒пи▒ок, ░еализованн╗й ▒ помо╣╝╛ одного ма▒▒ива.
11.3-2 Напи╕и▓е п░о╢ед│░╗ Allocate-Object и Free-Object
дл┐ ▒л│╖а┐ одно▓ипн╗╡ запи▒ей, ╡░ан┐╣и╡▒┐ в одном ма▒▒иве.
11.3-3 По╖ем│ в п░о╢ед│░а╡ Allocate-Object и Free-Object
никак не ┤иг│░и░│е▓ поле prev?
11.3-4 Ча▒▓о (нап░име░, п░и ▒▓░ани╖ной о░ганиза╢ии ви░▓│ал╝ной пам┐▓и) б╗вае▓ полезно ╡░ани▓╝ ╜лемен▓╗ ▒пи▒ка в неп░е░╗в-
216
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
ном │╖а▒▓ке пам┐▓и. Ра▒▒мо▓░им ░еализа╢и╛ ▒пи▒ка ▒ пом??╣╝╛
не▒кол╝ки╡ ма▒▒ивов. Пе░епи╕и▓е п░о╢ед│░╗ Allocate-Object
и Free-Object ▓аким об░азом, ╖▓об╗ ╜лемен▓╗ ▒пи▒ка занимали
пози╢ии 1 : :m, где m | ╖и▒ло ╜лемен▓ов ▒пи▒ка. (Указание: во▒пол╝з│й▓е▒╝ ░еализа╢ией ▒▓ека на базе ма▒▒ива.)
11.3-5 П│▒▓╝ дв│▒▓о░онне ▒в┐занн╗й ▒пи▒ок L длин╗ m п░ед▒▓авлен ▒ помо╣╝╛ ▓░е╡ ма▒▒ивов key, prev и next длин╗ n, а п░о╢ед│░╗ в╗делени┐ и о▒вобождени┐ ме▒▓а подде░жива╛▓ дв│▒▓о░онне
▒в┐занн╗й ▒пи▒ок ▒вободн╗╡ пози╢ий.
Напи╕и▓е п░о╢ед│░│ Compactify-List (▒жа▓ие ▒пи▒ка), ко▓о░а┐ пе░епи▒╗вае▓ ▒пи▒ок L длин╗ m в пе░в╗е m пози╢ий ма▒▒ивов, ▒о╡░ан┐┐ его ▒▓░│к▓│░│ (и измен┐┐ ▒пи▒ок ▒вободн╗╡ пози╢ий
н│жн╗м об░азом). В░ем┐ ░або▓╗ алго░и▓ма должно б╗▓╝ (m),
░азме░ и▒пол╝з│емой пам┐▓и (▒ве░╡ зан┐▓ой ма▒▒ивами) должен
б╗▓╝ O(1). Не заб│д╝▓е доказа▓╝ п░авил╝но▒▓╝ ▒воего алго░и▓ма.
11.4. П░ед▒▓авление ко░нев╗╡ де░ев╝ев
Опи▒анн╗е в п░ед╗д│╣ем ░азделе ▒по▒об╗ п░ед▒▓авлени┐ ▒пи▒ков п░именим╗ и к д░│гим ▒▓░│к▓│░ам данн╗╡, ▒о▒▓авленн╗м из
одно▓ипн╗╡ ╜лемен▓ов. В ╜▓ом ░азделе м╗ на│╖им▒┐ и▒пол╝зова▓╝
│каза▓ели дл┐ п░ед▒▓авлени┐ де░ев╝ев. На╖нем м╗ ▒ двои╖н╗╡ де░ев╝ев, а за▓ем об║┐▒ним, как п░ед▒▓авл┐▓╝ де░ев╝┐ ▒ п░оизвол╝н╗м ве▓влением.
Кажда┐ ве░╕ина де░ева б│де▓ запи▒╝╛ ▒ не▒кол╝кими пол┐ми.
Одно из ╜▓и╡ полей ▒оде░жи▓ кл╛╖, как и в ▒л│╖ае ▒о ▒пи▒ками. О▒▓ал╝н╗е пол┐ п░едназна╖ен╗ дл┐ ╡░анени┐ дополни▓ел╝н╗╡
данн╗╡ и, главное, │каза▓елей на д░│гие ве░╕ин╗. Как конк░е▓но
│▒▓░оен╗ ╜▓и пол┐, зави▒и▓ о▓ ▓ипа де░ева.
Двои╖н╗е де░ев╝┐
Как показано на ░и▒. 11.9, п░и п░ед▒▓авлении двои╖ного де░ева T м╗ и▒пол╝з│ем пол┐ p, left и right, в ко▓о░╗╡ ╡░ан┐▓▒┐ │каза▓ели на ░оди▓ел┐, левого и п░авого ░ебенка ве░╕ин╗ x ▒оо▓ве▓▒▓венно. Е▒ли p[x] = nil, ▓о x | ко░ен╝; е▒ли │ x не▓ левого или
п░авого ░ебенка, ▓о left[x] или right[x] е▒▓╝ nil. С де░евом T ▒в┐зан
а▓░иб│▓ root[T ] | │каза▓ел╝ на его ко░ен╝. Е▒ли root[T ] = nil, ▓о
де░ево T п│▒▓о.
П░ед▒▓авление ко░нев╗╡ де░ев╝ев
217
П░ед▒▓авление двои╖ного де░ева T . Кажда┐ ве░╕ина x вкл╛╖ае▓
пол┐ p[x] (▒ве░╡│), left[x] (вниз│ ▒лева) и right[x] (вниз│ ▒п░ава). Кл╛╖и на ▒╡еме
не показан╗.
Ри▒. 11.9
Ко░нев╗е де░ев╝┐ ▒ п░оизвол╝н╗м ве▓влением
Е▒ли изве▒▓но, ╖▓о ╖и▒ло де▓ей каждой ве░╕ин╗ ог░ани╖ено
▒ве░╡│ кон▒▓ан▓ой k, ▓о ▓акое де░ево можно ░еализова▓╝ аналоги╖но двои╖ном│ де░ев│, поме╣а┐ │каза▓ели на де▓ей в пол┐
child1 ; child2; : : :; childk , замен┐╛╣ие пол┐ left и right. Е▒ли коли╖е▒▓во де▓ей може▓ б╗▓╝ л╛б╗м, ▓ак дела▓╝ нел╝з┐: за░анее неизве▒▓но, ▒кол╝ко полей (или ма▒▒ивов | п░и п░ед▒▓авлении ▒ помо╣╝╛ не▒кол╝ки╡ ма▒▒ивов) надо в╗дели▓╝.
П░облема може▓ возникн│▓╝ и в ▓ом ▒л│╖ае, е▒ли коли╖е▒▓во
де▓ей ог░ани╖ено за░анее изве▒▓н╗м ╖и▒лом k, но │ бол╝╕ин▒▓ва
ве░╕ин ╖и▒ло де▓ей много мен╝╕е k: опи▒анна┐ ░еализа╢и┐ ▓░а▓и▓
много пам┐▓и з░┐.
Как же б╗▓╝? Заме▓им, ╖▓о л╛бое де░ево можно п░еоб░азова▓╝
в двои╖ное. П░и ╜▓ом │ каждой ве░╕ин╗ б│де▓ не более дв│╡ де▓ей:
лев╗й ░ебенок о▒▓ане▓▒┐ ▓ем же, но п░ав╗м ░ебенком ▒▓ане▓ ве░╕ина, ко▓о░а┐ б╗ла п░ав╗м ▒о▒едом (непо▒░ед▒▓венно ▒лед│╛╣им
░ебенком ▓ого же ░оди▓ел┐). Тепе░╝ ╜▓о двои╖ное де░ево можно
╡░ани▓╝ опи▒анн╗м в╗╕е ▒по▒обом.
Опи╕ем ▒╡ем│ ╡░анени┐ де░ев╝ев ▒ п░оизвол╝н╗м ве▓влением,
о▒нованн│╛ на ╜▓ой идее, более под░обно. Она наз╗вае▓▒┐ └лев╗й
░ебенок | п░ав╗й ▒о▒ед┴ (left-child, right-sibling representation) и
показана на ░и▒. 11.10. По-п░ежнем│ в каждой ве░╕ине ╡░ани▓▒┐ │каза▓ел╝ p на ░оди▓ел┐ и а▓░иб│▓ root[T ] ┐вл┐е▓▒┐ │каза▓елем
на ко░ен╝ де░ева. К░оме p, в каждой ве░╕ине ╡░ан┐▓▒┐ е╣е два
│каза▓ел┐:
1. left-child[x] │каз╗вае▓ на ▒амого левого ░ебенка ве░╕ин╗ x;
218
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
П░ед▒▓авление де░ева T по ▒╡еме └лев╗й ░ебенок | п░ав╗й ▒о▒ед┴.
В каждой запи▒и x п░и▒│▓▒▓в│╛▓ пол┐ p[x] (▒ве░╡│), left-child[x] (вниз│ ▒лева)
и right-sibling[x] (вниз│ ▒п░ава). Кл╛╖и не показан╗.
Ри▒. 11.10
2. right-sibling[x] │каз╗вае▓ на ближай╕его ▒п░ава ▒о▒еда ве░╕ин╗ x (└▒лед│╛╣его по ▒▓а░╕ин▒▓в│ б░а▓а┴)
Ве░╕ина x не имее▓ де▓ей ▓огда и ▓ол╝ко ▓огда, когда left-child[x] = nil. Е▒ли ве░╕ина x | к░айний п░ав╗й ░ебенок
▒воего ░оди▓ел┐, ▓о right-sibling[x] = nil.
Д░│гие ▒по▒об╗ п░ед▒▓авлени┐ де░ев╝ев
Иногда в▒▓░е╖а╛▓▒┐ д░│гие ▒по▒об╗ п░ед▒▓авлени┐ де░ев╝ев.
Нап░име░, в главе 7 п░и ░еализа╢ии к│╖и не надо б╗ло ╡░ани▓╝
│каза▓елей на ░оди▓ел┐ и де▓ей, по▒кол╝к│ и╡ номе░а пол│╖али▒╝
│множением и делением на 2. В главе 22 нам в▒▓░е▓┐▓▒┐ де░ев╝┐,
по ко▓о░╗м двига╛▓▒┐ о▓ ли▒▓╝ев к ко░н╛ (и по▓ом│ │каза▓ели
на де▓ей или ▒о▒едей не н│жн╗). Конк░е▓н╗й в╗бо░ п░ед▒▓авлени┐ де░ева оп░едел┐е▓▒┐ ▒пе╢и┤икой зада╖и.
Уп░ажнени┐
11.4-1 На░и▒│й▓е двои╖ное де░ево, п░ед▒▓авленное ▒лед│╛╣им
об░азом:
Зада╖и к главе 11
219
индек▒ key left right
1
12 7
3
2
15 8 nil
3
4 10 nil
4
10 5
9
5
2 nil nil
6
18 1
4
7
7 nil nil
8
14 6
2
9
21 nil nil
10
5 nil nil
Ко░ен╝ де░ева | в ве░╕ине ▒ индек▒ом 6.
11.4-2 Напи╕и▓е ░або▓а╛╣│╛ за линейное в░ем┐ ░ек│░▒ивн│╛
п░о╢ед│░│, ко▓о░а┐ пе╖а▓ае▓ кл╛╖и в▒е╡ ве░╕ин данного двои╖ного де░ева.
11.4-3 Как ▒дела▓╝ ▓о же ▒амое (╖▓о и в п░ед╗д│╣ем │п░ажнении), и▒пол╝з│┐ не░ек│░▒ивн│╛ п░о╢ед│░│? (П░и │▒▓░анении ░ек│░▒ии полезен ▒▓ек.)
11.4-4 Напи╕и▓е ░або▓а╛╣│╛ за линейное в░ем┐ п░о╢ед│░│, пе╖а▓а╛╣│╛ кл╛╖и в▒е╡ ве░╕ин де░ева, п░ед▒▓авленного по ▒╡еме
└лев╗й ░ебенок | п░ав╗й ▒о▒ед┴.
11.4-5? Напи╕и▓е ░або▓а╛╣│╛ за линейное в░ем┐ не░ек│░▒ивн│╛
п░о╢ед│░│, пе╖а▓а╛╣│╛ кл╛╖и в▒е╡ ве░╕ин двои╖ного де░ева, дл┐
ко▓о░ой об║ем и▒пол╝з│емой пам┐▓и (▒ве░╡ пам┐▓и, в ко▓о░ой ╡░ани▓▒┐ де░ево) е▒▓╝ O(1), и во в░ем┐ ░або▓╗ п░о╢ед│░╗ де░ево не
мен┐е▓▒┐ (даже в░еменно).
11.4-6? П░ид│май▓е ▒по▒об ╡░анени┐ де░ева ▒ п░оизвол╝н╗м ве▓влением, п░и ко▓о░ом в каждой ве░╕ине ╡░ан┐▓▒┐ в▒его два (а не
▓░и, как в ▒╡еме └лев╗й ░ебенок | п░ав╗й ▒о▒ед┴) │каза▓ел┐ пл╛▒
одна б│лева пе░еменна┐.
Зада╖и
11-1 С░авнение ░азн╗╡ ▓ипов ▒пи▒ков
Найди▓е а▒имп▓о▓ик│ в░емени ░або▓╗ (в ╡│д╕ем ▒л│╖ае) дл┐ каждой из пе░е╖и▒ленн╗╡ в на╖але ╖а▒▓и III (▒. 194) опе░а╢ий, п░имененной к каждом│ из │казанн╗╡ ▓ипов ▒пи▒ков.
220
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
Search(L; k)
Insert(L; x)
Delete(L; x)
Successor(L; x)
Predecessor (L; x)
Minimum(L)
Maximum(L)
не│по░┐до╖енн╗й,
│по░┐до╖енн╗й, не│по░┐до╖енн╗й,│по░┐до╖ен
одно▒▓о░онне одно▒▓о░онне дв│▒▓о░онне дв│▒▓о░онн
▒в┐занн╗й
▒в┐занн╗й
▒в┐занн╗й
▒в┐занн╗й
11-2 Реализа╢и┐ ▒ливаем╗╡ к│╖ на базе ▒пи▒ков
С▓░│к▓│░а данн╗╡ под названием ▒ливаем╗е к│╖и (mergeable
heaps) ╡░ани▓ набо░ динами╖е▒ки╡ множе▒▓в (к│╖), и подде░живае▓ ▒лед│╛╣ие опе░а╢ии: Make-Heap (▒оздание п│▒▓ой к│╖и),
Insert, Minimum, Extract-Min и, наконе╢, Union (об║единение
дв│╡ к│╖ в одн│; две ▒▓а░╗е к│╖и п░опада╛▓). Дл┐ каждого из
пе░е╖и▒ленн╗╡ ниже ▒л│╖аев ░еализ│й▓е (по возможно▒▓и ╜┤┤ек▓ивно) ▒ливаем╗е к│╖и на базе ▒пи▒ков. О╢ени▓е в░ем┐ ░або▓╗
опе░а╢ий ╖е░ез ░азме░╗ │╖а▒▓в│╛╣и╡ множе▒▓в.
а. Спи▒ки │по░┐до╖ен╗.
б. Спи▒ки не│по░┐до╖ен╗.
в. Спи▒ки не│по░┐до╖ен╗, об║един┐ем╗е множе▒▓ва не пе░е▒ека╛▓▒┐ д░│г ▒ д░│гом.
11-3 Пои▒к в о▓▒о░▓и░ованном ▒жа▓ом ▒пи▒ке
В │п░ажнении 11.3-4 ▓░ебовало▒╝ ╡░ани▓╝ ▒пи▒ки └компак▓но┴:
n-╜лемен▓н╗й ▒пи▒ок должен б╗л занима▓╝ пе░в╗е n пози╢ий ма▒▒ива. П░едположим е╣е, ╖▓о в▒е кл╛╖и ░азли╖н╗ и ╖▓о ▒пи▒ок │по░┐до╖ен (ин╗ми ▒ловами, key[i] < key[next[i]] п░и next[i] 6= nil).
Оказ╗вае▓▒┐, ╖▓о в ╜▓и╡ п░едположени┐╡ ▒лед│╛╣ий ве░о┐▓но▒▓н╗й алго░и▓м в╗полн┐е▓ пои▒к в ▒пи▒ке за в░ем┐ o(n):
Compact-List-Search(L; k)
1 i head[L]
2 n length[L]
3 while i 6= nil and key[i] 6 k
4
do j Random(1; n)
5
if key[i] < key[j ] and key[j ] < k
6
then i j
7
i next[i]
8
if key[i] = k
9
then return i
10 return nil
Заме╖ани┐ к главе 11
221
Без ▒▓░ок 4{6 ╜▓о б╗л б╗ об╗╖н╗й алго░и▓м ▒ по▒ледова▓ел╝н╗м
пе░ебо░ом ╜лемен▓ов ▒пи▒ка. В ▒▓░ока╡ 4{6 м╗ п╗▓аем▒┐ пе░е▒ко╖и▓╝ на ▒л│╖айно в╗б░анн│╛ пози╢и╛ j . Е▒ли key[i] < key[j ] < k,
▓о п░и ╜▓ом м╗ ╜кономим в░ем┐, ▓ак как не п░ове░┐ем ╜лемен▓╗,
лежа╣ие в пози╢и┐╡ межд│ i и j . (Благода░┐ ▓ом│, ╖▓о ▒пи▒ок занимае▓ неп░е░╗вн╗й │╖а▒▓ок ма▒▒ива, м╗ можем в╗б░а▓╝ в нем
▒л│╖айн╗й ╜лемен▓.)
а. За╖ем н│жно п░едполага▓╝, ╖▓о в▒е кл╛╖и ░азли╖н╗? Покажи▓е, ╖▓о дл┐ не│б╗ва╛╣его ▒пи▒ка ▒ (возможно) ▒овпада╛╣ими кл╛╖ами ▒л│╖айн╗е ▒ка╖ки мог│▓ не │л│╖╕и▓╝ а▒имп▓о▓ик│
в░емени пои▒ка.
Как о╢ени▓╝ в░ем┐ ░або▓╗? П░ед▒▓авим ▒ебе, ╖▓о на не▒кол╝ки╡ пе░в╗╡ ╕ага╡ м╗ в╗полн┐ем ▓ол╝ко ▒л│╖айн╗е ▒ка╖ки, а на
о▒▓ал╝н╗╡ в╗полн┐ем линейн╗й пои▒к. Можно о╢ени▓╝ ожидаемое
░а▒▒▓о┐ние до и▒комого ╜лемен▓а по▒ле пе░вой ┤аз╗ | и ▓ем ▒ам╗м дли▓ел╝но▒▓╝ в▓о░ой ┤аз╗. На╕ алго░и▓м б│де▓ ░або▓а▓╝
не ╡│же ▓акого │▒е╖енного, и о▒▓ае▓▒┐ ▓ол╝ко п░авил╝но в╗б░а▓╝
дли▓ел╝но▒▓╝ пе░вой ┤аз╗, ╖▓об╗ пол│╖и▓╝ о╢енк│ пол│╖╕е.
Сделаем ╜▓о акк│░а▓но. Дл┐ каждого t > 0 обозна╖им ╖е░ез
Xt ▒л│╖айн│╛ вели╖ин│, ░авн│╛ ░а▒▒▓о┐ни╛ (изме░енном│ вдол╝
▒пи▒ка) о▓ пози╢ии i до и▒комого кл╛╖а k по▒ле t ▒л│╖айн╗╡ ▒ка╖ков.
б. Покажи▓е, ╖▓о дл┐ каждого t > 0 ма▓ема▓и╖е▒кое ожидание
в░емени ░або▓╗ алго░и▓ма Compact-List-Search е▒▓╝ O(t +
E [Xt]).
P
в. Покажи▓е, ╖▓о E (Xt) 6 nr=1 (1 ; r=n)t . (Указание: во▒пол╝з│й▓е▒╝ ┤о░м│лой (6.28)).
P ;1
г. Покажи▓е, ╖▓о nr=0
к5е 6 nt+1 =(t + 1).
д. Покажи▓е, ╖▓о E (Xt) 6 n=(t + 1), и об║┐▒ни▓е └на пал╝╢а╡┴,
по╖ем│ ╜▓о не░авен▒▓во должно б╗▓╝ ве░но.
e. Покажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание
в░емени ░або▓╗ алp
го░и▓ма Compact-List-Search е▒▓╝ O( n).
Заме╖ани┐
П░ек░а▒н╗е ▒п░аво╖ники по ▒▓░│к▓│░ам данн╗╡ | книги А╡о,
Хопк░о┤▓а и Ул╝мана [5] и Кн│▓а [121]. Рез│л╝▓а▓╗ ╜к▒пе░имен▓ов
по ▒░авнени╛ ╜┤┤ек▓ивно▒▓и ░азли╖н╗╡ опе░а╢ий на ▒▓░│к▓│░а╡
данн╗╡ можно най▓и в Гонне▓ [90]
С▓еки и о╖е░еди и▒пол╝зовали▒╝ в ма▓ема▓ике и делоп░оизвод▒▓ве в докомп╝╛▓е░н│╛ ╜░│. Кн│▓ [121] о▓ме╖ае▓, ╖▓о в 1947 год│
Т╝╛░инг (A. M. Turing) и▒пол╝зовал ▒▓еки дл┐ ▒в┐зи подп░ог░амм.
222
Глава 11 Элемен▓а░н╗е ▒▓░│к▓│░╗ данн╗╡
С▓░│к▓│░╗ данн╗╡, о▒нованн╗е на │каза▓ел┐╡, ▓акже, видимо,
о▓но▒┐▓▒┐ к └┤ол╝кло░│┴. Согла▒но Кн│▓│, │каза▓ели и▒пол╝зовали▒╝ е╣е в пе░в╗╡ комп╝╛▓е░а╡ ▒ магни▓н╗ми ба░абанами. В 1951
год│ Хоппе░ (G. M. Hopper) ░аз░або▓ал ┐з╗к A-1, в ко▓о░ом алгеб░аи╖е▒кие ┤о░м│л╗ п░ед▒▓авл┐ли▒╝ в виде двои╖н╗╡ де░ев╝ев.
То▓ же Кн│▓ │каз╗вае▓, ╖▓о ▒и▒▓ема▓и╖е▒кое и▒пол╝зование │каза▓елей на╖ало▒╝ ▒ ┐з╗ка IPL-II, ко▓о░╗й ░аз░або▓али в 1956 год│
Н╝╛╜лл, Шо│ и Саймон (A. Newell, J. C. Shaw, H. A. Simon). В ░аз░або▓анном ▓еми же ав▓о░ами в 1957 год│ ┐з╗ке IPL-III по┐вили▒╝
в ┐вном виде опе░а╢ии ▒о ▒▓еками.
12
Хе╕-▓абли╢╗
Ча▒▓о б╗ва╛▓ н│жн╗ динами╖е▒кие множе▒▓ва, подде░жива╛╣ие
▓ол╝ко └▒лова░н╗е опе░а╢ии┴ добавлени┐, пои▒ка и │далени┐ ╜лемен▓а. В ╜▓ом ▒л│╖ае ╖а▒▓о п░имен┐╛▓ ▓ак наз╗ваемое ╡е╕и░ование; ▒оо▓ве▓▒▓в│╛╣а┐ ▒▓░│к▓│░а данн╗╡ наз╗вае▓▒┐ └╡е╕▓абли╢а┴ (или └▓абли╢а ░а▒▒▓ановки┴). В ╡│д╕ем ▒л│╖ае пои▒к в
╡е╕-▓абли╢е може▓ занима▓╝ ▒▓ол╝ко же в░емени, ▒кол╝ко пои▒к
в ▒пи▒ке ((n)), но на п░ак▓ике ╡е╕и░ование ве▒╝ма ╜┤┤ек▓ивно.
П░и в╗полнении неко▓о░╗╡ е▒▓е▒▓венн╗╡ │▒ловий ма▓ема▓и╖е▒кое
ожидание в░емени пои▒ка ╜лемен▓а в ╡е╕-▓абли╢е е▒▓╝ O(1).
Хе╕-▓абли╢│ можно ░а▒▒ма▓░ива▓╝ как обоб╣ение об╗╖ного
ма▒▒ива. Е▒ли │ на▒ до▒▓а▓о╖но пам┐▓и дл┐ ма▒▒ива, ╖и▒ло ╜лемен▓ов ко▓о░ого ░авно ╖и▒л│ в▒е╡ возможн╗╡ кл╛╖ей, дл┐ каждого
возможного кл╛╖а можно о▓ве▒▓и ┐╖ейк│ в ╜▓ом ма▒▒иве и ▓ем ▒ам╗м име▓╝ возможно▒▓╝ доб░а▓╝▒┐ до л╛бой запи▒и за в░ем┐ O(1)
(└п░┐ма┐ ад░е▒а╢и┐┴, ▒м. ░азд. 12.1). Однако е▒ли ░еал╝ное коли╖е▒▓во запи▒ей зна╖и▓ел╝но мен╝╕е, ╖ем коли╖е▒▓во возможн╗╡
кл╛╖ей, ▓о ╜┤┤ек▓ивнее п░имени▓╝ ╡е╕и░ование: в╗╖и▒л┐▓╝ пози╢и╛ запи▒и в ма▒▒иве, и▒╡од┐ из кл╛╖а. В ░азделе 12.2 об▒│жда╛▓▒┐ о▒новн╗е идеи, а в ░азделе 12.3 | конк░е▓н╗е ▒по▒об╗ ▓акого в╗╖и▒лени┐. В ╜▓ой главе п░ед▒▓авлено не▒кол╝ко ва░иан▓ов
╡е╕и░овани┐.
М╗ │видим, ╖▓о ╡е╕и░ование | ╜┤┤ек▓ивн╗й и │добн╗й ▒по▒об
в╗полн┐▓╝ о▒новн╗е ▒лова░н╗е опе░а╢ии (▒░еднее в░ем┐ O(1) п░и
неко▓о░╗╡ п░едположени┐╡).
12.1. П░┐ма┐ ад░е▒а╢и┐
П░┐ма┐ ад░е▒а╢и┐ п░именима, е▒ли коли╖е▒▓во возможн╗╡
кл╛╖ей невелико. П│▒▓╝ возможн╗ми кл╛╖ами ┐вл┐╛▓▒┐ ╖и▒ла
из множе▒▓ва U = f0; 1; : : :; m ; 1g (╖и▒ло m не о╖ен╝ велико).
П░едположим ▓акже, ╖▓о кл╛╖и в▒е╡ ╜лемен▓ов ░азли╖н╗.
Дл┐ ╡░анени┐ множе▒▓ва м╗ пол╝з│ем▒┐ ма▒▒ивом T [0 : :m ; 1],
наз╗ваем╗м ▓абли╢ей ▒ п░┐мой ад░е▒а╢ией (direct-address table).
224
Глава 12 Хе╕-▓абли╢╗
Пе░евод╗ надпи▒ей на ▒амой ка░▓инке: universe of keys | в▒евозможн╗е кл╛╖и, actual keys | и▒пол╝з│ем╗е кл╛╖и, key | кл╛╖,
satellite data | дополни▓ел╝н╗е данн╗е.
Реализа╢и┐ динами╖е▒кого множе▒▓ва ▒ помо╣╝╛ ▓абли╢╗ T ▒ п░┐мой ад░е▒а╢ией. Множе▒▓во возможн╗╡ кл╛╖ей е▒▓╝ U = f0; 1; : : : ; 9g. Каждом│ из ╜▓и╡ кл╛╖ей ▒оо▓ве▓▒▓в│е▓ ▒вое ме▒▓о в ▓абли╢е. В пози╢и┐╡ ▓абли╢╗
▒ номе░ами 2, 3, 5 и 8 (┤ак▓и╖е▒ки и▒пол╝з│ем╗е кл╛╖и) запи▒ан╗ │каза▓ели
на ╜лемен▓╗ множе▒▓ва, а в неи▒пол╝з│ем╗╡ пози╢и┐╡ ▓абли╢╗ (▓емно-▒е░╗е)
запи▒ан nil.
Ри▒. 12.1
Кажда┐ пози╢и┐, или ┐╖ейка, (по-англий▒ки slot или position) ▒оо▓ве▓▒▓в│е▓ оп░еделенном│ кл╛╖│ из множе▒▓ва U (░и▒. 12.1: T [k] |
ме▒▓о, п░едназна╖енное дл┐ запи▒и │каза▓ел┐ на ╜лемен▓ ▒ кл╛╖ом k; е▒ли ╜лемен▓а ▒ кл╛╖ом k в ▓абли╢е не▓, ▓о T [k] = nil).
Реализа╢и┐ ▒лова░н╗╡ опе░а╢ий ▓░ивиал╝на:
Direct-Address-Search (T; k)
return T [k]
Direct-Address-Insert (T; x)
T [key[x]]
x
Direct-Address-Delete (T; x)
T [key[x]] nil
Кажда┐ из ╜▓и╡ опе░а╢ий ▓░еб│е▓ в░емени O(1).
Иногда можно ▒╜кономи▓╝ ме▒▓о, запи▒╗ва┐ в ▓абли╢│ T не │каза▓ели на ╜лемен▓╗ множе▒▓ва, а ▒ами ╜▓и ╜лемен▓╗. Можно обой▓и▒╝ и без о▓дел╝ного пол┐ └кл╛╖┴: кл╛╖ом ▒л│жи▓ индек▒ в ма▒▒иве. Вп░о╖ем, е▒ли м╗ об╡одим▒┐ без кл╛╖ей и │каза▓елей, ▓о надо
име▓╝ ▒по▒об │каза▓╝, ╖▓о данна┐ пози╢и┐ ▒вободна.
Уп░ажнени┐
12.1-1 Опи╕и▓е п░о╢ед│░│ дл┐ на╡ождени┐ наибол╝╕его ╜лемен▓а динами╖е▒кого множе▒▓ва, п░ед▒▓авленного в виде ▓абли╢╗ ▒
п░┐мой ад░е▒а╢ией. Каково в░ем┐ ░або▓╗ ╜▓ой п░о╢ед│░╗ в ╡│д-
Хе╕-▓абли╢╗
225
╕ем ▒л│╖ае?
12.1-2 Би▓ов╗й век▓о░ (bit vector) | ╜▓о ма▒▒ив би▓ов (н│лей и
едини╢). Би▓ов╗й век▓о░ длин╗ m занимае▓ зна╖и▓ел╝но мен╝╕е
ме▒▓а, ╖ем ма▒▒ив из m │каза▓елей. Как, пол╝з│┐▒╝ би▓ов╗м век▓о░ом, ░еализова▓╝ динами╖е▒кое множе▒▓во, ▒о▒▓о┐╣ее из ░азли╖н╗╡ ╜лемен▓ов и не ▒оде░жа╣ее дополни▓ел╝н╗╡ данн╗╡? Слова░н╗е опе░а╢ии должн╗ в╗полн┐▓╝▒┐ за в░ем┐ O(1).
12.1-3 Как ░еализова▓╝ ▓абли╢│ ▒ п░┐мой ад░е▒а╢ией, в ко▓о░ой кл╛╖и ░азли╖н╗╡ ╜лемен▓ов мог│▓ ▒овпада▓╝, а ▒ами ╜лемен▓╗
мог│▓ ▒оде░жа▓╝ дополни▓ел╝н╗е данн╗е? Опе░а╢ии добавлени┐,
│далени┐ и пои▒ка должн╗ в╗полн┐▓╝▒┐ за в░ем┐ O(1) (не заб│д╝▓е,
╖▓о а░г│мен▓ом п░о╢ед│░╗ │далени┐ Delete ┐вл┐е▓▒┐ │каза▓ел╝
на │дал┐ем╗й ╜лемен▓, а не кл╛╖).
12.1-4? П░едположим, ╖▓о нам надо ░еализова▓╝ динами╖е▒кое
множе▒▓во, подде░жива╛╣ее ▒лова░н╗е опе░а╢ии, на базе о╖ен╝
бол╝╕ого ма▒▒ива. Пе░вона╖ал╝но в ма▒▒иве може▓ б╗▓╝ запи▒ано
╖▓о-▓о, не име╛╣ее о▓но╕ение к на╕ей зада╖е, но ма▒▒ив ▓акой
бол╝╕ой, ╖▓о п░едва░и▓ел╝но о╖и╣а▓╝ его неп░ак▓и╖но. Как в ▓аки╡ │▒лови┐╡ ░еализова▓╝ ▓абли╢│ ▒ п░┐мой ад░е▒а╢ией? Кажда┐
запи▒╝ должна занима▓╝ ме▒▓о ░азме░ом O(1), опе░а╢ии добавлени┐, │далени┐ и пои▒ка должн╗ в╗полн┐▓╝▒┐ за в░ем┐ O(1), в░ем┐
на ини╢иализа╢и╛ ▒▓░│к▓│░╗ данн╗╡ ▓акже должно б╗▓╝ ░авно
O(1). (Указание: ╖▓об╗ име▓╝ возможно▒▓╝ │зна▓╝, имее▓ ли данн╗й ╜лемен▓ ма▒▒ива о▓но╕ение к на╕ей ▒▓░│к▓│░е данн╗╡, заведи▓е ▒▓ек, ░азме░ ко▓о░ого ░авен коли╖е▒▓в│ запи▒ей в ▓абли╢е).
12.2. Хе╕-▓абли╢╗
П░┐ма┐ ад░е▒а╢и┐ обладае▓ о╖евидн╗м недо▒▓а▓ком: е▒ли множе▒▓во U в▒евозможн╗╡ кл╛╖ей велико, ▓о ╡░ани▓╝ в пам┐▓и ма▒▒ив T ░азме░ом jU j неп░ак▓и╖но, а ▓о и невозможно. К░оме ▓ого,
е▒ли ╖и▒ло ░еал╝но п░и▒│▓▒▓в│╛╣и╡ в ▓абли╢е запи▒ей мало по
▒░авнени╛ ▒ jU j, ▓о много пам┐▓и ▓░а▓и▓▒┐ з░┐.
Е▒ли коли╖е▒▓во запи▒ей в ▓абли╢е ▒│╣е▒▓венно мен╝╕е, ╖ем коли╖е▒▓во в▒евозможн╗╡ кл╛╖ей, ▓о ╡е╕-▓абли╢а занимае▓ го░аздо мен╝╕е ме▒▓а, ╖ем ▓абли╢а ▒ п░┐мой ад░е▒а╢ией. Именно, ╡е╕▓абли╢а ▓░еб│е▓ пам┐▓и об║емом (jK j), где K | множе▒▓во запи▒ей, п░и ╜▓ом в░ем┐ пои▒ка в ╡е╕-▓абли╢е по-п░ежнем│ е▒▓╝ O(1)
(един▒▓венное └но┴ в ▓ом, ╖▓о на ▒ей ░аз ╜▓о | о╢енка в ▒░еднем,
а не в ╡│д╕ем ▒л│╖ае, да и ▓о ▓ол╝ко п░и оп░еделенн╗╡ п░едположени┐╡).
В ▓о в░ем┐ как п░и п░┐мой ад░е▒а╢ии ╜лемен▓│ ▒ кл╛╖ом k о▓во-
226
Глава 12 Хе╕-▓абли╢╗
Пе░евод╗ надпи▒ей на ▒амой ка░▓инке: universe of keys | в▒евозможн╗е кл╛╖и, actual keys | и▒пол╝з│ем╗е кл╛╖и
И▒пол╝зование ╡е╕-┤│нк╢ии дл┐ о▓об░ажени┐ кл╛╖ей в пози╢ии
╡е╕-▓абли╢╗. Хе╕-зна╖ени┐ кл╛╖ей k2 и k5 ▒овпада╛▓ | имее▓ ме▒▓о коллизи┐.
Ри▒. 12.2
ди▓▒┐ пози╢и┐ номе░ k, п░и ╡е╕и░овании ╜▓о▓ ╜лемен▓ запи▒╗вае▓▒┐ в пози╢и╛ номе░ h(k) в ╡е╕-▓абли╢е (hash table) T [0 : :m ; 1],
где
h : U ! f0; 1; : : :; m ; 1g
| неко▓о░а┐ ┤│нк╢и┐, наз╗ваема┐ ╡е╕-┤│нк╢ией (hash function).
Чи▒ло h(k) наз╗ва╛▓ ╡е╕-зна╖ением (hash value) кл╛╖а k. Иде┐
╡е╕и░овани┐ показана на ░и▒. 12.2: пол╝з│┐▒╝ ма▒▒ивом длин╗ m,
а не jU j, м╗ ╜кономим пам┐▓╝.
П░облема, однако, в ▓ом, ╖▓о ╡е╕-зна╖ени┐ дв│╡ ░азн╗╡ кл╛╖ей
мог│▓ ▒овпа▒▓╝. В ▓аки╡ ▒л│╖а┐╡ гово░┐▓, ╖▓о ▒л│╖ила▒╝ коллизи┐,
или ▒▓олкновение (collision). К ▒╖а▒▓╝╛, ╜▓а п░облема ░аз░е╕има:
╡е╕-┤│нк╢и┐ми можно пол╝зова▓╝▒┐ и п░и нали╖ии ▒▓олкновений.
Хо▓ело▒╝ б╗ в╗б░а▓╝ ╡е╕-┤│нк╢и╛ ▓ак, ╖▓об╗ коллизии б╗ли невозможн╗. Но п░и jU j > m неизбежно ▒│╣е▒▓в│╛▓ ░азн╗е кл╛╖и, име╛╣ие одно и ▓о же ╡е╕-зна╖ение. Так ╖▓о можно
ли╕╝ наде┐▓╝▒┐, ╖▓о дл┐ ┤ак▓и╖е▒ки п░и▒│▓▒▓в│╛╣и╡ в множе▒▓ве
кл╛╖ей коллизий б│де▓ немного, и б╗▓╝ го▓ов╗ми об░аба▓╗ва▓╝
▓е коллизии, ко▓о░╗е в▒е-▓аки п░оизойд│▓.
В╗би░а┐ ╡е╕-┤│нк╢и╛, м╗ об╗╖но не знаем за░анее, какие именно кл╛╖и б│д│▓ ╡░ани▓╝▒┐. Но на в▒┐кий ▒л│╖ай ░аз│мно ▒дела▓╝
▒дела▓╝ ╡е╕-┤│нк╢и╛ в каком-▓о ▒м╗▒ле └▒л│╖айной┴, ╡о░о╕о пе░еме╕ива╛╣ей кл╛╖и по ┐╖ейкам (англий▒кий глагол \to hash"
озна╖ае▓ └мелко по░│би▓╝, поме╕ива┐┴). Раз│мее▓▒┐, └▒л│╖айна┐┴
╡е╕-┤│нк╢и┐ должна в▒е же б╗▓╝ де▓е░мини░ованной в ▓ом ▒м╗▒ле, ╖▓о п░и ее пов▓о░н╗╡ в╗зова╡ ▒ одним и ▓ем же а░г│мен▓ом
она должна возв░а╣а▓╝ одно и ▓о же ╡е╕-зна╖ение.
В ╜▓ом ░азделе м╗ ░а▒▒мо▓░им п░о▒▓ей╕ий ▒по▒об об░або▓ки
(как гово░┐▓, └░аз░е╕ени┐┴) коллизий ▒ помо╣╝╛ ╢епо╖ек. Д░│гой
▒по▒об | о▓к░╗▓а┐ ад░е▒а╢и┐ | ░а▒▒ма▓░ивае▓▒┐ в ░азделе 12.4.
Хе╕-▓абли╢╗
227
Пе░евод╗ надпи▒ей на ▒амой ка░▓инке: universe of keys | в▒евозможн╗е кл╛╖и, actual keys | и▒пол╝з│ем╗е кл╛╖и
Ри▒. 12.3 Раз░е╕ение коллизий ▒ помо╣╝╛ ╢епо╖ек. В пози╢ии T [j ] ╡░ани▓▒┐
│каза▓ел╝ на ▒пи▒ок ╜лемен▓ов ▒ ╡е╕-зна╖ением j . Нап░име░, h(k1 ) = h(k4 ) и
h(k5 ) = h(k2 ) = h(k7 ).
Раз░е╕ение коллизий ▒ помо╣╝╛ ╢епо╖ек
Те╡нологи┐ ▒╢еплени┐ ╜лемен▓ов (chaining) ▒о▒▓ои▓ в ▓ом, ╖▓о
╜лемен▓╗ множе▒▓ва, ко▓о░╗м ▒оо▓ве▓▒▓в│е▓ одно и ▓о же ╡е╕зна╖ение, ▒в┐з╗ва╛▓▒┐ в ╢епо╖к│-▒пи▒ок (░и▒. 12.3). В пози╢ии номе░ j ╡░ани▓▒┐ │каза▓ел╝ на голов│ ▒пи▒ка ▓е╡ ╜лемен▓ов, │ ко▓о░╗╡ ╡е╕-зна╖ение кл╛╖а ░авно j ; е▒ли ▓аки╡ ╜лемен▓ов в множе▒▓ве не▓, в пози╢ии j запи▒ан nil.
Опе░а╢ии добавлени┐, пои▒ка и │далени┐ ░еализ│╛▓▒┐ легко:
Chained-Hash-Insert(T; x)
добави▓╝ x в голов│ ▒пи▒ка T [h(key[x])]
Chained-Hash-Search(T; k)
най▓и ╜лемен▓ ▒ кл╛╖ом k в ▒пи▒ке T [h(k)]
Chained-Hash-Delete(T; x)
│дали▓╝ x из ▒пи▒ка T [h(key[x])]
Опе░а╢и┐ добавлени┐ ░або▓ае▓ в ╡│д╕ем ▒л│╖ае за в░ем┐ O(1).
Мак▒имал╝ное в░ем┐ ░або▓╗ опе░а╢ии пои▒ка п░опо░╢ионал╝но
длине ▒пи▒ка (ниже м╗ ░а▒▒мо▓░им ╜▓о▓ воп░о▒ под░обнее). Наконе╢, │даление ╜лемен▓а можно п░ове▒▓и за в░ем┐ O(1) | п░и │▒ловии, ╖▓о ▒пи▒ки дв│▒▓о░онне ▒в┐зан╗ (е▒ли ▒пи▒ки ▒в┐зан╗ одно▒▓о░онне, ▓о дл┐ │далени┐ ╜лемен▓а x надо п░едва░и▓ел╝но най▓и
его п░ед╕е▒▓венника, дл┐ ╖его необ╡одим пои▒к по ▒пи▒к│; в ▓аком
▒л│╖ае ▒▓оимо▒▓╝ │далени┐ и пои▒ка п░име░но одинаков╗).
228
Глава 12 Хе╕-▓абли╢╗
Анализ ╡е╕и░овани┐ ▒ ╢епо╖ками
В ╜▓ом ░азделе м╗ о╢еним в░ем┐ ░або▓╗ опе░а╢ий дл┐ ╡е╕и░овани┐ ▒ ╢епо╖ками.
П│▒▓╝ T | ╡е╕-▓абли╢а ▒ m пози╢и┐ми, в ко▓о░│╛ зане▒ено n
╜лемен▓ов. Ко╜┤┤и╢иен▓ом заполнени┐ (load factor) ▓абли╢╗ наз╗вае▓▒┐ ╖и▒ло = n=m (╜▓о ╖и▒ло може▓ б╗▓╝ и мен╝╕е, и бол╝╕е
едини╢╗). М╗ б│дем о╢енива▓╝ ▒▓оимо▒▓╝ опе░а╢ий в ▓е░мина╡ .
В ╡│д╕ем ▒л│╖ае ╡е╕и░ование ▒ ╢епо╖ками веде▓ ▒еб┐ о▓в░а▓и▓ел╝но: е▒ли ╡е╕-зна╖ени┐ в▒е╡ n кл╛╖ей ▒овпада╛▓, ▓о ▓абли╢а
▒води▓▒┐ к одном│ ▒пи▒к│ длин╗ n, и на пои▒к б│де▓ ▓░а▓и▓╝▒┐ ▓о
же в░ем┐ (n), ╖▓о и на пои▒к в ▒пи▒ке, пл╛▒ е╣е в░ем┐ на в╗╖и▒ление ╡е╕-┤│нк╢ии. Коне╖но, в ▓акой ▒и▓│а╢ии ╡е╕и░ование
бе▒▒м╗▒ленно.
С░едн┐┐ ▒▓оимо▒▓╝ пои▒ка зави▒и▓ о▓ ▓ого, на▒кол╝ко ░авноме░но ╡е╕-┤│нк╢и┐ ░а▒п░едел┐е▓ ╡е╕-зна╖ени┐ по пози╢и┐м ▓абли╢╗.
Воп░о▒│ о ▓ом, как добива▓╝▒┐ ╜▓ой ░авноме░но▒▓и, по▒в┐╣ен ░аздел 12.3; пока же б│дем │▒ловно п░едполага▓╝, ╖▓о кажд╗й данн╗й
╜лемен▓ може▓ попа▒▓╝ в л╛б│╛ из m пози╢ий ▓абли╢╗ ▒ ░авной
ве░о┐▓но▒▓╝╛ и незави▒имо о▓ ▓ого, к│да попал д░│гой ╜лемен▓.
М╗ б│дем наз╗ва▓╝ ╜▓о п░едположение гипо▓езой └░авноме░ного
╡е╕и░овани┐┴ (simple uniform hashing).
Б│дем ▒╖и▓а▓╝, ╖▓о дл┐ данного кл╛╖а k в╗╖и▒ление ╡е╕зна╖ени┐ h(k), ╕аг по ▒пи▒к│ и ▒░авнение кл╛╖ей ▓░еб│е▓ ┤ик▒и░ованного в░емени, ▓ак ╖▓о в░ем┐ пои▒ка ╜лемен▓а ▒ кл╛╖ом k
линейно зави▒и▓ о▓ коли╖е▒▓ва ╜лемен▓ов в ▒пи▒ке T [h(k)], ко▓о░╗е м╗ п░о▒ма▓░иваем в п░о╢е▒▒е пои▒ка. Б│дем ░азли╖а▓╝ два
▒л│╖а┐: в пе░вом ▒л│╖ае пои▒к окан╖ивае▓▒┐ не│да╖ей (╜лемен▓а ▒
кл╛╖ом k в ▒пи▒ке не▓), во в▓о░ом пои▒к │▒пе╕ен | ╜лемен▓ ▒
▓░еб│ем╗м кл╛╖ом обна░│живае▓▒┐.
Тео░ема 12.1. П│▒▓╝ T | ╡е╕-▓абли╢а ▒ ╢епо╖ками, име╛╣а┐ ко╜┤┤и╢иен▓ заполнени┐ . П░едположим, ╖▓о ╡е╕и░ование ░авноме░но. Тогда п░и пои▒ке ╜лемен▓а, о▓▒│▓▒▓в│╛╣его в ▓абли╢е,
б│де▓ п░о▒мо▓░ено в ▒░еднем ╜лемен▓ов ▓абли╢╗, а ▒░еднее
в░ем┐ ▓акого пои▒ка (вкл╛╖а┐ в░ем┐ на в╗╖и▒ление ╡е╕-┤│нк╢ии)
б│де▓ ░авно (1 + ).
Доказа▓ел╝▒▓во. По▒кол╝к│ в п░едположении ░авноме░ного ╡е╕и░овани┐ в▒е пози╢ии ▓абли╢╗ дл┐ данного кл╛╖а ░авнове░о┐▓н╗, ▒░еднее в░ем┐ пои▒ка о▓▒│▓▒▓в│╛╣его ╜лемен▓а ▒овпадае▓
▒о ▒░едним в░еменем полного п░о▒мо▓░а одного из m ▒пи▒ков, ▓о
е▒▓╝ п░опо░╢ионал╝но ▒░едней длине на╕и╡ m ▒пи▒ков. Э▓а ▒░едн┐┐ длина е▒▓╝ n=m = , о▓к│да пол│╖аем пе░вое │▓ве░ждение ▓ео░ем╗; в▓о░ое │▓ве░ждение пол│╖и▓▒┐, е▒ли добави▓╝ в░ем┐ (1)
на в╗╖и▒ление ╡е╕-зна╖ени┐.
Хе╕-▓абли╢╗
229
Тео░ема 12.2. П░и ░авноме░ном ╡е╕и░овании ▒░еднее в░ем┐
│▒пе╕ного пои▒ка в ╡е╕-▓абли╢е ▒ ╢епо╖ками е▒▓╝ (1 + ),
где | ко╜┤┤и╢иен▓ заполнени┐.
Доказа▓ел╝▒▓во. Хо▓┐ ┤о░м│ли░овка ╜▓ой ▓ео░ем╗ по╡ожа на
п░ед╗д│╣│╛, ▒м╗▒л │▓ве░ждени┐ не▒кол╝ко иной. В п░ед╗д│╣ей
▓ео░еме м╗ ░а▒▒ма▓░ивали п░оизвол╝н│╛ ▓абли╢│ ▒ ко╜┤┤и╢иен▓ом заполнени┐ и о╢енивали ▒░еднее ╖и▒ло дей▒▓вий, необ╡одим╗╡ дл┐ пои▒ка ▒л│╖айного ╜лемен▓а, ░авнове░о┐▓но попада╛╣его
во в▒е ┐╖ейки ▓абли╢╗.
В ╜▓ой ▓ео░еме ▓ак дела▓╝ нел╝з┐: е▒ли м╗ воз╝мем п░оизвол╝н│╛ ▓абли╢│ и, ▒╖и▓а┐ в▒е ее ╜лемен▓╗ ░авнове░о┐▓н╗ми, б│дем
и▒ка▓╝ ▒░еднее в░ем┐ пои▒ка ▒л│╖айно в╗б░анного из ни╡, ▓о о╢енки вида (1 + ) не пол│╖и▓▒┐ (кон▓░п░име░: ▓абли╢а, в ко▓о░ой
в▒е ╜лемен▓╗ попали в один ▒пи▒ок)
Фо░м│ли░овка под░аз│мевае▓ двойное │▒░еднение: ▒на╖ала м╗
░а▒▒ма▓░иваем ▒л│╖айно в╗б░анн│╛ по▒ледова▓ел╝но▒▓╝ ╜лемен▓ов, добавл┐ем╗╡ в ▓абли╢│, п░и╖ем на каждом ╕аге в▒е зна╖ени┐
кл╛╖а ░авнове░о┐▓н╗ и ╕аги незави▒им╗, а за▓ем в пол│╖енной
▓абли╢е в╗би░аем ╜лемен▓ дл┐ пои▒ка, ▒╖и▓а┐ в▒е ее ╜лемен▓╗ ░авнове░о┐▓н╗ми.
По▒мо▓░им на ▒и▓│а╢и╛ в ▓о▓ момен▓, когда ▓абли╢а │же по▒▓░оена, но ▒л│╖айн╗й ╜лемен▓ дл┐ пои▒ка е╣е не в╗б░ан. Чем│
░авно ▒░еднее в░ем┐ пои▒ка, │▒░едненное по в▒ем n ╜лемен▓ам ▓абли╢╗? Надо ▒ложи▓╝ пози╢ии в▒е╡ ╜лемен▓ов в ▒вои╡ ▒пи▒ка╡ и
подели▓╝ ▒│мм│ на n (об╣ее ╖и▒ло ╜лемен▓ов).
Е▒ли п░ед▒▓ави▓╝ ▒ебе, ╖▓о п░и заполнении ▓абли╢╗ ╜лемен▓╗
допи▒╗вали▒╝ в коне╢ ▒оо▓ве▓▒▓в│╛╣и╡ ▒пи▒ков (▒м. │п░. 12.2-3),
▓о │пом┐н│▓а┐ ▒│мма по по░┐дк│ вели╖ин╗ ░авна об╣ем│ ╖и▒ло
опе░а╢ий, в╗полненн╗╡ п░и заполнении ▓абли╢╗ (по▒кол╝к│ п░и
добавлении в коне╢ и п░и пои▒ке в╗полн┐е▓▒┐ одно и ▓о же коли╖е▒▓во дей▒▓вий).
Тепе░╝ в▒помним об │▒░еднении по ░азли╖н╗м возможно▒▓┐м в
п░о╢е▒▒е по▒▓░оени┐ ▓абли╢╗. П░и добавлении в нее i-го ╜лемен▓а
ма▓ема▓и╖е▒кое ожидание ╖и▒ла дей▒▓вий ░авно (1 + (i ; 1)=m)
(▒м. доказа▓ел╝▒▓во п░ед╗д│╣ей ▓ео░ем╗), и по▓ом│ ма▓ема▓и╖е▒кое ожидание об╣его ╖и▒ла дей▒▓вий п░и заполнении ▓абли╢╗,
деленное на n, е▒▓╝
n
X
1
1+ i;1
n i=1
m
!
!
n
X
1
(i ; 1) =
= 1+
nm i=1
1 (n ; 1)n =
= 1 + nm
2
= 1 + 2 ; 21m = (1 + ):
230
Глава 12 Хе╕-▓абли╢╗
Е▒ли коли╖е▒▓во пози╢ий в ╡е╕-▓абли╢е ▒╖и▓а▓╝ п░опо░╢ионал╝н╗м ╖и▒л│ ╜лемен▓ов в ▓абли╢е, ▓о из доказанн╗╡ ▓ео░ем в╗▓екае▓, ╖▓о ▒░еднее в░ем┐ на пои▒к (в оп▓ими▒▓и╖е▒ки╡ п░едположени┐╡ о ░а▒п░еделении ве░о┐▓но▒▓ей) е▒▓╝ O(1). В ▒амом деле, е▒ли
n = O(m), ▓о = n=m = O(1) и O(1 + ) = O(1). По▒кол╝к│
▒▓оимо▒▓╝ добавлени┐ в ╡е╕-▓абли╢│ ▒ ╢епо╖ками е▒▓╝ O(1) (даже
п░и добавлении в коне╢, ▒м. │п░. 12.2-3), а ▒▓оимо▒▓╝ │далени┐ ╜лемен▓а е▒▓╝ O(1) (м╗ ▒╖и▓аем, ╖▓о ▒пи▒ки дв│▒▓о░онне ▒в┐зан╗),
▒░еднее в░ем┐ в╗полнени┐ л╛бой ▒лова░ной опе░а╢ии (в п░едположении ░авноме░ного ╡е╕и░овани┐) е▒▓╝ O(1).
Уп░ажнени┐
12.2-1 П│▒▓╝ h | ▒л│╖айна┐ ╡е╕-┤│нк╢и┐, ▒опо▒▓авл┐╛╣а┐ ▒ кажд╗м из n ░азли╖н╗╡ кл╛╖ей fk1; k2; : : :; kng одн│ из m пози╢ий
в ▓абли╢е. Каково ма▓ема▓и╖е▒кое ожидание ╖и▒ла коллизий (▓о╖нее, ╖и▒ла па░ (i; j ), дл┐ ко▓о░╗╡ ╖▓о h(ki) = h(kj ))?
12.2-2 Как б│де▓ в╗гл┐де▓╝ ╡е╕-▓абли╢а ▒ ╢епо╖ками по▒ле ▓ого, как в нее по▒ледова▓ел╝но поме▒▓или ╜лемен▓╗ ▒ кл╛╖ами
5; 28; 19; 15; 20; 33; 12; 17; 10 (в │казанном по░┐дке)? Чи▒ло пози╢ий
в ▓абли╢е ░авно 9, ╡е╕-┤│нк╢и┐ имее▓ вид h(k) = k mod 9.
12.2-3 Покажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание в░емени добавлени┐ нового ╜лемен▓а (в п░едположении ░авноме░ного ╡е╕и░овани┐) е▒▓╝ O(1 + ), е▒ли м╗ добавл┐ем нов╗й ╜лемен▓ в коне╢
▒оо▓ве▓▒▓в│╛╣ей ╢епо╖ки.
12.2-4 П░о┤е▒▒о░ п░едполагае▓, ╖▓о ╡е╕и░ование ▒ ╢епо╖ками
б│де▓ го░аздо ╜┤┤ек▓ивнее, е▒ли ▒пи▒ки ╜лемен▓ов ▒ данн╗м ╡е╕зна╖ением б│д│▓ │по░┐до╖енн╗ми. Как ╜▓о▓ под╡од повли┐е▓ на
▒▓оимо▒▓╝ │▒пе╕ного пои▒ка, пои▒ка о▓▒│▓▒▓в│╛╣его ╜лемен▓а,
добавлени┐, │далени┐?
12.2-5 Раз░або▓ай▓е ░еализа╢и╛ ╡е╕-▓абли╢╗ ▒ ╢епо╖ками, в ко▓о░ой запи▒и ╡░ан┐▓▒┐ вн│▓░и ▒амой ╡е╕-▓абли╢╗ (неи▒пол╝з│ем╗е пози╢ии ▒в┐з╗ва╛▓▒┐ в ▒пи▒ок ▒вободн╗╡ ме▒▓). С╖и▓ай▓е,
╖▓о в каждой пози╢ии мог│▓ ╡░ани▓╝▒┐ либо ┤лаг и два │каза▓ел┐, либо ┤лаг, │каза▓ел╝ и ╜лемен▓. В▒е ▒лова░н╗е опе░а╢ии, а
▓акже опе░а╢ии по в╗делени╛ и о▒вобождени╛ ме▒▓а, должн╗ в╗полн┐▓╝▒┐ за в░ем┐ O(1). Об┐за▓ел╝но ли дела▓╝ ▒пи▒ок ▒вободн╗╡
ме▒▓ дв│▒▓о░онне ▒в┐занн╗м?
12.2-6 П│▒▓╝ об╣ее ╖и▒ло возможн╗╡ кл╛╖ей (░азме░ множе▒▓ва
U ) п░ево▒╡оди▓ mn, где m | коли╖е▒▓во ╡е╕-зна╖ений. Покажи▓е,
Хе╕-┤│нк╢ии
231
╖▓о ▒│╣е▒▓в│е▓ не менее n кл╛╖ей ▒ одним и ▓ем же ╡е╕-зна╖ением,
▓ак ╖▓о в ╡│д╕ем ▒л│╖ае пои▒к в ╡е╕-▓абли╢е ▒ ╢епо╖ками займе▓
в░ем┐ (n).
12.3. Хе╕-┤│нк╢ии
В ╜▓ом ░азделе м╗ об▒│дим, ╖его м╗ ждем о▓ ╡о░о╕ей ╡е╕┤│нк╢ии, а за▓ем ░азбе░ем ▓░и ▒по▒оба по▒▓░оени┐ ╡е╕-┤│нк╢ий:
деление ▒ о▒▓а▓ком, │множение и │ниве░▒ал╝ное ╡е╕и░ование.
Какой должна б╗▓╝ ╡о░о╕а┐ ╡е╕-┤│нк╢и┐?
Хо░о╕а┐ ╡е╕-┤│нк╢и┐ должна (п░иближенно) │довле▓во░┐▓╝
п░едположени┐м ░авноме░ного ╡е╕и░овани┐: дл┐ о╖е░едного
кл╛╖а в▒е m ╡е╕-зна╖ений должн╗ б╗▓╝ ░авнове░о┐▓н╗. Ч▓об╗
╜▓о п░едположение имело ▒м╗▒л, ┤ик▒и░│ем ░а▒п░еделение ве░о┐▓но▒▓ей P на множе▒▓ве U ; б│дем п░едполага▓╝, ╖▓о кл╛╖и
в╗би░а╛▓▒┐ из U незави▒имо д░│г о▓ д░│га, и кажд╗й ░а▒п░еделен
в ▒оо▓ве▓▒▓вии ▒ P . Тогда ░авноме░ное ╡е╕и░ование озна╖ае▓,
╖▓о
X
P (k) = 1 дл┐ j = 0; 1; : : :; m ; 1.
(12.1)
k : h(k)=j
m
К ▒ожалени╛, ░а▒п░еделение P об╗╖но неизве▒▓но, ▓ак ╖▓о п░ове░и▓╝ ╜▓о невозможно (да и кл╛╖и не в▒егда ░аз│мно ▒╖и▓а▓╝
незави▒им╗ми).
Из░едка ░а▒п░еделение P б╗вае▓ изве▒▓но. П│▒▓╝, нап░име░,
кл╛╖и | ▒л│╖айн╗е дей▒▓ви▓ел╝н╗е ╖и▒ла, незави▒имо и ░авноме░но ░а▒п░еделенн╗е на ин▓е░вале [0; 1). В ╜▓ом ▒л│╖ае легко виде▓╝, ╖▓о ╡е╕-┤│нк╢и┐ h(k) = bkmc │довле▓во░┐е▓ │▒лови╛ (12.1).
На п░ак▓ике п░и в╗бо░е ╡е╕-┤│нк╢ий пол╝з│╛▓▒┐ ░азли╖н╗ми
╜в░и▒▓иками, о▒нованн╗ми на ▒пе╢и┤ике зада╖и. Нап░име░, компил┐▓о░ ┐з╗ка п░ог░амми░овани┐ ╡░ани▓ ▓абли╢│ ▒имволов, в ко▓о░ой кл╛╖ами ┐вл┐╛▓▒┐ иден▓и┤ика▓о░╗ п░ог░амм╗. Ча▒▓о в
п░ог░амме и▒пол╝з│е▓▒┐ не▒кол╝ко по╡ожи╡ иден▓и┤ика▓о░ов (нап░име░, pt и pts). Хо░о╕а┐ ╡е╕-┤│нк╢и┐ б│де▓ ▒▓а░а▓╝▒┐, ╖▓об╗
╡е╕-зна╖ени┐ │ ▓аки╡ по╡ожи╡ иден▓и┤ика▓о░ов б╗ли ░азли╖н╗.
Об╗╖но ▒▓а░а╛▓▒┐ подоб░а▓╝ ╡е╕-┤│нк╢и╛ ▓аким об░азом, ╖▓об╗ ее поведение не ко░░ели░овало ▒ ░азли╖н╗ми закономе░но▒▓┐ми, ко▓о░╗е мог│▓ в▒▓░е▓и▓╝▒┐ в ╡е╕и░│ем╗╡ данн╗╡. Нап░име░,
опи▒╗ваем╗й ниже ме▓од делени┐ ▒ о▒▓а▓ком ▒о▒▓ои▓ в ▓ом, ╖▓о
в ка╖е▒▓ве ╡е╕-зна╖ени┐ бе░е▓▒┐ о▒▓а▓ок о▓ делени┐ кл╛╖а на неко▓о░ое п░о▒▓ое ╖и▒ло. Е▒ли ╜▓о п░о▒▓ое ╖и▒ло никак не ▒в┐зано ▒
232
Глава 12 Хе╕-▓абли╢╗
┤│нк╢ией ░а▒п░еделени┐ P , ▓о ▓акой ме▓од дае▓ ╡о░о╕ие ░ез│л╝▓а▓╗.
Заме▓им в закл╛╖ение, ╖▓о иногда жела▓ел╝но, ╖▓об╗ ╡е╕┤│нк╢и┐ │довле▓во░┐ла │▒лови┐м, в╗╡од┐╣им за п░едел╗ ▓░ебовани┐ ░авноме░ного ╡е╕и░овани┐. Нап░име░, можно ▒▓а░а▓╝▒┐,
╖▓об╗ └близким┴ в каком-либо ▒м╗▒ле кл╛╖ам ▒оо▓ве▓▒▓вовали
└далекие┴ ╡е╕-зна╖ени┐ (╜▓о о▒обенно жела▓ел╝но п░и пол╝зовании
опи▒анной в ░азделе 12.4 линейной по▒ледова▓ел╝но▒▓╝╛ п░об).
Кл╛╖и как на▓│░ал╝н╗е ╖и▒ла
Об╗╖но п░едполага╛▓, ╖▓о обла▒▓╝ оп░еделени┐ ╡е╕-┤│нк╢ии |
множе▒▓во ╢ел╗╡ нео▓░и╢а▓ел╝н╗╡ ╖и▒ел. Е▒ли кл╛╖и не ┐вл┐╛▓▒┐ на▓│░ал╝н╗ми ╖и▒лами, и╡ об╗╖но можно п░еоб░азова▓╝ к ▓аком│ вид│ (╡о▓┐ ╖и▒ла мог│▓ пол│╖и▓╝▒┐ бол╝╕ими). Нап░име░,
по▒ледова▓ел╝но▒▓и ▒имволов можно ин▓е░п░е▓и░ова▓╝ как ╖и▒ла,
запи▒анн╗е в ▒и▒▓еме ▒╖и▒лени┐ ▒ под╡од┐╣им о▒нованием: иден▓и┤ика▓о░ pt | ╜▓о па░а ╖и▒ел (112; 116) (▓аков╗ ASCII-код╗ б│кв p
и t), или же ╖и▒ло (112 128) + 116 = 14452 (в ▒и▒▓еме ▒╖и▒лени┐
по о▒новани╛ 128). Далее м╗ в▒егда б│дем ▒╖и▓а▓╝, ╖▓о кл╛╖и |
╢ел╗е нео▓░и╢а▓ел╝н╗е ╖и▒ла.
12.3.1. Деление ▒ о▒▓а▓ком
По▒▓░оение ╡е╕-┤│нк╢ии ме▓одом делени┐ ▒ о▒▓а▓ком (division
method) ▒о▒▓ои▓ в ▓ом, ╖▓о кл╛╖│ k ▒▓ави▓▒┐ в ▒оо▓ве▓▒▓вие о▒▓а▓ок о▓ делени┐ k на m, где m | ╖и▒ло возможн╗╡ ╡е╕-зна╖ений:
h(k) = k mod m:
Нап░име░, е▒ли ░азме░ ╡е╕-▓абли╢╗ ░авен m = 12 и кл╛╖ ░авен 100, ▓о ╡е╕-зна╖ение ░авно 4.
П░и ╜▓ом неко▓о░╗╡ зна╖ений m ▒▓ои▓ избега▓╝. Нап░име░, е▒ли m = 2p , ▓о h(k) | ╜▓о п░о▒▓о p млад╕и╡ би▓ов ╖и▒ла k. Е▒ли
не▓ │ве░енно▒▓и, ╖▓о в▒е комбина╢ии млад╕и╡ би▓ов кл╛╖а б│д│▓
в▒▓░е╖а▓╝▒┐ ▒ одинаковой ╖а▒▓о▓ой, ▓о ▒▓епен╝ двойки в ка╖е▒▓ве
╖и▒ла m не в╗би░а╛▓. Не╡о░о╕о ▓акже в╗би░а▓╝ в ка╖е▒▓ве m ▒▓епен╝ де▒┐▓ки, е▒ли кл╛╖и е▒▓е▒▓венно возника╛▓ как де▒┐▓и╖н╗е
╖и▒ла: вед╝ в ╜▓ом ▒л│╖ае окаже▓▒┐, ╖▓о │же ╖а▒▓╝ ╢и┤░ кл╛╖а полно▒▓╝╛ оп░едел┐е▓ ╡е╕-зна╖ение. Е▒ли кл╛╖и е▒▓е▒▓венно возника╛▓ как ╖и▒ла в ▒и▒▓еме ▒╖и▒лени┐ ▒ о▒нованием 2p , ▓о не╡о░о╕о
б░а▓╝ m = 2p ;1, по▒кол╝к│ п░и ╜▓ом одинаковое ╡е╕-зна╖ение име╛▓ кл╛╖и, о▓ли╖а╛╣ие▒┐ ли╕╝ пе░е▒▓ановкой └2p-и╖н╗╡ ╢и┤░┴.
Хо░о╕ие ░ез│л╝▓а▓╗ об╗╖но пол│╖а╛▓▒┐, е▒ли в╗б░а▓╝ в ка╖е▒▓ве m п░о▒▓ое ╖и▒ло, далеко о▓▒▓о┐╣ее о▓ ▒▓епеней двойки.
П│▒▓╝, нап░име░, нам надо поме▒▓и▓╝ п░име░но 2000 запи▒ей в
Хе╕-┤│нк╢ии
233
Пе░евод╗ надпи▒ей: w bits | w би▓ов; extract p bits | в╗дели▓╝ p
би▓ов. ВНИМАНИЕ: на ░и▒│нке надо УБРАТЬ знаки ╢елой ╖а▒▓и,
заменив bA 2w c на A 2w !!!!!!!
Хе╕и░ование ме▓одом │множени┐. Кл╛╖ k, п░ед▒▓авленн╗й в виде
w-би▓ного ╖и▒ла, │множае▓▒┐ на w-би▓ное ╖и▒ло A 2w , где A | кон▒▓ан▓а из
ин▓е░вала (0; 1). У п░оизведени┐ бе░│▓ млад╕ие w би▓ов, а из ╜▓и╡ w би▓ов
в╗дел┐╛▓ p ▒▓а░╕и╡. Э▓о и е▒▓╝ ╡е╕-зна╖ение h(k).
Ри▒. 12.4
╡е╕-▓абли╢│ ▒ ╢епо╖ками, п░и╖ем на▒ не п│гае▓ возможн╗й пе░ебо░ ▓░е╡ ва░иан▓ов п░и пои▒ке о▓▒│▓▒▓в│╛╣его в ▓абли╢е ╜лемен▓а. Ч▓о ж, во▒пол╝з│ем▒┐ ме▓одом делени┐ ▒ о▒▓а▓ком п░и длине
╡е╕-▓абли╢╗ m = 701. Чи▒ло 701 п░о▒▓ое, 701 2000=3, и до ▒▓епеней двойки о▓ ╖и▒ла 701 ▓оже далеко. С▓ало б╗▓╝, можно в╗б░а▓╝
╡е╕-┤│нк╢и╛ вида
h(k) = k mod 701:
На в▒┐кий ▒л│╖ай можно е╣е по╜к▒пе░имен▓и░ова▓╝ ▒ ░еал╝н╗ми
данн╗ми на п░едме▓ ▓ого, на▒кол╝ко ░авноме░но б│д│▓ ░а▒п░еделен╗ и╡ ╡е╕-зна╖ени┐.
12.3.2. Умножение
По▒▓░оение ╡е╕-┤│нк╢ии ме▓одом │множени┐ (multiplication
method) ▒о▒▓ои▓ в ▒лед│╛╣ем. П│▒▓╝ коли╖е▒▓во ╡е╕-зна╖ений ░авно m. За┤ик▒и░│ем кон▒▓ан▓│ A в ин▓е░вале 0 < A < 1, и положим
h(k) = bm(kA mod 1)c;
где kA mod 1 | д░обна┐ ╖а▒▓╝ kA.
До▒▓оин▒▓во ме▓ода │множени┐ в ▓ом, ╖▓о ка╖е▒▓во ╡е╕┤│нк╢ии мало зави▒и▓ о▓ в╗бо░а m. Об╗╖но в ка╖е▒▓ве m
в╗би░а╛▓ ▒▓епен╝ двойки, по▒кол╝к│ в бол╝╕ин▒▓ве комп╝╛▓е░ов
│множение на ▓акое m ░еализ│е▓▒┐ как ▒двиг ▒лова. П│▒▓╝, нап░име░, длина ▒лова в на╕ем комп╝╛▓е░е ░авна w би▓ам и кл╛╖ k
поме╣ае▓▒┐ в одно ▒лово. Тогда, е▒ли m = 2p, ▓о в╗╖и▒ление
╡е╕-┤│нк╢ии можно п░ове▒▓и ▓ак: │множим k на w-би▓ное ╢елое
╖и▒ло A 2w (м╗ п░едполагаем, ╖▓о ╜▓о ╖и▒ло ┐вл┐е▓▒┐ ╢ел╗м);
пол│╖и▓▒┐ 2w-би▓ное ╖и▒ло
Ме▓од │множени┐ ░або▓ае▓ п░и л╛бом в╗бо░е кон▒▓ан▓╗ A, но
неко▓о░╗е зна╖ени┐ A мог│▓ б╗▓╝ л│╖╕е д░│ги╡. Оп▓имал╝н╗й
234
Глава 12 Хе╕-▓абли╢╗
в╗бо░ зави▒и▓ о▓ ▓ого, какого ░ода данн╗е подве░га╛▓▒┐ ╡е╕и░овани╛. В книге [123] Кн│▓ об▒│ждае▓ в╗бо░ кон▒▓ан▓╗ A и п░и╡оди▓ к в╗вод│, ╖▓о зна╖ение
p
A ( 5 ; 1)=2 = 0;6180339887 : : :
(12.2)
┐вл┐е▓▒┐ довол╝но │да╖н╗м.
В закл╛╖ение п░иведем п░име░: е▒ли k = 123456, m = 10000 и A
оп░еделено ┤о░м│лой (12.2), ▓о
h(k) = b10000 (123456 0;61803 : : : mod 1)c =
= b10000 (76300;0041151 : : : mod 1)c =
= b10000 0;0041151 : : : c =
= b41;151 : : : c = 41:
12.3.3. Униве░▒ал╝ное ╡е╕и░ование
Е▒ли недоб░ожела▓ел╝ б│де▓ ▒пе╢иал╝но подби░а▓╝ данн╗е дл┐
╡е╕и░овани┐, ▓о (зна┐ ┤│нк╢и╛ h) он може▓ │▒▓░ои▓╝ ▓ак, ╖▓о
в▒е n кл╛╖ей б│д│▓ ▒оо▓ве▓▒▓вова▓╝ одной пози╢ии в ▓абли╢е, в
░ез│л╝▓а▓е ╖его в░ем┐ пои▒ка б│де▓ ░авно (n). Л╛ба┐ ┤ик▒и░ованна┐ ╡е╕-┤│нк╢и┐ може▓ б╗▓╝ ди▒к░еди▓и░ована ▓аким об░азом. Един▒▓венн╗й в╗╡од из положени┐ | в╗би░а▓╝ ╡е╕-┤│нк╢и╛
▒л│╖айн╗м об░азом, не зави▒┐╣им о▓ ▓ого, какие именно данн╗е
в╗ ╡е╕и░│е▓е. Такой под╡од наз╗вае▓▒┐ │ниве░▒ал╝н╗м ╡е╕и░ованием (universal hashing). Ч▓о б╗ ни п░едп░инимал ва╕ недоб░ожела▓ел╝, е▒ли он не имее▓ ин┤о░ма╢ии о в╗б░анной ╡е╕-┤│нк╢ии,
▒░еднее в░ем┐ пои▒ка о▒▓ане▓▒┐ ╡о░о╕им.
О▒новна┐ иде┐ │ниве░▒ал╝ного ╡е╕и░овани┐ | в╗би░а▓╝ ╡е╕┤│нк╢и╛ во в░ем┐ и▒полнени┐ п░ог░амм╗ ▒л│╖айн╗м об░азом из
неко▓о░ого множе▒▓ва. С▓ало б╗▓╝, п░и пов▓о░ном в╗зове ▒ ▓еми
же в╡одн╗ми данн╗ми алго░и▓м б│де▓ ░або▓а▓╝ │же по-д░│гом│.
Как и в ▒л│╖ае ▒ алго░и▓мом б╗▒▓░ой ▒о░▓и░овки, ░андомиза╢и┐ га░ан▓и░│е▓, ╖▓о нел╝з┐ п░ид│ма▓╝ в╡одн╗╡ данн╗╡, на ко▓о░╗╡ алго░и▓м в▒егда б╗ ░або▓ал медленно (в п░име░е ▒ компил┐▓о░ом и ▓абли╢ей ▒имволов не ▒може▓ пол│╖и▓╝▒┐, ╖▓о какой-▓о
оп░еделенн╗й ▒▓ил╝ в╗бо░а иден▓и┤ика▓о░ов п░иводи▓ к замедлени╛ компил┐╢ии: ве░о┐▓но▒▓╝, ╖▓о компил┐╢и┐ замедли▓▒┐ из-за
не│да╖ного ╡е╕и░овани┐, во-пе░в╗╡, мала, и во-в▓о░╗╡, зави▒и▓
▓ол╝ко о▓ коли╖е▒▓ва иден▓и┤ика▓о░ов, но не о▓ и╡ в╗бо░а).
П│▒▓╝ H | коне╖ное ▒емей▒▓во ┤│нк╢ий, о▓об░ажа╛╣и╡ данное множе▒▓во U (множе▒▓во в▒евозможн╗╡ кл╛╖ей) во множе▒▓во f0; 1; : : :; m ; 1g (множе▒▓во ╡е╕-зна╖ений). Э▓о ▒емей▒▓во наз╗вае▓▒┐ │ниве░▒ал╝н╗м (universal), е▒ли дл┐ л╛б╗╡ дв│╡ кл╛╖ей
x; y 2 U ╖и▒ло ┤│нк╢ий h 2 H, дл┐ ко▓о░╗╡ h(x) = h(y), ░авно
Хе╕-┤│нк╢ии
235
jHj=m. Ин╗ми ▒ловами, п░и ▒л│╖айном в╗бо░е ╡е╕-┤│нк╢ии ве-
░о┐▓но▒▓╝ коллизии межд│ дв│м┐ данн╗ми кл╛╖ами должна ░авн┐▓╝▒┐ ве░о┐▓но▒▓и ▒овпадени┐ дв│╡ ▒л│╖айно в╗б░анн╗╡ ╡е╕зна╖ений (ко▓о░а┐ ░авна 1=m).
След│╛╣а┐ ▓ео░ема показ╗вае▓, ╖▓о │ниве░▒ал╝ное ▒емей▒▓во
╡е╕-┤│нк╢ий обе▒пе╖ивае▓ ╡о░о╕│╛ п░оизводи▓ел╝но▒▓╝ в ▒░еднем.
Тео░ема 12.3. П│▒▓╝ нам необ╡одимо поме▒▓и▓╝ n ┤ик▒и░ованн╗╡ кл╛╖ей в ▓абли╢│ ░азме░а m, где m > n, и ╡е╕-┤│нк╢и┐ в╗би░ае▓▒┐ ▒л│╖айн╗м об░азом из │ниве░▒ал╝ного ▒емей▒▓ва. Тогда
ма▓ема▓и╖е▒кое ожидание ╖и▒ла коллизий, в ко▓о░╗╡ │╖а▒▓в│е▓
данн╗й кл╛╖ x, мен╝╕е едини╢╗.
Доказа▓ел╝▒▓во. Ма▓ема▓и╖е▒кое ожидание ╖и▒ла коллизий данного кл╛╖а x ▒ данн╗м кл╛╖ом y ░авно 1=m по оп░еделени╛ │ниве░▒ал╝ного ▒емей▒▓ва. По▒кол╝к│ в▒его имее▓▒┐ n ; 1 кл╛╖ей, о▓ли╖н╗╡ о▓ x, ма▓ема▓и╖е▒кое ожидание ╖и▒ла коллизий ▒ какимниб│д╝ из ╜▓и╡ кл╛╖ей ░авно (n ; 1)=m, ╖▓о мен╝╕е едини╢╗, по▒кол╝к│ n 6 m.
Как же по▒▓░ои▓╝ │ниве░▒ал╝ное ▒емей▒▓во? Нам поможе▓
в ╜▓ом ╜лемен▓а░на┐ ▓ео░и┐ ╖и▒ел. Чи▒ло m (коли╖е▒▓во ╡е╕зна╖ений) в╗бе░ем п░о▒▓╗м. Б│дем ▒╖и▓а▓╝, ╖▓о кажд╗й кл╛╖
п░ед▒▓авл┐е▓ ▒обой по▒ледова▓ел╝но▒▓╝ r + 1 └бай▓ов┴ (бай▓, или
▒имвол,| ╜▓о п░о▒▓о двои╖ное ╖и▒ло ▒ ог░ани╖енн╗м ╖и▒лом
░аз░┐дов; м╗ б│дем ▒╖и▓а▓╝, ╖▓о мак▒имал╝ное зна╖ение бай▓а
мен╝╕е m). Дл┐ каждой по▒ледова▓ел╝но▒▓и a = ha0 ; a1; : : :; ar i,
╜лемен▓╗ ко▓о░ой ┐вл┐╛▓▒┐ в╗╖е▓ами по мод│л╛ m (▓о е▒▓╝
п░инадлежа▓ множе▒▓в│ f0; 1; : : :; m ; 1g), ░а▒▒мо▓░им ┤│нк╢и╛
ha, заданн│╛ ┤о░м│лой
ha(x) =
r
X
i=0
ai xi mod m;
(12.3)
где кл╛╖ x е▒▓╝ по▒ледова▓ел╝но▒▓╝ бай▓ов hx0; x1; : : :; xr i. Положим
[
H = fhag;
(12.4)
a
О╖евидно, множе▒▓во H ▒оде░жи▓ mr+1 ╜лемен▓ов.
Тео░ема 12.4. Семей▒▓во ┤│нк╢ий H, оп░еделенное по ┤о░м│лам (12.3) и (12.4), ┐вл┐е▓▒┐ │ниве░▒ал╝н╗м ▒емей▒▓вом ╡е╕┤│нк╢ий.
Доказа▓ел╝▒▓во. П│▒▓╝ x = hx0; x1; : : :; xr i и y = hy0 ; y1; : : :; yr i |
два ░азли╖н╗╡ кл╛╖а; не ог░ани╖ива┐ об╣но▒▓и, можно ▒╖и▓а▓╝,
236
Глава 12 Хе╕-▓абли╢╗
╖▓о x0 6= y0 . Е▒ли a = ha0; a1; : : :; ar i, ▓о ha (x) = ha (y ) ▓огда и
▓ол╝ко ▓огда, когда
a0 (x0 ; y0) ;
r
X
j =1
ai (xi ; yi) (mod m):
По▒кол╝к│ x0 ; y0 6 0 (mod m), дл┐ каждой по▒ледова▓ел╝но▒▓и ha1; : : :; ar i ▒│╣е▒▓в│е▓ и един▒▓венно зна╖ение a0 , п░и ко▓о░ом
╜▓о ░авен▒▓во в╗полнено (░аздел 33.4). Коли╖е▒▓во ▓аки╡ по▒ледова▓ел╝но▒▓ей ░авно mr , и ▓аково же, ▒▓ало б╗▓╝, коли╖е▒▓во ┤│нк╢ий из H, не ░азли╖а╛╣и╡ кл╛╖и x и y . По▒кол╝к│ mr = jHj=m,
в▒е доказано.
[Ко░о╖е можно ▒каза▓╝ ▓ак: нен│левой линейн╗й ┤│нк╢ионал
h 7! h(x ; y) ▒ ░авной ве░о┐▓но▒▓╝╛ п░инимае▓ л╛бое из m ▒вои╡
зна╖ений, в ▓ом ╖и▒ле 0.]
Уп░ажнени┐
12.3-1 П│▒▓╝ в ▒в┐занном ▒пи▒ке кажд╗й ╜лемен▓ ╡░ани▓▒┐ вме▒▓е ▒ его кл╛╖ом k и ▒оо▓ве▓▒▓в│╛╣им ╡е╕-зна╖ением h(k). Кл╛╖
п░ед▒▓авл┐е▓ ▒обой длинн│╛ по▒ледова▓ел╝но▒▓╝ ▒имволов. Как
можно │п░о▒▓и▓╝ пои▒к в ╜▓ом ▒пи▒ке ╜лемен▓а ▒ данн╗м кл╛╖ом?
12.3-2 П░едположим, ╖▓о кл╛╖ами ┐вл┐╛▓▒┐ по▒ледова▓ел╝но▒▓и ▒имволов, ко▓о░╗е м╗ ░а▒▒ма▓░иваем как ╖и▒ла, запи▒анн╗е
в ▒и▒▓еме ▒╖и▒лени┐ ▒ о▒нованием 128. Чи▒ло m поме╣ае▓▒┐ в 32би▓ном ▒лове ▒ запа▒ом, но ╖и▒ла, ▒оо▓ве▓▒▓в│╛╣ие кл╛╖ам, │же
не поме╣а╛▓▒┐, по▒кол╝к│ кл╛╖и ▒оде░жа▓ много де▒┐▓ков ▒имволов. Как в╗╖и▒ли▓╝ ╡е╕-┤│нк╢и╛, по▒▓░оенн│╛ ме▓одом делени┐? (Не▓ необ╡одимо▒▓и ░еализов╗ва▓╝ а░и┤ме▓и╖е▒кие опе░а╢ии ▒ длинн╗ми ╖и▒лами | до▒▓а▓о╖но дополни▓ел╝ной пам┐▓и
по▒▓о┐нного об║ема.)
12.3-3 П│▒▓╝ кл╛╖и п░ед▒▓авл┐╛▓ ▒обой по▒ледова▓ел╝но▒▓и pби▓н╗╡ ▒имволов, ░а▒▒ма▓░иваем╗е как ╖и▒ла в 2p -и╖ной ▒и▒▓еме
▒╖и▒лени┐, а в ка╖е▒▓ве ╡е╕-┤│нк╢ии в╗б░ан о▒▓а▓ок п░и делении
на m = 2p ; 1. Покажи▓е, ╖▓о дв│м кл╛╖ам, о▓ли╖а╛╣им▒┐ ▓ол╝ко по░┐дком ▒имволов, ▒оо▓ве▓▒▓в│е▓ одно и ▓о же ╡е╕-зна╖ение.
П░иведи▓е п░име░ п░иложени┐, в ко▓о░ом п░именение ▓акой ╡е╕┤│нк╢ии б╗ло б╗ нежела▓ел╝но.
12.3-4 П│▒▓╝ ░азме░ ╡е╕-▓абли╢╗ ░авен m = 1000,
p а ╡е╕┤│нк╢и┐ имее▓ ??ид h(k) = bm(kA mod 1)c, где A = ( 5 ; 1)=2.
В какие пози╢ии попад│▓ кл╛╖и 61, 62, 63, 64 и 65?
12.3-5 Удалим из ▒емей▒▓ва H, оп░еделенного по ┤о░м│лам (12.3) и (12.4), ▓е ┤│нк╢ии ha , в ко▓о░╗╡ ╡о▓┐ б╗ одно из ai
О▓к░╗▓а┐ ад░е▒а╢и┐
237
░авна н│л╛. Покажи▓е, ╖▓о пол│╖ив╕ее▒┐ ▒емей▒▓во ╡е╕-┤│нк╢ий
│ниве░▒ал╝н╗м не б│де▓.
12.4. О▓к░╗▓а┐ ад░е▒а╢и┐
В о▓ли╖ие о▓ ╡е╕и░овани┐ ▒ ╢епо╖ками, п░и о▓к░╗▓ой ад░е▒а╢ии (open addressing) никаки╡ ▒пи▒ков не▓, а в▒е запи▒и ╡░ан┐▓▒┐ в
▒амой ╡е╕-▓абли╢е: кажда┐ ┐╖ейка ▓абли╢╗ ▒оде░жи▓ либо ╜лемен▓
динами╖е▒кого множе▒▓ва, либо nil. Пои▒к закл╛╖ае▓▒┐ в ▓ом, ╖▓о
м╗ оп░еделенн╗м об░азом п░о▒ма▓░иваем ╜лемен▓╗ ▓абли╢╗, пока
не найдем ▓о, ╖▓о и╣ем, или не │до▒▓ове░им▒┐, ╖▓о ╜лемен▓а ▒ ▓аким кл╛╖ом в ▓абли╢е не▓. Тем ▒ам╗м ╖и▒ло ╡░аним╗╡ ╜лемен▓ов
не може▓ б╗▓╝ бол╝╕е ░азме░а ▓абли╢╗: ко╜┤┤и╢иен▓ заполнени┐
не бол╝╕е 1.
Коне╖но, и п░и ╡е╕и░овании ▒ ╢епо╖ками можно и▒пол╝зова▓╝
▒вободн╗е ме▒▓а в ╡е╕-▓абли╢е дл┐ ╡░анени┐ ▒пи▒ков (│п░ажнение 12.2-5), но п░и о▓к░╗▓ой ад░е▒а╢ии │каза▓ели вооб╣е не и▒пол╝з│╛▓▒┐: по▒ледова▓ел╝но▒▓╝ п░о▒ма▓░иваем╗╡ ┐╖еек в╗╖и▒л┐е▓▒┐. За ▒╖е▓ ╜кономии пам┐▓и на │каза▓ел┐╡ можно │вели╖и▓╝
коли╖е▒▓во пози╢ий в ▓абли╢е, ╖▓о │мен╝╕ае▓ ╖и▒ло коллизий и
▒ок░а╣ае▓ пои▒к.
Ч▓об╗ добави▓╝ нов╗й ╜лемен▓ в ▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией, ┐╖ейки ко▓о░ой зан│ме░ован╗ ╢ел╗ми ╖и▒лами о▓ 0 до m ; 1,
м╗ п░о▒ма▓░иваем ее, пока не найдем ▒вободное ме▒▓о. Е▒ли в▒┐кий ░аз п░о▒ма▓░ива▓╝ ┐╖ейки под░┐д (0; 1; : : :; m ; 1), по▓░еб│е▓▒┐ в░ем┐ (n), но ▒│▓╝ в ▓ом, ╖▓о по░┐док п░о▒мо▓░а ▓абли╢╗
зави▒и▓ о▓ кл╛╖а! Ин╗ми ▒ловами, м╗ добавл┐ем к ╡е╕-┤│нк╢ии
в▓о░ой а░г│мен▓ | номе░ поп╗▓ки (н│ме░а╢и╛ на╖инаем ▒ н│л┐),
▓ак ╖▓о ╡е╕-┤│нк╢и┐ имее▓ вид
h : U f0; 1; : : :; m ; 1g ! f0; 1; : : :; m ; 1g
(U | множе▒▓во кл╛╖ей). По▒ледова▓ел╝но▒▓╝ и▒п░обованн╗╡
ме▒▓ (probe sequence), или (ко░о╖е) по▒ледова▓ел╝но▒▓╝ п░об дл┐
данного кл╛╖а k имее▓ вид
hh(k; 0); h(k; 1); : : :; h(k; m ; 1)i;
┤│нк╢и┐ h должна б╗▓╝ ▓акой, ╖▓об╗ каждое из ╖и▒ел о▓ 0 до m ; 1
в▒▓░е▓ило▒╝ в ╜▓ой по▒ледова▓ел╝но▒▓и ░овно один ░аз (дл┐ каждого кл╛╖а в▒е пози╢ии ▓абли╢╗ должн╗ б╗▓╝ до▒▓│пн╗). Ниже
п░иводи▓▒┐ ▓ек▒▓ п░о╢ед│░╗ добавлени┐ в ▓абли╢│ T ▒ о▓к░╗▓ой
ад░е▒а╢ией; в нем под░аз│мевае▓▒┐, ╖▓о запи▒и не ▒оде░жа▓ дополни▓ел╝ной ин┤о░ма╢ии, к░оме кл╛╖а. Е▒ли ┐╖ейка ▓абли╢╗ п│▒▓а, в ней запи▒ан nil (┤ик▒и░ованное зна╖ение, о▓ли╖ное о▓ в▒е╡
кл╛╖ей).
238
Глава 12 Хе╕-▓абли╢╗
Hash-Insert(T; k)
1 i 0
2 repeat j h(k; i)
3
if T [j ] = nil
4
then T [j ] k
5
return j
6
else i i + 1
7 until i = m
8 error └пе░еполнение ╡е╕-▓абли╢╗┴
П░и пои▒ке ╜лемен▓а ▒ кл╛╖ом k в ▓абли╢е ▒ о▓к░╗▓ой ад░е▒а╢ией ┐╖ейки ▓абли╢╗ п░о▒ма▓░ива╛▓▒┐ в ▓ом же по░┐дке, ╖▓о и п░и
добавлении в нее ╜лемен▓а ▒ кл╛╖ом k. Е▒ли п░и ╜▓ом м╗ на▓╗каем▒┐ на ┐╖ейк│, в ко▓о░ой запи▒ан nil, ▓о можно б╗▓╝ │ве░енн╗м,
╖▓о и▒комого ╜лемен▓а в ▓абли╢е не▓ (ина╖е он б╗л б╗ зане▒ен в
╜▓│ ┐╖ейк│). (Внимание: м╗ п░едполагаем, ╖▓о никакие ╜лемен▓╗
из ▓абли╢╗ не │дал┐╛▓▒┐!)
Во▓ ▓ек▒▓ п░о╢ед│░╗ пои▒ка Hash-Search (е▒ли ╜лемен▓ ▒ кл╛╖ом k ▒оде░жи▓▒┐ в ▓абли╢е T в пози╢ии j , п░о╢ед│░а возв░а╣ае▓ j ,
в п░о▓ивном ▒л│╖ае она возв░а╣ае▓ nil).
Hash-Search(T; k)
1 i 0
2 repeat j h(k; i)
3
if T [j ] = k
4
then return j
5
i i+1
6 until T [j ] = nil или i = m
7 return nil
Удали▓╝ ╜лемен▓ из ▓абли╢╗ ▒ о▓к░╗▓ой ад░е▒а╢ией не ▓ак п░о▒▓о. Е▒ли п░о▒▓о запи▒а▓╝ на его ме▒▓о nil, ▓о в дал╝ней╕ем м╗ не
▒можем най▓и ▓е ╜лемен▓╗, в момен▓ добавлени┐ ко▓о░╗╡ в ▓абли╢│ ╜▓о ме▒▓о б╗ло зан┐▓о (и из-за ╜▓ого б╗л в╗б░ан более далекий
╜лемен▓ в по▒ледова▓ел╝но▒▓и и▒п░обованн╗╡ ме▒▓). Возможное
░е╕ение | запи▒╗ва▓╝ на ме▒▓о │даленного ╜лемен▓а не nil, а ▒пе╢иал╝ное зна╖ение deleted (└│дален┴), и п░и добавлении ░а▒▒ма▓░ива▓╝ ┐╖ейк│ ▒ запи▒╝╛ deleted как ▒вободн│╛, а п░и пои▒ке |
как зан┐▓│╛ (и п░одолжа▓╝ пои▒к). Недо▒▓а▓ок ╜▓ого под╡ода в
▓ом, ╖▓о в░ем┐ пои▒ка може▓ оказа▓╝▒┐ бол╝╕им даже п░и низком
ко╜┤┤и╢иен▓е заполнени┐. По╜▓ом│, е▒ли ▓░еб│е▓▒┐ │дал┐▓╝ запи▒и из ╡е╕-▓абли╢╗, п░едпо╖▓ение об╗╖но о▓да╛▓ ╡е╕и░овани╛ ▒
╢епо╖ками.
В на╕ем анализе о▓к░╗▓ой ад░е▒а╢ии м╗ б│дем и▒╡оди▓╝ из
п░едположени┐, ╖▓о ╡е╕и░ование ░авноме░но (uniform) в ▓ом ▒м╗▒ле, ╖▓о в▒е m! пе░е▒▓ановок множе▒▓ва f0; 1; : : :; m ; 1g ░авнове-
О▓к░╗▓а┐ ад░е▒а╢и┐
239
░о┐▓н╗. На п░ак▓ике ╜▓о в░┐д ли ▓ак, ╡о▓┐ б╗ по ▓ой п░и╖ине,
╖▓о дл┐ ╜▓ого необ╡одимо, ╖▓об╗ ╖и▒ло возможн╗╡ кл╛╖ей б╗ло
как миним│м 6 m!, где m | ╖и▒ло ╡е╕-зна╖ений. По╜▓ом│ об╗╖но
пол╝з│╛▓▒┐ более или менее │да╖н╗ми ▒│░░ога▓ами, в░оде опи▒╗ваемого ниже двойного ╡е╕и░овани┐.
Об╗╖но п░имен┐╛▓ ▓акие ▓░и ▒по▒оба в╗╖и▒лени┐ по▒ледова▓ел╝но▒▓и и▒п░обованн╗╡ ме▒▓: линейн╗й, квад░а▓и╖н╗й и двойное ╡е╕и░ование. В каждом из ╜▓и╡ ▒по▒обов по▒ледова▓ел╝но▒▓╝ hh(k; 0); h(k; 1); : : :; h(k; m ; 1)i б│де▓ пе░е▒▓ановкой множе▒▓ва f0; 1; : : :; m ; 1g п░и л╛бом зна╖ении кл╛╖а k, но ни один
из ╜▓и╡ ▒по▒обов не ┐вл┐е▓▒┐ ░авноме░н╗м по ▓ой п░и╖ине, ╖▓о
они да╛▓ не более m2 пе░е▒▓ановок из m! возможн╗╡. Бол╝╕е в▒его ░азн╗╡ пе░е▒▓ановок пол│╖ае▓▒┐ п░и двойном ╡е╕и░овании; не
│диви▓ел╝но, ╖▓о и на п░ак▓ике ╜▓о▓ ▒по▒об дае▓ л│╖╕ие ░ез│л╝▓а▓╗.
Линейна┐ по▒ледова▓ел╝но▒▓╝ п░об
П│▒▓╝ h0 : U ! f0; 1; : : :; m ; 1g | └об╗╖на┐┴ ╡е╕-┤│нк╢и┐.
Ф│нк╢и┐, оп░едел┐╛╣а┐ линейн│╛ по▒ледова▓ел╝но▒▓╝ п░об (linear probing), задае▓▒┐ ┤о░м│лой
h(k; i) = (h0 (k) + i) mod m:
Ин╗ми ▒ловами, п░и ░або▓е ▒ кл╛╖ом k на╖ина╛▓ ▒ ┐╖ейки T [h0(k)],
а за▓ем пе░еби░а╛▓ ┐╖ейки ▓абли╢╗ под░┐д: T [h0 (k) + 1]; T [h0(k) +
2]; : : : (по▒ле T [m ; 1] пе░е╡од┐▓ к T [0]). По▒кол╝к│ по▒ледова▓ел╝но▒▓╝ п░об полно▒▓╝╛ оп░едел┐е▓▒┐ пе░вой ┐╖ейкой, ░еал╝но и▒пол╝з│е▓▒┐ в▒его ли╕╝ m ░азли╖н╗╡ по▒ледова▓ел╝но▒▓ей.
О▓к░╗▓│╛ ад░е▒а╢и╛ ▒ линейной по▒ледова▓ел╝но▒▓╝╛ п░об легко ░еализова▓╝, но │ ╜▓ого ме▓ода е▒▓╝ один недо▒▓а▓ок: он може▓
п░иве▒▓и к об░азовани╛ кла▒▓е░ов, ▓о е▒▓╝ длинн╗╡ по▒ледова▓ел╝но▒▓ей зан┐▓╗╡ ┐╖еек, ид│╣и╡ под░┐д (по-англий▒ки ╜▓о ┐вление наз╗вае▓▒┐ primary clustering). Э▓о │длин┐е▓ пои▒к; в ▒амом
деле, е▒ли в ▓абли╢е из m ┐╖еек в▒е ┐╖ейки ▒ ╖е▓н╗ми номе░ами
зан┐▓╗, а ┐╖ейки ▒ не╖е▓н╗ми номе░ами ▒вободн╗, ▓о ▒░еднее ╖и▒ло п░об п░и пои▒ке ╜лемен▓а, о▓▒│▓▒▓в│╛╣его в ▓абли╢е, е▒▓╝ 1;5;
Е▒ли, однако, ▓е же m=2 зан┐▓╗╡ ┐╖еек ид│▓ под░┐д, ▓о ▒░еднее
╖и▒ло п░об п░име░но ░авно m=8 = n=4 (n | ╖и▒ло зан┐▓╗╡ ме▒▓
в ▓абли╢е). Тенден╢и┐ к об░азовани╛ кла▒▓е░ов об║┐▒н┐е▓▒┐ п░о▒▓о: е▒ли i заполненн╗╡ ┐╖еек ид│▓ под░┐д, ве░о┐▓но▒▓╝ ▓ого, ╖▓о
п░и о╖е░едной в▒▓авке в ▓абли╢│ б│де▓ и▒пол╝зована ┐╖ейка, ▒лед│╛╣а┐ непо▒░ед▒▓венно за ними, е▒▓╝ (i + 1)=m, в ▓о в░ем┐ как
дл┐ ▒вободной ┐╖ейки, п░ед╕е▒▓венни╢а ко▓о░ой ▓акже ▒вободна,
ве░о┐▓но▒▓╝ б╗▓╝ и▒пол╝зованной ░авна в▒его ли╕╝ 1=m. В▒е в╗╕еизложенное показ╗вае▓, ╖▓о линейна┐ по▒ледова▓ел╝но▒▓╝ п░об
довол╝но далека о▓ ░авноме░ного ╡е╕и░овани┐.
240
Глава 12 Хе╕-▓абли╢╗
Квад░а▓и╖на┐ по▒ледова▓ел╝но▒▓╝ п░об
Ф│нк╢и┐, оп░едел┐╛╣а┐ квад░а▓и╖н│╛ по▒ледова▓ел╝но▒▓╝
п░об (quadratic probing), задае▓▒┐ ┤о░м│лой
h(k; i) = (h0 (k) + c1i + c2i2) mod m;
(12.5)
где по-п░ежнем│ h0 | об╗╖на┐ ╡е╕-┤│нк╢и┐, а c1 и c2 6= 0 | неко▓о░╗е кон▒▓ан▓╗. П░об╗ на╖ина╛▓▒┐ ▒ ┐╖ейки номе░ T [h0 (k)], как
и п░и линейном ме▓оде, но дал╝╕е ┐╖ейки п░о▒ма▓░ива╛▓▒┐ не
под░┐д: номе░ п░об│емой ┐╖ейки квад░а▓и╖но зави▒и▓ о▓ номе░а
поп╗▓ки. Э▓о▓ ме▓од ░або▓ае▓ зна╖и▓ел╝но л│╖╕е, ╖ем линейн╗й,
но е▒ли м╗ ╡о▓им, ╖▓об╗ п░и п░о▒мо▓░е ╡е╕-▓абли╢╗ и▒пол╝зовали▒╝ в▒е ┐╖ейки, зна╖ени┐ m, c1 и c2 нел╝з┐ в╗би░а▓╝ как попало;
один из ▒по▒обов в╗бо░а опи▒ан в зада╖е 12-4. Как и п░и линейном
ме▓оде, в▒┐ по▒ледова▓ел╝но▒▓╝ п░об оп░едел┐е▓▒┐ ▒воим пе░в╗м
╖леном, ▓ак ╖▓о оп┐▓╝ пол│╖ае▓▒┐ в▒его m ░азли╖н╗╡ пе░е▒▓ановок. Тенден╢ии к об░азовани╛ кла▒▓е░ов бол╝╕е не▓, но аналоги╖н╗й ╜┤┤ек▓ п░о┐вл┐е▓▒┐ в (более м┐гкой) ┤о░ме об░азовани┐
в▓о░и╖н╗╡ кла▒▓е░ов (secondary clustering).
Двойное ╡е╕и░ование
Двойное ╡е╕и░ование (double hashing) | один из л│╖╕и╡ ме▓одов о▓к░╗▓ой ад░е▒а╢ии. Пе░е▒▓ановки индек▒ов, возника╛╣ие
п░и двойном ╡е╕и░овании, облада╛▓ многими ▒вой▒▓вами, п░и▒│╣ими ░авноме░ном│ ╡е╕и░овани╛. П░и двойном ╡е╕и░овании
┤│нк╢и┐ h имее▓ вид
h(k; i) = (h1(k) + ih2(k)) mod m;
где h1 и h2 | об╗╖н╗е ╡е╕-┤│нк╢ии. Ин╗ми ▒ловами, по▒ледова▓ел╝но▒▓╝ п░об п░и ░або▓е ▒ кл╛╖ом k п░ед▒▓авл┐е▓ ▒обой а░и┤ме▓и╖е▒к│╛ п░ог░е▒▒и╛ (по мод│л╛ m) ▒ пе░в╗м ╖леном h1 (k) и
╕агом h2 (k). П░име░ двойного ╡е╕и░овани┐ п░иведен на ░и▒. 12.5.
Ч▓об╗ по▒ледова▓ел╝но▒▓╝ и▒п░обованн╗╡ ме▒▓ пок░╗ла в▒╛ ▓абли╢│, зна╖ение h2 (k) должно б╗▓╝ взаимно п░о▒▓╗м ▒ m (е▒ли
наибол╝╕ий об╣ий дели▓ел╝ h2(k) и m е▒▓╝ d, ▓о а░и┤ме▓и╖е▒ка┐
п░ог░е▒▒и┐ по мод│л╛ m ▒ ░азно▒▓╝╛ h2 (k) займе▓ дол╛ 1=d в
▓абли╢е; ▒м. глав│ 33). П░о▒▓ой ▒по▒об доби▓╝▒┐ в╗полнени┐ ╜▓ого │▒лови┐ | в╗б░а▓╝ в ка╖е▒▓ве m ▒▓епен╝ двойки, а ┤│нк╢и╛
h2 вз┐▓╝ ▓ак│╛, ╖▓об╗ она п░инимала ▓ол╝ко не╖е▓н╗е зна╖ени┐.
Д░│гой ва░иан▓: m | п░о▒▓ое ╖и▒ло, зна╖ени┐ h2 | ╢ел╗е положи▓ел╝н╗е ╖и▒ла, мен╝╕ие m. Нап░име░, дл┐ п░о▒▓ого m можно
положи▓╝
h1 (k) = k mod m;
h2 (k) = 1 + (k mod m0);
О▓к░╗▓а┐ ад░е▒а╢и┐
241
Добавление ╜лемен▓а в ▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией п░и двойном
╡е╕и░овании. В на╕ем ▒л│╖ае m = 13, h1 (k) = k mod 13, h2 (k) = 1+(k mod 11).
Е▒ли k = 14, ▓о по▒ледова▓ел╝но▒▓╝ п░об б│де▓ ▓ака┐: 1 и 5 зан┐▓╗, 9 ▒вободно,
поме╣аем ▓│да.
Ри▒. 12.5
где m0 ╖│▓╝ мен╝╕е, ╖ем m (нап░име░, m0 = m ; 1 или m ; 2).
Е▒ли, нап░име░, m = 701, m0 = 700 и k = 123456, ▓о h1 (k) = 80
и h2 (k) = 257. С▓ало б╗▓╝, по▒ледова▓ел╝но▒▓╝ п░об на╖инае▓▒┐ ▒
пози╢ии номе░ 80 и иде▓ далее ▒ ╕агом 257, пока в▒┐ ▓абли╢а не
б│де▓ п░о▒мо▓░ена (или не б│де▓ найдено н│жное ме▒▓о).
В о▓ли╖ие о▓ линейного и квад░а▓и╖ного ме▓одов, п░и двойном
╡е╕и░овании можно пол│╖и▓╝ (п░и п░авил╝ном в╗бо░е h1 и h2 )
не m, а (m2) ░азли╖н╗╡ пе░е▒▓ановок, по▒кол╝к│ каждой па░е (h1 (k); h2(k)) ▒оо▓ве▓▒▓в│е▓ ▒во┐ по▒ледова▓ел╝но▒▓╝ п░об. Благода░┐ ╜▓ом│ п░оизводи▓ел╝но▒▓╝ двойного ╡е╕и░овани┐ близка к
▓ой, ╖▓о пол│╖ила▒╝ б╗ п░и на▒▓о┐╣ем ░авноме░ном ╡е╕и░овании.
Анализ ╡е╕и░овани┐ ▒ о▓к░╗▓ой ад░е▒а╢ией
Так же, как и п░и анализе ╡е╕и░овани┐ ▒ ╢епо╖ками, п░и анализе
о▓к░╗▓ой ад░е▒а╢ии м╗ б│дем о╢енива▓╝ ▒▓оимо▒▓╝ опе░а╢ий в
▓е░мина╡ ко╜┤┤и╢иен▓а заполнени┐ = n=m (n | ╖и▒ло запи▒ей,
m | ░азме░ ▓абли╢╗). По▒кол╝к│ п░и о▓к░╗▓ой ад░е▒а╢ии каждой
┐╖ейке ▒оо▓ве▓▒▓в│е▓ не более одной запи▒и, 6 1.
М╗ б│дем и▒╡оди▓╝ из п░едположени┐ о ░авноме░но▒▓и ╡е╕и░овани┐. В ╜▓ой идеализи░ованной ▒╡еме п░едполагае▓▒┐ ▒лед│╛╣ее:
м╗ в╗би░аем кл╛╖и ▒л│╖айн╗м об░азом, п░и╖ем в▒е m! возможн╗╡
по▒ледова▓ел╝но▒▓ей п░об ░авнове░о┐▓н╗. По▒кол╝к│ ╜▓а идеализи░ованна┐ ▒╡ема далека о▓ ░еал╝но▒▓и, доказ╗ваем╗е ниже ░ез│л╝▓а▓╗ ▒лед│е▓ ░а▒▒ма▓░ива▓╝ не как ма▓ема▓и╖е▒кие ▓ео░ем╗,
опи▒╗ва╛╣ие ░або▓│ ░еал╝н╗╡ алго░и▓мов о▓к░╗▓ой ад░е▒а╢ии,
242
Глава 12 Хе╕-▓абли╢╗
а как ╜в░и▒▓и╖е▒кие о╢енки.
На╖нем ▒ ▓ого, ╖▓о о╢еним в░ем┐ на пои▒к ╜лемен▓а, о▓▒│▓▒▓в│╛╣его в ▓абли╢е.
Тео░ема 12.5. Ма▓ема▓и╖е▒кое ожидание ╖и▒ла п░об п░и пои▒ке
в ▓абли╢е ▒ о▓к░╗▓ой ад░е▒а╢ией о▓▒│▓▒▓в│╛╣его в ней ╜лемен▓а не п░ево▒╡оди▓ 1=(1 ; ) (╡е╕и░ование п░едполагае▓▒┐ ░авноме░н╗м, ╖е░ез < 1 обозна╖ен ко╜┤┤и╢иен▓ заполнени┐).
Доказа▓ел╝▒▓во. М╗ п░едполагаем, ╖▓о ▓абли╢а ┤ик▒и░ована, а
и▒ком╗й ╜лемен▓ в╗би░ае▓▒┐ ▒л│╖айно, п░и╖ем в▒е возможн╗е по▒ледова▓ел╝но▒▓и п░об ░авнове░о┐▓н╗. На▒ ин▓е░е▒│е▓ ма▓ема▓и╖е▒кое ожидание ╖и▒ла поп╗▓ок, необ╡одим╗╡ дл┐ обна░│жени┐
▒вободной ┐╖ейки, ▓о е▒▓╝ ▒│мма
1+
1
X
i=0
ipi:
(12.6)
где pi | ве░о┐▓но▒▓╝ ▓ого, ╖▓о м╗ в▒▓░е▓им ░овно i зан┐▓╗╡ ┐╖еек.
Кажда┐ нова┐ п░оба в╗би░ае▓▒┐ ░авноме░но ▒░еди о▒▓ав╕и╡▒┐ не и▒п░обованн╗ми ┐╖еек; е▒ли ░аз░е╕и▓╝ п░обова▓╝ пов▓о░но
│же и▒п░обованн╗е ┐╖ейки, ▓о ╖а▒▓╝ п░об п░опаде▓ з░┐ и ма▓ема▓и╖е▒кое ожидание ▓ол╝ко │вели╖и▓▒┐. Но дл┐ ╜▓ого нового ва░иан▓а м╗ │же в╗╖и▒л┐ли ма▓ема▓и╖е▒кое ожидание (░аздел 6.4,
геоме▓░и╖е▒кое ░а▒п░еделение), и оно ░авно
1=(1 ; )
(12.7)
по▒кол╝к│ ве░о┐▓но▒▓╝ │▒пе╡а дл┐ каждой п░об╗ ░авна 1 ; .
Е▒ли ко╜┤┤и╢иен▓ заполнени┐ о▓делен о▓ едини╢╗, ▓ео░ема 12.5
п░ед▒каз╗вае▓, ╖▓о пои▒к о▓▒│▓▒▓в│╛╣его ╜лемен▓а б│де▓ в ▒░еднем п░о╡оди▓╝ за в░ем┐ O(1). Нап░име░, е▒ли ▓абли╢а заполнена
наполовин│, ▓о ▒░еднее ╖и▒ло п░об б│де▓ не бол╝╕е 1=(1 ; 0;5) = 2,
а е▒ли на 90%, ▓о не бол╝╕е 1=(1 ; 0;9) = 10.
Из ▓ео░ем╗ 12.5 немедленно пол│╖ае▓▒┐ и о╢енка на ▒▓оимо▒▓╝
опе░а╢ии добавлени┐ к ▓абли╢е:
След▒▓вие 12.6. В п░едположении ░авноме░ного ╡е╕и░овани┐ ма▓ема▓и╖е▒кое ожидание ╖и▒ла п░об п░и добавлении нового ╜лемен▓а в ▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией не п░ево▒╡оди▓ 1=(1 ; ), где
< 1 | ко╜┤┤и╢иен▓ заполнени┐.
Доказа▓ел╝▒▓во. П░и добавлении в ▓абли╢│ о▓▒│▓▒▓в│╛╣его в
ней ╜лемен▓а п░ои▒╡од┐▓ ▓е же п░об╗, ╖▓о п░и пои▒ке о▓▒│▓▒▓в│╛╣его в в ней ╜лемен▓а.
О╢ени▓╝ ▒░еднее в░ем┐ │▒пе╕ного пои▒ка немногим ▒ложнее.
О▓к░╗▓а┐ ад░е▒а╢и┐
243
Тео░ема 12.7. Ра▒▒мо▓░им ▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией, ко╜┤┤и╢иен▓ заполнени┐ ко▓о░ой ░авен < 1. П│▒▓╝ ╡е╕и░ование ░авноме░но. Тогда ма▓ема▓и╖е▒кое ожидание ╖и▒ла п░об п░и
│▒пе╕ном пои▒ке ╜лемен▓а в ▓абли╢е не п░ево▒╡оди▓
1 ln 1 ;
1;
е▒ли ▒╖и▓а▓╝, ╖▓о кл╛╖ дл┐ │▒пе╕ного пои▒ка в ▓абли╢е в╗би░ае▓▒┐ ▒л│╖айн╗м об░азом и в▒е ▓акие в╗бо░╗ ░авнове░о┐▓н╗.
Доказа▓ел╝▒▓во. У▓о╖ним, как п░оизводи▓▒┐ │▒░еднение: ▒на╖ала
м╗ заполн┐ем ▓абли╢│ незави▒имо в╗би░аем╗ми кл╛╖ами, п░и╖ем
дл┐ каждого из ни╡ в╗полн┐е▓▒┐ п░едположение ░авноме░ного ╡е╕и░овани┐. За▓ем м╗ │▒░едн┐ем по в▒ем ╜лемен▓ам ▓абли╢╗ в░ем┐
и╡ пои▒ка.
Заме▓им, ╖▓о п░и │▒пе╕ном пои▒ке кл╛╖а k м╗ делаем ▓е же
▒ам╗е п░об╗, ко▓о░╗е п░оизводили▒╝ п░и поме╣ении кл╛╖а k в
▓абли╢│. Тем ▒ам╗м ▒░еднее ╖и▒ло п░об п░и пои▒ке (│▒░еднение по
╜лемен▓ам) ░авно об╣ем│ ╖и▒л│ п░об п░и добавлении, деленном│ на
╖и▒ло ╜лемен▓ов в ▓абли╢е, ко▓о░ое м╗ обозна╖аем n. Ма▓ема▓и╖е▒кое ожидание об╣его ╖и▒ла п░об п░и добавлении ░авно ▒│мме
ма▓ема▓и╖е▒ки╡ ожиданий дл┐ каждого о▓дел╝ного ╕ага. К момен▓│ добавлени┐ (i+1)-го ╜лемен▓а в ▓абли╢е заполнено i пози╢ий,
ко╜┤┤и╢иен▓ заполнени┐ ░авен i=m (m | ╖и▒ло ме▒▓ в ▓абли╢е),
и ма▓ема▓и╖е▒кое ожидание не бол╝╕е 1=(1 ; i=m) = m=(m ; i).
По╜▓ом│ ▒│мма ма▓ема▓и╖е▒ки╡ ожиданий не п░ево▒╡оди▓
m + m + m + :::+ m :
m m;1 m;2
m;n+1
Э▓а ▒│мма ░авна m (1=(m ; n + 1) + : : : + 1=(m ; 1) + 1=m) и
о╢енивае▓▒┐ ▒ве░╡│ ▒ помо╣╝╛ ин▓ег░ала (3.10):
m
Zm
m;n
1 dt = m ln(m=(m ; n)):
t
В▒помина┐, ╖▓о об╣ее ╖и▒ло опе░а╢ий надо подели▓╝ на n, пол│╖аем о╢енк│ (m=n) ln(m=(m ; n)) = (1=) ln(1=(1 ; )).
Е▒ли, нап░име░, ▓абли╢а заполнена наполовин│, ▓о ▒░еднее ╖и▒ло
п░об дл┐ │▒пе╕ного пои▒ка не п░ево▒╡оди▓ 1;387, а е▒ли на 90%,
▓о 2;559.
Уп░ажнени┐
12.4-1 В╗полни▓е добавление кл╛╖ей 10; 22; 31; 4; 15; 28; 17; 88; 59
(в │казанном по░┐дке) в ╡е╕-▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией ░аз-
244
Глава 12 Хе╕-▓абли╢╗
ме░а m = 11. Дл┐ в╗╖и▒лени┐ по▒ледова▓ел╝но▒▓и п░об и▒пол╝з│е▓▒┐ линейн╗й ме▓од ▒ h0 (k) = k mod m. В╗полни▓е ▓о же задание, е▒ли и▒пол╝з│е▓▒┐ квад░а▓и╖н╗й ме▓од ▒ ▓ой же h0, c1 = 1,
c2 = 3, а ▓акже дл┐ двойного ╡е╕и░овани┐ ▒ h1 = h0 и h2 (k) =
1 + (k mod (m ; 1)).
12.4-2 Напи╕и▓е п░о╢ед│░│ Hash-Delete дл┐ │далени┐ ╜лемен▓а из ▓абли╢╗ ▒ о▓к░╗▓ой ад░е▒а╢ией, ░еализ│╛╣│╛ опи▒анн│╛
▒╡ем│ (▒о зна╖ением deleted), и пе░епи╕и▓е ▒оо▓ве▓▒▓в│╛╣им
об░азом п░о╢ед│░╗ Hash-Insert и Hash-Search.
12.4-3? Покажи▓е, ╖▓о п░и двойном ╡е╕и░овании (h(k; i) =
(h1 (k) + ih2(k)) mod m) по▒ледова▓ел╝но▒▓╝ п░об, ▒оо▓ве▓▒▓в│╛╣а┐ кл╛╖│ k, ┐вл┐е▓▒┐ пе░е▒▓ановкой множе▒▓ва f0; 1; : : :; m ; 1g
▓огда и ▓ол╝ко ▓огда, когда h2 (k) взаимно п░о▒▓о ▒ m. (Указание:
▒м. глав│ 33.)
12.4-4 Найди▓е ╖и▒ленн╗е зна╖ени┐ ве░╡ни╡ о╢енок ▓ео░ем 12.5
и 12.7 дл┐ пои▒ке п░и▒│▓▒▓в│╛╣его и о▓▒│▓▒▓в│╛╣его ╜лемен▓ов
дл┐ ко╜┤┤и╢иен▓ов заполнени┐ 1=2, 3=4 и 7=8.
12.4-5? П░едположим, ╖▓о м╗ поме╣аем n запи▒ей в ▓абли╢│ ▒
о▓к░╗▓ой ад░е▒а╢ией; ░азме░ ▓абли╢╗ ░авен m, ╡е╕и░ование ░авноме░но, кл╛╖и запи▒ей в╗би░а╛▓▒┐ ▒л│╖айн╗м об░азом. Обозна╖им ╖е░ез p(n; m) ве░о┐▓но▒▓╝ ▓ого, ╖▓о п░и ╜▓ом не п░оизойде▓
коллизий. Покажи▓е, ╖▓о p(n; m) 6 e;n(n;1)=2m . (Указание: ▒м. не░авен▒▓во
(2.7).) Э▓а вели╖ина о╖ен╝ мала, когда n заме▓но бол╝p
╕е n.
12.4-6? Ча▒▓и╖н╗е ▒│мм╗ га░мони╖е▒кого ░┐да можно о╢ени▓╝
▓ак:
Hn = ln n + + 2"n ;
(12.8)
где = 0;5772156649 : : : | ▓ак наз╗ваема┐ по▒▓о┐нна┐ Эйле░а (Euler's constant) и 0 < " < 1 (доказа▓ел╝▒▓во ▒м. в книге Кн│▓а [121]).
Как и▒пол╝зова▓╝ ╜▓о дл┐ о╢енки к│▒ка га░мони╖е▒кого ░┐да в доказа▓ел╝▒▓ве ▓ео░ем╗ 12.7?
12.4-7? Найди▓е нен│левое зна╖ение ко╜┤┤и╢иен▓а заполнени┐ ,
п░и ко▓о░ом о╢енка ▒░еднего ╖и▒ла п░об п░и пои▒ке о▓▒│▓▒▓в│╛╣его ╜лемен▓а (▓ео░ема 12.5) вдвое п░ево▒╡оди▓ о╢енк│ ▒░еднего
╖и▒ла п░об п░и │▒пе╕ном пои▒ке (▓ео░ема 12.7).
Зада╖и к главе 12
245
Зада╖и
12-1 Наибол╝╕ее ╖и▒ло п░об п░и добавлении ╜лемен▓а
Ра▒▒мо▓░им ╡е╕-▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией ░азме░а m, в
ко▓о░│╛ один за д░│гим поме╣а╛▓▒┐ n кл╛╖ей, п░и╖ем n 6 m=2.
П░едположим, ╖▓о ╡е╕и░ование ░авноме░но.
а. Покажи▓е, ╖▓о дл┐ л╛бого i = 1; 2; : : :; n ве░о┐▓но▒▓╝ ▓ого, ╖▓о
п░и добавлении i-го кл╛╖а в ▓абли╢│ п░оизо╕ло более k п░об,
не п░ево▒╡оди▓ 2;k .
б. Покажи▓е, ╖▓о дл┐ л╛бого i = 1; 2; : : :; n ве░о┐▓но▒▓╝ ▓ого, ╖▓о
п░и добавлении i-го кл╛╖а в ▓абли╢│ п░оизо╕ло более 2 lg n
п░об, не п░ево▒╡оди▓ 1=n2 .
П│▒▓╝ X | ▒л│╖айна┐ вели╖ина, ░авна┐ мак▒имал╝ном│ ╖и▒л│ п░об
п░и добавлении ╜лемен▓ов ▒ номе░ами 1; 2; : : :; n.
в. Покажи▓е, ╖▓о PfX > 2 lg ng 6 1=n.
г. Покажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание вели╖ин╗ X (наибол╝╕его ╖и▒ла п░об) е▒▓╝ O(lg n).
12-2 Пои▒к в неизмен┐╛╣ем▒┐ множе▒▓ве
П│▒▓╝ м╗ ░або▓аем ▒ множе▒▓вом из n ╜лемен▓ов, в ко▓о░ом
кл╛╖и ┐вл┐╛▓▒┐ ╖и▒лами, а един▒▓венна┐ опе░а╢и┐, ко▓о░│╛ надо
подде░жива▓╝, | ╜▓о пои▒к (╜лемен▓╗ не добавл┐╛▓▒┐ и не │дал┐╛▓▒┐). Т░еб│е▓▒┐ ░еализова▓╝ пои▒к мак▒имал╝но ╜┤┤ек▓ивно (до
▓ого, как на╖н│▓ по▒▓│па▓╝ зап░о▒╗ на пои▒к, множе▒▓во можно
п░едва░и▓ел╝но об░або▓а▓╝, и в░ем┐ на ▓ак│╛ об░або▓к│ не ог░ани╖ено).
а. Покажи▓е, ╖▓о пои▒к можно ░еализова▓╝ ▓аким об░азом, ╖▓об╗ в ╡│д╕ем ▒л│╖ае он занимал в░ем┐ O(lg n), а дополни▓ел╝на┐
пам┐▓╝ (▒ве░╡ ▓ой, в ко▓о░ой ╡░ани▓▒┐ ▒амо множе▒▓во) не и▒пол╝зовала▒╝.
б. П│▒▓╝ м╗ ░е╕или запи▒а▓╝ ╜лемен▓╗ на╕его множе▒▓ва в ╡е╕▓абли╢│ ▒ о▓к░╗▓ой ад░е▒а╢ией, ▒о▒▓о┐╣│╛ из m ┐╖еек. П░едположим, ╖▓о ╡е╕и░ование ░авноме░но. П░и каком минимал╝ном об║еме m ; n дополни▓ел╝ной пам┐▓и ▒░едн┐┐ ▒▓оимо▒▓╝
опе░а╢ии пои▒ка ╜лемен▓а, о▓▒│▓▒▓в│╛╣его в множе▒▓ве, б│де▓
не ╡│же, ╖ем в п│нк▓е (а)? В ка╖е▒▓ве о▓ве▓а п░иведи▓е а▒имп▓о▓и╖е▒к│╛ о╢енк│ m ; n ╖е░ез n.
12-3 Длин╗ ╢епо╖ек п░и ╡е╕и░овании
Ра▒▒мо▓░им ╡е╕-▓абли╢│ ▒ n ┐╖ейками, в ко▓о░ой коллизии ░аз░е╕а╛▓▒┐ ▒ помо╣╝╛ ╢епо╖ек. Хе╕и░ование ░авноме░но: кажд╗й
нов╗й кл╛╖ имее▓ ░авн╗е ╕ан▒╗ попа▒▓╝ во в▒е ┐╖ейки незави▒имо
246
Глава 12 Хе╕-▓абли╢╗
о▓ п░ед╗д│╣и╡. П│▒▓╝ M | мак▒имал╝на┐ длина ╢епо╖ек по▒ле добавлени┐ n кл╛╖ей. Ва╕а зада╖а | доказа▓╝, ╖▓о ма▓ема▓и╖е▒кое
ожидание M е▒▓╝ O(lg n= lg lg n).
а. Фик▒и░│ем неко▓о░ое ╡е╕-зна╖ение. П│▒▓╝ Qk | ве░о┐▓но▒▓╝
▓ого, ем│ ▒оо▓ве▓▒▓в│е▓ k ░азли╖н╗╡ кл╛╖ей. Покажи▓е, ╖▓о
n;k
k 1
1
k
1;
:
Q =C
k
n
n
n
б. П│▒▓╝ Pk | ве░о┐▓но▒▓╝ ▓ого, ╖▓о мак▒имал╝на┐ длина ╢епо╖ки
░авна k. Покажи▓е, ╖▓о Pk 6 nQk .
в. В╗веди▓е из ┤о░м│л╗ С▓и░линга (2.11), ╖▓о Qk < ek =kk .
г. Покажи▓е, ╖▓о ▒│╣е▒▓в│е▓ ▓ака┐ кон▒▓ан▓а c > 1, ╖▓о Qk <
1=n3 п░и k > c lg n= lg lg n. Закл╛╖и▓е о▓▒╛да, ╖▓о Pk < 1=n2
п░и ▓аки╡ k.
д. Покажи▓е, ╖▓о ма▓ема▓и╖е▒кое ожидание вели╖ин╗ M не п░ево▒╡оди▓
c
lg
n
c
lg
n
P M > lg lg n n + P M 6 lg lg n lgc lglgnn ;
и в╗веди▓е о▓▒╛да, ╖▓о ╜▓о ма▓ема▓и╖е▒кое ожидание е▒▓╝
O(lg n= lg lg n).
12-4 П░име░ квад░а▓и╖ной по▒ледова▓ел╝но▒▓и п░об
П│▒▓╝ нам надо поме▒▓и▓╝ запи▒╝ ▒ кл╛╖ом k в ╡е╕-▓абли╢│,
┐╖ейки ко▓о░ой п░он│ме░ован╗ ╖и▒лами 0; 1; : : :; m ; 1. У на▒ е▒▓╝
╡е╕-┤│нк╢и┐ h, о▓об░ажа╛╣а┐ множе▒▓во кл╛╖ей в множе▒▓во
f0; 1; : : :; m ; 1g. Б│дем дей▒▓вова▓╝ ▓ак:
1. На╡одим i h(k) и полагаем j 0.
2. П░ове░┐ем пози╢и╛ номе░ i. Е▒ли она ▒вободна, зано▒им ▓│да
запи▒╝ и на ╜▓ом о▒▓анавливаем▒┐.
3. Полагаем j (j +1) mod m и i (i + j ) mod m и возв░а╣аем▒┐
к ╕аг│ 2.
а. Покажи▓е, ╖▓о опи▒анн╗й алго░и▓м | ╖а▒▓н╗й ▒л│╖ай └квад░а▓и╖ного ме▓ода┴ дл┐ под╡од┐╣и╡ зна╖ений c1 и c2.
П░едположим, ╖▓о m ┐вл┐е▓▒┐ ▒▓епен╝╛ двойки.
б. Покажи▓е, ╖▓о в ╡│д╕ем ▒л│╖ае б│де▓ п░о▒мо▓░ена в▒┐ ▓абли╢а.
12-5 k-│ниве░▒ал╝ное ╡е╕и░ование
П│▒▓╝ H | ▒емей▒▓во ╡е╕-┤│нк╢ий, о▓об░ажа╛╣и╡ множе▒▓во возможн╗╡ кл╛╖ей U в f0; 1; : : :; m ; 1g. Б│дем гово░и▓╝,
╖▓о H ┐вл┐е▓▒┐ k-│ниве░▒ал╝н╗м, е▒ли дл┐ л╛бой по▒ледова▓ел╝но▒▓и k ░азли╖н╗╡ кл╛╖ей hx1 ; : : :; xk i ▒л│╖айна┐ вели╖ина
hh(x1); : : :; h(xk)i (где h | ▒л│╖айн╗й ╜лемен▓ H) п░инимае▓
в▒е mk ▒вои╡ возможн╗╡ зна╖ений ▒ ░авн╗ми ве░о┐▓но▒▓┐ми.
Заме╖ани┐ к главе 12
247
а. Покажи▓е, ╖▓о в▒┐кое 2-│ниве░▒ал╝ное ▒емей▒▓во │ниве░▒ал╝но.
б. Покажи▓е, ╖▓о ▒емей▒▓во H, опи▒анное в ░азделе 12.3.3, не ┐вл┐е▓▒┐ 2-│ниве░▒ал╝н╗м.
в. Ра▒╕и░им ▒емей▒▓во H из ░азд. 12.3.3 и ░а▒▒мо▓░им в▒евозможн╗е ┤│нк╢ии вида
ha;b (x) = ha(x) + b mod m;
где b | неко▓о░╗й в╗╖е▓ по мод│л╛ m. Покажи▓е, ╖▓о пол│╖енное ▒емей▒▓во б│де▓ 2-│ниве░▒ал╝н╗м.
Заме╖ани┐
Алго░и▓м╗ ╡е╕и░овани┐ п░ек░а▒но изложен╗ │ Кн│▓а [123] и
Гонне▓а [90]. Согла▒но Кн│▓│, ╡е╕-▓абли╢╗ и ме▓од ╢епо╖ек б╗ли изоб░е▓ен╗ Л│ном (H. P. Luhn) в 1953 год│. П░име░но в ▓о же
в░ем┐ Амдал╝ (G.M. Amdahl) изоб░ел о▓к░╗▓│╛ ад░е▒а╢и╛.
13
Двои╖н╗е де░ев╝┐ пои▒ка
Де░ев╝┐ пои▒ка (search trees) позвол┐╛▓ в╗полн┐▓╝ ▒лед│╛╣ие опе░а╢ии ▒ динами╖е▒кими множе▒▓вами: Search (пои▒к), Minimum
(миним│м), Maximum (мак▒им│м), Predecessor (п░ед╗д│╣ий),
Successor (▒лед│╛╣ий), Insert (в▒▓ави▓╝) и Delete (│дали▓╝).
Таким об░азом, де░ево пои▒ка може▓ б╗▓╝ и▒пол╝зовано и как ▒лова░╝, и как о╖е░ед╝ ▒ п░ио░и▓е▓ами.
В░ем┐ в╗полнени┐ о▒новн╗╡ опе░а╢ий п░опо░╢ионал╝но в╗▒о▓е
де░ева. Е▒ли двои╖ное де░ево └пло▓но заполнено┴ (в▒е его │░овни
име╛▓ мак▒имал╝но возможное ╖и▒ло ве░╕ин), ▓о его в╗▒о▓а (и
в░ем┐ в╗полнени┐ опе░а╢ий) п░опо░╢ионал╝н╗ лога░и┤м│ ╖и▒ла
ве░╕ин. Нап░о▓ив, е▒ли де░ево п░ед▒▓авл┐е▓ ▒обой линейн│╛ ╢епо╖к│ из n ве░╕ин, ╜▓о в░ем┐ в╗░а▒▓ае▓ до (n). В ░азделе 13.4
м╗ │видим, ╖▓о в╗▒о▓а ▒л│╖айного двои╖ного де░ева пои▒ка е▒▓╝
O(lg n), ▓ак ╖▓о в ╜▓ом ▒л│╖ае в░ем┐ в╗полнени┐ о▒новн╗╡ опе░а╢ий е▒▓╝ (lg n).
Коне╖но, возника╛╣ие на п░ак▓ике двои╖н╗е де░ев╝┐ пои▒ка
мог│▓ б╗▓╝ далеки о▓ ▒л│╖айн╗╡. Однако, п░ин┐в ▒пе╢иал╝н╗е ме░╗ по балан▒и░овке де░ев╝ев, м╗ можем га░ан▓и░ова▓╝, ╖▓о в╗▒о▓а де░ев╝ев ▒ n ве░╕инами б│де▓ O(log n). В главе 14 ░а▒▒мо▓░ен
один из под╡одов ▓акого ░ода (к░а▒но-╖е░н╗е де░ев╝┐). В главе 19
░а▒▒ма▓░ива╛▓▒┐ Б-де░ев╝┐, ко▓о░╗е о▒обенно │добн╗ дл┐ данн╗╡, ╡░ан┐╣и╡▒┐ во в▓о░и╖ной пам┐▓и ▒ п░оизвол╝н╗м до▒▓│пом
(на ди▒ке).
В ╜▓ой главе м╗ ░а▒▒мо▓░им о▒новн╗е опе░а╢ии ▒ двои╖н╗ми
де░ев╝┐ми пои▒ка и покажем, как напе╖а▓а▓╝ ╜лемен▓╗ де░ева в
не│б╗ва╛╣ем по░┐дке, как и▒ка▓╝ заданн╗й ╜лемен▓, как най▓и
мак▒имал╝н╗й или минимал╝н╗й ╜лемен▓, как най▓и ╜лемен▓, ▒лед│╛╣ий за данн╗м и п░ед╕е▒▓в│╛╣ий данном│, и, наконе╢, как
добави▓╝ или │дали▓╝ ╜лемен▓. Напомним, ╖▓о оп░еделение де░ева
и о▒новн╗е ▒вой▒▓ва де░ев╝ев п░ивод┐▓▒┐ в главе 5.
Ч▓о ▓акое двои╖ное де░ево пои▒ка?
249
Двои╖н╗е де░ев╝┐ пои▒ка. Левое подде░ево п░оизвол╝ной ве░╕ин╗ x
▒оде░жи▓ кл╛╖и, не п░ево▒╡од┐╣ие key[x], п░авое | не мен╝╕ие key[x]. Разн╗е
двои╖н╗е де░ев╝┐ пои▒ка мог│▓ п░ед▒▓авл┐▓╝ одно и ▓о же множе▒▓во. В░ем┐
в╗полнени┐ (в ╡│д╕ем ▒л│╖ае) бол╝╕ин▒▓ва опе░а╢ий п░опо░╢ионал╝но в╗▒о▓е
де░ева. (а) Двои╖ное де░ево пои▒ка в╗▒о▓╗ 2 ▒ 6 ве░╕инами. (б) Менее ╜┤┤ек▓ивное де░ево в╗▒о▓╗ 4, ▒оде░жа╣ее ▓е же кл╛╖и.
Ри▒. 13.1
13.1. Ч▓о ▓акое двои╖ное де░ево пои▒ка?
В двои╖ном де░еве пои▒ка (binary search tree; п░име░ п░иведен
на ░и▒. 13.1) кажда┐ ве░╕ина може▓ име▓╝ (или не име▓╝) левого и
п░авого ░ебенка; кажда┐ ве░╕ина, к░оме ко░н┐, имее▓ ░оди▓ел┐.
П░и п░ед▒▓авлении ▒ и▒пол╝зованием │каза▓елей м╗ ╡░аним дл┐
каждой ве░╕ин╗ де░ева, помимо зна╖ени┐ кл╛╖а key и дополни▓ел╝н╗╡ данн╗╡, ▓акже и │каза▓ели left, right и p (лев╗й ░ебенок,
п░ав╗й ░ебенок, ░оди▓ел╝). Е▒ли ░ебенка (или ░оди▓ел┐ | дл┐
ко░н┐) не▓, ▒оо▓ве▓▒▓в│╛╣ее поле ▒оде░жи▓ nil.
Кл╛╖и в двои╖ном де░еве пои▒ка ╡░ан┐▓▒┐ ▒ ▒обл╛дением ▒вой▒▓ва │по░┐до╖енно▒▓и (binary-search-tree property):
П│▒▓╝ x | п░оизвол╝на┐ ве░╕ина двои╖ного де░ева пои▒ка.
Е▒ли ве░╕ина y на╡оди▓▒┐ в левом подде░еве ве░╕ин╗ x, ▓о
key[y ] 6 key[x]. Е▒ли y на╡оди▓▒┐ в п░авом подде░еве x, ▓о
key[y ] > key[x].
Так, на ░и▒. 13.1(а) в ко░не де░ева ╡░ани▓▒┐ кл╛╖ 5, кл╛╖и 2, 3 и 5
левом подде░еве ко░н┐ не п░ево▒╡од┐▓ 5, а кл╛╖и 7 и 8 в п░авом |
не мен╝╕е 5. То же ▒амое ве░но дл┐ в▒е╡ ве░╕ин де░ева. Нап░име░,
кл╛╖ 3 на ░и▒. 13.1(а) не мен╝╕е кл╛╖а 2 в левом подде░еве и не
бол╝╕е кл╛╖а 5 в п░авом.
Свой▒▓во │по░┐до╖енно▒▓и позвол┐е▓ напе╖а▓а▓╝ в▒е кл╛╖и в не│б╗ва╛╣ем по░┐дке ▒ помо╣╝╛ п░о▒▓ого ░ек│░▒ивного алго░и▓ма
(наз╗ваемого по-англий▒ки inorder tree walk). Э▓о▓ алго░и▓м пе╖а▓ае▓ кл╛╖ ко░н┐ подде░ева по▒ле в▒е╡ кл╛╖ей его левого подде░ева, но пе░ед кл╛╖ами п░авого подде░ева. (Заме▓им в ▒кобка╡,
250
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
╖▓о по░┐док, п░и ко▓о░ом ко░ен╝ п░ед╕е▒▓в│е▓ обоим подде░ев╝┐м, наз╗вае▓▒┐ preorder; по░┐док, в ко▓о░ом ко░ен╝ ▒лед│е▓ за
ними, наз╗вае▓▒┐ postorder.)
В╗зов Inorder-Tree-Walk (root[T ]) пе╖а▓ае▓ (в │казанном по░┐дке) в▒е кл╛╖и, в╡од┐╣ие в де░ево T ▒ ко░нем root[T ].
Inorder-Tree-Walk (x)
1 if x 6= nil
2 then Inorder-Tree-Walk (left[x])
3
напе╖а▓а▓╝ key[x]
4
Inorder-Tree-Walk (right[x])
К п░име░│, дл┐ обои╡ де░ев╝ев ░и▒. 13.1 б│де▓ напе╖а▓ано
2; 3; 5; 5; 7; 8. Свой▒▓во │по░┐до╖енно▒▓и га░ан▓и░│е▓ п░авил╝но▒▓╝ алго░и▓ма (инд│к╢и┐ по в╗▒о▓е подде░ева). В░ем┐ ░або▓╗
на де░еве ▒ n ве░╕инами е▒▓╝ (n): на кажд│╛ ве░╕ин│ ▓░а▓и▓▒┐
ог░ани╖енное в░ем┐ (помимо ░ек│░▒ивн╗╡ в╗зовов) и кажда┐
ве░╕ина об░аба▓╗вае▓▒┐ один ░аз.
Уп░ажнени┐
13.1-1 На░и▒│й▓е двои╖н╗е де░ев╝┐ пои▒ка в╗▒о▓╗ 2, 3, 4, 5 и 6
дл┐ одного и ▓ого же множе▒▓ва кл╛╖ей f1; 4; 5; 10; 16; 17; 21g.
13.1-2 К│╖и из ░аздела 7.1 ▓акже б╗ли двои╖н╗ми де░ев╝┐ми, и
▓░ебование │по░┐до╖енно▒▓и ▓ам ▓оже б╗ло. В ╖ем ░азни╢а межд│ ▓ем ▓░ебованием и ▓епе░е╕ним? Как в╗ д│мае▓е, можно ли
напе╖а▓а▓╝ ╜лемен▓╗ двои╖ной к│╖и в не│б╗ва╛╣ем по░┐дке за
в░ем┐ O(n)? Об║┐▒ни▓е ва╕ о▓ве▓.
13.1-3 Напи╕и▓е не░ек│░▒ивн╗й алго░и▓м, пе╖а▓а╛╣ий кл╛╖и
в двои╖ном де░еве пои▒ка в не│б╗ва╛╣ем по░┐дке. (Указание: П░о▒▓ое ░е╕ение и▒пол╝з│е▓ в ка╖е▒▓ве дополни▓ел╝ной ▒▓░│к▓│░╗
▒▓ек; более из┐╣ное ░е╕ение не ▓░еб│е▓ ▒▓ека, но п░едполагае▓,
╖▓о можно п░ове░┐▓╝ ░авен▒▓во │каза▓елей.)
13.1-4 Напи╕и▓е ░ек│░▒ивн╗е алго░и▓м╗ дл┐ об╡ода де░ев╝ев
в ░азли╖н╗╡ по░┐дка╡ (preorder, postorder). Как и ░ан╝╕е, в░ем┐
░або▓╗ должно б╗▓╝ O(n) (где n | ╖и▒ло ве░╕ин).
13.1-5 Покажи▓е, ╖▓о л╛бой алго░и▓м по▒▓░оени┐ двои╖ного де░ева пои▒ка, ▒оде░жа╣его заданн╗е n ╜лемен▓ов, ▓░еб│е▓ (в ╡│д╕ем ▒л│╖ае) в░емени (n lg n). Во▒пол╝з│й▓е▒╝ ▓ем, ╖▓о ▒о░▓и░овка n ╖и▒ел ▓░еб│е▓ (n lg n) дей▒▓вий.
Пои▒к в двои╖ном де░еве
251
Пои▒к в двои╖ном де░еве. И╣а кл╛╖ 13, м╗ идем о▓ ко░н┐ по п│▓и
15 ! 6 ! 7 ! 13. Ч▓об╗ най▓и минимал╝н╗й кл╛╖ 2, м╗ в▒е в░ем┐ идем налево; ╖▓об╗ най▓и мак▒имал╝н╗й кл╛╖ 20 | нап░аво. Дл┐ ве░╕ин╗ ▒ кл╛╖ом 15
▒лед│╛╣ей б│де▓ ве░╕ина ▒ кл╛╖ом 17 (╜▓о минимал╝н╗й кл╛╖ в п░авом подде░еве ве░╕ин╗ ▒ кл╛╖ом 15). У ве░╕ин╗ ▒ кл╛╖ом 13 не▓ п░авого подде░ева;
по╜▓ом│, ╖▓об╗ най▓и ▒лед│╛╣│╛ за ней ве░╕ин│, м╗ поднимаем▒┐ вве░╡, пока не п░ойдем по ░еб░│, вед│╣ем│ вп░аво-вве░╡; в данном ▒л│╖ае ▒лед│╛╣а┐
ве░╕ина имее▓ кл╛╖ 15.
Ри▒. 13.2
13.2. Пои▒к в двои╖ном де░еве
В ╜▓ом ░азделе м╗ покажем, ╖▓о двои╖н╗е де░ев╝┐ пои▒ка позвол┐╛▓ в╗полн┐▓╝ опе░а╢ии Search, Minimum, Maximum, Successor и Predecessor за в░ем┐ O(h), где h | в╗▒о▓а де░ева.
Пои▒к
П░о╢ед│░а пои▒ка пол│╖ае▓ на в╡од и▒ком╗й кл╛╖ k и │каза▓ел╝ x на ко░ен╝ подде░ева, в ко▓о░ом п░оизводи▓▒┐ пои▒к. Она
возв░а╣ае▓ │каза▓ел╝ на ве░╕ин│ ▒ кл╛╖ом k (е▒ли ▓ака┐ е▒▓╝)
или ▒пе╢иал╝ное зна╖ение nil (е▒ли ▓акой ве░╕ин╗ не▓).
Tree-Search (x; k)
1 if x = nil или k = key[x]
2 then return x
3 if k < key[x]
4 then return Tree-Search(left[x]; k)
5 else return Tree-Search(right[x]; k)
В п░о╢е▒▒е пои▒ка м╗ двигаем▒┐ о▓ ко░н┐, ▒░авнива┐ кл╛╖ k ▒
кл╛╖ом, ╡░ан┐╣им▒┐ в ▓ек│╣ей ве░╕ине x. Е▒ли они ░авн╗, пои▒к заве░╕ае▓▒┐. Е▒ли k < key[x], ▓о пои▒к п░одолжае▓▒┐ в левом
подде░еве x (кл╛╖ k може▓ б╗▓╝ ▓ол╝ко ▓ам, ▒огла▒но ▒вой▒▓в│
│по░┐до╖енно▒▓и). Е▒ли k > key[x], ▓о пои▒к п░одолжае▓▒┐ в п░авом подде░еве. Длина п│▓и пои▒ка не п░ево▒╡оди▓ в╗▒о▓╗ де░ева,
252
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
по╜▓ом│ в░ем┐ пои▒ка е▒▓╝ O(h) (где h | в╗▒о▓а де░ева).
Во▓ и▓е░а▓ивна┐ ве░▒и┐ ▓ой же п░о╢ед│░╗ (ко▓о░а┐, как п░авило, более ╜┤┤ек▓ивна):
Iterative-Tree-Search (x; k)
1 while x 6= nil и k 6= key[x]
2
do if k < key[x]
3
then x left[x]
4
else x right[x]
5 return x
Миним│м и мак▒им│м
Минимал╝н╗й кл╛╖ в де░еве пои▒ка можно най▓и, п░ойд┐ по
│каза▓ел┐м left о▓ ко░н┐ (пока не │п░ем▒┐ в nil), ▒м. ░и▒. 13.2. П░о╢ед│░а возв░а╣ае▓ │каза▓ел╝ на минимал╝н╗й ╜лемен▓ подде░ева
▒ ко░нем x.
Tree-Minimum(x)
1 while left[x] 6= nil
2
do x left[x]
3 return x
Свой▒▓во │по░┐до╖енно▒▓и га░ан▓и░│е▓ п░авил╝но▒▓╝ п░о╢ед│░╗
Tree-Minimum. Е▒ли │ ве░╕ин╗ x не▓ левого ░ебенка, ▓о минимал╝н╗й ╜лемен▓ подде░ева ▒ ко░нем x е▒▓╝ x, ▓ак как л╛бой кл╛╖
в п░авом подде░еве не мен╝╕е key[x]. Е▒ли же левое подде░ево ве░╕ин╗ x не п│▒▓о, ▓о минимал╝н╗й ╜лемен▓ подде░ева ▒ ко░нем x
на╡оди▓▒┐ в ╜▓ом левом подде░еве (по▒кол╝к│ ▒ам x и в▒е ╜лемен▓╗
п░авого подде░ева бол╝╕е).
Алго░и▓м Tree-Maximum ▒имме▓░и╖ен:
Tree-Maximum(x)
1 while right[x] 6= nil
2
do x right[x]
3 return x
Оба алго░и▓ма ▓░еб│╛▓ в░емени O(h), где h | в╗▒о▓а де░ева (по▒кол╝к│ двига╛▓▒┐ по де░ев│ ▓ол╝ко вниз).
След│╛╣ий и п░ед╗д│╣ий ╜лемен▓╗
Как най▓и в двои╖ном де░еве ╜лемен▓, ▒лед│╛╣ий за данн╗м?
Свой▒▓во │по░┐до╖енно▒▓и позвол┐е▓ ▒дела▓╝ ╜▓о, двига┐▒╝ по де░ев│. Во▓ п░о╢ед│░а, ко▓о░а┐ возв░а╣ае▓ │каза▓ел╝ на ▒лед│╛╣ий
за x ╜лемен▓ (е▒ли в▒е кл╛╖и ░азли╖н╗, он ▒оде░жи▓ ▒лед│╛╣ий
Пои▒к в двои╖ном де░еве
253
по вели╖ине кл╛╖) или nil, е▒ли ╜лемен▓ x | по▒ледний в де░еве.
Tree-Successor(x)
1 if right[x] 6= nil
2 then return Tree-Minimum(right[x])
3 y p[x]
4 while y 6= nil and x = right[y ]
5
do x y
6
y p[y ]
7 return y
П░о╢ед│░а Tree-Successor о▓дел╝но ░а▒▒ма▓░ивае▓ два ▒л│╖а┐. Е▒ли п░авое подде░ево ве░╕ин╗ x неп│▒▓о, ▓о ▒лед│╛╣ий
за x ╜лемен▓ | минимал╝н╗й ╜лемен▓ в ╜▓ом подде░еве и ░авен Tree-Minimum(right[x]). Нап░име░, на ░и▒. 13.2 за ве░╕иной ▒
кл╛╖ом 15 ▒лед│е▓ ве░╕ина ▒ кл╛╖ом 17.
П│▒▓╝ ▓епе░╝ п░авое подде░ево ве░╕ин╗ x п│▒▓о. Тогда м╗ идем
о▓ x вве░╡, пока не найдем ве░╕ин│, ┐вл┐╛╣│╛▒┐ лев╗м ▒╗ном ▒воего ░оди▓ел┐ (▒▓░оки 3{7). Э▓о▓ ░оди▓ел╝ (е▒ли он е▒▓╝) и б│де▓
и▒ком╗м ╜лемен▓ом. [Фо░мал╝но гово░┐, ╢икл в ▒▓░ока╡ 4{6 ▒о╡░ан┐е▓ ▓акое ▒вой▒▓во: y = p[x]; и▒ком╗й ╜лемен▓ непо▒░ед▒▓венно
▒лед│е▓ за ╜лемен▓ами подде░ева ▒ ко░нем в x.]
В░ем┐ ░або▓╗ п░о╢ед│░╗ Tree-Successor на де░еве в╗▒о▓╗ h
е▒▓╝ O(h), ▓ак как м╗ двигаем▒┐ либо ▓ол╝ко вве░╡, либо ▓ол╝ко
вниз.
П░о╢ед│░а Tree-Predecessor ▒имме▓░и╖на.
Таким об░азом, м╗ доказали ▒лед│╛╣│╛ ▓ео░ем│.
Тео░ема 13.1. Опе░а╢ии Search, Minimum, Maximum, Successor и Predecessor на де░еве в╗▒о▓╗ h в╗полн┐╛▓▒┐ за в░ем┐ O(h).
Уп░ажнени┐
13.2-1 П░едположим, ╖▓о в двои╖ном де░еве пои▒ка ╡░ан┐▓▒┐ ╖и▒ла о▓ 1 до 1000 и м╗ ╡о▓им най▓и ╖и▒ло 363. Какие из ▒лед│╛╣и╡ по▒ледова▓ел╝но▒▓ей не мог│▓ б╗▓╝ по▒ледова▓ел╝но▒▓┐ми
п░о▒ма▓░иваем╗╡ п░и ╜▓ом кл╛╖ей?
а. 2; 252; 401; 398; 330; 344; 397; 363;
б. 924; 220; 911; 244; 898; 258; 362; 363;
в. 925; 202; 911; 240; 912; 245; 363;
г. 2; 399; 387; 219; 266; 382; 381; 278; 363;
д. 935; 278; 347; 621; 299; 392; 358; 363.
13.2-2 П│▒▓╝ пои▒к кл╛╖а в двои╖ном де░еве заве░╕ае▓▒┐ в ли▒▓е. Ра▒▒мо▓░им ▓░и множе▒▓ва: A (╜лемен▓╗ ▒лева о▓ п│▓и пои▒-
254
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
ка), B (╜лемен▓╗ на п│▓и) и C (▒п░ава о▓ п│▓и). П░о┤е▒▒о░ │▓ве░ждае▓, ╖▓о дл┐ л╛б╗╡ ▓░е╡ кл╛╖ей a 2 A, b 2 B и c 2 C ве░но
a 6 b 6 c. Покажи▓е, ╖▓о он неп░ав, и п░иведи▓е кон▓░п░име░
минимал╝но возможного ░азме░а.
13.2-3
Докажи▓е ┤о░мал╝но п░авил╝но▒▓╝ п░о╢ед│░╗ Tree-
Successor.
13.2-4 В ░азделе 13.1 б╗л по▒▓░оен алго░и▓м, пе╖а▓а╛╣ий в▒е
кл╛╖и в не│б╗ва╛╣ем по░┐дке. Тепе░╝ ╜▓о можно ▒дела▓╝ ина╖е:
най▓и минимал╝н╗й ╜лемен▓, а по▓ом n ; 1 ░аз и▒ка▓╝ ▒лед│╛╣ий
╜лемен▓. Докажи▓е, ╖▓о в░ем┐ ░або▓╗ ▓акого алго░и▓ма е▒▓╝ O(n).
Докажи▓е, ╖▓о k по▒ледова▓ел╝н╗╡ в╗зовов TreeSuccessor в╗полн┐╛▓▒┐ за O(k + h) ╕агов (h | в╗▒о▓а де░ева)
незави▒имо о▓ ▓ого, ▒ какой ве░╕ин╗ м╗ на╖инаем.
13.2-5
13.2-6 П│▒▓╝ T | двои╖ное де░ево пои▒ка, в▒е кл╛╖и в ко▓о░ом
░азли╖н╗, x | его ли▒▓, а y | ░оди▓ел╝ x. Покажи▓е, ╖▓о key[y ]
┐вл┐е▓▒┐ ▒о▒едним ▒ key[x] кл╛╖ом (▒лед│╛╣им или п░ед╗д│╣им в
▒м╗▒ле по░┐дка на кл╛╖а╡).
13.3. Добавление и │даление ╜лемен▓а
Э▓и опе░а╢ии мен┐╛▓ де░ево, ▒о╡░ан┐┐ ▒вой▒▓во │по░┐до╖енно▒▓и. Как м╗ │видим, добавление ▒░авни▓ел╝но п░о▒▓о; │даление
╖│▓╝ ▒ложнее.
Добавление
П░о╢ед│░а Tree-Insert добавл┐е▓ заданн╗й ╜лемен▓ в под╡од┐╣ее ме▒▓о де░ева T (▒о╡░ан┐┐ ▒вой▒▓во │по░┐до╖енно▒▓и). Па░аме▓░ом п░о╢ед│░╗ ┐вл┐е▓▒┐ │каза▓ел╝ z на нов│╛ ве░╕ин│, в
ко▓о░│╛ поме╣ен╗ зна╖ени┐ key[z ] (добавл┐емое зна╖ение кл╛╖а),
left[z ] = nil и right[z ] = nil. В ╡оде ░або▓╗ п░о╢ед│░а мен┐е▓ де░ево T и (возможно) неко▓о░╗е пол┐ ве░╕ин╗ z , по▒ле ╖его нова┐
ве░╕ина ▒ данн╗м зна╖ением кл╛╖а оказ╗вае▓▒┐ в▒▓авленной в
под╡од┐╣ее ме▒▓о де░ева.
Добавление и │даление ╜лемен▓а
255
Добавление ╜лемен▓а ▒ кл╛╖ом 13. Све▓ло-▒е░╗е ве░╕ин╗ на╡од┐▓▒┐ на п│▓и о▓ ко░н┐ до пози╢ии нового ╜лемен▓а. П│нк▓и░ ▒в┐з╗вае▓ нов╗й
╜лемен▓ ▒о ▒▓а░╗ми.
Ри▒. 13.3
Tree-Insert (T; z )
1 y nil
2 x root[T ]
3 while x 6= nil
4
do y x
5
if key[z ] < key[x]
6
then x left[x]
7
else x right[x]
8 p[z ] y
9 if y = nil
10
then root[T ] z
11
else if key[z ] < key[y ]
12
then left[y ] z
13
else right[y ] z
На ░и▒│нке 13.3 показано, как ░або▓ае▓ п░о╢ед│░а Tree-Insert.
Подобно п░о╢ед│░ам Tree-Search и Iterative-Tree-Search,
она двигае▓▒┐ вниз по де░ев│, на╖ав ▒ его ко░н┐. П░и ╜▓ом в ве░╕ине y ▒о╡░ан┐е▓▒┐ │каза▓ел╝ на ░оди▓ел┐ ве░╕ин╗ x (╢икл в ▒▓░ока╡ 3{7). С░авнива┐ key[z ] ▒ key[x], п░о╢ед│░а ░е╕ае▓, к│да ид▓и
| налево или нап░аво. П░о╢е▒▒ заве░╕ае▓▒┐, когда x ▒▓анови▓▒┐
░авн╗м nil. Э▓о▓ nil ▒▓ои▓ как ░аз ▓ам, к│да надо поме▒▓и▓╝ z ,
╖▓о и делае▓▒┐ в ▒▓░ока╡ 8{13.
Как и о▒▓ал╝н╗е опе░а╢ии, добавление ▓░еб│е▓ в░емени O(h) дл┐
де░ева в╗▒о▓╗ h.
Удаление
Па░аме▓░ом п░о╢ед│░╗ │далени┐ ┐вл┐е▓▒┐ │каза▓ел╝ на │дал┐ем│╛ ве░╕ин│. П░и │далении возможн╗ ▓░и ▒л│╖а┐, показанн╗е на
░и▒│нке 13.4. Е▒ли │ z не▓ де▓ей, дл┐ │далени┐ z до▒▓а▓о╖но поме▒▓и▓╝ nil в ▒оо▓ве▓▒▓в│╛╣ее поле его ░оди▓ел┐ (вме▒▓о z ). Е▒ли
│ z е▒▓╝ один ░ебенок, можно └в╗░еза▓╝┴ z , ▒оединив его ░оди▓ел┐
256
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
Ри▒. 13.4 Удаление ве░╕ин╗ z из двои╖ного де░ева пои▒ка. (а) Е▒ли ве░╕ина
z не имее▓ де▓ей, ее можно │дали▓╝ без п░облем. (б) Е▒ли ве░╕ина z имее▓
одного ░ебенка, поме╣аем его на ме▒▓о ве░╕ин╗ z . (в) Е▒ли │ ве░╕ин╗ z двое
де▓ей, м╗ ▒водим дело к п░ед╗д│╣ем│ ▒л│╖а╛, │дал┐┐ вме▒▓о нее ве░╕ин│ y ▒
непо▒░ед▒▓венно ▒лед│╛╣им зна╖ением кл╛╖а (│ ╜▓ой ве░╕ин╗ ░ебенок один)
и поме╣а┐ кл╛╖ key[y] (и ▒в┐занн╗е ▒ ним дополни▓ел╝н╗е данн╗е) на ме▒▓о
ве░╕ин╗ z .
нап░┐м│╛ ▒ его ░ебенком. Е▒ли же де▓ей двое, ▓░еб│╛▓▒┐ неко▓о░╗е п░иго▓овлени┐: м╗ на╡одим ▒лед│╛╣ий (в ▒м╗▒ле по░┐дка на
кл╛╖а╡) за z ╜лемен▓ y ; │ него не▓ левого ░ебенка (│п░. 13.3-4).
Тепе░╝ можно ▒копи░ова▓╝ кл╛╖ и дополни▓ел╝н╗е данн╗е из ве░╕ин╗ y в ве░╕ин│ z , а ▒ам│ ве░╕ин│ y │дали▓╝ опи▒анн╗м в╗╕е
▒по▒обом.
П░име░но ▓ак и дей▒▓в│е▓ п░о╢ед│░а Tree-Delete (╡о▓┐ ░а▒▒ма▓░ивае▓ ╜▓и ▓░и ▒л│╖а┐ в не▒кол╝ко д░│гом по░┐дке).
Добавление и │даление ╜лемен▓а
257
Tree-Delete (T; z )
1 if left[z ] = nil или right[z ] = nil
2
then y z
3
else y Tree-Successor(z )
4 if left[y ] 6= nil
5
then x left[y ]
6
else x right[y ]
7 if x 6= nil
8
then p[x] p[y ]
9 if p[y ] = nil
10
then root[T ] x
11
else if y = left[p[y ]]
12
then left[p[y ]] x
13
else right[p[y ]] x
14 if y 6= z
15
then key[z ] key[y ]
16
. копи░│ем дополни▓ел╝н╗е данн╗е, ▒в┐занн╗е ▒ y
17 return y
В ▒▓░ока╡ 1{3 оп░едел┐е▓▒┐ ве░╕ина y , ко▓о░│╛ м╗ по▓ом в╗░ежем из де░ева. Э▓о либо ▒ама ве░╕ина z (е▒ли │ z не более одного
░ебенка), либо ▒лед│╛╣ий за z ╜лемен▓ (е▒ли │ z двое де▓ей). За▓ем в ▒▓░ока╡ 4{6 пе░еменна┐ x ▒▓анови▓▒┐ │каза▓елем на ▒│╣е▒▓в│╛╣его ░ебенка ве░╕ин╗ y , или ░авной nil, е▒ли │ y не▓ де▓ей.
Ве░╕ина y в╗░езае▓▒┐ из де░ева в ▒▓░ока╡ 7{13 (мен┐╛▓▒┐ │каза▓ели в ве░╕ина╡ p[y ] и x). П░и ╜▓ом о▓дел╝но ░а▒▒ма▓░ива╛▓▒┐
г░ани╖н╗е ▒л│╖аи, когда x = nil и когда y ┐вл┐е▓▒┐ ко░нем де░ева. Наконе╢, в ▒▓░ока╡ 14{16, е▒ли в╗░езанна┐ ве░╕ина y о▓ли╖на
о▓ z , кл╛╖ (и дополни▓ел╝н╗е данн╗е) ве░╕ин╗ y пе░еме╣а╛▓▒┐
в z (вед╝ нам надо б╗ло │дали▓╝ z , а не y ). Наконе╢, п░о╢ед│░а возв░а╣ае▓ │каза▓ел╝ y (╜▓о позволи▓ в╗з╗ва╛╣ей п░о╢ед│░е
впо▒лед▒▓вии о▒вободи▓╝ пам┐▓╝, зан┐▓│╛ ве░╕иной y ). В░ем┐ в╗полнени┐ е▒▓╝ O(h) на де░еве в╗▒о▓╗ h.
И▓ак, м╗ доказали ▒лед│╛╣│╛ ▓ео░ем│.
Тео░ема 13.2. Опе░а╢ии Insert и Delete мог│▓ б╗▓╝ в╗полнен╗
за в░ем┐ O(h), где h | в╗▒о▓а де░ева.
Уп░ажнени┐
13.3-1
Insert.
Напи╕и▓е ░ек│░▒ивн╗й ва░иан▓ п░о╢ед│░╗ Tree-
13.3-2 На╖ина┐ ▒ п│▒▓ого де░ева, б│дем добавл┐▓╝ ╜лемен▓╗ ▒
░азли╖н╗ми кл╛╖ами один за д░│гим. Е▒ли по▒ле ╜▓ого м╗ п░оводим пои▒к ╜лемен▓а ▒ кл╛╖ом x, ▓о ╖и▒ло ▒░авнений на едини╢│
258
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
бол╝╕е ╖и▒ла ▒░авнений, в╗полненн╗╡ п░и добавлении ╜▓ого ╜лемен▓а. По╖ем│?
13.3-3 Набо░ из n ╖и▒ел можно о▓▒о░▓и░ова▓╝, ▒на╖ала добавив
и╡ один за д░│гим в двои╖ное де░ево пои▒ка (▒ помо╣╝╛ п░о╢ед│░╗ Tree-Insert), а по▓ом обой▓и де░ево ▒ помо╣╝╛ п░о╢ед│░╗
Inorder-Tree-Walk. Найди▓е в░ем┐ ░або▓╗ ▓акого алго░и▓ма в
╡│д╕ем и в л│╖╕ем ▒л│╖ае.
13.3-4 Покажи▓е, ╖▓о, е▒ли ве░╕ина двои╖ного де░ева пои▒ка
имее▓ двои╡ де▓ей, ▓о ▒лед│╛╣а┐ за ней ве░╕ина не имее▓ левого
░ебенка, а п░ед╕е▒▓в│╛╣а┐ ей ве░╕ина | п░авого.
13.3-5 П░едположим, ╖▓о │каза▓ел╝ на ве░╕ин│ y ╡░ани▓▒┐ в
какой-▓о вне╕ней ▒▓░│к▓│░е данн╗╡ и ╖▓о п░ед╕е▒▓в│╛╣а┐ y ве░╕ина де░ева │дал┐е▓▒┐ ▒ помо╣╝╛ п░о╢ед│░╗ Tree-Delete. Какие п░и ╜▓ом мог│▓ возникн│▓╝ п░облем╗? Как можно измени▓╝
Tree-Delete, ╖▓об╗ ╜▓и╡ п░облем избежа▓╝?
13.3-6 Комм│▓и░│╛▓ ли опе░а╢ии │далени┐ дв│╡ ве░╕ин? Д░│гими ▒ловами, пол│╖им ли м╗ одинаков╗е де░ев╝┐, е▒ли в одном
▒л│╖ае │далим ▒на╖ала x, а по▓ом y , а в д░│гом | наобо░о▓? Об║┐▒ни▓е ▒вой о▓ве▓.
Е▒ли │ z двое де▓ей, м╗ можем и▒пол╝зова▓╝ в TreeDelete не ▒лед│╛╣ий за z ╜лемен▓, а п░ед╗д│╣ий. Можно наде┐▓╝▒┐, ╖▓о ▒п░аведлив╗й под╡од, ко▓о░╗й в половине ▒л│╖аев
в╗би░ае▓ п░ед╗д│╣ий, а в половине | ▒лед│╛╣ий ╜лемен▓, б│де▓
п░иводи▓╝ к л│╖╕е ▒балан▒и░ованном│ де░ев│. Как измени▓╝ ▓ек▒▓
п░о╢ед│░╗, ╖▓об╗ ░еализова▓╝ ▓акой под╡од?
13.3-7
? 13.4 Сл│╖айн╗е двои╖н╗е де░ев╝┐ пои▒ка
Как м╗ видели, о▒новн╗е опе░а╢ии ▒ двои╖н╗ми де░ев╝┐ми пои▒ка ▓░еб│╛▓ в░емени O(h), где h | в╗▒о▓а де░ева. По╜▓ом│ важно
пон┐▓╝, какова в╗▒о▓а └▓ипи╖ного┴ де░ева. Дл┐ ╜▓ого необ╡одимо
п░ин┐▓╝ какие-▓о ▒▓а▓и▒▓и╖е▒кие п░едположени┐ о ░а▒п░еделении
кл╛╖ей и по▒ледова▓ел╝но▒▓и в╗полн┐ем╗╡ опе░а╢ий.
К ▒ожалени╛, в об╣ем ▒л│╖ае ▒и▓│а╢и┐ ▓░│дна дл┐ анализа, и м╗
б│дем ░а▒▒ма▓░ива▓╝ ли╕╝ де░ев╝┐, пол│╖енн╗е добавлением ве░╕ин (без │далений). Оп░еделим ▒л│╖айное двои╖ное де░ево (randomly built search tree) из n ░азли╖н╗╡ кл╛╖ей как де░ево, пол│╖а╛╣ее▒┐ из п│▒▓ого де░ева добавлением ╜▓и╡ кл╛╖ей в ▒л│╖айном по░┐дке (в▒е n! пе░е▒▓ановок ▒╖и▓аем ░авнове░о┐▓н╗ми). (Как
13.4 Сл│╖айн╗е двои╖н╗е де░ев╝┐ пои▒ка
259
видно из │п░. 13.4-2, ╜▓о не озна╖ае▓, ╖▓о в▒е двои╖н╗е де░ев╝┐ ░авнове░о┐▓н╗, по▒кол╝к│ ░азн╗е по░┐дки добавлени┐ мог│▓ п░иводи▓╝ к одном│ и ▓ом│ же де░ев│.) В ╜▓ом ░азделе м╗ докажем, ╖▓о
ма▓ема▓и╖е▒кое ожидание в╗▒о▓╗ ▒л│╖айного де░ева из n кл╛╖ей
е▒▓╝ O(lg n).
По▒мо▓░им, как ▒в┐зана ▒▓░│к▓│░а де░ева ▒ по░┐дком добавлени┐ кл╛╖ей.
Лемма 13.3. П│▒▓╝ T | де░ево, пол│╖а╛╣ее▒┐ по▒ле добавлени┐
n ░азли╖н╗╡ кл╛╖ей k1; k2; : : :; kn (в │казанном по░┐дке) к изна╖ал╝но п│▒▓ом│ де░ев│. Тогда ki ┐вл┐е▓▒┐ п░едком kj в T ▓огда
и ▓ол╝ко ▓огда, когда i < j , и п░и ╜▓ом
ki = minfkl : 1 6 l 6 i и kl > kj g
(кл╛╖ ki бол╝╕е kj и и╡ не ░аздел┐е▓ ни один кл╛╖ ▒░еди k1; : : :; ki)
или
ki = maxfkl : 1 6 l 6 i и kl < kj g
(кл╛╖ ki мен╝╕е kj и и╡ не ░аздел┐е▓ ни один кл╛╖ ▒░еди
k1; : : : ; ki)
Доказа▓ел╝▒▓во. ): П░едположим, ╖▓о ki ┐вл┐е▓▒┐ п░едком kj .
О╖евидно, i < j (по▓омок по┐вл┐е▓▒┐ в де░еве позже п░едка). Ра▒▒мо▓░им де░ево Ti , ко▓о░ое пол│╖ае▓▒┐ по▒ле добавлени┐ кл╛╖ей
k1; k2; : : :; ki. П│▓╝ в Ti о▓ ко░н┐ до ki ▓о▓ же, ╖▓о и п│▓╝ в T о▓ ко░н┐ до ki . Таким об░азом, е▒ли б╗ кл╛╖ kj б╗л добавлен в Ti, он ▒▓ал
б╗ п░ав╗м или лев╗м ░ебенком ki . Следова▓ел╝но (▒м. │п░. 13.2-6),
ki ┐вл┐е▓▒┐ либо наимен╝╕им ▒░еди ▓е╡ кл╛╖ей из k1; k2; : : :; ki, ко▓о░╗е бол╝╕е kj , либо наибол╝╕им ▒░еди кл╛╖ей из ▓ого же набо░а, мен╝╕и╡ kj .
(: П░едположим, ╖▓о ki ┐вл┐е▓▒┐ наимен╝╕им ▒░еди ▓е╡ кл╛╖ей
k1; k2; : : :; ki, ко▓о░╗е бол╝╕е kj . (Д░│гой ▒л│╖ай ▒имме▓░и╖ен.)
Ч▓о б│де▓ п░ои▒╡оди▓╝ п░и поме╣ении кл╛╖а kj в де░ево? С░авнение kj ▒ кл╛╖ами на п│▓и о▓ ко░н┐ к ki да▒▓ ▓е же ░ез│л╝▓а▓╗,
╖▓о и дл┐ ki . Следова▓ел╝но, м╗ п░ойдем п│▓╝ о▓ ко░н┐ до ki , ▓ак
╖▓о kj ▒▓ане▓ по▓омком ki .
Лемма доказана.
Тепе░╝ можно пон┐▓╝, как зави▒и▓ гл│бина каждого кл╛╖а о▓
пе░е▒▓ановки на в╡оде.
След▒▓вие 13.4. П│▒▓╝ T | де░ево, пол│╖енное из п│▒▓ого добавлением n ░азли╖н╗╡ кл╛╖ей k1 ; k2; : : :; kn (в │казанном по░┐дке).
Дл┐ каждого кл╛╖а kj (п░и в▒е╡ 1 6 j 6 n) ░а▒▒мо▓░им множе▒▓ва
Gj = fki : 1 6 i < j и kl > ki > kj п░и в▒е╡ l < i, дл┐ ко▓о░╗╡ kl > kj g
и
Lj = fki : 1 6 i < j и kl < ki < kj п░и в▒е╡ l < i, дл┐ ко▓о░╗╡ kl < kj g:
260
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
Тогда кл╛╖и на п│▓и из ко░н┐ в kj | в ▓о╖но▒▓и Gj [ Lj , а гл│бина kj в де░еве T ░авна
d(kj ; T ) = jGj j + jLj j:
На ░и▒│нке 13.5 изоб░ажен╗ множе▒▓ва Gj и Lj . И╡ по▒▓░оение
можно об║┐▒ни▓╝ ▓ак. С╖и▓а┐ дл┐ нагл┐дно▒▓и кл╛╖и ╖и▒лами, б│дем о▓ме╖а▓╝ и╡ на ╖и▒ловой о▒и: ▒на╖ала k1, по▓ом k2 и ▓ак далее
впло▓╝ до kj . В кажд╗й момен▓ на о▒и о▓ме╖ено не▒кол╝ко ▓о╖ек
k1; : : :; kt (где 1 6 t 6 j ; 1). По▒мо▓░им, кака┐ из ╜▓и╡ ▓о╖ек
б│де▓ ближай╕ей ▒п░ава к б│д│╣ем│ положени╛ кл╛╖а kj . Множе▒▓во в▒е╡ ▓аки╡ ближай╕и╡ ▓о╖ек (дл┐ в▒е╡ момен▓ов в░емени
t = 1; 2; : : : ; j ; 1) и е▒▓╝ Gj . Ближай╕ие ▒лева ▓о╖ки об░аз│╛▓
множе▒▓во Lj .
На╕а ╢ел╝ | о╢ени▓╝ ▒ве░╡│ коли╖е▒▓во ╜лемен▓ов в Gj и Lj ,
по▒кол╝к│ ▒│мма ╜▓и╡ коли╖е▒▓в ░авна гл│бине кл╛╖а kj . Фик▒и░│ем неко▓о░ое j . Чи▒ло ╜лемен▓ов в Gj б│де▓ ▒л│╖айной вели╖иной, зави▒┐╣ей о▓ по░┐дка кл╛╖ей на в╡оде (имее▓ зна╖ение ли╕╝
по░┐док на кл╛╖а╡ k1 ; : : :; kj ). М╗ ╡о▓им о╢ени▓╝ ╜▓о ╖и▒ло ▒ве░╡│
(доказа▓╝, ╖▓о ве░о┐▓но▒▓╝ ▒об╗▓и┐ └╜▓о ╖и▒ло велико┴ мала).
След│╛╣ий ┤ак▓ из ▓ео░ии ве░о┐▓но▒▓ей иг░ае▓ ╢ен▓░ал╝н│╛
░ол╝ п░и ╜▓ой о╢енке.
Лемма 13.5. П│▒▓╝ k1; k2; : : :; kn е▒▓╝ ▒л│╖айна┐ пе░е▒▓ановка
n ░азли╖н╗╡ ╖и▒ел. Дл┐ каждого i о▓ 1 до n ░а▒▒мо▓░им минимал╝н╗й ╜лемен▓ в множе▒▓ве fk1; k2; : : :; kig. Множе▒▓во в▒е╡
▓аки╡ ╜лемен▓ов назовем S :
S = fki : 1 6 i 6 n и kl > ki дл┐ в▒е╡ l < ig:
(13.1)
Тогда PfjS j > ( + 1)Hn g 6 1=n2 , где Hn | n-┐ ╖а▒▓и╖на┐ ▒│мма
га░мони╖е▒кого ░┐да, а 4;32 | ко░ен╝ │░авнени┐ (ln ;1) = 2.
Доказа▓ел╝▒▓во. Б│дем ▒леди▓╝ за ▓ем, как мен┐е▓▒┐ множе▒▓во
fk1; : : :; kig ▒ ░о▒▓ом i. На i-м ╕аге к нем│ добавл┐е▓▒┐ ╜лемен▓ ki,
п░и╖ем он ▒ ░авн╗ми ве░о┐▓но▒▓┐ми може▓ оказа▓╝▒┐ пе░в╗м,
в▓о░╗м,: : : , i-м по вели╖ине (каждой из ╜▓и╡ возможно▒▓ей ▒оо▓ве▓▒▓в│е▓ ░авна┐ дол┐ в╡одн╗╡ пе░е▒▓ановок). Таким об░азом,
ве░о┐▓но▒▓╝ │вели╖ени┐ множе▒▓ва S на i-м ╕аге ░авна 1=i п░и
л╛бом по░┐дке ▒░еди кл╛╖ей k1; : : :; ki;1, ▓ак ╖▓о дл┐ ░азн╗╡ i ╜▓и
▒об╗▓и┐ незави▒им╗.
М╗ п░и╡одим к ▒и▓│а╢ии, опи▒анной в ▓ео░еме 6.6: имее▓▒┐ по▒ледова▓ел╝но▒▓╝ незави▒им╗╡ и▒п╗▓аний, ве░о┐▓но▒▓╝ │▒пе╡а в
i-м и▒п╗▓ании ░авна 1=i. Нам надо о╢ени▓╝ ╖и▒ло │▒пе╡ов.
Ма▓ема▓и╖е▒кое ожидание ╜▓ого ╖и▒ла ░авно 1+1=2+ : : : +1=i =
Hi = ln i + O(1), ▒м. ┤о░м│л│ (3.5) и зада╖│ 6-2. Нам надо о╢ени▓╝
ве░о┐▓но▒▓╝ ▓ого, ╖▓о ╖и▒ло │▒пе╡ов бол╝╕е ▒воего ма▓ема▓и╖е▒кого ожидани┐ в + 1 ░аз.
13.4 Сл│╖айн╗е двои╖н╗е де░ев╝┐ пои▒ка
261
Э▓о делае▓▒┐ ▒ помо╣╝╛ ▓ео░ем╗ 6.6. Напомним, ╖▓о ма▓ема▓и╖е▒кое ожидание jS j е▒▓╝ = Hn > ln n, и по ▓ео░еме 6.6 м╗
имеем
PfjS j > ( + 1)Hn g = P fjS j ; > Hn g 6
Hn
eH
n
=
6 H
n
= e(1;ln )Hn 6
6 e;(ln ;1) ln n =
= n;(ln ;1) =
= 1=n2
▒огла▒но оп░еделени╛ ╖и▒ла .
По▒ле ▓акой подго▓овки ве░нем▒┐ к де░ев╝┐м пои▒ка.
Тео░ема 13.6. С░едн┐┐ в╗▒о▓а ▒л│╖айного двои╖ного де░ева пои▒ка, по▒▓░оенного по n ░азли╖н╗м кл╛╖ам, е▒▓╝ O(lg n).
Доказа▓ел╝▒▓во. П│▒▓╝ k1; k2; : : :; kn | ▒л│╖айна┐ пе░е▒▓ановка
данн╗╡ n кл╛╖ей, T | де░ево, пол│╖енное по▒ледова▓ел╝н╗м добавлением ╜▓и╡ кл╛╖ей к п│▒▓ом│. Дл┐ ┤ик▒и░ованного номе░а j и
дл┐ п░оизвол╝ного ╖и▒ла t ░а▒▒мо▓░им ве░о┐▓но▒▓╝ ▓ого, ╖▓о гл│бина d(kj ; T ) кл╛╖а kj не мен╝╕е t. Согла▒но ▒лед▒▓ви╛ 13.4, в ╜▓ом
▒л│╖ае ╡о▓┐ б╗ одно из множе▒▓в Gj и Lj должно име▓╝ ░азме░ не
менее t=2. Таким об░азом,
Pfd(kj ; T ) > tg 6 PfjGj j > t=2g + PfjLj j > t=2g:
(13.2)
Вна╖але ░а▒▒мо▓░им PfjGj j > t=2g. О╢еним │▒ловн│╛ ве░о┐▓но▒▓╝
╜▓ого ▒об╗▓и┐ п░и ┤ик▒и░ованном множе▒▓ве U = ft : 1 6 t 6
j ; 1 и kt > kj g (▓о е▒▓╝ когда изве▒▓но, какие из ╜лемен▓ов
k1; : : :; kj;1 бол╝╕е kj ). М╗ на╡одим▒┐ в ▒и▓│а╢ии лемм╗ 13.5 (в▒е
пе░е▒▓ановки ╜лемен▓ов ▒ индек▒ами из U ░авнове░о┐▓н╗), и по╜▓ом│ │▒ловна┐ ве░о┐▓но▒▓╝ ▒об╗▓и┐ jGj j > t=2 п░и данном U ░авна ве░о┐▓но▒▓и ▓ого, ╖▓о в ▒л│╖айной пе░е▒▓ановке из u = jU j ╜лемен▓ов е▒▓╝ по к░айней ме░е t=2 ╜лемен▓ов, мен╝╕и╡ в▒е╡ п░ед╗д│╣и╡. С ░о▒▓ом u ╜▓а ве░о┐▓но▒▓╝ ▓ол╝ко ░а▒▓е▓, ▓ак ╖▓о в▒е
│▒ловн╗е ве░о┐▓но▒▓и не п░ево▒╡од┐▓ PfjS j > t=2g, где S оп░еделено как в лемме 13.5. По╜▓ом│ и полна┐ ве░о┐▓но▒▓╝ ▒об╗▓и┐
fjGj j > t=2g не п░ево▒╡оди▓ PfjS j > t=2g.
Аналоги╖н╗м об░азом
PfjLj j > t=2g 6 PfjS j > t=2g
и, ▒огла▒но не░авен▒▓в│ (13.2),
Pfd(kj ; T ) > tg 6 2PfjS j > t=2g:
262
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
Вз┐в ▓епе░╝ t = 2( + 1)Hn , где Hn = 1 + 1=2 + : : : + 1=n (а 4;32
| ко░ен╝ │░авнени┐ (ln ; 1) = 2) и п░именив лемм│ 13.5, м╗
закл╛╖аем, ╖▓о
Pfd(kj ; T ) > 2( + 1)Hn g 6 2PfjS j > ( + 1)Hn g 6 2=n2 :
В▒его ве░╕ин в де░еве не более n, по╜▓ом│ ве░о┐▓но▒▓╝ ▓ого,
╖▓о кака┐-▓о ве░╕ина б│де▓ име▓╝ гл│бин│ 2( +1)Hn или бол╝╕е,
не более ╖ем в n ░аз п░ево▒╡оди▓ ▓ак│╛ же ве░о┐▓но▒▓╝ дл┐ одной
ве░╕ин╗, и по▓ом│ не п░ево▒╡оди▓ 2=n. И▓ак, ▒ ве░о┐▓но▒▓╝╛ по
мен╝╕ей ме░е 1 ; 2=n в╗▒о▓а ▒л│╖айного де░ева не п░ево▒╡оди▓
2( + 1)Hn , и в л╛бом ▒л│╖ае она не бол╝╕е n. Таким об░азом,
ма▓ема▓и╖е▒кое ожидание не п░ево▒╡оди▓ (2( + 1)Hn)(1 ; 2=n) +
n(2=n) = O(lg n).
Уп░ажнени┐
13.4-1 П░иведи▓е п░име░ де░ева пои▒ка, в ко▓о░ом ▒░едн┐┐ (по
в▒ем ве░╕инам) гл│бина ве░╕ин╗ е▒▓╝ (lg n), но в╗▒о▓а де░ева
е▒▓╝ ! (lg n). На▒кол╝ко велика може▓ б╗▓╝ в╗▒о▓а де░ева, е▒ли
▒░едн┐┐ гл│бина ве░╕ин╗ е▒▓╝ (lg n)?
13.4-2 Покажи▓е, ╖▓о п░и на╕ем понимании ▒л│╖айного двои╖ного де░ева пои▒ка не в▒е │по░┐до╖енн╗е де░ев╝┐ ▒ данн╗ми
n кл╛╖ами ░авнове░о┐▓н╗. (Указание: Ра▒▒мо▓░и▓е ▒л│╖ай n = 3.)
13.4-3? Дл┐ данной кон▒▓ан▓╗ r > 1 │кажи▓е кон▒▓ан▓│ t, дл┐ ко▓о░ой ве░о┐▓но▒▓╝ ▒об╗▓и┐ └в╗▒о▓а ▒л│╖айного двои╖ного де░ева
пои▒ка не мен╝╕е tHn ┴ мен╝╕е 1=nr .
13.4-4? Ра▒▒мо▓░им алго░и▓м Randomized-Quicksort, п░имененн╗й к по▒ледова▓ел╝но▒▓и из n ╖и▒ел. Докажи▓е, ╖▓о дл┐
л╛бой кон▒▓ан▓╗ k > 0 ▒│╣е▒▓в│е▓ ▓ака┐ кон▒▓ан▓а c, ╖▓о ▒
ве░о┐▓но▒▓╝╛ не менее 1 ; c=nk алго░и▓м заве░╕ае▓ ░або▓│ за
в░ем┐ cn lg n.
Зада╖и
13-1 Двои╖н╗е де░ев╝┐ пои▒ка и ░авн╗е кл╛╖и
Равн╗е кл╛╖и | и▒▓о╖ник п░облем п░и ░або▓е ▒ де░ев╝┐ми пои▒ка.
а. Какова а▒имп▓о▓ика в░емени ░або▓╗ п░о╢ед│░╗ Tree-Insert
п░и добавлении n одинаков╗╡ кл╛╖ей в изна╖ал╝но п│▒▓ое де░ево?
Зада╖и к главе 13
263
П░и╖ина ▓│▓ в ▓ом, ╖▓о п░и в╗бо░е в ▒▓░ока╡ 5{7 и 11{13 м╗ в ▒л│╖ае ░авен▒▓ва в▒егда двигаем▒┐ нап░аво по де░ев│. Б│дем ░а▒▒ма▓░ива▓╝ ▒л│╖ай ░авен▒▓ва о▓дел╝но. О╢ени▓е а▒имп▓о▓ик│ в░емени добавлени┐ n ░авн╗╡ кл╛╖ей в п│▒▓ое де░ево п░и и▒пол╝зовании
▓░е╡ ░азли╖н╗╡ под╡одов:
б. Х░аним в ве░╕ине x ┤лаг b[x], и в╗би░аем левого или п░авого ░ебенка в зави▒имо▒▓и о▓ зна╖ени┐ b[x]. П░и ╜▓ом ┤лаг мен┐е▓▒┐ п░и каждом по▒е╣ении ве░╕ин╗, ▓ак ╖▓о нап░авлени┐
╖е░ед│╛▓▒┐.
в. Х░аним ╜лемен▓╗ ▒ ░авн╗ми кл╛╖ами в одной ве░╕ине (▒ помо╣╝╛ ▒пи▒ка) и добавл┐ем ╜лемен▓ ▒ │же в▒▓░е╖ав╕им▒┐ кл╛╖ом
в ╜▓о▓ ▒пи▒ок.
г. Нап░авление движени┐ в╗би░аем ▒л│╖айно. (Каково б│де▓ в░ем┐ в ╡│д╕ем ▒л│╖ае? Ч▓о в╗ може▓е ▒каза▓╝ о ма▓ема▓и╖е▒ком
ожидании?)
13-2 Ци┤░ов╗е де░ев╝┐
Ра▒▒мо▓░им две ▒▓░оки a = a0 a1 : : :ap и b = b0 b1 : : :bq , ▒о▒▓авленн╗е из ▒имволов неко▓о░ого (│по░┐до╖енного) ал┤ави▓а. Гово░┐▓,
╖▓о ▒▓░ока a лек▒иког░а┤и╖е▒ки мен╝╕е ▒▓░оки b (a is lexicographically less than b), е▒ли в╗полн┐е▓▒┐ одно из дв│╡ │▒ловий:
1. С│╣е▒▓в│е▓ ╖и▒ло j из 0:: min(p; q ), п░и ко▓о░ом ai = bi дл┐ в▒е╡
i = 0; 1; : : :; j ; 1 и aj < bj .
2. p < q и ai = bi дл┐ в▒е╡ i = 0; 1; : : :; p.
Нап░име░, 10100 < 10110 ▒огла▒но п░авил│ 1 (п░и j = 3), а 10100 <
101000 ▒огла▒но п░авил│ 2. Такой по░┐док п░имен┐е▓▒┐ в ▒лова░┐╡.
С▓░оение ╢и┤░ового де░ева (radix tree) видно из п░име░а на
░и▒. 13.6, где показано де░ево, ╡░ан┐╣ее би▓ов╗е ▒▓░оки 1011, 10,
011, 100 и 0. П░и пои▒ке ▒▓░оки a = a0 a1 : : :ap м╗ на i-м ╕аге идем
налево п░и ai = 0 и нап░аво п░и ai = 1. П│▒▓╝ ╜лемен▓ами множе▒▓ва S ┐вл┐╛▓▒┐ попа░но ░азли╖н╗е би▓ов╗е ▒▓░оки ▒│мма░ной
длин╗ n. Покажи▓е, как ▒ помо╣╝╛ ╢и┤░ового де░ева о▓▒о░▓и░ова▓╝ S в лек▒иког░а┤и╖е▒ком по░┐дке за (n) дей▒▓вий. (Нап░име░, дл┐ множе▒▓ва ░и▒. 13.6 ░ез│л╝▓а▓ом ▒о░▓и░овки б│де▓
по▒ледова▓ел╝но▒▓╝ 0; 011; 10; 100; 1011.)
13-3 С░едн┐┐ гл│бина ве░╕ин╗ в ▒л│╖айном двои╖ном де░еве
В ╜▓ой зада╖е м╗ докажем, ╖▓о ма▓ема▓и╖е▒кое ожидание ▒░едней гл│бин╗ ве░╕ин╗ в ▒л│╖айном двои╖ном де░еве ▒ n ве░╕инами е▒▓╝ O(lg n). Хо▓┐ ╜▓о▓ ░ез│л╝▓а▓ ▒лабее, ╖ем ░ез│л╝▓а▓ ▓ео░ем╗ 13.6, доказа▓ел╝▒▓во │▒▓анавливае▓ ин▓е░е▒н╗е аналогии
межд│ двои╖н╗ми де░ев╝┐ми пои▒ка и п░о╢ед│░ой RandomizedQuicksort из ░аздела 8.3.
264
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
Ра▒▒мо▓░им (▒░. глав│ 5, │п░. 5.5-6) ▒│мм│ гл│бин d(x; T ) в▒е╡
ве░╕ин x де░ева T , ко▓о░│╛ м╗ б│дем обозна╖а▓╝ P (T ).
а. С░едн┐┐ гл│бина ве░╕ин╗ в де░еве T е▒▓╝
1 X d(x; T ) = 1 P (T ):
n x2T
б.
в.
n
Таким об░азом, надо показа▓╝, ╖▓о ма▓ема▓и╖е▒кое ожидание
P (T ) е▒▓╝ O(n lg n).
Обозна╖им ╖е░ез TL и TR левое и п░авое подде░ев╝┐ де░ева T .
Убеди▓е▒╝, ╖▓о е▒ли T ▒оде░жи▓ n ве░╕ин, ▓о
P (T ) = P (TL ) + P (TR) + n ; 1:
Обозна╖им ╖е░ез P (n) ма▓ема▓и╖е▒кое ожидание вн│▓░енней
▒│мм╗ длин дл┐ ▒л│╖айного двои╖ного де░ева пои▒ка ▒ n ве░╕инами. Покажи▓е, ╖▓о
P (n) = n1
г.
n;1
X
i=0
(P (i) + P (n ; i ; 1) + n ; 1):
Покажи▓е, ╖▓о
P (n) = n2
nX
;1
k=1
P (k) + (n):
В▒помина┐ ░а▒▒│ждение из ░аздела 8.4.2 (о╢енка ма▓ема▓и╖е▒кого ожидани┐ в░емени б╗▒▓░ой ▒о░▓и░овки), покажи▓е, ╖▓о
P (n) = O(n lg n).
В каждом ░ек│░▒ивном в╗зове б╗▒▓░ой ▒о░▓и░овки м╗ ▒л│╖айн╗м об░азом в╗би░аем г░ани╖н╗й ╜лемен▓. Подобно ╜▓ом│, кажда┐ ве░╕ина де░ева пои▒ка ┐вл┐е▓▒┐ г░ани╢ей межд│ лев╗м и
п░ав╗м ▒воим подде░евом.
е. Опи╕и▓е ░еализа╢и╛ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки, п░и ко▓о░ом в п░о╢е▒▒е ▒о░▓и░овки ╜лемен▓ов k1; : : :; kn в╗полн┐╛▓▒┐
в ▓о╖но▒▓и ▓е же ▒░авнени┐, ╖▓о и п░и добавлении и╡ в (изна╖ал╝но п│▒▓ое) де░ево. (По░┐док ▒░авнений може▓ б╗▓╝ д░│гим.)
д.
13-4 Коли╖е▒▓во ░азн╗╡ двои╖н╗╡ де░ев╝ев
Обозна╖им ╖е░ез bn коли╖е▒▓во ░азли╖н╗╡ двои╖н╗╡ де░ев╝ев
▒ n ве░╕инами. В ╜▓ой зада╖е ▓░еб│е▓▒┐ в╗ве▒▓и ┤о░м│л│ дл┐ bn
и о╢ени▓╝ ▒ко░о▒▓╝ ░о▒▓а ╖и▒ла bn .
Заме╖ани┐ к главе 13
а.
265
Покажи▓е, ╖▓о b0 = 1 и ╖▓о
bn =
б.
nX
;1
k=0
bk bn;1;k
п░и n > 1.
П│▒▓╝ B (x) | п░оизвод┐╣а┐ ┤│нк╢и┐
B (x) =
1
X
n=0
bn xn
(оп░еделение п░оизвод┐╣и╡ ┤│нк╢ий дано в зада╖е 4-6). Покажи▓е, ╖▓о B (x) = xB (x)2 + 1 и, ▓аким об░азом,
p
B(x) = 21x (1 ; 1 ; 4x):
Р┐д Тейло░а (Taylor expansion) ┤│нк╢ии f (x) в ▓о╖ке x = a оп░едел┐е▓▒┐ ┤о░м│лой
f (x) =
1
X
f (k) (a) (x ; a)k
k=0 k!
где f (k) (a) | k-┐ п░оизводна┐ f в ▓о╖ке a.
в. Покажи▓е, ╖▓о
bn = n +1 1 C2nn
p
░азложив
в ░┐д Тейло░а ┤│нк╢и╛ 1 ; 4x в ▓о╖ке 0. (Р┐д дл┐
p
1 + h = (1 + h)1=2 можно пол│╖и▓╝ ▓акже как обоб╣ение бинома Н╝╛▓она, е▒ли дл┐ не╢ел╗╡ n и ╢ел╗╡ нео▓░и╢а▓ел╝н╗╡ k
положи▓╝ Cnk = n(n ; 1) : : : (n ; k + 1)=k!.)
Чи▒ло bn наз╗вае▓▒┐ n-м ╖и▒лом Ка▓алана (Catalan number).
г. Покажи▓е, ╖▓о
n
b = p 4 (1 + O(1=n)):
n
n3=2
Заме╖ани┐
Под░обное об▒│ждение двои╖н╗╡ де░ев╝ев пои▒ка и многи╡ аналоги╖н╗╡ ▒▓░│к▓│░ данн╗╡ можно най▓и │ Кн│▓а [123]. Видимо,
двои╖н╗е де░ев╝┐ пои▒ка б╗ли незави▒имо п░ид│ман╗ многими
л╛д╝ми незадолго до 1960 года.
266
Глава 13 Двои╖н╗е де░ев╝┐ пои▒ка
кл╛╖и 21 9 4 25 7 12 3 10 19 29 17 6 26 18
G0j
21
25
19 29
Gj
21
19
9 4
7 12 3 10
L0j
Lj
9
12
(б)
Множе▒▓ва Gj и Lj , ▒о▒▓авл┐╛╣ие множе▒▓во кл╛╖ей на п│▓и к
кл╛╖│ kj = 17. (а) Че░н╗е ве░╕ин╗ ▒оде░жа▓ кл╛╖и из Gj , бел╗е из Lj , о▒▓ал╝н╗е ве░╕ин╗ | ▒е░╗е. В╗делен п│▓╝ к кл╛╖│ kj . Кл╛╖и левее п│нк▓и░ной
линии мен╝╕е kj , кл╛╖и п░авее | бол╝╕е. (б) Множе▒▓во G0j = f21; 25; 19; 29g
▒о▒▓ои▓ из кл╛╖ей, добавленн╗╡ ░ан╝╕е кл╛╖а 17 и бол╝╕и╡ 17. Множе▒▓во
Gj = f21; 19g ▒оде░жи▓ кл╛╖и, б╗в╕ие ближай╕ими ▒п░ава
к кл╛╖│ 17, ▓о е▒▓╝
б╗в╕ие минимал╝н╗ми в │же по┐вив╕ей▒┐ ╖а▒▓и G0j . Кл╛╖ 21 б╗л добавлен
пе░в╗м к G0j и попал в Gj ; кл╛╖ 25 не попал (он бол╝╕е ▓ек│╣его миним│ма,
░авного 21). Кл╛╖ 19 попадае▓ в Gj , по▓ом│ ╖▓о он мен╝╕е 21, а 29 | не▓, ▓ак
как 29 > 19. Множе▒▓ва L0j и Lj ▒▓░о┐▓▒┐ аналоги╖н╗м об░азом.
Ри▒. 13.5
Заме╖ани┐ к главе 13
267
Ци┤░овое де░ево ╡░ани▓ ▒▓░оки 1011, 10, 011, 100 и 0. Каждой ве░╕ине ▒оо▓ве▓▒▓в│е▓ кл╛╖ | ▒▓░ока, ко▓о░│╛ можно п░о╖е▒▓╝, ид┐ из ко░н┐
в ╜▓│ ве░╕ин│, по╜▓ом│ ╜▓и кл╛╖и не надо ╡░ани▓╝ ▒пе╢иал╝но (на ░и▒│нке
они показан╗ дл┐ нагл┐дно▒▓и). Темн╗е ве░╕ин╗ не ▒оо▓ве▓▒▓в│╛▓ кл╛╖ам,
а ┐вл┐╛▓▒┐ п░омеж│▓о╖н╗ми дл┐ д░│ги╡ ве░╕ин.
Ри▒. 13.6
14
К░а▒но-╖
е░н╗е де░ев╝┐
В главе 13 м╗ показали, ╖▓о о▒новн╗е опе░а╢ии ▒ двои╖н╗м де░евом пои▒ка в╗▒о▓╗ h мог│▓ б╗▓╝ в╗полнен╗ за O(h) дей▒▓вий.
Де░ев╝┐ ╜┤┤ек▓ивн╗, е▒ли и╡ в╗▒о▓а мала | но мала┐ в╗▒о▓а не
га░ан▓и░│е▓▒┐, и в ╡│д╕ем ▒л│╖ае де░ев╝┐ не более ╜┤┤ек▓ивн╗,
╖ем ▒пи▒ки. К░а▒но-╖е░н╗е де░ев╝┐ | один из ▓ипов └▒балан▒и░ованн╗╡┴ де░ев╝ев пои▒ка, в ко▓о░╗╡ п░ед│▒мо▓░ен╗ опе░а╢ии
балан▒и░овки, га░ан▓и░│╛╣ие, ╖▓о в╗▒о▓а де░ева не п░евзойде▓
O(lg n).
14.1. Свой▒▓ва к░а▒но-╖е░н╗╡ де░ев╝ев
К░а▒но-╖е░ное де░ево (red-black tree) | ╜▓о двои╖ное де░ево
пои▒ка, ве░╕ин╗ ко▓о░ого ░азделен╗ на к░а▒н╗е (red) и ╖е░н╗е
(black). Таким об░азом, кажда┐ ве░╕ина ╡░ани▓ один дополни▓ел╝н╗й би▓ | ее ╢ве▓.
П░и ╜▓ом должн╗ в╗полн┐▓╝▒┐ оп░еделенн╗е ▓░ебовани┐, ко▓о░╗е га░ан▓и░│╛▓, ╖▓о гл│бин╗ л╛б╗╡ дв│╡ ли▒▓╝ев о▓ли╖а╛▓▒┐
не более ╖ем в два ░аза, по╜▓ом│ де░ево можно назва▓╝ ▒балан▒и░ованн╗м (balanced).
Кажда┐ ве░╕ина к░а▒но-╖е░ного де░ева имее▓ пол┐ color (╢ве▓),
key (кл╛╖), left (лев╗й ░ебенок), right (п░ав╗й ░ебенок) и p (░оди▓ел╝). Е▒ли │ ве░╕ин╗ о▓▒│▓▒▓в│е▓ ░ебенок или ░оди▓ел╝, ▒оо▓ве▓▒▓в│╛╣ее поле ▒оде░жи▓ nil. Дл┐ │доб▒▓ва м╗ б│дем ▒╖и▓а▓╝, ╖▓о
зна╖ени┐ nil, ╡░ан┐╣ие▒┐ в пол┐╡ left и right, ┐вл┐╛▓▒┐ ▒▒╗лками
на дополни▓ел╝н╗е (┤ик▓ивн╗е) ли▒▓╝┐ де░ева. В ▓аком пополненном де░еве кажда┐ ▒▓а░а┐ ве░╕ина (▒оде░жа╣а┐ кл╛╖) имее▓ дв│╡
де▓ей.
Двои╖ное де░ево пои▒ка наз╗вае▓▒┐ к░а▒но-╖е░н╗м де░евом, е▒ли оно обладае▓ ▒лед│╛╣ими ▒вой▒▓вами (б│дем наз╗ва▓╝ и╡ RB▒вой▒▓вами, по-англий▒ки red-black properties):
1. Кажда┐ ве░╕ина | либо к░а▒на┐, либо ╖е░на┐.
2. Кажд╗й ли▒▓ (nil) | ╖е░н╗й.
Свой▒▓ва к░а▒но-╖е░н╗╡ де░ев╝ев
269
Ри▒. 14.1 К░а▒но-╖
е░ное де░ево. Че░н╗е ве░╕ин╗ показан╗ как ▓емн╗е, к░а▒н╗е | как ▒е░╗е. Кажда┐ ве░╕ина либо к░а▒на┐, либо ╖е░на┐. В▒е nil-ли▒▓╝┐
╖е░н╗е. Де▓и к░а▒ной ве░╕ин╗ | ╖е░н╗е. Дл┐ каждой ве░╕ин╗ в▒е п│▓и о▓
нее вниз к ли▒▓╝┐м ▒оде░жи▓ одинаковое коли╖е▒▓во ╖е░н╗╡ ве░╕ин. Около
каждой ве░╕ин╗ (к░оме ли▒▓╝ев) запи▒ана ее ╖е░на┐ в╗▒о▓а. Че░на┐ в╗▒о▓а
ли▒▓╝ев ░авна 0.
3. Е▒ли ве░╕ина к░а▒на┐, оба ее ░ебенка ╖е░н╗е.
4. В▒е п│▓и, ид│╣ие вниз о▓ ко░н┐ к ли▒▓╝┐м, ▒оде░жа▓ одинаковое коли╖е▒▓во ╖е░н╗╡ ве░╕ин.
П░име░ к░а▒но-╖е░ного де░ева показан на ░и▒│нке 14.1.
Ра▒▒мо▓░им п░оизвол╝н│╛ ве░╕ин│ x к░а▒но-╖е░ного де░ева и
п│▓и, вед│╣ие вниз о▓ нее к ли▒▓╝┐м. В▒е они ▒оде░жа▓ одно и
▓о же ╖и▒ло ╖е░н╗╡ ве░╕ин (добавим к ним п│▓╝ из ко░н┐ в x
и п░именим ▒вой▒▓во 4). Чи▒ло ╖е░н╗╡ ве░╕ин в л╛бом из ни╡
(▒ам│ ве░╕ин│ x м╗ не ▒╖и▓аем) б│дем наз╗ва▓╝ ╖е░ной в╗▒о▓ой
(black-height) ве░╕ин╗ x и обозна╖а▓╝ bh(x). Че░ной в╗▒о▓ой де░ева б│дем ▒╖и▓а▓╝ ╖е░н│╛ в╗▒о▓│ его ко░н┐.
След│╛╣а┐ лемма показ╗вае▓, ╖▓о к░а▒но-╖е░н╗е де░ев╝┐ ╡о░о╕и как де░ев╝┐ пои▒ка.
Лемма 14.1. К░а▒но-╖е░ное де░ево ▒ n вн│▓░енними ве░╕инами
(▓. е. не ▒╖и▓а┐ nil-ли▒▓╝ев) имее▓ в╗▒о▓│ не бол╝╕е 2 lg(n +1).
Доказа▓ел╝▒▓во. Сна╖ала покажем, ╖▓о подде░ево ▒ ко░нем в x
▒оде░жи▓ по мен╝╕ей ме░е 2bh(x) ; 1 вн│▓░енни╡ ве░╕ин. Доказа▓ел╝▒▓во п░оведем инд│к╢ией о▓ ли▒▓╝ев к ко░н╛. Дл┐ ли▒▓╝ев
╖е░на┐ в╗▒о▓а ░авна 0, и подде░ево в ▒амом деле ▒оде░жи▓ не менее
2bh(x) ; 1 = 20 ; 1 = 0 вн│▓░енни╡ ве░╕ин. П│▒▓╝ ▓епе░╝ ве░╕ина x не ┐вл┐е▓▒┐ ли▒▓ом и имее▓ ╖е░н│╛ в╗▒о▓│ k. Тогда оба ее
░ебенка име╛▓ ╖е░н│╛ в╗▒о▓│ не мен╝╕е k ; 1 (к░а▒н╗й ░ебенок
б│де▓ име▓╝ в╗▒о▓│ k, ╖е░н╗й | k ; 1). По п░едположени╛ инд│к╢ии левое и п░авое подде░ев╝┐ ве░╕ин╗ x ▒оде░жа▓ не менее
2k;1 ; 1 ве░╕ин, и по▓ом│ подде░ево ▒ ко░нем в x ▒оде░жи▓ по
мен╝╕ей ме░е 2k;1 ; 1 + 2k;1 ; 1 + 1 = 2k ; 1 вн│▓░енни╡ ве░╕ин.
Ч▓об╗ заве░╕и▓╝ доказа▓ел╝▒▓во лемм╗, обозна╖им в╗▒о▓│ де░ева ╖е░ез h. Согла▒но ▒вой▒▓в│ 3, по мен╝╕ей ме░е половин│ в▒е╡
270
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
ве░╕ин на п│▓и о▓ ко░н┐ к ли▒▓│, не ▒╖и▓а┐ ко░ен╝, ▒о▒▓авл┐╛▓
╖е░н╗е ве░╕ин╗. Следова▓ел╝но, ╖е░на┐ в╗▒о▓а де░ева не мен╝╕е h=2. Тогда
n > 2h=2 ; 1:
Пе░ено▒┐ 1 налево и пе░ейд┐ к лога░и┤мам, пол│╖аем lg(n + 1) >
h=2, или h 6 2 lg(n + 1). Лемма доказана.
Тем ▒ам╗м дл┐ к░а▒но-╖е░н╗╡ де░ев╝ев опе░а╢ии Search, Minimum, Maximum, Successor и Predecessor в╗полн┐╛▓▒┐ за в░ем┐
O(lg n), ▓ак как в░ем┐ и╡ в╗полнени┐ е▒▓╝ O(h) дл┐ де░ева в╗▒о▓╗ h, а к░а▒но-╖е░ное де░ево ▒ n ве░╕инами имее▓ в╗▒о▓│ O(lg n).
Сложнее об▒▓ои▓ дело ▒ п░о╢ед│░ами Tree-Insert и TreeDelete из глав╗ 13: п░облема в ▓ом, ╖▓о они мог│▓ и▒по░▓и▓╝
▒▓░│к▓│░│ к░а▒но-╖е░ного де░ева, на░│╕ив RB-▒вой▒▓ва. По╜▓ом│ ╜▓и п░о╢ед│░╗ п░иде▓▒┐ моди┤и╢и░ова▓╝. М╗ │видим в ░аздела╡ 14.3 и 14.4, как можно ░еализова▓╝ добавление и │даление
╜лемен▓ов за в░ем┐ O(lg n) ▒ ▒о╡░анением RB-▒вой▒▓в.
Уп░ажнени┐
14.1-1 На░и▒│й▓е полное двои╖ное де░ево пои▒ка в╗▒о▓╗ 3 ▒
кл╛╖ами f1; 2; : : :; 15g. Добав╝▓е nil-ли▒▓╝┐ и пок░а▒╝▓е ве░╕ин╗
▓░ем┐ ▒по▒обами ▓ак, ╖▓об╗ пол│╖ив╕ие▒┐ к░а▒но-╖е░н╗е де░ев╝┐
имели ╖е░н│╛ в╗▒о▓│ 2, 3 и 4.
14.1-2 П░едположим, ╖▓о ко░ен╝ к░а▒но-╖е░ного де░ева к░а▒н╗й. Е▒ли м╗ пок░а▒им его в ╖е░н╗й ╢ве▓, о▒▓ане▓▒┐ ли де░ево
к░а▒но-╖е░н╗м?
14.1-3 Покажи▓е, ╖▓о ▒ам╗й длинн╗й п│▓╝ вниз о▓ ве░╕ин╗ x к
ли▒▓│ не более ╖ем вдвое длиннее ▒амого ко░о▓кого ▓акого п│▓и.
14.1-4 Какое наибол╝╕ее и наимен╝╕ее коли╖е▒▓во вн│▓░енни╡
ве░╕ин може▓ б╗▓╝ в к░а▒но-╖е░ном де░еве ╖е░ной в╗▒о▓╗ k?
14.1-5 Опи╕и▓е к░а▒но-╖е░ное де░ево, ▒оде░жа╣ее n кл╛╖ей, ▒
наибол╝╕им возможн╗м о▓но╕ением ╖и▒ла к░а▒н╗╡ вн│▓░енни╡
ве░╕ин к ╖и▒л│ ╖е░н╗╡ вн│▓░енни╡ ве░╕ин. Чем│ ░авно ╜▓о о▓но╕ение? Дл┐ какого де░ева ╜▓о о▓но╕ение б│де▓ наимен╝╕им, и
╖ем│ ░авно ╜▓о о▓но╕ение?
14.2. В░а╣ени┐
Опе░а╢ии Tree-Insert и Tree-Delete в╗полн┐╛▓▒┐ на к░а▒но╖е░ном де░еве за в░ем┐ O(lg n), но они измен┐╛▓ де░ево, и ░ез│л╝-
В░а╣ени┐
271
Ри▒. 14.2 Опе░а╢ии в░а╣ени┐ на двои╖ном де░еве пои▒ка. Опе░а╢и┐ RightRotate п░еоб░аз│е▓ левое де░ево в п░авое, мен┐┐ не▒кол╝ко │каза▓елей. П░авое
де░ево можно пе░еве▒▓и в левое об░а▓ной опе░а╢ией Left-Rotate. Ве░╕ин╗ x
и y мог│▓ на╡оди▓╝▒┐ в л╛бом ме▒▓е де░ева. Б│кв╗ , и обозна╖а╛▓ подде░ев╝┐. В обои╡ де░ев╝┐╡ в╗полнено одно и ▓о же ▒вой▒▓во │по░┐до╖енно▒▓и:
кл╛╖и из п░ед╕е▒▓в│╛▓ key[x], ко▓о░╗й п░ед╕е▒▓в│е▓ кл╛╖ам из , ко▓о░╗е
п░ед╕е▒▓в│╛▓ key[y], ко▓о░╗й п░ед╕е▒▓в│е▓ кл╛╖ам из .
▓а▓ може▓ не облада▓╝ RB-▒вой▒▓вами, опи▒анн╗ми в ░азделе 14.1.
Ч▓об╗ во▒▒▓анови▓╝ ╜▓и ▒вой▒▓ва, надо пе░ек░а▒и▓╝ неко▓о░╗е
ве░╕ин╗ и измени▓╝ ▒▓░│к▓│░│ де░ева.
М╗ б│дем мен┐▓╝ ▒▓░│к▓│░│ ▒ помо╣╝╛ в░а╣ений (rotations).
В░а╣ение п░ед▒▓авл┐е▓ ▒обой локал╝н│╛ опе░а╢и╛ (мен┐е▓▒┐ не▒кол╝ко │каза▓елей) и ▒о╡░ан┐е▓ ▒вой▒▓во │по░┐до╖енно▒▓и. На ░и▒│нке 14.2 показан╗ два взаимно об░а▓н╗╡ в░а╣ени┐: левое и п░авое. Левое в░а╣ение возможно в л╛бой ве░╕ине x, п░ав╗й ░ебенок
ко▓о░ой (назовем его y ) не ┐вл┐е▓▒┐ ли▒▓ом (nil). По▒ле в░а╣ени┐ y
оказ╗вае▓▒┐ ко░нем подде░ева, x | лев╗м ░ебенком y , а б╗в╕ий
лев╗й ░ебенок y | п░ав╗м ░ебенком x.
В п░о╢ед│░е Left-Rotate п░едполагае▓▒┐, ╖▓о right[x] 6= nil.
Left-Rotate(T; x)
1 y right[x]
. На╡одим y .
2 right[x] left[y ]
. Левое подде░ево y ▒▓анови▓▒┐
п░ав╗м подде░евом x.
3 if left[y ] 6= nil
4
then p[left[y ]] x
5 p[y ] p[x]
. Делаем ░оди▓ел┐ x ░оди▓елем y .
6 if p[x] = nil
7
then root[T ] y
8
else if x = left[p[x]]
9
then left[p[x]] y
10
else right[p[x]] y
11 left[y ] x
. Делаем x лев╗м ░ебенком y .
12 p[x] y
На ░и▒│нке 14.3 показано дей▒▓вие п░о╢ед│░╗ Left-Rotate. П░о╢ед│░а Right-Rotate аналоги╖на. Обе они ░або▓а╛▓ за в░ем┐
O(1) и мен┐╛▓ ▓ол╝ко │каза▓ели. О▒▓ал╝н╗е пол┐ ве░╕ин о▒▓а╛▓▒┐ неизменн╗ми.
272
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
Ри▒. 14.3 П░име░ дей▒▓ви┐ п░о╢ед│░╗ Left-Rotate. Дополни▓ел╝н╗е nilли▒▓╝┐ не показан╗. По░┐док кл╛╖ей в на╖ал╝ном и коне╖ном де░ев╝┐╡ один и
▓о▓ же.
Уп░ажнени┐
14.2-1 На░и▒│й▓е де░ево, ко▓о░ое пол│╖и▓▒┐, е▒ли ▒ помо╣╝╛
п░о╢ед│░╗ Tree-Insert добави▓╝ кл╛╖ 36 к де░ев│ ░и▒. 14.1. Е▒ли
▒дела▓╝ добавленн│╛ ве░╕ин│ к░а▒ной, б│де▓ ли пол│╖енное де░ево
облада▓╝ RB-▒вой▒▓вами? А е▒ли ▒дела▓╝ ее ╖е░ной?
14.2-2
Напи╕и▓е п░о╢ед│░│ Right-Rotate.
14.2-3 Убеди▓е▒╝, ╖▓о в░а╣ени┐ ▒о╡░ан┐╛▓ ▒вой▒▓во │по░┐до╖енно▒▓и.
14.2-4 П│▒▓╝ a, b и c | п░оизвол╝н╗е ве░╕ин╗ в подде░ев╝┐╡
, и на ░и▒. 14.2 (▒п░ава). Как измени▓▒┐ гл│бина a, b и c п░и
в╗полнении левого в░а╣ени┐?
14.2-5 Покажи▓е, ╖▓о п░оизвол╝ное двои╖ное де░ево пои▒ка
▒ n ве░╕инами може▓ б╗▓╝ п░еоб░азовано в л╛бое д░│гое де░ево
▒ ▓ем же ╖и▒лом ве░╕ин (и ▓еми же кл╛╖ами) ▒ помо╣╝╛ O(n)
в░а╣ений. (Указание: Сна╖ала покажи▓е, ╖▓о n ; 1 п░ав╗╡ в░а╣ений до▒▓а▓о╖но, ╖▓об╗ п░еоб░азова▓╝ л╛бое де░ево в ид│╣│╛
вп░аво ╢епо╖к│.)
Добавление ве░╕ин╗
273
14.3. Добавление ве░╕ин╗
Добавление ве░╕ин╗ в к░а▒но-╖е░ное де░ево п░оводи▓▒┐ за в░ем┐ O(lg n). Сна╖ала м╗ п░имен┐ем п░о╢ед│░│ Tree-Insert, как
делало▒╝ дл┐ двои╖н╗╡ де░ев╝ев пои▒ка, и к░а▒им нов│╛ ве░╕ин│
в к░а▒н╗й ╢ве▓. По▒ле ╜▓ого надо во▒▒▓анови▓╝ RB-▒вой▒▓ва, дл┐
╖его п░и╡оди▓▒┐ пе░ек░а▒и▓╝ неко▓о░╗е ве░╕ин╗ и п░оизве▒▓и
в░а╣ени┐. П░и ╜▓ом возможн╗ ░азли╖н╗е ▒и▓│а╢ии, ▒ ко▓о░╗ми
надо акк│░а▓но ░азоб░а▓╝▒┐.
RB-Insert (T; x)
1 Tree-Insert (T; x)
2 color[x] red
3 while x 6= root[T ] и color[p[x]] = red
4
do if p[x] = left[p[p[x]]]
5
then y right[p[p[x]]]
6
if color[y ] = red
7
then color[p[x]] black
. Сл│╖ай 1
8
color[y ] black
. Сл│╖ай 1
9
color[p[p[x]]] red
. Сл│╖ай 1
10
x p[p[x]]
. Сл│╖ай 1
11
else if x = right[p[x]]
12
then x p[x]
. Сл│╖ай 2
13
Left-Rotate(T; x) . Сл│╖ай 2
14
color[p[x]] black
. Сл│╖ай 3
15
color[p[p[x]]] red
. Сл│╖ай 3
16
Right-Rotate(T; p[p[x]]) . Сл│╖ай 3
17
else (аналоги╖н╗й ▓ек▒▓ ▒
заменой left $ right)
18 color[root[T ]] black
На ░и▒│нке 14.4 показан п░име░ п░именени┐ п░о╢ед│░╗ RBInsert.
П░о╢ед│░а RB-Insert п░о╣е, ╖ем каже▓▒┐ на пе░в╗й взгл┐д.
По▒ле в╗полнени┐ ▒▓░ок 1{2 в╗полн┐╛▓▒┐ в▒е RB-▒вой▒▓ва, к░оме одного: к░а▒на┐ ве░╕ина x може▓ име▓╝ к░а▒ного ░оди▓ел┐.
(▒м. ░и▒. 14.4а). В о▒▓ал╝ном в▒е в по░┐дке | д░│гие ▒вой▒▓ва └не
заме╖а╛▓┴ добавлени┐ к░а▒ной ве░╕ин╗ (о▓ме▓им, ╖▓о нова┐ к░а▒на┐ ве░╕ина имее▓ дв│╡ ╖е░н╗╡ nil-де▓ей).
Така┐ ▒и▓│а╢и┐ (в╗полнен╗ в▒е RB-▒вой▒▓ва, за и▒кл╛╖ением
▓ого, ╖▓о к░а▒на┐ ве░╕ина x може▓ име▓╝ к░а▒ного ░оди▓ел┐) б│де▓ ▒о╡░ан┐▓╝▒┐ по▒ле л╛бого ╖и▒ла и▓е░а╢ий ╢икла. На каждом
╕аге ве░╕ина x поднимае▓▒┐ вве░╡ по де░ев│ (е▒ли ▓ол╝ко не │дало▒╝ │▒▓░ани▓╝ на░│╕ени┐ полно▒▓╝╛; в ╜▓ом ▒л│╖ае м╗ в╗╡одим
из ╢икла).
274
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
Ри▒. 14.4 Рабо▓а п░о╢ед│░╗ RB-Insert. (а) Добавлена ве░╕ина x; п░и ╜▓ом
на░│╕ило▒╝ ▒вой▒▓во 3: x и его ░оди▓ел╝ к░а▒н╗е. Ве░╕ина y (ко▓о░│╛ можно
назва▓╝ └д┐дей┴ ве░╕ин╗ x) к░а▒на┐, по╜▓ом│ имее▓ ме▒▓о ▒л│╖ай 1. По▒ле пе░ек░а╕ивани┐ ве░╕ин пол│╖ае▓▒┐ де░ево (б). Нова┐ ве░╕ина x и ее ░оди▓ел╝
к░а▒н╗е, но д┐д┐ y ╖е░н╗й. Так как x | п░ав╗й ░ебенок, имее▓ ме▒▓о ▒л│╖ай 2.
П░оизводи▓▒┐ левое в░а╣ение, ко▓о░ое дае▓ де░ево (в). Тепе░╝ │же x ┐вл┐е▓▒┐
лев╗м ░ебенком, и ╜▓о | ▒л│╖ай 3. По▒ле п░авого в░а╣ени┐ пол│╖аем ко░░ек▓ное к░а▒но-╖е░ное де░ево (г).
Добавление ве░╕ин╗
275
Сл│╖ай 1. На░│╕ено ▒вой▒▓во 3: x и его ░оди▓ел╝ | к░а▒н╗е. На╕и
дей▒▓ви┐ не зави▒┐▓ о▓ ▓ого, ┐вл┐е▓▒┐ ли x п░ав╗м (а) или лев╗м (б) ▒╗ном.
В▒е подде░ев╝┐ , , , и " име╛▓ ╖е░н╗й ко░ен╝ и одинаков│╛ ╖е░н│╛
в╗▒о▓│. П░о╢ед│░а мен┐е▓ ╢ве▓ ве░╕ин╗ p[p[x]] и ее де▓ей. Цикл п░одолжае▓▒┐
по▒ле п░и▒ваивани┐ x p[p[x]]; ▒вой▒▓во 3 може▓ б╗▓╝ на░│╕ено ▓ол╝ко межд│
к░а▒ной ве░╕иной p[p[x]] и ее ░оди▓елем (е▒ли он ▓оже к░а▒н╗й).
Ри▒. 14.5
Вн│▓░и ╢икла ░а▒▒ма▓░ива╛▓▒┐ ╕е▒▓╝ ▒л│╖аев, но ▓░и из ни╡
▒имме▓░и╖н╗ ▓░ем д░│гим, ░азли╖и┐ ли╕╝ в ▓ом, ┐вл┐е▓▒┐ ли ░оди▓ел╝ ве░╕ин╗ x лев╗м или п░ав╗м ░ебенком ▒воего ░оди▓ел┐.
Э▓и ▒л│╖аи ░аздел┐╛▓▒┐ в ▒▓░оке 4. М╗ в╗пи▒али ┤░агмен▓ п░о╢ед│░╗ дл┐ ▒л│╖а┐, когда p[x] | лев╗й ░ебенок ▒воего ░оди▓ел┐.
(Симме▓░и╖н╗е ▒л│╖аи о▓но▒┐▓▒┐ к ▒▓░оке 17.)
М╗ б│дем п░едполага▓╝, ╖▓о во в▒е╡ ░а▒▒ма▓░иваем╗╡ нами
к░а▒но-╖е░н╗╡ де░ев╝┐╡ ко░ен╝ ╖е░н╗й (и подде░жива▓╝ ╜▓о ▒вой▒▓во | дл┐ ╜▓ого и▒пол╝з│е▓▒┐ ▒▓░ока 18). По╜▓ом│ в ▒▓░оке 4
к░а▒на┐ ве░╕ина p[x] не може▓ б╗▓╝ ко░нем (p[p[x]] ▒│╣е▒▓в│е▓).
Опе░а╢ии вн│▓░и ╢икла на╖ина╛▓▒┐ ▒ на╡ождени┐ ве░╕ин╗ y ,
ко▓о░а┐ ┐вл┐е▓▒┐ └д┐дей┴ ве░╕ин╗ x (имее▓ ▓ого же ░оди▓ел┐, ╖▓о
и ве░╕ина p[x]). Е▒ли ве░╕ина y к░а▒на┐, имее▓ ме▒▓о ▒л│╖ай 1,
е▒ли ╖е░на┐ | ▓о один из ▒л│╖аев 2 и 3. Во в▒е╡ ▒л│╖а┐╡ ве░╕ина
p[p[x]] ╖е░на┐, ▓ак как па░а x{p[x] б╗ла един▒▓венн╗м на░│╕ением
RB-▒вой▒▓в.
Сл│╖ай 1 (▒▓░оки 7{10) показан на ░и▒. 14.5. Э▓а ╖а▒▓╝ ▓ек▒▓а
и▒полн┐е▓▒┐, е▒ли и p[x], и y к░а▒н╗е. П░и ╜▓ом ве░╕ина p[p[x]]
| ╖е░на┐. Пе░ек░а▒им p[x] и y в ╖е░н╗й ╢ве▓, а p[p[x]] | в к░а▒н╗й. П░и ╜▓ом ╖и▒ло ╖е░н╗╡ ве░╕ин на л╛бом п│▓и из ко░н┐ к
ли▒▓╝┐м о▒▓ане▓▒┐ п░ежним. На░│╕ение RB-▒вой▒▓ва возможно в
един▒▓венном ме▒▓е нового де░ева: │ p[p[x]] може▓ б╗▓╝ к░а▒н╗й
░оди▓ел╝. По╜▓ом│ надо п░одолжи▓╝ в╗полнение ╢икла, п░и▒воив x зна╖ение p[p[x]].
В ▒л│╖а┐╡ 2 и 3 ве░╕ина y ╖е░на┐. Э▓и два ▒л│╖а┐ ░азли╖а╛▓▒┐ ▓ем, каким ░ебенком x п░и╡оди▓▒┐ ▒воем│ ░оди▓ел╛ | лев╗м
276
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
Ри▒. 14.6 Сл│╖аи 2 и 3 в п░о╢ед│░е RB-Insert. Как и дл┐ ▒л│╖а┐ 1, на░│╕ено
▒вой▒▓во 3 к░а▒но-╖е░н╗╡ де░ев╝ев, ▓ак как ве░╕ина x и ее ░оди▓ел╝ p[x] |
к░а▒н╗е. Ко░ни де░ев╝ев , , и | ╖е░н╗е; ╜▓и де░ев╝┐ име╛▓ одинаков│╛
╖е░н│╛ в╗▒о▓│. Оба в░а╣ени┐, показанн╗е на ░и▒│нке, не мен┐╛▓ ╖и▒ло ╖е░н╗╡
ве░╕ин на п│▓и о▓ ко░н┐ к ли▒▓╝┐м. По▒ле ╜▓ого м╗ в╗╡одим из ╢икла: RB▒вой▒▓ва в╗полнен╗ в▒╛д│.
или п░ав╗м. Е▒ли п░ав╗м, и▒полн┐╛▓▒┐ ▒▓░оки 12{13 (▒л│╖ай 2). В
╜▓ом ▒л│╖ае в╗полн┐е▓▒┐ левое в░а╣ение, ко▓о░ое ▒води▓ ▒л│╖ай 2
к ▒л│╖а╛ 3. когда x ┐вл┐е▓▒┐ лев╗м ░ебенком (░и▒. 14.6), Так как
и x, и p[x] к░а▒н╗е, по▒ле в░а╣ени┐ коли╖е▒▓ва ╖е░н╗╡ ве░╕ин на
п│▓┐╡ о▒▓а╛▓▒┐ п░ежними.
И▓ак, о▒▓ало▒╝ ░а▒▒мо▓░е▓╝ ▒л│╖ай 3: к░а▒на┐ ве░╕ина x ┐вл┐е▓▒┐ лев╗м ░ебенком к░а▒ной ве░╕ин╗ p[x], ко▓о░а┐ ┐вл┐е▓▒┐ лев╗м ░ебенком ╖е░ной ве░╕ин╗ p[p[x]], п░ав╗м ░ебенком ко▓о░ой
┐вл┐е▓▒┐ ╖е░на┐ ве░╕ина y . В ╜▓ом ▒л│╖ае до▒▓а▓о╖но п░оизве▒▓и
п░авое в░а╣ение и пе░ек░а▒и▓╝ две ве░╕ин╗, ╖▓об╗ │▒▓░ани▓╝ на░│╕ение RB -▒вой▒▓в. Цикл бол╝╕е не в╗полн┐е▓▒┐, ▓ак как ве░╕ина p[x] ▓епе░╝ ╖е░на┐.
Каково в░ем┐ в╗полнени┐ п░о╢ед│░╗ RB-Insert? В╗▒о▓а
к░а▒но-╖е░ного де░ева е▒▓╝ O(lg n), е▒ли в де░еве n ве░╕ин, по╜▓ом│ в╗зов Tree-Insert ▓░еб│е▓ в░емени O(lg n). Цикл пов▓о░┐е▓▒┐,
▓ол╝ко е▒ли м╗ в▒▓░е╖аем ▒л│╖ай 1, и п░и ╜▓ом x ▒двигае▓▒┐ вве░╡
по де░ев│. Таким об░азом, ╢икл пов▓о░┐е▓▒┐ O(lg n) ░аз, и об╣ее
в░ем┐ ░або▓╗ е▒▓╝ O(lg n). Ин▓е░е▒но, ╖▓о п░и ╜▓ом в╗полн┐е▓▒┐
не более дв│╡ в░а╣ений (по▒ле ко▓о░╗╡ м╗ в╗╡одим из ╢икла).
Уп░ажнени┐
14.3-1 В ▒▓░оке 2 п░о╢ед│░╗ RB-Insert м╗ к░а▒им нов│╛ ве░╕ин│ x в к░а▒н╗й ╢ве▓. Е▒ли б╗ м╗ пок░а▒или ее в ╖е░н╗й ╢ве▓,
▒вой▒▓во 3 не б╗ло б╗ на░│╕ено. По╖ем│ же м╗ ╜▓ого не ▒делали?
14.3-2 В ▒▓░оке 18 м╗ к░а▒им ко░ен╝ де░ева в ╖е░н╗й ╢ве▓. За╖ем ╜▓о делае▓▒┐?
14.3-3 На░и▒│й▓е к░а▒но-╖е░н╗е де░ев╝┐, ко▓о░ое пол│╖а╛▓▒┐ п░и по▒ледова▓ел╝ном добавлении к п│▒▓ом│ де░ев│ кл╛╖ей
41; 38; 31; 12; 19; 8.
Удаление
277
14.3-4 П│▒▓╝ ╖е░на┐ в╗▒о▓а каждого из подде░ев╝ев , , , , "
на ░и▒│нка╡ 14.5 и 14.6 ░авна k. Найди▓е ╖е░н╗е в╗▒о▓╗ в▒е╡ ве░╕ин на ╜▓и╡ ░и▒│нка╡ и п░ове░╝▓е, ╖▓о ▒вой▒▓во 4 дей▒▓ви▓ел╝но
не на░│╕ае▓▒┐.
14.3-5 Ра▒▒мо▓░им к░а▒но-╖е░ное де░ево, пол│╖енное добавлением n ве░╕ин к п│▒▓ом│ де░ев│. Убеди▓е▒╝, ╖▓о п░и n > 1 в де░еве
е▒▓╝ ╡о▓┐ б╗ одна к░а▒на┐ ве░╕ина.
14.3-6 Как ╜┤┤ек▓ивно ░еализова▓╝ п░о╢ед│░│ RB-Insert, е▒ли
в ве░╕ина╡ не ╡░ан┐▓▒┐ │каза▓ели на ░оди▓елей?
14.4. Удаление
Как и д░│гие опе░а╢ии, │даление ве░╕ин╗ из к░а▒но-╖е░ного де░ева ▓░еб│е▓ в░емени O(lg n). Удаление ве░╕ин╗ не▒кол╝ко ▒ложнее в▒▓авки.
Ч▓об╗ │п░о▒▓и▓╝ об░або▓к│ г░ани╖н╗╡ │▒ловий, м╗ и▒пол╝з│ем
┤ик▓ивн╗й ╜лемен▓ (по-англий▒ки наз╗ваем╗й sentinel) вме▒▓о nil
(▒м. c. ??). Дл┐ к░а▒но-╖е░ного де░ева T ┤ик▓ивн╗й ╜лемен▓ nil[T ]
имее▓ ▓е же пол┐, ╖▓о и об╗╖на┐ ве░╕ина де░ева. Его ╢ве▓ ╖е░н╗й,
а о▒▓ал╝н╗м пол┐м (p, left, right и key ) мог│▓ б╗▓╝ п░и▒воен╗ л╛б╗е зна╖ени┐. М╗ ▒╖и▓аем, ╖▓о в к░а▒но-╖е░ном де░еве в▒е │каза▓ели nil заменен╗ │каза▓ел┐ми на nil[T ].
Благода░┐ ┤ик▓ивн╗м ╜лемен▓ам м╗ можем ▒╖и▓а▓╝ nil-ли▒▓,
┐вл┐╛╣ий▒┐ ░ебенком ве░╕ин╗ x, об╗╖ной ве░╕иной, ░оди▓ел╝
ко▓о░ой е▒▓╝ x. В п░ин╢ипе можно б╗ло б╗ заве▒▓и по одной ┤ик▓ивной ве░╕ине дл┐ каждого ли▒▓а, но ╜▓о б╗ло б╗ нап░а▒ной по▓е░ей пам┐▓и. Ч▓об╗ избежа▓╝ ╜▓ого, м╗ и▒пол╝з│ем один ╜лемен▓
nil[T ], п░ед▒▓авл┐╛╣ий в▒е ли▒▓╗. Однако, когда м╗ ╡о▓им ░або▓а▓╝ ▒ ли▒▓ом | ░ебенком ве░╕ин╗ x, надо не заб╗▓╝ в╗полни▓╝
п░и▒ваивание p[nil[T ]] x.
П░о╢ед│░а RB-Delete ▒лед│е▓ ▒╡еме п░о╢ед│░╗ Tree-Delete
из ░аздела 13.3. В╗░езав ве░╕ин│, она в╗з╗вае▓ в▒помога▓ел╝н│╛
п░о╢ед│░│ RB-Delete-Fixup, ко▓о░а┐ мен┐е▓ ╢ве▓а и п░оизводи▓
в░а╣ени┐, ╖▓об╗ во▒▒▓анови▓╝ RB-▒вой▒▓ва.
278
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
RB-Delete (T; z )
1 if left[z ] = nil[T ] или right[z ] = nil[T ]
2
then y z
3
else y Tree-Successor(z )
4 if left[y ] 6= nil[T ]
5
then x left[y ]
6
else x right[y ]
7 p[x] p[y ]
8 if p[y ] = nil[T ]
9
then root[T ] x
10
else if y = left[p[y ]]
11
then left[p[y ]] x
12
else right[p[y ]] x
13 if y 6= z
14
then key[z ] key[y ]
15
. Копи░│ем дополни▓ел╝н╗е данн╗е из ве░╕ин╗ y .
16 if color[y ] = black
17
then RB-Delete-Fixup (T; x)
18 return y
Е▒▓╝ ▓░и ░азли╖и┐ межд│ п░о╢ед│░ами RB-Delete и TreeDelete. Во-пе░в╗╡, вме▒▓о nil в▒╛д│ ▒▓ои▓ │каза▓ел╝ на ┤ик▓ивн╗й ╜лемен▓ nil[T ]. Во-в▓о░╗╡, п░ове░ка x 6= nil в ▒▓░оке 7
п░о╢ед│░╗ Tree-Delete │далена, и п░и▒ваивание p[x] p[y ] в╗полн┐е▓▒┐ в л╛бом ▒л│╖ае. Е▒ли x е▒▓╝ ┤ик▓ивн╗й ╜лемен▓ nil[T ],
▓о его │каза▓ел╝ на ░оди▓ел┐ ▒▓анови▓▒┐ ░авн╗м ░оди▓ел╛ │дал┐емого ╜лемен▓а y . В-▓░е▓╝и╡, в ▒▓░ока╡ 16{17 в╗з╗вае▓▒┐ п░о╢ед│░а RB-Delete-Fixup, е▒ли │дал┐ема┐ ве░╕ина y | ╖е░на┐. П░и
│далении к░а▒ной ве░╕ин╗ RB-▒вой▒▓ва не на░│╕а╛▓▒┐ (╖е░н╗е
в╗▒о▓╗ не мен┐╛▓▒┐, и к░а▒н╗е ве░╕ин╗ не мог│▓ ▒▓а▓╝ ▒о▒едними). Пе░едаваема┐ п░о╢ед│░е RB-Delete-Fixup ве░╕ина x ┐вл┐ла▒╝ един▒▓венн╗м ░ебенком ве░╕ин╗ y , е▒ли │ y б╗л ░ебенок (не
┐вл┐╛╣ий▒┐ ли▒▓ом), или ┤ик▓ивн╗м ╜лемен▓ом nil[T ], е▒ли ве░╕ина y не имела де▓ей. В по▒леднем ▒л│╖ае п░и▒ваивание в ▒▓░оке 7 га░ан▓и░│е▓, ╖▓о p[x] │каз╗вае▓ на б╗в╕его ░оди▓ел┐ y |
вне зави▒имо▒▓и о▓ ▓ого, ┐вл┐е▓▒┐ ли x на▒▓о┐╣ей ве░╕иной или
┤ик▓ивн╗м ╜лемен▓ом.
По▒мо▓░им, как п░о╢ед│░а RB-Delete-Fixup во▒▒▓анавливае▓
RB-▒вой▒▓ва де░ева.
Удаление
RB-Delete-Fixup (T; x)
279
1 while x 6= root[T ] и color[x] = black
2
do if x = left[p[x]]
3
then w right[p[x]]
4
if color[w] = red
5
then color[w] black
. Сл│╖ай 1
6
color[p[x]] red
. Сл│╖ай 1
7
Left-Rotate(T; p[x])
. Сл│╖ай 1
8
w right[p[x]]
. Сл│╖ай 1
9
if color[left[w]] = black и
color[right[w]] = black
10
then color[w] red
. Сл│╖ай 2
11
x p[x]
. Сл│╖ай 2
12
else if color[right[w]] = black
13
then color[left[w]] black . Сл│╖ай 3
14
color[w] red
. Сл│╖ай 3
15
Right-Rotate(T; w) . Сл│╖ай 3
16
w right[p[x]]
. Сл│╖ай 3
17
color[w] color[p[x]]
. Сл│╖ай 4
18
color[p[x]] black
. Сл│╖ай 4
19
color[right[w]] black
. Сл│╖ай 4
20
Left-Rotate(T; p[x])
. Сл│╖ай 4
21
x root[T ]
. Сл│╖ай 4
22
else (▒имме▓░и╖н╗й ┤░агмен▓ ▒
заменой left $ right)
23 color[x] black
Е▒ли │даленна┐ п░о╢ед│░ой RB-Delete ве░╕ина y б╗ла ╖е░ной,
▓о л╛бой п│▓╝, ╖е░ез нее п░о╡одив╕ий, ▓епе░╝ ▒оде░жи▓ на одн│
╖е░н│╛ ве░╕ин│ мен╝╕е. Таким об░азом, ▒вой▒▓во 4 на░│╕ило▒╝.
М╗ можем компен▒и░ова▓╝ ╜▓о за ▒╖е▓ ве░╕ин╗ x (зан┐в╕ей ме▒▓о ве░╕ин╗ y ). Е▒ли x | к░а▒на┐, ▒делаем ее ╖е░ной (заодно м╗
избегаем опа▒но▒▓и пол│╖и▓╝ к░а▒н│╛ ве░╕ин│ ▒ к░а▒н╗м ░оди▓елем). Е▒ли x | ╖е░на┐, об║┐вим ее └дважд╗ ╖е░ной┴ и б│дем ▒╖и▓а▓╝ за две п░и под▒╖е▓е ╖и▒ла ╖е░н╗╡ ве░╕ин на п│▓и о▓ ко░н┐ к
ли▒▓╝┐м. Коне╖но, ▓акой в╗╡од може▓ б╗▓╝ ли╕╝ в░еменн╗м, по▒кол╝к│ оп░еделение к░а▒но-╖е░н╗╡ де░ев╝ев не п░ед│▒ма▓░ивае▓
дважд╗ ╖е░н╗╡ ве░╕ин, и м╗ должн╗ по▒▓епенно о▓ ▓акой ве░╕ин╗ избави▓╝▒┐.
П░о╢ед│░а RB-Delete-Fixup (T; x) п░имен┐е▓▒┐ к де░ев│, ко▓о░ое обладае▓ ▒вой▒▓вами к░а▒но-╖е░ного де░ева, е▒ли │╖е▒▓╝ дополни▓ел╝н│╛ едини╢│ ╖е░но▓╗ в ве░╕ине x, и п░ев░а╣ае▓ его
в на▒▓о┐╣ее к░а▒но-╖е░ное де░ево. В ╢икле (▒▓░оки 1{22) де░ево мен┐е▓▒┐, и зна╖ение пе░еменной x ▓оже мен┐е▓▒┐ (в╗деленна┐
ве░╕ина може▓ ▒двига▓╝▒┐ вве░╡ по де░ев│), но ▒┤о░м│ли░ованное
280
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
▒вой▒▓во о▒▓ае▓▒┐ ве░н╗м.
Цикл заве░╕ае▓▒┐, е▒ли (1) x │каз╗вае▓ на к░а▒н│╛ ве░╕ин│ (▓огда м╗ в ▒▓░оке 23 к░а▒им ее в ╖е░н╗й ╢ве▓) или е▒ли (2) x │каз╗вае▓ на ко░ен╝ (▓огда ли╕н┐┐ ╖е░но▓а може▓ б╗▓╝ п░о▒▓о │далена
из де░ева). Може▓ оказа▓╝▒┐ ▓акже, ╖▓о (3) вн│▓░и ▓ела ╢икла
│дае▓▒┐ в╗полни▓╝ не▒кол╝ко в░а╣ений и пе░ек░а▒и▓╝ не▒кол╝ко
ве░╕ин, по▒ле ╖его дважд╗ ╖е░на┐ ве░╕ина и▒╖езне▓. В ╜▓ом ▒л│╖ае п░и▒ваивание x root[T ] позвол┐е▓ в╗й▓и из ╢икла.
Вн│▓░и ╢икла x │каз╗вае▓ на дважд╗ ╖е░н│╛ ве░╕ин│, не ┐вл┐╛╣│╛▒┐ ко░нем. В ▒▓░оке 2 м╗ оп░едел┐ем, каким ░ебенком ┐вл┐е▓▒┐ x | лев╗м или п░ав╗м. (Под░обно в╗пи▒ана ╖а▒▓╝ п░о╢ед│░╗
дл┐ пе░вого ▒л│╖а┐, в▓о░ой ▒л│╖ай ▒имме▓░и╖ен и ▒к░╗▓ в ▒▓░оке 22.) Пе░еменна┐ w (▒▓░ока 3) │каз╗вае▓ на в▓о░ого ░ебенка
ве░╕ин╗ p[x] (└б░а▓а┴ ве░╕ин╗ x). Так как ве░╕ина x | дважд╗
╖е░на┐, w не може▓ б╗▓╝ ░авно nil[T ], по▒кол╝к│ в ╜▓ом ▒л│╖ае
вдол╝ одного п│▓и о▓ p[x] вниз (╖е░ез w) б╗ло б╗ мен╝╕е ╖е░н╗╡
ве░╕ин, ╖ем вдол╝ д░│гого (╖е░ез x).
Че▓╗░е возможн╗╡ ▒л│╖а┐ показан╗ на ░и▒. 14.7. П░ежде ╖ем
░азби░а▓╝▒┐ ▒ ними де▓ал╝но, по▒мо▓░им, как п░ове░и▓╝, ╖▓о п░еоб░азовани┐ не на░│╕а╛▓ ▒вой▒▓во 4. До▒▓а▓о╖но │беди▓╝▒┐, ╖▓о
коли╖е▒▓во ╖е░н╗╡ ве░╕ин о▓ ко░н┐ показанного подде░ева до
каждого из подде░ев╝ев ; ; : : :; не изменило▒╝. Нап░име░, на
░и▒. 14.7а, илл╛▒▓░и░│╛╣ем ▒л│╖ай 1, коли╖е▒▓во ╖е░н╗╡ ве░╕ин
о▓ ко░н┐ до каждого из подде░ев╝ев и ░авно 3 как до, ▓ак и по▒ле п░еоб░азовани┐. (Напомним, ╖▓о ве░╕ина x ▒╖и▓ае▓▒┐ за две.)
Аналоги╖но, коли╖е▒▓во ╖е░н╗╡ ве░╕ин о▓ ко░н┐ до , , " и , ░авно 2 до и по▒ле п░еоб░азовани┐. На ░и▒. 14.7б ве░╕ина B може▓
б╗▓╝ и ╖е░ной, и к░а▒ной. Е▒ли она к░а▒на┐, ▓о ╖и▒ло ╖е░н╗╡ ве░╕ин о▓ ко░н┐ до (до и по▒ле п░еоб░азовани┐) ░авно 2, е▒ли ╖е░на┐
| ▓о 3. О▒▓ал╝н╗е ▒л│╖аи п░ове░┐╛▓▒┐ аналоги╖но (│п░. 14.4-5).
И▓ак, ░а▒▒мо▓░им в▒е ▒л│╖аи по по░┐дк│. Сл│╖ай 1 (▒▓░оки 5{8
п░о╢ед│░╗ RB-Delete-Fixup, ░и▒. 14.7а) имее▓ ме▒▓о, когда ве░╕ина w, б░а▓ x, к░а▒на┐ (в ╜▓ом ▒л│╖ае и╡ ░оди▓ел╝, p[x], ╖е░н╗й).
Так как оба ░ебенка ве░╕ин╗ w ╖е░н╗е, м╗ можем помен┐▓╝ ╢ве▓а w и p[x] и п░оизве▒▓и левое в░а╣ение вок░│г p[x], не на░│╕а┐
RB-▒вой▒▓в. Ве░╕ина x о▒▓ае▓▒┐ дважд╗ ╖е░ной, а ее нов╗й б░а▓
| ╖е░н╗й, ▓ак ╖▓о м╗ ▒вели дело к одном│ из ▒л│╖аев 2, 3 или 4.
Е▒ли ве░╕ина w ╖е░на┐, имее▓ ме▒▓о один из ▒л│╖аев 2{4. Они
░азли╖а╛▓▒┐ межд│ ▒обой ╢ве▓ом де▓ей ве░╕ин╗ w. В ▒л│╖ае 2
(▒▓░оки 10{11, ░и▒. 14.7б) оба ░ебенка ве░╕ин╗ w ╖е░н╗е. Так как
ве░╕ина w ▓оже ╖е░на┐, м╗ можем ▒н┐▓╝ ╖е░н│╛ ок░а▒к│ ▒ x (ли╕н╛╛) и ▒ w (▒делав ее к░а▒ной), и добави▓╝ ╖е░но▓│ ░оди▓ел╛, p[x].
По▒ле ╜▓ого п░одолжим в╗полнение ╢икла. Заме▓им, ╖▓о е▒ли м╗
попали в ▒л│╖ай 2 из ▒л│╖а┐ 1, ▓о ве░╕ина p[x] | к░а▒на┐, по╜▓ом│
╢икл ▒░аз│ же заве░╕и▓▒┐ (добавив ╖е░ного к к░а▒ной ве░╕ине,
м╗ к░а▒им ее в об╗╖н╗й ╖е░н╗й ╢ве▓).
Удаление
281
В ▒л│╖ае 3 (▒▓░оки 13{16, ░и▒. 14.7в) ве░╕ина w ╖е░на┐, ее лев╗й
░ебенок | к░а▒н╗й, а п░ав╗й | ╖е░н╗й. М╗ можем помен┐▓╝
╢ве▓а w и ее левого ░ебенка и по▓ом п░имени▓╝ п░авое в░а╣ение
▓ак, ╖▓о RB-▒вой▒▓ва б│д│▓ ▒о╡░анен╗. Нов╗м б░а▓ом ве░╕ин╗ x
▓епе░╝ б│де▓ ╖е░на┐ ве░╕ина ▒ к░а▒н╗м п░ав╗м ░ебенком, и м╗
▒вели ▒л│╖ай 3 к ▒л│╖а╛ 4.
Наконе╢, в ▒л│╖ае 4 (▒▓░оки 17{21, ░и▒. 17.4г) ве░╕ина w (б░а▓
ве░╕ин╗ x) ┐вл┐е▓▒┐ ╖е░ной, а ее п░ав╗й ░ебенок | к░а▒н╗й. Мен┐┐ неко▓о░╗е ╢ве▓а и п░оизвод┐ левое в░а╣ение вок░│г p[x], м╗
можем │дали▓╝ изли╕н╛╛ ╖е░но▓│ │ x, не на░│╕а┐ RB-▒вой▒▓в.
П░и▒ваивание x root[T ] в╗води▓ на▒ из ╢икла.
Каково в░ем┐ в╗полнени┐ п░о╢ед│░╗ RB-Delete? В╗▒о▓а
к░а▒но-╖е░ного де░ева ▒ n ве░╕инами е▒▓╝ O(lg n), по╜▓ом│ в░ем┐
и▒полнени┐ RB-Delete без │╖е▓а RB-Delete-Fixup е▒▓╝ O(lg n).
Скол╝ко в░емени ▓░еб│е▓ ╢икл в п░о╢ед│░е RB-Delete-Fixup?
Как ▓ол╝ко обна░│живае▓▒┐ ▒л│╖ай 1, 3 или 4, м╗ в╗╡одим из
╢икла (п░и ╜▓ом в╗полн┐е▓▒┐ O(1) опе░а╢ий и ▒амое бол╝╕ее ▓░и
в░а╣ени┐). До ╜▓ого возможно не▒кол╝ко пов▓о░ений ▒л│╖а┐ 2, но
п░и каждом пов▓о░ении │каза▓ел╝ x пе░еме╣ае▓▒┐ вве░╡ по де░ев│
и никакие в░а╣ени┐ не п░оизвод┐▓▒┐, ▓ак ╖▓о ╖и▒ло ▓аки╡ ╕агов
е▒▓╝ O(lg n). Таким об░азом, п░о╢ед│░а RB-Delete-Fixup ▓░еб│е▓ в░емени O(lg n), и об╣ее в░ем┐ ░або▓╗ п░о╢ед│░╗ RB-Delete
▓акже е▒▓╝ O(lg n) (о▓ме▓им е╣е ░аз, ╖▓о п░и ╜▓ом п░оизводи▓▒┐
не более ▓░е╡ в░а╣ений).
Уп░ажнени┐
14.4-1 Убеди▓е▒╝, ╖▓о по▒ле в╗полнени┐ п░о╢ед│░╗ RB-Delete
ко░ен╝ де░ева о▒▓ае▓▒┐ ╖е░н╗м, е▒ли он ▓аков╗м б╗л.
14.4-2 В │п░. 14.3-3 по▒▓░оено к░а▒но-╖е░ное де░ево, ко▓о░ое пол│╖ае▓▒┐ добавлением кл╛╖ей 41; 38; 31; 12; 19; 8 в п│▒▓ое де░ево.
На░и▒│й▓е де░ев╝┐, ко▓о░╗е пол│╖а▓▒┐ из него п░и по▒ледова▓ел╝ном │далении кл╛╖ей 8; 12; 19; 31; 38; 41.
14.4-3 В каки╡ ▒▓░ока╡ п░о╢ед│░╗ RB-Delete-Fixup м╗ можем
╖и▓а▓╝ или измен┐▓╝ ┤ик▓ивн╗й ╜лемен▓ nil[T ]?
14.4-4 Уп░о▒▓и▓е п░о╢ед│░│ Left-Rotate, и▒пол╝з│┐ ┤ик▓ивн╗й ╜лемен▓ дл┐ п░ед▒▓авлени┐ nil и е╣е один ┤ик▓ивн╗й ╜лемен▓,
▒оде░жа╣ий │каза▓ел╝ на ко░ен╝ де░ева.
14.4-5 Дл┐ каждого из ▒л│╖аев на ░и▒│нке 14.7 под▒╖и▓ай▓е коли╖е▒▓во ╖е░н╗╡ ве░╕ин о▓ ко░н┐ подде░ева на ░и▒│нке до каждого из подде░ев╝ев ; ; : : :; и │беди▓е▒╝, ╖▓о оно не мен┐е▓▒┐ п░и
п░еоб░азовани┐╡. И▒пол╝з│й▓е обозна╖ение count(c) дл┐ └▒▓епени
282
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
Ри▒. 14.7 Че▓╗░е ▒л│╖а┐, возможн╗╡ в о▒новном ╢икле п░о╢ед│░╗ RBDelete-Fixup. Че░н╗е ве░╕ин╗ показан╗ как ╖е░н╗е, к░а▒н╗е показан╗
▓емно-▒е░╗ми. Све▓ло-▒е░╗е ве░╕ин╗ на ░и▒│нке мог│▓ б╗▓╝ и к░а▒н╗ми, и
╖е░н╗ми. (И╡ ╢ве▓а обозна╖а╛▓▒┐ c и c0 .) Б│кв╗ ; ; : : : ; обозна╖а╛▓ п░оизвол╝н╗е подде░ев╝┐. В каждом ▒л│╖ае кон┤иг│░а╢и┐ ▒лева п░еоб░аз│е▓▒┐ в
кон┤иг│░а╢и╛ ▒п░ава пе░ек░а╕иванием ве░╕ин и/или в░а╣ени┐ми. Ве░╕ина,
на ко▓о░│╛ │каз╗вае▓ x, дважд╗ ╖е░на┐. Един▒▓венн╗й ▒л│╖ай, когда в╗полнение ╢икла п░одолжае▓▒┐ | ▒л│╖ай 2. (а) Сл│╖ай 1 ▒води▓▒┐ к ▒л│╖а╛ 2, 3
или 4, е▒ли помен┐▓╝ ме▒▓ами ╢ве▓а ве░╕ин B ?? D и п░оизве▒▓и левое в░а╣ение. (б) В ▒л│╖ае 2 └изб╗▓ок ╖е░но▓╗┴ в ве░╕ине x пе░еме╣ае▓▒┐ вве░╡ по
де░ев│, когда м╗ делаем D к░а▒ной и │▒▓анавливаем │каза▓ел╝ x в B . Е▒ли м╗
попали в ▒л│╖ай 2 из ▒л│╖а┐ 1, ▓о ╢икл заве░╕ае▓▒┐, ▓ак как ве░╕ина B б╗ла
к░а▒ной. (в) Сл│╖ай 3 ▒води▓▒┐ к ▒л│╖а╛ 4, е▒ли помен┐▓╝ ме▒▓ами ╢ве▓а ве░╕ин C и D и в╗полни▓╝ п░авое в░а╣ение. (г) В ▒л│╖ае 4 можно пе░ек░а▒и▓╝
неко▓о░╗е ве░╕ин╗ и в╗полни▓╝ левое в░а╣ение (не на░│╕ив RB-▒вой▒▓ва)
▓ак, ╖▓о ли╕ний ╖е░н╗й ╢ве▓ и▒╖езае▓, и ╢икл можно заве░╕и▓╝.
Зада╖и к главе 14
283
╖е░но▓╗┴ ве░╕ин╗ ╢ве▓а c, ▒╖и▓а┐ count(c) ░авн╗м 0 дл┐ к░а▒ной
ве░╕ин╗ и 1 дл┐ ╖е░ной.
14.4-6 П░едположим, ╖▓о ве░╕ина в▒▓авлена в к░а▒но-╖е░ное де░ево, а по▓ом ▒░аз│ же │далена. Б│де▓ ли пол│╖ив╕ее▒┐ де░ево
▒овпада▓╝ ▒ и▒╡одн╗м? По╖ем│?
Зада╖и
14-1 Динами╖е▒кие множе▒▓ва ▒ ▒о╡░анением п░ед╗д│╣и╡ ве░▒ий
Иногда полезно ▒о╡░ан┐▓╝ п░ед╗д│╣ие ве░▒ии мен┐╛╣его▒┐
множе▒▓ва. (Такие ▒▓░│к▓│░╗ данн╗╡ наз╗ва╛▓▒┐ по-англий▒ки
persistent data structures.) Можно, коне╖но, копи░ова▓╝ множе▒▓во
кажд╗й ░аз, когда оно измен┐е▓▒┐. Но ▓акой под╡од ▓░еб│е▓ много пам┐▓и и в░емени | и е▒▓╝ ▒по▒об╗, позвол┐╛╣ие ▒дела▓╝ ╜▓о
более ╜┤┤ек▓ивно.
М╗ ╡о▓им п░ед│▒мо▓░е▓╝ возможно▒▓╝ ╡░анени┐ п░ед╗д│╣и╡
ве░▒ий дл┐ множе▒▓ва S ▒ опе░а╢и┐ми Insert, Delete и Search.
М╗ ▒╖и▓аем, ╖▓о множе▒▓во S ░еализовано ▒ помо╣╝╛ двои╖н╗╡
де░ев╝ев пои▒ка, как показано на ░и▒. 14.8а. Дл┐ каждой ве░▒ии
множе▒▓ва м╗ ╡░аним ▒вой о▓дел╝н╗й ко░ен╝. Ч▓об╗ добави▓╝
кл╛╖ 5, м╗ ▒оздаем нов│╛ ве░╕ин│ ▒ ╜▓им кл╛╖ом. Э▓а ве░╕ина
▒▓анови▓▒┐ лев╗м ░ебенком новой ве░╕ин╗ ▒ кл╛╖ом 7, ▓ак как
▒│╣е▒▓в│╛╣│╛ ве░╕ин│ мен┐▓╝ нел╝з┐. Подобн╗м об░азом нова┐
ве░╕ина ▒ кл╛╖ом 7 ▒▓анови▓▒┐ лев╗м ░ебенком новой ве░╕ин╗
▒ кл╛╖ом 8, п░ав╗й ░ебенок ко▓о░ой | ▒│╣е▒▓в│╛╣а┐ ве░╕ина ▒
кл╛╖ом 10. В ▒во╛ о╖е░ед╝, нова┐ ве░╕ина ▒ кл╛╖ом 8 ▒▓анови▓▒┐
п░ав╗м ░ебенком нового ко░н┐ r0 ▒ кл╛╖ом 4, лев╗й ░ебенок ко▓о░ого | ▒│╣е▒▓в│╛╣а┐ ве░╕ина ▒ кл╛╖ом 3. Таким об░азом, м╗
копи░│ем ли╕╝ ╖а▒▓╝ де░ева, а в о▒▓ал╝ном и▒пол╝з│ем ▒▓а░ое, как
╜▓о показано на ░и▒. 14.8б.
М╗ п░едполагаем, ╖▓о ве░╕ин╗ де░ева ▒оде░жа▓ пол┐ key, left и
right, но не ▒оде░жа▓ пол┐ p, │каз╗ва╛╣его на ░оди▓ел┐. (См. ▓акже │п░. 14.3-6.)
а. Покажи▓е, какие ве░╕ин╗ ╡░анимого ▓аким об░азом де░ева
должн╗ б╗▓╝ изменен╗ (▒оздан╗) в об╣ем ▒л│╖ае п░и добавлении или │далении ╜лемен▓а.
б. Напи╕и▓е п░о╢ед│░│ Persistent-Tree-Insert, ко▓о░а┐ добавл┐е▓ кл╛╖ k в де░ево T .
в. Е▒ли в╗▒о▓а де░ева ░авна h, ▒кол╝ко в░емени и пам┐▓и ▓░еб│е▓ напи▒анна┐ вами п░о╢ед│░а? (Коли╖е▒▓во пам┐▓и можно
изме░┐▓╝ коли╖е▒▓вом нов╗╡ ве░╕ин.)
г. П│▒▓╝ м╗ и▒пол╝з│ем и пол┐ p в ве░╕ина╡ де░ева. В ╜▓ом ▒л│╖ае
п░о╢ед│░а Persistent-Tree-Insert должна б│де▓ в╗полни▓╝
284
Глава 14 К░а▒но-╖е░н╗е де░ев╝┐
Ри▒. 14.8 (а) Двои╖ное де░ево пои▒ка ▒ кл╛╖ами 2; 3; 4; 7; 8; 10. (б) Де░ево ▒
▒о╡░анением п░ед╗д│╣и╡ ве░▒ий по▒ле добавлени┐ кл╛╖а 5. Тек│╣а┐ ве░▒и┐
▒о▒▓ои▓ из ве░╕ин, до▒▓│пн╗╡ из ▓ек│╣его ко░н┐ r0 , а п░ед╗д│╣а┐ ве░▒и┐
▒оде░жи▓ ве░╕ин╗, до▒▓│пн╗е из ▒▓а░ого ко░н┐ r. Темно-▒е░╗е ве░╕ин╗ добавлен╗ п░и добавлении кл╛╖а 5.
д.
дополни▓ел╝н╗е дей▒▓ви┐. Покажи▓е, ╖▓о в ╜▓ом ▒л│╖ае в░ем┐
░або▓╗ и об║ем необ╡одимой пам┐▓и б│д│▓ (n), где n | коли╖е▒▓во ве░╕ин в де░еве.
Покажи▓е, как можно и▒пол╝зова▓╝ к░а▒но-╖е░н╗е де░ев╝┐,
╖▓об╗ га░ан▓и░ова▓╝, ╖▓о добавление и │даление ╜лемен▓а дл┐
множе▒▓ва ▒ ╡░анением п░ед╗д│╣и╡ ве░▒ий б│д│▓ ▓░ебова▓╝
в░емени O(lg n) в ╡│д╕ем ▒л│╖ае.
14-2 Опе░а╢и┐ об║единени┐ к░а▒но-╖е░н╗╡ де░ев╝ев
Опе░а╢и┐ об║единени┐ (join) п░имен┐е▓▒┐ к дв│м динами╖е▒ким
множе▒▓вам S1 и S2 и ╜лемен▓│ x, п░и╖ем за░анее изве▒▓но, ╖▓о
key[x1] 6 key[x] 6 key[x2] дл┐ л╛б╗╡ x1 2 S1 и x2 2 S2. Ее ░ез│л╝▓а▓ом ┐вл┐е▓▒┐ множе▒▓во S = S1 [ fxg [ S2. В ╜▓ой зада╖е
м╗ покажем, как ░еализова▓╝ опе░а╢и╛ об║единени┐ дл┐ к░а▒но╖е░н╗╡ де░ев╝ев.
а. М╗ б│дем ╡░ани▓╝ ╖е░н│╛ в╗▒о▓│ к░а▒но-╖е░ного де░ева T
в ▒пе╢иал╝ной пе░еменной bh[T ]. Убеди▓е▒╝, ╖▓о ╜▓о зна╖ение
можно подде░жива▓╝, не ░азме╣а┐ никакой дополни▓ел╝ной ин┤о░ма╢ии в ве░╕ина╡ де░ева и не │╡│д╕а┐ а▒имп▓о▓ик│ в░емени ░або▓╗ п░о╢ед│░ RB-Insert и RB-Delete. Покажи▓е, ╖▓о,
▒п│▒ка┐▒╝ по де░ев│, можно в╗╖и▒ли▓╝ ╖е░н│╛ в╗▒о▓│ каждой
ве░╕ин╗ за в░ем┐ O(1) в ░а▒╖е▓е на кажд│╛ п░о▒мо▓░енн│╛
ве░╕ин│.
М╗ ╡о▓им ░еализова▓╝ опе░а╢и╛ RB-Join(T1; x; T2), ко▓о░а┐ из
дв│╡ де░ев╝ев T1 и T2 ┤о░ми░│е▓ новое к░а▒но-╖е░ное де░ево T =
T1 [ fxg [ T2 (▒▓а░╗е де░ев╝┐ п░и ╜▓ом ░аз░│╕а╛▓▒┐). П│▒▓╝ n |
об╣ее коли╖е▒▓во ве░╕ин в T1 и T2.
Заме╖ани┐ к главе 14
б.
в.
г.
д.
285
С╖и▓а┐, ╖▓о bh[T1] > bh[T2], опи╕и▓е алго░и▓м ▒о в░еменем ░або▓╗ O(lg n), на╡од┐╣ий ▒░еди ╖е░н╗╡ ве░╕ин де░ева T1 , име╛╣и╡ ╖е░н│╛ в╗▒о▓│ bh[T2], ве░╕ин│ y ▒ наибол╝╕им кл╛╖ом.
П│▒▓╝ Ty | подде░ево ▒ ко░нем y . Покажи▓е, как замени▓╝ Ty
на Ty [ fxg [ T2 за в░ем┐ O(1) без по▓е░и ▒вой▒▓ва │по░┐до╖енно▒▓и.
В какой ╢ве▓ надо пок░а▒и▓╝ x, ╖▓об╗ ▒о╡░ани▓╝ RB-▒вой▒▓ва 1,
2 и 4? Об║┐▒ни▓е, как во▒▒▓анови▓╝ ▒вой▒▓во 3 за в░ем┐ O(lg n).
Убеди▓е▒╝, ╖▓о в░ем┐ в╗полнени┐ п░о╢ед│░╗ RB-Join е▒▓╝
O(lg n).
Заме╖ани┐
Иде┐ балан▒и░овки двои╖н╗╡ де░ев╝ев пои▒ка п░инадлежи▓
Г. М. Адел╝▒он│-Вел╝▒ком│ и Е. М. Ланди▒│ [2], п░едложив╕им в
1962 год│ кла▒▒ ▒балан▒и░ованн╗╡ де░ев╝ев, наз╗ваем╗╡ ▓епе░╝
АВЛ-де░ев╝┐ми. Балан▒ подде░живае▓▒┐ ▒ помо╣╝╛ в░а╣ений;
дл┐ его во▒▒▓ановлени┐ по▒ле добавлени┐ или │далени┐ ве░╕ин╗
може▓ по▓░ебова▓╝▒┐ (lg n) в░а╣ений (дл┐ де░ева ▒ n ве░╕инами). Е╣е один кла▒▒ де░ев╝ев пои▒ка, наз╗ваем╗╡ 2-3-де░ев╝┐ми,
б╗л п░едложен Хопк░о┤▓ом (J. E. Hopcroft, не оп│бликовано) в
1970 год│. Зде▒╝ балан▒ подде░живае▓▒┐ за ▒╖е▓ изменени┐ ▒▓епеней ве░╕ин. Обоб╣ение 2-3-де░ев╝ев, наз╗ваемое Б-де░ев╝┐ми,
п░едложили Байе░ и МакК░ей▓ [18]; Б-де░ев╝┐ об▒│жда╛▓▒┐ в
главе 19.
К░а▒но-╖е░н╗е де░ев╝┐ п░едложил Байе░ [17], назвав и╡ └▒имме▓░и╖н╗ми двои╖н╗ми Б-де░ев╝┐ми┴. Гиба▒ и Седжвик [93] под░обно из│╖или и╡ ▒вой▒▓ва и п░едложили и▒пол╝зова▓╝ дл┐ нагл┐дно▒▓и к░а▒н╗й и ╖е░н╗й ╢ве▓а.
Из многи╡ д░│ги╡ ва░иа╢ий на ▓ем│ ▒балан▒и░ованн╗╡ де░ев╝ев
наиболее л╛боп╗▓н╗, видимо, └░а▒╕и░┐╛╣ие▒┐ де░ев╝┐┴ (splay
trees), ко▓о░╗е п░ид│мали Слеа▓о░ и Та░╝┐н [177]. Э▓и де░ев╝┐
┐вл┐╛▓▒┐ └▒амо░ег│ли░│╛╣ими▒┐┴. (Хо░о╕ее опи▒ание ░а▒╕и░┐╛╣и╡▒┐ де░ев╝ев дал Та░╝┐н [188].) Ра▒╕и░┐╛╣ие▒┐ де░ев╝┐ подде░жива╛▓ балан▒ без и▒пол╝зовани┐ дополни▓ел╝н╗╡ полей (▓ипа
╢ве▓а). Вме▒▓о ╜▓ого └░а▒╕и░┐╛╣ие опе░а╢ии┴ (splay operations),
вкл╛╖а╛╣ие в░а╣ени┐, в╗полн┐╛▓▒┐ п░и каждом об░а╣ении к де░ев│. У╖е▓на┐ ▒▓оимо▒▓╝ (amortized cost, гл. 18) в ░а▒╖е▓е на одн│ опе░а╢и╛ ▒ де░евом дл┐ ░а▒╕и░┐╛╣и╡▒┐ де░ев╝ев ▒о▒▓авл┐е▓
O(lg n).
15
Пополнение ▒▓░│к▓│░ данн╗╡
Далеко не во в▒е╡ ▒и▓│а╢и┐╡ можно обой▓и▒╝ ли╕╝ кла▒▒и╖е▒кими ▒▓░│к▓│░ами данн╗╡ (двои╖н╗ми де░ев╝┐ми пои▒ка, дв│▒▓о░онне ▒в┐занн╗ми ▒пи▒ками, ╡е╕-▓абли╢ами и ▓. п.) Однако ░едко
▓░еб│е▓▒┐ п░ид│ма▓╝ ╖▓о-▓о ▒ов▒ем новое: в бол╝╕ин▒▓ве ▒л│╖аев до▒▓а▓о╖но ░а▒╕и░и▓╝ как│╛-либо из кла▒▒и╖е▒ки╡ ▒▓░│к▓│░
данн╗╡, ╡░ан┐ вме▒▓е ▒ ее об║ек▓ами дополни▓ел╝н│╛ ин┤о░ма╢и╛. Э┤┤ек▓ивное обновление ╜▓ой ин┤о░ма╢ии п░и в╗полнении
опе░а╢ий иногда ▓░еб│е▓ немалой изоб░е▓а▓ел╝но▒▓и.
В ка╖е▒▓ве п░име░а в ╜▓ом ░азделе ░а▒▒ма▓░ива╛▓▒┐ к░а▒но╖е░н╗е де░ев╝┐. Х░ан┐ в ве░╕ина╡ дополни▓ел╝н│╛ ин┤о░ма╢и╛,
м╗ ▒можем б╗▒▓░о на╡оди▓╝ i-й по по░┐дк│ ╜лемен▓, а ▓акже в╗полн┐▓╝ об░а▓ное дей▒▓вие: на╡оди▓╝ по░┐дков╗й номе░ данного
╜лемен▓а множе▒▓ва (░азд. 15.1). В ░азделе 15.2 об▒│ждае▓▒┐ об╣а┐ ▒╡ема ░або▓╗ ▒ дополни▓ел╝ной ин┤о░ма╢ией и доказ╗вае▓▒┐
▓ео░ема, ко▓о░а┐ облег╖ае▓ пополнение дл┐ к░а▒но-╖е░н╗╡ де░ев╝ев. В ░азделе 15.3 ╜▓а же ▓ео░ема и▒пол╝з│е▓▒┐ дл┐ по▒▓░оени┐
▒▓░│к▓│░╗ данн╗╡, ╡░ан┐╣ей динами╖е▒кое множе▒▓во п░омеж│▓ков (на ╖и▒ловой п░┐мой) и позвол┐╛╣ей б╗▒▓░о на╡оди▓╝ ╜лемен▓
множе▒▓ва, пе░ек░╗ва╛╣ий▒┐ ▒ заданн╗м п░омеж│▓ком.
15.1. Динами╖е▒кие по░┐дков╗е ▒▓а▓и▒▓ики
По░┐дков╗е ▒▓а▓и▒▓ики │же об▒│ждали▒╝ в главе 10, где м╗ и▒кали i-й по по░┐дк│ ╜лемен▓ множе▒▓ва из n ╜лемен▓ов, ╖▓о ▓░ебовало O(n) опе░а╢ий (е▒ли множе▒▓во п░едва░и▓ел╝но не │по░┐до╖ено). В данном ░азделе м╗ покажем, как ▒ помо╣╝╛ пополненн╗╡
к░а▒но-╖е░н╗╡ де░ев╝ев най▓и i-й ╜лемен▓ за O(log n) опе░а╢ий.
К░оме ▓ого, за ▓о же в░ем┐ можно б│де▓ най▓и по░┐дков╗й номе░
заданного ╜лемен▓а.
Под╡од┐╣а┐ ▒▓░│к▓│░а данн╗╡ показана на ░и▒. 15.1. По░┐дков╗м де░евом (order-statistic tree) м╗ наз╗ваем к░а▒но-╖е░ное де░ево T , кажда┐ ве░╕ина x ко▓о░ого, помимо об╗╖н╗╡ полей key[x],
color[x], p[x], left[x] и right[x] имее▓ поле size[x]. В нем ╡░ани▓▒┐ ░аз-
Динами╖е▒кие по░┐дков╗е ▒▓а▓и▒▓ики
287
ме░ (коли╖е▒▓во ве░╕ин, не ▒╖и▓а┐ nil-ли▒▓╝ев) подде░ева ▒ ко░нем в x (▒╖и▓а┐ и ▒ам│ ве░╕ин│ x). С╖и▓а┐, ╖▓о в поле size[nil]
запи▒ан 0, можно напи▒а▓╝ ▓акое ▒оо▓но╕ение:
size[x] = size[left[x]] + size[right[x]] + 1:
(П░и ░еализа╢ии можно и▒пол╝зова▓╝ ┤ик▓ивн╗й ╜лемен▓ nil[T ],
как в ░азделе 14.4, а можно кажд╗й ░аз п░ове░┐▓╝, не ░авен ли │каза▓ел╝ зна╖ени╛ nil, и под▒▓авл┐▓╝ 0 вме▒▓о зна╖ени┐ пол┐ size.)
Пои▒к i-го по вели╖ине ╜лемен▓а
М╗ должн╗ │ме▓╝ обновл┐▓╝ дополни▓ел╝н│╛ ин┤о░ма╢и╛ (пол┐ size ) п░и добавлении и │далении ╜лемен▓ов. Но ▒на╖ала об║┐▒ним, как е╛ пол╝зова▓╝▒┐. На╖нем ▒ пои▒ка i-го ╜лемен▓а. Рек│░▒ивна┐ п░о╢ед│░а OS-Select(x; i) возв░а╣ае▓ │каза▓ел╝ на i-й ╜лемен▓ подде░ева ▒ ко░нем x. Най▓и i-й ╜лемен▓ во в▒ем де░еве T
можно ▒ помо╣╝╛ в╗зова OS-Select(root[T ]; i).
OS-Select(x; i)
1 r size[left[x]]+1
2 if i = r
3 then return x
4 elseif i < r
5 then return OS-Select(left[x]; i)
6 else return OS-Select(right[x]; i ; r)
Э▓о▓ алго░и▓м и▒пол╝з│е▓ ▓│ же иде╛, ╖▓о и алго░и▓м╗ пои▒ка
глав╗ 10. В подде░еве ▒ ко░нем x ▒на╖ала ид│▓ size[left[x]] ве░╕ин левого подде░ева, мен╝╕и╡ x, за▓ем ▒ама ве░╕ина x (ко▓о░а┐
┐вл┐е▓▒┐ (size[left[x]] + 1)-й по ▒╖е▓│), и за▓ем ве░╕ин╗ п░авого
подде░ева x.
П░о╢ед│░а на╖инае▓ ▒ в╗╖и▒лени┐ по░┐дкового номе░а r ве░╕ин╗ x (▒▓░ока 1). Е▒ли i = r (▒▓░ока 2), ▓о x и е▒▓╝ i-й ╜лемен▓,
и м╗ возв░а╣аем его (▒▓░ока 3). Е▒ли i < r, ▓о и▒ком╗й ╜лемен▓
на╡оди▓▒┐ в левом подде░еве ве░╕ин╗ x, и п░ог░амма ░ек│░▒ивно в╗з╗вае▓ ▒еб┐ (▒▓░ока 5). Е▒ли же i > r, ▓о и▒ком╗й ╜лемен▓
на╡оди▓▒┐ в п░авом подде░еве ве░╕ин╗ x, но его по░┐дков╗й номе░ вн│▓░и ╜▓ого подде░ева б│де▓ │же не i, а i ; r. Э▓о▓ ╜лемен▓
в╗дае▓▒┐ п░и ░ек│░▒ивном в╗зове в ▒▓░оке 6.
Покажем, как п░о╢ед│░а OS-Select и╣е▓ 17-й ╜лемен▓ де░ева,
изоб░аженного на ░и▒. 15.1. М╗ на╖инаем ▒ ко░н┐ (▒ кл╛╖ом 26),
п░и ╜▓ом i = 17. Разме░ левого подде░ева ко░н┐ ░авен 12, по╜▓ом│
по░┐дков╗й номе░ ко░н┐ ░авен 13, и и▒кома┐ ве░╕ина на╡оди▓▒┐ в
п░авом подде░еве, име┐ ▓ам по░┐дков╗й номе░ 17 ; 13 = 4. И╣ем
4-й ╜лемен▓ подде░ева ▒ ко░нем 41. Левое подде░ево ве░╕ин╗ 41
имее▓ ░азме░ 5, ▓. е. по░┐дков╗й номе░ ве░╕ин╗ 41 ░авен 6. И╣ем
288
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
По░┐дковое де░ево. К░а▒н╗е ве░╕ин╗ изоб░ажен╗ как ▒ве▓ло▒е░╗е, ╖е░н╗е | как ▓емн╗е. Помимо об╗╖н╗╡ полей к░а▒но-╖е░ного де░ева,
│ каждой ве░╕ин╗ x е▒▓╝ поле size[x], где ╡░ани▓▒┐ ░азме░ подде░ева ▒ ко░нем
в x.
Ри▒. 15.1
4-й ╜лемен▓ подде░ева ▒ ко░нем 30. В ╜▓ом де░еве ко░ен╝ имее▓
по░┐дков╗й номе░ 2, по╜▓ом│ и╣ем (4 ; 2) = 2-й ╜лемен▓ п░авого
подде░ева. В ╜▓ом де░еве ко░ен╝ 38 оказал▒┐ в▓о░╗м по по░┐дк│
(░азме░ левого подде░ева ░авен 1), по╜▓ом│ м╗ возв░а╣аем │каза▓ел╝ на ве░╕ин│ 38.
П░и каждом ░ек│░▒ивном в╗зове п░о╢ед│░╗ м╗ ▒п│▒каем▒┐ по
де░ев│ на один │░овен╝, по╜▓ом│ в░ем┐ ░або▓╗ в ╡│д╕ем ▒л│╖ае
п░опо░╢ионал╝но в╗▒о▓е. В╗▒о▓а к░а▒но-╖е░ного де░ева ▒ n ве░╕инами ░авна O(log n), ▓ак ╖▓о в░ем┐ ░або▓╗ п░о╢ед│░╗ OSSelect на n-╜лемен▓ном множе▒▓ве е▒▓╝ O(log n).
Оп░еделение по░┐дкового номе░а ╜лемен▓а
П░о╢ед│░а OS-Rank пол│╖ае▓ │каза▓ел╝ на ╜лемен▓ x по░┐дкового де░ева T и на╡оди▓ по░┐дков╗й номе░ (rank) ╜лемен▓а в
де░еве.
OS-Rank(T; x)
1 r size[left[x]] + 1
2 y x
3 while y 6= root[T ]
4
do if y = right[p[y ]]
5
then r r + size[left[p[y ]]] + 1
6
y p[y ]
7 return r
По░┐дков╗й номе░ ╜лемен▓а x на едини╢│ бол╝╕е коли╖е▒▓ва
╜лемен▓ов, мен╝╕и╡ x. Цикл в ▒▓░ока╡ 3{6 имее▓ ▓акой инва░иан▓:
r е▒▓╝ по░┐дков╗й номе░ ве░╕ин╗ x в подде░еве ▒ ко░нем y. Пе░ед
пе░в╗м в╗полнением ╢икла ╜▓о ▓ак: r е▒▓╝ по░┐дков╗й номе░ x
в де░еве ▒ ко░нем в x (▒▓░ока 1), а y = x (▒▓░ока 2). Как надо
измени▓╝ r п░и пе░е╡оде о▓ ве░╕ин╗ y к ее ░оди▓ел╛ p[y ]? Е▒ли y
Динами╖е▒кие по░┐дков╗е ▒▓а▓и▒▓ики
289
| лев╗й ░ебенок ве░╕ин╗ p[y ], ▓о ве░╕ина x имее▓ один и ▓о▓ же
по░┐дков╗й номе░ в подде░ев╝┐╡ ▒ ко░н┐ми в y и p[y ]. Е▒ли же y
| п░ав╗й ░ебенок, п░и пе░е╡оде о▓ y к p[y ] к по░┐дковом│ номе░│
ве░╕ин╗ x п░ибави▓▒┐ size[left[p[y ]]] ╜лемен▓ов левого подде░ева и
▒ама ве░╕ина p[y ]. В ▒▓░оке 5 м╗ │╖ли ╜▓│ добавк│.
П░и в╗╡оде из ╢икла y = root[T ], а r | по░┐дков╗й номе░ x во
в▒ем де░еве.
Дл┐ п░име░а по▒мо▓░им, как ╜▓а п░о╢ед│░а оп░едели▓ по░┐дков╗й номе░ ве░╕ин╗ ▒ кл╛╖ом 38 в де░еве, изоб░аженном на
░и▒. 15.1. В ▓абли╢е показан кл╛╖ ве░╕ин╗ y и ╖и▒ло r в на╖але каждого ╢икла.
Шаг key[x] r
1
38
2
2
30
4
3
41
4
4
26 17
Возв░а╣ае▓▒┐ зна╖ение 17.
С кажд╗м ╕агом гл│бина ве░╕ин╗ y │мен╝╕ае▓▒┐ на едини╢│,
и кажд╗й ╕аг ▓░еб│е▓ в░емени O(1), по╜▓ом│ в░ем┐ ░або▓╗ п░о╢ед│░╗ OS-Rank на n-╜лемен▓ном множе▒▓ве е▒▓╝ O(log n).
Обновление ин┤о░ма╢ии о ░азме░а╡ подде░ев╝ев
С помо╣╝╛ полей size м╗ на│╖или▒╝ б╗▒▓░о в╗╖и▒л┐▓╝ по░┐дков╗й номе░ ╜лемен▓а, а ▓акже на╡оди▓╝ i-й ╜лемен▓ де░ева. Тепе░╝
надо пон┐▓╝, как обновл┐▓╝ ╜▓о поле п░и добавлении и │далении
╜лемен▓а из к░а▒но-╖е░ного де░ева. Оказ╗вае▓▒┐, ╜▓о можно ▒дела▓╝, не │╡│д╕ив а▒имп▓о▓и╖е▒к│╛ о╢енк│ в░емени ░або▓╗ п░о╢ед│░ добавлени┐ и │далени┐ ╜лемен▓а.
Как м╗ видели в ░азделе 14.3, добавление ╜лемен▓а в к░а▒но╖е░ное де░ево ▒о▒▓ои▓ из дв│╡ ╖а▒▓ей: ▒на╖ала м╗ добавл┐ем нов│╛
ве░╕ин│, дела┐ ее ░ебенком │же ▒│╣е▒▓в│╛╣ей, а за▓ем п░оизводим неко▓о░╗е в░а╣ени┐ и пе░ек░а╕ивани┐ (е▒ли ╜▓о необ╡одимо)
На пе░вом ╜▓апе м╗ дл┐ каждой п░ойденной ве░╕ин╗ x (на п│▓и о▓ ко░н┐ до ме▒▓а добавлени┐ ве░╕ин╗) │вели╖им на едини╢│
зна╖ение size[x]. В поле size добавленной ве░╕ин╗ запи╕ем ╖и▒ло 1.
П░и ╜▓ом м╗ п░о╡одим п│▓╝ длиной O(log n) и дополни▓ел╝но ▓░а▓им в░ем┐ O(log n), по▒ле ╖его в▒е пол┐ size п░авил╝н╗.
П░и в░а╣ении измен┐╛▓▒┐ ░азме░╗ ▓ол╝ко дв│╡ подде░ев╝ев: и╡
ве░╕инами ┐вл┐╛▓▒┐ кон╢╗ ░еб░а, вок░│г ко▓о░ого п░ои▒╡одило
в░а╣ение. По╜▓ом│ к ▓ек▒▓│ п░о╢ед│░╗ Left-Rotate(T; x) (░аздел 14.2) до▒▓а▓о╖но добави▓╝ ▒▓░оки
13 size[y ] size[x]
14 size[x] size[left[x]] + size[right[x]] + 1
290
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
Обновление пол┐ size п░и в░а╣ени┐╡ вок░│г ░еб░а (x; y). Э▓о поле
необ╡одимо обнови▓╝ ▓ол╝ко │ ве░╕ин x и y. Дл┐ ▓ого, ╖▓об╗ │зна▓╝ новое
зна╖ение, до▒▓а▓о╖но облада▓╝ ин┤о░ма╢ией, ╡░ан┐╣ей▒┐ в x, y и в ко░н┐╡
подде░ев╝ев, изоб░аженн╗╡ в виде ▓░е│гол╝ников.
Ри▒. 15.2
На ░и▒. 15.2 показано, как мен┐е▓▒┐ поле size. Аналоги╖н╗е изменени┐ вне▒ем и в п░о╢ед│░│ Right-Rotate.
Так как п░и добавлении ╜лемен▓а в к░а▒но-╖е░ное де░ево в╗полн┐е▓▒┐ не бол╝╕е дв│╡ в░а╣ений, ▓о ко░░ек╢и┐ пол┐ size по▒ле в░а╣ений ▓░еб│е▓ O(1) опе░а╢ий (а пе░ек░а╕ивание вооб╣е
не вли┐е▓ на ░азме░╗). Таким об░азом, добавление ╜лемен▓а в по░┐дковое де░ево из n ве░╕ин ▓░еб│е▓ в░емени O(log n), как и дл┐
об╗╖ного к░а▒но-╖е░ного де░ева.
Удаление ╜лемен▓а из к░а▒но-╖е░ного де░ева ▓акже ▒о▒▓ои▓ из
дв│╡ ╖а▒▓ей | ▒на╖ала м╗ │дал┐ем ве░╕ин│ y , а за▓ем делаем
(▒амое бол╝╕ее) ▓░и в░а╣ени┐ (▒м. ░азд. 14.4). По▒ле в╗полнени┐
пе░вой ╖а▒▓и, м╗ │мен╝╕им на едини╢│ пол┐ size │ в▒е╡ ве░╕ин
на п│▓и из y к ко░н╛. Длина ╜▓ого п│▓и O(log n), по╜▓ом│ дополни▓ел╝но нам по▓░еб│е▓▒┐ в░ем┐ O(log n). Ч▓о п░ои▒╡оди▓ ▒ в░а╣ени┐ми, м╗ │же видели. Таким об░азом, обновление пол┐ size,
не │╡│д╕ае▓ (а▒имп▓о▓и╖е▒ки) в░ем┐, необ╡одимое дл┐ │далени┐ и
добавлени┐ ╜лемен▓а.
Уп░ажнени┐
15.1-1 П│▒▓╝ T | де░ево на ░и▒. 15.1. Покажи▓е, как ░або▓ае▓
п░о╢ед│░а OS-Select(T; 10).
15.1-2 П│▒▓╝ T | де░ево на ░и▒. 15.1. Покажи▓е, как ░або▓ае▓
п░о╢ед│░а OS-Rank(T; x), где x | ве░╕ина ▒ кл╛╖ом 35.
15.1-3
▒ии.
Пе░епи╕и▓е п░о╢ед│░│ OS-Select, не и▒пол╝з│┐ ░ек│░-
15.1-4 Реализ│й▓е ░ек│░▒ивн│╛ п░о╢ед│░│ OS-Key-Rank(T; k),
ко▓о░а┐ пол│╖ае▓ на в╡оде по░┐дковое де░ево T ▒ попа░но ░азли╖н╗ми кл╛╖ами, а ▓акже кл╛╖ k, и возв░а╣ае▓ по░┐дков╗й номе░
кл╛╖а k в ╜▓ом де░еве.
15.1-5 Дана ве░╕ина x по░┐дкового де░ева из n ве░╕ин и на▓│░ал╝ное ╖и▒ло i. Как най▓и i-й по по░┐дк│ ╜лемен▓, ▒╖и▓а┐ о▓
Об╣а┐ ▒╡ема ░або▓╗ ▒ дополни▓ел╝ной ин┤о░ма╢ией
291
ве░╕ин╗ x, за в░ем┐ O(log n)?
15.1-6 Заме▓им, ╖▓о п░о╢ед│░╗ OS-Select и OS-Rank и▒пол╝з│╛▓ поле size ▓ол╝ко дл┐ ▓ого, ╖▓об╗ │зна▓╝ по░┐дков╗й номе░
ве░╕ин╗ x в подде░еве ▒ ко░нем x. П░едположим, ╖▓о м╗ ╡░аним
в ве░╕ине вме▒▓о пол┐ size ╜▓о▓ по░┐дков╗й номе░. Как обновл┐▓╝
╜▓│ ин┤о░ма╢и╛ п░и добавлении и │далении ╜лемен▓а? (Напомним,
╖▓о добавление и │даление ▒оп░овожда╛▓▒┐ в░а╣ени┐ми.)
15.1-7 Как, и▒пол╝з│┐ по░┐дков╗е де░ев╝┐, по▒╖и▓а▓╝ ╖и▒ло инве░▒ий (▒м. зада╖│ 1-3) в ма▒▒иве ░азме░а n за в░ем┐ O(n log n)?
15.1-8? Ра▒▒мо▓░им n ╡о░д ок░│жно▒▓и, заданн╗╡ ▒воими кон╢ами (▒╖и▓аем, ╖▓о в▒е 2n кон╢ев╗╡ ▓о╖ек ░азли╖н╗). П░ид│май▓е
алго░и▓м, ко▓о░╗й за в░ем┐ O(n lg n) оп░едел┐е▓, ▒кол╝ко па░ ╡о░д
пе░е▒ека╛▓▒┐ вн│▓░и к░│га. (Нап░име░, е▒ли в▒е ╡о░д╗ | диаме▓░╗, ▓о о▓ве▓ом б│де▓ Cn2 .)
15.2. Об╣а┐ ▒╡ема ░або▓╗ ▒ дополни▓ел╝ной ин┤о░ма╢ией
Си▓│а╢и┐, когда ▓░еб│е▓▒┐ пополни▓╝ как│╛-либо ▒▓анда░▓н│╛
▒▓░│к▓│░│ данн╗╡ дополни▓ел╝ной ин┤о░ма╢ией, довол╝но ▓ипи╖на. М╗ в▒▓░е▓им▒┐ ▒ ней ▒нова в ▒лед│╛╣ем ░азделе. А в ╜▓ом
░азделе м╗ докажем об╣│╛ ▓ео░ем│, облег╖а╛╣│╛ ╜▓о▓ п░о╢е▒▒
в ▒л│╖ае к░а▒но-╖е░н╗╡ де░ев╝ев.
Пополнение ▒▓░│к▓│░╗ данн╗╡ дели▓▒┐ на ╖е▓╗░е ╕ага:
1. в╗би░аем базов│╛ ▒▓░│к▓│░│ данн╗╡;
2. ░е╕аем, как│╛ дополни▓ел╝н│╛ ин┤о░ма╢и╛ м╗ б│дем ╡░ани▓╝
(и обновл┐▓╝);
3. п░ове░┐ем, ╖▓о ╜▓│ ин┤о░ма╢и╛ │дае▓▒┐ обновл┐▓╝ п░и в╗полнении опе░а╢ий, доп│▒▓им╗╡ дл┐ в╗б░анной ▒▓░│к▓│░╗ данн╗╡;
4. ░еализ│ем нов╗е опе░а╢ии.
Коне╖но, ╜▓и п░авила | в▒его ли╕╝ об╣а┐ ▒╡ема, и в конк░е▓ной
▒и▓│а╢ии надо п░о┐вл┐▓╝ ░аз│мн│╛ гибко▒▓╝, но ▒╡ема ╜▓а може▓
б╗▓╝ полезной.
Давай▓е по▒мо▓░им на кон▒▓░│к╢ии ░аздела 15.1 ▒ ▓о╖ки з░ени┐
╜▓и╡ п░авил.
На ╕аге 1 м╗ в╗б░али к░а▒но-╖е░н╗е де░ев╝┐ в ка╖е▒▓ве базовой
▒▓░│к▓│░╗.
На ╕аге 2 м╗ ░е╕или добави▓╝ к каждой ве░╕ине поле size.
См╗▒л ╡░анени┐ дополни▓ел╝ной ин┤о░ма╢ии ▒о▒▓ои▓ в ▓ом, ╖▓о
она позвол┐е▓ в╗полн┐▓╝ неко▓о░╗е опе░а╢ии б╗▒▓░ее. Без пол┐
size м╗ не ▒могли б╗ в╗полни▓╝ опе░а╢ии OS-Select и OS-Rank
292
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
за в░ем┐ O(log n). (Не▒кол╝ко иной ва░иан▓ в╗бо░а дополни▓ел╝ной ин┤о░ма╢ии дан в │п░. 15.2-1.)
На ╕аге 3 м╗ │бедили▒╝, ╖▓о обновление полей size п░и добавлении и │далении ╜лемен▓ов можно в╗полни▓╝ без │╡│д╕ени┐ а▒имп▓о▓ики дл┐ в░емени добавлени┐ и │далени┐. В ╜▓ом ▒м╗▒ле на╕
в╗бо░ │да╖ен: е▒ли б╗, ▒кажем, м╗ ░е╕или ╡░ани▓╝ дл┐ каждой
ве░╕ин╗ ее по░┐дков╗й номе░, ▓о п░о╢ед│░╗ OS-Select и OSRank ░або▓али б╗ б╗▒▓░о, но добавление нового ╜лемен▓а повлекло б╗ за ▒обой изменение дополни▓ел╝ной ин┤о░ма╢ии во многи╡
ве░╕ина╡ де░ева (во в▒е╡, е▒ли добавленн╗й ╜лемен▓ минимален).
На╕ в╗бо░ (поле size ) дае▓ │да╖н╗й комп░оми▒▒ межд│ легко▒▓╝╛
и▒пол╝зовани┐ и обновлени┐.
На ╕аге 4 м╗ ░еализовали п░о╢ед│░╗ OS-Select и OS-Rank,
из-за ко▓о░╗╡ м╗, ▒об▒▓венно, и за▓евали в▒е ╜▓о дело.
Вп░о╖ем, в д░│ги╡ ▒и▓│а╢и┐╡ (│п░. 15.2-1) дополни▓ел╝на┐ ин┤о░ма╢и┐ и▒пол╝з│е▓▒┐ не дл┐ ░еализа╢ии нов╗╡ опе░а╢ий, а дл┐
│▒ко░ени┐ │же име╛╣и╡▒┐.
Дополни▓ел╝на┐ ин┤о░ма╢и┐ дл┐ к░а▒но-╖е░н╗╡ де░ев╝ев
След│╛╣а┐ ▓ео░ема показ╗вае▓, ╖▓о дл┐ к░а▒но-╖е░н╗╡ де░ев╝ев ин┤о░ма╢и╛ оп░еделенного вида можно обновл┐▓╝, не замедл┐┐ (а▒имп▓о▓и╖е▒ки) опе░а╢ии добавлени┐ и │далени┐. Ее доказа▓ел╝▒▓во во многом пов▓о░┐е▓ ░а▒▒│ждени┐ из ░аздела 15.1.
Тео░ема 15.1 (Пополнение к░а▒но-╖е░ного де░ева). Ра▒▒мо▓░им
дополни▓ел╝н╗й а▓░иб│▓ f , оп░еделенн╗й дл┐ ве░╕ин к░а▒но╖е░н╗╡ де░ев╝ев. П░едположим, ╖▓о дл┐ в▒┐кой ве░╕ин╗ x
зна╖ение f [x] полно▒▓╝╛ задае▓▒┐ о▒▓ал╝ной ин┤о░ма╢ией, ╡░ан┐╣ей▒┐ в ве░╕ина╡ x, left[x] и right[x] (в ▓ом ╖и▒ле зна╖ени┐ми
f [left[x]] и f [right[x]]), и его в╗╖и▒ление по ╜▓им данн╗м ▓░еб│е▓
в░емени O(1). Тогда пол┐ f можно обновл┐▓╝ п░и добавлении
и │далении ╜лемен▓а из де░ева, не │╡│д╕а┐ (а▒имп▓о▓и╖е▒ки)
в░ем┐ в╗полнени┐ добавлени┐ и │далени┐.
Доказа▓ел╝▒▓во. Иде┐ доказа▓ел╝▒▓ва ▒о▒▓ои▓ в ▓ом, ╖▓о изменение пол┐ f в неко▓о░ой ве░╕ине x повле╖е▓ за ▒обой изменени┐
пол┐ f ▓ол╝ко в ве░╕ина╡, ░а▒положенн╗╡ на п│▓и из ко░н┐ в x.
В ▒амом деле, изменение f [x] повле╖е▓ за ▒обой изменение f [p[x]],
╖▓о в ▒во╛ о╖е░ед╝ измени▓ f [p[p[x]]] и ▓. д., но д░│гие ве░╕ин╗
о▒▓ан│▓▒┐ не▓░он│▓╗ми. О▓ f [root[T ]] не зави▒и▓ зна╖ение пол┐ f
в д░│ги╡ ве░╕ина╡, и п░о╢е▒▒ изменений о▒▓анови▓▒┐. Так как в╗▒о▓а де░ева ░авна O(log n), ▓о по▒ле изменени┐ пол┐ f [x] дл┐ какой▓о одной ве░╕ин╗ x м╗ ▒можем обнови▓╝ в▒е необ╡одим╗е пол┐ за
в░ем┐ O(log n).
Добавление ╜лемен▓а x в де░ево T делае▓▒┐ в два ╜▓апа (▒м.
░азд. 14.3). На пе░вом ╜▓апе ве░╕ин│ x добавл┐╛▓ в ка╖е▒▓ве
Об╣а┐ ▒╡ема ░або▓╗ ▒ дополни▓ел╝ной ин┤о░ма╢ией
293
░ебенка │же ▒│╣е▒▓в│╛╣ей ве░╕ин╗ p[x]. Зна╖ение f [x] в╗╖и▒л┐е▓▒┐ за в░ем┐ O(1), ▓ак как нова┐ ве░╕ина | ли▒▓ (▓о╖нее, ее де▓и
| nil-ли▒▓╝┐). Далее п░ои▒╡оди▓ O(lg n) изменений полей на п│▓и
к ко░н╛. И▓ак, пе░в╗й ╜▓ап занимае▓ в░ем┐ O(log n). На в▓о░ом
╜▓апе м╗ в╗полн┐ем в░а╣ени┐ (▒амое бол╝╕ее два); по▒ле каждого по▓░еб│е▓▒┐ O(lg n) опе░а╢ий дл┐ ░а▒п░о▒▓░анени┐ изменений
вве░╡ по де░ев│.
Удаление ▓акже п░оводи▓▒┐ в два ╜▓апа (▒м. ░азд. 14.4). На пе░вом ╜▓апе изменени┐ возника╛▓, е▒ли │дал┐ема┐ ве░╕ина замен┐е▓▒┐ ее по▒ледова▓елем, а ▓акже когда м╗ в╗б░а▒╗ваем │дал┐ем│╛
ве░╕ин│ или ее по▒ледова▓ел┐. И в ▓ом и в д░│гом ▒л│╖ае м╗ измен┐ем поле f │ одной ве░╕ин╗, по╜▓ом│ обновление в▒е╡ полей
займе▓ в░ем┐ O(log n). На в▓о░ом ╜▓апе м╗ делаем ▒амое бол╝╕ее
▓░и в░а╣ени┐, каждое из ко▓о░╗╡ ▓░еб│е▓ в░емени O(log n) дл┐
обновлени┐ полей на п│▓и к ко░н╛.
Во многи╡ ▒л│╖а┐╡ (в ╖а▒▓но▒▓и, дл┐ пол┐ size ) п░и в░а╣ени┐╡
в▒е пол┐ можно обнови▓╝ за в░ем┐ O(1), а не O(log n). Така┐ ▒и▓│а╢и┐ возникае▓ в │п░. 15.2-4.
Уп░ажнени┐
15.2-1 Пополни▓╝ по░┐дковое де░ево (не │╡│д╕ив а▒имп▓о▓и╖е▒ки в░ем┐ опе░а╢ий) ▓ак, ╖▓об╗ минимал╝н╗й и мак▒имал╝н╗й
╜лемен▓╗, а ▓акже п░ед╕е▒▓венник и по▒ледова▓ел╝ данного ╜лемен▓а о▓╗▒кивали▒╝ б╗ за в░ем┐ O(1).
15.2-2 Б│дем ╡░ани▓╝ в каждой ве░╕ине к░а▒но-╖е░ного де░ева
ее ╖е░н│╛ в╗▒о▓│. Возможно ли обновл┐▓╝ ╜▓о поле п░и добавлении и │далении ╜лемен▓а из де░ева, не │╡│д╕ив (а▒имп▓о▓и╖е▒ки)
в░ем┐ ░або▓╗ ╜▓и╡ опе░а╢ий?
15.2-3 Б│дем ╡░ани▓╝ в ве░╕ине ее гл│бин│. Возможно ли обновл┐▓╝ ╜▓о поле п░и добавлении и │далении ╜лемен▓а из де░ева, не
│╡│д╕ив (а▒имп▓о▓и╖е▒ки) в░ем┐ ░або▓╗ ╜▓и╡ опе░а╢ий?
15.2-4? П│▒▓╝ | а▒▒о╢иа▓ивна┐ бина░на┐ опе░а╢и┐ на неко▓о░ом множе▒▓ве M , и п│▒▓╝ в каждой ве░╕ине к░а▒но-╖е░ного де░ева ╡░ани▓▒┐ неко▓о░╗й ╜лемен▓ a множе▒▓ва M (▒вой в каждой
ве░╕ине). П│▒▓╝ ▓епе░╝ м╗ ╡о▓им ╡░ани▓╝ в каждой ве░╕ине x поле f [x] = a[x1 ] a[x2 ] : : : a[xm ], где x1 ; x2; : : :; xm | в▒е ве░╕ин╗
подде░ева ▒ ко░нем x (в по░┐дке воз░а▒▓ани┐ кл╛╖ей). Показа▓╝,
╖▓о поле f п░и в░а╣ени┐╡ можно обновл┐▓╝ за в░ем┐ O(1). П░ове▒▓и аналоги╖ное ░а▒▒│ждение дл┐ пол┐ size.
15.2-5? М╗ ╡о▓им ░еализова▓╝ дл┐ к░а▒но-╖е░н╗╡ де░ев╝ев опе░а╢и╛ RB-Enumerate(x; a; b), ко▓о░а┐ в╗дае▓ ▒пи▒ок в▒е╡ ве░╕ин
294
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
в подде░еве ▒ ко░нем x, дл┐ ко▓о░╗╡ кл╛╖ k на╡оди▓▒┐ в п░омеж│▓ке a 6 k 6 b. Как ▒дела▓╝ ╜▓о за в░ем┐ (m + log n), где n
| коли╖е▒▓во ве░╕ин в де░еве, а m | ╖и▒ло в╗даваем╗╡ кл╛╖ей?
(Указание. До▒▓а▓о╖но полей, име╛╣и╡▒┐ в к░а▒но-╖е░н╗╡ де░ев╝┐╡; нов╗е пол┐ не н│жн╗.)
15.3. Де░ев╝┐ п░омеж│▓ков
В ╜▓ом ░азделе м╗ и▒пол╝з│ем к░а▒но-╖е░н╗е де░ев╝┐ дл┐ ╡░анени┐ мен┐╛╣его▒┐ множе▒▓ва п░омеж│▓ков. О▓░езком (closed interval) [t1; t2 ] наз╗вае▓▒┐ множе▒▓во ве╣е▒▓венн╗╡ ╖и▒ел t, дл┐ ко▓о░╗╡ t1 6 t 6 t2 . (П░едполагае▓▒┐, ╖▓о t1 6 t2 .) Пол│ин▓е░вал
(half-open interval) и ин▓е░вал (open interval) пол│╖а╛▓▒┐ из о▓░езка в╗кид╗ванием одного или дв│╡ кон╢ов ▒оо▓ве▓▒▓венно. В ╜▓ом
░азделе м╗ имеем дело ▓ол╝ко ▒ о▓░езками, но в▒е ░ез│л╝▓а▓╗ легко ░а▒п░о▒▓░ан┐╛▓▒┐ на ин▓е░вал╗ и пол│ин▓е░вал╗.
П░ед▒▓авим ▒ебе баз│ данн╗╡, в ко▓о░ой ╡░ани▓▒┐ ин┤о░ма╢и┐ о
п░о▓┐женн╗╡ по в░емени ▒об╗▓и┐╡: дл┐ каждого ▒об╗▓и┐ ╡░ани▓▒┐ п░омеж│▓ок в░емени, ко▓о░ое оно занимае▓. Ра▒▒ма▓░иваема┐ в
╜▓ом ░азделе ▒▓░│к▓│░а данн╗╡ позвол┐е▓ по л╛бом│ п░омеж│▓к│
най▓и в▒е ▒об╗▓и┐, ко▓о░╗е пе░е▒ека╛▓▒┐ ▒ ╜▓им п░омеж│▓ком,
п░и╖ем делае▓ ╜▓о до▒▓а▓о╖но б╗▒▓░о.
М╗ ▒╖и▓аем, ╖▓о о▓░езок [t1; t2 ] п░ед▒▓авл┐е▓ ▒обой запи▒╝ i, ▒о▒▓о┐╣│╛ из дв│╡ полей: low[i] = t1 (лев╗й коне╢ (low endpoint))
и high[i] = t2 (п░ав╗й коне╢ (high endpoint)). Б│дем гово░и▓╝,
╖▓о о▓░езки i и i0 пе░ек░╗ва╛▓▒┐ (overlap), е▒ли low[i] 6 high[i0] и
low[i0] 6 high[i]; ин╗ми ▒ловами, е▒ли i \ i0 6= ;. (Об░а▓и▓е внимание,
╖▓о о▓░езки, име╛╣ие об╣ий коне╢, ▒╖и▓а╛▓▒┐ пе░ек░╗ва╛╣ими▒┐.)
В▒его возможно ▓░и ва░иан▓а взаимного ░а▒положени┐ о▓░езков
i и i0 (░и▒. 15.3):
1. о▓░езки i и i0 пе░ек░╗ва╛▓▒┐,
2. high[i] < low[i0],
3. high[i0] < low[i].
Де░евом п░омеж│▓ков (interval tree) назовем к░а▒но-╖е░ное де░ево, кажда┐ ве░╕ина x ко▓о░ого ╡░ани▓ о▓░езок int[x]. Де░ево
п░омеж│▓ков позвол┐е▓ ░еализова▓╝ ▒лед│╛╣ие опе░а╢ии:
Interval-Insert (T; x) добавл┐е▓ к де░ев│ T ╜лемен▓ x (▒оде░жа╣ий неко▓о░╗й о▓░езок int[x]);
Interval-Delete (T; x) │дал┐е▓ из де░ева T ╜лемен▓ x;
Interval-Search(T; i) возв░а╣ае▓ │каза▓ел╝ на ╜лемен▓ x де░ева
T , дл┐ ко▓о░ого о▓░езки i и int[x] пе░ек░╗ва╛▓▒┐ (и возв░а╣ае▓
nil, е▒ли ▓акого ╜лемен▓а в де░еве не▓).
Де░ев╝┐ п░омеж│▓ков
295
Т░и ва░иан▓а взаимного ░а▒положени┐ о▓░езков i и i0 . (а) О▓░езки
0
i и i 0 пе░ек░╗ва╛▓▒┐.
Возможно ╖е▓╗░е ва░иан▓а; во в▒е╡ ╖е▓╗░е╡ low[i] 6
high[i ] и low[i0 ] 6 high[i]. (б) high[i] < low[i0]. (в) high[i0 ] < low[i].
Ри▒. 15.3
П░име░ де░ева п░омеж│▓ков показан на ░и▒.15.4. След│┐ ▒╡еме ░аздела 15.2, м╗ ░еализ│ем ▓ак│╛ ▒▓░│к▓│░│ данн╗╡ и опе░а╢ии на
ней.
Шаг 1: Базова┐ ▒▓░│к▓│░а данн╗╡
М╗ │же в╗б░али базов│╛ ▒▓░│к▓│░│: к░а▒но-╖е░ное де░ево, кажда┐ ве░╕ина x ко▓о░ого ▒оде░жи▓ о▓░езок int[x]. Кл╛╖ом ве░╕ин╗ ┐вл┐е▓▒┐ лев╗й коне╢ о▓░езка low[int[x]]; об╡од де░ева в по░┐дке
└левое подде░ево | ко░ен╝ | п░авое подде░ево┴ пе░е╖и▒л┐е▓ ве░╕ин╗ в по░┐дке воз░а▒▓ани┐ кл╛╖ей.
Шаг 2: Дополни▓ел╝на┐ ин┤о░ма╢и┐
Кажда┐ ве░╕ина, помимо о▓░езка, ▒оде░жи▓ поле max[x], в ко▓о░ом ╡░ани▓▒┐ мак▒имал╝н╗й из п░ав╗╡ кон╢ов о▓░езков, ▒оде░жа╣и╡▒┐ в подде░еве ▒ ко░нем x.
Шаг 3: Обновление дополни▓ел╝ной ин┤о░ма╢ии
П░ове░им, ╖▓о дополни▓ел╝н│╛ ин┤о░ма╢и╛ можно обновл┐▓╝
п░и добавлении и │далении ╜лемен▓а без (а▒имп▓о▓и╖е▒кого) │╡│д╕ени┐ в░емени ░або▓╗ ╜▓и╡ опе░а╢ий. В ▒амом деле,
max[x] = max(high[int[x]]; max[left[x]]; max[right[x]]);
и о▒▓ае▓▒┐ ли╕╝ ▒о▒ла▓╝▒┐ на ▓ео░ем│ 15.1. Можно о▓ме▓и▓╝ ▓акже, ╖▓о п░и в░а╣ени┐╡ поле max можно обновл┐▓╝ за в░ем┐ O(1)
(│п░. 15.2-4 и 15.3-1).
296
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
Де░ево п░омеж│▓ков. (а) Набо░ из 10 о▓░езков (в╗╕е ▓о▓, │ ко▓о░ого лев╗й коне╢ бол╝╕е). (б) Де░ево п░омеж│▓ков, ╡░ан┐╣ее ╜▓и о▓░езки. П░и
╜▓ом ▒вой▒▓во │по░┐до╖енно▒▓и де░ева в╗полн┐е▓▒┐ дл┐ лев╗╡ кон╢ов.
Ри▒. 15.4
Шаг 4: Нов╗е опе░а╢ии
П░о╢ед│░а Interval-Search(T; i) на╡оди▓ в де░еве T о▓░езок,
пе░ек░╗ва╛╣ий▒┐ ▒ i. Е▒ли ▓акого о▓░езка не▓, она возв░а╣ае▓
зна╖ение nil.
Interval-Search (T; i)
1 x root[T ]
2 while x 6= nil и int[x] не пе░ек░╗вае▓▒┐ ▒ i
3
do if left[x] 6= nil и max[left[x]] > low[i]
4
then x left[x]
5
else x right[x]
6 return x
М╗ и╣ем о▓░езок, п░о╡од┐ де░ево о▓ ко░н┐ к ли▒▓│. П░о╢ед│░а
о▒▓анавливае▓▒┐, е▒ли о▓░езок найден или е▒ли зна╖ение пе░еменной x ▒▓ало ░авн╗м nil. Кажда┐ и▓е░а╢и┐ ╢икла ▓░еб│е▓ O(1) ╕агов, по╜▓ом│ в░ем┐ ░або▓╗ п░о╢ед│░╗ п░опо░╢ионал╝но в╗▒о▓е
де░ева (и ░авно O(log n) дл┐ де░ева из n ве░╕ин).
Де░ев╝┐ п░омеж│▓ков
297
Дл┐ п░име░а по▒мо▓░им, как п░о╢ед│░а и╣е▓ в де░еве на
░и▒. 15.4 о▓░езок, пе░ек░╗ва╛╣ий▒┐ ▒ о▓░езком i = [22; 25]. М╗
на╖инаем ▒ ко░н┐ (x = root[T ]), ко▓о░╗й ╡░ани▓ о▓░езок [16; 21],
не пе░ек░╗ва╛╣ий▒┐ ▒ i. Так как max[left[x]] = 23, ╖▓о бол╝╕е, ╖ем
low[i] = 22, ▓о м╗ пе░е╡одим к левом│ ░ебенк│ ко░н┐ (x left[x]).
Э▓о▓ ░ебенок ╡░ани▓ о▓░езок [8; 9], ▓акже не пе░ек░╗ва╛╣ий▒┐
▒ i. На ╜▓о▓ ░аз max[left[x]] = 10 мен╝╕е low[i] = 22, по╜▓ом│ м╗
пе░е╡одим к п░авом│ ░ебенк│ ве░╕ин╗ x. Там на╡оди▓▒┐ о▓░езок
[15; 23], пе░ек░╗ва╛╣ий▒┐ ▒ i, и пои▒к заве░╕ае▓▒┐.
Ра▒▒мо▓░им п░име░ без░ез│л╝▓а▓ного пои▒ка в ▓ом же де░еве |
б│дем и▒ка▓╝ о▓░езок, пе░ек░╗ва╛╣ий▒┐ ▒ i = [11; 14]. Снова на╖инаем ▒ ко░н┐. Ко░ен╝ ╡░ани▓ о▓░езок [16; 21], не пе░ек░╗ва╛╣ий▒┐
▒ i. Так как max[left[x]] = 23 бол╝╕е low[i] = 11, пе░е╡одим к левом│
░ебенк│. Тепе░╝ в x ╡░ани▓▒┐ о▓░езок [8; 9]. Он не пе░ек░╗вае▓▒┐
▒ i, и max[left[x]] = 10 мен╝╕е low[i] = 11, по╜▓ом│ идем нап░аво. (Слева и▒комого о▓░езка б╗▓╝ не може▓). В x ▓епе░╝ ╡░ани▓▒┐
[15; 23], ▒ i ╜▓о▓ о▓░езок не пе░ек░╗вае▓▒┐, left[x] = nil, по╜▓ом│
идем нап░аво и возв░а╣аем зна╖ение nil.
Ко░░ек▓но▒▓╝ п░о╢ед│░╗ Interval-Search │▒▓анавливае▓ ▓ео░ема 15.2, ко▓о░а┐ │▓ве░ждае▓, ╖▓о е▒ли о▓░езки int[x] и i не пе░ек░╗ва╛▓▒┐, ▓о дал╝ней╕ий пои▒к иде▓ в п░авил╝ном нап░авлении
(е▒ли н│жн╗е о▓░езки вооб╣е е▒▓╝ в де░еве, ▓о они е▒▓╝ и в в╗би░аемой ╖а▒▓и де░ева). По╜▓ом│ нам до▒▓а▓о╖но п░о▒мо▓░е▓╝ в▒его
один п│▓╝. (Об░а▓и▓е внимание, ╖▓о ▒лова └п░авил╝ное нап░авление┴ не озна╖а╛▓, ╖▓о в д░│гом нап░авлении и▒ком╗╡ о▓░езков
не▓: м╗ │▓ве░ждаем ли╕╝, ╖▓о е▒ли они е▒▓╝ вооб╣е, ▓о е▒▓╝ и в
└п░авил╝ном┴ нап░авлении!)
Тео░ема 15.2. П│▒▓╝ x | п░оизвол╝на┐ ве░╕ина де░ева, i | о▓░езок, не пе░ек░╗ва╛╣ий▒┐ ▒ int[x], и м╗ в╗полн┐ем ▒▓░оки 3{5
п░о╢ед│░╗ Interval-Search (T; i). Тогда:
1. Е▒ли в╗полн┐е▓▒┐ ▒▓░ока 4, ▓о либо подде░ево ▒ ко░нем left[x]
(левое подде░ево) ▒оде░жи▓ о▓░езок, пе░ек░╗ва╛╣ий▒┐ ▒ i, либо подде░ево ▒ ко░нем right[x] (п░авое подде░ево) не ▒оде░жи▓
о▓░езка, пе░ек░╗ва╛╣его▒┐ ▒ i.
2. Е▒ли в╗полн┐е▓▒┐ ▒▓░ока 5, ▓о левое подде░ево не ▒оде░жи▓
о▓░езка, пе░ек░╗ва╛╣его▒┐ ▒ i.
Доказа▓ел╝▒▓во. На╖нем ▒ более п░о▒▓ого ▒л│╖а┐ 2. С▓░ока 5 в╗полн┐е▓▒┐, е▒ли не в╗полнено │▒ловие в ▒▓░оке 3, ▓о е▒▓╝ е▒ли
left[x] = nil или max[left[x]] < low[i]. В пе░вом ▒л│╖ае левое подде░ево п│▒▓о, по╜▓ом│ не ▒оде░жи▓ о▓░езка, пе░ек░╗ва╛╣его▒┐ ▒ i.
П░едположим, ╖▓о left[x] 6= nil и max[left[x]] < low[i]. Ра▒▒мо▓░им
п░оизвол╝н╗й о▓░езок i0 из левого подде░ева (▒м. ░и▒. 15.5а). Так
как max[left[x]] | наибол╝╕ий п░ав╗й коне╢ ▓аки╡ о▓░езков, ▓о
high[i0] 6 max[left[i]] < low[i];
298
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
О▓░езки в доказа▓ел╝▒▓ве ▓ео░ем╗ 15.2. П│нк▓и░ом показано зна╖ение max[left[x]]. (а) Сл│╖ай 2: м╗ идем нап░аво. Никакой ин▓е░вал i0 не пе░ек░╗вае▓▒┐ ▒ i. (б) Сл│╖ай 1: м╗ идем налево. В╗бе░ем в левом подде░еве
о▓░езок i0 , дл┐ ко▓о░ого high[i0 ] = max[left[x]] > low[i]. Тогда либо i0 пе░ек░╗вае▓▒┐ ▒ i, либо i0 лежи▓ ╢еликом ▒п░ава о▓ i, и i не пе░ек░╗вае▓▒┐ ни ▒ каким
о▓░езком i00 из п░авого подде░ева, по▓ом│ ╖▓о low[i0 ] 6 low[i00 ].
Ри▒. 15.5
по╜▓ом│ о▓░езок i0 ╢еликом лежи▓ левее о▓░езка i. Сл│╖ай 2 ░а▒▒мо▓░ен.
Ра▒▒мо▓░им ▓епе░╝ ▒л│╖ай 1. П░едположим, ╖▓о в левом подде░еве не▓ о▓░езков, пе░ек░╗ва╛╣и╡▒┐ ▒ i. Тогда н│жно доказа▓╝,
╖▓о ▓аки╡ о▓░езков не▓ и в п░авом. Так как в╗полн┐е▓▒┐ ▒▓░ока 4,
▓о │▒ловие в ▒▓░оке 3 в╗полнено, и max[left[x]] > low[i]. По╜▓ом│ в
левом подде░еве найде▓▒┐ о▓░езок i0 , дл┐ ко▓о░ого
high[i0] = max[left[i0]] > low[i]
(▒м. ░и▒. 15.5б). Но о▓░езки i и i0 не пе░ек░╗ва╛▓▒┐ (по п░едположени╛ | м╗ ▒╖и▓аем, ╖▓о в левом подде░еве не▓ о▓░езков, пе░ек░╗ва╛╣и╡▒┐ ▒ i). Э▓о озна╖ае▓, ╖▓о о▓░езок i0 лежи▓ ╢еликом ▒п░ава
о▓ i (╢еликом ▒лева он лежа▓╝ не може▓), ▓о е▒▓╝ high[i] < low[i0]. В
де░еве T в╗полнено ▒вой▒▓во │по░┐до╖енно▒▓и лев╗╡ кон╢ов, по╜▓ом│ и в▒е о▓░езки п░авого подде░ева лежа▓ ╢еликом ▒п░ава о▓ i:
дл┐ п░оизвол╝ного о▓░езка i00 из п░авого подде░ева в╗полнено
high[i] < low[i0] 6 low[i00 ]:
Уп░ажнени┐
15.3-1 Напи╕и▓е п░о╢ед│░│ Left-Rotate дл┐ де░ева п░омеж│▓ков, ко▓о░а┐ обновл┐е▓ пол┐ max за в░ем┐ O(1).
15.3-2 Пе░епи╕и▓е п░о╢ед│░│ Interval-Search дл┐ ▒л│╖а┐, когда в де░еве п░омеж│▓ков ╡░ан┐▓▒┐ не о▓░езки, а ин▓е░вал╗ (▓о
е▒▓╝ на▒ ин▓е░е▒│╛▓ пе░ек░╗▓и┐ нен│левой длин╗).
15.3-3 По▒▓░ой▓е алго░и▓м, ко▓о░╗й по заданном│ о▓░езк│ возв░а╣ае▓ пе░ек░╗ва╛╣ий▒┐ ▒ ним о▓░езок ▒ минимал╝н╗м лев╗м
кон╢ом (или кон▒▓ан▓│ nil, е▒ли ▓аки╡ о▓░езков не▓).
Зада╖и к главе 15
299
15.3-4 Напи╕и▓е п░ог░амм│, ко▓о░а┐ по заданном│ о▓░езк│ i и де░ев│ п░омеж│▓ков T возв░а╣ае▓ ▒пи▒ок в▒е╡ о▓░езков
де░ева T , пе░ек░╗ва╛╣и╡▒┐ ▒ i. В░ем┐ ░або▓╗ должно б╗▓╝
O(min(n; k log n)), где k | ╖и▒ло ╜лемен▓ов возв░а╣аемого ▒пи▒ка.
(Дополни▓ел╝н╗й воп░о▒: как ▒дела▓╝ ╜▓о, не мен┐┐ де░ева?)
15.3-5 Какие надо вне▒▓и изменени┐ в оп░еделение де░ева
п░омеж│▓ков, ╖▓об╗ дополни▓ел╝но ░еализова▓╝ п░о╢ед│░│
Interval-Search-Exactly(T; i), ко▓о░а┐ либо возв░а╣ае▓ ве░╕ин│ x де░ева T , дл┐ ко▓о░ой low[int[x]] = low[i] и high[int[x]] = high[i],
либо в╗дае▓ кон▒▓ан▓│ nil, е▒ли ▓аки╡ ве░╕ин не▓ (и╣е▓ о▓░езок,
░авн╗й i, а не п░о▒▓о пе░ек░╗ва╛╣ий▒┐ ▒ i.) В░ем┐ ░або▓╗ п░о╢ед│░╗ Interval-Search-Exactly, а ▓акже в▒е╡ п░ежни╡ п░о╢ед│░
п░омеж│▓ков должно о▒▓ава▓╝▒┐ ░авн╗м O(log n).
15.3-6
Ра▒▒мо▓░им множе▒▓во Q на▓│░ал╝н╗╡ ╖и▒ел. Оп░еделим
Min-Gap как ░а▒▒▓о┐ние межд│ дв│м┐ ближай╕ими ╖и▒лами в Q.
Нап░име░, е▒ли Q = f1; 5; 9; 15; 18; 22g, ▓о Min-Gap(Q) ░авно 18 ;
15 = 3. Реализ│й▓е ▒▓░│к▓│░│ данн╗╡, ╜┤┤ек▓ивно ░еализ│╛╣│╛
добавление, │даление и пои▒к ╜лемен▓а, а ▓акже опе░а╢и╛ MinGap. Каково в░ем┐ ░або▓╗ ╜▓и╡ опе░а╢ий?
15.3-7? П░и ░аз░або▓ке ин▓ег░ал╝н╗╡ ▒╡ем ин┤о░ма╢и┐ ╖а▒▓о
п░ед▒▓авл┐е▓▒┐ в виде ▒пи▒ка п░┐мо│гол╝ников. П│▒▓╝ дан╗ n п░┐мо│гол╝ников ▒о ▒▓о░онами, па░аллел╝н╗ми о▒┐м коо░дина▓. Кажд╗й п░┐мо│гол╝ник задае▓▒┐ ╖е▓╗░╝м┐ ╖и▒лами: коо░дина▓ами
левого нижнего и п░авого ве░╡него │глов. Напи▒а▓╝ п░ог░амм│,
ко▓о░а┐ за в░ем┐ O(n log n) в╗┐▒н┐е▓, е▒▓╝ ли ▒░еди ╜▓и╡ п░┐мо│гол╝ников два пе░ек░╗ва╛╣и╡▒┐ (но не ▓░еб│е▓▒┐ най▓и в▒е пе░ек░╗ва╛╣ие▒┐ п░┐мо│гол╝ники). Об░а▓и▓е внимание, ╖▓о г░ани╢╗
пе░ек░╗ва╛╣и╡▒┐ п░┐мо│гол╝ников мог│▓ не пе░е▒ека▓╝▒┐, е▒ли
один лежи▓ вн│▓░и д░│гого. (Указание. Двигаем го░изон▓ал╝н│╛
п░┐м│╛ ▒низ│ вве░╡ и ▒мо▓░им, как мен┐е▓▒┐ ее пе░е▒е╖ение ▒ п░┐мо│гол╝никами.)
Зада╖и
15-1 То╖ка мак▒имал╝ной к░а▓но▒▓и
М╗ ╡о▓им ▒леди▓╝ за ▓о╖кой мак▒имал╝ной к░а▓но▒▓и (point of
maximum overlap) множе▒▓ва п░омеж│▓ков | ▓о╖кой, ко▓о░а┐ п░инадлежи▓ мак▒имал╝ном│ ╖и▒л│ п░омеж│▓ков из ╜▓ого множе▒▓ва.
Как нам обновл┐▓╝ ин┤о░ма╢и╛ об ╜▓ой ▓о╖ке п░и добавлении и
│далении ╜лемен▓а?
300
Глава 15 Пополнение ▒▓░│к▓│░ данн╗╡
15-2 Де▓▒ка┐ ▒╖и▓алка
Зада╖а о де▓▒кой ▒╖и▓алке (Josephus problem) ▒о▒▓ои▓ в ▒лед│╛╣ем. Фик▒и░│ем два ╖и▒ла m и n (m 6 n). Вна╖але n де▓ей ▒▓о┐▓ по
_
к░│г│. На╖ав ▒ кого-▓о, м╗ ▒╖и▓аем └пе░в╗й, в▓о░ой, ▓░е▓ий...┴Как
▓ол╝ко до╡одим до m-го, он в╗╡оди▓ из к░│га, и ▒╖е▓ п░одолжае▓▒┐
дал╝╕е по к░│г│ │же без него (на╖ина┐ ▒ едини╢╗). Так п░одолжае▓▒┐, пока не о▒▓ане▓▒┐ ░овно один ╖еловек. На▒ б│де▓ ин▓е░е▒ова▓╝ зави▒┐╣а┐ о▓ n и m по▒ледова▓ел╝но▒▓╝ ((n; m)-Josephus permutation), в ко▓о░ой де▓и в╗╡од┐▓ из к░│га. Нап░име░, п░и n = 7 и
m = 3 и▒кома┐ по▒ледова▓ел╝но▒▓╝ в╗гл┐ди▓ ▓ак: h3; 6; 2; 7; 5; 1; 4i.
а. За┤ик▒и░│ем m. Напи╕и▓е п░ог░амм│, ко▓о░а┐ по данном│ n
дае▓ ╜▓│ по▒ледова▓ел╝но▒▓╝ за в░ем┐ O(n).
б. Напи╕и▓е п░ог░амм│, ко▓о░а┐ по п░оизвол╝н╗м n и m дае▓
и▒ком│╛ по▒ледова▓ел╝но▒▓╝ за в░ем┐ O(n log n).
Заме╖ани┐
Опи▒ани┐ неко▓о░╗╡ видов де░ев╝ев п░омеж│▓ков можно най▓и в П░епа░а▓а и Шамо▒ [160]. Наибол╝╕ий ▓ео░е▓и╖е▒кий
ин▓е░е▒ п░ед▒▓авл┐е▓ зде▒╝ ░ез│л╝▓а▓, к ко▓о░ом│ незави▒имо п░и╕ли Эдел╝▒б░│нне░ (H. Edelsbrunner, 1980) и МакК░ей▓
(E. M. McCreight, 1981). Раз░або▓анна┐ ими ▒▓░│к▓│░а данн╗╡
╡░ани▓ n о▓░езков и позвол┐е▓ пе░е╖и▒ли▓╝ ▓е из ни╡, ко▓о░╗е
пе░ек░╗ва╛▓▒┐ ▒ заданн╗м о▓░езком, за в░ем┐ O(k + log n), где k
| коли╖е▒▓во ▓аки╡ о▓░езков.
IV
Ме▓од╗ по▒▓░оени┐ и анализа алго░и▓мов
Введение
Э▓а ╖а▒▓╝ по▒в┐╣ена ▓░ем важн╗м ме▓одам по▒▓░оени┐ и анализа ╜┤┤ек▓ивн╗╡ алго░и▓мов: динами╖е▒ком│ п░ог░амми░овани╛
(глава 16), жадн╗м алго░и▓мам (глава 17) и амо░▓иза╢ионном│
анализ│ (глава 18). Э▓и ме▓од╗, возможно, ╖│▓╝ ▒ложнее ░азоб░анн╗╡ ░анее (└░аздел┐й и вла▒▓в│й┴, и▒пол╝зование ▒л│╖айн╗╡ ╖и▒ел,
░е╕ение ░ек│░░ен▓н╗╡ ▒оо▓но╕ений), но не менее важн╗.
Динами╖е▒кое п░ог░амми░ование об╗╖но п░имен┐е▓▒┐ к зада╖ам, в ко▓о░╗╡ и▒ком╗й о▓ве▓ ▒о▒▓ои▓ из ╖а▒▓ей, кажда┐ из ко▓о░╗╡ в ▒во╛ о╖е░ед╝ дае▓ оп▓имал╝ное ░е╕ение неко▓о░ой подзада╖и. Динами╖е▒кое п░ог░амми░ование полезно, е▒ли на ░азн╗╡
п│▓┐╡ многок░а▓но в▒▓░е╖а╛▓▒┐ одни и ▓е же подзада╖и; о▒новной
▓е╡ни╖е▒кий п░ием | запомина▓╝ ░е╕ени┐ в▒▓░е╖а╛╣и╡▒┐ подзада╖ на ▒л│╖ай, е▒ли ▓а же подзада╖а в▒▓░е▓и▓▒┐ внов╝.
Жадн╗е алго░и▓м╗, как и динами╖е▒кое п░ог░амми░ование,
п░имен┐╛▓▒┐ в ▓е╡ ▒л│╖а┐╡, когда и▒ком╗й об║ек▓ ▒▓░ои▓▒┐ по
╖а▒▓┐м. Жадн╗й алго░и▓м делае▓ на каждом ╕аге └локал╝но оп▓имал╝н╗й┴ в╗бо░. П░о▒▓ой п░име░: ▒▓а░а┐▒╝ наб░а▓╝ данн│╛ ▒│мм│
денег минимал╝н╗м ╖и▒лом моне▓, можно по▒ледова▓ел╝но б░а▓╝
моне▓╗ наибол╝╕его возможного до▒▓оин▒▓ва (не п░ево▒╡од┐╣его
▓ой ▒│мм╗, ко▓о░│╛ о▒▓ало▒╝ наб░а▓╝).
Жадн╗й алго░и▓м об╗╖но ░або▓ае▓ го░аздо б╗▒▓░ее, ╖ем алго░и▓м, о▒нованн╗й на динами╖е▒ком п░ог░амми░овании. Однако
жадн╗й алго░и▓м вов▒е не в▒егда дае▓ оп▓имал╝ное ░е╕ение. Во
многи╡ зада╖а╡ п░именимо▒▓╝ жадн╗╡ алго░и▓мов │дае▓▒┐ доказа▓╝ ▒ помо╣╝╛ ▓ак наз╗ваем╗╡ ма▓░оидов, о ко▓о░╗╡ ░а▒▒казано
в главе 17.
Амо░▓иза╢ионн╗й анализ | ╜▓о ▒░ед▒▓во анализа алго░и▓мов,
п░оизвод┐╣и╡ по▒ледова▓ел╝но▒▓╝ одно▓ипн╗╡ опе░а╢ий. Вме▒▓о
▓ого, ╖▓об╗ о╢енива▓╝ в░ем┐ ░або▓╗ дл┐ каждой из ╜▓и╡ опе░а╢ий по о▓дел╝но▒▓и, амо░▓иза╢ионн╗й анализ о╢енивае▓ ▒░еднее
304
Ча▒▓╝ IV Ме▓од╗ по▒▓░оени┐ и анализа алго░и▓мов
в░ем┐ ░або▓╗ в ░а▒╖е▓е на одн│ опе░а╢и╛. Разни╢а може▓ оказа▓╝▒┐ ▒│╣е▒▓венной, е▒ли долго в╗полн┐ем╗е опе░а╢ии не мог│▓
ид▓и под░┐д. На ▒амом деле амо░▓иза╢ионн╗й анализ | не ▓ол╝ко
▒░ед▒▓во анализа алго░и▓мов, но е╣е и под╡од к ░аз░або▓ке алго░и▓мов: вед╝ ░аз░або▓ка алго░и▓ма и анализ ▒ко░о▒▓и его ░або▓╗
▓е▒но ▒в┐зан╗. В главе 18 м╗ ░а▒▒каз╗ваем о ▓░е╡ ме▓ода╡ амо░▓иза╢ионного анализа алго░и▓мов.
16
Динами╖е▒кое п░ог░амми░ование
Подобно ме▓од│ └░аздел┐й и вла▒▓в│й┴, динами╖е▒кое п░ог░амми░ование ░е╕ае▓ зада╖│, ░азбива┐ ее на подзада╖и и об║един┐┐ и╡
░е╕ени┐. Как м╗ видели в главе 1, алго░и▓м╗ ▓ипа └░аздел┐й и
вла▒▓в│й┴ дел┐▓ зада╖│ на незави▒им╗е подзада╖и, ╜▓и подзада╖и | на более мелкие подзада╖и и ▓ак далее, а за▓ем ▒оби░а╛▓ ░е╕ение о▒новной зада╖и └▒низ│ вве░╡┴. Динами╖е▒кое п░ог░амми░ование п░именимо ▓огда, когда подзада╖и не ┐вл┐╛▓▒┐ незави▒им╗ми, ин╗ми ▒ловами, когда │ подзада╖ е▒▓╝ об╣ие └подподзада╖и┴.
В ╜▓ом ▒л│╖ае алго░и▓м ▓ипа └░аздел┐й и вла▒▓в│й┴ б│де▓ дела▓╝
ли╕н╛╛ ░або▓│, ░е╕а┐ одни и ▓е же подподзада╖и по не▒кол╝к│
░аз. Алго░и▓м, о▒нованн╗й на динами╖е▒ком п░ог░амми░овании,
░е╕ае▓ кажд│╛ из подзада╖ единожд╗ и запоминае▓ о▓ве▓╗ в ▒пе╢иал╝ной ▓абли╢е. Э▓о позвол┐е▓ не в╗╖и▒л┐▓╝ заново о▓ве▓ к │же
в▒▓░е╖ав╕ей▒┐ подзада╖е.
В ▓ипи╖ном ▒л│╖ае динами╖??▒кое п░ог░амми░ование п░имен┐е▓▒┐ к зада╖ам оп▓имиза╢ии (optimization problems). У ▓акой зада╖и
може▓ б╗▓╝ много возможн╗╡ ░е╕ений; и╡ └ка╖е▒▓во┴ оп░едел┐е▓▒┐ зна╖ением какого-▓о па░аме▓░а, и ▓░еб│е▓▒┐ в╗б░а▓╝ оп▓имал╝ное ░е╕ение, п░и ко▓о░ом зна╖ение па░аме▓░а б│де▓ минимал╝н╗м
или мак▒имал╝н╗м (в зави▒имо▒▓и о▓ по▒▓ановки зада╖и). Вооб╣е
гово░┐, оп▓им│м може▓ до▒▓ига▓╝▒┐ дл┐ не▒кол╝ки╡ ░азн╗╡ ░е╕ений.
Как ▒▓░ои▓▒┐ алго░и▓м, о▒нованн╗й на динами╖е▒ком п░ог░амми░овании? Надо:
1. опи▒а▓╝ ▒▓░│к▓│░│ оп▓имал╝н╗╡ ░е╕ений,
2. в╗пи▒а▓╝ ░ек│░░ен▓ное ▒оо▓но╕ение, ▒в┐з╗ва╛╣ее оп▓имал╝н╗е зна╖ени┐ па░аме▓░а дл┐ подзада╖,
3. двига┐▒╝ ▒низ│ вве░╡, в╗╖и▒ли▓╝ оп▓имал╝ное зна╖ение па░аме▓░а,
4. пол╝з│┐▒╝ пол│╖енной ин┤о░ма╢ией, по▒▓░ои▓╝ оп▓имал╝ное
░е╕ение.
О▒новн│╛ ╖а▒▓╝ ░або▓╗ ▒о▒▓авл┐╛▓ ╕аги 1{3. Е▒ли на▒ ин▓е░е▒│е▓
▓ол╝ко оп▓имал╝ное зна╖ение па░аме▓░а, ╕аг 4 не н│жен. Е▒ли же
╕аг 4 необ╡одим, дл┐ по▒▓░оени┐ оп▓имал╝ного ░е╕ени┐ иногда
306
Глава 16 Динами╖е▒кое п░ог░амми░ование
п░и╡оди▓▒┐ пол│╖а▓╝ и ╡░ани▓╝ дополни▓ел╝н│╛ ин┤о░ма╢и╛ в
п░о╢е▒▒е в╗полнени┐ ╕ага 3.
В ╜▓ой главе м╗ ░е╕им не▒кол╝ко оп▓имиза╢ионн╗╡ зада╖ ▒ помо╣╝╛ динами╖е▒кого п░ог░амми░овани┐. В ░азделе 16.1 м╗ в╗┐▒ним, как най▓и п░оизведение не▒кол╝ки╡ ма▓░и╢, ▒делав как можно
мен╝╕е │множений. В ░азделе 16.2 м╗ об▒│дим, какие ▒вой▒▓ва зада╖и дела╛▓ возможн╗м п░именение динами╖е▒кого п░ог░амми░овани┐. По▒ле ╜▓ого м╗ ░а▒▒кажем (в ░азделе 16.3), как най▓и
наибол╝╕│╛ об╣│╛ подпо▒ледова▓ел╝но▒▓╝ дв│╡ по▒ледова▓ел╝но▒▓ей. Наконе╢, в ░азделе 16.4 м╗ во▒пол╝з│ем▒┐ динами╖е▒ким п░ог░амми░ованием дл┐ на╡ождени┐ оп▓имал╝ной ▓░ианг│л┐╢ии в╗п│клого много│гол╝ника. (Удиви▓ел╝н╗м об░азом ╜▓а зада╖а оказ╗вае▓▒┐ по╡ожей на зада╖│ о пе░емножении не▒кол╝ки╡ ма▓░и╢.)
16.1. Пе░емножение не▒кол╝ки╡ ма▓░и╢
М╗ ╡о▓им най▓и п░оизведение
A1A2 : : :An
(16.1)
по▒ледова▓ел╝но▒▓и n ма▓░и╢ hA1; A2; : : :; An i. М╗ б│дем пол╝зо-
ва▓╝▒┐ ▒▓анда░▓н╗м алго░и▓мом пе░емножени┐ дв│╡ ма▓░и╢ в ка╖е▒▓ве подп░ог░амм╗. Но п░ежде надо ░а▒▒▓ави▓╝ ▒кобки в (16.1),
╖▓об╗ │каза▓╝ по░┐док │множений. Б│дем гово░и▓╝, ╖▓о в п░оизведении ма▓░и╢ полно▒▓╝╛ ░а▒▒▓авлен╗ ▒кобки (product is fully parenthesized), е▒ли ╜▓о п░оизведение либо ▒о▒▓ои▓ из однойедин▒▓венной ма▓░и╢╗, либо ┐вл┐е▓▒┐ закл╛╖енн╗м в ▒кобки п░оизведением дв│╡ п░оизведений ▒ полно▒▓╝╛ ░а▒▒▓авленн╗ми ▒кобками. По▒кол╝к│ │множение ма▓░и╢ а▒▒о╢иа▓ивно, коне╖н╗й ░ез│л╝▓а▓ в╗╖и▒лений не зави▒и▓ о▓ ░а▒▒▓ановки ▒кобок. Нап░име░,
в п░оизведении A1 A2 A3A4 можно полно▒▓╝╛ ░а▒▒▓ави▓╝ ▒кобки п┐▓╝╛ ░азн╗ми ▒по▒обами:
(A1(A2 (A3A4 ))); (A1((A2A3 )A4 )); ((A1A2 )(A3A4 ));
((A1(A2 A3 ))A4); (((A1A2 )A3)A4 );
во в▒е╡ ▒л│╖а┐╡ о▓ве▓ б│де▓ один и ▓о▓ же.
Не вли┐┐ на о▓ве▓, ▒по▒об ░а▒▒▓ановки ▒кобок може▓ ▒ил╝но повли┐▓╝ на ▒▓оимо▒▓╝ пе░емножени┐ ма▓░и╢. По▒мо▓░им ▒на╖ала,
▒кол╝ко опе░а╢ий ▓░еб│е▓ пе░емножение дв│╡ ма▓░и╢. Во▓ ▒▓анда░▓н╗й алго░и▓м (rows и columns обозна╖а╛▓ коли╖е▒▓во ▒▓░ок
и ▒▓олб╢ов ма▓░и╢╗ ▒оо▓ве▓▒▓венно):
Пе░емножение не▒кол╝ки╡ ма▓░и╢
307
Matrix-Multiply(A; B )
1 if columns[A] 6= rows[B ]
2 then error └│множи▓╝ нел╝з┐┴
3 else for i 1 to rows[A]
4
do for j 1 to columns[B ]
5
do C [i; j ] 0
6
for k 1 to columns[A]
7
do C [i; j ] C [i; j ] + A[i; k] B [k; j ]
8
return C
Ма▓░и╢╗ A и B можно пе░емножа▓╝, ▓ол╝ко е▒ли ╖и▒ло ▒▓олб╢ов
│ A ░авно ╖и▒л│ ▒▓░ок │ B . Е▒ли A | ╜▓о p q -ма▓░и╢а, а B | ╜▓о
q r-ма▓░и╢а, ▓о и╡ п░оизведение C ┐вл┐е▓▒┐ p r-ма▓░и╢ей. П░и
в╗полнении ╜▓ого алго░и▓ма делае▓▒┐ pqr │множений (▒▓░ока 7)
и п░име░но ▒▓ол╝ко же ▒ложений. Дл┐ п░о▒▓о▓╗ м╗ б│дем │╖и▓╗ва▓╝ ▓ол╝ко │множени┐. [В главе 31 п░иведен алго░и▓м Ш▓░а▒▒ена,
▓░еб│╛╣ий мен╝╕его ╖и▒ла │множений. В ╜▓ой главе м╗ п░инимаем как данно▒▓╝ п░о▒▓ей╕ий ▒по▒об │множени┐ ма▓░и╢ и и╣ем
оп▓им│м за ▒╖е▓ ░а▒▒▓ановки ▒кобок.]
Ч▓об╗ │виде▓╝, как ░а▒▒▓ановка ▒кобок може▓ вли┐▓╝ на ▒▓оимо▒▓╝, ░а▒▒мо▓░им по▒ледова▓ел╝но▒▓╝ из ▓░е╡ ма▓░и╢ hA1; A2; A3i
░азме░ов 10 100, 100 5 и 5 50 ▒оо▓ве▓▒▓венно. П░и в╗╖и▒лении ((A1A2 )A3) н│жно 10 100 5 = 5000 │множений, ╖▓об╗ най▓и 10 5-ма▓░и╢│ A1 A2 , а за▓ем 10 5 50 = 2500 │множений,
╖▓об╗ │множи▓╝ ╜▓│ ма▓░и╢│ на A3 . В▒его 7500 │множений. П░и
░а▒▒▓ановке ▒кобок (A1(A2 A3 )) м╗ делаем 100 5 50 = 25 000
│множений дл┐ на╡ождени┐ 100 50-ма▓░и╢╗ A2 A3 , пл╛▒ е╣е
10 100 50 = 50 000 │множений (│множение A1 на A2A3 ), и▓ого
75 000 │множений. Тем ▒ам╗м, пе░в╗й ▒по▒об ░а▒▒▓ановки ▒кобок
в 10 ░аз в╗годнее.
Зада╖а об │множении по▒ледова▓ел╝но▒▓и ма▓░и╢ (matrix-chain
multiplication problem) може▓ б╗▓╝ ▒┤о░м│ли░ована ▒лед│╛╣им
об░азом: дана по▒ледова▓ел╝но▒▓╝ из n ма▓░и╢ hA1; A2 ; : : :; An i
заданн╗╡ ░азме░ов (ма▓░и╢а Ai имее▓ ░азме░ pi;1 pi ); ▓░еб│е▓▒┐ най▓и ▓ак│╛ (полн│╛) ░а▒▒▓ановк│ ▒кобок в п░оизведении
A1A2 : : :An , ╖▓об╗ в╗╖и▒ление п░оизведени┐ ▓░ебовало наимен╝╕его ╖и▒ла │множений.
Коли╖е▒▓во ░а▒▒▓ановок ▒кобок
П░ежде ╖ем п░имен┐▓╝ динами╖е▒кое п░ог░амми░ование к зада╖е об │множении по▒ледова▓ел╝но▒▓и ма▓░и╢, ▒▓ои▓ │беди▓╝▒┐,
╖▓о п░о▒▓ой пе░ебо░ в▒е╡ возможн╗╡ ░а▒▒▓ановок ▒кобок не да▒▓
╜┤┤ек▓ивного алго░и▓ма. Обозна╖им ▒имволом P (n) коли╖е▒▓во
полн╗╡ ░а▒▒▓ановок ▒кобок в п░оизведении n ма▓░и╢. По▒леднее
308
Глава 16 Динами╖е▒кое п░ог░амми░ование
│множение може▓ п░ои▒╡оди▓╝ на г░ани╢е межд│ k-й и (k + 1)-й
ма▓░и╢ами. До ╜▓ого м╗ о▓дел╝но в╗╖и▒л┐ем п░оизведение пе░в╗╡ k и о▒▓ал╝н╗╡ n ; k ма▓░и╢. По╜▓ом│
8
<
P (n) = :
1;
nP
;1
k=1
е▒ли n = 1,
P (k)P (n ; k); е▒ли n > 2.
В зада╖е 13-4 м╗ п░о▒или ва▒ доказа▓╝, ╖▓о ╜▓о ▒оо▓но╕ение задае▓ по▒ледова▓ел╝но▒▓╝ ╖и▒ел Ка▓алана
P (n) = C (n ; 1);
где
C (n) = n +1 1 C2nn = (4n=n3=2):
С▓ало б╗▓╝, ╖и▒ло ░е╕ений ╜к▒понен╢иал╝но зави▒и▓ о▓ n, ▓ак ╖▓о
полн╗й пе░ебо░ не╜┤┤ек▓ивен. [Д░│гой ▒по▒об пон┐▓╝, ╖▓о ╖и▒ло
ва░иан▓ов ╜к▒понен╢иал╝но: ░азоб╝ем ма▓░и╢╗ на г░│пп╗ по ▓░и;
п░оизведение дл┐ каждой г░│пп╗ можно в╗╖и▒ли▓╝ дв│м┐ ▒по▒обами, ▓ак ╖▓о дл┐ 3n ма▓░и╢ е▒▓╝ не менее 2n ва░иан▓ов.]
Шаг 1: ▒▓░оение оп▓имал╝ной ░а▒▒▓ановки ▒кобок
Е▒ли м╗ ▒оби░аем▒┐ во▒пол╝зова▓╝▒┐ динами╖е▒ким п░ог░амми░ованием, ▓о дл┐ на╖ала должн╗ опи▒а▓╝ ▒▓░оение оп▓имал╝н╗╡
░е╕ений. Дл┐ зада╖и об │множении по▒ледова▓ел╝но▒▓и ма▓░и╢
╜▓о в╗гл┐ди▓ ▒лед│╛╣им об░азом. Обозна╖им дл┐ │доб▒▓ва ╖е░ез Ai::j ма▓░и╢│, ┐вл┐╛╣│╛▒┐ п░оизведением Ai Ai+1 : : :Aj . Оп▓имал╝на┐ ░а▒▒▓ановка ▒кобок в п░оизведении A1 A2 : : :An ░аз░╗вае▓
по▒ледова▓ел╝но▒▓╝ межд│ Ak и Ak+1 дл┐ неко▓о░ого k, │довле▓во░┐╛╣его не░авен▒▓в│ 1 6 k < n. Ин╗ми ▒ловами, п░и в╗╖и▒лении п░оизведени┐, дик▓│емом ╜▓ой ░а▒▒▓ановкой ▒кобок, м╗ ▒на╖ала в╗╖и▒л┐ем п░оизведени┐ A1::k и Ak+1::n , а за▓ем пе░емножаем
и╡ и пол│╖аем окон╖а▓ел╝н╗й о▓ве▓ A1::n . С▓ало б╗▓╝, ▒▓оимо▒▓╝
╜▓ой оп▓имал╝ной ░а▒▒▓ановки ░авна ▒▓оимо▒▓и в╗╖и▒лени┐ ма▓░и╢╗ A1::k , пл╛▒ ▒▓оимо▒▓╝ в╗╖и▒лени┐ ма▓░и╢╗ Ak+1::n , пл╛▒
▒▓оимо▒▓╝ пе░емножени┐ ╜▓и╡ дв│╡ ма▓░и╢.
Чем мен╝╕е │множений нам по▓░еб│е▓▒┐ дл┐ в╗╖и▒лени┐ A1::k
и Ak+1::n , ▓ем мен╝╕е б│де▓ об╣ее ╖и▒ло │множений. С▓ало б╗▓╝,
оп▓имал╝ное ░е╕ение зада╖и о пе░емножении по▒ледова▓ел╝но▒▓и
ма▓░и╢ ▒оде░жи▓ оп▓имал╝н╗е ░е╕ени┐ зада╖ о пе░емножении ее
╖а▒▓ей. Как м╗ │видим в ░азделе 16.2, ╜▓о и позвол┐е▓ п░имени▓╝
динами╖е▒кое п░ог░амми░ование.
Пе░емножение не▒кол╝ки╡ ма▓░и╢
309
Шаг 2: ░ек│░░ен▓ное ▒оо▓но╕ение
Тепе░╝ надо в╗░ази▓╝ ▒▓оимо▒▓╝ оп▓имал╝ного ░е╕ени┐ зада╖и
╖е░ез ▒▓оимо▒▓и оп▓имал╝н╗╡ ░е╕ений ее подзада╖. Такими подзада╖ами б│д│▓ зада╖и об оп▓имал╝ной ░а▒▒▓ановке ▒кобок в п░оизведени┐╡ Ai::j = Ai Ai+1 : : :Aj дл┐ 1 6 i 6 j 6 n. Обозна╖им ╖е░ез
m[i; j ] минимал╝ное коли╖е▒▓во │множений, необ╡одимое дл┐ в╗╖и▒лени┐ ма▓░и╢╗ Ai::j ; в ╖а▒▓но▒▓и, ▒▓оимо▒▓╝ в╗╖и▒лени┐ в▒его
п░оизведени┐ A1::n е▒▓╝ m[1; n].
Чи▒ла m[i; j ] можно в╗╖и▒ли▓╝ ▓ак. Е▒ли i = j , ▓о по▒ледова▓ел╝но▒▓╝ ▒о▒▓ои▓ из одной ма▓░и╢╗ Ai::i = Ai и │множени┐ вооб╣е не
н│жн╗. С▓ало б╗▓╝, m[i; i] = 0 дл┐ i = 1; 2; : : :; n. Ч▓об╗ по▒╖и▓а▓╝ m[i; j ] дл┐ i < j , м╗ во▒пол╝з│ем▒┐ ин┤о░ма╢ией о ▒▓░оении
оп▓имал╝ного ░е╕ени┐, пол│╖енной на ╕аге 1. П│▒▓╝ п░и оп▓имал╝ной ░а▒▒▓ановке ▒кобок в п░оизведении Ai Ai+1 : : :Aj по▒ледним иде▓ │множение Ai : : :Ak на Ak+1 : : :Aj , где i 6 k < j . Тогда
m[i; j ] ░авно ▒│мме минимал╝н╗╡ ▒▓оимо▒▓ей в╗╖и▒лени┐ п░оизведений Ai::k и Ak+1::j пл╛▒ ▒▓оимо▒▓╝ пе░емножени┐ ╜▓и╡ дв│╡
ма▓░и╢. По▒кол╝к│ дл┐ в╗╖и▒лени┐ п░оизведени┐ Ai::k Ak+1::j ▓░еб│е▓▒┐ pi;1 pk pj │множений,
m[i; j ] = m[i; k] + m[k + 1; j ] + pi;1 pk pj :
В ╜▓ом ▒оо▓но╕ении под░аз│мевае▓▒┐, ╖▓о оп▓имал╝ное зна╖ение k нам изве▒▓но; на деле ╜▓о не ▓ак. Однако ╖и▒ло k може▓
п░инима▓╝ в▒его ли╕╝ j ; i ░азли╖н╗╡ зна╖ений: i; i + 1; : : :; j ; 1.
По▒кол╝к│ одно из ни╡ оп▓имал╝но, до▒▓а▓о╖но пе░еб░а▓╝ ╜▓и зна╖ени┐ k и в╗б░а▓╝ наил│╖╕ее. Пол│╖аем ░ек│░░ен▓н│╛ ┤о░м│л│:
(
0
п░и i = j ,
min fm[i; k] + m[k + 1; j ] + pi;1 pk pj g п░и i < j .
i6k<j
(16.2)
Чи▒ла m[i; j ] | ▒▓оимо▒▓и оп▓имал╝н╗╡ ░е╕ений подзада╖. Ч▓об╗ п░о▒леди▓╝ за ▓ем, как пол│╖ае▓▒┐ оп▓имал╝ное ░е╕ение, обозна╖им ╖е░ез s[i; j ] оп▓имал╝ное ме▒▓о по▒леднего │множени┐, ▓о
е▒▓╝ ▓акое k, ╖▓о п░и оп▓имал╝ном в╗╖и▒лении п░оизведени┐
AiAi+1 : : :Aj по▒ледним иде▓ │множение Ai : : :Ak на Ak+1 : : :Aj .
Ин╗ми ▒ловами, s[i; j ] ░авно ╖и▒л│ k, дл┐ ко▓о░ого m[i; j ] = m[i; k]+
m[k + 1; j ] + pi;1pk pj .
m[i; j ] =
Шаг 3: в╗╖и▒ление оп▓имал╝ной ▒▓оимо▒▓и
Пол╝з│┐▒╝ ▒оо▓но╕ени┐ми (16.2), ▓епе░╝ легко напи▒а▓╝ ░ек│░▒ивн╗й алго░и▓м, оп░едел┐╛╣ий минимал╝н│╛ ▒▓оимо▒▓╝ в╗╖и▒лени┐ п░оизведени┐ A1A2 : : :An (▓. е. ╖и▒ло m[1; n]). Однако в░ем┐
310
Глава 16 Динами╖е▒кое п░ог░амми░ование
░або▓╗ ▓акого алго░и▓ма ╜к▒понен╢иал╝но зави▒и▓ о▓ n, ▓ак ╖▓о
╜▓о▓ алго░и▓м не л│╖╕е полного пе░ебо░а. На▒▓о┐╣ий в╗иг░╗╕
во в░емени м╗ пол│╖им, е▒ли во▒пол╝з│ем▒┐ ▓ем, ╖▓о подзада╖ о▓но▒и▓ел╝но немного: по одной зада╖е дл┐ каждой па░╗ (i; j ), дл┐
ко▓о░ой 1 6 i 6 j 6 n, а в▒его Cn2 + n = (n2 ). Эк▒понен╢иал╝ное
в░ем┐ ░або▓╗ возникае▓ по▓ом│, ╖▓о ░ек│░▒ивн╗й алго░и▓м ░е╕ае▓ кажд│╛ из подзада╖ по мног│ ░аз, на ░азн╗╡ ве▓в┐╡ де░ева
░ек│░▒ии. Такое └пе░ек░╗▓ие подзада╖┴ | ╡а░ак▓е░н╗й п░изнак
зада╖, ░е╕аем╗╡ ме▓одом динами╖е▒кого п░ог░амми░овани┐.
Вме▒▓о ░ек│░▒ии м╗ в╗╖и▒лим оп▓имал╝н│╛ ▒▓оимо▒▓╝ └▒низ│
вве░╡┴. В ниже▒лед│╛╣ей п░ог░амме п░едполагае▓▒┐, ╖▓о ма▓░и╢а
Ai имее▓ ░азме░ pi;1 pi п░и i = 1; 2; : : :; n. На в╡од подае▓▒┐ по▒ледова▓ел╝но▒▓╝ p = hp0; p1; : : :; pni, где length[p] = n + 1. П░ог░амма
и▒пол╝з│е▓ в▒помога▓ел╝н╗е ▓абли╢╗ m[1 : :n; 1 : :n] (дл┐ ╡░анени┐
▒▓оимо▒▓ей m[i; j ]) и s[1 : :n; 1 : :n] (в ней о▓ме╖ае▓▒┐, п░и каком k
до▒▓игае▓▒┐ оп▓имал╝на┐ ▒▓оимо▒▓╝ п░и в╗╖и▒лении m[i; j ]).
Matrix-Chain-Order(p)
1 n length[p] ; 1
2 for i 1 to n
3
do m[i; i] 0
4 for l 2 to n
5
do for i 1 to n ; l + 1
6
do j i + l ; 1
7
m[i; j ] 1
8
for k i to j ; 1
9
do q m[i; k] + m[k + 1; j ] + pi;1 pk pj
10
if q < m[i; j ]
11
then m[i; j ] q
12
s[i; j ] k
13 return m, s
Заполн┐┐ ▓абли╢│ m, ╜▓о▓ алго░и▓м по▒ледова▓ел╝но ░е╕ае▓ зада╖и об оп▓имал╝ной ░а▒▒▓ановке ▒кобок дл┐ одного, дв│╡, : : : ,
n ▒омножи▓елей. В ▒амом деле, ▒оо▓но╕ение (16.2) показ╗вае▓, ╖▓о
╖и▒ло m[i; j ] | ▒▓оимо▒▓╝ пе░емножени┐ j ; i +1 ма▓░и╢ | зави▒и▓
▓ол╝ко о▓ ▒▓оимо▒▓ей мен╝╕его (╖ем j ; i +1) ╖и▒ла ма▓░и╢. Именно, дл┐ k = i; i + 1; : : :; j ; 1 пол│╖ае▓▒┐, ╖▓о Ai::k | п░оизведение
k ; i +1 < j ; i +1 ма▓░и╢, а Ak+1::j | п░оизведение j ; k < j ; i +1
ма▓░и╢.
Сна╖ала (в ▒▓░ока╡ 2{3) алго░и▓м в╗полн┐е▓ п░и▒ваивани┐
m[i; i] 0 дл┐ i = 1; 2; : : :; n: ▒▓оимо▒▓╝ пе░емножени┐ по▒ледова▓ел╝но▒▓и из одной ма▓░и╢╗ ░авна н│л╛. П░и пе░вом и▒полнении
╢икла (▒▓░оки 4{12) в╗╖и▒л┐╛▓▒┐ (▒ помо╣╝╛ ▒оо▓но╕ений (16.2))
зна╖ени┐ m[i; i+1] дл┐ i = 1; 2; : : :; n;1 | ╜▓о минимал╝н╗е ▒▓оимо▒▓и дл┐ по▒ледова▓ел╝но▒▓ей длин╗ 2. П░и в▓о░ом п░о╡оде в╗╖и-
Пе░емножение не▒кол╝ки╡ ма▓░и╢
311
Табли╢╗ m и s, в╗╖и▒л┐ем╗е п░о╢ед│░ой Matrix-Chain-Order дл┐
n = 6 и ма▓░и╢ ▒лед│╛╣его ░азме░а:
Ри▒. 16.1
ма▓░и╢а ░азме░
A1
30 35
A2
35 15
A3
15 5
A4
5 10
A5
10 20
A6
20 25
Табли╢╗ пове░н│▓╗ ▓ак, ╖▓о главна┐ диагонал╝ го░изон▓ал╝на. В ▓абли╢е m
и▒пол╝з│╛▓▒┐ ▓ол╝ко кле▓ки, лежа╣ие не ниже главной диагонали, в ▓абли╢е s
| ▓ол╝ко кле▓ки, лежа╣ие ▒▓░ого в╗╕е. Минимал╝ное коли╖е▒▓во │множений, необ╡одимое дл┐ пе░емножени┐ в▒е╡ ╕е▒▓и ма▓░и╢, ░авно m[1; 6] = 15 125.
Па░╗ кле▓о╖ек, за╕▓░и╡ованн╗╡ одинаковой ▒ве▓лой ╕▓░и╡овкой, ▒овме▒▓но
в╡од┐▓ в п░ав│╛ ╖а▒▓╝ ┤о░м│л╗ в п░о╢е▒▒е в╗╖и▒лени┐ m[2; 5] (▒▓░ока 9 п░о╢ед│░╗ Matrix-Chain-Order
8 m[2; 2] + m[3):; 5] + p p p = 0 + 2500 + 35 15 20 = 13000;
>
1 2 5
<
m[2; 5] = min > m[2; 3] + m[4; 5] + p1 p3 p5 = 2625 + 1000 + 35 5 20 = 7125;
: m[2; 4] + m[5; 5] + p1 p4 p5 = 4375 + 0 + 35 10 20 = 11375:
▒л┐╛▓▒┐ m[i; i +2] дл┐ i = 1; 2; : : :; n ; 2 | минимал╝н╗е ▒▓оимо▒▓и
пе░емножени┐ по▒ледова▓ел╝но▒▓ей длин╗ 3, и ▓ак далее. На каждом ╕аге зна╖ение m[i; j ], в╗╖и▒л┐емое в ▒▓░ока╡ 9{12, зави▒и▓
▓ол╝ко о▓ в╗╖и▒ленн╗╡ ░анее зна╖ений m[i; k] и m[k + 1; j ].
На ░и▒. 16.1 показано, как ╜▓о п░ои▒╡оди▓ п░и n = 6. По▒кол╝к│ м╗ оп░едел┐ем m[i; j ] ▓ол╝ко дл┐ i 6 j , и▒пол╝з│е▓▒┐ ╖а▒▓╝
▓абли╢╗, лежа╣а┐ над главной диагонал╝╛. На ░и▒│нке ▓абли╢╗
пове░н│▓╗ (главна┐ диагонал╝ го░изон▓ал╝на). Вниз│ в╗пи▒ана
по▒ледова▓ел╝но▒▓╝ ма▓░и╢. Чи▒ло m[i; j ] | минимал╝на┐ ▒▓оимо▒▓╝ пе░емножени┐ подпо▒ледова▓ел╝но▒▓и Ai Ai+1 : : :Aj | на╡оди▓▒┐ на пе░е▒е╖ении диагоналей, ид│╣и╡ вп░аво-вве░╡ о▓ ма▓░и╢╗ Ai и влево-вве░╡ о▓ ма▓░и╢╗ Aj . В каждом го░изон▓ал╝ном ░┐д│ ▒об░ан╗ ▒▓оимо▒▓и пе░емножени┐ подпо▒ледова▓ел╝но▒▓ей ┤ик▒и░ованной длин╗. Дл┐ заполнени┐ кле▓ки m[i; j ] н│жно
зна▓╝ п░оизведени┐ pi;1 pk pj дл┐ k = i; i + 1; : : :; j ; 1 и ▒оде░жимое
кле▓ок, лежа╣и╡ ▒лева-вниз│ и ▒п░ава-вниз│ о▓ m[i; j ].
312
Глава 16 Динами╖е▒кое п░ог░амми░ование
П░о▒▓а┐ о╢енка показ╗вае▓, ╖▓о в░ем┐ ░або▓╗ алго░и▓ма
Matrix-Chain-Order е▒▓╝ O(n3 ). В ▒амом деле, ╖и▒ло вложенн╗╡
╢иклов ░авно ▓░ем, и кажд╗й из индек▒ов l, i и k п░инимае▓
не более n зна╖ений. В │п░ажнении 16.1-3 м╗ п░едложим вам
показа▓╝, ╖▓о в░ем┐ ░або▓╗ ╜▓ого алго░и▓ма е▒▓╝ (n3 ). Об║ем
пам┐▓и, необ╡одим╗й дл┐ ╡░анени┐ ▓абли╢ m и s, е▒▓╝ (n2 ). Тем
▒ам╗м ╜▓о▓ алго░и▓м зна╖и▓ел╝но ╜┤┤ек▓ивнее, ╖ем ▓░еб│╛╣ий
╜к▒понен╢иал╝ного в░емени пе░ебо░ в▒е╡ ░а▒▒▓ановок.
Шаг 4: по▒▓░оение оп▓имал╝ного ░е╕ени┐
Алго░и▓м Matrix-Chain-Order на╡оди▓ минимал╝ное ╖и▒ло
│множений, необ╡одимое дл┐ пе░емножени┐ по▒ледова▓ел╝но▒▓и
ма▓░и╢. О▒▓ало▒╝ най▓и ░а▒▒▓ановк│ ▒кобок, п░ивод┐╣│╛ к ▓аком│ ╖и▒л│ │множений.
Дл┐ ╜▓ого м╗ и▒пол╝з│ем ▓абли╢│ s[1 : :n; 1 : :n]. В кле▓ке s[i; j ]
запи▒ано ме▒▓о по▒леднего │множени┐ п░и оп▓имал╝ной ░а▒▒▓ановке ▒кобок; д░│гими ▒ловами, п░и оп▓имал╝ном ▒по▒обе
в╗╖и▒лени┐ A1::n по▒ледним иде▓ │множение A1::s[1;n] на As[1;n]+1::n .
П░ед╕е▒▓в│╛╣ие │множени┐ можно най▓и ░ек│░▒ивно: зна╖ение s[1; s[1; n]] оп░едел┐е▓ по▒леднее │множение п░и на╡ождении A1::s[1;n] , а s[s[1; n] + 1; n] оп░едел┐е▓ по▒леднее │множение п░и
в╗╖и▒лении As[1;n]+1::n . П░иведенна┐ ниже ░ек│░▒ивна┐ п░о╢ед│░а
в╗╖и▒л┐е▓ п░оизведение Ai::j , име┐ ▒лед│╛╣ие данн╗е: по▒ледова▓ел╝но▒▓╝ ма▓░и╢ A = hA1; A2; : : :; An i, ▓абли╢│ s, найденн│╛
п░о╢ед│░ой Matrix-Chain-Order, а ▓акже индек▒╗ i и j . П░оизведение A1 A2 : : :An ░авно Matrix-Chain-Multiply(A; s; 1; n).
Matrix-Chain-Multiply(A; s; i; j )
1 if j > i
2 then X Matrix-Chain-Multiply(A; s; i; s[i; j ])
3
Y Matrix-Chain-Multiply(A; s; s[i; j ] + 1; j )
4
return Matrix-Multiply(X; Y )
5 else return Ai
В п░име░е на ░и▒. 16.1 в╗зов Matrix-Chain-Multiply(A; s; 1; 6)
в╗╖и▒ли▓ п░оизведение ╕е▒▓и ма▓░и╢ в ▒оо▓ве▓▒▓вии ▒ ░а▒▒▓ановкой ▒кобок
((A1(A2 A3 ))((A4A5 )A6 )):
(16.3)
[Те╡ни╖е▒кое заме╖ание: ▒лед│е▓ позабо▓и▓╝▒┐, ╖▓об╗ п░и пе░еда╖е
ма▒▒ива s в п░о╢ед│░│ не п░ои▒╡одило копи░овани┐.]
Когда п░именимо динами╖е▒кое п░ог░амми░ование
313
Уп░ажнени┐
16.1-1 Найди▓е оп▓имал╝н│╛ ░а▒▒▓ановк│ в зада╖е о пе░емножении ма▓░и╢, е▒ли p = h5; 10; 3; 12; 5; 50; 6i.
16.1-2 Раз░або▓ай▓е алго░и▓м Print-Optimal-Parens, пе╖а▓а╛╣ий оп▓имал╝н│╛ ░а▒▒▓ановк│ ▒кобок. (Табли╢а s │же в╗╖и▒лена
алго░и▓мом Matrix-Chain-Order.)
16.1-3 П│▒▓╝ R(i; j ) обозна╖ае▓ коли╖е▒▓во об░а╣ений алго░и▓ма Matrix-Chain-Order к ╜лемен▓│ m[i; j ] ▓абли╢╗ m ▒ ╢ел╝╛
в╗╖и▒лени┐ д░│ги╡ ╜лемен▓ов ▓абли╢╗ [▒▓░ока 9]. Покажи▓е, ╖▓о
об╣ее коли╖е▒▓во ▓аки╡ об░а╣ений ░авно
n X
n
X
i=1 j =1
3
R(i; j ) = n 3; n :
P
(Указание. Вам може▓ п░игоди▓╝▒┐ ┤о░м│ла ni=1 i2 = n(n +
1)(2n + 1)=6.)
16.1-4 Покажи▓е, ╖▓о полна┐ ░а▒▒▓ановка ▒кобок в п░оизведении
n множи▓елей и▒пол╝з│е▓ ░овно n ; 1 па░ ▒кобок.
16.2. Когда п░именимо динами╖е▒кое п░ог░амми░ование
В ╜▓ом ░азделе м╗ │кажем два п░изнака, ╡а░ак▓е░н╗╡ дл┐ зада╖,
░е╕аем╗╡ ме▓одом динами╖е▒кого п░ог░амми░овани┐.
Оп▓имал╝но▒▓╝ дл┐ подзада╖
П░и ░е╕ении оп▓имиза╢ионной зада╖и ▒ помо╣╝╛ динами╖е▒кого п░ог░амми░овани┐ необ╡одимо ▒на╖ала опи▒а▓╝ ▒▓░│к▓│░│
оп▓имал╝ного ░е╕ени┐. Б│дем гово░и▓╝, ╖▓о зада╖а обладае▓ ▒вой▒▓вом оп▓имал╝но▒▓и дл┐ зада╖ (has optimal substructure), е▒ли
оп▓имал╝ное ░е╕ение зада╖и ▒оде░жи▓ оп▓имал╝н╗е ░е╕ени┐ ее
подзада╖. Е▒ли зада╖а обладае▓ ╜▓им ▒вой▒▓вом, ▓о динами╖е▒кое
п░ог░амми░ование може▓ оказа▓╝▒┐ полезн╗м дл┐ ее ░е╕ени┐ (a
возможно, п░именим и жадн╗й алго░и▓м | ▒м. глав│ 17).
В ░азделе 16.1 м╗ видели, ╖▓о зада╖а пе░емножени┐ ма▓░и╢
обладае▓ ▒вой▒▓вом оп▓имал╝но▒▓и дл┐ подзада╖: кажда┐ ▒кобка
в оп▓имал╝ном п░оизведении │каз╗вае▓ оп▓имал╝н╗й ▒по▒об пе░емножени┐ в╡од┐╣и╡ в нее ма▓░и╢. Ч▓об╗ │беди▓╝▒┐, ╖▓о зада╖а
обладае▓ ╜▓им ▒вой▒▓вом, надо (как в ░азделе 16.1) показа▓╝, ╖▓о,
│л│╖╕а┐ ░е╕ение подзада╖и, м╗ │л│╖╕им и ░е╕ение и▒╡одной зада╖и.
314
Глава 16 Динами╖е▒кое п░ог░амми░ование
Как ▓ол╝ко ▒вой▒▓во оп▓имал╝но▒▓и дл┐ подзада╖ │▒▓ановлено,
об╗╖но ▒▓анови▓▒┐ ┐▒но, ▒ каким именно множе▒▓вом подзада╖ б│де▓ име▓╝ дело алго░и▓м. Нап░име░, дл┐ зада╖и о пе░емножении
по▒ледова▓ел╝но▒▓и ма▓░и╢ подзада╖ами б│д│▓ зада╖и о пе░емножении к│▒ков ╜▓ой по▒ледова▓ел╝но▒▓и.
Пе░ек░╗ва╛╣ие▒┐ подзада╖и
В▓о░ой ▒вой▒▓во зада╖, необ╡одимое дл┐ и▒пол╝зовани┐ динами╖е▒кого п░ог░амми░овани┐, | мало▒▓╝ множе▒▓ва подзада╖. Благода░┐ ╜▓ом│ п░и ░ек│░▒ивном ░е╕ении зада╖и м╗ в▒е в░ем┐ в╗╡одим на одни и ▓е же подзада╖и. В ▓аком ▒л│╖ае гово░┐▓, ╖▓о
│ оп▓имиза╢ионной зада╖и име╛▓▒┐ пе░ек░╗ва╛╣ие▒┐ подзада╖и
(overlapping subproblems). В ▓ипи╖н╗╡ ▒л│╖а┐╡ коли╖е▒▓во подзада╖ полиномиал╝но зави▒и▓ о▓ ░азме░а и▒╡одн╗╡ данн╗╡.
В зада╖а╡, ░е╕аем╗╡ ме▓одом └░аздел┐й и вла▒▓в│й┴, ▓ак не б╗вае▓: дл┐ ни╡ ░ек│░▒ивн╗й алго░и▓м, как п░авило, на каждом ╕аге
по░ождае▓ ▒ове░╕енно нов╗е подзада╖и. Алго░и▓м╗, о▒нованн╗е
на динами╖е▒ком п░ог░амми░овании, и▒пол╝з│╛▓ пе░ек░╗▓ие подзада╖ ▒лед│╛╣им об░азом: кажда┐ из подзада╖ ░е╕ае▓▒┐ ▓ол╝ко
один ░аз, и о▓ве▓ зано▒и▓▒┐ в ▒пе╢иал╝н│╛ ▓абли╢│; когда ╜▓а же
подзада╖а в▒▓░е╖ае▓▒┐ ▒нова, п░ог░амма не ▓░а▓и▓ в░ем┐ на ее
░е╕ение, а бе░е▓ го▓ов╗й о▓ве▓ из ▓абли╢╗.
Ве░нем▒┐ дл┐ п░име░а к зада╖е о пе░емножении по▒ледова▓ел╝но▒▓и ма▓░и╢. Из ░и▒│нка 16.1 видно, ╖▓о ░е╕ение каждой из подзада╖, запи▒анное в данной кле▓о╖ке ▓абли╢╗, многок░а▓но и▒пол╝з│е▓▒┐ п░о╢ед│░ой Matrix-Chain-Order п░и ░е╕ении подзада╖ из ░а▒положенн╗╡ в╗╕е кле▓о╖ек. Нап░име░, m[3; 4] и▒пол╝з│е▓▒┐ ╖е▓╗░ежд╗: п░и в╗╖и▒лении m[2; 4], m[1; 4], m[3; 5] и m[3; 6].
Б╗ло б╗ к░айне не╜┤┤ек▓ивно в╗╖и▒л┐▓╝ m[3; 4] в▒┐кий ░аз заново. В ▒амом деле, ░а▒▒мо▓░им ▒лед│╛╣ий (не╜┤┤ек▓ивн╗й) ░ек│░▒ивн╗й алго░и▓м, о▒нованн╗й непо▒░ед▒▓венно на ▒оо▓но╕ени┐╡ (16.2) и в╗╖и▒л┐╛╣ий m[i; j ] | минимал╝ное коли╖е▒▓во │множений, необ╡одимое дл┐ в╗╖и▒лени┐ Ai::j = Ai Ai+1 : : :Aj :
Recursive-Matrix-Chain(p; i; j )
1 if i = j
2 then return 0
3 m[i; j ] 1
4 for k i to j ; 1
5
do q Recursive-Matrix-Chain(p; i; k) +
+ Recursive-Matrix-Chain(p; k + 1; j ) + pi;1 pk pj
6
if q < m[i; j ]
7
then m[i; j ] q
8 return m[i; j ]
Когда п░именимо динами╖е▒кое п░ог░амми░ование
315
Ри▒. 16.2 Де░ево ░ек│░▒ии дл┐ Recursive-Matrix-Chain (p; 1; 4). В каждой
ве░╕ине запи▒ан╗ зна╖ени┐ i и j . За╕▓░и╡ован╗ └ли╕ние┴ ве░╕ин╗ (в╗╖и▒лени┐ в ко▓о░╗╡ пов▓о░┐╛▓ │же п░оделанн╗е).
На ░и▒. 16.2 изоб░ажено де░ево ░ек│░▒ии дл┐ Recursive-MatrixChain(p; 1; 4). В каждой ве░╕ине запи▒ан╗ зна╖ени┐ i и j . Об░а▓и▓е внимание, ╖▓о неко▓о░╗е па░╗ (i; j ) в▒▓░е╖а╛▓▒┐ многок░а▓но.
Легко виде▓╝, ╖▓о в░ем┐ ░або▓╗ Recursive-Matrix-Chain(p; 1; n)
зави▒и▓ о▓ n по мен╝╕ей ме░е ╜к▒понен╢иал╝но. В ▒амом деле,
обозна╖им его T (n) и п░имем, ╖▓о в░ем┐ и▒полнени┐ ▒▓░ок 1{2, а
▓акже 6{7, ░авно едини╢е. Тогда:
T (1) > 1;
T (n) > 1 +
nX
;1
k=1
(T (k) + T (n ; k) + 1);
е▒ли n > 1.
В ▒│мме по k каждое T (i) (п░и i = 1; 2; : : :; n ; 1) в▒▓░е╖ае▓▒┐
дважд╗, и е╣е е▒▓╝ n ; 1 едини╢. С▓ало б╗▓╝,
T (n) > 2
n;1
X
i=1
T (i) + n:
(16.4)
Докажем по инд│к╢ии, ╖▓о T (n) > 2n;1 дл┐ в▒е╡ n > 1. П░и n = 1
не░авен▒▓во в╗полнено, ▓ак как T (1) > 1 = 20. Шаг инд│к╢ии:
nX
;1
n;2
X
i
;
1
T (n) > 2 2 + n = 2 2i + n =
i=1
i=0
n
;
1
= 2(2 ; 1) + n = 2n ; 2 + n > 2n;1 :
М╗ видим, ╖▓о алго░и▓м Recursive-Matrix-Chain ▓░еб│е▓ ╜к▒понен╢иал╝ного в░емени. П░и╖ина в ▓ом, ╖▓о ╜▓о▓ алго░и▓м многок░а▓но в▒▓░е╖ае▓ одинаков╗е подзада╖и и кажд╗й ░аз ░е╕ае▓
и╡ заново. Разли╖н╗╡ подзада╖ в▒его ли╕╝ (n2 ), и ма▒▒а в░емени
▓е░┐е▓▒┐ на ли╕н╛╛ ░або▓│. Ме▓од динами╖е▒кого п░ог░амми░овани┐ позвол┐е▓ ╜▓ой ли╕ней ░або▓╗ избежа▓╝.
316
Глава 16 Динами╖е▒кое п░ог░амми░ование
Динами╖е▒кое п░ог░амми░ование └▒ве░╡│ вниз┴
Алго░и▓м ░аздела 16.1 дей▒▓вовал └▒низ│ вве░╡┴. Но ▓о▓ же
п░ием (и▒кл╛╖ение пов▓о░ного ░е╕ени┐ подзада╖) можно ░еализова▓╝ и дл┐ алго░и▓мов, ░або▓а╛╣и╡ └▒ве░╡│ вниз┴. Дл┐ ╜▓ого
н│жно запомина▓╝ о▓ве▓╗ к │же ░е╕енн╗м подзада╖ам в ▒пе╢иал╝ной ▓абли╢е. Сна╖ала в▒┐ ▓абли╢а п│▒▓а (▓. е. заполнена ▒пе╢иал╝н╗ми запи▒┐ми, │каз╗ва╛╣ими на ▓о, ╖▓о ▒оо▓ве▓▒▓в│╛╣ее
зна╖ение е╣е не в╗╖и▒лено). Когда в п░о╢е▒▒е в╗полнени┐ алго░и▓ма подзада╖а в▒▓░е╖ае▓▒┐ в пе░в╗й ░аз, ее ░е╕ение зано▒и▓▒┐
в ▓абли╢│. В дал╝ней╕ем ░е╕ение ╜▓ой подзада╖и бе░е▓▒┐ п░┐мо
из ▓абли╢╗. (В на╕ем п░име░е ▓абли╢│ о▓ве▓ов заве▒▓и легко, ▓ак
как подзада╖и н│ме░│╛▓▒┐ па░ами (i; j ). В более ▒ложн╗╡ ▒л│╖а┐╡ можно и▒пол╝зова▓╝ ╡е╕и░ование.) По-англий▒ки ╜▓о▓ п░ием
│л│╖╕ени┐ ░ек│░▒ивн╗╡ алго░и▓мов наз╗вае▓▒┐ memoization.
П░именим ╜▓о │▒ове░╕ен▒▓вование к алго░и▓м│ RecursiveMatrix-Chain:
Memoized-Matrix-Chain(p)
1 n length[p] ; 1
2 for i 1 to n
3
do for j i to n
4
do m[i; j ] 1
5 return Lookup-Chain(p; 1; n)
Lookup-Chain(p; i; j )
1 if m[i; j ] < 1
2 then return m[i; j ]
3 if i = j
4 then m[i; j ] 0
5 else for k i to j ; 1
6
do q Lookup-Chain(p; i; k) +
+ Lookup-Chain(p; k + 1; j ) + pi;1 pk pj
7
if q < m[i; j ]
8
then m[i; j ] q
9 return m[i; j ]
П░о╢ед│░а Memoized-Matrix-Chain, подобно Matrix-ChainOrder, заполн┐е▓ ▓абли╢│ m[1 : :n; 1 : :n], где m[i; j ] | минимал╝ное коли╖е▒▓во │множений, необ╡одимое дл┐ в╗╖и▒лени┐ Ai::j . Пе░вона╖ал╝но m[i; j ] = 1 в знак ▓ого, ╖▓о ▒оо▓ве▓▒▓в│╛╣ее ме▒▓о в
▓абли╢е не заполнено. Е▒ли п░и и▒полнении Lookup-Chain(p; i; j )
оказ╗вае▓▒┐, ╖▓о m[i; j ] < 1, ▓о п░о╢ед│░а ▒░аз│ в╗дае▓ ╜▓о зна╖ение m[i; j ]. В п░о▓ивном ▒л│╖ае m[i; j ] в╗╖и▒л┐е▓▒┐ как в п░о╢ед│░е
Recursive-Matrix-Chain, запи▒╗вае▓▒┐ в ▓абли╢│ и в╗дае▓▒┐ в
ка╖е▒▓ве о▓ве▓а. Тем ▒ам╗м в╗зов Lookup-Chain(p; i; j ) в▒егда
Когда п░именимо динами╖е▒кое п░ог░амми░ование
317
возв░а╣ае▓ m[i; j ], но в╗╖и▒лени┐ п░овод┐▓▒┐ ▓ол╝ко п░и пе░вом
▓аком в╗зове.
Ри▒. 16.2 илл╛▒▓░и░│е▓ ╜кономи╛, до▒▓игаем│╛ заменой
Recursive-Matrix-Chain на Memoized-Matrix-Chain. За╕▓░и╡ованн╗е ве░╕ин╗ де░ева ░ек│░▒ии ▒оо▓ве▓▒▓в│╛▓ ▓ем
▒л│╖а┐м, когда зна╖ение m[i; j ] не в╗╖и▒л┐е▓▒┐, а бе░е▓▒┐ п░┐мо из
▓абли╢╗.
Алго░и▓м Memoized-Matrix-Chain ▓░еб│е▓ в░емени O(n3),
как и алго░и▓м Matrix-Chain-Order. В ▒амом деле, кажда┐ из
(n2 ) пози╢ий ▓абли╢╗ один ░аз ини╢иализи░│е▓▒┐ (▒▓░ока 4 п░о╢ед│░╗ Memoized-Matrix-Chain) и один-един▒▓венн╗й ░аз заполн┐е▓▒┐ | п░и пе░вом в╗зове Lookup-Chain(p; i; j ) дл┐ данн╗╡
i и j . В▒е в╗зов╗ Lookup-Chain(p; i; j ) дел┐▓▒┐ на пе░в╗е и пов▓о░н╗е. Кажд╗й из (n2 ) пе░в╗╡ в╗зовов ▓░еб│е▓ в░емени O(n)
(не вкл╛╖а┐ в░емени ░або▓╗ ░ек│░▒ивн╗╡ в╗зовов Lookup-Chain
дл┐ мен╝╕и╡ │╖а▒▓ков); об╣ее в░ем┐ ░або▓╗ е▒▓╝ O(n3 ). Кажд╗й
из пов▓о░н╗╡ в╗зовов ▓░еб│е▓ в░емени O(1); и╡ ╖и▒ло е▒▓╝ O(n3 )
(в╗╖и▒лени┐ дл┐ каждой из O(n2 ) кле▓ок ▓абли╢╗ по░ожда╛▓ O(n)
в╗зовов). Тем ▒ам╗м ░ек│░▒ивн╗й алго░и▓м, ▓░еб│╛╣ий в░емени (2n), п░ев░а▓ил▒┐ в полиномиал╝н╗й, ▓░еб│╛╣ий в░емени O(n3).
Подведем и▓оги: зада╖а об оп▓имал╝ном по░┐дке │множени┐
n ма▓░и╢ може▓ б╗▓╝ ░е╕ена за в░ем┐ O(n3) либо └▒ве░╡│ вниз┴
(░ек│░▒ивн╗й алго░и▓м ▒ запоминанием о▓ве▓ов), либо └▒низ│
вве░╡┴ (динами╖е▒кое п░ог░амми░ование). Оба алго░и▓ма о▒нован╗ на пе░ек░╗▓ии подзада╖; ╖и▒ло подзада╖ е▒▓╝ (n2 ), и оба алго░и▓ма ░е╕а╛▓ кажд│╛ из подзада╖ ли╕╝ единожд╗.
Вооб╣е гово░┐, е▒ли кажда┐ из подзада╖ должна б╗▓╝ ░е╕ена
╡о▓╝ ░аз, ме▓од динами╖е▒кого п░ог░амми░овани┐ (└▒низ│ вве░╡┴)
об╗╖но ╜┤┤ек▓ивнее, ╖ем ░ек│░▒и┐ ▒ запоминанием о▓ве▓ов, по▒кол╝к│ ░еализа╢и┐ ░ек│░▒ии (а ▓акже п░ове░ка, е▒▓╝ о▓ве▓ в ▓абли╢е или е╣е не▓) ▓░еб│е▓ дополни▓ел╝ного в░емени. Но е▒ли дл┐
на╡ождени┐ оп▓им│ма не об┐за▓ел╝но ░е╕а▓╝ в▒е подзада╖и, под╡од └▒ве░╡│ вниз┴ имее▓ ▓о п░еим│╣е▒▓во, ╖▓о ░е╕а╛▓▒┐ ли╕╝ ▓е
подзада╖и, ко▓о░╗е дей▒▓ви▓ел╝но н│жн╗.
Уп░ажнени┐
16.2-1 С░авни▓е не░авен▒▓во (16.4) ▒ ┤о░м│лой (8.4), и▒пол╝зованной п░и о╢енке в░емени ░або▓╗ алго░и▓ма б╗▒▓░ой ▒о░▓и░овки. В ╖ем п░и╖ина ▓ого, ╖▓о о╢енки, пол│╖а╛╣ие▒┐ из ╜▓и╡ дв│╡
░ек│░░ен▓н╗╡ ▒оо▓но╕ений, ▒▓ол╝ ░азли╖н╗?
16.2-2 Как л│╖╕е и▒ка▓╝ оп▓имал╝н╗й по░┐док пе░емножени┐
ма▓░и╢: пе░еби░а┐ в▒е ░а▒▒▓ановки ▒кобок и в╗╖и▒л┐┐ коли╖е-
318
Глава 16 Динами╖е▒кое п░ог░амми░ование
▒▓во │множений дл┐ каждой из ни╡, или же ▒ помо╣╝╛ алго░и▓ма
Recursive-Matrix-Chain?
16.2-3 На░и▒│й▓е де░ево ░ек│░▒ии дл┐ алго░и▓ма Merge-Sort
(▒о░▓и░овка ▒ли┐нием) из ░аздела 1.3.1, п░имененного к ма▒▒ив│
из 16 ╜лемен▓ов. По╖ем│ зде▒╝ не▓ ▒м╗▒ла запомина▓╝ о▓ве▓╗ к
│же ░е╕енн╗м подзада╖ам?
16.3. Наибол╝╕а┐ об╣а┐ подпо▒ледова▓ел╝но▒▓╝
Подпо▒ледова▓ел╝но▒▓╝ пол│╖ае▓▒┐ из данной по▒ледова▓ел╝но▒▓и, е▒ли │дали▓╝ неко▓о░╗е ее ╜лемен▓╗ (▒ама по▒ледова▓ел╝но▒▓╝
▓акже ▒╖и▓ае▓▒┐ ▒воей подпо▒ледова▓ел╝но▒▓╝╛). Фо░мал╝но: по▒ледова▓ел╝но▒▓╝ Z = hz1; z2 ; : : :; zk i наз╗вае▓▒┐ подпо▒ледова▓ел╝но▒▓╝╛ (subsequence) по▒ледова▓ел╝но▒▓и X = hx1; x2; : : :; xni, е▒ли ▒│╣е▒▓в│е▓ ▒▓░ого воз░а▒▓а╛╣а┐ по▒ледова▓ел╝но▒▓╝ индек▒ов
hi1; i2; : : :; ik i, дл┐ ко▓о░ой zj = xij п░и в▒е╡ j = 1; 2; : : :; k. Нап░име░, Z = hB; C; D; B i ┐вл┐е▓▒┐ подпо▒ледова▓ел╝но▒▓╝╛ по▒ледова▓ел╝но▒▓и X = hA; B; C; B; D; A; B i; ▒оо▓ве▓▒▓в│╛╣а┐ по▒ледова▓ел╝но▒▓╝ индек▒ов е▒▓╝ h2; 3; 5; 7i. (О▓ме▓им, ╖▓о гово░┐ о по▒ледова▓ел╝но▒▓┐╡, м╗ | в о▓ли╖ие о▓ к│░▒ов ма▓ема▓и╖е▒кого
анализа | имеем в вид│ коне╖н╗е по▒ледова▓ел╝но▒▓и.)
Б│дем гово░и▓╝, ╖▓о по▒ледова▓ел╝но▒▓╝ Z ┐вл┐е▓▒┐ об╣ей
подпо▒ледова▓ел╝но▒▓╝╛ (common subsequence) по▒ледова▓ел╝но▒▓ей X и Y , е▒ли Z ┐вл┐е▓▒┐ подпо▒ледова▓ел╝но▒▓╝╛ как X , ▓ак
и Y . П░име░: X = hA; B; C; B; D; A; B i, Y = hB; D; C; A; B; Ai,
Z = hB; C; Ai. По▒ледова▓ел╝но▒▓╝ Z в ╜▓ом п░име░е | не ▒ама┐
длинна┐ из об╣и╡ подпо▒ледова▓ел╝но▒▓ей X и Y (по▒ледова▓ел╝но▒▓╝ hB; C; B; Ai длиннее). По▒ледова▓ел╝но▒▓╝ hB; C; B; Ai б│де▓
наибол╝╕ей об╣ей подпо▒ледова▓ел╝но▒▓╝╛ дл┐ X и Y , по▒кол╝к│ об╣и╡ подпо▒ледова▓ел╝но▒▓ей длин╗ 5 │ ни╡ не▓. Наибол╝╕и╡
об╣и╡ подпо▒ледова▓ел╝но▒▓ей може▓ б╗▓╝ не▒кол╝ко. Нап░име░,
hB; D; A; Bi | д░│га┐ наибол╝╕а┐ об╣а┐ подпо▒ледова▓ел╝но▒▓╝ X
и Y.
Зада╖а о наибол╝╕ей об╣ей подпо▒ледова▓ел╝но▒▓и (▒ок░а╣енно НОП; по-англий▒ки LCS = longest-common-subsequence) ▒о▒▓ои▓ в ▓ом, ╖▓об╗ най▓и об╣│╛ подпо▒ледова▓ел╝но▒▓╝ наибол╝╕ей
длин╗ дл┐ дв│╡ данн╗╡ по▒ледова▓ел╝но▒▓ей X и Y . В ╜▓ом ░азделе м╗ покажем, как ░е╕и▓╝ ╜▓│ зада╖│ ▒ помо╣╝╛ динами╖е▒кого
п░ог░амми░овани┐.
Наибол╝╕а┐ об╣а┐ подпо▒ледова▓ел╝но▒▓╝
319
С▓░оение наибол╝╕ей об╣ей подпо▒ледова▓ел╝но▒▓и
Е▒ли ░е╕а▓╝ зада╖│ о НОП └в лоб┴, пе░еби░а┐ в▒е подпо▒ледова▓ел╝но▒▓и по▒ледова▓ел╝но▒▓и X и п░ове░┐┐ дл┐ каждой из
ни╡, не б│де▓ ли она подпо▒ледова▓ел╝но▒▓╝╛ по▒ледова▓ел╝но▒▓и
Y , ▓о алго░и▓м б│де▓ ░або▓а▓╝ ╜к▒понен╢иал╝ное в░ем┐, по▒кол╝к│ по▒ледова▓ел╝но▒▓╝ длин╗ m имее▓ 2m подпо▒ледова▓ел╝но▒▓ей
(▒▓ол╝ко же, ▒кол╝ко подмноже▒▓в │ множе▒▓ва f1; 2; : : :; mg).
Однако зада╖а о НОП обладае▓ ▒вой▒▓вом оп▓имал╝но▒▓и дл┐
подзада╖, как показ╗вае▓ ▓ео░ема 16.1 (▒м. ниже). Под╡од┐╣ее
множе▒▓во подзада╖ | множе▒▓во па░ п░е┤ик▒ов дв│╡ данн╗╡
по▒ледова▓ел╝но▒▓ей. П│▒▓╝ X = hx1; x2; : : :; xmi | неко▓о░а┐ по▒ледова▓ел╝но▒▓╝. Ее п░е┤ик▒ (prex) длин╗ i | ╜▓о по▒ледова▓ел╝но▒▓╝ Xi = hx1 ; x2; : : :; xii (п░и i о▓ 0 до m). Нап░име░, е▒ли
X = hA; B; C; B; D; A; B i, ▓о X4 = hA; B; C; B i, а X0 | п│▒▓а┐ по▒ледова▓ел╝но▒▓╝.
Тео░ема 16.1 (о ▒▓░оении НОП). П│▒▓╝ Z = hz1; z2; : : :; zk i |
одна из наибол╝╕и╡ об╣и╡ подпо▒ледова▓ел╝но▒▓ей дл┐
X = hx1; x2; : : :; xmi и Y = hy1; y2; : : :; yni. Тогда:
1. е▒ли xm = yn , ▓о zk = xm = yn и Zk;1 ┐вл┐е▓▒┐ НОП дл┐ Xm;1
и Yn;1 ;
2. е▒ли xm 6= yn и zk 6= xm , ▓о Z ┐вл┐е▓▒┐ НОП дл┐ Xm;1 и Y ;
3. е▒ли xm 6= yn и zk 6= yn , ▓о Z ┐вл┐е▓▒┐ НОП дл┐ Xm и Yn;1 .
Доказа▓ел╝▒▓во. (1) Е▒ли zk 6= xm , ▓о м╗ можем допи▒а▓╝ xm =
yn в коне╢ по▒ледова▓ел╝но▒▓и Z и пол│╖и▓╝ об╣│╛ подпо▒ледова▓ел╝но▒▓╝ длин╗ k + 1, ╖▓о п░о▓иво░е╖и▓ │▒лови╛. С▓ало б╗▓╝,
zk = xm = yn . Е▒ли │ по▒ледова▓ел╝но▒▓ей Xm;1 и Yn;1 е▒▓╝ более
длинна┐ (╖ем Zk;1 ) об╣а┐ подпо▒ледова▓ел╝но▒▓╝, ▓о м╗ можем
допи▒а▓╝ к ней xm = yn и пол│╖и▓╝ об╣│╛ подпо▒ледова▓ел╝но▒▓╝
дл┐ X и Y , более длинн│╛, ╖ем Z | п░о▓иво░е╖ие.
(2) Кол╝ ▒ко░о zk 6= xm , по▒ледова▓ел╝но▒▓╝ Z ┐вл┐е▓▒┐ об╣ей
подпо▒ледова▓ел╝но▒▓╝╛ дл┐ Xm;1 и Y . Так как Z | НОП дл┐ X
и Y , ▓о она ▓ем более ┐вл┐е▓▒┐ НОП дл┐ Xm;1 и Y .
(3) Аналоги╖но (2).
М╗ видим, ╖▓о НОП дв│╡ по▒ледова▓ел╝но▒▓ей ▒оде░жи▓ в ▒ебе
наибол╝╕│╛ об╣│╛ подпо▒ледова▓ел╝но▒▓╝ и╡ п░е┤ик▒ов. С▓ало
б╗▓╝, зада╖а о НОП обладае▓ ▒вой▒▓вом оп▓имал╝но▒▓и дл┐ подзада╖. Сей╖а▒ м╗ │бедим▒┐, ╖▓о пе░ек░╗▓ие подзада╖ ▓акже имее▓
ме▒▓о.
Рек│░░ен▓на┐ ┤о░м│ла
Тео░ема 16.1 показ╗вае▓, ╖▓о на╡ождение НОП по▒ледова▓ел╝но▒▓ей X = hx1; x2; : : :; xm i и Y = hy1; y2 ; : : :; yn i ▒води▓▒┐ к ░е╕е-
320
Глава 16 Динами╖е▒кое п░ог░амми░ование
ни╛ либо одной, либо дв│╡ подзада╖. Е▒ли xm = yn , ▓о до▒▓а▓о╖но
най▓и НОП по▒ледова▓ел╝но▒▓ей Xm;1 и Yn;1 и допи▒а▓╝ к ней в
кон╢е xm = yn . Е▒ли же xm 6= yn , ▓о надо ░е╕и▓╝ две подзада╖и:
най▓и НОП дл┐ Xm;1 и Y , а за▓ем най▓и НОП дл┐ X и Yn;1 . Более
длинна┐ из ни╡ и б│де▓ ▒л│жи▓╝ НОП дл┐ X и Y .
Тепе░╝ ▒░аз│ видно, ╖▓о возникае▓ пе░ек░╗▓ие подзада╖. Дей▒▓ви▓ел╝но, ╖▓об╗ най▓и НОП X и Y , нам може▓ понадоби▓╝▒┐
най▓и НОП Xm;1 и Y , а ▓акже НОП X и Yn;1 ; кажда┐ из ╜▓и╡ зада╖ ▒оде░жи▓ подзада╖│ на╡ождени┐ НОП дл┐ Xm;1 и Yn;1 . Аналоги╖н╗е пе░ек░╗▓и┐ б│д│▓ в▒▓░е╖а▓╝▒┐ и далее.
Как и в зада╖е пе░емножени┐ по▒ледова▓ел╝но▒▓и ма▓░и╢, м╗
на╖нем ▒ ░ек│░░ен▓ного ▒оо▓но╕ени┐ дл┐ ▒▓оимо▒▓и оп▓имал╝ного ░е╕ени┐. П│▒▓╝ c[i; j ] обозна╖ае▓ длин│ НОП дл┐ по▒ледова▓ел╝но▒▓ей Xi и Yj . Е▒ли i или j ░авно н│л╛, ▓о одна из дв│╡ по▒ледова▓ел╝но▒▓ей п│▒▓а, ▓ак ╖▓о c[i; j ] = 0. Сказанное в╗╕е можно
запи▒а▓╝ ▓ак:
8
>
е▒ли i = 0 или j = 0,
< 0
c[i; j ] = > c[i ; 1; j ; 1] + 1
е▒ли i; j > 0 и xi = yj ,
:
max(c[i; j ; 1]; c[i ; 1; j ]); е▒ли i; j > 0 и xi 6= yj .
(16.5)
В╗╖и▒ление длин╗ НОП
И▒╡од┐ из ▒оо▓но╕ени┐ (16.5), легко напи▒а▓╝ ░ек│░▒ивн╗й алго░и▓м, ░або▓а╛╣ий ╜к▒понен╢иал╝ное в░ем┐ и в╗╖и▒л┐╛╣ий длин│
НОП дв│╡ данн╗╡ по▒ледова▓ел╝но▒▓ей. Но по▒кол╝к│ ░азли╖н╗╡
подзада╖ в▒его (mn), л│╖╕е во▒пол╝зова▓╝▒┐ динами╖е▒ким п░ог░амми░ованием.
И▒╡одн╗ми данн╗ми дл┐ алго░и▓ма LCS-Length ▒л│жа▓ по▒ледова▓ел╝но▒▓и X = hx1; x2; : : :; xmi и Y = hy1; y2 ; : : :; yn i. Чи▒ла
c[i; j ] запи▒╗ва╛▓▒┐ в ▓абли╢│ c[0 : :m; 0 : :n] в ▓аком по░┐дке: ▒на╖ала заполн┐е▓▒┐ ▒лева нап░аво пе░ва┐ ▒▓░ока, за▓ем в▓о░а┐, и ▓. д.
К░оме ▓ого, алго░и▓м запоминае▓ в ▓абли╢е b[1 : :m; 1 : :n] └п░ои▒╡ождение┴ c[i; j ]: в кле▓к│ b[i; j ] зано▒и▓▒┐ ▒▓░елка, │каз╗ва╛╣а┐ на
кле▓к│ ▒ коо░дина▓ами (i ; 1; j ; 1), (i ; 1; j ) или (i; j ; 1), в зави▒имо▒▓и о▓ ▓ого, ░авно ли c[i; j ] ╖и▒л│ c[i ; 1; j ; 1] + 1, c[i ; 1; j ] или
c[i; j ; 1] (▒м. (16.5)). Рез│л╝▓а▓ами ░або▓╗ алго░и▓ма ┐вл┐╛▓▒┐
▓абли╢╗ c и b.
Наибол╝╕а┐ об╣а┐ подпо▒ледова▓ел╝но▒▓╝
Ри▒. 16.3
321
Табли╢╗ c и b, ▒озданн╗е алго░и▓мом LCS-Length п░и X =
hA; B; C; B; D; A;B i и Y = hB; D;C; A; B; Ai. В кле▓ке ▒ коо░дина▓ами (i; j )
запи▒ан╗ ╖и▒ло c[i; j ] и ▒▓░елка b[i; j ]. Чи▒ло 4 в п░авой нижней кле▓ке е▒▓╝
длина НОП. П░и i; j > 0 зна╖ение c[i; j ] оп░едел┐е▓▒┐ ▓ем, ░авн╗ ли xi и yj , и
в╗╖и▒ленн╗ми ░анее зна╖ени┐ми c[i ; 1; j ], c[i;j ; 1] и c[i ; 1; j ; 1]. П│▓╝ по
▒▓░елкам, вед│╣ий из c[7; 6], за╕▓░и╡ован. Кажда┐ ко▒а┐ ▒▓░елка на ╜▓ом п│▓и
▒оо▓ве▓▒▓в│е▓ ╜лемен▓│ НОП (╜▓и ╜лемен▓╗ в╗делен╗).
LCS-Length(X; Y )
1 m length[X ]
2 n length[Y ]
3 for i 1 to m
4
do c[i; 0] 0
5 for j 0 to n
6
do c[0; j ] 0
7 for i 1 to m
8
do for j 1 to n
9
do if xi = yj
10
then c[i; j ] c[i ; 1; j ; 1] + 1
11
b[i; j ] └-┴
12
else if c[i ; 1; j ] > c[i; j ; 1]
13
then c[i; j ] c[i ; 1; j ]
14
b[i; j ] └"┴
15
else c[i; j ] c[i; j ; 1]
16
b[i; j ] └ ┴
17 return c, b
На ░и▒. 16.3 показана ░або▓а LCS-Length дл┐ X =
hA; B; C; B; D; A; Bi и Y = hB; D; C; A; B; Ai.
Алго░и▓м LCS-Length ▓░еб│е▓ в░емени O(mn): на кажд│╛
кле▓к│ ▓░еб│е▓▒┐ O(1) ╕агов.
322
Глава 16 Динами╖е▒кое п░ог░амми░ование
По▒▓░оение НОП
Табли╢а b, ▒озданна┐ п░о╢ед│░ой LCS-Length, позвол┐е▓ б╗▒▓░о най▓и НОП по▒ледова▓ел╝но▒▓ей X = hx1; x2; : : :; xmi и
Y = hy1; y2; : : :; yni. Дл┐ ╜▓ого надо п░ой▓и по п│▓и, │казанном│ ▒▓░елками, на╖ина┐ ▒ b[m; n]. П░ойденна┐ ▒▓░елка - в кле▓ке (i; j ) озна╖ае▓, ╖▓о xi = yj в╡оди▓ в наибол╝╕│╛ об╣│╛
подпо▒ледова▓ел╝но▒▓╝. Во▓ как ╜▓о ░еализовано в ░ек│░▒ивной
п░о╢ед│░е Print-LCS (НОП дл┐ X и Y пе╖а▓ае▓▒┐ п░и в╗зове
Print-LCS(b; X; length[X ]; length[Y ])):
Print-LCS(b; X; i; j )
1 if i = 0 или j = 0
2 then return
3 if b[i; j ] = └-┴
4 then Print-LCS(b; X; i ; 1; j ; 1)
5
напе╖а▓а▓╝ xi
6 elseif b[i; j ] = └"┴
7 then Print-LCS(b; X; i ; 1; j )
8 else Print-LCS(b; X; i; j ; 1)
Б│д│╖и п░имененной к ▓абли╢е ░и▒. 16.3, ╜▓а п░о╢ед│░а напе╖а▓ае▓ BCBA. В░ем┐ ░або▓╗ п░о╢ед│░╗ е▒▓╝ O(m + n), по▒кол╝к│ на
каждом ╕аге ╡о▓┐ б╗ одно из ╖и▒ел m и n │мен╝╕ае▓▒┐.
Ул│╖╕ение алго░и▓ма
По▒ле ▓ого, как алго░и▓м ░аз░або▓ан, не░едко │дае▓▒┐ ▒дела▓╝
его более ╜кономн╗м. В на╕ем п░име░е можно обой▓и▒╝ без ▓абли╢╗ b. В ▒амом деле, каждое из ╖и▒ел c[i; j ] зави▒и▓ о▓ c[i ; 1; j ],
c[i; j ; 1] и c[i ; 1; j ; 1]. Зна┐ c[i; j ], м╗ можем за в░ем┐ O(1) в╗┐▒ни▓╝, кака┐ из ╜▓и╡ ▓░е╡ запи▒ей и▒пол╝зовала▒╝. Тем ▒ам╗м можно най▓и НОП за в░ем┐ O(m + n) ▒ помо╣╝╛ одной ▓ол╝ко ▓абли╢╗ c (в │п░ажнении 16.3-2 м╗ поп░о▒им ва▒ ╜▓о ▒дела▓╝). П░и ╜▓ом
м╗ ╜кономим (mn) пам┐▓и. (Вп░о╖ем, а▒имп▓о▓ика не мен┐е▓▒┐:
об║ем ▓абли╢╗ c е▒▓╝ ▓акже (mn).)
Е▒ли на▒ ин▓е░е▒│е▓ ▓ол╝ко длина наибол╝╕ей об╣ей подпо▒ледова▓ел╝но▒▓и, ▓о ▒▓ол╝ко пам┐▓и не н│жно: в╗╖и▒ление c[i; j ] за▓░агивае▓ ▓ол╝ко две ▒▓░оки ▒ номе░ами i и i ; 1 (╜▓о не п░едел
╜кономии: можно обой▓и▒╝ пам┐▓╝╛ на одн│ ▒▓░ок│ ▓абли╢╗ c пл╛▒
е╣е ╖│▓╝-╖│▓╝, ▒м. │п░ажнение 16.3-4). П░и ╜▓ом, однако, ▒ам│ подпо▒ледова▓ел╝но▒▓╝ най▓и (за в░ем┐ O(m + n)) не │дае▓▒┐.
Оп▓имал╝на┐ ▓░ианг│л┐╢и┐ много│гол╝ника
323
Уп░ажнени┐
16.3-1 Найди▓е НОП по▒ледова▓ел╝но▒▓ей h1; 0; 0; 1; 0; 1; 0; 1i и
h0; 1; 0; 1; 1; 0; 1; 1; 0i.
16.3-2 Раз░або▓ай▓е алго░и▓м, ▒▓░о┐╣ий НОП дл┐ X =
hx1; x2; : : :; xmi и Y = hy1; y2; : : :; yni за в░ем┐ O(m + n), и▒╡од┐ ▓ол╝ко из ▓абли╢╗ c.
16.3-3 Раз░або▓ай▓е ░ек│░▒ивн╗й ва░иан▓ алго░и▓ма LCSLength ▒ запоминанием о▓ве▓ов, ▓░еб│╛╣ий в░емени O(mn).
16.3-4 Покажи▓е, как можно в╗╖и▒ли▓╝ длин│ НОП, и▒пол╝з│┐
пам┐▓╝ ░азме░а 2 min(m; n) + O(1) и ╡░ан┐ ли╕╝ ╖а▒▓╝ ▓абли╢╗ c.
А как ╜▓о ▒дела▓╝, и▒пол╝з│┐ пам┐▓╝ min(m; n) + O(1)?
16.3-5 Раз░або▓ай▓е алго░и▓м, на╡од┐╣ий наибол╝╕│╛ воз░а▒▓а╛╣│╛ подпо▒ледова▓ел╝но▒▓╝ данной по▒ледова▓ел╝но▒▓и
из n ╖и▒ел и ░або▓а╛╣ий за в░ем┐ O(n2 ).
16.3-6? Раз░або▓ай▓е алго░и▓м, ░е╕а╛╣ий п░ед╗д│╣│╛ зада╖│
за в░ем┐ O(n log n). (Указание. Х░аним дл┐ каждого i наимен╝╕ий из по▒ледни╡ ╜лемен▓ов воз░а▒▓а╛╣и╡ подпо▒ледова▓ел╝но▒▓ей длин╗ i. Как мен┐╛▓▒┐ ╜▓и ╖и▒ла п░и добавлении нового ╜лемен▓а?)
16.4. Оп▓имал╝на┐ ▓░ианг│л┐╢и┐ много│гол╝ника
Не▒мо▓░┐ на ▒во╛ геоме▓░и╖е▒к│╛ ┤о░м│ли░овк│, ╜▓а зада╖а
о╖ен╝ близка к зада╖е о пе░емножении ма▓░и╢.
Много│гол╝ник (polygon) | ╜▓о замкн│▓а┐ к░ива┐ на пло▒ко▒▓и,
▒о▒▓авленна┐ из о▓░езков, наз╗ваем╗╡ ▒▓о░онами (sides) много│гол╝ника. То╖ка, в ко▓о░ой ▒╡од┐▓▒┐ две ▒о▒едние ▒▓о░он╗, наз╗вае▓▒┐ ве░╕иной (vertex). Не▒амопе░е▒ека╛╣ий▒┐ много│гол╝ник
(▓ол╝ко ▓акие м╗ и б│дем, как п░авило, ░а▒▒ма▓░ива▓╝) наз╗вае▓▒┐ п░о▒▓╗м (simple). Множе▒▓во ▓о╖ек пло▒ко▒▓и, лежа╣и╡ вн│▓░и п░о▒▓ого много│гол╝ника, наз╗вае▓▒┐ вн│▓░енно▒▓╝╛ (interior) много│гол╝ника, об║единение его ▒▓о░он наз╗вае▓▒┐ его г░ани╢ей (boundary), а множе▒▓во в▒е╡ о▒▓ал╝н╗╡ ▓о╖ек пло▒ко▒▓и
наз╗вае▓▒┐ его вне╕но▒▓╝╛ (exterior). П░о▒▓ой много│гол╝ник наз╗вае▓▒┐ в╗п│кл╗м (convex), е▒ли дл┐ л╛б╗╡ дв│╡ ▓о╖ек, лежа╣и╡
вн│▓░и или на г░ани╢е много│гол╝ника, ▒оедин┐╛╣ий и╡ о▓░езок
╢еликом лежи▓ вн│▓░и или на г░ани╢е много│гол╝ника.
В╗п│кл╗й много│гол╝ник можно зада▓╝, пе░е╖и▒лив его ве░╕ин╗ п░о▓ив ╖а▒овой ▒▓░елки: много│гол╝ник P = hv0 ; v1; : : :; vn;1 i
324
Глава 16 Динами╖е▒кое п░ог░амми░ование
Две ▓░ианг│л┐╢ии в╗п│клого ▒еми│гол╝ника. Кажда┐ дели▓ ▒еми│гол╝ник на 7 ; 2 = 5 ▓░е│гол╝ников ▒ помо╣╝╛ 7 ; 3 = 4 диагоналей.
Ри▒. 16.4
имее▓ n ▒▓о░он v0 v1 , v1 v2 ; : : :; vn;1vn . Зде▒╝ vn | ▓о же ▒амое, ╖▓о
v0 (│добно н│ме░ова▓╝ ве░╕ин╗ n-│гол╝ника в╗╖е▓ами по мод│л╛ n).
Е▒ли vi и vj | две ве░╕ин╗, не ┐вл┐╛╣ие▒┐ ▒о▒едними, о▓░езок vi vj наз╗вае▓▒┐ диагонал╝╛ (chord) много│гол╝ника. Диагонал╝ vi vj ░азбивае▓ много│гол╝ник на два: hvi ; vi+1; : : :; vj i и
hvj ; vj+1; : : :; vii. Т░ианг│л┐╢и┐ (triangulation) много│гол╝ника |
╜▓о набо░ диагоналей, ░аз░еза╛╣и╡ много│гол╝ник на ▓░е│гол╝ники; ▒▓о░онами ╜▓и╡ ▓░е│гол╝ников ┐вл┐╛▓▒┐ ▒▓о░он╗ и▒╡одного
много│гол╝ника и диагонали ▓░ианг│л┐╢ии.
На ░и▒. 16.4 изоб░ажен╗ две ▓░ианг│л┐╢ии ▒еми│гол╝ника. (Т░ианг│л┐╢и╛ можно ▓акже оп░едели▓╝ как мак▒имал╝ное множе▒▓во
диагоналей, не пе░е▒ека╛╣и╡ д░│г д░│га.)
Во в▒е╡ ▓