File Structures 강의

65
Advanced Data Structures by Yang-Sae Moon Page 1 File Structures File Structures 강강 강강 강강 강강 강강 강강 (Ch. 8 in “ 강강 강강” ) 강강강 강강 (Ch. 9 in “ 강강 강강” ) 강강강 강강 강강 (Ch. 10 in “ 강강 강강” ) 강강강강 강강 강강 (Ch. 11 in “ 강강 강강” ) 강강강강강강 (Ch.12 in “ 강강강강” ) File Structu

description

File Structures 강의. File Structures. 강의 내용 직접 화일 (Ch. 8 in “ 파일 구조” ) 다중키 화일 (Ch. 9 in “ 파일 구조” ) 다차원 공간 화일 (Ch. 10 in “ 파일 구조” ) 텍스트를 위한 화일 (Ch. 11 in “ 파일 구조” ) 데이타베이스 (Ch.12 in “ 파일구조” ). 직접 파일 (Direct File ) 의 개념 (1/5). Hash Structures. 임의 접근 파일 (random access file) - PowerPoint PPT Presentation

Transcript of File Structures 강의

Page 1: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 1

File Structures File Structures 강의강의

강의 내용• 직접 화일 (Ch. 8 in “ 파일 구조” )

• 다중키 화일 (Ch. 9 in “ 파일 구조” )

• 다차원 공간 화일 (Ch. 10 in “ 파일 구조” )

• 텍스트를 위한 화일 (Ch. 11 in “ 파일 구조” )

• 데이타베이스 (Ch.12 in “ 파일구조” )

File Structures

Page 2: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 2

직접 파일직접 파일 (Direct File )(Direct File ) 의 개념의 개념 (1/5)(1/5)

임의 접근 파일 (random access file)

• 임의의 레코드에 그 레코드의 키 값을 사용하여 그 키 값을 가지는 레코드에 랜덤하게( 직접적으로 ) 접근할 수 있는 파일(= 직접 파일 (direct file), 직접 접근 파일 (direct access file))

• 다른 레코드를 참조하지 않고도 , 개개의 레코드에 접근 가능 (↔ 순차 접근 파일 )

인덱스 활용• 인덱스된 파일 (indexed file): 별도로 관리되는 인덱스를 이용하여 레코드에 직접

접근

• 인덱스된 순차 파일 (indexed sequential file): 인덱스를 이용한 임의 접근 /순차 접근을 모두 지원 (B+- 트리 )

해싱 (hashing) 활용• 상대 파일 (relative file): 물리적 주소 대신에 상대적인 번호 /값으로 접근 가능

( 예 : 레코드 번호 = 10 위치 ( 주소 ) = 10 x 100 bytes = 1000)

• 해시 파일 (hash file)

- 키 값을 사용하여 레코드의 저장 주소 생성 . 상대 파일을 주로 활용함 .

- 협의의 의미에서의 직접 파일

Hash Structures

Page 3: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 3

상대화일

-- 레코드의 상대적인 정보 ( 상대적인 레코드 번호 ) 를 사용하여 레코드에 접근

상대 레코드 번호 (relative record number)

• 파일이 시작되는 첫 번째 레코드를 1번으로 지정 , 이것을 기준으로 다음 레코드들에 2, 3, 4, …, n 의 순서를 지정 (= 상대 주소 (relative address))

• 레코드의 논리적 순서와 물리적 순서는 무관 , 즉 , 레코드들이 키 값에 따라 물리적으로 정렬되어 있을 필요는 없음

Hash Structures직접 파일직접 파일 (Direct File )(Direct File ) 의 개념의 개념 (2/5)(2/5)

Page 4: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 4

사상 함수 (mapping function)

A: 키 값 주소 // A(key) = address

• 레코드 기록 시 : 키 값 → 레코드가 저장될 주소

• 레코드 검색 시 : 키 값 → 레코드가 저장되어있는 주소

• 모든 레코드에 직접 접근 가능

→ 주기억 장치의 데이터 구조에서 활용이 가능함( 실제 , 교환기의 DBMS 에서는 이러한 간략하면서 Powerful 한 액세스 방법을 사용함 )

사상 함수의 구현 방법 (will be explained in the next slides)

• 직접 사상 (direct mapping)

• 디렉토리 검사 (directory lookup)

• 계산 (computation) 을 이용한 방법 해싱

Hash Structures직접 파일직접 파일 (Direct File )(Direct File ) 의 개념의 개념 (3/5)(3/5)

Page 5: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 5

직접 사상 (Direct Mapping)

• 절대 주소 (absolute address) 이용

− 키 값은 그 자체가 레코드의 실제 주소임

− 레코드가 파일에 처음 저장될 때 레코드의 주소에 해당하는 < 실린더 번호 , 디스크 번호 , 블록 번호 >, 즉 절대 주소가 결정됨

• 장점 : 간단하며 처리 시간이 거의 걸리지 않음

• 단점 : 물리적 저장장치에 의존적(→ 특수한 경우를 제외하고는 , 잘 사용되지 않음 )

Hash Structures직접 파일직접 파일 (Direct File )(Direct File ) 의 개념의 개념 (4/5)(4/5)

Page 6: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 6

디렉토리 검사 (Directory Lookup)

• < 키 값 , ( 상대 ) 주소 > 의 쌍을 엔트리로 하는 테이블 ( 디렉토리 ) 을 유지

• 검색 절차 : 디렉토리에서 키 값 검색 → 키 값에 대응되는 레코드 번호 ( 상대 주소 ) 구함 → 레코드 접근

Hash Structures

• 장점 : 빠른 검색

• 단점 : 삽입 비용이 크며 , 종종 파일과 디렉토리 재구성 필요

• 구현 예

− < 키 값 , 레코드 번호 > 쌍을 엔트리로 갖는 배열

− 디렉토리 엔트리는 키 값으로 정렬

− 순차 접근은 가능하나 의미는 없음

