01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03....

32
01. 해시에 대하여 02. 해시 테이블: 공간을 팔아 시간을 사다 03. 해시 함수 04. 충돌 해결하기

Upload: others

Post on 25-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

01. 해시에 대하여02. 해시 테이블: 공간을 팔아 시간을 사다

03. 해시 함수04. 충돌 해결하기

Page 2: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

해싱(Hashing)◦ 원재료인 고기를 가지고 다른 재료와 함께 다지고 섞어서 완전히새로운 형태의 요리로 만드는 것처럼, 해시는 데이터를 입력 받으면 완전히 다른 모습의 데이터로 바꾸어 놓는 작업

해싱의 용도◦ 해시 테이블◦ 암호화◦ 데이터 축약◦ …

Page 3: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

일반적인 탐색 방법들은 키값을비교함으로써 탐색하고자 하는 항목에 접근

해싱◦ 키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근

◦ 해시 테이블(Hash Table) - 값의 연산에 의해 직접 접근이 가능한테이블 형태의 데이터 구조

◦ 해시테이블을 이용한 탐색을 해싱(hashing)

해싱의 예: 심볼테이블

Page 4: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

사전구조(dictionary)◦ 맵(map)이나 테이블(table)◦ 다음과 같이 탐색 키와 탐색 키 관련 값의 2 종류의 필드를 가진다. 영어단어나사람의이름같은탐색키(search key) 단어의정의나주소또는전화번호같은탐색키와관련된값(value)

∙객체: 일련의 (key,value) 쌍의 집합

∙연산:

▪ add(key, value) ::= (key,value)를 사전에 추가한다.

▪ delete(key) ::= key에 해당되는 (key,value)를 찾아서 삭제한다. 관련된 value를 반환한다.

만약 탐색이 실패하면 NULL를 반환한다.

▪ search(key) ::= key에 해당되는 value를 찾아서 반환한다.만약 탐색이 실패하면 NULL를 반환한다.

Page 5: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

다음 배열에서 데이터 123817을 찾으려면 어떻게 해야할까? 순차 탐색밖에 답이 없음.

극한의 컴퓨팅 분야에서는 위와 같은 비효율은 허락되지않는다. 다른 방법은 없을까?

59871221...123817...512

Table[0]

Table[1]

Table[59998]

Table[59996]

Page 6: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

데이터를 “해시(잘게 부수고 다시 뭉쳐서)”해서 테이블내의 주소로 바꾸면 상수 시간 안에 탐색이 가능.

Page 7: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

해시 함수를 이용하여 얻어낸 주소에 데이터를 접근

“공간을 팔아 시간을 사다” ◦ 탐색 성능이 향상됐지만 공간은 희생함.

Page 8: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

해시함수(Hash Function) / 해시테이블(Hash Table)로구성◦ 해시함수 - 탐색키를입력으로받아해시주소(hash address)를 생성◦ 해시테이블 – 해시주소에매핑하여값을저장하는배열

예:◦ 영어사전에서는단어가탐색키가되고이 단어를해싱 함수를이용하여 적절한정수 i(해수주소)로변환

◦ 배열요소 ht[i]에 단어의정의를저장하는것

Page 9: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

해시테이블 ht는 M개의버켓(bucket)으로 이루어지는 테이블로서 ht[0], ht[1], ...,ht[M-1]의 원소를 가진다.

하나의 버켓은 s개의 슬롯(slot)을 가질 수 있다.

충돌(collision) : 서로 다른 두 개의 탐색키 k1과 k2에 대하여 h(k1) = h(k2)인 경우

이러한 충돌이 버켓에 할당된 슬롯 수보다 많이 발생하게 되면 버켓에 더 이상 항목을 저장할 수 없게 되는 오버플로우(overflow)가발생

오버플로우를 해결하기 위한 방법이 반드시 필요

Page 10: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

예 : 학생들에 대한 정보를 해싱으로 저장, 탐색◦ 학번을 탐색키로 가정. 학번은 5자리로 되어 있고 앞의 2개의 숫자가학과를 나타내고 뒤의 3자리 숫자가 각 학과의 학생들의 번호

◦ 같은 학과 학생들만 저장된다고 가정하면 뒤의 3자리만 사용 가능◦ 이 경우에는 어떤 학생의 학번이 01023이라면 이 학생의 인적사항은해시테이블 ht의 항목 ht[23]에 저장

add(key, value)

index ← hash_function(key)

ht[index] = value

search(key)

index ←hash_function(key)

return ht[index]

Page 11: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

실제로는해시테이블의크기가제한되어있으므로하나의탐색키당해시테이블에서하나의공간을할당할수가없다

해싱함수가필요 h(k)= k mod M 충돌과오버플로우발생

Page 12: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

두 번째 예제: 탐색키는 알파벳으로 되어 있다고 가정 해시함수는 각 키의 첫 번째 문자를 숫자로 바꾼다.

h("array")=1 h("binary")=2

… (입력데이터) (array, binary, bubble, file, digit, direct, zero, bucket)

Page 13: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

