√ 펜윅 트리란?
Data structure that supports sum range queries as well as setting values in a static array and getting the value of the *prefix sum up some index efficiently
>> 위키백과의 설명을 빌리자면, 요소 업데이트와 접두사의 합계 계산을 효과적으로 수행하도록 하는 트리를 의미합니다
** 구간합 Prefix sum (Cumulative sum, inclusinve sum, inclusive scan)
Prefix sum이 감이 잘 안와서 찾아봤는데요, 일반적으로 생각하면 이런 누계합을 의미하는데요
computer science 알고리즘과 functional programming language에서 중요한 역할을 한다고 합니다https://en.wikipedia.org/wiki/Prefix_sum
백준 웹사이트에서 설명을 잘 적어주셔서 가지고 와봤는데요
1에서 16까지의 수가 하얀색 박스라면, 각 숫자를 이진법으로 나타났을 때 마지막 1이 나타내는 수를 회색으로 표현했을 때 그 밑의 연두 박스는 i번째 숫자에서 L[i]가 커버하는 구간을 나타냅니다
그렇다면 하나의 L[I] = i & -i 로 이해할 수 있는데요
만약, A가 [3,2,5,7....] 회색 박스에 있다면 TREE[I]의 값은 아래 연두색 박스와 같게 됩니다
A[12]에서 내려오면 전체 20트리박스에 A[9] + A[10] + A[11] + A[12]가 저장되어 있음을 알 수 있습니다
아래는 백준코드의 예시 문제인데요
위의 개념처럼 각 A[1]에서 A[13]까지 이진수로 나타낸 값의 마지막 1의 위치를 빼면서 전체 합을 구 할 수 있습니다
int sum(int i) {
int ans = 0;
while (i > 0) {
ans += tree[i];
i -= (i & -i);
}
return ans;
}
#백준코드 예시코드
√ 펜윅 트리 Time Complexity
Construction | O(n) |
Point Update | O(log(n)) |
Range Sum | O(log(n)) |
Range Update | O(log(n)) |
Adding Index | N/A |
Removing index | N/A |
Range query Algorithm
**개념이 복잡하지만 추가적인 관련 코딩 문제를 찾으면 업데이트 하겠습니다
Source:
https://www.youtube.com/watch?v=RBSGKlAvoiM&t=20737s&ab_channel=freeCodeCamp.org
https://www.acmicpc.net/blog/view/21
펜윅 트리 (바이너리 인덱스 트리)
블로그: 세그먼트 트리 (Segment Tree) 에서 풀어본 문제를 Fenwick Tree를 이용해서 풀어보겠습니다. Fenwick Tree는 Binary Indexed Tree라고도 하며, 줄여서 BIT라고 합니다. Fenwick Tree를 구현하려면, 어떤 수 X
www.acmicpc.net
'Data Structure & Algorithm' 카테고리의 다른 글
Dynamic Programming _ Memoization 설명 및 적용 #1 (1) | 2022.10.06 |
---|---|
Big O notation 예시 위주 정리 (0) | 2022.10.04 |
Trie (트라이, Digital tree, prefix, Retrieval tree) + 예제 코드 (0) | 2022.09.27 |
Union Find (0) | 2022.09.26 |
Dynamic Programming Steps (0) | 2022.09.25 |
댓글