Доказ складності в часі для реалізації сегментного дерева задачі про рангову суму


10

Я розумію, що дерева сегментів можна використовувати для пошуку суми під масиву A. І що це можна зробити в РосіїO(logn)час згідно з підручником тут .

Однак я не в змозі довести, що час запитів дійсно є O(logn). Це посилання (та багато інших) говорять про те, що ми можемо довести, що на кожному рівні є максимальна кількість оброблених вузлів4 і так O(4logn)=O(logn).

Але як ми доводимо це, можливо, суперечливістю?

І якщо так, якби ми використовували сегментові дерева для ранжированої суми масивів більш високих розмірів, як би було підтверджено доказ?

Наприклад, я можу подумати, щоб знайти суму підматриці, поділивши початкову матрицю на 4 квадранти (аналогічно інтервалам вдвічі в лінійних масивах), будуючи дерево сегмента квадранта, але доказ уникає мене.


побудова сегментного дерева - O (n), запит - O (log n), а оновлення - O (log N). Його вигода над масивом суми полягає в її складності оновлення.
Нурлан

Відповіді:


11

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

Розглянемо дерево сегмента, подане нижче.

Дерево сегмента

Скажімо, що є 3вузли, розширені на цьому дереві. Це означає, що діапазон знаходиться від лівого найбільш кольорового вузла до правого самого кольорового вузла. Але зауважте, що якщо діапазон поширюється до самого правого вузла, то весь діапазон середнього вузла охоплюється. Таким чином, цей вузол негайно поверне значення і не буде розширено. Таким чином, ми доводимо, що на кожному рівні ми розширюємося максимум2 вузлів і оскільки є logn рівні, вузли, які розгортаються, є 2logn=Θ(logn)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.