Красное-чёрное дерево — различия между версиями

Материал из Public ATP Wiki
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
[[File:rbtee_example.png|thumb|top|right|Пример КЧД]]
 
[[File:rbtee_example.png|thumb|top|right|Пример КЧД]]
 
'''Красно-чёрное дерево'''(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:
 
'''Красно-чёрное дерево'''(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:
* Каждая вершина имеет цвет: красный или чёрный
+
# Каждая вершина имеет цвет: красный или чёрный
* Корень дерева - чёрный
+
# Корень дерева - чёрный
* У каждой нелистовой вершины ровно два ребёнка
+
# У каждой нелистовой вершины ровно два ребёнка
* Все листья чёрные и фиктивные
+
# Все листья чёрные и фиктивные
* У красной вершины оба ребёнка чёрные
+
# У красной вершины оба ребёнка чёрные
* Чёрная высота каждой вершины определена корректно
+
# Чёрная высота каждой вершины определена корректно
  
 
== Чёрная высота ==
 
== Чёрная высота ==
Строка 36: Строка 36:
 
Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции ''insert''.
 
Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции ''insert''.
  
[[File:rbtree_insert.png|thumb|upright=0.5|top|left|Сразу после insert]]
+
Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет.
  
Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет. Вставленный элемент - $z$, рассмотрим его "дядюшку" $y$ и разберём случаи, в которых после такой вставки могут нарушиться свойства нашего дерева.
+
=== Тривиальные случаи ===
 +
* $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
 +
* Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.
 +
 
 +
=== Случай 1 ===

Версия 16:25, 15 апреля 2020

Пример КЧД

Красно-чёрное дерево(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:

  1. Каждая вершина имеет цвет: красный или чёрный
  2. Корень дерева - чёрный
  3. У каждой нелистовой вершины ровно два ребёнка
  4. Все листья чёрные и фиктивные
  5. У красной вершины оба ребёнка чёрные
  6. Чёрная высота каждой вершины определена корректно

Чёрная высота

На пути от любой вершины красно-чёрного дерева до её потомка-листа одинаковое количество чёрных вершин.

Чёрная высота вершины $x$ (Обозначаем $bh(x)$) - количество чёрных вершин на пути от $x$ до любого её потомка-листа, не считая самого $x$.

Лемма 1
В поддереве вершины $x$ как минимум $2^{bh(x)} - 1$ вершин.
[развернуть]
Доказательство

Высота красно-чёрного дерева

Лемма 2
Если $T$ - красно-чёрное дерево, то $h(T) \leq log_2 (n + 1)$.
[развернуть]
Доказательство

Вставка

Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции insert.

Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет.

Тривиальные случаи

  • $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
  • Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.

Случай 1