해싱(Hashing)은 키-값 쌍을 저장하고 검색하는 데 사용되는 방법이다. 해싱은 데이터 구조인 해시 테이블을 사용하여 데이터를 저장하고 검색한다.
해싱의 핵심 개념은 해시 함수이다. 해시 함수는 키를 입력으로 받아 정수인 해시 코드를 반환한다. 이 해시 코드는 저장된 데이터의 인덱스로 사용된다. 따라서 해시 함수는 키-값 쌍을 해시 테이블의 특정 위치에 연결한다.
해싱은 일반적으로 다음과 같은 시나리오에서 매우 효과적이다:
- 데이터의 크기가 매우 큰 경우: 해싱은 키에 대한 고정 크기의 해시 코드를 생성하므로, 데이터의 크기에 관계없이 데이터를 저장하고 검색하는 데 매우 효율적이다.
- 빠른 검색이 필요한 경우: 해싱은 평균적으로 O(1)의 시간 복잡도를 가진다. 즉, 데이터의 크기에 관계없이 일정한 검색 시간을 보장한다.
그러나 해싱에는 몇 가지 단점도 있습니다. 먼저, 해시 충돌이 발생할 수 있다. 이는 두 개 이상의 키가 동일한 해시 코드를 가질 때 발생하는데, 이 문제를 해결하기 위한 여러 전략이 있다. 또한 해시 테이블은 메모리를 많이 사용하는 경향이 있으며, 이는 메모리가 제한적인 시스템에서 문제가 될 수 있다.
Java에서는 HashMap이라는 내장된 클래스를 사용하여 해싱을 구현할 수 있다. HashMap 클래스는 키와 값을 저장하는 데이터 구조로서, 키는 고유한 값이어야 한다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// HashMap 객체 생성
HashMap<String, Integer> map = new HashMap<>();
// 키-값 쌍 추가
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Cherry", 30);
// 키를 사용하여 값을 검색
int value = map.get("Banana");
System.out.println("Banana의 값: " + value);
// 키를 사용하여 값 수정
map.put("Banana", 25);
value = map.get("Banana");
System.out.println("수정된 Banana의 값: " + value);
}
}
HashMap 객체인 **map**은 문자열 키와 정수 값 쌍을 저장한다. put 메소드를 사용하여 키-값 쌍을 추가하고, get 메소드를 사용하여 키에 해당하는 값을 검색한다. 해시맵에서는 키를 사용하여 값을 직접 접근할 수 있으므로, 검색 작업은 빠르게 수행된다.
'CS > 알고리즘' 카테고리의 다른 글
스택(Stack) (0) | 2023.06.07 |
---|---|
이진 검색 트리(Binary Search Tree, BST) (0) | 2023.05.30 |
이진 검색(Binary Search) (0) | 2023.05.30 |
선형 검색(Linear Search) (0) | 2023.05.30 |
너비 우선 탐색(BFS) (0) | 2023.05.30 |