Сбалансированные поисковые деревья

Содержание

Слайд 2

ФПМИ БГУ Изобретателем красно-чёрного дерева считают немецкого учёного:

ФПМИ БГУ

Изобретателем красно-чёрного дерева считают немецкого учёного:

Слайд 3

ФПМИ БГУ В 1978 году в статье Л. Гибаса и Р.

ФПМИ БГУ

В 1978 году в статье  Л. Гибаса и Р. Седжвика 
структура данных

получила название «красно-чёрное дерево»:

по словам Л. Гибаса, они использовали ручки двух цветов;

по словам Р. Седжвика, красный и черный цвет лучше всех смотрелись на лазерном принтере Xerox.

Слайд 4

ФПМИ БГУ Красно-чёрное дерево является примером сбалансированного поискового дерева специальные операции

ФПМИ БГУ

Красно-чёрное дерево
является примером сбалансированного поискового дерева
специальные операции балансировки гарантируют,

что высота красно-чёрного дерева не превзойдёт O(log n)
при этом процедуры балансировки (перекрашивания вершин, повороты) также ограничены этой величиной
Слайд 5

ФПМИ БГУ 13 8 19 5 15 20 11 9 7

ФПМИ БГУ

13

8

19

5

15

20

11

9

7

12

2

17

14

4

10

3

1

1

1

1

1

1

1

1

1

1

6

18

16

1

1

1

1

1

1

1

1

1

1

1

1

каждая вершина являетcя либо красной, либо чёрной;
каждый лист – чёрный;
у

красной вершины оба сына – чёрные (нет двух подряд идущих красных вершин);
любой путь из корня в листья содержит одинаковое коли-чество чёрных вершин;
корень – чёрный.
(это требование не обязательно, так как корень всегда можно перекрасить в чёрный цвет и это не нарушит ни одно из RB-свойств).

Если к каждой вершине, которая не имеет сыновей, добавить фиктивный чёрный лист, то мы получим, что каждая внутренняя вершина дерева содержит ключевое значения, а все листья – фиктивные.

Красно-чёрное дерево – это бинарное поисковое дерево,
для которого выполняются RB-свойства:

Слайд 6

ФПМИ БГУ Для каждой вершины v дерева определим её «чёрную высоту»

ФПМИ БГУ

Для каждой вершины v дерева определим её «чёрную высоту» bh(v)

- количество чёрных вершин на пути из этой вершины в один из листьев.
в силу свойств красно-чёрных деревьев любой из этих путей содержит одинаковое число чёрных вершин
Слайд 7

ФПМИ БГУ Используя метод математической индукции (от корня к листьям) можно

ФПМИ БГУ

Используя метод математической индукции (от корня к листьям) можно доказать,

что поддерево с корнем в вершине v содержит по меньшей мере 2bh(v)−1 внутреннюю вершину.
Теперь рассмотрим произвольный путь из корня дерева в лист. Так как у каждой красной вершины могут быть только чёрные сыновья, то количество чёрных вершин на этом пути не менее h/2. Следовательно, чёрная высота дерева не меньше, чем h/2 и по доказанному в пункте 1) свойству, справедливо неравенство:
Логарифимируя неравенство, получаем

Доказательство

Слайд 8

left (x) right(x) x f (x) gf (x) bf (x) отец

left (x)

right(x)

x

f (x)

gf (x)

bf (x)

отец

дядя

дед

левый сын

правый сын

ФПМИ БГУ

текущая
вершина

Обозначения

Слайд 9

ФПМИ БГУ Для поддержки свойств красно-чёрных деревьев выполняются вращения, каждое из

ФПМИ БГУ

Для поддержки свойств красно-чёрных деревьев выполняются вращения, каждое из которых

выполняется за O(1):

k1

k2

A

B

C

k1

k2

A

B

C

Right rotate (k1)

k2

k1

A

B

C

k2

k1

A

B

C

Left rotate (k1)

Слайд 10

Добавление вершины в дерево Осуществляем поиск места для добавляемой вершины x

Добавление вершины в дерево

Осуществляем поиск места для добавляемой вершины x по

аналогии с тем, как это делали в бинарном поисковом дереве.
Добавляем вершину x на место чёрного фиктивного листа и добавляем ей в качестве сыновей две фиктивные чёрные вершины.
Красим вершину x в красный цвет.
Если после добавления произошло нарушение RB-свойства (может нарушиться только одно: появились две подряд идущие красные вершины), то выполняем процедуру, восстанавливающую RB-свойства: перекраска вершин и, возможно, не более двух поворотов.

ФПМИ БГУ

Слайд 11

ФПМИ БГУ 1 2 7 Пример. Для последовательности чисел: 1, 2,

ФПМИ БГУ

1

2

7

Пример.
Для последовательности чисел: 1, 2, 7, 3, 8, 14,

