ฉันมีสองชุดจุดในระนาบ 2 มิติ ฉันต้องการค้นหาจุดที่ใกล้ที่สุดs , tเช่นs ∈ S , t ∈ Tและระยะทางแบบยุคลิดระหว่างs , tมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ สิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพ? สามารถทำได้ในเวลาO ( n log n )โดยที่n = | S | + | T | ?
ฉันรู้ว่าถ้าฉันให้เป็นหนึ่งเดียวชุดแล้วมันเป็นไปได้ที่จะหาคู่ที่อยู่ใกล้จุดs , s ' ∈ SในO ( n log n )เวลาโดยใช้ขั้นตอนวิธีการหารและพิชิตมาตรฐาน อย่างไรก็ตามอัลกอริทึมนั้นดูเหมือนจะไม่พูดคุยกับกรณีของสองชุดเนื่องจากไม่มีการเชื่อมต่อระหว่างระยะห่างระหว่างจุดที่ใกล้เคียงที่สุดสองจุดภายในหรือเทียบกับระยะห่างระหว่างจุดที่ใกล้เคียงที่สุดทั้งสองชุดT
ผมคิดว่าการจัดเก็บชุดในต้นไม้ -d แล้วสำหรับแต่ละโดยใช้แบบสอบถามที่ใกล้ที่สุดเพื่อนบ้านเพื่อหาจุดที่ใกล้ที่สุดในเพื่อsแต่ที่เลวร้ายที่สุดกรณีที่ทำงานเวลานี้อาจจะไม่ดีเท่าที่เวลา มีผลลัพธ์ที่บอกว่าถ้าคะแนนของถูกกระจายแบบสุ่มดังนั้นเวลาทำงานที่คาดไว้สำหรับแต่ละแบบสอบถามคือดังนั้นเราจะได้อัลกอริทึมที่มีเวลาทำงานที่คาดหวังถ้าเรา ได้รับการรับรองว่ามีการกระจายคะแนนแบบสุ่ม - แต่ฉันกำลังมองหาอัลกอริทึมที่จะใช้สำหรับการรวบรวมคะแนนใด ๆ (ไม่จำเป็นต้องกระจายแบบสุ่ม)k s ∈ S T s O ( n 2 ) T O ( บันทึกn ) O ( n log n )
แรงจูงใจ: อัลกอริทึมที่มีประสิทธิภาพจะเป็นประโยชน์สำหรับคำถามอื่นนี้