Уявіть собі червоно-чорне дерево. Чи завжди є послідовність вставок та видалень, що створює її?


41

Припустимо наступне визначення червоно-чорного дерева:

  1. Це дерево бінарного пошуку.
  2. Кожен вузол забарвлений червоним або чорним кольором. Корінь чорний.
  3. Два вузли, з'єднані краєм, не можуть бути червоними одночасно.
  4. Тут має бути чітке визначення листа NIL, як на wiki. Лист НІЛ забарвлений у чорний колір.
  5. Шлях від кореня до будь-якого листа НІЛ містить однакову кількість чорних вузлів.


Питання

Припустимо , що ви впровадили insertі deleteоперації для червоно-чорного дерева. Тепер, якщо ви дали правильне червоно-чорне дерево, є завжди послідовність insertі deleteоперації , які будують його?


Мотивація

Це питання мотивоване цим питанням та дискусією з цього питання .

Особисто я вважаю , що якщо уявити дійсне червоно-чорне дерево , що складається тільки з чорних вузлів (що означає , що ви уявляєте ідеально збалансоване дерево), існує послідовність insertі deleteоперації , які будують його. Однак,

  1. Я не знаю, як точно це довести
  2. Мене також цікавить більш загальний випадок

Ваше запитання звучить трохи кругло ... будь-який набір операцій з вставки та видалення сконструює червоно-чорне дерево ... буквально що завгодно, оскільки червоно-чорний - це лише визначення. Чи обмежується ваше запитання виключно чорним деревом?
JOX

2
Ні, я думаю, ви неправильно зрозуміли. Звичайно, будь-який набір вставляє та видаляє будує якесь червоно-чорне дерево. Питання таке: чи будь-яке дерево, яке відповідає визначенню, може бути сконструйоване певною послідовністю вставлень та видалень? Якщо вам задано якесь дерево, чи можете ви відтворити послідовність вставлень та видалень?
alisianoi

2
@ all3fox Так, ви праві. Існує алгоритм, який використовує операцію insertта deleteпобудує дійсне червоно-чорне дерево, що складається лише з чорних вузлів . Він використовує вставки / делеции створити дерево висотою ч . По- перше, ми можемо створити абсолютно врівноважених червоно-чорного дерева в ширину першим способом , використовуючи 2 ч + 1 - 1 вставки, а потім з допомогою ч * 2 ч - 1(год+2)2год-1год2год+1-1год2год-1вставки та стільки ж видалень перефарбовують його у абсолютно чорне дерево. Хитрість тут , щоб рухатися вгору раз найнижчий червоний шар вгору по дереву , поки він не досягне кореня. год
Антон Трунов

1
@AntonTrunov спасибі, я це щось розумію. Як щодо випадку із загальним Червоно-Чорним деревом? Як ви думаєте, чи можна побудувати будь-який заданий червоно-чорне дерево з insertі deleteопераціями?
alisianoi

2
а) Відповідь буде залежати від точного виконання insertта delete; може бути кілька способів зробити ці операції. б) Оскільки дерева RB по суті є B-деревами порядку 4, можна шукати там натхнення. Деталі можуть виявитись складними, оскільки відображення від RB до B (та / або назад) не є унікальним.
Рафаель

Відповіді:


2

Операції вставки та видалення в червоно-чорному дереві включають в себе балансування, необхідне для підтримки властивостей червоно-чорного кольору.

Проблема з не схиленими до червоного дерева чорними деревами (ліворуч або праворуч) полягає в тому, що існує декілька способів відновити червоно-чорноту після основного видалення або вставки.
Перетворення дерева не вставкою чи видаленням, а збалансування та обертання, що відбувається згодом для збереження / відновлення червоної чорноти дерева.

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

Це було вирішено "нахиленими лівими червоними чорними деревами".
Є лише один спосіб балансування. Таким чином, будь-яке дане схилене червоне дерево може бути реконструйоване за допомогою вставок та видалень, тому що відновлення / обертання виконується певним детермінованим способом.

Це не означає, що лівоспрямовані дерева RB є кращими або ефективнішими, те, що вони отримують з одного боку, використовуючи детерміновані правила балансування, вони втрачають з іншого складніший балансуючий код.


(год+2)2год-1год2год+1-1год2год-1год разів нижчий червоний шар вгору до дерева, поки він не досягне кореня.

Я думаю, що повний алгоритм балансування на зразок Day-Stout-Warren був би більш ефективним.


1
Використовуючи операції insertта deleteз книги CLRS, ви можете побудувати дійсне дерево RB, що складається лише з чорних вузлів . Хитрість полягає в тому, щоб вставити більше вузлів, ніж потрібно, а потім видалити зайві. Алгоритм буде усунути червоні вузли.
Антон Трунов

@AntonTrunov, чи є у вас посилання на цей алгоритм, було б непогано включити його у відповідь. Я не можу знайти його за допомогою google-fu.
Йоган

1
На жаль, у мене немає посилання. Я спробував відповісти на запитання в той час і придумав алгоритм для окремого випадку всіх чорних дерев RB. Я якось описав це в цьому коментарі, але не надав доказів.
Антон Трунов

Що ви маєте на увазі під "Це було" вирішено "ліворукими червоними чорними деревами." Навіть червоне чорне дерево, що схиляється, має кілька способів зберігання одних і тих же предметів.
user239558
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.