1 / 30

Hashing 함수의 종류 및 특징

Hashing 함수의 종류 및 특징 . 99135036 컴퓨터 과학과 심형광. I N D E X. 1. Hashing 함수 2. Hashing 함수의 종류 3. 참조 자료. 1. Hashing 함수. Hashing 함수 (1). Hashing 함수의 정의 - 레코드 키 값을 bucket 의 주소에 대응 시키는 방법 Hashing 함수의 조건 - 주소 계산이 빨라야 함 - 가급적 결과 값이 중복되어서는 안됨 Hashing 함수의 고려사항

elmer
Download Presentation

Hashing 함수의 종류 및 특징

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hashing 함수의 종류 및 특징 99135036 컴퓨터 과학과 심형광

  2. I N D E X 1. Hashing 함수 2. Hashing 함수의 종류 3. 참조 자료

  3. 1. Hashing함수

  4. Hashing 함수 (1) • Hashing 함수의 정의 - 레코드 키 값을 bucket의 주소에 대응 시키는 방법 • Hashing 함수의 조건 - 주소 계산이 빨라야 함 - 가급적 결과 값이 중복되어서는 안됨 • Hashing 함수의 고려사항 - bucket, hash table, 적재 밀도 등을 고려해야함

  5. Hashing 함수 (2) • Bucket • 레코드 키를 저장할 수 있도록 마련된 기억 장소 • 한 개 또는 여러 레코드 값을 저장할 수 있는 슬롯으로 구성됨 • bucket에 레코드들이 가득차면 overflow가 발생함

  6. Hashing 함수 (3) • Hash Table • 레코드의 저장을 위한 자료구조 • 결과 값을 저장하기 위해서 bucket들로 구성된 기억 공간 • 레코드의 빠른 검색을 위한 수단을 제공 • 삽입과 삭제가 용이해야함

  7. Hashing 함수 (4) • Loading density (적재 밀도) • 저장된 레코드 수 / 공간의 총 용량 • 레코드 수 / 버킷 수 * 버킷 용량 < 1 • 높으면 접근 횟수가 증가하고 낮으면 효율이 떨어짐 • 효율적인 적재밀도는 약 70% 정도임

  8. Hashing 함수 (5) • 일반적인 hashing 의 조건 • 함수의 계산시간이 빨라야 함 • 모든 주소에 균일한 분포를 가지도록 설정해야 함

  9. 2. Hashing 함수의 종류

  10. Hashing 함수의 종류 • Division (제산법) • Mid – Square (제곱법) • Digit Analysis (숫자 분석법) • Shifting (이동법) • Radix Conversion (기수 변환법) • Folding (중첩법) • Pseudo Random (난수 생성법) • Algebraic Coding (대수적 코딩) • 자리수 재배열

  11. 2.1 Division (1) • 나머지 연산자(%)를 사용하여 주소를 계산 • 어떤 양의 정수 (대개는 해시 테이블 크기)로 나눈 나머지를 주소 값으로 이용 • 특징 • 가장 간단한 방법 • 양의 정수 값을 잘못 선택하면 상당한 충돌을 유발 • 보통 나누는 값으로 소수를 선택함

  12. 2.1 Division (2) • Example • 레코드 개수 : 4000, 적재 밀도 : 80% • 주소 공간 : 5000, Divisor : 5,003 • 이 때 주소 값 중에서 0472 의 값이 중복되어 충돌이 발생함 ㅡ> 해결이 필요

  13. 2.2 Mid – Square (1) • 키 값을 제곱한 후에 중간의 몇 자리를 선택하고 그 중간 값을 주소로 이용 • 심벌 테이블 응용에 주로 사용됨 • 키를 구성하는 몇 개의 문자가 동일해도 결과값은 상이할 수 있음 • 주소의 범위를 조정할 필요가 있음

  14. 2.2 Mid – Square (2) • Example • 레코드 키 값 k : 35270 • 해시 테이블 크기: 10000 (중간 4비트 선택) • 결과 • 레코드 값 k 의 제곱한 값 k’ : 1243972900 • 그 결과값에서 중간 4자리인 9729 가 주소 값이 됨

  15. 2.3 Digit Analysis (1) • 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택해서 사용 • 키 값이 알려진 정적 파일에 용이 • 비교적 간단하지만 삽입과 삭제가 빈번한 경우는 비효율적임

  16. 2.3 Digit Analysis (2) • Example • 테이블 크기 : 1000 • 홈 주소 : 0~999(3자리) • 결과 : 4, 8, 10열을 선택 • 왼쪽 3자리 숫자는 거의 동일함 ㅡ> 제거 • 5,6,7,9 열 역시 비슷한 숫자가 많음ㅡ>무시 • 비교적 고른 분포인 4,8,10열 선택ㅡ>사용

  17. 2.4 Shifting (1) • 키 값을 중앙을 중심으로 양분 • 주소길이 만큼 숫자를 이동시켜 해쉬 값을 구한 후 주소 범위에 맞도록 조정함

  18. 2.4 Shifting (2) • Example • 레코드 키 값 k : 12345678 • 주소 공간 : 5000 • 결과 • 주소 값으로 6912 를 사용 • 실제 주소 : 6,912 * 0.5 = 3,456

  19. 2.5 Radix Conversion (1) • 주어진 키의 값을 다른 진법으로 변환하여 얻은 결과 값을 주소로 사용 • 초과하는 높은 자리수는 절단함

  20. 2.5 Radix Conversion (2) • Example (10진수 ㅡ> 11진수) • 키 값 : 172148 • 주소 공간 : 7000 • 결과 • h(172148) = 266373 • 여기서 하위 4자리 6373을 주소로 사용 • 실제 주소 : 6373 * 0.7 = 4461

  21. 2.6 Folding • 마지막 부분을 제외한 모든 부분이 동일하도록 분할 • 이들 부분을 모두 더하거나 XOR 을 해서 결과 값을 주소로 이용 • Shifting Folding 방법과 Boundary Folding 방법이 있음

  22. 2.6.1 Boundary Folding • 키 값을 나눈 후 그 값들의 경계를 중심으로 접어 역으로 정렬한 후 그 값들을 더한 값을 주소로 사용함 • 3자리씩 나누면 • P1 : 301 , P2 : 230, P3 : 12 가 됨 • 주소 : P1+P2(역)+P3 = 301+032+12 = 345 • 이 값을 주소로 사용함

  23. 2.6.2 Shifting Folding • 마지막을 제외한 모든 부분을 이동시켜 하위 비트부터 일치 시켜서 계산을 하고 그 결과 값을 주소로 사용함 • 3자리씩 나누면 • P1 : 301 , P2 : 230, P3 : 12 가 됨 • 주소 : P1+P2+P3 = 301+230+12 = 543 • 이 값을 주소로 사용함

  24. 2.7 Pseudo Random (1) • 난수 발생 프로그램을 이용해서 난수를 발생 시켜 그 값을 주소 값으로 이용 • 보통 난수는 1보다 작은 값을 사용하고 테이블 크기 n과 곱을 하여 0~(n-1) 의 크기로 변환하여 사용 • 만일 충돌이 발생하면 다음 난수의 결과 값을 레코드의 주소로 사용

  25. 2.7 Pseudo Random (2) • x는 키의 값을 나타내며 p는 일반적으로 2의 n제곱을 나타냄 • y = (ax +c) mod p • Example • key : 3386 , a = 5, c = 1, n = 10 • 결과 • y = ( 5 * 3386 +1) mod 1024 = 547 • 547을 주소로 사용함

  26. 2.8 Algebraic Coding (1) • 키를 이루고 있는 각각의 비트를 다항식의 계수로 하여 이 다항식을 크기로 정한 다항 식으로 나눌 때 얻은 나머지 다항식의 계수 를 주소로 사용함

  27. 2.8 Algebraic Coding (2) • Example • key : 12345 • 다항식 : x⁴ + 2x³ + 3x² + 4x + 5 • 크기 : 100 • 제수 : x² + 2x + 3 • 결과 x² x² + 2x + 3 x⁴ + 2x³ + 3x² + 4x + 5 x⁴ + 2x³ + 3x² 4x + 5 • 나머지 4x + 5 의 계수인 45를 주소로 함

  28. 2.9 자리수 재배열(1) • 단순하게 원래의 키 값의 일부분의 자리수 의 값을 추출하여 그 순서를 역으로 한 다 음 그 값을 결과 값으로 사용

  29. 2.9 자리수 재배열(2) • Example • 키 값 : 123456789 • 주소 공간 : 4자리 • 결과 • 중간의 4567 을 추출하여 역의 값인 7654 를 주소로 사용함

  30. Reference to • http://internet512.chonbuk.ac.kr/datastructure/hash/hash1.html • http://cs.kangwon.ac.kr/~ysmoon/courses • http://www.comedu.pe.kr/edu/ds-14.htm • http://ghryu.comimadang.com/ppt/ja3.ppt • http://www.terms.co.kr/hashing.htm

More Related