Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Thuật toán Lossy Counting tìm mục phổ biến như thế nào?

Người dùng hỗ trợ hai tham số đầu vào bao gồm ngưỡng hỗ trợ tối thiểu σ, và giới hạn sai số trước đó, ký hiệu là ε. Luồng đến về mặt lý thuyết được chia thành các bucket độ rộng w = ⌈1/ε⌉.

Cho N là độ dài luồng hiện tại, tức là số mục đã thấy cho đến nay. Thuật toán cần cấu trúc dữ liệu danh sách tần suất cho tất cả phần tử với tần suất lớn hơn 0. Đối với mỗi mục, danh sách hỗ trợ f, số đếm tần suất xấp xỉ, và Δ, sai số tối đa có thể của f.

Thuật toán xử lý bucket mục như sau. Khi bucket mới đến, các mục trong bucket được thêm vào danh sách tần suất. Nếu mục cho trước tồn tại trong danh sách, đơn giản tăng số đếm tần suất f. Ngược lại, thêm nó vào danh sách với số đếm tần suất 1. Nếu mục mới từ bucket thứ b, đặt Δ, sai số tối đa trên số đếm tần suất của mục, thành b−1.

Khi nào ranh giới bucket được đạt (tức là N đạt bội số của độ rộng w, bao gồm w, 2w, 3w, v.v.), danh sách tần suất được xác định. Cho b là số bucket hiện tại. Một mục nhập mục bị loại bỏ nếu, cho mục nhập đó, f + Δ ≤ b. Theo cách này, thuật toán nhằm giữ danh sách tần suất nhỏ để vừa với bộ nhớ chính. Số đếm tần suất lưu cho mỗi mục sẽ là tần suất thực của mục hoặc nhỏ hơn nó.

Yếu tố thiết yếu trong thuật toán xấp xỉ là tỷ lệ xấp xỉ (hoặc giới hạn sai số). Hãy xem trường hợp mục bị loại bỏ. Điều này xảy ra khi f + Δ ≤ b cho một mục, với b là số bucket hiện tại.

Có thể thấy b ≤ N/w, tức là b ≤ εN. Tần suất thực của một mục tối đa là f+Δ. Do đó, một mục có thể bị giảm là εN. Nếu hỗ trợ thực của mục này là σ (đây là hỗ trợ tối thiểu hoặc giới hạn dưới để được coi là phổ biến), do đó tần suất thực là σN, và tần suất f trên danh sách tần suất nên tối thiểu (σN − εN).

Do đó, nếu xuất ra tất cả mục trong danh sách tần suất có giá trị f tối thiểu (σN − εN), thì một số mục phổ biến sẽ được xuất ra. Hơn nữa, một số mục dưới phổ biến (với tần suất thực tối thiểu σN − εN nhưng nhỏ hơn σN) cũng sẽ được xuất ra.