Bloom filter là một cấu trúc dữ liệu xác suất được thiết kế để kiểm tra hiệu quả xem một phần tử có thuộc về một tập hợp hay không. Nó được phát minh bởi Burton Howard Bloom vào năm 1970 và đã trở thành một công cụ cơ bản trong khoa học máy tính nhờ khả năng quản lý các tập dữ liệu lớn với mức tiêu thụ bộ nhớ tối thiểu. Khác với các cấu trúc dữ liệu truyền thống như bảng băm hoặc cây tìm kiếm nhị phân, bloom filter có thể đưa ra câu trả lời chắc chắn khi một phần tử không có trong tập hợp, nhưng chỉ đưa ra câu trả lời xác suất khi một phần tử có trong tập hợp. Điều này có nghĩa là mặc dù có thể xảy ra kết quả dương tính giả, nhưng không thể có âm tính giả.
Khái niệm cốt lõi của bloom filter xoay quanh một mảng các bit, ban đầu tất cả được đặt là 0, và một loạt các hàm băm. Khi một phần tử được thêm vào bloom filter, nó được truyền qua mỗi hàm băm để tạo ra nhiều vị trí trong mảng bit. Các bit ở những vị trí này sau đó được đặt thành 1. Để kiểm tra xem một phần tử có trong tập hợp hay không, nó lại được băm bằng các hàm tương tự và các bit tương ứng được kiểm tra. Nếu tất cả các bit ở những vị trí này là 1, phần tử được coi là có thể có trong tập hợp; nếu bất kỳ bit nào là 0, phần tử chắc chắn không có trong tập hợp.
Một trong những ưu điểm đáng kể của bloom filter là hiệu quả về không gian. Chúng yêu cầu ít bộ nhớ hơn đáng kể so với các cấu trúc dữ liệu khác cho cùng một nhiệm vụ, đặc biệt khi số lượng phần tử tăng lên. Ví dụ, chỉ cần dưới 10 bit cho mỗi phần tử để đạt được xác suất dương tính giả 1%, bất kể số lượng phần tử trong tập hợp. Điều này làm cho bloom filter đặc biệt hữu ích trong các ứng dụng mà việc sử dụng bộ nhớ là một vấn đề quan trọng, chẳng hạn như bộ định tuyến mạng, hệ thống cơ sở dữ liệu và hệ thống phân tán.
Tuy nhiên, bloom filter cũng có một số hạn chế. Không thể xóa các phần tử khỏi tập hợp là một nhược điểm chính, vì việc xóa các bit đã được đặt bởi nhiều phần tử sẽ dẫn đến âm tính giả. Các biến thể như bloom filter đếm đã được phát triển để giải quyết vấn đề này, cho phép xóa các phần tử bằng cách duy trì số lần mỗi bit đã được đặt. Ngoài ra, tỷ lệ dương tính giả tăng lên khi thêm nhiều phần tử, điều này có nghĩa là kích thước của mảng bit và số lượng hàm băm phải được chọn cẩn thận dựa trên số lượng phần tử dự kiến và tỷ lệ dương tính giả có thể chấp nhận được.
Trong các ứng dụng thực tế, bloom filter đã được sử dụng rộng rãi trong nhiều lĩnh vực. Ví dụ, trong Bitcoin, chúng được sử dụng để tăng cường quyền riêng tư trong các ứng dụng Xác minh Thanh toán Đơn giản hóa (SPV) bằng cách cho phép người dùng truy vấn giao dịch mà không tiết lộ địa chỉ của họ. Các mạng phân phối nội dung như Akamai sử dụng bloom filter để quản lý lưu trữ bộ nhớ đệm một cách hiệu quả, giảm tải cho máy chủ bằng cách tránh truy xuất dữ liệu không cần thiết. Mặc dù có tính chất xác suất và những hạn chế, bloom filter vẫn là một công cụ vô giá trong việc thiết kế các hệ thống hiệu quả và có khả năng mở rộng.