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

Материал из 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) со следующими свойствами:
 +
 
# Каждая вершина имеет цвет: красный или чёрный
 
# Каждая вершина имеет цвет: красный или чёрный
 
# Корень дерева - чёрный
 
# Корень дерева - чёрный
Строка 7: Строка 8:
 
# У красной вершины оба ребёнка чёрные
 
# У красной вершины оба ребёнка чёрные
 
# Чёрная высота каждой вершины определена корректно
 
# Чёрная высота каждой вершины определена корректно
 +
 +
<br>
  
 
== Чёрная высота ==
 
== Чёрная высота ==
Строка 39: Строка 42:
  
 
=== Тривиальные случаи ===
 
=== Тривиальные случаи ===
 +
 
* $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
 
* $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
 
* Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.
 
* Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.
 +
 +
Теперь если $p$ родитель $x$ оказался красным, то его родитель $gp$ обязан быть чёрным. Посмотрим на "дядюшку" $x$ - $u$.
  
 
=== Случай 1 ===
 
=== Случай 1 ===
 +
 +
[[File:rbtee_insert_case1.png|thumb|top|right|Первый случай]]
 +
 +
$u$ - Красный.

Версия 16:35, 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$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.

Теперь если $p$ родитель $x$ оказался красным, то его родитель $gp$ обязан быть чёрным. Посмотрим на "дядюшку" $x$ - $u$.

Случай 1

Первый случай

$u$ - Красный.