Skip to content

문제 2 · 배열을 BST로 만들 때의 시간복잡도

문제 2 [4점]

원소 N개를 가지는 임의의 입력 배열을 이진 탐색 트리binary search tree 자료구조로 바꿀 때의 시간복잡도를 서술(1점)하고, 그 이유에 대해 설명(3점)하시오.

풀이 및 해설

시간복잡도

배열의 원소를 하나씩 이진 탐색 트리(BST)에 삽입하여 트리를 만든다고 하자. 삽입 한 번의 비용은 그때의 트리 높이 h 에 비례한다.

평균: Θ(NlogN)최악: Θ(N2)

이유

BST에 원소 하나를 삽입하는 비용은 루트에서 삽입 위치까지 내려가는 경로의 길이, 즉 트리의 높이 h 에 비례한다. 전체 비용은 N 번 삽입 동안의 높이들의 합이다.

  • 평균의 경우: 입력이 무작위 순서이면 트리가 대체로 균형을 이루어 높이가 h=Θ(logN) 를 유지한다. 삽입할 때마다 약 logN 만큼 내려가므로 전체는

    k=1NΘ(logk)=Θ(NlogN).
  • 최악의 경우: 입력 배열이 이미 정렬되어(오름차순 또는 내림차순) 있으면, 새 원소는 항상 한쪽 끝에만 붙는다. 그러면 트리가 한 방향으로만 자라 연결 리스트처럼 편향된(degenerate) 트리가 되고 높이는 h=Θ(N) 이 된다. i 번째 삽입 비용이 Θ(i) 이므로

    i=1NΘ(i)=Θ(N2).

즉 시간복잡도는 입력 순서에 따라 결정되는 트리의 균형 정도에 좌우된다. 이 최악의 경우를 피하려면 AVL 트리·레드-블랙 트리 같은 균형 이진 탐색 트리를 써서 높이를 항상 Θ(logN) 으로 유지하면 되고, 그러면 전체 구성 비용도 항상 Θ(NlogN) 이 된다.

PDF