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 |
Tags
- ORM
- 스프링 시큐리티
- web server
- Spring Security
- 가상화
- 스프링
- computer science
- Java
- CS
- Container
- 컨테이너
- spring batch
- 스프링 배치
- CI/CD
- spring cloud
- 자바
- 스프링 부트
- mysql
- vm
- 배포
- Spring
- 영속성 컨텍스트
- 백엔드
- spring boot
- 웹 서버
- HTTP
- virtualization
- 도커
- JPA
- 데이터베이스
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는 Call by Value인가? Call by Reference인가? (0) | 2025.04.05 |
---|---|
[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 |