계층적인 자료를 표현하기 위해 트리를 사용한다.
여러 개의 키를 저정한다.
다음과 같은 연산들을 지원하는 자료구조
insert - 새로운 키의 삽입
search - 키 탐색
delete - 키 삭제
search | insert | delete | ||
배열 | 정렬 | O(logn) | O(n) | O(n) |
정렬x | O(n) | O(1) | O(1) | |
연결리스트 | 정렬 | O(n) | O(n) | O(1) |
정렬x | O(n) | O(1) | O(1) |
정렬되거나 정렬되지 않은 배열 혹은 연결리스트를 선택하면 O(n)은 항상 존재함.
탐색트리, 해쉬를 사용해서 보다 효율적인 방법을 구현할 수 있음.
search, insert, delete의 연산은 트리의 높이에 비례하는 시간 복잡도를 가짐.
search
찾으려는 값 k와 노드 key[x]를 비교한다. 같다면 찾은거고 k가 작다면 왼쪽, 크다면 오른쪽으로 노드로 이동한다.
tree_search(x,k):
if x == None or k == key[x]: #노드가 비어있거나 찾으려는 값을 찾았다면
return x #x 반환
if k<key[x]: #찾으려는 값이 작다면
return tree_search(left[x],k) #왼쪽으로 서브트리로 이동
else:
return tree_search(right[x],k)
시간 복잡도는 O(h)이다.
iterative_tree_search(x,k):
while x!=None and k!=key[x]:
if k<key[x]:
x=left[x]
else:
x=right[x]
return x
'알고리즘' 카테고리의 다른 글
이진 검색 트리 3 (0) | 2018.02.13 |
---|---|
이진 검색 트리 2 (0) | 2018.02.13 |
트리와 이진트리 (0) | 2018.02.12 |
힙의 다른 응용: 우선순위 큐 priority queue (0) | 2018.02.09 |
힙 정렬 heap sort (0) | 2018.02.05 |