9 построить RB-дерево.
Слайд 12

ФПМИ БГУ Процедуры, восстанавливающие RB-свойства: (1) перекраски (2) вращения

ФПМИ БГУ

Процедуры, восстанавливающие RB-свойства:
(1) перекраски
(2) вращения

Слайд 13

ФПМИ БГУ RB-свойства восстановлены случай 1 или 2 1-й случай: отец и дядя - красные

ФПМИ БГУ

RB-свойства
восстановлены

случай 1 или 2

1-й случай:
отец и дядя - красные

Слайд 14

ФПМИ БГУ bf(x) a) в) 2-й случай: отец – красный ,

ФПМИ БГУ

bf(x)

a)

в)

2-й случай:
отец – красный , дядя – чёрный

gf(x)

б)

г)

x

x

b

Слайд 15

ФПМИ БГУ bf(x) a) RB-свойство восстановлено 2-й случай: отец – красный , дядя – чёрный

ФПМИ БГУ

bf(x)

a)

RB-свойство
восстановлено

2-й случай:
отец – красный , дядя – чёрный

Слайд 16

ФПМИ БГУ RB-свойство восстановлено 2-й случай: отец – красный , дядя – чёрный б)

ФПМИ БГУ

RB-свойство
восстановлено

2-й случай:
отец – красный , дядя – чёрный
б)

Слайд 17

ФПМИ БГУ 2-й случай: отец – красный , дядя – чёрный

ФПМИ БГУ

2-й случай:
отец – красный , дядя – чёрный
в)

x

x

RB-свойство
восстановлено

2

а)
Слайд 18

ФПМИ БГУ RB-свойство восстановлено 2-й случай: красный , дядя – чёрный в) итог

ФПМИ БГУ

RB-свойство
восстановлено

2-й случай:
красный , дядя – чёрный
в) итог

Слайд 19

ФПМИ БГУ gf(x) 2-й случай: отец – красный , дядя –

ФПМИ БГУ

gf(x)

2-й случай:
отец – красный , дядя – чёрный
г)

RB-свойство
восстановлено

2

б)
Слайд 20

ФПМИ БГУ 2-й случай: отец – красный , дядя – чёрный г) итог

ФПМИ БГУ

2-й случай:
отец – красный , дядя – чёрный
г)

итог
Слайд 21

ФПМИ БГУ 7 Пример (продолжение). Для последовательности чисел: 1, 2, 7,

ФПМИ БГУ

7

Пример (продолжение). Для последовательности чисел: 1, 2, 7, 3, 8,

14, 9 построить RB-дерево.
Слайд 22

ФПМИ БГУ (продолжение)

ФПМИ БГУ

(продолжение)

Слайд 23

ФПМИ БГУ случай 2 г) RB-свойство восстановлено (продолжение) восстановление RB-свойства

ФПМИ БГУ

случай 2 г)

RB-свойство
восстановлено

(продолжение)

восстановление RB-свойства

Слайд 24

Добавление элемента. Оценки. ФПМИ БГУ поиск отца – O(log n) добавление

Добавление элемента. Оценки.

ФПМИ БГУ

поиск отца – O(log n)
добавление – O(1)
перекрашивания –

O(log n)
повороты (не более 2-х) – O(1)

Следовательно, время добавления элемента - O(log n).

Слайд 25

Удаление Удаляем вершину из дерева по аналогии с тем, как это

Удаление

Удаляем вершину из дерева по аналогии с тем, как это делали

в бинарном поисковом дереве.
Пусть y – фактически удалённая вершина (это лист или вершина, у которой только одно поддерево).
Если удалённая вершина y имела красный цвет, то все RB-свойства будут выполняться и операция удаления элемента завершена.
Если удалённая вершина y имела черный цвет, то любой путь, через неё проходивший, теперь содержит на одну чёрную вершину меньше. Нарушается RB-свойство, которое требует, чтобы любой путь из корня в листья содержал одинаковое количество чёрных вершин. Восстановим RB-свойство.

ФПМИ БГУ

Слайд 26

ФПМИ БГУ y – фактически удалённая вершина x – единственный ребёнок

ФПМИ БГУ

y – фактически удалённая вершина
x – единственный ребёнок вершины y

(если детей у вершины y не было, то x=NULL)
f(x)=f(y)
вершину, которая может быть окрашена, как в красный, так и в чёрный цвет, будем обозначать на рисунках r/b

Обозначения

Слайд 27

Если фактически удалённая вершина y имела черный цвет, то любой путь,

Если фактически удалённая вершина y имела черный цвет, то любой путь,

