คู่ที่ใกล้ที่สุดของคะแนนระหว่างสองชุดในแบบ 2 มิติ


11

ฉันมีสองชุดจุดในระนาบ 2 มิติ ฉันต้องการค้นหาจุดที่ใกล้ที่สุดs , tเช่นs S , t Tและระยะทางแบบยุคลิดระหว่างs , tมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ สิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพ? สามารถทำได้ในเวลาO ( n log n )โดยที่n = | S | + | T | ?S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

ฉันรู้ว่าถ้าฉันให้เป็นหนึ่งเดียวชุดแล้วมันเป็นไปได้ที่จะหาคู่ที่อยู่ใกล้จุดs , s 'SในO ( n log n )เวลาโดยใช้ขั้นตอนวิธีการหารและพิชิตมาตรฐาน อย่างไรก็ตามอัลกอริทึมนั้นดูเหมือนจะไม่พูดคุยกับกรณีของสองชุดเนื่องจากไม่มีการเชื่อมต่อระหว่างระยะห่างระหว่างจุดที่ใกล้เคียงที่สุดสองจุดภายในหรือเทียบกับระยะห่างระหว่างจุดที่ใกล้เคียงที่สุดทั้งสองชุดSs,sSO(nlogn)TST

ผมคิดว่าการจัดเก็บชุดในต้นไม้ -d แล้วสำหรับแต่ละโดยใช้แบบสอบถามที่ใกล้ที่สุดเพื่อนบ้านเพื่อหาจุดที่ใกล้ที่สุดในเพื่อsแต่ที่เลวร้ายที่สุดกรณีที่ทำงานเวลานี้อาจจะไม่ดีเท่าที่เวลา มีผลลัพธ์ที่บอกว่าถ้าคะแนนของถูกกระจายแบบสุ่มดังนั้นเวลาทำงานที่คาดไว้สำหรับแต่ละแบบสอบถามคือดังนั้นเราจะได้อัลกอริทึมที่มีเวลาทำงานที่คาดหวังถ้าเรา ได้รับการรับรองว่ามีการกระจายคะแนนแบบสุ่ม - แต่ฉันกำลังมองหาอัลกอริทึมที่จะใช้สำหรับการรวบรวมคะแนนใด ๆ (ไม่จำเป็นต้องกระจายแบบสุ่ม)k s S T s O ( n 2 ) T O ( บันทึกn ) O ( n log n )TksSTsO(n2)TO(logn)O(nlogn)

แรงจูงใจ: อัลกอริทึมที่มีประสิทธิภาพจะเป็นประโยชน์สำหรับคำถามอื่นนี้

คำตอบ:


10

ใช่นี้สามารถเป็นเวลา สร้างแผนภาพ Voronoi สำหรับT จากนั้นสำหรับแต่ละจุดs Sให้หาเซลล์ของแผนภาพ Voronoi ที่มีอยู่จุดศูนย์กลางของเซลล์นั้นคือจุดt Tที่ใกล้เคียงกับsที่สุดO(nlogn)TsStTs

คุณสามารถสร้างแผนภาพ Voronoi ในเวลาและแต่ละแบบสอบถาม (พบเซลล์ที่มีs ) สามารถทำได้ในO ( บันทึกn )เวลาดังนั้นเวลาทำงานรวมเป็นO ( n log n )เวลาO(nlogn)sO(logn)O(nlogn)


ดีมากง่ายกว่าที่ฉันคิดได้ :)
aelguindy

วิธีการที่ดี! ลิงก์อาจช่วยได้โดยเฉพาะในด้านการสืบค้น ฉันพบหน้า Wikipedia ที่แสดงว่าปัญหาตำแหน่งจุดทั่วไปสามารถแก้ไขได้ในเวลาแต่มีวิธีที่ดีกว่าสำหรับกรณีพิเศษของเซลล์ Voronoi หรือไม่ การค้นหาของฉันหันเท่านั้นถึงคำตอบนี้ซึ่งมันไม่O ( n )วิธี O(logn)O(n)
j_random_hacker