직접 파일직접 파일 (Direct File )(Direct File ) 의 개념의 개념 (5/5)(5/5)

Page 7: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 7

Hash Structures해싱 개요 해싱 개요 (1/2)(1/2)

Page 8: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 8

해싱 함수 (Hashing Function)

• 키 공간을 주소 공간으로 사상 (mapping)

h( 키 값 ) = 주소 , 주소 ⊂ 유효 주소 공간 (effective address space)

• 키 값들을 한정된 주소 공간으로 균등하게 분산시키는 것이 핵심

Hash Structures해싱 개요 해싱 개요 (2/2)(2/2)

Page 9: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 9

버킷 크기 (bucket size):하나의 주소를 가진 저장 구역 (= 버킷 ) 에 저장할 수 있는 레코드 수

적재 밀도 (loading density):총 저장 용량에 대한 실제로 저장되는 레코드 수의 비율

해싱 함수 (hashing function):레코드 키 값으로부터 레코드가 저장된 위치 ( 주소 ) 를 생성하는 방법

오버플로우 (overflow) 해결 방법 :주어진 주소 공간이 만원 (full) 이 된 경우의 해결 방법

Hash Structures해싱 사용 시 고려사항해싱 사용 시 고려사항

Page 10: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 10

버킷 (bucket): 하나의 주소를 가진 하나의 저장 구역

• 하나 이상 지정된 개수의 레코드 저장함

• 동일 버킷 내의 레코드들은 모두 동일한 버킷 주소를 가짐

• 한 파일을 구성하는 구성하는 버킷 수가 그 파일의 주소 공간이 됨

버킷 크기 (bucket size)

• 통상적으로 한 번의 접근 (I/O Access) 으로 버킷 내에 있는 모든 레코드들을

전송할 수 있는 크기로 결정

• 저장 장치의 물리적 특성과 연관

• 일반적으로 한 개의 블록 ( 혹은 페이지 ) 크기로 설정됨

Hash Structures버킷 크기 버킷 크기 (1/2)(1/2)

Page 11: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 11

충돌 (collision)

• 두 개의 상이한 레코드가 동일한 버킷으로 해싱되는 경우

• 동거자 (synonyms): 같은 주소로 해싱되어 충돌된 키 값들을 일컬음

• 버킷이 만원일 때는 충돌이 문제가 됨 → 오버플로우 (overflow) 발생

버킷 크기를 크게하면

• 오버플로우가 감소하는 장점이 있으나 ,

• 저장 공간의 효율이 감소되고 , 버킷 내 레코드 탐색 시간이 증가하는 단점이

있음

Hash Structures버킷 크기 버킷 크기 (2/2)(2/2)

Page 12: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 12

적재 밀도 (loading density) (= 패킹 밀도 (packing density))

• N : 버킷의 수

• c : 버킷의 용량 ( 하나의 버킷에 저장될 수 있는 레코드 개수 )(c x N = 파일에 저장 가능한 총 레코드 수 )

• K : 파일에 저장된 레코드 수

Hash Structures적재 밀도 적재 밀도 (1/2)(1/2)

적재 밀도 =

저장된 레코드 수

파일 저장 공간의 총 용량

=K

< 1c x N

Page 13: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 13

적재 밀도가 높으면 ,

• 삽입 시 접근 수가 증가함 ( 이미 레코드가 저장된 주소에 해싱될 경우가 많기 때문 )

• 검색 시 접근 수가 증가함 ( 원치 않는 레코드가 저장된 주소에 해싱될 경우가 많기 때문 )

적재 밀도가 낮으면 , 공간 효율이 떨어짐

실험 결과에 따르면 , 적재 밀도 > 70% 이면 충돌이 너무 잦음 30% 정도의 예비 공간이 필요함

예 ) 학생 레코드 검색 시스템

• 학생 수가 최대 60,000 명 , 예비 공간 30%, 버킷 크기 12

• 적정 버킷 수 = 60,000 / 0.7 / 12 = 7143

Hash Structures적재 밀도 적재 밀도 (2/2)(2/2)

Page 14: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 14

해싱 함수 ( 변환 함수 ): 키 버킷 주소• 해싱 함수 계산 시간 << 보조기억장치 ( 예 : 디스크 ) 의 버킷 접근 시간

• 모든 주소에 대한 균일한 분포를 가지는 것이 가장 중요한 요소임

주소 변환 과정• 단계 ① : 키가 숫자가 아닌 경우 ( 예를 들어 , 스트링인 경우 ), 키를 정수 값 (A) 으로

변환

키 → A

• 단계 ② : 변환된 정수 A 를 해싱 함수를 사용하여 주소 공간의 정수 B 로 변환

A → B (B : 균일 분포로 변환 )

• 단계 ③ : 얻어진 정수 B 를 주소공간의 실제범위에 맞게 조정

B 조정상수 → 주소 ( 실제 목표 주소로 변환 )

• 예 ) “kim”

− 단계 ① : ‘k’11, ‘i’9, ‘m’13, “kim” 11913

− 단계 ② : h(11973) = 11973 % 1000 = 973 (0 h(key) 999)

− 단계 ③ : 973 x 0.5 = 486 (0 address 499)

Hash Structures해싱 함수해싱 함수 (Hashing Function)(Hashing Function)

Page 15: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 15

나머지 함수 = 제산 잔여 (divide and remainder)

• 주소 = key value mod divisor (h(k) = k % d)

• 0 h(k) divisor – 1

Divisor ( 제수 )

• Divisor 자체가 직접 주소 공간의 크기를 결정 (0 ~ divisor - 1)

• 충돌 가능성이 가장 작은 것으로 선택

− 소수 (prime number)

− 20 보다 작은 소수를 인수로 갖지 않는 비소수( 예 : 5003 5000 에 가까우면서 20 이하의 소수를 인수로 갖지 않는 비소수 )

