책 <파이썬 자료구조와 알고리즘>을 기본으로 배운 자료구조 내용입니다
목차
-
추상 데이터 타입 - 해시테이블
-
해시 충돌
<추상 데이터 타입 - 해시테이블>
해시테이블(Hash Table)
- 키(Key)에 데이터(Value)를 저장하는 데이터 구조 ex)딕셔너리 타입
- ※파이썬에서는 해쉬를 별도 구현할 이유가 없음 - 딕셔너리 타입을 사용하면 됨.
- 각각의 Key(해싱함수에 넣어 해쉬 주소 알아냄)를 통해 바로 데이터를 받아올 수 있으므로, 속도가 획기적으로 빨라짐.
- 보통 배열로 미리 Hash Table 사이즈만큼 생성 후에 사용
알아둘 용어
- 해쉬(Hash): 임의 값을 고정 길이로 변환하는 것
- 해쉬 테이블(Hash Table): 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조
- 해싱 함수(Hashing Function): Key에 대해 산술 연산을 이용해 데이터(Value) 위치를 찾을 수 있는 함수
Key를 해싱 함수로 연산해서, 해쉬 주소를 알아내고, 이를 기반으로 해쉬 테이블에서 해당 Key에 대한 데이터 위치를 일관성있게 알 수 있음
시간 복잡도
조회, 삭제, 삽입 - O(1)
해시 충돌 발생하면 - O(n)
해시 충돌 : 여러 키에 해당하는 (해쉬함수를 통해 만들어낸) 해쉬주소가 동일한 경우 충돌이 발생하는 것.
키가 중복되지 않도록 데이터를 고루 분산시킬수 있는 해쉬함수를 사용하거나(ex. SHA) 각 버킷에 키-값 쌍의 연결 리스트를 저장하는 것이 해쉬 충돌을 해결할 수 있다.
'⏳ 알고리즘 > python 알고리즘 개념' 카테고리의 다른 글
검색 알고리즘(순차 검색, 이진 검색) (0) | 2020.01.17 |
---|---|
정렬 알고리즘 (0) | 2020.01.13 |
포인터 기반의 연결 방식(3) - 추상 데이터 타입(연결리스트) (0) | 2020.01.07 |
포인터 기반의 연결 방식(2) - 추상 데이터 타입(힙과 우선순위 큐) (0) | 2020.01.07 |
포인터 기반의 연결 방식(1) - 추상 데이터 타입(스택, 큐, 덱) (0) | 2019.12.31 |