ค้นหารายการที่อยู่ในอย่างน้อย


11

พิจารณาชุดของค่า (แสดงเป็นอาร์เรย์ที่เรียงลำดับโดยไม่ซ้ำกันและมีขนาดที่รู้จัก (เช่นขนาดสามารถรับได้ใน O (1)) ค่าสามารถทดสอบได้สำหรับความเท่าเทียมกันในเวลา O (1) ฉันต้องการ ที่จะได้รับชุดของค่าที่มีอยู่อย่างน้อยkชุดที่แตกต่างกันในหมู่nnkn

อัลกอริทึมที่ชัดเจนที่จะทำเช่นนี้คือการไปผ่านชุดทั้งหมดนับจำนวนของการเกิดขึ้นของแต่ละค่าและย้อนกลับมาผู้ที่มีการนับสูงกว่าkแต่ในบางกรณีคุณสามารถทำได้ดีกว่า: ยกตัวอย่างเช่นเมื่อn = k = 2และเมื่อหนึ่งชุดS 1มีขนาดเล็กกว่าชุดอื่น ๆS 2ว่ามันมีประสิทธิภาพมากขึ้นในการดูรายการทั้งหมดของS 1และดำเนินการ การค้นหาแบบไบนารีสำหรับแต่ละรายการในS 2 : วิธีการค้นหาแบบไบนารีจะมีค่าใช้จ่ายO ( | S 1 |บันทึก( | S 2 |kn=k=2S1S2S1S2ในขณะที่วิธีการไร้เดียงสามีค่าใช้จ่าย O ( | S 1 | + | S 2 | )ซึ่งแย่กว่าเมื่อ | S 1 | < < | S 2 | .O(|S1|เข้าสู่ระบบ(|S2|))O(|S1|+|S2|)|S1|<<|S2|

เมื่อพิจารณาสิ่งนี้แล้วสถานการณ์ใดที่เราสามารถทำได้ดีกว่าอัลกอริธึมไร้เดียงสา? (หากเป็นปัญหาที่รู้จักกันดีฉันยินดีที่จะทราบชื่อปกติและมีการอ้างอิง)


3
สิ่งนี้อยู่ในหมวดหมู่ทั่วไปของผลลัพธ์ "top-K" หรือ "hitters หนัก" หลังอยู่ใกล้กับสิ่งที่คุณกำลังมองหา งานส่วนใหญ่ในพื้นที่นี้มุ่งเน้นไปที่ชุดข้อมูลขนาดใหญ่และข้อ จำกัด ของหน่วยความจำแบบไม่เชิงเส้น
Suresh Venkat

9
O(|S1|เข้าสู่ระบบ(|S2|/|S1|))

คำตอบ:



1

ปัญหาของคุณมีความคล้ายคลึงกับปัญหาการทำเหมืองข้อมูลในการหาitemsets บ่อยยังเป็นที่รู้จักสมาคมการเรียนรู้กฎ ถ้าผมเข้าใจอย่างถูกต้องปัญหาของคุณอาจจะลดลงไปหา itemsets บ่อยของ cardinality 1 (เช่น singletons) ด้วยการสนับสนุน > = k แน่นอนว่าอัลกอริธึมที่มีอยู่ (เช่น Apriori, Eclat, D-CLUB เป็นต้น) สำหรับปัญหานี้ยังอนุญาตให้พิจารณาชุดไอเท็มบ่อย ๆ ของ cardinality> 1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.