티스토리 뷰
해시 함수
문자열을 받아서 숫자로 반환하는 함수로 문자열에 대해 숫자를 할당(mapping)한다고 함.
해시 함수의 요건
- 일관성이 있어 같은 문자열에 같은 숫자를 할당해야함.
- 서로 다른 단어에 대해 서로 다른 숫자를 반환해야함.
- 서로 다른 단어에 대해 같은 숫자를 반환하면 이를 충돌이라고 하는데, 충돌이 많을 수록 좋은 해시 함수로 보기는 힘들다. 최대한 모두 다른 숫자를 반환하게 하여 충돌을 줄여야 함.
💡 충돌을 피하기 위한 방법
1. 낮은 사용률
- 해시테이블의 사용률(사용하고 있는 인덱스/전체 배열 크기)이 낮으면, 충돌이 일어날 가능성이 적다.
2. 좋은 해시 함수
- 해시 함수를 통해 반환되는 값이 고르게 분포되어 있어야 함.
해시 테이블 ( hash Table )
필요 배경
책으로된 사전 처럼 특정 단어에 대한 값을 탐색 할 일이 있을 때, 해당 사전이 정렬되어 있다면 이진 탐색을 통해 O(logN) 그렇지 않다면 첫 페이지부터 확인하여 O(N) 이 소요된다. 하지만 컴퓨터 사전에 검색을 통해 확인하게 되면 그 단어를 넣기만 하면 바로 그 값을 확인할 수 있다 O(1) 시간밖에 소요되지 않는다. 이와 같이 어떤 특정 키를 통해 단 번에 값을 확인할 수 있는 방법을 제공 하기위해 해시테이블이 필요하게 되었다.
해시 테이블이란?
- 해시 맵(hash maps), 맵(maps), 딕셔너리(dictionaries), 연관 배열(associative arrays) 이라는 이름으로 알려져있다.
- 해시 테이블은 배열을 통해 구현하는데, 해시 함수를 통해 반환한 수를 인덱스로 하여 해당 위치에 값을 저장한다. 해시 함수의 특성상 특정 키 값에는 항상 같은 인덱스 값이 반환되기 때문에 탐색에 있어서 O(1) 시간을 가질 수 있다.
- 이 때 사용하는 해시 함수는 배열의 크기를 알고 있어, 유효한 인덱스만을 반환해야 한다.
장점
- 빠른 탐색이 가능하다.
- 중복을 막을 수 있다.
- 캐싱을 할 수 있다.
단점
- 해시 함수에 따라 충돌이 발생했을 때, 선형 시간<O(n)>이 걸릴 수 있다.
- 해시 함수에 충돌이 발생하면, 해당 인덱스에 LikedList로 각 요소들은 연결한다. 충돌이 많아지면 해당 내용을 탐색하기 위해 O(n) 이 소요될 수 있다.
'Algorithm' 카테고리의 다른 글
배열(Array)과 연결리스트(List) (0) | 2022.09.25 |
---|---|
[알고리즘] 이진 탐색 방법 (0) | 2022.09.23 |
B-Tree와 B+Tree (0) | 2022.08.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pass by reference
- 외부 단편화
- multimap
- 메모리 파편화
- OOP
- Sticky Session
- Session
- Object Pool
- 메모리 단편화
- 수직 분할
- 뾰족함
- ATDD
- java
- 클린 아키텍처
- Clean Architecture
- SpringBoot 2.2
- 세션 불일치
- RestAssured
- 정적 타입 언어
- 동적 타입 언어
- 내부 단편화
- 장애 해결기
- Memory Fragmentation
- 컴포짓 패턴
- 동적 디스패치
- pool
- pass by value
- 객체 풀
- 수평 분할
- 육각형 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함