해시테이블

Fullfill Heart, Design Dream
커뮤니티
공지사항
홈페이지 공지사항을 확인하세요.

해시테이블


해싱이란 슬롯사이트 하나의 값을 상징하는 특정한 길이의 키로 변환하는 것이다.
해시테이블(Hash Table)
key와 Value로 구성된 테이블로 주로 검색에 효율적이고 삽입, 삭제를 용이하게 할 수 있다.
일반적으로 해시테이블의 검색, 추가, 삭제는 모두 O(1)이다.
“John Smith”의 전화번호를 찾기 위해 해시함수를 이용하여 key값을 도출한다. 그림을 보면 해시함수를 이용해 “02”의 키 값을 따라 전화번호를 확인할 수 있다는 걸 볼 수 있다.

해시함수는 뭘까?
해시함수는 문자열을 입력받아 고유한 숫자(키값)으로 슬롯사이트 반환하여 해시테이블에 고유한 키값을 갖도록한다. 해당 키가 바로 인덱스 역할을 하는 것이다.
만약 다른 이름이 해시함수를 통해 우연히 같은 키 값을 갖게될 수도 있다. 해시테이블에는 이미 해당 키의 위치에 전화번호가 있기 때문에 충돌이 발생한다. 이를 “해시충돌”이라고 한다.
해시충돌
해시충돌이란
다른 문자열가 해시함수를 통해 만들어진 키값이 기존에 해시테이블에 존재할 때 발생하는 오류이다. 즉, 같은 키값을 가진 두 문자열이 자신의 키 값을 슬롯사이트 찾을때 문제가 발생하는 것이다.

예를 들어, 위의 그림처럼 두 이름이 같은 해시 값을 가진다면 어떻게 될까

“John Smith”, “Sandra Dee”의 키값 : 152 &rArr같은 키값을 가짐

해시 테이블에는 152 키값에 해당하는 데이터가 “John Smith”의 전화번호가 담겨있기에 “Sandra Dee”는 자신의 번호를 찾지 못하는 문제가 발생한다.
이를 처리하기 위해서 다양한 해결 방법이 존재한다.
해시 충돌 해결 방법
1. 체이닝(Chaining)
체이닝은 해시 충돌이 발생했을 때, 충돌한 슬롯사이트 데이터를 연결리스트로 관리하는 방법이다.
해시테이블의 각 슬롯은 하나의 연결리스트를 가지고 충돌이 발생한 키와 값은 노드로 연결되어 존재한다.
1.1 체이닝의 작동원리

충돌 발생 시: 만약 두 개 이상의 키가 같은 해시값을 가질 경우, 해당 슬롯에 연결 리스트를 만들어 충돌한 데이터를 리스트에 추가한다.
데이터 검색 시: 데이터를 검색할 때는, 먼저 해당 슬롯의 연결 리스트를 탐색하여 원하는 데이터를 찾는다.

1.2 체이닝의 장단점

장점 :체이닝은 아주 슬롯사이트 간단한 방법으로 리스트를 연결만 해주면 충돌하더라도 이를 방지할 수 있다.
단점 : 아주 많은 충돌이 발생할 경우, 연결 리스트의 길이가 길어져 검색속도가 느려질 수 있다. 최악의 경우, 한 슬롯에 모두 저장되면 O(n)의 시간복잡도를 갖게된다.

2. 개방주소법(Open Addressing)
개방 주소법은 충돌 발생시 해시 테이블의 다른 빈 슬롯을 찾아 충돌한 데이터를 채우는 방법이다.
2.1 개방주소법의 여러 방식

선형 탐사(Linear Probing): 충돌이 발생하면, 해시테이블에서 슬롯사이트 충돌한 슬롯 이후의 빈 슬롯을 찾아 데이터를 저장한다. 예를 들어 슬롯3에서 충돌이 발생하면 슬롯4, 슬롯5.. 순으로 빈 슬롯을 찾는다.
제곱 탐사(Quadratic Probing): 충돌이 발생한 경우, 선형적으로 탐사하는 대신, 제곱수로 증가하는 간격으로 빈 슬롯을 찾는다. 즉, 슬롯 3에서 충돌이 발생하면, 슬롯 4, 7, 12, ... 순으로 빈 슬롯을 탐색합니다.
이중 해싱(Double Hashing): 해시 충돌이 발생했을 때, 다른 해시 함수를 슬롯사이트 사용하여 새로운 해시값을 계산한 후, 해당 슬롯에 데이터를 저장하는 방식이다.

2.2 개방주소법 장단점

장점 : 해시테이블 내에 값을 저장하므로 추가적인 자료 구조가 필요없다.
단점 : 충돌이 많아지면 빈 슬롯을 찾는데 시간이 오래걸릴 수 있으며, 해시테이블이 거의 가득차면 비효율적일 수 있다.

해시테이블 장단점
3.1 장점

빠른 데이터 접근 : 해시테이블은 평균적으로 조회시 O(1)의 시간복잡도를 갖는다. 매우 빠른 검색이 가능하다.
유연성 : 해시테이블은 다양한 형식을 슬롯사이트 키값으로 이용할 수 있다.
응용 : 캐싱, 데이터베이스 인덱싱, 중복 확인 등 여러 분야에서 사용 가능하다.

캐싱 : 웹브라우저나 서버에서 자주 사용되는 데이터를 빠르게 검색하기위해 해시테이블을 사용한다.
중복 확인 : 파일 시스템이나 대용량 데이터 세트에서 중복 데이터를 빠르게 조회할 때 해시테이블을 사용한다.



3.2 단점

해시 충돌 : 해시 충돌이 발생하면 추가적인 작업이 필요하다.
메모리 사용량 : 충분한 크기의 테이블을 만들어주어야하므로 메모리 내 슬롯사이트 공간을 많이 사용할 수 있다.


참고사이트

0 Comments