Bloom Filter — Bộ lọc xác suất
1. Cơ chế cơ bản (m=64, k=3)
Bảng 64 bit cố định, 3 hàm hash. Add một key bật 3 bit. Check một key
nhìn vào đúng 3 bit đó — nếu cả 3 đều bật → "có thể có"; có bit nào
tắt → "chắc chắn không có". Đây là demo nhỏ để thấy cơ chế trước khi
vào vấn đề kích thước ở phần 2.
Bảng 64 bit, k = 3 hàm hash.
Đã thêm:
Add: bật 3 bit ứng với 3 hash. Check: cả 3 bit cùng bật → "có thể có"; có bit nào tắt → "chắc chắn không có".
2. Saturation — thiết kế đúng size để giữ FP target
Bảng 64 bit ở phần 1 saturate rất nhanh (n=20 đã có FP ~23%). Phần này
cho biết n dự kiến và FP target → tự
động tính m, k theo công thức:
m = -n·ln(p) / (ln 2)²,
k = (m/n)·ln 2.
Sau đó add key và đo FP đo thực để xác nhận giữ trong tầm kiểm soát.
2.1. Thiết kế bảng
…
2.2. Trạng thái thực tế
Đã add
0 / 100
Bit bật
0%
FP dự đoán (công thức)
0%
FP đo thực (1000 probe)
—
Thiết lập n=100, FP 1% → bảng tự động sized. Bắt đầu add key.
2.3. Bảng bit (đen = bật)
…
3. Skip List — search nhảy tầng (mục 2 README)
Linked list nhiều tầng: L0 chứa tất cả phần tử đã sắp xếp; tầng trên chỉ giữ một số node, mỗi tầng bỏ qua một nửa (xác suất).
Search đi từ tầng cao xuống, mỗi tầng nhảy phải tối đa khi còn ≤ target, rồi xuống tầng dưới. Trung bình O(log n) — chính là cách Redis ZSET tìm trong sorted set.
Mảng 10 phần tử [3,6,7,9,12,17,19,21,25,26] với 4 tầng (xây minh họa). Mỗi node vẽ ô vuông; '─────' = bỏ qua (skip).