Post

[Data Structure] Hash Table

[Data Structure] 해시 테이블 (Hash Table)

브루트포스(완전 탐색, O(n^2))로 시간 초과에 빠지게 되는 문제에 사용.

각 값의 의미

HashTable[HASH_SIZE][HASH_LEN]

  • 테이블을 2차원 배열로 구현해 해당 값을 key를 이용해 몇 번 중복해서 들어왔는지 저장한다.

TableLen[HASH_SIZE]

  • 들어온 key값을 저장할 index를 담고 있는 배열.
  • 즉, 0이면 바로 넣지만 0이 아니면 Data를 돌면서 일치하는 값이 있는지 찾는 역할을 한다.

Data[HASH_SIZE][HASH_LEN]

  • 테이블에 실제로 들어간 값을 저장한다.
  • HASH_LEN 부분의 인덱스는 TableLen[HASH_SIZE]이다.

HASH_SIZE

  • 2차원 배열로 구현하는데, 그 중 colum을 담당.

HASH_LEN

  • 2차원 배열의 row를 담당.
  • 중복해서 들어올 수 있는 key의 개수라고 생각하면 편하다.

HASH_VAL

  • key 값을 만들 때 이용하는 값.
  • 최대한 중복을 피하기 위해 소수(19, 23,29 등)를 이용하는 것이 좋다.

    key

  • 들어오는 데이터를 이용해 key 값을 만든다.
  • HASH_VAL과 자신만의 방법을 이용해 값을 만들고, HASH_SIZE로 나눈 몫을 출력한다.
  • 음수면 -1을 곱해 양수로 만들어준다.

함수 내용

getHashKey

  • 위의 내용을 토대로 HASH_VAL을 이용해 key값을 만든다.

isExist

  • key값을 이용해 TableLen[key]의 값을 조사.
    • 만약 0이면 Data[key][TableLen[key]]에 저장하고, Length[key]의 값을 1 증가.
    • 0이 아니면 Data[key][cnt = 0 to TableLen[key]]를 돌며 일치하는 데이터가 있는지 확인한다.
      • 만일 중복되는 값이 있으면 HashTable[key][cnt]값을 1 늘리고 해당 값 반환.
    • Data[key][TableLen[key]]에 저장하고, TableLen[key]의 값을 1 증가.
    • 0 반환.
This post is licensed under CC BY 4.0 by the author.