โครงสร้างข้อมูลแผนที่ที่มีประสิทธิภาพรองรับการค้นหาโดยประมาณ


25

ฉันกำลังมองหาโครงสร้างข้อมูลที่สนับสนุนการค้นหาคีย์โดยประมาณอย่างมีประสิทธิภาพ (เช่นระยะทางของ Levenshtein สำหรับสตริง) โดยคืนค่าการจับคู่ที่ใกล้เคียงที่สุดสำหรับคีย์อินพุต โครงสร้างข้อมูลที่เหมาะสมที่สุดที่ฉันเคยพบคือต้นไม้ Burkhard-Kellerแต่ฉันสงสัยว่ามีโครงสร้างข้อมูลอื่น ๆ / ดีกว่าสำหรับจุดประสงค์นี้

แก้ไข: รายละเอียดเพิ่มเติมเกี่ยวกับกรณีเฉพาะของฉัน:

  • สายอักขระมักจะมีความแตกต่างกันมากในระดับที่ค่อนข้างใหญ่
  • สตริงมีความยาวสูงสุดประมาณ 20-30 ตัวอักษรโดยมีค่าเฉลี่ยใกล้เคียงกับ 10-12
  • ฉันสนใจในการค้นหาที่มีประสิทธิภาพมากกว่าการแทรกเนื่องจากฉันจะสร้างชุดข้อมูลสแตติกส่วนใหญ่ที่ฉันต้องการค้นหาอย่างมีประสิทธิภาพ

มีเงื่อนไขใด ๆ ในสตริงอินพุตและขนาดของจำนวนรายการในแผนที่หรือไม่ การแทรกลงในแผนที่มีประสิทธิภาพเพียงใด
edA-qa mort-ora-y

mrm เท่าที่ฉันบอกได้ว่าต้นไม้ BK ยังคงดูส่วนใหญ่ของต้นไม้ทั้งหมด แต่นั่นอาจเป็นการเพิ่มประสิทธิภาพก่อนวัยอันควรในด้านของฉันฉันเดา?
merijn

3
มีความเกี่ยวข้องอย่างใกล้ชิดกับจุดที่เกือบจะซ้ำซ้อนกัน: โครงสร้างข้อมูลที่มีประสิทธิภาพสำหรับการสร้างเครื่องมือตรวจสอบการสะกดคำรวดเร็ว
Raphael

คำตอบ:


18

สิ่งที่คุณกำลังมองหาคือ "ประมาณใกล้เคียงการค้นหาเพื่อนบ้าน" (ANNS) ใน Levenshtein / แก้ไขระยะทาง จากมุมมองทางทฤษฎีการแก้ไขระยะไกลได้กลายเป็นเรื่องที่ค่อนข้างยากสำหรับการค้นหาใกล้เพื่อนบ้าน ถึงกระนั้นก็ยังมีผลลัพธ์มากมายให้ดูการอ้างอิงในเอกสารOstrovsky และ Rabaniนี้ หากคุณยินดีพิจารณาตัวชี้วัดระยะทางอื่นซึ่งมีวิธีแก้ปัญหาที่ง่ายกว่าและดีกว่าให้ไปยังย่อหน้าถัดไป สำหรับ ANNS ในระยะทางแก้ไขมีผลเนื่องมาจากIndykที่แสดงวิธีการสร้างโครงสร้างข้อมูลขนาดที่ตอบแบบสอบถามใด ๆ ในเวลาและรายงานสตริง ซึ่งมากที่สุดสามครั้งถัดจากสตริงที่ใกล้เคียงที่สุดกับสตริงการสืบค้น (นี่เป็นการสรุปขนาดO(d)nO(dϵ)31/ϵnd11nO(d)O(d)nO(dϵ)และการประมาณ ) นี่คือจำนวนของสตริงและเป็นความยาวสูงสุดของสตริง กระดาษ Ostrovsky และ Rabani ที่ฉันเชื่อมโยงด้านบนปรับปรุงผลลัพธ์นี้โดยการจับคู่สตริงกับเวกเตอร์เพื่อให้ระยะทาง (ชนิดของรูปทรงเรขาคณิตทางธรรมชาติคล้ายกับระยะทางแบบยูคลิด) ระหว่างเวกเตอร์ใกล้เคียงกับระยะทางแก้ไขระหว่างสตริงที่เกี่ยวข้อง "การฝังความผิดเพี้ยนต่ำ") เมื่อทำสิ่งนี้เสร็จแล้วโครงสร้างข้อมูล ANNS สำหรับสามารถใช้งานได้และสิ่งเหล่านี้จะมีประสิทธิภาพมากขึ้น (ดูย่อหน้าถัดไป)31/ϵnd11

