Субота, 20.04.2024, 11:03
Гость

Мішатронік

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

Онлайн всього: 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).

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

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