1. Bloom Filter란?
- 블룸 필터(Bloom Filter)는 원소가 집합에 속하는지 여부를 검사하는 확률적 자료 구조입니다.
- 개발: 1970년 Burton Howard Bloom에 의해 고안
- 용도: 빠른 멤버십 테스트 (원소가 집합에 있는지 확인)
- 특징: 공간 효율적이지만 확률적 오류 발생 가능
1.1 핵심 특성
블룸 필터의 가장 중요한 특성은 오류의 비대칭성입니다:
| 판단 결과 | 실제 상황 | 오류 발생 가능성 |
|---|---|---|
| "속한다" | 실제로 속하지 않음 | ✅ 긍정 오류(False Positive) 가능 |
| "속하지 않는다" | 실제로 속함 | ❌ 부정 오류(False Negative) 절대 발생 안 함 |
긍정 오류 (False Positive)
블룸 필터가 "원소가 집합에 속한다"고 판단했더라도, 실제로는 속하지 않을 수 있습니다.
하지만 "속하지 않는다"고 판단하면 100% 확실하게 속하지 않습니다.
1.2 제약사항
- 추가만 가능: 집합에 원소를 추가하는 것은 가능
- 삭제 불가능: 집합에서 원소를 삭제하는 것은 불가능
- 오류 확률 증가: 원소 수가 증가할수록 긍정 오류 발생 확률 증가
2. 구조
2.1 기본 구성 요소
블룸 필터는 두 가지 핵심 요소로 구성됩니다:
1. 비트 배열
m비트 크기의 비트 배열
초기 상태: [0, 0, 0, 0, 0, 0, 0, 0, ...]
└────────── m개 ──────────┘
2. 해시 함수
k개의 서로 다른 해시 함수
h₁(x), h₂(x), h₃(x), ..., hₖ(x)
각 해시 함수는:
- 입력: 원소
- 출력: 0 ~ m-1 범위의 값 (균등 분포)
2.2 예시
블룸 필터 설정: m = 18비트, k = 3개 해시 함수
비트 배열:
[0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
원소 x, y, z가 추가된 상태
해시 함수 요구사항
각 해시 함수는 m가지의 값을 균등한 확률로 출력해야 합니다. 이는 비트 배열 전체를 골고루 사용하기 위함입니다.
3. 연산
3.1 원소 추가 (Add)
원소를 추 가하는 과정:
- 추가하려는 원소에 대해 k개의 해시 값을 계산
- 각 해시 값에 대응하는 비트를 1로 설정
예시: 원소 'apple' 추가 (m=18, k=3)
1. 해시 계산:
h₁('apple') = 2
h₂('apple') = 7
h₃('apple') = 13
2. 비트 설정:
이전: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
↓ ↓ ↓
이후: [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]