Главная > Построение и анализ вычислительных алгоритмов
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
След.
Макеты страниц

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

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

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

2.4. ДЕРЕВЬЯ

Теперь введем очень важный вид ориентированных графов — деревья — и рассмотрим структуры данных, пригодные для их представления.

Определение. Ориентированный граф без циклов называется ориентированным ациклическим графом. (Ориентированное) дерево (иногда его называют корневым деревом) — это ориентированный ациклический граф, удовлетворяющий следующим условиям:

1) имеется в точности один узел, называемый корнем, в который не входит ни одно ребро,

2) в каждый узел, кроме корня, входит ровно одно ребро,

3) из корня к каждому узлу идет путь (который, как легко показать, единствен).

Ориентированный граф, состоящий из нескольких деревьев, называется лесом. Леса и деревья — столь часто встречающиеся частные случаи ориентированных ациклических графов, что для описания их свойств стоит ввести специальную терминологию.

Определение. Пусть граф, являющийся лесом. Если принадлежит то называется отцом узла сыном узла Если есть путь из то называется предком узла потомком узла Более того, если ъфхю, то называется подлинным предком узла подлинным потомком узла у. Узел без подлинных потомков называется листом. Узел и его потомки вместе образуют поддерево леса и узел называется корнем этого поддерева.

Рис. 2.7. Двоичное дерево и его представление.

Глубина узла в дереве — это длина пути из корня в Высота узла в дереве — это длина самого длинного пути из и в какой-нибудь лист. Высотой дерева называется высота его корня. Уровень узла в дереве равен разности высоты дерева и глубины узла Например, на рис. 2.7, а узел 3 имеет глубину 2, высоту и уровень 1.

Упорядоченным деревом называется дерево, в котором множество сыновей каждого узла упорядочено. При изображении упорядоченного дерева мы будем считать, что множество сыновей каждого узла упорядочено слева направо. Двоичным (бинарным) деревом называется такое упорядоченное дерево, что

1) каждый сын произвольного узла идентифицируется либо как левый сын, либо как правый сын,

2) каждый узел имеет не более одного левого сына и не более одного правого сына.

Поддерево корнем которого является левый сын узла (если такое существует), называется левым поддеревом узла Аналогично поддерево корнем которого является правый сын узла (если такое существует), называется правым поддеревом узла Все узлы в расположены левее всех узлов в

Двоичное дерево обычно представляют в виде двух массивов и Пусть узлы двоичного дерева занумерованы целыми числами от 1 до . В этом случае тогда и только тогда, когда узел с номером является левым сыном узла с номером Если у узла нет левого сына, то определяется аналогично.

Пример 2.3. Двоичное дерево и его представление изображены на рис. 2.7.

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

Полное двоичное дерево высоты часто представляют одним массивом. В позиции 1 этого массива находится корень. Левый сын узла в позиции I расположен в позиции а его правый сын — в позиции Отец узла, находящегося в позиции расположен в позиции

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

Рис. 2,8, Прохождение дерева: а — в прямом порядке; б - обратном; в — внутреннем.

Определение. Пусть дерево с корнем и сыновьями При это дерево состоит из единственного узла

Прохождение дерева в прямом порядке определяется следующей рекурсией:

1) посетить корень

2) посетить в прямом порядке поддеревья с корнями в указанной последовательности.

Прохождение дерева в обратном порядке определяется следующей рекурсией:

1) посетить в обратном порядке поддеревья с корнями в указанной последовательности,

2) посетить корень

Прохождение двоичного дерева во внутреннем порядке определяется следующей рекурсией:

1) посетить во внутреннем порядке левое поддерево корня (если оно существует),

2) посетить корень,

3) посетить во внутреннем порядке правое поддерево корня (если оно существует).

Пример 2.4. На рис. 2.8 изображено двоичное дерево, узлы которого пронумерованы в соответствии с прохождением его в прямом порядке (рис. 2.8,а), обратном и внутреннем (рис. 2.8,в).

Если при некотором прохождении дерева его узлам были присвоены какие-то номера, то на узлы удобно ссылаться по этим номерам. Так, будет обозначать узел, которому был присвоен номер

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

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

Номера узлов двоичного дерева, соответствующие внутреннему порядку, обладают тем свойством, что номера узлов в левом поддереве для меньше а в правом поддереве больше Таким образом, чтобы найти узел с номером надо сравнить с корнем Если то искомый узел найден. Если то надо повторить этот процесс для левого поддерева; если то повторить процесс для правого поддерева. В конце концов узел с номером будет найден. Такие свойства прохождений нам понадобятся в следующих главах.

Дадим теперь еще одно, последнее определение, касающееся деревьев.

Определение. Неориентированным деревом называется неориентированный ациклический связный (любые два узла соединены путем) граф. Корневое неориентированное дерево — это неориентированное дерево, в котором один узел выделен в качестве корня.

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

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