적당한 성능을 위한 적재 밀도는 0.7 ~ 0.8

• n 개의 레코드 1.25n 주소 공간 (1/1.25 = 80% 인 경우 )

• 적재 밀도와 주소 공간을 고려하여 divisor 를 결정함

Hash Structures나머지 함수 나머지 함수 (Modular Function) (Modular Function) (1/2)(1/2)

Page 16: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 16

Divisor 를 결정과 이에 따른 해싱의 예

• 레코드 개수가 4,000 개 , 적재 밀도 = 80%

• 주소 공간 = 4,000 / 0.8 = 5,000 개 주소 공간이 필요

• Divisor = 5,003(20 이하의 수를 인자로 갖지 않는 수 중에서 5,000 에 가장 가까운 수를 선택한 경우 )

Hash Structures나머지 함수 나머지 함수 (Modular Function) (Modular Function) (2/2)(2/2)

Divisor 가 5003인 경우의 예

Page 17: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 17

키 값을 제곱하고 , 중간에서 n 개 ( 주소 공간 ) 의 수를 취함

예 ) 레코드가 4,000 개인 경우• 최소 네 자리의 주소 공간이 필요

• 키를 제곱한 수에서 네 자리 수를 취함

주소 공간이 작거나 큰 경우 , 적절한 상수를 곱해서 주소 값을 조절함

Hash Structures중간 제곱중간 제곱 (Mid-Square) (Mid-Square) 해싱해싱

중간 제곱 해싱 예

( 뒤에서부터 7~10 자리 수 취함 )

Page 18: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 18

키 값을 주소 공간과 같은 자리 수를 가지는 몇 개의 부분으로 나누고 ,

이들을 접어서 (folding 해서 ) 그 합을 구함

Hash Structures중첩중첩 (Folding) (Folding) 해싱해싱

0001 2345 6789

1 0 0 0

2 3 4 5

9 8 7 6

3 2 2 11

주소

예 ) 주소 크기 (4 자리 ), 키 값(123456789)

키 값 주 소

123456789 3221

987654321 8999

123456790 4321

555555555 6110

000000472 2740

100064183 4820

200120472 4752

200120473 5752

1174000002740 ** 충돌 **

0270004002740 ** 충돌 **

Page 19: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 19

Hash Structures숫자 추출숫자 추출 (Digit Extraction) (Digit Extraction) 방법방법

숫자 분석 (Digit Analysis) 방법이라고도 함

키 값을 구성하는 각 digit 의 분포를 이용

키들의 모든 자릿수에 대한 빈도 테이블을 만들고 ,어느 정도 균등한 분포를 갖는 자릿수를 주소라 사용• 예 ) 주민등록번호의 경우 (YyMmDd 에서 , y, m, d 는 Y, M, D 에 비해 균등한

성질을 가짐 )

• 키 값을 구성하는 각 digit 의 분포를 미리 알고 있을 경우에 유용

예제 : 키 값의 9th, 7th, 5th, 3rd 자리로 주소를 구성• h(123456789) = 9753

• h(987654321) = 1357

• h(000000472) = 2400

Page 20: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 20

Hash Structures숫자 이동숫자 이동 (Shifting) (Shifting) 방법방법

키 값을 중앙을 중심으로 양분한 뒤 ,

주소 길이만큼 겹치도록 안쪽으로 각각 Shift 하여 해쉬 값을 구한 후 ,

주소 범위에 맞도록 조정 ( 조정 상수 사용 )

15

26

37

48

d1 d2 d3 d4 d5 d6 d7 d8

주소 길이

1 2 3 4 5 6 7 8

6 9 1 2

키 :

주소 :

주소 공간이 5,000 인 경우 ,6,912 x 0.5 = 3,456 (= 실제 주소 )

Page 21: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 21

Hash Structures진수 변환 진수 변환 (Radix Conversion)(Radix Conversion)

키 값의 진수를 다른 진수로 변환

초과하는 높은 자리 수는 절단

주소 범위에 맞도록 조정 ( 조정 상수 사용 )

예제 : 10 진수를 11 진수로 변환• 키 값 = 172148

• 주소 공간 = 7000

• h(172148)= 1 x 115 + 7 x 114 + 2 x 113 + 1 x 112 + 4 x 111 + 8 x 110

= 266373

• 조정 상수 적용 : 6373 x 0.7 = 4461

Page 22: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 22

Hash Structures충돌과 오버플로우 충돌과 오버플로우 (1/2)(1/2)

( 키 값 공간 > 주소 공간 ) (e.g., 주민번호 = 1013 > 주소공간 = 108)

충돌 (collision) 불가피

오버플로우 (overflow)

• 동일한 주소 (home address) 로 충돌된 동거자 (synonyms) 들을 한 버킷에

모두 저장할 수 없는 경우

• 해싱에서는 해싱 함수의 선택과 함께 , 오버플로우 처리가 주된 이슈임

Page 23: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 23

Hash Structures충돌과 오버플로우 충돌과 오버플로우 (2/2)(2/2)

오버플로우 해결 방법

• 개방 주소법 (open addressing): 오버플로우된 동거자를 저장할 공간을

상대 파일 내의 공간에서 해결

• 체인법 (chaining): 오버플로된 동거자를 위한 저장 공간을 상대 파일 밖의

지정된 공간에서 해결 , 즉 독립된 오버플로우 구역을 유지

• 선형 조사 (linear probing) // 개방 주소법

• 독립 오버플로우 구역 (separate overflow area) // 체인법

• 이중 해싱 (double hashing) // 체인법

• 동거자 체인 (synonym chaining) // 체인법

• 버킷 주소법 (bucket addressing) // 체인법 , 개방

주소법

Page 24: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 24

Hash Structures선형 조사 선형 조사 (Linear Probing) (1/5)(Linear Probing) (1/5)

오버플로우 발생 시 , home address 부터 차례로 조사하여 가장 가까운 빈 공간을 찾는 방법

