ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hash Table
    Programming/Data Structure 2020. 11. 10. 08:35
    728x90

    1. 해쉬 구조

    • Hash Table: (key,value)를 가진 데이터 구조
      • Key를 통해 바로 데이터에 접근 가능하므로, 속도가 획기적으로 빨라짐
      • 보통 배열로 미리 Hash Table 사이즈만큼 생성 후에 사용 (공간과 탐색 시간을 맞바꾸는 기법)
      • key만 알면 어디에 저장되어야하는지, 어디에 저장되어 있는지 알 수 있다.
      • 파이썬은 Dictionary사용
      • 해쉬테이블 기반으로 만들어진 것이 블록체인
    • key -> 해쉬 함수 -> 해쉬 주소 -> 해쉬 테이블 접근

    2. 해쉬 테이블 만들기

    • 간단한 해쉬 테이블 만들기(python list 이용)
    hash_table = list([i for i in range(10)])
    print(hash_table)
    #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

     

    • hash 함수 만들기
      - 다양한 방법이 있으나, 나머지 연산을 많이 사용
    def hash_func(key):
        return key % 10

     

    • 각 데이터에 대해서 key값을 추출해야한다. 
      ord 함수 사용 (문자에 대해서 아스키 코드 변환)
    data1 = 'Andy'
    data2 = 'Dave'
    data3 = 'Trump'
    
    #각 데이터에 대해서 key 값을 추출해야됨
    #ord는 문자의 아스키값을 표시
    print(ord(data1[0]))
    print(ord(data2[0]))
    print(ord(data3[0]))

    3. 해쉬 테이블 충돌 해결 전략

    - open hashing 기법(chaining 기법)
       테이블 밖에 값을 저장
       충돌이 일어나면 링크드리스트를 통해 해결

    - close hashing 기법(linear probing 기법)

       테이블 안의 빈 공간에 저장

       저장공간의 활용도를 높일 수 있다.

    4. 해쉬 테이블 전략

    빈번한 충돌 방지해야한다. 

    -> 해쉬 함수를 재정의하거나, 테이블의 저장공간을 2배로 늘린다.

     

    'Programming > Data Structure' 카테고리의 다른 글

    Tree  (1) 2020.11.19
    링크드리스트  (0) 2020.10.29
    Stack  (0) 2020.10.19
    Queue  (0) 2020.10.15
    배열(Array)  (0) 2020.10.14
Designed by Tistory.