🎲 Треп
Рандомізоване збалансоване ДДП
Вставка
Видалення
Статистика
Кількість вузлів
0
Висота дерева
0
Поворотів (остання оп.)
0
Всього поворотів
0
Довідка та теорія

Треп — це рандомізоване двійкове дерево пошуку, назва якого поєднує «tree» (дерево) і «heap» (купа), представлене Сесілією Арагон і Раймундом Зайделем у 1989 році. Кожен вузол зберігає ключ і незалежно обраний випадковий пріоритет.

Подвійний інваріант

Дерево одночасно є ДДП за ключами — ключі лівого піддерева менші, правого — більші — і максимальною купою за пріоритетами — пріоритет кожного вузла не менший за пріоритети його нащадків.

Чому очікувана O(log n)

Оскільки пріоритети обираються рівномірно й випадково, форма, що виникає при впорядкуванні вузлів за пріоритетом, розподілена так само, як ДДП, побудоване вставкою ключів у випадковому порядку. Випадкові ДДП — класичний результат з очікуваною висотою O(log n), тож треп успадковує цю гарантію автоматично — без жодних явних правил балансування.

Вставка

Ключ вставляється звичайною рекурсивною вставкою ДДП, стає листком, і йому призначається новий випадковий пріоритет. Далі вузол піднімається поворотом вгору — правий поворот, якщо він лівий нащадок, лівий поворот, якщо правий — поки його пріоритет перевищує пріоритет предка, відновлюючи властивість максимальної купи.

Видалення

Знайдіть вузол за ключем. Поки в нього два нащадки, опускайте поворотом вниз: піднімайте того нащадка, чий пріоритет вищий (вважаючи власний пріоритет вузла, що видаляється, рівним −∞), проштовхуючи цільовий вузол ближче до листка. Коли він має щонайбільше одного нащадка, його просто вилучають.

Без явного обліку балансу

На відміну від AVL чи червоно-чорних дерев, які відстежують висоти чи бітові кольори й застосовують детерміновані правила перебалансування після кожного оновлення, треп не потребує нічого з цього — випадковість сама тримає очікувану висоту логарифмічною.

Бонус: розщеплення та злиття

Треп також підтримує елегантні операції O(log n) розщеплення та злиття, що робить його популярним будівельним блоком для впорядкованих множин, мотузок (ropes) і персистентних структур даних.

Про треп — рандомізоване збалансоване ДДП

Автор: Команда MySimulator · Редакційна перевірка: Редакція MySimulator

Оновлено: 11 липня 2026 р.

Треп — це рандомізоване двійкове дерево пошуку, що поєднує ДДП з купою (звідси й назва), представлене Сесілією Арагон і Раймундом Зайделем у 1989 році. Кожен вузол зберігає ключ і незалежно обраний випадковий пріоритет. Ключі задовольняють інваріант дерева пошуку, а пріоритети водночас задовольняють інваріант максимальної купи: пріоритет кожного вузла не менший за пріоритети його нащадків. Оскільки пріоритети випадкові, отримана форма еквівалентна за розподілом ДДП, побудованому вставкою ключів у випадковому порядку, що гарантує очікувану висоту O(log n) без детермінованих правил балансування. Вставка виконує звичайну вставку ДДП за ключем, призначає випадковий пріоритет, потім піднімає новий вузол поворотами, поки той порушує властивість купи з предком. Видалення опускає цільовий вузол поворотами до того нащадка, чий пріоритет вищий, доки його не можна буде просто видалити. На відміну від AVL- чи червоно-чорних дерев, які підтримують баланс через явні інваріанти, треп досягає балансу ймовірнісно, а також підтримує розщеплення й злиття за O(log n) для впорядкованих множин.

Часті запитання

Чому випадкові пріоритети дають трепу очікувану висоту O(log n)?

Оскільки пріоритет кожного вузла обирається незалежно й рівномірно випадково, дерево, що виникає з упорядкування вузлів за пріоритетом, розподілене так само, як ДДП, побудоване вставкою ключів у випадковій перестановці. Випадкові ДДП — класичний результат з очікуваною висотою O(log n), тож треп успадковує цю гарантію без явного перебалансування.

Як працює поворот при вставці?

Новий ключ спочатку розміщується звичайною рекурсивною вставкою ДДП, стаючи листком з новим випадковим пріоритетом. Якщо цей пріоритет перевищує пріоритет предка, вузол повертається вгору — правий поворот, якщо він лівий нащадок, лівий поворот, якщо правий. Повороти тривають, доки пріоритет предка не стане більшим або вузол не стане коренем.

Як видалення «опускає» вузол поворотом?

Щоб видалити вузол з двома нащадками, алгоритм піднімає поворотом того нащадка, чий пріоритет вищий, що проштовхує цільовий вузол у протилежне піддерево, зберігаючи властивість максимальної купи. Це повторюється, доки вузол не матиме щонайбільше одного нащадка, після чого його безпосередньо вилучають з дерева.

Чому треп не потребує явних інваріантів балансу, як AVL чи червоно-чорні дерева?

AVL- та червоно-чорні дерева відстежують висоту чи бітові кольори кожного вузла й застосовують детерміновані правила перебалансування після кожного оновлення. Треп натомість покладається на рандомізовані пріоритети: оскільки форма залежить лише від випадкових чисел, очікувана висота автоматично залишається логарифмічною, без обліку та без випадків перебалансування, які потрібно доводити.