해당 주소가 공백인지 아닌지를 판별할 수 있어야 함 플래그 (flag) 활용

레코드 플래그

record or not T/F

∙ ∙ ∙ ∙ ∙ ∙

record or not T/F

… (x) … T

… (y) … T

record or not T/F

∙ ∙ ∙ ∙ ∙ ∙

record or not T/F

0

i-1

ii+1i+2

n

h(x) = i

h(y) = i

Page 25: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 25

Hash Structures

저장 ( 삽입 )• 원형 (circular) 탐색 : 빈 주소를 조사하는 과정은 home address 에서

시작하여 파일 끝에서 끝나는 것이 아니라 다시 파일 시작으로 돌아가는 방식(C 의 경우 % 연산을 사용하여 구현 )

• 검색 과정에서 빈 공간이 발생하면 해당 공간에 레코드를 저장

검색• 레코드 저장 시 , 선형 조사를 사용했다면 검색에서도 선형 조사를 사용해야

• 키 값을 가진 레코드가 없거나 home address 에서 먼 경우 , 많은 조사 필요

삭제• 삭제로 인해 만들어진 빈 공간으로 검색 시 선형 조사가 단절될 수 있음

→ 삭제 표시 (tombstone) 이용 : 삭제된 자리에 삭제 표시를 해서 선형 조사가 단절되지 않도록 해야 함

선형 조사 선형 조사 (Linear Probing) (2/5)(Linear Probing) (2/5)

Page 26: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 26

Hash Structures

장점• 구현이 ( 매우 ) 용이함

• 충돌이 적은 경우 ( 해슁 함수가 Good 혹은 저장 공간이 많은 경우 ) 에 빠른 성능을 보임

단점• 충돌이 많을 경우 , 레코드의 검색 ( 특히 , 어떤 레코드가 파일에 없다는 것을 판단 ) 하기 위해 많은 시간이 소요 특히 , 적재 밀도가 높을 수록 시간이 많이 걸림

• 검색 시간을 줄이기 위해서 , 적당한 적재 밀도의 유지가 필요함

• 삽입 /삭제를 반복하면서 환치 (displacement) 가 발생할 수 있음 next page

선형 조사 선형 조사 (Linear Probing) (3/5)(Linear Probing) (3/5)

Page 27: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 27

Hash Structures

환치 (displacement)• 자기 주소를 동거자가 아닌 레코드가 차지함으로 인해 , 자기 주소가 아닌

다른 레코드의 주소에 저장되는 것

• 다른 환치를 유발 (A 는 B 의 주소에 저장되고 , B 는 C 의 주소에 저장되고 , …)

• 탐색할 주소 수 증가 → 삽입 /검색 시간의 증가를 야기함

• 대응책 : 2- 패스 해시 파일 생성 (two-pass hash file creation)

선형 조사 선형 조사 (Linear Probing) (4/5)(Linear Probing) (4/5)

Page 28: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 28

Hash Structures

2- 패스 해시 파일• 첫 번째 패스

- 모든 레코드를 해시 함수를 통해 home address 에 저장

- 충돌이 일어나는 동거자들은 바로 저장하지 않고 별도의 임시 파일에 저장

• 두 번째 패스

- 임시 파일에 저장해 둔 동거자들을 선형 조사를 이용하여 파일에 모두 저장

• 첫 번째 패스 생성에 비해 훨씬 많은 레코드들이 원래 자기 홈 주소에 저장됨

• 파일 생성 이전에 레코드 키 값들을 미리 알 수 있는 경우에 효율적임

• 파일이 생성된 후에 레코드들이 추가될 때는 환치 (displacement) 발생

선형 조사 선형 조사 (Linear Probing) (5/5)(Linear Probing) (5/5)

Page 29: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 29

Hash Structures

별개의 오버플로우 구역 (separate overflow area) 을 할당하여 , 오버플로우된 모든 동거자들을 순차로 저장하는 방법

독립 오버플로우 구역독립 오버플로우 구역

0n

……

0i+1

1i

1i-1

0

12

01

레코드

m

……

2

1

독립오버플로 구역overflowflag

다음 가용공간

장점• 동거자가 없는 레코드에

대해서는 한번의 주소 접근만으로 레코드를 검색

• 환치 문제를 제거

단점• 오버플로우된 동거자를

접근하기 위해서는 오버플로우 구역에 있는 모든 레코드들을 순차적으로 검색

Page 30: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 30

Hash Structures

오버플로우된 동거자들을 오버플로우 구역으로 직접 해싱• 오버플로우 구역에서의 순차 검색을 피할 수 있음

• 이차 해시 함수 (second hash function): 오버플로우된 동거자들을 해슁하는 함수

해싱 과정• 일차 해시 함수에 의해 상대 파일로 해슁

→ 오버플로우가 발생하면 오버플로우 구역으로 이차 해슁

• 오버플로우 구역에서 다시 충돌이 일어나면 선형 조사를 이용

장단점• 오버플로우 구역에서 순차검색을 피할 수 있어 , 충돌 시 검색이 빠름

• 두 개의 해쉬 함수를 유지해야 하며 , 충돌이 빈번한 경우 오버플로우 구역에서 환치와 같은 선형 조사의 문제점이 다시 발생함

이중 해싱 이중 해싱 (double hashing)(double hashing)

Page 31: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 31

Hash Structures

각 주소마다 링크를 두어 오버플로우된 레코드들을 연결하는 방법• 오버플로우가 일어나면 선형 조사나 오버플로우 구역을 이용해서 저장 후 , 처음 해시

주소에 동거자를 포함하고 있는 주소에 대한 링크를 둠

• 동거자에 대한 액세스는 링크로 연결된 동거자들만 조사해 보면 됨

• 독립 오버플로우 구역에 사용할 수도 있고 , 원래의 상대 파일에 적용할 수도 있음

장점• Home address 에서의 충돌이 감소됨

