일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DANAWA
- Agile
- AWS
- Project
- matplotlib
- 다나와
- data analyze
- javascript
- visualizing
- Method
- data
- angular
- Crawling
- pandas
- 자바스크립트
- opencv
- TypeScript
- 프로젝트
- ECS
- adaptive life cycle
- python
- instance
- 애자일
- analyzing
- keras
- tensorflow
- Scrum
- 크롤링
- algorithm
- webcrawling
Archives
- Today
- Total
LiJell's 성장기
_04.algorithm_binary_index_tree 본문
반응형
Binary index Tree
- 2진법 인덱스 구조를 활용해 구간 합 문제를 효과적으로 해결해 줄 수 있는 자료구조
- 다른 이름으로 fenwick tree라고도 함
정수에 따른 2진수 표기
정수 | 2진수 표기 |
---|---|
7 | 00000000 00000000 00000000 00000111 |
-7 | 11111111 11111111 11111111 11111001 |
- 0이 아닌 마지막 미트를 찾는 방법
- 특정한 숫자 K의 0이 아닌 마지막 비트를 찾기 위해선 K & -K 계산하면 됨
- K & -K 계산 결과 예시
정수 K | 2진수 표기 | K & -K |
---|---|---|
0 | 00000000 00000000 00000000 00000000 | 0 |
1 | 00000000 00000000 00000000 00000001 | 1 |
2 | 00000000 00000000 00000000 00000010 | 2 |
3 | 00000000 00000000 00000000 00000011 | 1 |
4 | 00000000 00000000 00000000 00000100 | 4 |
5 | 00000000 00000000 00000000 00000101 | 1 |
6 | 00000000 00000000 00000000 00000110 | 2 |
7 | 00000000 00000000 00000000 00000111 | 1 |
8 | 00000000 00000000 00000000 00001000 | 8 |
n = 8
for i in range(n+1):
print(i, "의 마지막 비트:", (i & -i))
- 트리 구조 만들기: 0이 아닌 마지막 비트 = 내가 저장하고 있는 값들의 개수
- 특정 값을 변경할 때 : 0이 아닌 마지막 비트만큼 더하면서 구간들의 값을 변경
- 1부터 N까지 누적 합 구하기: 0이 아닌 마지막 비트만큼 빼면서 구간들의 값의 합 계산
반응형
'Algorithm' 카테고리의 다른 글
_06.algorithm_DFS_BFS (0) | 2022.01.11 |
---|---|
_05.algorithm_sort (0) | 2022.01.07 |
_03.algorithm_tree (0) | 2022.01.05 |
_02.algorithm_priorityQueue (0) | 2022.01.05 |
_01.algorithm_stack_queue (0) | 2022.01.05 |
Comments