Четвер, 21.11.2024, 19:06
Гость

Мішатронік

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

Онлайн всього: 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  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
252627282930

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