• 충돌 시 순차 검색을 피할 수 있어 , 검색 시간이 단축됨

단점• 각 주소가 링크 필드를 포함하도록 확장해야 함

동거자 체인 동거자 체인 (Synonym Chaining) (Synonym Chaining) (1/2)(1/2)

Page 32: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 32

Hash Structures

동거자 체인 + 독립 오버플로우 구역 예

동거자 체인 동거자 체인 (Synonym Chaining) (Synonym Chaining) (2/2)(2/2)

-1n

·

·

i+1

-1i

i-1

·

·

·

-12

-11

링크레코드

-1m

·

·

·

·

·

-14

-13

2

-11

링크레코드

동거자오버플로우 구역

Page 33: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 33

Hash Structures

버킷에 복수 개의 레코드 저장 공간을 관리하여 , 해싱 함수는 키 값을 레코드 주소가 아닌 버킷 주소로 사상함• 하나의 해시 주소에 가능한 최대 수의 동거자를 저장할 수 있는 공간을 할당함

• 특정 해시 주소를 갖는 모든 동거자들은 그 주소의 버킷에 순차적으로 저장함

→ ( 일반적으로 ) 한 레코드를 검색하기 위하여 조사해야 될 레코드 수는 최대로 버킷 사이즈에 한정됨 ( 오버플로우 구역 탐색 , 파일 전체 탐색 불필요 )

문제점• 공간의 낭비 : 각 해시 주소에 대한 동거자의 수가 다양하고 그 차이가 아주 클 때

- 버킷 크기는 해시 주소에 대한 최대 동거자 수로 정하는 것이 보통 → 이 경우 공간 낭비가 심함

• 버킷 크기 설정

- 파일 생성 전에 데이터를 분석할 수 없을 때 , 설정이 어려움

- 버킷 크기가 충분치 않으면 오버플로우 발생 → 충돌 해결 기법 필요

버킷 주소법 버킷 주소법 (1/3)(1/3)

Page 34: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 34

Hash Structures

버킷 주소법에서의 충돌 해결• 여유 공간을 가진 가장 가까운 버킷을 사용하는 방법

→ 환치 등의 선형 조사와 동일한 단점

버킷 체인 (bucket chaining)

• 홈 버킷에서 오버플로우가 발생하면 , 별도의 버킷을 할당한 후 해당 동거자를 저장하고 홈 버킷에 이 버킷을 링크로 연결

• 장점 : 재해싱 불필요

• 단점 : 한 레코드를 탐색하기 위해서는 최악의 경우 그 홈 버킷에 연결된 모든 오버플로우 버킷을 조사해야 함

버킷 주소법 버킷 주소법 (2/3)(2/3)

Page 35: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 35

Hash Structures

성공적 탐색• 어떤 다른 방법보다도 평균 조사

수가 더 작음

실패 탐색• 성공적 탐색과 비슷하거나 더 작은

조사 수를 보임 ( 독립 오버플로우 구역과 버킷 주소법을 사용하는 경우 )

버킷 주소법 버킷 주소법 (3/3)(3/3)

-1n

·

·

i+1

-1I

i-1

···

2

-11

링크레코드레코드

-1m

-1m-1

-1

-1

-13

2

-11

링크레코드

동거자오버플로우 구역

Page 36: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 36

Hash StructuresAdvanced Hashing TechniquesAdvanced Hashing Techniques

테이블 이용 해슁 :Signature 를 사용한 신속한 해싱 방법

확장성 직접 파일 :레코드 개수가 지속적으로 증가하는 경우를 위한 , 해슁 파일의 동적 관리가 주 목적임• 가상 해싱 (Virtual Hashing)

• 동적 해싱 (Dynamic Hashing)

• 확장 해싱 (Extendible Hashing)

• 선형 해싱 (Linear Hashing)

Page 37: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 37

Hash Structures

한번의 디스크 접근으로 검색을 보장하는 방법• 해싱 테이블 : 키 → < 버킷 주소의 순열 , k- 비트 시그너쳐 (signature) 의 순열 >

생성

• 디렉토리 테이블 : < 버킷 주소 , k- 비트 시그너쳐 > 로 구성

• 해싱 테이블과 디렉터리 테이블 : 주기억 장치에 유지

• 레코드 삽입과 삭제는 시간이 많이 소요되나 , 검색은 매우 빠름

예 )k = 5 일 때 , 버킷 주소와 시그너쳐의 순열 ( 해싱 테이블 )

테이블 이용 해싱 테이블 이용 해싱 (1/3)(1/3)

키 버킷 주소 5- 비트 시그너쳐

WhiteBlueLilacRed

Green

85 87 89 91 93 …85 86 87 88 89 …85 90 95 0 5 …85 92 99 6 13 …85 86 87 88 89 …

00101 01001 10100 10111 …00110 00011 00110 10000 …01000 10100 11000 10100 …00010 11000 11110 10010 …00011 00100 10001 00111 …

Page 38: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 38

Hash Structures

삽입의 예• 버킷 크기 = 3, 각 레코드의 홈 버킷 = 85,

레코드 삽입 순서 = White, Blue, Lilac, Red, Green

• 네 번째 Red 를 삽입할 때 , 오버플로우가 발생함

- Red( 시그너쳐 00010 = 2), White( 시그너쳐 00101 = 5), Blue( 시그너쳐 00110 = 6),Lilac ( 시그너쳐 01000 = 8)

- 시크너쳐 값의 크기 ( 순서 ) 에 의해 , Red, White, Blue 는 85 번 버킷에 저장

- Lilac 은 90 번 버킷에 저장 ( 앞서의 해싱 테이블을 보면 버킷 85 다음에 버킷 90 임 )

• 레코드를 버킷에 저장할 때마다 디렉토리 테이블을 유지함

- 엔트리 = ( 버킷 번호 ( 주소 ), 시그너쳐 값 )

