140 likes | 344 Views
충돌 해결의 종류 및 특징. 20024345 최현경. 충돌해결전략 (collision resolution strategy). 완전해시 (perfect hashing) : 한 개의 데이터 영역에 한 개의 키만이 대입 ->( 일반적 ) 구현불가능 버킷 크기 크게 -> 메모리 용량 낭비 Open addressing( 개방주소법 ) : 오버플로우가 일어났을 때 다른 데이터주소로 다시 해시 시키는 방법 ( 반복 수행 )
E N D
충돌 해결의 종류 및 특징 20024345 최현경
충돌해결전략(collision resolution strategy) • 완전해시(perfect hashing) : 한 개의 데이터 영역에 한 개의 키만이 대입 ->(일반적) 구현불가능 • 버킷 크기 크게 -> 메모리 용량 낭비 • Open addressing(개방주소법) : 오버플로우가 일어났을 때 다른 데이터주소로 다시 해시 시키는 방법(반복 수행) • Closed addressing(폐쇄주소법,체인법) : 같은 데이터 주소 내에서 끝까지 해결을 보는 방법
개방주소법(Open Addressing)의 장점 • 단순 • 포인터 미사용으로 속도 면에서 큰 이득(체인법에서는 사용) • 별도의 데이터 스트럭쳐 불필요(ex, linked list)
Linear probing(선형 검색법)(1/2) • 충돌 해결하는 가장 간단한 방법 • 충돌시 새 레코드키의 저장 기억공간을 찾기 위해 충돌이 일어난 곳에서부터 차례대로 검색 -> 첫번째 빈 영역에 키 저장(1차원 배열 형태) • 빈공간 존재하지 않으면 처음 번지로 돌아감(원형탐색) • 환치 발생(단점) • 해시 테이블 구조가 간단(장점)
Linear probing(선형 검색법)(2/2) • 89,18,49,58,69를 일의자리의 숫자만을 취하는 해시함수 사용
Quadratic Probing(2차 검색법)(1/2) • 제1밀집(primary clustering:테이블이 상대적으로 비어있어도 한곳에 몰려있는 현상)를 제거하는 방법 • 원래 주소로부터 다음 주소를 결정하는 거리가 1,4,9,16,... 의 떨어진 거리만큼 차례대로 검색. • 테이블의 크기가 소수여야 함(테이블의 반 정도의 영역만이 탐색가능), 아닐 경우 탐색영역 현저히 감소 • Ex, if table size = 16, 단지 처음 충돌 일어난 장소에서부터 1,4,9번째만이 탐색에 사용됨. • Secondary clustering 발생(단점) • 같은 위치로 해시된 키들은 그 이후에 탐색하는 위치가 같음을 의미
Quadratic Probing(2/2) • Using Quadratic Probing
무작위 검색법(Random probing) • 충돌을 유발한 키의 저장공간을 찾을 때까지 난수 계산 프로그램을 실행->해시테이블의 홈 주소를 다음 후속 주소로 택함.
이중해싱(Double Hashing) • 첫번째 해싱함수의 결과에 두번째의 해싱함수를 적용시킴. • A0=h1(키) • A1=A0+h2(키) mod 파일의 크기 • 재해싱된 주소는 메인 파일의 주소(또는 오버플로우 구역)가 될 수 있다 • 주의:적재인자(load factor)가 크다(거의 80%) 이중해싱이 선형조사보다 낫다
폐쇄 주소법(closed probing) • 체인법이라고도 함(Chaning) • 같은 해시값을 갖는 모든 레코드를 리스트로 만들어 관리 • 장점 • 충돌을 비교적 쉽게 다룰수 있음 • 자신만의 linked list를 가지고 있어 secondary clustering이라 불리는 데이터의 치우침 현상방지 • 데이터 영역의 동적 할당
해시 체이닝(Hash Chanining) • 해시 함수에 의해 같은 기억공간에 할당되어 충돌이 발생한 레코드를 연결 리스트로 연결하는 방법 • 테이블 : 포인터 배열로 만듦 • 각버켓에 할당되는 레코드들 : 체인으로 연결. • 해시테이블에서의 삽입,삭제 연산 용이 • 충돌횟수 감소 시키지 못하나 다른 방법에 의해 해시테이블을 검색 할때 발생소요시간 감소 가능. • 구조가 복잡, 기억장소 소모량이 많다(단점)
Chanining with Coalescing Lists(동거자) • 대개 버킷과 함께 사용 • 한 버킷에서 오버플로우가 일어나면 다음의 빈 버킷을 찾아 그곳에 오버플로우된 레코드를 넣음 • 그쪽과 원래 해시된 버킷을 포인터로 연결. • Load factor가 증가할수록 검색시간도 증가
Chanining with Separate Overflow Area(독립 오버플로 구역) • 오버플로우된 레코드들을 별도의 오버플로우 지역에 저장하는 방법 • 데이터 추가삭제가 빈번한 경우 데이터 처리 간단, 성능 좋음. • But 오버플로 지역이 prime data area와 다른 실린더에 존재하는 경우에는 검색시간이 급속히 증가 • 재배치시 부하 줄일수 있음 • 체계적이면서 쉽게 파일 확장 가능
Using buckets • 버킷의 크기결정 : 시스템의 특성에 의존(버퍼크기, 디스크의 섹터와 트랙의 용량, 하드웨어의 액세스 시간 등) • (일반적으로)디스크로부터 한번에 읽어들일 수 있는 클러스터 단위만큼. • 장점 : 평균 검색횟수 줄임 • 단점 : 해시함수가 적절하지 못할 경우 데이터가 저장이 되지 않은 경우 발생(메모리 낭비) • 버킷에 따라 데잍가 가득차는 경우와 비는 경우의 불균형을 초래할 수 있음