Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

อัลกอริทึม Lossy Counting ค้นหารายการบ่อยได้อย่างไร


ผู้ใช้สนับสนุนพารามิเตอร์อินพุต 2 ตัว ได้แก่ เกณฑ์ขั้นต่ำการสนับสนุน σ และข้อผิดพลาดที่ผูกไว้ก่อนหน้านี้ ซึ่งระบุเป็น ε กระแสที่เข้ามาจะถูกแบ่งออกเป็นกลุ่มตามทฤษฎีด้วยความกว้าง w =[1/ε].

ให้ N เป็นความยาวสตรีมปัจจุบัน เช่น จำนวนรายการที่ดูจนถึงปัจจุบัน อัลกอริทึมต้องการโครงสร้างข้อมูลรายการความถี่สำหรับองค์ประกอบทั้งหมดที่มีความถี่สูงกว่า 0 สำหรับทุกรายการ รายการรองรับ f การนับความถี่โดยประมาณ และ ∆ ซึ่งเป็นข้อผิดพลาดสูงสุดที่เป็นไปได้ของ f

อัลกอริทึมขั้นตอนที่ฝากข้อมูลของรายการดังต่อไปนี้ เมื่อมีบัคเก็ตใหม่เข้ามา รายการในบัคเก็ตจะถูกแทรกลงในรายการความถี่ หากมีรายการที่ระบุอยู่ในรายการ ก็สามารถเพิ่มจำนวนความถี่ได้ f มิฉะนั้น จะเพิ่มลงในรายการโดยนับความถี่เป็น 1 หากรายการใหม่มาจากบัคเก็ต bth ก็สามารถตั้งค่า ∆ ซึ่งเป็นจุดบกพร่องสูงสุดที่เป็นไปได้ในการนับความถี่ของรายการเป็น b-1

เมื่อใดก็ตามที่ได้รับขอบเขตที่ฝากข้อมูล (เช่น N ถึงความกว้างทวีคูณรวมถึง w, 2w, 3w เป็นต้น) รายการความถี่จะถูกกำหนด ให้ b เป็นหมายเลขถังปัจจุบัน รายการรายการจะถูกลบออกหากสำหรับรายการนั้น f + ∆ ≤ b ในแนวทางนี้ อัลกอริธึมมีวัตถุประสงค์เพื่อรักษารายการความถี่ให้เล็กเพื่อให้สามารถใส่ลงในหน่วยความจำหลักได้ จำนวนความถี่ที่บันทึกไว้สำหรับแต่ละรายการจะเป็นความถี่ที่แท้จริงของรายการหรือย่อให้เล็กสุด

ปัจจัยสำคัญในอัลกอริธึมการประมาณคืออัตราส่วนการประมาณ (หรือข้อผิดพลาดที่ผูกไว้) ลองดูกรณีที่รายการถูกลบออก จะปรากฏขึ้นเมื่อ f +∆ ≤ b สำหรับรายการ โดยที่ b คือหมายเลขชุดข้อมูลปัจจุบัน

สามารถเข้าใจได้ว่า b ≤ N/w นั่นคือ b ≤ εN ความถี่ที่แท้จริงของรายการอยู่ที่มากที่สุด f+∆ ดังนั้น รายการที่ย่อเล็กสุดได้คือ εN หากการสนับสนุนที่แท้จริงของรายการนี้คือ σ (นี่คือการสนับสนุนขั้นต่ำหรือขอบเขตล่างเพื่อให้ได้รับการปฏิบัติบ่อยครั้ง) ดังนั้นความถี่ที่แท้จริงคือ σN และความถี่ f ในรายการความถี่ควรเป็นค่าต่ำสุด (σN −εN )

ดังนั้น หากเราเอาท์พุตรายการทั้งหมดในรายการความถี่ที่มีค่า f เป็นค่าต่ำสุด (σN −εN) ดังนั้น รายการที่ใช้บ่อยบางรายการจะถูกส่งออก นอกจากนี้ รายการความถี่ย่อยบางรายการ (ที่มีความถี่จริงขั้นต่ำ σN −εN แต่น้อยกว่า σN) จะถูกส่งออก