на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Поисковые деревья
Случайные двоичные деревья поиска
Поскольку основные операции с двоичными деревьями поиска требуют времени , где — высота дерева, важно знать, какова высота "типичного" дерева. Для этого принимают какие-то статистические предположения о распределении ключей и последовательности выполняемых операций. К сожалению, в общем случае ситуация трудна для анализа. Если определить случайное двоичное дерево из различных ключей как дерево, получающееся из пустого дерева добавлением этих ключей в случайном порядке, считая все ! перестановок равновероятными, то можно доказать, что средняя высота случайного двоичного дерева поиска, построенного по различным ключам, равна .
Красно-черные деревья
Мы видели, что основные операции с двоичным поисковым деревом высоты могут быть выполнены за действий. Деревья эффективны, если их высота мала, но если не принимать специальные меры при выполнении операций, малая высота не гарантируется, и в этом случае деревья не более эффективны, чем списки.
Для повышения эффективности операций используют различные приемы перестройки деревьев, чтобы высота дерева была величиной . Такие приемы называются балансировкой деревьев. При этом используются разные критерии качества балансировки. Одним из видов сбалансированных деревьев поиска являются так называемые красно-черные деревья, для которых предусмотрены операции балансировки, гарантирующие оценку высоты величиной .
Частным случаем такой балансировки является АВЛ-балансировка, при которой у каждого узла высота его левого поддерева отличается от высоты правого не более чем на единицу. Заметим, что наихудшими в некотором смысле АВЛ-деревьями являются деревья Фибоначчи , определяемые следующим образом: — пустое дерево, — дерево, состоящее из одного узла. При дерево состоит из корня с левым поддеревом и правым — . Нетрудно видеть, что при заданной величине дерево имеет наименьшее число узлов среди всех АВЛ-деревьев высоты .
Для удобства поисковые деревья будем расширять, вводя дополнительный фиктивный узел ( -узел) и считая его потомком каждого узла исходного дерева, у которого нет правого, левого или обоих потомков, его же считаем родителем корня.
Красно-черное дерево — это расширенное двоичное дерево поиска, вершины которого разделены на красные (red) и черные (black) так, что:
- Каждый узел либо красный, либо черный.
- Каждый лист ( -узел) — черный.
- Если узел красный, то оба его ребенка черные.
- Все пути, идущие вниз от корня к листьям, содержат одинаковое количество черных узлов.
Свойства 1-4 называют RB-свойствами. Узлы красно-черного дерева будем представлять записями вида
Комбинаторные свойства красно-черных деревьев
Для произвольного узла определим черную высоту как количество черных узлов на пути из в некоторый лист, не считая сам узел . По свойству 4 эта сумма не зависит от выбранного листа. Черной высотой дерева будем считать черную высоту его корня.
Пусть — количество внутренних узлов в поддереве с корнем ( -узлы не считаются).
Лемма 1. Для произвольного узла красно-черного дерева выполняется неравенство .
Доказательство. Если — лист, то и , следовательно, утверждение леммы выполнено. Далее, пусть для узлов и утверждение леммы справедливо, то есть
тогда
Предпоследнее неравенство справедливо в силу соотношения
Лемма 2. Красно-черное дерево с внутренними узлами -листья не считаются имеет высоту не больше .
Доказательство. Обозначим высоту дерева через . Согласно свойству 3, по меньшей мере половину всех вершин на пути от корня к листу, не считая корень, составляют черные вершины. Следовательно, черная высота дерева не меньше . Тогда и, переходя к логарифмам, получаем или . Лемма доказана.
Полученная оценка высоты красно-черных деревьев гарантирует выполнение операций , , , и с красно-черными деревьями за время . Сложнее обстоит дело с процедурами и проблема в том, что они могут испортить структуру красно-черного дерева, нарушив RB-свойства. Поэтому описанные процедуры придется модифицировать. Ниже увидим, как можно реализовать их за время с сохранением RB-свойств.