BINARY
INDEXED TREE (Fenwick tree)
MOTIVATION
Let us consider an array
arr[0 . . . n-1]. With following two task to perform :-  
1.       Find the sum of first i elements.
2.      Change value of a specified element
of the array arr[i] = x where 0 <= i <= n-1.
·        
A simple
solution is to
run a loop from 0 to i-1 and calculate sum of elements. To update a value,
simply do arr[i] = x. The first operation takes O(n) time and second operation
takes O(1) time.
·        
Or, Create another array and store sum from start to
i at the i’th index in this array. Sum of a given range can now be calculated
in O(1) time, but update operation takes O(n) time now.
Now the
question arises can we perform both operation in O(log n) time ?
One can think
about  segment tree but implementation
using segment tree can be complex and require more memory.so better solution
can be produced using binary indexed tree.
Complexities:
·        
Time
complexity of construction O(nlogn).
·        
Time
complexity of sum and update operation is O(logn).
·        
Space
complexity is O(n).
Representation 
Binary
Indexed Tree is represented as an array. Let the array be BITree[]. Each node
of Binary Indexed Tree stores sum of some elements of given array. Size of
Binary Indexed Tree is equal to n where n is size of input array. In the below code,
we have used size as n+1 for ease of implementation (where 0th
indexed is used as a dummy node).initialized all the element of BITree[]={0}.
Operations
1.      Sum(index) : Returns sum of
arr[0..index]
2.      update(index, val): Updates BIT for
operation arr[index] += val
Algorithms
1.     Sum(index)
1.1.    Initialize sum as 0 and index as index+1.
1.2.    while index is greater than zero .
1.2.1.   Add
BITree[index] to sum
1.2.2.    Go
to parent of BITree[index].  Parent can
be obtained by removing
       the last set bit from index, i.e., index =
index - (index & (-index))
1.3.    Return sum
2.      Update(index, val)
       2.1.   Initialize index as index+1.
       2.2.   while index is smaller than or equal
to n.
    2.2.1.           
Add
value to BITree[index]
    2.2.2.           
Go
to parent of BITree[index].  Parent can
be obtained
                 by adding the decimal value of last set bit from index, 
                 i.e., index = index + (index &
(-index))
[Note
above formula adds decimal value corresponding to last set bit]
 
Thank you so much for uploading video on you tube.Please upload more video related to dynamic programming and Tree
ReplyDeletesure :)
DeleteDai-Chin G-33C - Ultralight Wrap for a Dual Purpose
ReplyDeleteThis ultralight, lightweight, lightweight ultralight design transports you titanium bracelet to the ultimate in a men\'s titanium wedding bands multi-platform ultralight gaming chair. titanium mens rings Rating: titanium engagement rings 4.6 · 2 reviews titanium for sale
a440b5qdzum357 vibrators,vibrating dildos,dog dildo,dildo,Panty Vibrators,glass dildos,penis rings,realistic dildo,sex chair w297a3vfqdi152
ReplyDelete