Дерево Фенвіка (Binary Indexed Tree)
Коротко: Дерево Фенвіка зберігає масив чисел так, що і зміна значення, і префіксні суми виконуються за O(log n).
Докладніше: Це особливо компактна альтернатива дереву відрізків, коли потрібні лише суми (або схожі оборотні операції). Дерево живе в простому масиві, а обчислення індексів використовує наймолодший встановлений біт.
Подробиці
- Ідея: Позиція
iзберігає суму відрізка, довжина якого дорівнює найбільшому степеню двійки, що ділитьi. - Запит: Префіксна сума до
i: додати значення, потімi -= i & -i, докиiне стане 0. - Зміна: Змінити значення на
d: додати вi, потімi += i & -i, докиiне перевищить розмір. - Сума на відрізку:
сума(r) - сума(l-1). - Побудова: Можлива за O(n), пам’ять — лише n чисел.
- Обмеження: Не кожна операція оборотна. Мінімум на відрізку тому зазвичай потребує дерева відрізків.
Див. також: O-нотація