หากคุณยินดีที่จะพิจารณาระยะทางอื่น ๆ จากนั้นการแฮ็กข้อมูลสำคัญในพื้นที่ (LSH) จะเป็นงานที่ยอดเยี่ยม Local hashing sensitive hashing เป็นเทคนิคที่บุกเบิกโดย Indyk และ Motwani สำหรับการแก้ปัญหา ANNS ซึ่งจุดที่อาศัยอยู่ในพื้นที่มิติสูง (อ่านเวกเตอร์ยาว, สตริงยาว ฯลฯ ) จะถูกเจาะเข้าไปในถังจำนวนน้อยเพื่อให้จุดนั้น อยู่ใกล้กันถูกแมปไปยังถังขยะเดียวกันโดยมีความน่าจะเป็นที่ดีและคะแนนที่อยู่ไกลจากกันถูกแมปไปยังถังขยะที่แตกต่างกันด้วยความน่าจะเป็นที่ดี มีบทความการสำรวจที่ดีและสามารถเข้าถึงได้มากโดย Indyk และอันคือCACM เทคนิคนี้ง่ายและรวดเร็วและมีความต้องการพื้นที่ขนาดเล็ก มีรหัสออกด้วย (ฉันคิดว่าบทความเชื่อมโยงไปยังรหัส) มันทำงานได้ดีสำหรับสิ่งต่าง ๆ เช่นระยะทาง Hamming (และในบางช่วงเวลา)1ระยะทาง) และระยะทางแบบยุคลิด, ระยะทางโคไซน์ นอกจากนี้Muthu และ Sahinalpแผนการออกแบบ LSH สำหรับลักษณะทั่วไปเป็นธรรมชาติมากของการแก้ไขระยะที่บล็อกแก้ไขระยะทาง (ซึ่งบางแก้ไขการดำเนินงานสามารถทำงานได้ในบล็อกของสัญลักษณ์)

ชนิดของคำถามนี้เป็นแบบที่ดีสำหรับcstheory.SE มีคำถามที่เกี่ยวข้องอยู่ที่นั่นแต่ดูเหมือนว่าจะขอเพื่อนบ้านที่ใกล้เคียง


12

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

เนื่องจากปัญหาด้านการสืบค้นอักษรทุกที่ในวิทยาการคอมพิวเตอร์มีขนาดใหญ่ปริมาณของต้นไม้ตัวชี้วัดที่แตกต่างกัน อย่างไรก็ตามพวกมันสามารถแบ่งออกได้เป็นสองกลุ่ม: pivot-based และ clustering based (และแน่นอนว่ามีลูกผสมเช่นกัน) การสำรวจที่ดีคืออีชาเวซ et al., ค้นหาในเมตริก Spaces 2001 ดูตัวอย่างตอนที่ 5: โซลูชั่นปัจจุบันเป็นช่องว่างการวัดหน้า 283

ที่นั่นในตารางที่ 1 ชาเวซและคณะ พิจารณาต้นไม้ที่แตกต่างกัน 16 ต้น พวกเขานำเสนอความซับซ้อนของพื้นที่ความซับซ้อนของการก่อสร้างความซับซ้อนของการอ้างสิทธิ์และเวลาสืบค้น CPU เพิ่มเติมสำหรับแต่ละรายการ (ถ้าทราบ) หากคุณไม่สนใจเกี่ยวกับความซับซ้อนของการก่อสร้างมากเกินไปความซับซ้อนของแบบสอบถามสำหรับต้นไม้ BK คือโดยที่ขึ้นอยู่กับช่วงของการค้นหาและโครงสร้างของพื้นที่ . หรือถ้าคุณไม่มีองค์ประกอบจำนวนมากให้ดูที่ AESA (ประมาณการขจัดอัลกอริธึมการค้นหา) มันช้าในการสร้างและจัดเก็บสำหรับพื้นที่ขนาดใหญ่ (เวลาและพื้นที่ช้า) โดยไม่ได้รับการยอมรับ แต่แสดงให้เห็นว่ามีการทดลองเพื่อให้มีเวลาสอบถาม0 < α < 1 O ( n 2 ) O ( 1 )O(nα)0<α<1O(n2)O(1)

ชาเวซและคณะ นอกจากนี้ยังให้ภาพรวมที่ดีของต้นไม้อื่น ๆ และการอ้างอิงที่เป็นธรรมชาติมากขึ้นหากมีใครสนใจประกายไฟของคุณ ในทางปฏิบัติประสิทธิภาพการทำงานของต้นไม้ต่าง ๆ มักจะประเมินการทดลอง ฉันคิดว่ามันขึ้นอยู่กับโครงสร้างของอวกาศเป็นอย่างมาก ดังนั้นจึงเป็นการยากที่จะบอกว่าต้นไม้ใดโดยเฉพาะจะมีประสิทธิภาพมากที่สุดในกรณีของคุณ อย่างไรก็ตามฉันคิดว่ามันเป็นความคิดที่ดีที่จะไปกับคนที่ง่ายที่สุดก่อน ถ้าต้นไม้ BK เป็นไม้ที่ง่ายที่สุดในการสร้างลองใช้มันก่อน หากพวกเขาไม่ตอบสนองความต้องการของคุณลงทุนเวลา (และเวลาการเขียนโปรแกรม) ในการรวบรวมข้อเท็จจริงเพิ่มเติมเกี่ยวกับพื้นที่ของคุณที่สามารถช่วยให้คุณตัดสินใจอย่างชาญฉลาดมากขึ้น

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