ความซับซ้อนของปัญหาตำแหน่งของจุดมักจะได้รับในแง่ของจำนวนจุดยอดรวม (ที่นี่ของแผนภาพ Voronoi) จำนวนนี้มีแนวโน้มมากกว่าจำนวนคะแนนในและแม้กระทั่งn = | S | + | T | . ฉันไม่แน่ใจว่าจำนวนจุดยอดถูกล้อมรอบด้วยO ( n )ใช่ไหม? Tn=|S|+|T|O(n)
Albjenow

1
@Albjenow ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับความกังวลของคุณหรือไม่ แต่ใช่ใน 2 มิติฉันเชื่อว่าจำนวนจุดยอดในแผนภาพ Voronoi บน points คือO ( n ) (ฉันดูเหมือนจะจำได้ว่าเป็น6 nหรือ อะไรแบบนั้น). nO(n)6n
DW

ที่ดูเหมือนว่าถูกต้องตามคำถามนี้ใน math.stackexchange
Albjenow

5

ฉันกำลังขยายความคิดเห็นของฉันเป็นคำตอบเนื่องจากฉันหาคำตอบแบบกึ่งพอใจ วิธีนี้จะช่วยแก้ปัญหาสำหรับระยะทางเท่านั้น คำตอบนี้ผิดโดยทั่วไปL1

นี้กระดาษแก้ปัญหาการหาคู่ที่ใกล้เคียงที่สุดของคะแนนในมิติในกรณีที่ชุดจะถูกคั่นด้วยไฮเปอร์เพลในO ( n log d - 1 n )dO(nlogd1n)

สำหรับสองมิติแก้กรณีนี้ในคำตอบที่คุณอ้างอิงเป็นแรงจูงใจหลักของคุณสำหรับคำถามของคุณใน ) นอกจากนี้ยังสามารถนำมาใช้ในการแก้ปัญหากรณีทั่วไปของปัญหา 2D ในO ( n log 2 n )O(nlogn)O(nlog2n)

กำหนดสองชุดของคะแนนใน 2D, ฝังไว้ในพื้นที่ 3 มิติ, แทนที่ชุดSโดยบาง- δ zและตั้งTโดยδ zในทิศทางz ทางเลือกของδ Zสามารถทำเพื่อไม่ให้ส่งผลกระทบต่อทางเลือกของคู่ที่อยู่ใกล้จุดโดยการδ Zจะมีขนาดเล็กกว่าความแม่นยำของจุดป้อนข้อมูลของคุณ (และเสแสร้งบิตแม่นยำสำหรับแต่ละอินพุตประสานงาน) ใช้อัลกอริทึม 3D จากกระดาษที่อ้างถึงS,TSδzTδzzδzδz


+1 แต่มีสองสามสิ่งเกี่ยวกับกระดาษนั้น (ซึ่งฉันเพิ่งเริ่มอ่าน): (i) พวกเขาอ้างสิทธิ์เพื่อแก้ปัญหาสำหรับกรณีระยะไกลเป็นเส้นตรง (แมนฮัตตัน); (ii) ฉันไม่เข้าใจว่าทำไมพวกเขาคิดว่าภูมิภาคในหน้า 2 มีจุดตรง 1 จุด ฉันได้สันนิษฐานว่าพีเมตรเป็นจุดในPกับ Y มัธยฐานร่วมอ๊อดในPและQ เมตรเป็นจุดในQกับ Y มัธยฐานร่วมอ๊อดในQแต่ผมไม่เห็นว่าข้างต้นสามารถปฏิบัติตามนี้ . P2pmPPqmQQ
j_random_hacker

1
@j_random_hacker กระดาษแค่แก้ปัญหาสำหรับระยะทาง L1 และคำตอบนี้ผิด :) และฉันคิดว่านั่นคือตัวอักษร :) l
aelguindy

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