Чи не всі червоно-чорні дерева врівноважені?


30

Інтуїтивно "збалансовані дерева" повинні бути деревами, де ліві та праві піддерева у кожному вузлі повинні мати "приблизно однакову" кількість вузлів.

Звичайно, коли ми говоримо про те, що червоно-чорні дерева * (див. Визначення в кінці) є врівноваженими, ми фактично маємо на увазі, що вони збалансовані по висоті і в цьому сенсі вони врівноважені.

Припустимо, ми спробуємо формалізувати описану вище інтуїцію так:

Визначення: Двійкове дерево називається збалансованим, з , якщо для кожного вузла нерівністьμ0μ12N

μ|NL|+1|N|+11μ

утримує, і для кожного є якийсь вузол, для якого вищевказаний вислів не працює. - кількість вузлів у лівому під дереві та- кількість вузлів під деревом з як кореня (включаючи корінь).μ>μ|NL|N|N|N

Я вважаю, що в деякій літературі на цю тему це називають деревами , які мають вагу .

Можна показати, що якщо двійкове дерево з вузлами врівноважене (для постійної ), то висота дерева дорівнює , таким чином підтримуючи приємний пошук властивості.nμμ>0O(logn)

Отже, питання:

Чи є такі μ>0 такі, що кожне досить велике червоно-чорне дерево μ врівноважене?


Визначення використовуваних нами червоно-чорних дерев (від вступу до алгоритмів Кормена та ін):

Двійкове дерево пошуку, де кожен вузол забарвлений червоним або чорним кольором і

  • Корінь чорний
  • Усі вузли NULL чорні
  • Якщо вузол червоний, то обидва його діти чорніють.
  • Для кожного вузла всі шляхи від цього вузла до нащадкових NULL-вузлів мають однакову кількість чорних вузлів.

Примітка: ми не рахуємо NULL-вузлів у визначенні μ -балансованому вище. (Хоча я вважаю, що це не має значення)


@Aryabhata: що з унікальністю ( ) у вашій редакції? Мені добре, що -балансоване означає1μ>μ 113 -балансований. Я не думаю, що вам доведеться знаходититочнийμ,щоб довести висотуO(logn). Я щось пропускаю? 14 μO(logn)
jmad

Крім того, вам потрібно негативне твердження , щоб забезпечити контрприклад ланцюг з одного дерева для кожного . Будь-якого нескінченного ланцюга, який не зменшується в розмірі вузла, було б достатньо, чи не так? nN
Рафаель

@jmad: Без редагування, кожне дерево є тривіально 0 -балансованим, тому ми не маємо тривіальної відповіді на питання. Я хотів цього уникнути. μ0
Ар'ябхата

@Raphael: Я не розумію. Розмір вузла дерева - n . Ви говорите, що не має значення, яке дерево ми обираємо для R B n і що μ n0 ? Мені це не здається очевидним, і саме в цьому питання! nthnRBnμn0
Ар'ябхата

1
Більш рання версія цього питання стверджувала, що час виконання рекурсивного алгоритму на червоно-чорному дереві, яке виконує лінійний обсяг роботи на кожному кроці, не обов'язково є . Ця претензія була неправильною; Баланс висоти означає, що глибина n- червоного червоно-чорного дерева дорівнює O ( log n ) . Таким чином, якщо ви виконуєте роботу O ( n ) на кожному рівні дерева, загальна робота становить O ( n log n ) . O(nlogn)нО(журналн)О(н)О(нжурналн)
JeffE

Відповіді:


31

Претензія : Червоно-чорні дерева можуть бути як завгодно не- мк врівноважена.

Ідея підтвердження : заповніть праве піддерево якомога більше вузлів, а ліве - якомога менше вузлів для заданого числа к чорних вузлів на кожному шляху кореневого листя.

Доведення : Визначте послідовність Тк червоно-чорних дерев так, щоб Тк мав к чорних вузлів на кожному шляху від кореня до будь-якого (віртуального) аркуша. Визначте Тк=Б(Lк,Rк) з

  • Rк - повне дерево висотою2к-1 з першим, третім ... рівнем кольоровим кольором червоного кольору, інші - чорним, та
  • Lк повне дерево висотоюк-1 з усіма вузлами, пофарбованими в чорний колір.

Ясна річ, всі Тк це червоно-чорні дерева.

Наприклад, це Т1 , Т2 і Т3 відповідно:


T_1
[ джерело ]


T_2
[ джерело ]


T_3
[ джерело ]


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

Ліве піддерево Тк є повним і завжди має висоту к-1 і тому містить 2к-1 вузли. З іншого боку, праве піддерево є повним і має висоту 2к-1 і, таким чином, містить 22к-1 вузли. Тепер значення балансу мк для кореня дорівнює

2к2к+22к=11+2кк0

що доводить, що немає мк>0 за запитом.


14

Ні. Розгляньте червоно-чорне дерево із такою особливою структурою.

  • Ліве піддерево - це повне двійкове дерево з глибиною , у якому кожен вузол чорний.г
  • Праве піддерево - це повне бінарне дерево глибиною , у якому кожен вузол на непарній глибині червоний, а кожен вузол на парній глибині - чорний.2г

Неважко перевірити, що це дійсне червоно-чорне дерево. Але кількість вузлів у правому піддереві ( ) приблизно відповідає квадрату кількості вузлів у лівому піддереві ( 2 d + 1 - 1 ).22г+1-12г+1-1


+1: Дякую! Але кількість вузлів становить від . Чи може ми, можливо, їх "прокладати" достатньо, щоб отримати дерево заданого розміру n ? (Схоже, це треба зробити). 22г+1+2г+1-1н
Ар'ябхата

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

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