- 시그너쳐 값은 초기치 (11111) 에서 버킷 오버플로우가 발생한경우에만 ( 오버플로우가 처음 발생한 키의 시그너쳐 값으로 ) 변경

- Red, White, Blue 는 버킷 85 에 저장 = (85, 01000) 01000 오버플로우가 발생한 Lilac 의 시그너쳐 값

- Lilac 은 버킷 90 에 저장 = (90, 11111)

테이블 이용 해싱 테이블 이용 해싱 (2/3)(2/3)

디렉토리 테이블

버킷 주소 시그너쳐

…8485868790…

…1111101000111111111111111

Page 39: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 39

Hash Structures

검색 : 아주 효율적임• 검색할 키 ( 예 : White) 로부터 다음 정보를 생성함 ( 해싱 테이블 참

조 )

- 버킷 1(= 85), 시그너쳐 1(= 00101)

- 버킷 2(= 87), 시그너쳐 2(= 01001)

- 버킷 3(= 89), 시그너쳐 3(= 10100)

- …

• 다음을 만족하는 가장 작은 i를 구함

- 시그너쳐 i < 버킷 i의 분리 값 ( 시그너쳐 ), i = 1, 2, 3, …

- 검색 레코드는 버킷 i에 존재

• 예 ) White 검색 시 ,

85 87 89

00101 01001 10100

- 시그너처 1(00101) < 테이블 버킷 85(= 01000),따라서 , 검색할 버킷 번호는 85 임

테이블 이용 해싱 테이블 이용 해싱 (3/3)(3/3)

디렉토리 테이블

버킷 주소 시그너쳐

…8485868790…

…1111101000111111111111111

Page 40: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 40

Hash Structures

현재까지는 레코드 개수 ( 의 최대치 ) 가 고정 ( 한정 ) 된 경우를 다룸

레코드 수의 변화가 큰 경우는 ? 확장성 직접 파일

K: 어느 한 시점에서 파일에 저장된 레코드 개수

• Kmin ≤ K ≤ Kmax ( 최소 Kmin 개에서 최대 Kmax 개의 레코드를 가짐 )

• SPAN = Kmax ÷ Kmin (SPAN 이 클 때 , 즉 , 변화가 많을 때 문제가 됨 )

• K ≈ Kmin: 공간 이용률 낮음

• K ≈ Kmax: 적재 밀도가 높음 ( 저장과 검색 시간이 오래 걸림 )

- 해결 방안 : 재해싱 ( 많은 시간이 소요됨 , 재해싱 동안 액세스 못함 )

확장성 직접 파일 확장성 직접 파일 (1/2)(1/2)

Page 41: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 41

Hash Structures

확장성 파일 : 높은 SPAN 값을 가진 파일에 대한 해싱 기법

• 가상 해싱 (virtual hashing)

• 동적 해싱 (dynamic hashing)

• 확장 해싱 (extendible hashing)

• 선형 해싱 (Linear hashing)

확장성 직접 파일 확장성 직접 파일 (2/2)(2/2)

Page 42: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 42

Hash Structures

여러 개의 관련된 해싱 함수를 사용

해싱 함수 : 나머지 함수 (modular function) 를 사용• h0: 주소 = 키 mod N (N = 20N)

• 버킷의 수 = N, 버킷 크기 = C

오버플로우가 발생하면 ,

• 관련된 버킷을 분할

• 상이한 함수를 사용하여 , C+1 개의 레코드를 재해싱

• 재해싱 함수 hj: 주소 = 키 mod (2j x N), j = 0, 1, 2, ...

- h1: 주소 = 키 mod 21N

- h2: 주소 = 키 mod 22N

가상 해싱 가상 해싱 (Virtual Hashing) (1/3)(Virtual Hashing) (1/3)

Page 43: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 43

Hash Structures

가상 해싱의 예• 버킷 수 N = 100, 버킷 크기 C = 4

• 버킷 3 = [3, 103, 203, 303] 으로 만원 (full)

• 첫 번째 해싱 함수 h0 = key mod 100

새 레코드 403 삽입 시 , 오버플로우 발생

다음 해싱 함수 h1 = key mod 200 을 이용하여 버킷 분할

가상 해싱 가상 해싱 (Virtual Hashing) (2/3)(Virtual Hashing) (2/3)

버킷 3 (100 [0 ~ 99])

3103203303

버킷 3 (200 [0 ~ 99])

3203403

버킷 103 (200 [100 ~ 199])

103303

Page 44: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 44

Hash Structures

가상 해싱의 예 ( 계속 )

새로운 레코드 603, 803 삽입 시 , 버킷 3 오버플로우 발생

다음 해싱 함수 h2 = key mod 400 을 이용하여 버킷 분할

가상 해싱 가상 해싱 (Virtual Hashing) (3/3)(Virtual Hashing) (3/3)

버킷 3 (400 [0 ~ 99])

3403803

버킷 103 (200 [100 ~ 199])

103303

버킷 203 (400 [200 ~ 299])

203603

어떤 함수를 적용 ? 각 버킷에 적용된 해싱 함수를 유지해야 함 검색할 키 값에 적용할 해싱 함수 hk 를 알 수 있어야 함

Page 45: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 45

Hash Structures

파일 구성• 크기가 C 인 N 개의 버킷 ( 디스크 블록 /페이지 )

• 각 버킷을 지시하는 인덱스 ( 주기억 장치 )

동적 해싱의 예• N = 20, C = 3 일 때 , 초기 동적 해시 파일

• 초기에는 인덱스가 한 레벨 ( 레벨 0) 임

동적 해싱 동적 해싱 (Dynamic Hashing) (1/8)(Dynamic Hashing) (1/8)

Page 46: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 46

Hash Structures

두 개의 해싱 함수 사용• 해싱 함수 H0: 레벨 0 인덱스 엔트리의 한 주소로 변환 (Binary Tree 의 루트 식별 )

