ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 트립(Treap)
    알고리즘/자료구조 2015. 2. 25. 11:19

    이름에서도 예측 할 수 있듯이 트립(Treap)은 Tree + Heap인 자료구조이다.


    기존 이진 트리는 어떻게 내가 삽입(insert)하느냐에 따라서 트리의 높이가 O(N)이 될 수 있고 O(logN)이 될수도 있는 문제점이 있다. 트리구조의 기본적인 목표는 최대한 높이를 낮추어 탐색의 시간을 빠르게 하는 것이 목적인데 높이가 O(N)되면 선형 구조와 다를바가 없어진다. 즉 균형의 문제가 발생한다.


    균형의 문제를 해결하기위한 자료구조로는 AVL Tree와 Red Black Tree가 있는데 이것들은 구현하기가 어렵다. 그래서 간단히 Heap의 성질을 이용해서 구현한것이 Treap이다. 방법은 다음과 같다.


    1. 삽입할 노드들에게 난수값으로 우선순위를 부여한다.

    2. 노드가 어떤 subtree의 루트가 될지의 기준은 우선순위이다.

    3. 노드가 어떤 node의 우선순위보다 작으면 자식이 된다.

    4. 이때 왼쪽 자식이 될지 오른쪽 자식이 될지는 부모의 value값과 자식의 value값을 비교해서 이루어진다.


    value값으로 tree의 높이를 결정하는 것이 아니라 특정 난수들로 tree의 높이를 결정한다. 물론 난수값이 내림차순으로 결정되면 Treap자료구조도 O(N)이 될수도 있다. 하지만 위 확률은 매우 적어서 신경쓰지 않아도 된다. 


    삽입하고 삭제하고 합치는게 좀 까다로울 수 있다.


    '알고리즘 > 자료구조' 카테고리의 다른 글

    오일러회로  (0) 2015.02.27
    트라이  (0) 2015.02.27
    접미사배열  (0) 2015.02.24
    KMP 알고리즘  (0) 2015.02.24
    BIT(Binary Indexed Tree)  (0) 2015.02.21

    댓글

Designed by Tistory.