<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Бинарные деревья и деревья поиска :: Краткий курс по основам программирования</title>
    <link>https://apmath-spbu.github.io/basics/binary_trees/index.html</link>
    <description>Деревья являются одной из важнейших структур данных в информатике. Они естественным образом возникают при решении множества задач: от представления иерархической информации (файловые системы, оргструктуры) до организации эффективного поиска и сортировки данных.&#xA;В этом разделе мы изучим:&#xA;Бинарные деревья — базовую структуру, где каждый узел имеет не более двух детей Обходы деревьев — систематические способы посещения всех узлов Двоичные деревья поиска (BST) — деревья, поддерживающие эффективный поиск, вставку и удаление Сбалансированные деревья — АВЛ-деревья и красно-чёрные деревья, гарантирующие логарифмическую высоту Б-деревья — деревья для работы с внешней памятью Деревья отрезков — структуру для эффективных запросов на отрезках Определение Дерево — это связный ациклический граф. Связность означает, что из любой вершины можно добраться в любую другую; ацикличность — отсутствие циклов.</description>
    <generator>Hugo</generator>
    <language>ru-ru</language>
    <lastBuildDate>Thu, 02 Apr 2026 09:30:00 +0300</lastBuildDate>
    <atom:link href="https://apmath-spbu.github.io/basics/binary_trees/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>12.1. Бинарные деревья: определения и свойства</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/binary_tree_basics/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/binary_tree_basics/index.html</guid>
      <description>Определение бинарного дерева Определение Бинарное дерево (двоичное дерево) — это дерево, в котором каждая вершина имеет не более двух детей, называемых левым и правым потомками.&#xA;Формально, бинарное дерево — это либо пустое дерево, либо тройка $(r, L, R)$, где $r$ — корень, $L$ — левое поддерево (бинарное дерево), $R$ — правое поддерево (бинарное дерево).</description>
    </item>
    <item>
      <title>12.2. Обходы деревьев</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/tree_traversals/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/tree_traversals/index.html</guid>
      <description>Обход дерева — систематический способ посещения всех вершин дерева. Существует несколько основных способов обхода бинарного дерева, каждый из которых имеет свои применения.&#xA;Виды обходов Основные виды обхода бинарного дерева:&#xA;Название Порядок посещения Применение Прямой (preorder) Корень → Лево → Право Копирование дерева, префиксные выражения Центрированный (inorder) Лево → Корень → Право Сортировка, вывод BST по возрастанию Обратный (postorder) Лево → Право → Корень Удаление дерева, постфиксные выражения В ширину (level-order) По уровням сверху вниз Поиск в ширину, вывод по уровням Сравнение обходов на одном дереве Рассмотрим дерево:</description>
    </item>
    <item>
      <title>12.3. Двоичное дерево поиска: операции</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/bst_operations/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/bst_operations/index.html</guid>
      <description>Двоичное дерево поиска (Binary Search Tree, BST) — это бинарное дерево, организованное специальным образом для эффективного поиска.&#xA;Свойство BST Определение Двоичное дерево поиска — это бинарное дерево, для которого выполняется свойство BST: для любой вершины $x$ все ключи в левом поддереве $x$ меньше ключа $x$, а все ключи в правом поддереве $x$ больше ключа $x$.</description>
    </item>
    <item>
      <title>12.4. BST: анализ сложности</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/bst_complexity/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/bst_complexity/index.html</guid>
      <description>Высота BST Высота BST критически влияет на эффективность всех операций. В зависимости от порядка вставки ключей, высота может варьироваться от логарифмической до линейной. Для гарантированной логарифмической высоты используются АВЛ-деревья и красно-чёрные деревья.&#xA;Худший случай Теорема В худшем случае высота BST с $n$ вершинами равна $n - 1$. Доказательство Худший случай достигается, когда ключи вставляются в возрастающем или убывающем порядке. Тогда каждый новый узел становится правым (или левым) ребёнком предыдущего, и дерево превращается в вырожденное — по сути, в связный список.</description>
    </item>
    <item>
      <title>12.5. АВЛ-деревья</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/avl_trees/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/avl_trees/index.html</guid>
      <description>АВЛ-дерево (названо в честь изобретателей Адельсона-Вельского и Ландиса, 1962) — это первое самобалансирующееся двоичное дерево поиска. Оно гарантирует высоту $O(\log n)$ для любых операций. АВЛ-дерево строится на основе операций BST, дополненных вращениями для поддержания баланса.&#xA;Определение и условие балансировки Определение АВЛ-дерево — это двоичное дерево поиска, в котором для каждой вершины высоты её левого и правого поддеревьев различаются не более чем на 1.</description>
    </item>
    <item>
      <title>12.6. Красно-чёрные деревья (основы)</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/red_black_trees/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/red_black_trees/index.html</guid>
      <description>Красно-чёрное дерево (Red-Black Tree, RB-tree) — это самобалансирующееся двоичное дерево поиска, которое обеспечивает логарифмическую высоту с меньшим количеством вращений, чем АВЛ-дерево. Как и АВЛ-дерево, оно основано на базовых операциях BST.&#xA;Свойства красно-чёрного дерева Определение Красно-чёрное дерево — это двоичное дерево поиска, в котором каждая вершина имеет дополнительный бит информации — цвет (красный или чёрный), и выполняются следующие пять свойств:</description>
    </item>
    <item>
      <title>12.7. Б-деревья</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/b_trees/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/b_trees/index.html</guid>
      <description>Б-дерево (B-tree) — это сбалансированное дерево поиска, специально разработанное для работы с данными на внешних носителях (дисках). В отличие от бинарных деревьев, узлы Б-дерева могут содержать множество ключей и детей.&#xA;Мотивация: внешняя память При работе с данными на диске время доступа к произвольной ячейке памяти (порядка миллисекунд) намного превышает время обращения к оперативной памяти (порядка наносекунд). Разница составляет около $10^6$ раз.</description>
    </item>
    <item>
      <title>12.8. Деревья отрезков (основы)</title>
      <link>https://apmath-spbu.github.io/basics/binary_trees/segment_trees/index.html</link>
      <pubDate>Thu, 02 Apr 2026 09:30:00 +0300</pubDate>
      <guid>https://apmath-spbu.github.io/basics/binary_trees/segment_trees/index.html</guid>
      <description>Дерево отрезков (Segment Tree) — это структура данных для эффективного выполнения запросов на отрезках массива: суммы, минимума, максимума и других ассоциативных операций.&#xA;Мотивация Пусть есть массив $a[0], a[1], \ldots, a[n-1]$, и нужно поддерживать две операции:&#xA;Запрос на отрезке: найти сумму/минимум/максимум на отрезке $[l, r]$ Обновление элемента: изменить значение $a[i]$ Структура Запрос на отрезке Обновление Массив $O(n)$ $O(1)$ Префиксные суммы $O(1)$ $O(n)$ Дерево отрезков $O(\log n)$ $O(\log n)$ Дерево отрезков обеспечивает логарифмическое время для обеих операций.</description>
    </item>
  </channel>
</rss>