충돌 해결의 종류 및 특징 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 버킷의 크기결정 : 시스템의 특성에 의존(버퍼크기, 디스크의 섹터와 트랙의 용량, 하드웨어의 액세스 시간 등) (일반적으로)디스크로부터 한번에 읽어들일 수 있는 클러스터 단위만큼. 장점 : 평균 검색횟수 줄임 단점 : 해시함수가 적절하지 못할 경우 데이터가 저장이 되지 않은 경우 발생(메모리 낭비) 버킷에 따라 데잍가 가득차는 경우와 비는 경우의 불균형을 초래할 수 있음