http://cpu815.blog.me/110035113430


 Balanced Binary Search Tree(ex : Red-Black Tree) 
역시 매우 중요한 자료구조균형 잡힌(!) 이진 탐색 트리는 추가삭제검색을 모두 로그 시간 O(logn)에 수행할 수 있는 매우 우수한 자료구조이다비록 해쉬 테이블 상수 시간에 이루어지지는 않지만,탐색 트리의 장점은 키 값들이 정렬이 되어있다는 것이다따라서 위의 전화번호부 예에서 사람 이름에 대해서 소팅을 많이 해야 한다면이진 트리를 사용해야 한다.

이진 트리는 아래와 같이 생긴 자료구조이다그러나 최악의 경우 모든 원소가 한 쪽에만 달려있다면,이는 리스트와 전혀 다름이 없다.

 

 

 

 

 

 

따라서양쪽 노드의 개수를 "적절히분배를 해주는 것이 가장 중요하다만약 똑같이 분배가 되어있다면탐색 및 연산 작업이 로그 시간에 수행될 수 있다최대 트리의 높이만큼 순회하면 되므로 log 시간이 걸리는 것이다이렇게 연산 시간을 로그 시간이 될 수 있도록 보장하는 이진 트리를 Balanced Binary Search Tree라고 부른다여기에는 정말로 많은 자료구조가 있으며 해야 할 얘기도 무척 많다그러나 대표적인 Red-Black Tree만 얘기해보자.

 

 

 

 

그림에서 보듯이각각의 노드에 빨강검정색의 속성을 추가한다그리고 빨간 노드의 자식은 모두 검정 노드여야 한다와 같은 여러 속성을 정하고삽입/추가할 때 마다 이 속성이 유지되도록 보정을 해준다. (: rotation) 그래서 노드가 균형을 유지하도록 한다Red-Black Tree는 양쪽 노드의 깊이가 서로 두배 이상 차이가 나지 않음을 보장한다

반면AVL Tree라고 불리는 녀석은 양쪽 노드의 길이가 최대 하나 밖에 차이가 나지 않도록 한다.훨씬 더 엄격하게 균형을 맞춘다따라서 당연히 이 균형을 맞추는 보정 작업에 소요되는 시간이 Red-Black Tree보다 크다.

키와 데이터 쌍을 저장할 때검색이 가장 우선 순위라면 당연히 해쉬 테이블을 사용해야 할 것이다.그러나 이 키 값들이 정렬이 되고 싶다면 Red-Black Tree가 가장 좋은 자료구조이다.
 


정리

형태

순서여부

색인여부

삽입/삭제 

검색속도

중복여부

List

Yes

No

Fast (constant time)

Slow O(n)

Yes

Array

Yes

By int (constant time)

Slow O(n) except if inserting at end, in which case constant time

Slow O(n)

Yes

(Hash)Map

No

By key (constant time)

Fast (constant time)

Fast (constant time)

No (keys) Yes (values)

Red-Black

Yes

By key O(log n)

Fast O(log n)

Fast O(log n)

No

 

[출처] Red-Black Tree|작성자 카푸치노

반응형

+ Recent posts