좋은 해시 함수의 조건◦ 충돌이 적어야 한다. ◦ 해시함수 값이 해시테이블의 주소 영역 내에서 고르게 분포되어야 한다.

◦ 계산이 빨라야 한다.

Page 14: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

나눗셈법

참고◦ 테이블의 크기 n을 소수(Prime Number)로 정하는 것이 좋다고 알려져 있다.

◦ 특히 2의 제곱수와 거리가 먼 소수를 사용한 해시 함수가 좋은 성능을 낸다.

주소 = 입력 값 % 테이블의 크기

Page 15: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

자릿수 접기(Digits Folding)◦ “자릿수” 접기는 종이를 접듯이 숫자를 접어 일정한 크기 이하의수로 만드는 방법

Page 16: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

폴딩 함수◦ hash_index=(short)(key ^ (key>>16)) ◦ 이동 폴딩(shift folding)과 경계 폴딩(boundary folding)

Page 17: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

중간제곱함수◦ 중간 제곱 함수는 탐색키를 제곱한 다음, 중간의 몇 비트를 취해서해시 주소를 생성한다.

비트추출함수◦ 탐색키를 이진수로 간주하여 임의의 위치의 k개의 비트를 해시 주소로 사용하는 것이다.

숫자 분석 방법◦ 키의 각각의 위치에 있는 숫자 중에서 편중되지 않는 수들을 해시테이블의 크기에 적합한 만큼 조합하여 해시 주소로 사용

Page 18: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

충돌이란?◦ 해시 함수가 서로 다른 입력 값에 대해 동일한 해시 테이블 주소를반환하는 것

충돌해결책◦ 선형조사법: 충돌이 일어난 항목을 해시 테이블의 다른 위치에 저장한다.

◦ 체이닝: 해시테이블의 하나의 위치가 여러 개의 항목을 저장할 수있도록 해시테이블의 구조를 변경한다.

Page 19: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

체이닝(chaining)◦ 해시 테이블은 연결 리스트에 대한 포인터를 관리

◦ 데이터들은 해시 테이블의 각 요소가 가리키고 있는 연결 리스트에 저장

Page 20: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

체이닝(chaining)◦ 오버플로우 문제를 연결 리스트로 해결◦ 각 버켓에 고정된 슬롯을 할당하는 것이 아니라 각 버켓에 삽입과삭제가 용이한 연결 리스트를 할당한다.

◦ 버켓 내에서는 원하는 항목을 찾을 때는 연결 리스트를 순차 탐색한다.

◦ 예 : 크기가 7인 해시테이블에 h(k)=k mod 7의 해시 함수를 이용하여 8, 1, 9, 6, 13 을 삽입할 때에의 체이닝에 의한 충돌 처리

1단계 (8) : ∙h(8) = 8 mod 7 = 1(저장)2단계 (1) : ∙h(1) = 1 mod 7 = 1(충돌발생->새로운 노드 생성 저장)3단계 (9) : ∙h(9) = 9 mod 7 = 2(저장)4단계 (6) : ∙h(6) = 6 mod 7 = 6(저장)5단계 (13) :∙h(13) = 13 mod 7 = 6(충돌 발생->새로운 노드 생성 저장)

Page 21: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

개방 주소법◦ 충돌이 일어날 때 해시 함수에 의해 얻어진 주소가 아니더라도 얼마든지 다른 주소를 사용할 수 있도록 허용하는 충돌 해결 알고리즘

◦ 금이나 석유가 매장되어 있는 곳을 탐사하듯, 개방 주소법은 충돌이 일어나면 해시 테이블 내의 새로운 주소를 탐사(Probe)하여 충돌된 데이터를 입력하는 방식으로 동작 선형 탐사 제곱 탐사 이중 해싱

Page 22: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

선형 탐사 (Linear Probing)◦ 해시 함수로부터 얻어낸 주소에 이미 다른 데이터가 입력되어 있음을 발견하면, 현재 주소에서 고정 폭(예를 들면 1)으로 다음 주소로 이동

1

2

3

4

5

Page 23: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

충돌이 ht[k]에서 충돌이 발생했다면 ht[k+1], ht[k+2], …를 순서대로비어 있는지를 조사하여 저장 공간을 탐사◦ 만약테이블의끝에도달하게되면다시테이블의처음으로간다. ◦ 만약조사를시작했던곳으로다시되돌아오게되면테이블이가득찬것이된다.

조사되는 위치◦ h(k), h(k)+1, h(k)+2,…

예 : h(k)=k mod 7

1단계 (8) : ∙h(8) = 8 mod 7 = 1(저장) 2단계 (1) : ∙h(1) = 1 mod 7 = 1(충돌발생)

∙(h(1)+1) mod 7 = 2(저장) 3단계 (9) : ∙h(9) = 9 mod 7 = 2(충돌발생)

∙(h(9)+1) mod 7 = 3(저장) 4단계 (6) : ∙h(6) = 6 mod 7 = 6(저장) 5단계 (13) :∙h(13) = 13 mod 7 = 6(충돌 발생)

1단계 2단계 3단계 4단계 5단계

[0] 13

[1] 8 8 8 8 8

[2] 1 1 1 1

[3] 9 9 9

[4]

