Не все красно-черные деревья сбалансированы?


30

Интуитивно понятно, что «сбалансированные деревья» должны быть деревьями, где левое и правое поддеревья в каждом узле должны иметь «примерно одинаковое» количество узлов.

Конечно, когда мы говорим о том, что красно-черные деревья * (см. Определение в конце) сбалансированы, мы на самом деле имеем в виду, что они сбалансированы по высоте и в этом смысле они сбалансированы.

Предположим, мы пытаемся формализовать вышеуказанную интуицию следующим образом:

Определение: двоичное дерево называется μ сбалансированным, с 0μ12 , если для каждого узлаN, неравенство

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

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

Я полагаю, что они называются деревьями с сбалансированным весом в некоторых публикациях по этой теме.

Можно показать, что если бинарное дерево с n узлами сбалансировано по μ (для константы μ>0 ), то высота дерева равна O(logn) , таким образом сохраняя хорошие свойства поиска.

Итак, вопрос в следующем:

Есть ли такие μ>0 , что каждое достаточно большое красно-черное дерево имеет μ баланс?


Используемое нами определение красно-черных деревьев (из «Введение в алгоритмы» Кормена и др.):

Двоичное дерево поиска, где каждый узел окрашен в красный или черный цвет и

  • Корень черный
  • Все пустые узлы черные
  • Если узел красный, то оба его потомка черные.
  • Для каждого узла все пути от этого узла к дочерним узлам NULL имеют одинаковое количество черных узлов.

Примечание: мы не учитываем NULL-узлы в определении сбалансированного выше. (Хотя я считаю, что это не имеет значения, если мы делаем).μ


@Aryabhata: что с уникальностью ( ) в вашем редактировании? Я в порядке с тем, что 1μ>μ сбалансированный подразумевает113 сбалансированный. Я не думаю, что вам нужно найтиточное значениеµ,чтобы доказать, что высота равнаO(logn). Я что-то пропустил? 14 μO(logn)
Джмад

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

@jmad: Без редактировать каждое дерево тривиальное 0 уравновешена и поэтому мы имеем тривиальное нет ответа на этот вопрос. Я хотел избежать этого. μ0
Арьябхата

@ Рафаэль: я не понимаю. Размер узла дерева равен n . Вы говорите, что не имеет значения, какое дерево мы выбираем для R B n и что µ n0 ? Мне это не кажется очевидным, и вот в чем вопрос! nthnRBnμn0
Арьябхата

1
В более ранней версии этого вопроса утверждалось, что время выполнения рекурсивного алгоритма на красно-черном дереве, которое выполняет линейную работу на каждом шаге, не обязательно равно . Это требование было неверным; Баланс высоты подразумевает, что глубина красно-черного дерева с n- узлами равна O ( log n ) . Таким образом, если вы выполняете O ( n ) работу на каждом уровне дерева, общая работа составляет O ( n log n ) . O(nlogn)nO(logn)O(n)O(nlogn)
Джефф

Ответы:


31

Претензия : Красно-черные деревья могут быть сколь угодно не- μ уравновешена.

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

Доказательство : определите последовательность Tk красно-черных деревьев, чтобы у Tk было k черных узлов на каждом пути от корня до любого (виртуального) листа. Определить Tk=B(Lk,Rk) с

  • Rk - полное дерево высотой2k1 с первым, третьим, ... уровнем, окрашенным в красный цвет, остальные в черный цвет и
  • Lk - полное дерево высотыk1 все узлы которого окрашены в черный цвет.

Ясно, что все Tk являются красно-черными деревьями.

Например, это T1 , T2 и T3 соответственно:


Т_1
[ источник ]


T_2
[ источник ]


T_3
[ источник ]


Теперь давайте проверим визуальное впечатление огромной правой стороны по сравнению с левой. Я не буду считать виртуальные листья; они не влияют на результат.

Левое поддерево Tk является полным и всегда имеет высоту k1 и, следовательно, содержит 2k1 узлов. Правое поддерево, с другой стороны, полно и имеет высоту 2k1 и, следовательно, содержит 22k1 узлов. Теперь значение μ баланса для корня

2k2k+22k=11+2kk0

что доказывает отсутствие μ>0 в соответствии с запросом.


14

Нет. Рассмотрим красно-черное дерево со следующей особой структурой.

  • Левое поддерево - это полное двоичное дерево с глубиной , в котором каждый узел черный.d
  • Правое поддерево - это полное двоичное дерево с глубиной , в котором каждый узел на нечетной глубине имеет красный цвет, а каждый узел на четной глубине - черный.2d

Нетрудно убедиться, что это действительное красно-черное дерево. Но количество узлов в правом поддереве ( ) примерно равно квадрату количества узлов в левом поддереве ( 2 d + 1 - 1 ).22d+112d+11


+1: спасибо! Но число узлов составляет от . Можем ли мы «дополнить» их достаточно, чтобы получить дерево заданного размера n ? (Похоже, это должно быть выполнимо). 22d+1+2d+11n
Арьябхата

1
У вас уже есть контрпример для бесконечного числа , так зачем? Но я полагаю, что если вы захотите, вы можете добавить больше красных узлов в левое поддерево или удалить несколько красных узлов из правого поддерева. n
Джефф

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