Изменения

Перейти к: навигация, поиск

Двоичная куча

5 байт убрано, 21:55, 6 июня 2013
Построение кучи за O(N)
|proof=
Число вершин на высоте <tex>h</tex> в куче из <tex>n</tex> элементов не превосходит <tex dpi = "160"> \left \lceil \frac{n}{2^h} \right \rceil </tex>. Высота кучи не превосходит <tex> \log_{2} n </tex>. Обозначим за <tex> H </tex> высоту дерева, тогда время построения не превосходит <tex dpi = "160"> \sum_{h = 1}^H \limits\frac{n}{2^h} \cdot h = n \cdot {\sum_{h = 1}^H \limits}\frac{h}{2^h} </tex>
<tex dpi = "150160"> {\sum_{h = 1}^\infty \limits}\frac{h}{2^h} = 2 </tex> (известная сумма из матанализа)
Обозначим сумму ряда за <tex> S </tex>. Заметим что,
Откуда и получаем оценку <tex> O(N) </tex>
}}
Также можно обобщить на случай <tex> d-</tex> кучи <tex>(d- </tex> куча это куча в которой не 2 потомка, а <tex> d </tex> потомков). Все операции, которые делались над c бинарной кучей, допустимы и для <tex>d</tex> - кучи. Посчитаю время построения <tex> d</tex> - кучи. В этом случае время работы не превзойдет <tex dpi = "150160" > N \cdot d\ \cdot {\sum_{i = 1}^H \limits}\frac{i}{d^i} .</tex>
Здесь появился множитель <tex> d </tex> из-за того, что поиск минимума в sift_down происходит за <tex> d </tex>.
668
правок

Навигация