HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Статья расскажет о том, что такое<strong>бинарные деревья</strong>. Будут представлены способы их представления и основные термины. Отдельное внимание будет уделено B-дереву и его отличию от двоичных структур.</p>
1 <p>Статья расскажет о том, что такое<strong>бинарные деревья</strong>. Будут представлены способы их представления и основные термины. Отдельное внимание будет уделено B-дереву и его отличию от двоичных структур.</p>
2 <p><strong>Деревом</strong>называют структуру данных, которая имеет древовидный вид, то есть характеризуется наличием набора связанных узлов. Бинарное дерево - это конечное множество элементов, связанных с двумя разными бинарными деревьями - правым и левым поддеревьями.</p>
2 <p><strong>Деревом</strong>называют структуру данных, которая имеет древовидный вид, то есть характеризуется наличием набора связанных узлов. Бинарное дерево - это конечное множество элементов, связанных с двумя разными бинарными деревьями - правым и левым поддеревьями.</p>
3 <p>Способ представления:</p>
3 <p>Способ представления:</p>
4 <p>На что следует обратить внимание: - А - корень дерева; - B - корень левого поддерева и предок D; - С - корень правого поддерева; - D - потомок родительского узла B; если D располагается на уровне i, то B - на уровне i-1.</p>
4 <p>На что следует обратить внимание: - А - корень дерева; - B - корень левого поддерева и предок D; - С - корень правого поддерева; - D - потомок родительского узла B; если D располагается на уровне i, то B - на уровне i-1.</p>
5 <p>Необходимо выделить следующие термины: -<strong>узел (вершина)</strong>- это каждый элемент бинарного дерева; -<strong>ветви</strong>- связи между узлами; -<strong>глубина (высота)</strong>- наибольший уровень какого-нибудь элемента; -<strong>лист</strong>(терминальный узел) - термин применяется, если элемент не имеет потомков; -<strong>внутренние узлы</strong>- узлы ветвления; -<strong>степень</strong>внутреннего узла - число его потомков (наибольшая степень всех существующих узлов - это степень всего бинарного дерева); -<strong>длина пути</strong>к x - количество ветвей, которые необходимо пройти от корня до текущего узла x. Длина пути самого корня равна нулю, а узел на уровне i обладает длиной пути, которая равна i.</p>
5 <p>Необходимо выделить следующие термины: -<strong>узел (вершина)</strong>- это каждый элемент бинарного дерева; -<strong>ветви</strong>- связи между узлами; -<strong>глубина (высота)</strong>- наибольший уровень какого-нибудь элемента; -<strong>лист</strong>(терминальный узел) - термин применяется, если элемент не имеет потомков; -<strong>внутренние узлы</strong>- узлы ветвления; -<strong>степень</strong>внутреннего узла - число его потомков (наибольшая степень всех существующих узлов - это степень всего бинарного дерева); -<strong>длина пути</strong>к x - количество ветвей, которые необходимо пройти от корня до текущего узла x. Длина пути самого корня равна нулю, а узел на уровне i обладает длиной пути, которая равна i.</p>
6 <h2>Использование</h2>
6 <h2>Использование</h2>
7 <p>На практике бинарные деревья применяются, когда в каждой точке какого-нибудь вычислительного процесса нужно принимать одно из 2-х возможных решений. Существует множество задач, решаемых таким способом. Одна из них - выполнение операции, условно говоря, X с каждым элементом дерева. X рассматривается в качестве параметра обобщенной задачи посещения всех вершин либо задачи обхода дерева. Если рассмотреть такую задачу в качестве единого последовательного процесса, то можно сказать, что отдельные вершины посещаются в определенном порядке, то есть могут считаться линейно расположенными.</p>
7 <p>На практике бинарные деревья применяются, когда в каждой точке какого-нибудь вычислительного процесса нужно принимать одно из 2-х возможных решений. Существует множество задач, решаемых таким способом. Одна из них - выполнение операции, условно говоря, X с каждым элементом дерева. X рассматривается в качестве параметра обобщенной задачи посещения всех вершин либо задачи обхода дерева. Если рассмотреть такую задачу в качестве единого последовательного процесса, то можно сказать, что отдельные вершины посещаются в определенном порядке, то есть могут считаться линейно расположенными.</p>
8 <h2>Способы обхода</h2>
8 <h2>Способы обхода</h2>
9 <p>Предположим, что имеется дерево (не пустое), в котором A является корнем, а B и C - левым и правым поддеревьями.</p>
9 <p>Предположим, что имеется дерево (не пустое), в котором A является корнем, а B и C - левым и правым поддеревьями.</p>
10 <p>Есть 3 способа обхода: 1. Обход в прямом порядке - сверху вниз: A, B, C - префиксная форма. 2. Обход слева направо (симметричный порядок): B, A, C - инфиксная форма. 3. Обход снизу вверх (обратный порядок): B, C, A - постфиксная форма.</p>
10 <p>Есть 3 способа обхода: 1. Обход в прямом порядке - сверху вниз: A, B, C - префиксная форма. 2. Обход слева направо (симметричный порядок): B, A, C - инфиксная форма. 3. Обход снизу вверх (обратный порядок): B, C, A - постфиксная форма.</p>
11 <h2>Реализация</h2>
11 <h2>Реализация</h2>
12 <p>На практике вершину древа можно описать в качестве структуры:</p>
12 <p>На практике вершину древа можно описать в качестве структуры:</p>
13 <p>Тогда обход в префиксной форме будет выглядеть следующим образом:</p>
13 <p>Тогда обход в префиксной форме будет выглядеть следующим образом:</p>
14 <p>Теперь инфиксная форма:</p>
14 <p>Теперь инфиксная форма:</p>
15 <p>И постфиксная:</p>
15 <p>И постфиксная:</p>
16 <h2>Бинарное дерево поиска</h2>
16 <h2>Бинарное дерево поиска</h2>
17 <p>Оно представляет собой двоичное (бинарное) дерево, для которого справедлив ряд дополнительных условий. Эти условия называют свойствами:</p>
17 <p>Оно представляет собой двоичное (бинарное) дерево, для которого справедлив ряд дополнительных условий. Эти условия называют свойствами:</p>
18 <p>Данные в каждой вершине должны обладать ключами, где определена операция сравнения “&lt;”.</p>
18 <p>Данные в каждой вершине должны обладать ключами, где определена операция сравнения “&lt;”.</p>
19 <p>Обычно информация, которая представляет каждую вершину, - это запись, а не единственное поле данных.</p>
19 <p>Обычно информация, которая представляет каждую вершину, - это запись, а не единственное поле данных.</p>
20 <p>Чтобы составить бинарное дерево поиска, пригодится функция добавления узла:</p>
20 <p>Чтобы составить бинарное дерево поиска, пригодится функция добавления узла:</p>
21 <h2>Удаляем поддерево</h2>
21 <h2>Удаляем поддерево</h2>
22 <h2>B-дерево. Поиск по B-дереву</h2>
22 <h2>B-дерево. Поиск по B-дереву</h2>
23 <p>В бинарном дереве поиска каждый узел содержит лишь одно значение (ключ) и не более 2-х потомков. Но существует особый вид древа поиска, называемый B-дерево (Би-дерево). Здесь узел содержит больше одного значения и больше 2-х потомков. Также его называют сбалансированным по высоте деревом поиска порядка m (Height Balanced m-way Search Tree).</p>
23 <p>В бинарном дереве поиска каждый узел содержит лишь одно значение (ключ) и не более 2-х потомков. Но существует особый вид древа поиска, называемый B-дерево (Би-дерево). Здесь узел содержит больше одного значения и больше 2-х потомков. Также его называют сбалансированным по высоте деревом поиска порядка m (Height Balanced m-way Search Tree).</p>
24 <p>B-дерево представляет собой сбалансированное дерево поиска, где каждый узел содержит много ключей и имеет больше 2-х потомков.</p>
24 <p>B-дерево представляет собой сбалансированное дерево поиска, где каждый узел содержит много ключей и имеет больше 2-х потомков.</p>
25 <p>Возможные операции: 1. Поиск. 2. Вставка (вставляем новый элемент). 3. Удаление.</p>
25 <p>Возможные операции: 1. Поиск. 2. Вставка (вставляем новый элемент). 3. Удаление.</p>
26 <p>Каждое B-дерево имеет порядок. Для примера рассмотрим B-дерево порядка m. Оно будет обладать рядом следующих характеристик:</p>
26 <p>Каждое B-дерево имеет порядок. Для примера рассмотрим B-дерево порядка m. Оно будет обладать рядом следующих характеристик:</p>
27 <p>Ниже можно посмотреть на B-дерево четвертого порядка, содержащее максимум три значения ключа и максимум четыре потомка для каждой вершины.</p>
27 <p>Ниже можно посмотреть на B-дерево четвертого порядка, содержащее максимум три значения ключа и максимум четыре потомка для каждой вершины.</p>
28 <p>Поиск аналогичен поиску по двоичному дереву. Следует вспомнить, что в двоичном древе поиск начинается с корня, причем каждый раз принимается 2-стороннее решение (пойти по правому поддереву либо по левому). В В-дереве поиск тоже начинается с корневого узла, но с той лишь разницей, что на каждом шаге принимается не 2-стороннее, а n-стороннее решение, причем n для дерева в данном случае представляет общее число потомков рассматриваемого узла. Сложность поиска такого дерева - O(log n).</p>
28 <p>Поиск аналогичен поиску по двоичному дереву. Следует вспомнить, что в двоичном древе поиск начинается с корня, причем каждый раз принимается 2-стороннее решение (пойти по правому поддереву либо по левому). В В-дереве поиск тоже начинается с корневого узла, но с той лишь разницей, что на каждом шаге принимается не 2-стороннее, а n-стороннее решение, причем n для дерева в данном случае представляет общее число потомков рассматриваемого узла. Сложность поиска такого дерева - O(log n).</p>
29 <p>Алгоритм следующий:</p>
29 <p>Алгоритм следующий:</p>
30 <p>Также существует такое понятие, как вставка в B-дерево.</p>
30 <p>Также существует такое понятие, как вставка в B-дерево.</p>
31 <p>В В-дереве вставка нового элемента возможна лишь в узел-лист. То есть вставленная новая пара ключ-значение добавляется лишь к узлу-листу. Вот, как осуществляется вставка в B-дерево:</p>
31 <p>В В-дереве вставка нового элемента возможна лишь в узел-лист. То есть вставленная новая пара ключ-значение добавляется лишь к узлу-листу. Вот, как осуществляется вставка в B-дерево:</p>
32 <p>Более подробную информацию всегда можно получить на наших курсах по алгоритмам в Москве.</p>
32 <p>Более подробную информацию всегда можно получить на наших курсах по алгоритмам в Москве.</p>
33 <p><em>Источники: - https://zen.yandex.ru/media/id/5bbcbc1ba5bd5400a990e7d9/struktura-dannyh-bderevo-5d273e1dcfcc8600ac055454; - https://prog-cpp.ru/data-tree/.</em></p>
33 <p><em>Источники: - https://zen.yandex.ru/media/id/5bbcbc1ba5bd5400a990e7d9/struktura-dannyh-bderevo-5d273e1dcfcc8600ac055454; - https://prog-cpp.ru/data-tree/.</em></p>
34  
34