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


30

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

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

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

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

μ≤|NL|+1|N|+1≤1−μ

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

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

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

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

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


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

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

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

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


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

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

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

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

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

Ответы:


31

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

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

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

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

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

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


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


T_2
[ источник ]


T_3
[ источник ]


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

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

2k2k+22k=11+2k→k→∞0

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


14

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

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

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


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

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

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