- H0(key) = index value (1 ~ N)

- 버킷이 계속 분할되면 , 인덱스는 N 개 Binary Tree 의 Forest 가 됨

• 비트 함수 B: 키 값을 임의 길이의 Bit String 으로 변환

- 각 인덱스 트리 내에서의 분기 결정

- 해싱 함수로 Binary Tree 를 결정하고 , Binary Tree 내에서의 검색은 비트 함수를 활용

저장 절차• 키를 레벨 0 인덱스 엔트리의 한 주소로 변환 ( 해싱 함수 H0 를 이용 )

• 인덱스 엔트리의 포인터를 통해 버킷에 접근한 후 레코드를 저장

• 버킷이 만원인 경우 , 버킷을 새로 할당하여 ( 이미 저장된 레코드들 + 새로 저장할 레코드 ) 를 분할 저장

동적 해싱 동적 해싱 (Dynamic Hashing) (2/8)(Dynamic Hashing) (2/8)

Page 47: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 47

Hash Structures

검색 절차• H0(key) 함수에 의한 값 (1 ~ N) 으로 Forest 에서 Binary Tree 의 루트를 식별하고 ,

• B(key) 함수에 의한 Bit String 값으로 인덱스 레벨 1 부터 분기를 결정함

동적 해싱 동적 해싱 (Dynamic Hashing) (3/8)(Dynamic Hashing) (3/8)

Page 48: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 48

Hash Structures

동적 해싱 파일의 삽입 예• 버킷 분할 : 분할되는 버킷이 레벨 I이면 , B(key) 의 I+1 번째 비트를 사용

- 0: 왼쪽 ( 이전 ) 버킷

- 1: 오른쪽 ( 신규 ) 버킷

동적 해싱 동적 해싱 (Dynamic Hashing) (4/8)(Dynamic Hashing) (4/8)

key H0(key) B(key)

157 2 10100 …

95 1 00011 …

88 1 01100 …

205 2 10010 …

13 1 10111 …

125 1 10001 …

6 1 01000 …

301 1 00110 …

H0 와 B 에 대한 예

Page 49: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 49

Hash Structures

동적 해싱 파일의 삽입 예 ( 계속 )

• 레코드 157, 95, 88, 205, 13 을 삽입 후의 초기 파일

동적 해싱 동적 해싱 (Dynamic Hashing) (5/8)(Dynamic Hashing) (5/8)

Page 50: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 50

Hash Structures

동적 해싱 파일의 삽입 예 ( 계속 )

• 레코드 125 를 추가로 삽입하여 버킷이 분할된 후의 파일

동적 해싱 동적 해싱 (Dynamic Hashing) (6/8)(Dynamic Hashing) (6/8)

Page 51: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 51

Hash Structures

동적 해싱 파일의 삽입 예 ( 계속 )

• 레코드 301, 6 을 추가로 삽입한 후의 파일

동적 해싱 동적 해싱 (Dynamic Hashing) (7/8)(Dynamic Hashing) (7/8)

Page 52: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 52

Hash Structures

동적 해싱의 고려사항• 함수 B 의 설계

- 레코드의 키 ( 또는 키에 대한 어떤 함수 H1) 를 유사 난수 생성기 (pseudo random number

generator) 의 초기 값으로 사용하여 정수를 생성 ( 예 : rand(srand(key));)

- 생성된 각 정수를 하나의 비트로 변환 ( 예 : 정수의 이진 표현에 대한 패리티 비트를 사용 )

• 인덱스 노드들이 메인 메모리에 광범위하게 분산되는 경우→ 트리 순회 과정에서 Page Fault 발생으로 추가적인 디스크 액세스 발생 가능성 있음

• 인덱스 Forest 가 커져서 하위 레벨 인덱스가 디스크에 저장되어야 하는 경우→ 레코드 접근 시간이 오히려 증가할 수 있음

• 개선책 : 오버플로우 버킷을 두어 버킷 분할 지연 ( 저장 공간 효율 ↑ )

동적 해싱 동적 해싱 (Dynamic Hashing) (8/8)(Dynamic Hashing) (8/8)

Page 53: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 53

Hash Structures

디렉토리와 버킷의 두 단계를 가지며 , 디렉토리는 2n 으로 증가하는 반면에 버킷은 선형적으로 증가함

두 단계 구성• 디렉토리 ( 인덱스에 해당 ): 전역 깊이 (global depth)(=d) 와 버킷에 대한 2d 개의

엔트리 (= < 해쉬 값 , 포인터 >) 로 구성되며 , 각 포인터가 반드시 상이해야 하는 것은 아님

• 버킷의 집합 ( 레코드 저장 ): 레코드들이 저장되는 공간으로서 , 지역 깊이 (local depth)(=p) 로 구성됨

• 깊이를 나타내는 d 와 p 에 대해서는 뒤쪽 슬라이드의 예제를 참조할 것

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (1/7)(1/7)

Directory

key 1

key 2

key 3

key 2n-1

key 2n

2n

Set of buckets

Page 54: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 54

Hash Structures

확장 해싱 함수 (Extendible Hashing Function)

• h: 키 유사키 (pseudo key, 고정 길이의 Bit String)

예 ) h(white) = 1001011011001110

• 버킷 깊이 : 버킷 안의 각 레코드들의 유사키가 공통으로 가지는 처음 Bit String 길이

초기 파일• N 개의 버킷일 때 ,

• d = log2(N-1) + 1, 디렉토리는 2d 개의 엔트리를 가짐

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (2/7)(2/7)

Page 55: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 55

Hash Structures

확장 해싱 파일에서의 삽입 연산

• 유사키의 처음 d 비트를 이용하여 디렉토리 액세스하고 , 해당 버킷을 찾아 삽입

• 만약 , 해당 버킷이 만원이면 ,

① 새로운 단말 ( 버킷 ) 을 할당

