This commit is contained in:
krahets
2026-08-18 03:09:26 +08:00
parent 0375f25b66
commit fde23f369e
158 changed files with 312 additions and 282 deletions
+1 -1
View File
@@ -4969,7 +4969,7 @@
<h2 id="823">8.2.3 &nbsp; Анализ сложности<a class="headerlink" href="#823" title="Permanent link">&para;</a></h2>
<p>Теперь попробуем оценить временную сложность второго способа построения кучи.</p>
<ul>
<li>Пусть число узлов полного двоичного дерева равно <span class="arithmatex">\(n\)</span> , тогда число листовых узлов равно <span class="arithmatex">\((n + 1) / 2\)</span> , где <span class="arithmatex">\(/\)</span> означает целочисленное деление вниз. Следовательно, число узлов, которые нужно упорядочивать, равно <span class="arithmatex">\((n - 1) / 2\)</span> .</li>
<li>Пусть число узлов полного двоичного дерева равно <span class="arithmatex">\(n\)</span> , тогда число листовых узлов равно <span class="arithmatex">\((n + 1) / 2\)</span> , где <span class="arithmatex">\(/\)</span> означает целочисленное деление вниз. Следовательно, число узлов, которые нужно упорядочивать, равно <span class="arithmatex">\(n / 2\)</span> .</li>
<li>В процессе упорядочивания сверху вниз каждый узел в худшем случае может просеяться до листа, поэтому максимальное число итераций равно высоте двоичного дерева <span class="arithmatex">\(\log n\)</span> .</li>
</ul>
<p>Перемножив эти два значения, можно получить временную сложность построения кучи <span class="arithmatex">\(O(n \log n)\)</span> . <strong>Но эта оценка неточна, потому что мы не учли свойство двоичного дерева: на нижних уровнях узлов гораздо больше, чем на верхних</strong>.</p>