Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스프링
- Spring
- mysql
- 웹 서버
- ORM
- 스프링 배치
- 자바
- Java
- Spring Security
- HTTP
- 스프링 시큐리티
- 백엔드
- 도커
- 배포
- computer science
- spring cloud
- web server
- spring batch
- spring boot
- 스프링 부트
- JPA
- 영속성 컨텍스트
- Container
- 컨테이너
- CS
- 데이터베이스
- vm
- CI/CD
- 가상화
- virtualization
Archives
- Today
- Total
개발 일기
[Algorithm] Segment Tree(세그먼트 트리) 본문
Segment Tree 초기화
Segment Tree 구간 합 구하기
Segment Tree 값 업데이트 (기존 값과 바꿀 값의 차를 통한 업데이트)
diff를 활용한 update방식보다 해당 코드가 더 직관적인듯
시간 복잡도
- 트리 초기화 (init)
- 세그먼트 트리는 완전 이진 트리로, 전체 노드 개수는 O(2N) (약 4N)
- init 함수는 한 번의 호출당 O(1), 전체적으로 O(N)
- 시간 복잡도: O(N)
- 구간 합 조회 (sum)
- 이진 트리의 높이는 O(log N)
- sum 함수는 트리를 따라 내려가며 분할 정복, 최악의 경우 O(log N) 개의 노드를 방문
- 시간 복잡도: O(log N)
- 값 업데이트 (update)
- 특정 위치의 값을 변경하면, 관련된 모든 부모 노드를 업데이트해야 함
- update 함수는 이진 트리를 따라 최대 O(log N) 개의 노드를 방문
- 시간 복잡도: O(log N)
기존 구간 합(Prefix Sum)과 차이
→ 배열 값이 자주 변경된다면 Segment Tree가 압도적으로 유리 (O(log N)).
→ Prefix Sum은 변경이 거의 없는 환경에서만 적합.(Prefix Sum은 갑 변경 시 마다 O(N))
'Back-End > Java' 카테고리의 다른 글
[Java] JAVA 코드가 실행되기까지... (Java = Interpreter + Compiler) (1) | 2025.03.27 |
---|---|
[Java] 다익스트로 알고리즘 & 플로이드 와샬 알고리즘 (0) | 2024.11.14 |
[Java] JVM 메모리 구조(Method-Static, Heap, Stack) (2) | 2024.11.06 |
[Java] HashMap 시간복잡도 (0) | 2024.10.31 |
[Java] 자바 코테를 위한 정렬(Sorting) 및 Comparable와 Comparator (0) | 2024.10.24 |