через неё проходивший, теперь содержит на одну чёрную вершину меньше.
Поступим следующим образом:
если вершина x - красная, то сделаем её чёрной, теперь все RB-свойства выполнены;
если x - чёрная, то, будем при подсчёте числа чёрных вершин на пути от корня к листьям считать её за две чёрные вершины;
однако дерево не предполагает такие «двойные чёрные вершины», поэтому нужно выполнить процедуру, которая превращает полученное дерево в настоящее красно-чёрное дерево

ФПМИ БГУ

x

Слайд 28

1-й случай x – чёрный и является левым сыном своего отца

1-й случай
x – чёрный и является левым сыном своего отца

(ситуация правого сына выполняется симметрично),
брат w – красный

«новый брат» w вершины x – чёрный
вершину x считаем «дважды чёрной»,
далее рассматриваются случаи в зависимости от того, какого цвета дети у вершины w (новый брат x)

a

Слайд 29

x – «дважды чёрный» и является левым сыном своего отца, w,

x – «дважды чёрный» и является левым сыном своего отца,
w,

left(w), right (w) – чёрные

2 случай (возможно повторение)

если вершина b была раньше красная, то она становится чёрной;
RB-свойства выполнены;

если вершина b была раньше чёрная, то она становится «дважды чёрной»;
продолжаем балансировку для вершины x=b

a

Слайд 30

x – «дважды чёрная» w, right (w) – чёрная left(w) - красная 3-й случай x=a завершение

x – «дважды чёрная»
w, right (w) – чёрная
left(w) - красная

3-й

случай

x=a

завершение

Слайд 31

LeftRotate(f(x)) r/b a r/b завершение a b c r/b RB –

LeftRotate(f(x))

r/b

a

r/b

завершение

a

b

c

r/b

RB – свойства выполнены

вершина d красится в тот же цвет,
который был

изначально у f(x) – вершины b

e

Слайд 32

RB -свойства выполнены 1-й случай (продолжение) если выполняется сведение к случаю

RB -свойства выполнены

1-й случай (продолжение) если выполняется сведение к случаю 2

и завершение
если у нового брата вершины x оба сына - чёрные

2-й случай

a

Слайд 33

Случаи 1, 3 и 4. Выполняются за время O(1) (выполняется самое

Случаи 1, 3 и 4. Выполняются за время O(1) (выполняется самое

большое 3 вращения).
Случай 2. При каждом выполнении этого случая цикл возможно продолжит свою работу. Одна итерация цикла выполняется за время O(1), но при каждом повторении указатель на вершину x перемещается вверх по дереву, никакие вращения при этом не происходят, поэтому количество повторений случая 2 ограничено высотой дерева h=O(log n).
Таким образом время на восстановление RB- свойства после выполнения операции удаления элемента - O(log n).

Удаление

Слайд 34

Удаление ФПМИ БГУ поиск удаляемой вершины – O(log n) непосредственное удаление

Удаление

ФПМИ БГУ

поиск удаляемой вершины – O(log n)
непосредственное удаление вершины – O(log

n)
все перекрашивания - O(log n)
повороты (будет выполнено не более 3-х) – O(1)

Следовательно, время удаления элемента - O(log n).

Слайд 35

Сравнение 2. Добавление элемента АВЛ поиск отца для добавляемой вершины –

Сравнение

2. Добавление элемента

АВЛ
поиск отца для добавляемой вершины – O(h)
непосредственное добавление вершины

–O(1)
поиск разбалансированной вершины - O(h)
повороты (будет выполнен 1 поворот) – O(1)

3. Удаление элемента

АВЛ
поиск удаляемой вершины – O(h)
непосредственное удаление –O(1)
поворот – O(1)
повторная балансировка (повороты) - O(h)

Красно-чёрное
поиск удаляемой вершины – O(h)
непосредственное удаление –O(1)
повороты (не более 3-х) - O(1)
перекрашивания - O(h)

Красно-чёрное
поиск отца для добавляемой вершины – O(h)
непосредственное добавление вершины –O(1)
перекрашивания - O(h)
повороты (будет выполнено не более 2-х) – O(1)

Слайд 36

http://nathanbelue.blogspot.com/2012/05/red-black-versus-avl.html Тесты показывают, что АВЛ-деревья быстрее красно-чёрных во всех операциях https://radius-server.livejournal.com/598.html

http://nathanbelue.blogspot.com/2012/05/red-black-versus-avl.html

Тесты показывают, что АВЛ-деревья быстрее красно-чёрных во всех операциях

https://radius-server.livejournal.com/598.html

Слайд 37

Структуры данных и алгоритмы: теория и практика: учеб. пособие / В.М.

Структуры данных и алгоритмы: теория и практика: учеб. пособие / В.М.

Котов, Е.П. Соболевская. Мн.: БГУ. 2004.− С.141−153.
Алгоритмы: построение и анализ / Т. Кормен [и др.] – М.: Вильямс, 2005. – C 336 −356.