② 버킷 깊이가 p 이면 , 유사키의 (p+1) 번째 비트의 값에 따라 C+1 개의 레코드를 분할

③ d, p+1 의 값에 따라

- d ≥ p+1 ( 디렉토리 깊이가 분할된 버킷의 깊이를 수용하는 경우 ): 포인터들을 분할 , 이전의 버킷과 새로운 버킷 모두 p+1 의 버킷 깊이를 가짐

- d < p+1 ( 디렉토리 깊이가 분할된 버킷의 깊이를 수용치 못하는 경우 ): 디렉터리의 크기를 두 배로 늘림 (directory doubling), d←d+1

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (3/7)(3/7)

Page 56: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 56

Hash Structures

확장 해싱 파일의 예

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (4/7)(4/7)

레코드의 유사키가시작하고 있는 Bit String

Page 57: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 57

Hash Structures

d p+1: 버킷만 분할

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (5/7)(5/7)

레코드의 유사키가시작하고 있는 Bit String

Page 58: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 58

Hash Structures

d < p+1: 버킷 분할 및 디렉토리 확장

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (6/7)(6/7)

레코드의 유사키가시작하고 있는 Bit String

Page 59: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 59

Hash Structures

확장 해싱 파일에서의 검색 연산

• 유사 키의 처음 d 비트를 디렉토리에 대한 인덱스로 사용하여 디렉토리에서 찾아 레코드를 접근

• 디렉토리 검색 (Binary Search) 후 , 버킷 내에서 순차 검색

확장 해싱 파일에서의 삭제 연산

• 삭제될 버킷이 버디 버킷 (buddy bucket) 을 가지고 있고 , 그 두 버킷의 레코드들이 한 버킷 안에 들어갈 수 있다면 ,

• 하나의 버킷으로 병합한 후 , 빈 버킷을 회수하고 , 디렉토리 엔트리를 재조정함

• 버디 버킷 (buddy bucket): 해당 버킷과 같은 깊이 값 (p) 을 가지고 있고 , 그 유사키들의 처음 (p- 1) 비트들이 모두 같은 버킷 ( 분할되기 이전에 한 버킷에 속했던 버킷 )

확장 해싱 확장 해싱 (Extendible Hashing) (Extendible Hashing) (7/7)(7/7)

Page 60: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 60

Hash Structures

디렉토리를 사용하지 않는 확장성 해싱 방식

주소 공간이 확장될 때 , 해시 값을 비트 (bits) 를 사용

• 예 : 주소 공간이 4인 경우 , 2 비트 주소를 생성하는 해싱 함수를 이용

• 주소 공간이 4개의 버킷으로 구성된 것이지 4개의 디렉토리 노드가 버킷을 가리키는 것이 아님에 주의

• Why “linear”?: Overflow 가 일어날 경우 , 버킷 개수가 linear 하게 ( 하나씩 ) 증가됨

선형 해싱 선형 해싱 (Linear Hashing)(Linear Hashing)

Page 61: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 61

Hash Structures

초기 상태

삽입 과정 중 버킷 b 에 오버플로우 발생

• 첫 버킷인 버킷 a 를 분할 , 새 버킷 A 를 할당

• 오버플로우 레코드들은 오버플로우 체인 w 를 할당 받아 저장( 레코드 분산을 연기하는 개념임 )

• 버킷 a 와 새 버킷 A 의 주소는 3 비트로 변경

선형 해싱의 예 선형 해싱의 예 (1/3)(1/3)

Page 62: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 62

Hash Structures

버킷 d 에 오버플로우 발생

• 두 번째 버킷인 b 를 분할 , 새 버킷 B 를 할당

• 오버플로우 버킷 x 생성

버킷 x 에 오버플로우 발생

• 세 번째 버킷인 버킷 c 를 분할 , 새 버킷 C 를 할당

• 오버플로우 버킷 y 생성

선형 해싱의 예 선형 해싱의 예 (2/3)(2/3)

Page 63: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 63

Hash Structures

버킷 B 에 오버플로우 발생

• 네 번째 버킷인 버킷 d 를 분할 , 새 버킷 D 를 할당

• 오버플로우 버킷 z 생성

• 다음에 분할될 버킷을 가리키는 포인터는 다시 버킷 a 를 가리킴

• 모든 버킷이 3비트 해싱 함수를 사용하게 됨( 새로운 버킷을 생성하여 접근하기 위해서는 4- 비트 해싱 함술 h4() 를 이용하는

새로운 사이클에 들어갈 준비가 된 것임

선형 해싱의 예 선형 해싱의 예 (3/3)(3/3)

Page 64: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 64

Hash Structures

두 개의 해싱 함수 사용

• 현재 주소 길이를 가진 버킷에 대해서는 hd(k) 사용

• 확장 버킷에 대해서는 hd+1(k) 를 사용

→ 레코드의 검색을 위해 해당 레코드에 어떤 해싱 함수를 적용해야 하는지를 알아야 함

키 값 k 를 가지는 레코드를 포함하는 버킷의 주소 (address) 를 찾기 위한 프로시저

if (hd+1(k) p)

address = hd(k);

else

address = hd+1(k);

선형 해싱에서의 검색선형 해싱에서의 검색

p = 다음 분할될 버킷을 가리키는 포인터

Page 65: File Structures  강의

Advanced Data Structuresby Yang-Sae Moon

Page 65

Hash Structures

액세스하고 유지해야 될 디렉토리가 없음

오버플로우 체인은 ( 실제로 ) 많이 길어지지 않음

• 오버플로우가 일어날 때마다 분할을 통해 주소 공간을 점차 확장하기 때문

버킷 크기를 50 이라 할 때 , 한번 검색 연산에 필요한 평균 디스크 접근 수는 거의 1 로 밝혀짐 ( 실험 결과 )

저장 공간 활용도는 확장 해싱이나 동적 해싱 보다는 낮음 ( 평균 60%)

선형 해싱의 특징선형 해싱의 특징