Встречное дерево Фенвика — различия между версиями
Proshev (обсуждение | вклад) |
Proshev (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
'''Встречное дерево Фенвика''' — [[Дерево Фенвика|дерево Фенвика]], в котором над каждым столбцом идет столбец такой же высоты, вычисляемый по формуле <tex>F'(i) = \sum_{j=i+1}^{i+2^{h(i)}} a[j]</tex>. | '''Встречное дерево Фенвика''' — [[Дерево Фенвика|дерево Фенвика]], в котором над каждым столбцом идет столбец такой же высоты, вычисляемый по формуле <tex>F'(i) = \sum_{j=i+1}^{i+2^{h(i)}} a[j]</tex>. | ||
}} | }} | ||
− | |||
− | |||
− | |||
Вспомним, что <tex>h(i)</tex> возвращает количество единиц в двоичной записи числа <tex>i</tex>, а каждый столбец прямого дерево Фенвика вычисляется по формуле <tex>F(i) = \sum_{j=i-2^{h(i)}+1}^i a[j]</tex> | Вспомним, что <tex>h(i)</tex> возвращает количество единиц в двоичной записи числа <tex>i</tex>, а каждый столбец прямого дерево Фенвика вычисляется по формуле <tex>F(i) = \sum_{j=i-2^{h(i)}+1}^i a[j]</tex> | ||
== Свойства == | == Свойства == | ||
+ | |||
+ | [[Файл:Originalbit.png|thumb|Прямое дерево Фенвика]] | ||
+ | [[Файл:Vstbit.png|thumb|Встречное дерево Фенвика]] | ||
Встречное дерево Фенвика - это структура данных, дерево на массиве, обладающее следующими свойствами: | Встречное дерево Фенвика - это структура данных, дерево на массиве, обладающее следующими свойствами: | ||
Строка 25: | Строка 25: | ||
== Применение == | == Применение == | ||
− | Дерево Фенвика позволяло вычислять значение операции <tex>G</tex> на отрезке <tex>[L; R]</tex> с помощью формулы включений-исключений и запросов <tex>G([0; R])</tex> и <tex>G([0; L])</tex>. Встречное дерево Фенвика позволяет нам сразу обрабатывать запрос вида <tex>G([L; R])</tex> | + | Дерево Фенвика позволяло вычислять значение операции <tex>G</tex> на отрезке <tex>[L; R]</tex> с помощью формулы включений-исключений и запросов вида <tex>G([0; R])</tex> и <tex>G([0; L])</tex>. Встречное дерево Фенвика позволяет нам сразу обрабатывать запрос вида <tex>G([L; R])</tex> |
== Ссылки == | == Ссылки == | ||
[http://e-maxx.ru/algo/fenwick_tree Дерево Фенвика] | [http://e-maxx.ru/algo/fenwick_tree Дерево Фенвика] |
Версия 04:01, 17 мая 2011
Определение: |
Встречное дерево Фенвика — дерево Фенвика, в котором над каждым столбцом идет столбец такой же высоты, вычисляемый по формуле . |
Вспомним, что возвращает количество единиц в двоичной записи числа , а каждый столбец прямого дерево Фенвика вычисляется по формуле
Свойства
Встречное дерево Фенвика - это структура данных, дерево на массиве, обладающее следующими свойствами:
1) позволяет вычислять значение некоторой обратимой операции
на любом отрезке за время ;2) позволяет изменять значение любого элемента за
;3) требует
памяти, а точнее, ровно столько же, сколько и массив из элементов;4) легко обобщается на случай многомерных массивов.
5) позволяет представить любой отрезок
в виде дизъюнктивных объединений отрезков, взятых из прямого и встречного дерева Фенвика.Применение
Дерево Фенвика позволяло вычислять значение операции
на отрезке с помощью формулы включений-исключений и запросов вида и . Встречное дерево Фенвика позволяет нам сразу обрабатывать запрос вида