[5]

[6] 6 6

Page 24: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

제곱 탐사(Quadratic Probing)◦ 선형 탐사가 다음 주소를 찾기 위해 고정폭 만큼 이동하는 것에 비해 제곱 탐사는 이동폭이 제곱수로 늘어난다.

1

2

3

4

5

6

7

Page 25: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

이차 조사법(quadratic probing)◦ 선형 조사법과 유사하지만, 다음 조사할 위치를 다음 식에 의하여결정한다.

(h(k)+i*i) mod M◦ 조사되는 위치는 다음과 같이 된다.

h(k), h(k)+1, h(k)+4,…◦ 선형 조사법에서의 문제점인 집중과 결합을 크게 완화

Page 26: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

제곱 탐사(Quadratic Probing)의 한계 : 2차 클러스터◦ 제곱 탐사는 서로 다른 해시 값을 갖는 데이터에 대해서는 클러스터가 형성되지 않도록 하는 효과가 어느 정도 있지만, 같은 해시값을 갖는 데이터에 대해서는 2차 클러스터를 형성하도록 유도하는 문제를 갖고 있다

42 55 109 81

107

12만큼 이동 22만큼 이동

32만큼 이동

Page 27: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

이중 해싱(Double Hashing)◦ 클러스터를 제대로 방지할 수 있는 방법은 탐사할 주소의 규칙성을 없애버리는 것.

◦ 2개의 해시 함수를 준비해서 하나는 최초의 주소를 얻을 때 또 다른 하나는 충돌이 일어났을 때 탐사 이동폭을 얻기 위해 사용

42 55 81

224

테이블의 끝을 만나면처음으로 돌아간다.

1

2

3

4

5

6

Page 28: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

오버플로우가 발생함에 따라 항목을 저장할 다음 위치를 결정할 때, 원래 해시 함수와 다른 별개의 해시 함수를 이용하는 방법◦ step=C-(k mod C)◦ h(k), h(k)+step, h(k)+2*step, …

예 : 크기가 7인 해시테이블에서 첫 번째 해시 함수가 k mod M이고 오버플로우 발생시의 해시 함수step=5-(5 mod 5) ◦ 입력 파일 (8, 1, 9, 6, 13 )

1단계 (8) : ∙h(8) = 8 mod 7 = 1(저장)2단계 (1) : ∙h(1) = 1 mod 7 = 1(충돌발생)

∙(h(1)+h‘(1)) mod 7 = (1+5-(1 mod 5)) mod 7 = 5(저장)3단계 (9) : ∙h(9) = 9 mod 7 = 2(저장)4단계 (6) : ∙h(6) = 6 mod 7 = 6(저장)5단계 (13) :∙h(13) = 13 mod 7 = 6(충돌 발생)

∙(h(13)+h‘(13)) mod 7 = (6+5-(13 mod 5)) mod 7= 1(충돌발생)∙(h(13)+2*h‘(13)) mod 7 = (6+2*2) mod 7= 3(저장)

1단계 2단계 3단계 4단계 5단계

[0]

[1] 8 8 8 8 8

[2] 9 9 9

[3] 13

[4]

[5] 1 1 1 1

[6] 6 6

Page 29: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

재해싱(Rehashing)◦ 아무리 성능이 뛰어난 충돌 해결 알고리즘도 해시 테이블의 여유 공간이 모두 차버려서 발생하는 성능 저하는 당해낼 방법이 없다.

◦ 재해싱은 해시 테이블의 크기를 늘리고, 늘어난 해시 테이블의 크기에 맞추어 테이블 내의 모든 데이터를 다시 해싱한다.

Page 30: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

적재 밀도(loading density)/적재 비율(loading factor)◦ 저장되는 항목의 개수 n과 해시 테이블의 크기 M의 비율

선형 조사법

체이닝

Page 31: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)

(V.Lum, P.Yuen, M.Dodd, CACM, 1971, Vol.14, No.4 참조)(V.Lum, P.Yuen, M.Dodd, CACM, 1971, Vol.14, No.4 참조)그림 11.20 각 알고리즘에 따른 평균 버켓 접근수그림 11.20 각 알고리즘에 따른 평균 버켓 접근수

.50 .70 .90 .95

해싱 함수 체인 선형조사 체인 선형조사 체인 선형조사 체인 선형조사

중간 제곱 1.26 1.73 1.40 9.75 1.45 37.14 1.47 37.53

제산 1.19 4.52 1.31 7.20 1.38 22.42 1.41 25.79

이동 폴딩 1.33 21.75 1.48 65.10 1.40 77.01 1.51 118.57

경제 폴딩 1.39 22.97 1.57 48.70 1.55 69.63 1.55 97.56

숫자 분석 1.35 4.55 1.49 30.62 1.52 89.20 1.52 125.59

이론적 1.25 1.50 1.37 2.50 1.45 5.50 1.45 10.50

Page 32: 01. 해시에대하여 02. 해시테이블 공간을팔아시간을사다 03. …mclab.silla.ac.kr/lecture/201301/algorithm/lecture_09.pdf · 사전구조(dictionary) 맵(map)이나테이블(table)