Similar presentations:
Организация поиска. Красно - чёрное дерево
1. ОРГАНИЗАЦИЯ ПОИСКА
Красно-чёрное дерево (англ. red-black tree)13
8
19
5
11
3
2
1
1
4
1
1
9
7
6
1
1
1
1
12
10
1
1
1
1
20
15
14
1
1
17
1
16
1
1
1
1
18
1
1
1
©ДМА ФПМИ Соболевская Е.П., 2022 год
2.
Изобретателем красно-чёрногодерева считают немецкого учёного:
Рудольф Байер
Rudolf Bayer
Дата рождения
7 мая 1939
Страна
Германия
Научная сфера
информатика
Место работы
Мюнхенский технический университет
Известен как
изобретатель красно-чёрного
дерева, UB-дерева, B-дерева
ФПМИ БГУ
3.
В 1978 году в статье Л. Гибаса и Р. Седжвикаструктура данных получила название «красно-чёрное дерево»:
Леонидас Джон (Иоаннис) Гибас
греч . Λεωνίδας Γκίμπας
Национальност
ь
Греческий - Американский
Научная карьера
профессор компьютерных наук и электротехники
Пола Пиготта в Стэнфордском университете , где
он возглавляет группу геометрических вычислений
и является сотрудником лабораторий
компьютерной графики и искусственного
интеллекта
Ученик (докторант) Дональда Кнута
по словам Л. Гибаса, они использовали ручки двух
цветов;
Роберт Седжвик
Robert Sedgewick
Дата
рождения
20 декабря 1946 (74
года)
Страна
США
Научная
сфера
Информатика
Место
работы
Принстонский
университет
по словам Р. Седжвика, красный и черный цвет
лучше всех смотрелись на лазерном принтере Xerox.
ФПМИ БГУ
4.
Красно-чёрное деревоявляется примером бинарного поискового дерева;
специальные операции балансировки гарантируют,
что высота красно-чёрного дерева не превзойдёт
O(log n) ;
при
этом
процедуры
балансировки
(перекрашивания
вершин,
повороты)
также
ограничены этой величиной.
ФПМИ БГУ
5.
Красно-чёрное дерево – это бинарное поисковое дерево,для которого выполняются RB-свойства:
1) каждая вершина являетcя либо
красной, либо чёрной;
2) каждый лист – чёрный;
3) у красной вершины оба сына –
чёрные (нет двух подряд идущих
красных вершин);
4) любой путь из корня в листья
содержит одинаковое количество чёрных вершин;
5) корень – чёрный.
(это требование не обязательно, так как
корень всегда можно перекрасить в чёрный
цвет и это не нарушит ни одно из RB-свойств).
13
8
19
5
3
2
1
1
1
9
7
4
1
11
6
1
1
1
1
12
10
1
1
1
1
20
15
14
1
1
17
16
1
1
1
1
18
1
1
1
1
Если к каждой вершине, которая не имеет сыновей,
добавить фиктивный чёрный лист, то мы получим, что
каждая внутренняя вершина дерева содержит ключевое
значения, а все листья – фиктивные.
ФПМИ БГУ
6.
Для каждой вершины v дереваопределим
её
«чёрную
высоту» bh(v) - количество
чёрных вершин на пути из этой
вершины в один из листьев.
13
8
19
5
в силу свойств красно-чёрных
деревьев любой из этих путей
содержит одинаковое число
чёрных вершин
3
2
11
7
4
6
9
12
10
20
15
14
17
16
18
1
ФПМИ БГУ
7.
ТеоремаКрасно-чёрное дерево, содержащее n
внутренних вершин, имеет высоту не более
чем 2·log(n+1).
Доказательство
1) Используя метод математической индукции
(от корня к листьям) можно доказать, что
поддерево с корнем в вершине v содержит
по меньшей мере 2bh(v)−1 внутреннюю
вершину.
2) Теперь рассмотрим произвольный путь из
корня дерева в лист. Так как у каждой
красной вершины могут быть только чёрные
сыновья, то количество чёрных вершин на
этом пути не менее h/2. Следовательно,
чёрная высота дерева не меньше, чем h/2 и
по доказанному в пункте 1) свойству,
справедливо неравенство:
n 2
h
2
13
8
19
5
3
2
1
1
1
9
7
4
1
11
6
1
1
1
1
12
10
1
1
1
1
20
15
14
1
1
17
16
1
1
1
1
18
1
1
1
1
1
3) Логарифимируя неравенство, получаем
h 2 log n 1 .
ФПМИ БГУ
8.
Обозначениядед
gf (x)
отец
дядя
f (x)
текущая
вершина
left (x)
левый сын
bf (x)
x
right(x)
правый сын
ФПМИ БГУ
9.
Для поддержки свойств красно-чёрных деревьев выполняютсявращения, каждое из которых выполняется за O(1):
k1
k2
Left rotate (k1)
A
k2
B
C
A
B
k2
k1
C
k2
A
B
C
k1
Right rotate (k1)
A
k1
B
C
ФПМИ БГУ
10. Добавление вершины в дерево
1. Осуществляем поиск места для добавляемой вершины x поаналогии с тем, как это делали в бинарном поисковом дереве.
2. Добавляем вершину x на место чёрного фиктивного листа и
добавляем ей в качестве сыновей две фиктивные чёрные
вершины.
3. Красим вершину x в красный цвет.
4. Если после добавления произошло нарушение RB-свойства (может
нарушиться только одно: появились две подряд идущие красные
вершины), то выполняем процедуру, восстанавливающую RBсвойства: перекраска вершин и, возможно, не более двух
поворотов.
ФПМИ БГУ
11.
Пример.Для последовательности чисел: 1,
1
1
1
1
1
2
1
2
2
1
7
2, 7, 3, 8, 14, 9 построить RB-дерево.
1
2
появились две подряд идущие красные
вершины – нарушение RB- свойства
2
7
7
ФПМИ БГУ
12.
Процедуры, восстанавливающие RB-свойства:(1) перекраски
(2) вращения
ФПМИ БГУ
13.
1-й случай:отец и дядя - красные
x
b
gf(x) b
перекраска
f(x)
x
a
c
a
bf(x)
c
продолжаем
рекурсивно
восстановление
RB-свойства
d
d
x
gf(x)
b
bf(x) a
c
x
d
b
x
b
b
перекраска
f(x)
x
a
c
RB-свойства
восстановлены
случай 1 или 2
d
ФПМИ БГУ
14.
2-й случай:отец – красный , дядя – чёрный
gf(x)
gf(x)
b
b
f(x)
a)
bf(x)
a
c
б)
bf(x)
f(x)
а
x
c
d
d
gf(x)
gf(x)
b
в)
b
bf(x)
f(x)
c
a
x
d
x
г)
bf(x) a
f(x)
c
d
x
ФПМИ БГУ
15.
2-й случай:отец – красный , дядя – чёрный
a)
gf(x)
gf(x)
b
f(x)
a
x
d
a
b
перекраска
RightRotate(gf(x))
bf(x)
a
c
x
d
c
x
d
b
c
RB-свойство
восстановлено
ФПМИ БГУ
16.
2-й случай:отец – красный , дядя – чёрный
б)
gf(x)
gf(x)
перекраска
b
bf(x)
f(x)
а
a
c
d
c
LeftRotate(gf(x))
b
b
c
d
d
a
RB-свойство
восстановлено
ФПМИ БГУ
17.
2-й случай:отец – красный , дядя – чёрный
LeftRotate(f(x))
gf(x)
в)
gf(x)
b
c
a
x
gf(x)
b
bf(x)
f(x)
2 а)
bf(x)
f(x)
d
d
b
bf(x)
f(x)
c
d
x
a
c
a
gf(x)
b
bf(x)
f(x)
перекраска
d
x
a
d
c
RightRotate(gf(x))
a
RB-свойство
восстановлено
b
c
ФПМИ БГУ
18.
2-й случай:красный , дядя – чёрный
в) итог
d
b
c
a
x
d
a
b
c
RB-свойство
восстановлено
ФПМИ БГУ
19.
2-й случай:отец – красный , дядя – чёрный
г)
b gf(x)
bf(x) a
f(x)
c
b
RightRotate(f(x))
a
d
перекраска
d
a
c
b
a
b
2 б)
gf(x)
c
x
d
LeftRotate(gf(x))
d
b
с
d
c
RB-свойство
восстановлено
a
ФПМИ БГУ
20.
2-й случай:отец – красный , дядя – чёрный
г) итог
b
d
a
c
d
b
x
c
a
ФПМИ БГУ
21.
Пример (продолжение). Для последовательности чисел: 1, 2, 7, 3, 8, 14, 9 построить RB-дерево.1
1
Случай 2 б)
7
2
2
7
7
3
7
7
2
2
1
1
2
7
3
2
1
1
7
3
2
2
Случай 1
1
7
3
1
7
3
ФПМИ БГУ
22.
(продолжение)2
8
2
1
1
7
7
у вершины 8 отец - чёрный,
RB-cвойства выполнены
3
8
3
8
2
14
2
1
7
1
3
2
случай 1
1
7
у вершины 7 отец - чёрный,
RB-cвойства выполнены
7
8
3
3
8
8
14
14
14
ФПМИ БГУ
23.
(продолжение)2
9
восстановление RB-свойства
1
7
3
8
2
2
14
1
3
2
1
14
1
8
7
3
9
8
9
14
8
7
3
8
9
7
3
1
7
9
2
14
14
RB-свойство
восстановлено
9
случай 2 г)
ФПМИ БГУ
24. Добавление элемента. Оценки.
поиск отца – O(log n)
добавление – O(1)
перекрашивания – O(log n)
повороты (не более 2-х) – O(1)
Следовательно, время добавления элемента - O(log n).
ФПМИ БГУ
25.
Удаление1. Удаляем вершину из дерева по аналогии с тем, как это делали в
бинарном поисковом дереве.
2. Пусть y – фактически удалённая вершина (это лист или вершина, у
которой только одно поддерево).
3. Если удалённая вершина y имела красный цвет, то все RB-свойства
будут выполняться и операция удаления элемента завершена.
4. Если удалённая вершина y имела черный цвет, то любой путь,
через неё проходивший, теперь содержит на одну чёрную вершину
меньше. Нарушается RB-свойство, которое требует, чтобы любой
путь из корня в листья содержал одинаковое количество чёрных
вершин. Восстановим RB-свойство.
ФПМИ БГУ
26.
Обозначенияy – фактически удалённая вершина
x – единственный ребёнок вершины y (если детей у вершины y не
было, то x=NULL)
f(x)=f(y)
вершину, которая может быть окрашена, как в красный, так и в
чёрный цвет, будем обозначать на рисунках r/b
ФПМИ БГУ
27.
Если фактически удалённая вершина y имела черный цвет, то любой путь,через неё проходивший, теперь содержит на одну чёрную вершину меньше.
Поступим следующим образом:
• если вершина x - красная, то сделаем её чёрной, теперь все RB-свойства
выполнены;
• если x - чёрная, то, будем при подсчёте числа чёрных вершин на пути от
корня к листьям считать её за две чёрные вершины;
x
однако дерево не предполагает
такие «двойные чёрные
вершины», поэтому нужно выполнить процедуру, которая
превращает полученное дерево в настоящее красно-чёрное дерево
ФПМИ БГУ
28.
1-й случайx – чёрный и является
левым сыном своего отца
(ситуация правого сына
выполняется симметрично),
брат w – красный
случай 2 перекраска и завершение
случай 4 (перекраска, поворот, завершение)
случай 3
перекраска и поворот
случай 4 (перекраска, поворот, завершение)
f(x)
b
b
перекраска
x=a
d
f(x)
f(x)
LeftRotate(f(x))
b
d w=d
a
x=a
c
d w=d
a
e
x=a
a
c
e
w=c
c
e
1) «новый брат» w вершины x – чёрный
2) вершину x считаем «дважды
чёрной»,
далее рассматриваются случаи в
зависимости от того, какого цвета
дети у вершины w (новый брат x)
29.
x=b2 случай (возможно повторение)
x – «дважды чёрный» и является левым
сыном своего отца,
w, left(w), right (w) – чёрные
b
d w=d
а
продолжаем балансировку для
вершины x=b
e
c
r/b b
x=a
если вершина b была раньше
чёрная, то она становится
«дважды чёрной»;
d w=d
a
c
e
если вершина b была раньше
красная, то она становится
чёрной;
b
d w=d
а
снятие «лишней» черной
окраски
c
e
RB-свойства выполнены;
30.
3-й случайx – «дважды чёрная»
w, right (w) – чёрная
left(w) - красная
4-й случай
x – «дважды чёрная»
w, left (w) – чёрная
right(w) - красная
завершение
r/b
b
r/b
r/b
b
x=a
d w=d
a
x=a
d
a
c
w=d
RightRotate(w)
b
x=a
a
w=c
c
e
c
e
e
d
е
31.
4 случайx – «дважды чёрная»
w, left (w) – чёрная
right(w) - красная
r/b
x=a
завершение
r/b
b
r/b
d w=d
a
r/b
c
e
b
d
LeftRotate(f(x))
x=a
a
d
w=d
r/b
c
ee
вершина d красится в тот же цвет,
который был изначально у f(x) – вершины b
e
b
a
r/b
c
e
RB – свойства выполнены
32.
1-й случай (продолжение)если выполняется сведение к случаю 2 и завершение
если у нового брата вершины x оба сына - чёрные
f(x)
f(x)
b
b
d
LeftRotate(f(x))
f(x)
x=a
x=a
d w=d
a
d w=d
a
b
x=a
e
c
c
e
a
e
w=c
c
2-й случай
r/b
d
b
b
x=
a
а
d
w=d
а
c
d
w=d
b
e
e
c
e
а
c
RB свойства
выполнены
33.
УдалениеСлучаи 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)
повороты (будет выполнено не более 3-х) – O(1)
Следовательно, время удаления элемента - O(log n).
ФПМИ БГУ
35.
СравнениеВысота
Красно-чёрное
АВЛ
ℎ ≤ 2 ∙ log