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
- Semaphore
- 쿠버네티스
- MySQL
- 코틀린
- 머신러닝
- CRD
- ansible
- spring microservice
- MSA
- Spring
- java
- Microservice
- Kotlin
- 동기화
- 클라우드 네이티브 자바
- 자바
- 헬름
- Stress test
- cloud native
- Algorithm
- cloud native java
- kubernetes
- devops
- decorator 패턴
- 클라우드 네이티브
- 마이크로서비스
- ingress
- 익명클래스
- nGrinder
- Adapter 패턴
Archives
- Today
- Total
카샤의 만개시기
AVL 트리 본문
이진트리는 한쪽으로 치우친 형태로 트리 구조가 만들어 질수 있는데
그렇게 되면 트리 구조가 아닌 일반적인 연결 리스트와 별 차이가 없게 되기 때문에
이진 트리의 장점이 사라지게 된다.
AVL 트리는 이러한 전체 트리의 구조가 균형이 맞도록 하는 트리다.
즉, 쏠린 트리처럼 트리 구조가 한쪽으로 쏠리는 것을 막아 트리 구조의 균형을 맞춤으로써
조회 성능을 O(logN)으로 유지할수 있는것이다.
AVL 트리는 다음과 같은 특징이 있다.
- 균형도(Balance Factor)라는 개념이 있는데, 이는 각 노드의 왼쪽 노드와 오른쪽 노드의 차이를 말한다.
- 리프 노드의 균형도는 0이다.
- 균형도는 '왼쪽 자식 트리의 높이 - 오른쪽 자식 트리의 높이'로 계산한다.
왼쪽 자식 노드와 오른쪽 자식 노드의 균형도는 -1, 0, 1의 세 가지 값만 갖는다.
AVL 트리는 새로운 노드가 삽입되거나, 기존의 노드가 삭제될때 균형을 맞추기 위해서 RR, LL, LR, RL 회전을 통해서 트리의 균형을 맞춘다.
(R은 오른쪽, L은 왼쪽을 의미한다.)
하지만 새로운 노드가 삽입되거나 기존의 노드가 삭제될때마다 회전이 일어난다면 오히려 성능을 떨어트릴수도 있는데,
AVL 트리의 장점은 유지하면서 성능을 떨어트리지 않는 2-3 트리 구조에 대해 알아보자
'Foundation > Algorithm' 카테고리의 다른 글
2-3 트리 (0) | 2019.02.04 |
---|---|
트리 순회 알고리즘 (0) | 2019.02.04 |
Comments