1. 테이블 : 원하는 바를 단번에 찾아내는 방식
    1. 키(Key)와 값(Value)의 한 쌍으로 저장되는 구조
    2. 시간복잡도 : O(1)
  2. 테이블 소스 : S013_Table.c
  3. 테이블의 문제점
    1. 사원번호가 : 201900000 ~ 201900099으로 100명이 근무하는 회사에 대해 프로그래밍 한다면 위 코드를 어떻게 수정해야 하는가?
  4. 해쉬(Hash) 코드 사용 샘플 소스 : S013_TableHash.c
  5. 해쉬(Hash) 방법
    1. 자릿수 선택(Digit Selection)
      1. 같은 학과 학생들로 구성된 학과 학생들의 학번
      2. 학과가 다른 학생들로 구성된 동아리 구성원들의 학번
    2. 자릿수 폴딩(Digit Folding)
  6. 좋은 해쉬 함수의 조건
    1. 슬롯의 사용 영역이 고르게 분포되어 있어야 한다.
  7. 충돌(Collision) 문제의 해결책
    1. 열린 어드레싱 방법(open addressing method)
      1. 선형 조사법(Linear Probing) : 충돌이 발생하면 바로 다음 위치에 저장
      2. 이차 조사법(Quadratic Probing) : 충돌이 발생하면 제곱만큼 떨어진 위치에 저장
      3. 이중 해쉬(Double Hash) : 충돌이 발생하면 몇칸 뒤에 저장할 것인지를 다시 해쉬를 이용해서 구함
    2. 닫힌 어드레싱 방법(closed addressing method)
      1. 체이닝(Chaining)
        1. 배열과 연결리스트로 구현 가능하지만 배열은 완전한 체이닝을 만들 수 없음
        2. 보통 연결리스트로 구현
  8. 단순 해쉬 완성 버전 : S013_SimpleHashTable.c
  9. 체이닝 해쉬 완성 버전 : S013_ChainedHashTable.c

     
error: Content is protected !!