[알고리즘, #11] 해쉬함수

권필제·2020년 12월 7일
0

알고리즘

목록 보기
11/15

1. 개념

1.1 글

  • 동일한 입력값에 대하여 동일한 해쉬결과를 도출하는 함수
  • 상이한 입력값에 대하여 상이한 해쉬결과를 도출하는 함수

1.2 그림

2. 예시

2.1 문제

  • 8자리의 빈칸에 서로다른 값을 입력하고자 한다.
  • 입력값 list = [빨, 주, 노, 초, 파, 남, 보, 검]

2.2 슈도 코드

  • list 만들기: list 형식으로 8개 칸 만들기
  • 자리 지정하기: hash(빨) % 8, hash(주) % 8, ...
  • 결과: 빨, 노, 초, 주, 보, 검
  • 왜 8개 모두 입력되지 않았을까? 그 이유는 충돌 때문이다.

3. 충돌

3.1 개념

  • 동일한 자리에 서로 다른 값이 겹치는 현상
  • 상이한 해쉬결과가 도출되었으나 나머지의 값이 동일해 같은 자리에 서로 다른 값이 입력됨
  • 예> 25/8의 나머지 = 1, 33/8의 나머지 = 1

3.2 해결방법

3.2.1 체이닝(Chaining)

  • 개념: 자리에 linked list 형식으로 다양한 값을 받는 방법
  • 도식화

3.2.2 개방 주소법(Open Addressing)

  • 개념: 겹치는 자리 주변의 또 다른 자리를 찾아 입력하는 방법
  • 선형 탐색, 제곱 탐색, 이중 해쉬으로 구분됨

4. 시간복잡도

  • 시간 복잡도: O(1)
  • 이유: 단 번에 입력값을 찾을 수 있음
  • 예시: list[hash('원숭이') % 8]은 항상 list의 동일한 index를 가리킴
profile
몰입하는자

0개의 댓글