[Data structure] 해시 테이블(Hash Table)과 이진 검색 트리(Binary Search Tree, BST)
해시 테이블 (Hash Table)
해시 테이블은 키-값 쌍을 저장하는 데이터 구조로, 해시 함수를 사용하여 키를 해시 값으로 변환한 후, 이를 통해 저장 위치를 결정.
장점
검색 속도: 평균적으로 O(1)의 시간 복잡도로 검색이 가능함.
삽입 및 삭제 속도: 평균적으로 O(1)로 삽입 및 삭제가 빠름.
효율적인 메모리 사용: 적절한 해시 함수를 사용하면 메모리 사용이 효율적일 수 있음.
단점
충돌 문제: 서로 다른 키가 동일한 해시 값을 가질 경우 충돌이 발생함. 이를 해결하기 위한 추가적인 처리(체이닝, 오픈 주소법 등)가 필요함.
정렬 불가능: 해시 테이블은 데이터가 정렬되지 않으며, 순서가 보장되지 않음.
메모리 사용: 해시 테이블의 크기를 정해놓고 사용하는 경우, 사용하지 않는 공간이 발생할 수 있음.
이진 검색 트리 (Binary Search Tree)
이진 검색 트리는 이진 트리의 일종으로, 각 노드의 왼쪽 서브트리에는 해당 노드보다 작은 값이, 오른쪽 서브트리에는 큰 값이 위치하는 구조임.
장점
정렬된 구조: 이진 검색 트리는 자동으로 정렬된 구조를 가지므로, 범위 검색이 용이함.
순회 가능: 중위 순회를 통해 데이터를 정렬된 순서로 쉽게 접근할 수 있음.
동적 크기: 노드가 추가되거나 삭제될 때 동적으로 크기가 조정됨.
단점
검색 속도: 최악의 경우 O(n)으로 검색 속도가 느려질 수 있음 (균형이 맞지 않을 경우).
균형 유지 필요: 균형 이진 검색 트리(예: 레드-블랙 트리, AVL 트리)를 사용하지 않으면 성능 저하가 발생할 수 있음.
삽입 및 삭제 속도: 최악의 경우 O(n)으로 삽입 및 삭제 속도가 느려질 수 있음.
요약
특징 | 해시 테이블 | 이진 검색 트리 |
---|---|---|
검색 시간 | 복잡도 O(1) (평균) | O(log n) (균형 상태일 때) |
삽입 시간 | 복잡도 O(1) (평균) | O(log n) (균형 상태일 때) |
삭제 시간 | 복잡도 O(1) (평균) | O(log n) (균형 상태일 때) |
정렬 여부 | 정렬되지 않음 | 자동 정렬됨 |
메모리 사용 | 해시 충돌 시 추가 메모리 필요 | 동적으로 메모리 사용 |
순회 가능성 | 순회 불가능 | 중위 순회 가능 |