Chaining 개념
아이디어는 해시 테이블의 각 셀이 동일한 해시 함수 값을 가진 연결된 레코드 목록을 가리키도록 만드는 것입니다.
- 충돌이 발생한 key들은 한 위치에 모여 저장 (linked list 이용)
- Chain (linked list)를 이용하여 충돌 문제를 해결하는 방법 -> Chaining의 이유
- 두 가지 방법
- Separate Chaining
- Coalesced Chaining
Separate Chaining(분리 체인법)
충돌이 발생하면 link로 연결
![](https://velog.velcdn.com/images/gyuzic/post/428e4fc8-2fbe-41dc-ab9d-7b7316358648/image.png)
Coalesced Chaining(Open Addressing)(합병 체인법)
Separate Chaining과 마찬가지로 Open Addressing은 충돌을 처리하는 방법이다. Open Addressing에서는 모든 요소가 해시 테이블 자체에 저장된다. 따라서 어느 시점에서든 테이블의 크기는 총 키 수보다 크거나 같아야 한다.
충돌이 발생할 경우
- 비어 있는 위치 중 맨 아래 (주소가 가장 큰 것) 를 선택
Hash Table 구성요소
- HA
- record
- link
![](https://velog.velcdn.com/images/gyuzic/post/23c7281c-add1-4456-95c5-7e6fc57358ac/image.png)
LISCH(Late Insertion Standard Coalesced Hashing) Algorithm
예시: k mod 5, N: 5, (1, 5, 21, 10, 15 삽입)
![](https://velog.velcdn.com/images/gyuzic/post/a68d67db-2dfe-475b-98d0-2d3fdede8d52/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/97fdd2f7-beb3-466a-bd6e-3de0d9e1f984/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/8509ac55-24bd-4d4d-972a-a698e9dc2c2d/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/6704c745-db48-44ca-8d10-2885bea35e23/image.png)
EISCH(Early Insertion Standard Coalesced Hashing) Algorithm
예시: k mod 5, N: 5, (1, 5, 21, 10, 15 삽입)
![](https://velog.velcdn.com/images/gyuzic/post/3c1a4d84-7b6f-42d1-8e22-fedc15fda684/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/65f1a33d-1c5f-40f9-9ae7-e1e2c271abbd/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/ad570d66-db32-4618-a8cb-11a8adead0ee/image.png)
![](https://velog.velcdn.com/images/gyuzic/post/5fe254ca-4306-4fb4-b565-83f8ce30b25f/image.png)
LICH(Late Insertion Coalesced Hashing) Algorithm
LISCH 방법과 비슷하나 Cellar 영역이 있어서 충돌이 발생하면 Cellar 영역에 추가한다.
![](https://velog.velcdn.com/images/gyuzic/post/d9de41b7-296d-48ab-9621-6819bcfd5f3a/image.png)
다음시간은 Delete를 알아보도록 하겠습니다.