본문 바로가기
Algorithm

이진 탐색 vs 이진 탐색 트리

by Doromi 2019. 4. 30.
728x90
반응형

근본적으로 같은 원리에 의한 탐색 구조

 

이진 탐색

배열에 저장된 데이터를 탐색

- 동적으로 크기가 변하는 데이터 집합 탐색에는 부적합

- 삽입과 삭제가 상당히 힘들다

 

시간 복잡도

O(logN)

처음에 입력된 갯수가 N 이라 하면,
첫 시행 후에 반이 버려지게 되서 1/2 * N,

두번째 시행 후에 또 반이 버려져서 1/2 * 1/2 * N,

세번째 시행 후에 또 그 반이 버려져서 1/2 * 1/2 * 1/2 * N,

K번 시행후에는 (1/2)^K * N
이렇게 수행을 계속하다가 탐색이 끝나면 자료가 한개 남개 된다.
따라서 (1/2)^K * N ≒ 1
K = logN

이진 탐색 트리

연결 리스트 데이터에 대한 탐색

- 비교적 빠른 시간 안에 삽입과 삭제를 끝마칠 수 있는 구조

- 삽입, 삭제가 빈번히 이루어진다면 반드시 이진 탐색 트리를 사용해야 함

 

이진 탐색 트리에서의 시간 복잡도

- 균형 트리 : O(logn)
- 불균형 트리 : O(n) , 순차 탐색과 동일

 

수도 코드

 

 

 

재귀

TREE-SEARCH(x, k)
  if x = NULL or k = key[x]
    then return x
  if k < key[x]
    then return TREE-SEARCH(left[x], k)
    else return TREE-SEARCH(right[x], k)

 

 

반복

TREE-SEARCH(x, k)
  while x!=NULL and k!=key[x]
    do if k < key[x]
      then x <- left[x]
      else x <- right[x]
  return x

 

728x90
반응형

'Algorithm' 카테고리의 다른 글

최장 증가 부분 수열  (0) 2019.05.05
BFS와 DFS  (0) 2019.05.02
최단 경로  (0) 2019.04.28
그리디 알고리즘  (0) 2019.04.28
배낭 문제  (0) 2019.04.28