| TOPIC: Fenwick Tree (Binary Indexed Tree) | |
| DEFINITION: | |
| A Fenwick Tree, also known as a Binary Indexed Tree, is a data structure used to efficiently calculate prefix sums and update elements in an array. It solves the problem of quickly computing cumulative sums and making range updates by using a tree-like structure to store the cumulative sums. | |
| TIME_COMPLEXITY: | |
| The time complexity of a Fenwick Tree is O(log n) for both update and query operations, where n is the number of elements in the array, because each operation involves traversing a path in the tree that is at most log n levels deep. | |
| SPACE_COMPLEXITY: | |
| The space complexity of a Fenwick Tree is O(n), as it requires an array of size n to store the tree nodes, with each node representing a cumulative sum. | |
| USE_WHEN: | |
| Use a Fenwick Tree when you need to frequently calculate prefix sums or make range updates in an array, such as in scenarios involving dynamic cumulative sum calculations or updates to a large dataset. This data structure is particularly useful when the array is too large to fit into memory or when updates and queries need to be performed quickly. | |
| AVOID_WHEN: | |
| Avoid using a Fenwick Tree when the array is relatively small or when random access to individual elements is necessary, as the overhead of the tree structure may outweigh its benefits; in such cases, a simple array or a hash table may be a better choice. | |
| EXAMPLE: | |
| Suppose we have an array [3, 2, -1, 6, 5] and we want to calculate the prefix sum up to the 4th index using a Fenwick Tree: | |
| Initial array: [3, 2, -1, 6, 5] | |
| Initialize tree: [3, 5, 4, 10, 15] | |
| To calculate prefix sum up to 4th index: | |
| Start at index 4 (value 15) | |
| Subtract value at index 3 (value 10): 15 - 10 = 5 | |
| Add value at index 2 (value 4): 5 + 4 = 9 | |
| Subtract value at index 1 (value 5): 9 - 5 = 4 | |
| Add value at index 0 (value 3): 4 + 3 = 7 | |
| Result: | |
| Checkmark: The prefix sum up to the 4th index is 15. | |
| REAL_WORLD_ANALOGY: | |
| A Fenwick Tree can be thought of as a hierarchical accounting system, where each node in the tree represents a cumulative sum of a subset of accounts, allowing for efficient calculation of totals and updates to individual accounts. | |
| SOURCE_NOTE: | |
| Concepts referenced from general knowledge of data structures and algorithms. |