Дерево відрізків
У інформатиці, дерево відрізків це деревоподібна структура даних, яка застосовується для зберігання даних у відрізках, згрупованих так, що відомо, які з них містять дану точку.
Дерево відрізків є ефективною структурою даних для розв'язання таких задач, як:
- Визначення мінімуму або максимуму на заданому відрізку
- Оновлення елемента на заданому відрізку
- Сумування елементів на заданому відрізку
- Діапазонний запит у відрізках
Структура дерева відрізків
Дерево відрізків складається з набору вузлів, які представляють відрізки на числовій лінії. Вузли розташовані в деревоподібній структурі, де кожен вузол має максимум двох нащадків, які представляють підвідрізки відрізка відповідного вузла.
Будівництво дерева відрізків
Дерево відрізків можна побудувати за допомогою рекурсивного алгоритму:
- Якщо відрізок містить лише одну точку, створюємо листовий вузол і зберігаємо в ньому значення цієї точки.
- Інакше, ділимо відрізок навпіл і рекурсивно будуємо лівий і правий підвиди дерева.
- Зберігаємо в поточному вузлі значення операції, яка застосовується до значень лівого і правого дочірніх вузлів (наприклад, мінімум або сума).
Пошук в дереві відрізків
Щоб знайти значення операції на заданому відрізку, застосовуємо рекурсивний алгоритм:
- Якщо відрізок, представлений поточним вузлом, повністю міститься в заданому відрізку, повертаємо значення вузла.
- Інакше, перевіряємо, міститься лівий підвід у заданому відрізку, і, якщо так, рекурсивно викликаємо алгоритм для цього підвіда.
- Аналогічно перевіряємо правий підвід.
- Повертаємо значення, отримане в результаті виклику для дочірніх вузлів, об'єднане відповідно до операції, яка зберігається в поточному вузлі.
Оновлення дерева відрізків
Для оновлення значення на певному відрізку також застосовуємо рекурсивний алгоритм:
- Якщо відрізок, представлений поточним вузлом, повністю міститься в заданому відрізку, оновлюємо значення вузла.
- Інакше, перевіряємо, міститься лівий підвід у заданому відрізку, і, якщо так, рекурсивно викликаємо алгоритм для цього підвіда.
- Аналогічно перевіряємо правий підвід.
- Оновлюємо значення поточного вузла на основі нових значень дочірніх вузлів.
Асимптотична складність
- Будівництво: O(n log n)
- Пошук: O(log n)
- Оновлення: O(log n)
Дерево відрізків є потужною структурою даних, яка використовується для ефективного зберігання і доступу до даних в відрізках на числовій лінії. Його логарифмічна асимптотична складність робить дерево відрізків особливо корисною для розв'язання задач з великими обсягами даних.
Часто задаються питання
Що таке дерево відрізків?
- Деревоподібна структура даних для зберігання даних у відрізках.
Для чого використовується дерево відрізків?
- Визначення мінімуму/максимуму, оновлення елементів, сумування елементів, діапазонні запити.
Яка асимптотична складність дерева відрізків?
- Будівництво: O(n log n), пошук і оновлення: O(log n).
Як будується дерево відрізків?
- Рекурсивний алгоритм, який розбиває відрізки і будує їх підвиди.
Як виконується пошук в дереві відрізків?
- Рекурсивний алгоритм, який перевіряє, чи заданий відрізок міститься в поточному вузлі або його підвідах.
У вас є запитання чи ви хочете поділитися своєю думкою? Тоді запрошуємо написати їх в коментарях!
⚡⚡⚡ Топ-новини дня ⚡⚡⚡
Хто такий Такер Карлсон? Новий законопроект про мобілізацію З травня пенсію підвищать на 1000 гривень