Video: Lớp học phép thuật tập 1: Những học sinh mới. 2025
Tâm điểm của nhiều thuật toán phát trực tuyến là các bộ lọc Bloom. Được tạo ra gần 50 năm trước bởi Burton H. Bloom, vào thời điểm khoa học máy tính vẫn còn khá trẻ, ý định ban đầu của người sáng tạo thuật toán này là thương mại không gian (bộ nhớ) và / hoặc thời gian (phức tạp) so với cái mà ông gọi là lỗi cho phép. Tài liệu gốc của ông có tiêu đề Không gian / thời gian bị đánh đổi trong mã hoá Hash với lỗi cho phép.
Bạn có thể tự hỏi về không gian và thời gian mà Bloom xem xét động lực cho các thuật toán của mình. Hãy tưởng tượng rằng bạn cần phải xác định liệu một phần tử đã xuất hiện trong một luồng sử dụng một số cấu trúc dữ liệu được thảo luận trước đó. Tìm một cái gì đó trong một dòng có nghĩa là ghi âm và tìm kiếm là nhanh, do đó một bảng băm có vẻ như là một sự lựa chọn lý tưởng. bảng Hash đơn giản chỉ cần thêm các phần tử mà bạn muốn ghi lại và lưu trữ chúng. Việc phục hồi một phần tử từ một bảng băm là nhanh bởi vì bảng băm sử dụng các giá trị thao tác dễ dàng để đại diện cho phần tử, chứ không phải là phần tử (có thể khá phức tạp). Tuy nhiên, lưu trữ cả hai yếu tố và một chỉ số cho các yếu tố đó có những hạn chế. Nếu một bảng băm phải đối mặt với nhiều yếu tố hơn nó có thể xử lý, chẳng hạn như các phần tử trong một dòng liên tục và có tiềm năng vô hạn, bạn sẽ kết thúc vấn đề bộ nhớ phát sinh ở một số điểm.
Một sự xem xét thiết yếu cho các bộ lọc Bloom là sai tích cực có thể xảy ra, nhưng âm tính giả không thể. Ví dụ: luồng dữ liệu có thể chứa dữ liệu theo dõi thời gian thực cho một nhà máy điện. Khi sử dụng bộ lọc Bloom, việc phân tích luồng dữ liệu sẽ chỉ ra rằng các lần đọc dự kiến có thể là một phần của tập các phép đọc cho phép, với một số lỗi cho phép. Tuy nhiên, khi một lỗi xảy ra trong hệ thống, phân tích tương tự cho thấy rằng các giá trị không phải là một phần của tập các phép đọc cho phép. Các kết quả sai sẽ không gây ra vấn đề gì, nhưng sự vắng bóng của những âm bản phủ định có nghĩa là mọi người vẫn an toàn. Do có khả năng dương tính giả, các bộ lọc như bộ lọc Bloom là các cấu trúc dữ liệu có tính xác suất - chúng không cung cấp một câu trả lời nhất định nhưng có thể xảy ra.
Hashes, các mục riêng lẻ trong bảng băm, nhanh vì chúng hoạt động giống như chỉ mục của một cuốn sách. Bạn sử dụng một hàm băm để tạo ra băm; đầu vào là một phần tử chứa dữ liệu phức tạp, và đầu ra là một số đơn giản hoạt động như một chỉ mục cho phần tử đó. Một hàm băm là xác định bởi vì nó tạo ra cùng một con số mỗi khi bạn nạp nó vào một đầu vào dữ liệu cụ thể.Bạn sử dụng bảng băm để xác định thông tin phức tạp mà bạn cần. Bộ lọc Bloom rất hữu ích vì chúng là một cách tiết kiệm để ghi lại dấu vết của nhiều phần tử mà không cần phải cất chúng đi như một bảng băm. Chúng hoạt động đơn giản và sử dụng các thành phần chính sau:
- Một vector bit: Một danh sách các phần tử bit, trong đó mỗi bit trong phần tử có thể có giá trị là 0 hoặc 1. Danh sách dài số bit được gọi là m. Các m lớn hơn là, tốt hơn, mặc dù có những cách để tối ưu xác định kích thước của nó.
- Một loạt các hàm băm: Mỗi hàm băm tượng trưng cho một giá trị khác. Các hàm băm có thể nhanh chóng crunch dữ liệu và tạo ra các kết quả thống nhất phân bố, đó là kết quả bằng nhau từ tối thiểu đến giá trị đầu ra tối đa của băm.