This commit is contained in:
krahets
2026-03-30 08:17:41 +08:00
parent 68cafe99dd
commit 46bccf0065
484 changed files with 60193 additions and 20315 deletions
@@ -65,8 +65,8 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Noto Sans";--md-code-font:"JetBrains Mono"}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"PT Sans";--md-code-font:"JetBrains Mono"}</style>
@@ -574,7 +574,7 @@
<span class="md-ellipsis">
Глава 1. Знакомство с алгоритмами
Глава 1. Введение в алгоритмы
@@ -596,7 +596,7 @@
<span class="md-nav__icon md-icon"></span>
Глава 1. Знакомство с алгоритмами
Глава 1. Введение в алгоритмы
</label>
@@ -646,7 +646,7 @@
<span class="md-ellipsis">
1.2 Что такое структуры данных и алгоритмы
1.2 Что такое алгоритм
@@ -1181,7 +1181,7 @@
<span class="md-ellipsis">
Глава 4. Массив и связный список
Глава 4. Массивы и списки
@@ -1203,7 +1203,7 @@
<span class="md-nav__icon md-icon"></span>
Глава 4. Массив и связный список
Глава 4. Массивы и списки
</label>
@@ -1309,7 +1309,7 @@
<span class="md-ellipsis">
4.4 Память и кеш *
4.4 Оперативная память и кэш *
@@ -1591,7 +1591,7 @@
<span class="md-ellipsis">
Глава 6. Хеширование
Глава 6. Хеш-таблицы
@@ -1613,7 +1613,7 @@
<span class="md-nav__icon md-icon"></span>
Глава 6. Хеширование
Глава 6. Хеш-таблицы
</label>
@@ -1691,7 +1691,7 @@
<span class="md-ellipsis">
6.3 Хеш-алгоритмы
6.3 Алгоритмы хеширования
@@ -1788,7 +1788,7 @@
<span class="md-ellipsis">
Глава 7. Дерево
Глава 7. Деревья
@@ -1810,7 +1810,7 @@
<span class="md-nav__icon md-icon"></span>
Глава 7. Дерево
Глава 7. Деревья
</label>
@@ -2014,7 +2014,7 @@
<span class="md-ellipsis">
7.3 Представление дерева массивом
7.3 Представление двоичного дерева массивом
@@ -2098,7 +2098,7 @@
<span class="md-ellipsis">
7.6 Резюме
7.6 Краткие итоги
@@ -2261,7 +2261,7 @@
<span class="md-ellipsis">
8.3 Задача Top-K
8.3 Задача Top-k
@@ -2352,7 +2352,7 @@
<span class="md-ellipsis">
Глава 9. Граф
Глава 9. Графы
@@ -2374,7 +2374,7 @@
<span class="md-nav__icon md-icon"></span>
Глава 9. Граф
Глава 9. Графы
</label>
@@ -2424,7 +2424,7 @@
<span class="md-ellipsis">
9.2 Базовые операции над графами
9.2 Базовые операции графа
@@ -2480,7 +2480,7 @@
<span class="md-ellipsis">
9.4 Резюме
9.4 Краткие итоги
@@ -2619,7 +2619,7 @@
<span class="md-ellipsis">
10.2 Точка вставки двоичного поиска
10.2 Двоичный поиск точки вставки
@@ -2647,7 +2647,7 @@
<span class="md-ellipsis">
10.3 Граничные случаи двоичного поиска
10.3 Двоичный поиск границ
@@ -2675,7 +2675,7 @@
<span class="md-ellipsis">
10.4 Стратегия оптимизации через хеширование
10.4 Стратегии оптимизации хеширования
@@ -2703,7 +2703,7 @@
<span class="md-ellipsis">
10.5 Алгоритмы поиска: новый взгляд
10.5 Переосмысление алгоритмов поиска
@@ -2908,7 +2908,7 @@
<span class="md-ellipsis">
11.3 Пузырьковая сортировка
11.3 Сортировка пузырьком
@@ -2936,7 +2936,7 @@
<span class="md-ellipsis">
11.4 Сортировка вставкой
11.4 Сортировка вставками
@@ -3241,7 +3241,7 @@
<span class="md-ellipsis">
12.1 Алгоритмы разделяй и властвуй
12.1 Стратегия разделяй и властвуй
@@ -3269,7 +3269,7 @@
<span class="md-ellipsis">
12.2 Стратегия поиска разделяй и властвуй
12.2 Поисковая стратегия разделяй и властвуй
@@ -3546,7 +3546,7 @@
<span class="md-ellipsis">
13.4 Задача о $n$ ферзях
13.4 Задача о n ферзях
@@ -3687,7 +3687,7 @@
<span class="md-ellipsis">
14.1 Введение в динамическое программирование
14.1 Первое знакомство с динамическим программированием
@@ -3799,7 +3799,7 @@
<span class="md-ellipsis">
14.5 Задача о неограниченном рюкзаке
14.5 Задача о полном рюкзаке
@@ -4471,7 +4471,7 @@
<p>К распространенным способам обхода двоичного дерева относятся обход по уровням, прямой обход, симметричный обход и обратный обход.</p>
<h2 id="721">7.2.1 &nbsp; Обход по уровням<a class="headerlink" href="#721" title="Permanent link">&para;</a></h2>
<p>Как показано на рисунке 7-9, <u>обход по уровням (level-order traversal)</u> проходит двоичное дерево сверху вниз по уровням и на каждом уровне посещает узлы слева направо.</p>
<p>По своей сути обход по уровням относится к <u>обходу в ширину (breadth-first traversal)</u>, также называемому <u>поиском в ширину (breadth-first search, BFS)</u>; он отражает идею "расширяться слой за слоем наружу".</p>
<p>По своей сути обход по уровням относится к <u>обходу в ширину (breadth-first traversal)</u>, также называемому <u>поиском в ширину (breadth-first search, BFS)</u>; он отражает идею "расширяться от центра к периферии слой за слоем".</p>
<p><img alt="Обход двоичного дерева по уровням" class="animation-figure" src="../binary_tree_traversal.assets/binary_tree_bfs.png" /></p>
<p align="center"> Рисунок 7-9 &nbsp; Обход двоичного дерева по уровням </p>
@@ -4778,8 +4778,8 @@
<li><strong>Пространственная сложность равна <span class="arithmatex">\(O(n)\)</span></strong> : в худшем случае, то есть для полной двоичной деревообразной структуры, до достижения самого нижнего уровня в очереди одновременно может находиться до <span class="arithmatex">\((n + 1) / 2\)</span> узлов, что требует <span class="arithmatex">\(O(n)\)</span> памяти.</li>
</ul>
<h2 id="722">7.2.2 &nbsp; Прямой, симметричный и обратный обходы<a class="headerlink" href="#722" title="Permanent link">&para;</a></h2>
<p>Соответственно, прямой, симметричный и обратный обходы относятся к <u>обходу в глубину (depth-first traversal)</u>, также называемому <u>поиском в глубину (depth-first search, DFS)</u>; он отражает идею "сначала идти до конца, затем откатываться и продолжать".</p>
<p>На рисунке 7-10 показан принцип работы обхода двоичного дерева в глубину. <strong>Обход в глубину похож на то, как будто мы обходим всю двоичную структуру по внешнему контуру</strong> , и у каждого узла встречаем три позиции, соответствующие прямому, симметричному и обратному обходам.</p>
<p>Соответственно, прямой, симметричный и обратный обходы относятся к <u>обходу в глубину (depth-first traversal)</u>, также называемому <u>поиском в глубину (depth-first search, DFS)</u>; он отражает идею "сначала идти до конца, затем возвращаться и продолжать".</p>
<p>На рисунке 7-10 показан принцип работы обхода двоичного дерева в глубину. <strong>Обход в глубину можно представить как обход всей двоичной структуры по внешнему контуру</strong> , и у каждого узла встречаются три позиции, соответствующие прямому, симметричному и обратному обходам.</p>
<p><img alt="Прямой, симметричный и обратный обходы двоичного дерева поиска" class="animation-figure" src="../binary_tree_traversal.assets/binary_tree_dfs.png" /></p>
<p align="center"> Рисунок 7-10 &nbsp; Прямой, симметричный и обратный обходы двоичного дерева поиска </p>
@@ -5328,7 +5328,7 @@ aria-label="Нижний колонтитул"
<a
href="../array_representation_of_tree/"
class="md-footer__link md-footer__link--next"
aria-label="Вперед: 7.3 Представление дерева массивом"
aria-label="Вперед: 7.3 Представление двоичного дерева массивом"
rel="next"
>
<div class="md-footer__title">
@@ -5336,7 +5336,7 @@ aria-label="Нижний колонтитул"
Вперед
</span>
<div class="md-ellipsis">
7.3 Представление дерева массивом
7.3 Представление двоичного дерева массивом
</div>
</div>
<div class="md-footer__button md-icon">