Изменения

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

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

Нет изменений в размере, 09:54, 6 июня 2013
Построение кучи за O(N)
|statement= Время работы этого алгоритма <tex> O(N) </tex>.
|proof=
Число вершин на высоте <tex>h</tex> в куче из n элементов не превосходит <tex dpi = "160"> \left [ \frac{n}{2^h} \right ] </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 = "150"> {\sum_{h = 1}^\infty \limits}\frac{h}{2^h} = 2 </tex> (известная сумма из матанализа)
Обозначим сумму ряда за <tex> S </tex>. Заметим что,
<tex dpi = "160"> \frac{n}{2^n} = \frac{1}{2} \cdot \frac{n - 1}{2 ^{n - 1}} + \frac{1}{2^n} </tex>
Получается <tex> S = \frac{1}{2} \cdot S + 1</tex> (так как <tex>n >0</tex>) Получаем, что сумма ряда равна 2.
Откуда и получаем оценку <tex> O(N) </tex>
668
правок

Навигация