Субота, 18.01.2025, 11:04
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Вам легко дається програмування
Всього відповідей: 2
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


На практике часто возникают задачи, в которых приходится работать с динамически изменяющимися данными. Дерево Фенвика является структурой данных, позволяющей достаточно эффективно выдавать ответы на запросы о частичных суммах на различных отрезках массива, элементы которого могут меняться в процессе работы.

Пусть задан массив A из N чисел: A0A1, ..., AN - 1. Дерево Фенвика -- это структура данных, позволяющая выполнять две операции:

  • rsq(ij) -- выдать сумму элементов массива A с i-го по j-й включительно (rsq является сокращением от range sum query);
  • update(kd ) -- прибавить к k-му элементу массива A некоторое число d.

При простейшей реализации rsq(ij) работает за время O(j - i + 1), что в общем случае составляет порядка O(N), а update(kd ) -- за O(1). Для ответа на запрос rsq(ij) достаточно в цикле просуммировать указанный отрезок массива, а при выполнении операции update(kd ) -- изменить k-й элемент Ak.

Заметим однако, что при большом количестве запросов вида rsq(ij) простейшая реализация не слишком эффективна, так как в общем случае ответ на каждый запрос требует времени, зависящего линейно от длины массива.

Дерево Фенвика позволяет существенно сократить это время, поскольку выполняет каждую из указанных операций за время O(log N).

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Січень 2025  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
2728293031

Єдина Країна! Единая Страна!