Binary Indexed Tree còn gọi là Fenwick Tree cung cấp 1 cách để biểu diễn 1 mảng các số trong 1 mảng, cho phép tổng tiền tố được tính một cách hiệu quả. Ví dụ, 1 mảng [2,3,-1,0,6] được cho, thì tổng tiền tố của 3 phần tử đầu tiên [2,3,-1] là 2+3+(-1)=4. Tính tổng tiền tố một cách hiệu quả là hữu ích trong nhiều hoàn cảnh. Chúng ta hãy bắt đầu với 1 ví dụ đơn giản. Cho 1 mảng a[], và 2 loại phép toán được biểu diễn trên nó. 1. Thay đổi giá trị được lưu tại chỉ số i. (Cái này được gọi là phép toán update điểm). 2. Tìm tổng một tổng của 1 tiền tố có độ dài là k (Cái này được gọi là truy vấn range sum). Một cách tiếp cận theo kiểu implement là: ``` int a [] = { 2 , 1 , 4 , 6 , - 1 , 5 , - 32 , 0 , 1 }; void update ( int i , int v ) //assigns value v to a[i] { a [ i ] = v ; } int prefixsum ( int k ) //calculate the sum of all a[i] such that 0 <= i < k { int sum = 0 ; for ( int i = 0 ; i < k ; i ++) sum += a [ i ]...
Nhận xét
Đăng nhận xét