Hash Map

Hash Map HashMap은 키-값 쌍을 저장하고 관리하는 연관 배열의 구현체로, 효율적인 검색, 삽입, 삭제 연산을 제공한다. HashMap은 해시 함수를 사용하여 키를 배열의 인덱스로 변환하고, 해당 인덱스에 값을 저장하는 데이터 구조이다. 이는 키를 통해 빠르게 값을 검색할 수 있게 해준다. https://www.geeksforgeeks.org/load-factor-in-hashmap-in-java-with-examples/ 특징 키-값 쌍 저장: 각 데이터는 고유한 키와 연관된 값으로 저장된다. 빠른 검색: 평균적으로 O(1) 시간 복잡도로 데이터를 검색할 수 있다. 동적 크기 조정: 데이터 양에 따라 자동으로 크기를 조정한다. 널(null) 허용: 대부분의 구현에서 널 키와 널 값을 허용한다. 장점 빠른 접근 및 수정: 키를 통한 빠른 데이터 접근과 수정이 가능하다. 유연성: 다양한 타입의 키와 값을 저장할 수 있다. 메모리 효율성: 데이터 양에 따라 동적으로 크기를 조절한다. 단점 충돌 가능성: 서로 다른 키가 같은 해시 값을 가질 수 있어 충돌이 발생할 수 있다. 순서 보장 없음: 데이터의 삽입 순서가 보장되지 않는다. 메모리 오버헤드: 해시 테이블 구조로 인한 추가적인 메모리 사용이 있을 수 있다. 응용 데이터베이스 인덱싱 캐시 구현 심볼 테이블 관리 빠른 데이터 검색이 필요한 다양한 애플리케이션 동작 원리 해시 함수: 키를 입력받아 배열의 인덱스로 변환한다. 충돌 해결: 서로 다른 키가 같은 인덱스를 가리킬 때 충돌을 해결하는 방법을 사용한다. 구성 요소 버킷: 실제 데이터를 저장하는 배열의 각 요소. 키(Key): 데이터를 식별하는 고유한 값. 값(Value): 키와 연관된 실제 데이터. 해시 함수: 키를 해시 코드로 변환하는 함수. 구현 방식 일반적으로 배열과 연결 리스트를 조합하여 구현한다. 배열은 버킷을 저장하고, 각 버킷은 연결 리스트로 충돌을 해결한다. ...

October 9, 2024 · 2 min · Me

Cuckoo Hash Table

Cuckoo Hash Table Cuckoo Hash Table은 해시 충돌 문제를 해결하기 위해 개발된 해시 테이블의 한 종류로, 두 개 이상의 해시 함수를 사용하여 각 키에 대해 여러 개의 가능한 위치를 제공한다. 특징 다중 해시 함수: 일반적으로 두 개 이상의 해시 함수를 사용한다. 결정적 성능: 최악의 경우에도 일정한 시간 복잡도를 보장한다. 동적 재배치: 충돌 발생 시 기존 항목을 다른 위치로 이동시킨다. 장점 빠른 검색 속도: O(1) 시간 복잡도로 검색 연산을 수행한다. 공간 효율성: 높은 로드 팩터를 유지할 수 있다. 삭제 연산 지원: Bloom Filter와 달리 효율적인 삭제가 가능하다. 단점 삽입 연산의 복잡성: 최악의 경우 무한 루프에 빠질 수 있어 재해싱이 필요할 수 있다. 구현의 복잡성: 일반 해시 테이블에 비해 구현이 더 복잡하다. 응용 데이터베이스 인덱싱 네트워크 라우팅 테이블 캐시 시스템 스팸 필터링 동작 원리 삽입: ...

October 9, 2024 · 3 min · Me

Bloom filter

블룸 필터 (Bloom filter) 블룸 필터(Bloom Filter)는 공간 효율적인 확률적 데이터 구조로, 원소가 집합에 속하는지 여부를 빠르게 확인하는 데 사용된다. 1970년 Burton Howard Bloom이 고안한 이 구조는 **거짓 양성(false positive)**은 허용하지만 **거짓 음성(false negative)**은 절대 발생하지 않는다. 블룸 필터는 빠른 검색과 극도의 공간 효율이 필요한 시스템에서 필수적이다. 특히 대용량 데이터 처리, 실시간 애플리케이션, 메모리 제약 환경에서 강력한 성능을 발휘한다. 다만 정확성이 절대적이라면 전통적 해시 테이블이 더 적합하다. 핵심 구성 요소 비트 배열(Bit Array): 모든 비트가 0으로 초기화된 배열 (크기 m) 해시 함수(Hash Functions): 원소를 비트 배열의 인덱스로 매핑하는 k개의 독립적 해시 함수 동작 과정 삽입(Add) 원소를 k개의 해시 함수로 해싱 → 각 결과값을 비트 배열의 인덱스로 사용 → 해당 위치의 비트를 1로 설정. 예시: 원소 “apple"을 3개의 해시 함수로 해싱 → 인덱스 1, 4, 7 → 비트 배열 [0,1,0,1,0,0,1,0,0,0] 갱신. ...

October 9, 2024 · 4 min · Me