Изменения

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

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

94 байта убрано, 23:40, 8 июня 2013
Построение кучи за O(N)
<tex dpi = "160"> \sum_{h = 1}^H \limits\frac{n}{d^h} \cdot d </tex> <tex dpi = "150"> \cdot h </tex> <tex dpi = "160"> = n \cdot d \cdot {\sum_{h = 1}^H \limits}\frac{h}{d^h}. </tex>
Здесь появился множитель <tex> d </tex> из-за того, что поиск минимума в sift_down происходит за <tex> d </tex>.
{{Лемма
|statement= <tex dpi = "160"> {\sum_{h = 1}^\infty \limits}\frac{h}{d^h} = \frac{d}{(d - 1)^2} . </tex>
|proof=
Обозначим за <tex> S</tex> сумму ряда. Заметим, что
<tex dpi = "160"> \frac{n}{d^n} = \frac{1}{d} \cdot \frac{n - 1}{d ^{n - 1}} + \frac{1}{d^n}. </tex>
<tex dpi = "160">{\sum_{n = 1}^\infty \limits}\frac{1}{d^n} - </tex> это сумма бесконечной убывающей геометрической прогрессии, ее сумма равна <tex dpi = "160">
\frac{\frac{1}{d}}{1 - \frac{1}{d}} = \frac{1}{d - 1}. </tex>
Получаем <tex> S </tex> <tex dpi = "160" >= \frac{1}{d}</tex> <tex>\cdot S</tex> <tex dpi = "160" > + \frac{1}{d - 1}. </tex> Откуда <tex> S</tex> <tex dpi = "160"> = \frac{d}{(d - 1)^2}. </tex>
}}
Здесь появился множитель <tex> d </tex> из-за того, что поиск минимума в sift_down происходит за <tex> d </tex>.
Посчитаем ряд <tex dpi = "160"> {\sum_{n = 1}^\infty \limits}\frac{n}{d^n}. </tex> Обозначим за <tex> S</tex> сумму ряда. Заметим, что
<tex dpi = "160"> \frac{n}{d^n} = \frac{1}{d} \cdot \frac{n - 1}{d ^{n - 1}} + \frac{1}{d^n}. </tex>
<tex dpi = "160">{\sum_{n = 1}^\infty \limits}\frac{1}{d^n} - </tex> это сумма бесконечной убывающей геометрической прогрессии, ее сумма равна <tex dpi = "160">
\frac{\frac{1}{d}}{1 - \frac{1}{d}} = \frac{1}{d - 1}. </tex>
Получаем <tex> S </tex> <tex dpi = "160" >= \frac{1}{d}</tex> <tex>\cdot S</tex> <tex dpi = "160" > + \frac{1}{d - 1}. </tex> Откуда <tex> S</tex> <tex dpi = "160"> = \frac{d}{(d - 1)^2}. </tex> 
Подставляя в формулу для суммы получаем <tex > N </tex> <tex dpi = "160">\cdot (\frac {d}{d - 1})^2 </tex> <tex> < 5 \cdot N </tex>
668
правок

Навигация