자Hash란?
데이터 관리, 유지를 위한 자료구조.
전화번호부, 투표시스템에 사용되기도 함.
만약 내가 Apple, Banana, Cow라는 세 개의 단어를 입력 시
이 단어는 Hash 함수를 거쳐, Hash code가 된다.
아래의 표를 참고해보자.
Index | Value |
A | Apple |
B | Banana |
C | Cow |
D | NULL |
Hash함수가 어떻게 구현이 되었는지 대충 느낌이 올 것이다.
근데 만약 여기서 ABCD라는 단어를 추가로 입력하게 된다면 어떻게 될까?
Hash Table에 A인덱스에는 이미 Apple이라는 Value가 있다.
그럼 이때 충돌이라는 현상이 발생하게 된다.
충돌을 해결하는 굉장히 많은 알고리즘이 있다.
하지만 이 글에서는 가장 대중적인 분리연결법(Separate Chaining)을 사용할 것이다.
분리연결법은 한마디로 Linked List를 이용하여 Value를 링크 시켜서 여러 값을 넣게 하는 것이다.
Linked List를 모른다면
Index | Value |
A | ABCD -> Apple |
B | Banana |
C | Cow |
D | NULL |
Linked list를 통하여 이런식으로 입력이 된다.
A라는 Index에 Head(첫번째 값)는 ABCD가 되고, ABCD는 Apple 이라는 값을 가리킨다.
이 방식은 Data가 허용하는한 무한대로 늘릴 수 있다.
하지만 데이터의 부피를 많이 차지할 수 있어서 메모리 문제를 야기할 수 있다.
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
메이커스페이스 레이저커팅기 이용방법 (0) | 2021.03.14 |
---|---|
[퓨전360] 3D모델링 파일을 dfx 파일로. 레이저 커팅하기 (0) | 2021.03.11 |
[Fusion360] 3D 모델링으로 조립 가능한 MDF 상자 만들기 (0) | 2021.03.10 |
[자료구조] Single Linked List 사용법, 동적할당 대신 사용할 수 있는 배열 (0) | 2021.01.28 |
[자료구조] 간단한 Linked List 설명 (0) | 2021.01.16 |
댓글