จัดเรียงตามระยะทางแบบยุคลิด


17

คือชุดของจุดบนเครื่องบิน มีการสุ่มจุด x Sบนระนาบเดียวกัน งานคือการจัดเรียงทุกปีSตามระยะทางแบบยุคลิดระหว่าง xและy ที่SxSYSxY

วิธีที่ไม่มีสมองคือการคำนวณระยะทางระหว่างและyสำหรับทุกy Sแล้วจัดเรียงพวกเขาโดยใช้อัลกอริทึมที่รวดเร็วxyyS

มีวิธีใดในการจัดเก็บหรือประมวลผลล่วงหน้าดังนั้นกระบวนการเรียงลำดับจะเร็วขึ้นหรือไม่S


1
คุณสามารถพิจารณาตารางที่มีขนาดและคะแนนกลุ่มที่เหมาะสมโดยใช้ตารางที่สอดคล้องกัน (ใช้, พูด, ตารางแฮช) จากนั้นสำหรับบางคู่ของสี่เหลี่ยมจัตุรัสคุณสามารถอนุมานได้ว่าจุดทั้งหมดจากตารางหนึ่งอยู่ไกลจากมากกว่าจุดทั้งหมดจากอีกช่องหนึ่ง ในทางปฏิบัติมันสามารถช่วยได้ฉันเดา x
ilyaraz

“ วิธีการที่ไม่ต้องใช้สมอง” ซึ่งคุณระบุว่าทำงานในเวลา O (n log n) โดยที่ n คือจำนวนคะแนนใน S ซึ่งฉันคิดว่าค่อนข้างเร็วในทางปฏิบัติ คุณต้องการที่จะผลักปัจจัย log n หรือคุณต้องการอย่างอื่นเช่นการเรียงลำดับภายนอก ?
Tsuyoshi Ito

ประเด็นก็คือฉันมีเวลาไม่ จำกัด ในการเตรียมชุดคะแนน แต่เวลาในการเรียงลำดับนั้นมี จำกัด มาก ที่กล่าวว่าการเพิ่มความเร็วในการคัดแยกมาตรฐานจะได้รับการชื่นชมแม้ว่าจะเป็น O (n log n) เดียวกัน แต่เร็วกว่าในกรณีที่เลวร้ายที่สุด (หรือกรณีที่ดีที่สุดหรืออะไรก็ตาม)
Alex K.

ตัวอย่างเช่นถ้าฉันเก็บ S เป็นต้นไม้ 2 มิติฉันสามารถค้นหาเพื่อนบ้านที่ใกล้ที่สุดหนึ่งคนในเวลา O (บันทึก n) อาจมีวิธีแก้ไขปัญหาที่คล้ายกันสำหรับงานของฉัน ฉันไม่ได้เป็นผู้เชี่ยวชาญที่ดีในโครงสร้างข้อมูลเชิงพื้นที่ - และมีจำนวนมาก - ฉันอาจพลาดได้ง่าย
Alex K.

คำตอบ:


13

โซลูชันที่ 1: หา bisectors ตั้งฉากระหว่างคู่ของจุดและสร้างการจัดเรียงของเส้นเหล่านี้ การจัดเรียงมีΘ ( n 4 )เซลล์ภายในซึ่งเรียงลำดับเป็นค่าคงที่ ดังนั้นสร้างโครงสร้างข้อมูลตำแหน่งจุดสำหรับการจัดเรียงและตกแต่งแต่ละเซลล์ด้วยลำดับที่เรียงซึ่งจะถูกส่งกลับสำหรับจุดภายในเซลล์นั้น คำสั่งที่เรียงลำดับระหว่างเซลล์ที่อยู่ติดกันจะแตกต่างกันในการย้ายครั้งเดียวเท่านั้นดังนั้นคุณสามารถใช้โครงสร้างข้อมูลถาวรเพื่ออนุญาตการแสดงคำสั่งที่เรียงลำดับเหล่านี้เพื่อแบ่งปันพื้นที่ พื้นที่ทั้งหมดคือO ( n 4 )และเวลาแบบสอบถามเป็นOΘ(n2)Θ(n4)O(n4) )O(เข้าสู่ระบบn)

โซลูชันที่ 2: เลือกตัวอย่างสุ่มของของเส้นแบ่งครึ่งตั้งฉากเดียวกันเหล่านี้สร้างการจัดเรียงของพวกเขาและแบ่งพาร์ติชันแต่ละเซลล์การจัดเรียงตามส่วนของเส้นแนวตั้งผ่านแต่ละเส้นแบ่งของสองตัวอย่าง พาร์ติชันที่ได้นั้นมีเซลล์Θ ( n 2 )แต่ละเซลล์ที่มีความน่าจะเป็นสูงจะถูกข้ามโดยO ( n )เส้นแบ่งครึ่งที่ไม่ได้สุ่มตัวอย่าง ตกแต่งแต่ละเซลล์ของพาร์ติชันโดยการเรียงลำดับคะแนนที่ถูกต้องเมื่อดูจาก x ภายในเซลล์ พื้นที่รวมเป็นO ( n 3 )Θ(n)Θ(n2)O(n)O(n3)

ตอนนี้ในการทำแบบสอบถามให้ค้นหาจุดสอบถามในพาร์ติชันค้นหาการสั่งซื้อที่เก็บไว้กับเซลล์พาร์ติชันและใช้อัลกอริทึมการเรียงลำดับแบบต้นไม้เปรียบเทียบคาร์ทีเซียนของ Levcopoulos & Petersson (1989) เริ่มต้นด้วยการจัดเก็บนี้ เวลาสำหรับขั้นตอนนี้เป็นสัดส่วนกับที่k ฉันคือจำนวนของจุดที่ออกจากคำสั่งซื้อที่มีจุดYฉัน แต่k ฉันคือO ( n ) (แต่ละเส้นแบ่งครึ่งที่ไม่ได้สุ่มทำให้เกิดจุดคู่ที่ไม่อยู่ในอันดับสูงสุด) ดังนั้นเวลาแบบสอบถามΣผมO(1+เข้าสู่ระบบkผม)kผมYผมΣkผมO(n)ยังเป็น O ( n )ΣผมO(1+เข้าสู่ระบบkผม)O(n)


1
PS ต่อไปนี้เป็นทางเลือกที่แตกต่างของโซลูชัน 2 ที่ใช้พื้นที่และเวลาแบบสอบถามเท่ากัน แต่ทำการซื้อขายอัลกอริทึมการประมวลผลล่วงหน้าที่ซับซ้อนยิ่งขึ้นสำหรับอัลกอริทึมการสืบค้นที่ง่ายขึ้น: 11011110.livejournal.com/233793.html
David Eppstein

ทำไมก่อนการประมวลผลเมื่อคุณสามารถเรียงลำดับจากทั่วทุกnจุดเริ่มต้นในO ( n 2บันทึกn )เวลาและเก็บผลในตารางแฮชโดยใช้พื้นที่On4nO(n2logn)สำหรับการค้นหาอย่างต่อเนื่อง? O(n2)
เดฟ

เนื่องจากมีจุดเริ่มต้นด้วยคำสั่งซื้อที่แตกต่างกันเรียงลำดับไม่Θ ( n 2 ) Θ(n4)Θ(n2)
David Eppstein

1

คุณอาจจะไม่สามารถที่จะได้รับจากเวลาวิธีการใด ๆ ที่คุณเชือดมัน; แม้กระทั่งการคำนวณพื้นที่ก่อนที่สอดคล้องกับคำสั่งการเรียงลำดับที่เป็นไปได้ทั้งหมด (ฉันเชื่อว่า) ให้ผลผลิตภูมิภาคO ( n ! )และการค้นหาภูมิภาคของคุณด้วยเทคนิคการค้นหาที่มีความหมายจะใช้O ( log ( n ! ) ) = O ( n log ( n) ) )เวลา ( แก้ไข:nlog(n)O(n!)O(log(n!))=O(nlog(n))นี่เป็นสิ่งที่ผิดอย่างยิ่ง ดูคำตอบที่ยอดเยี่ยมของ David Eppstein สำหรับข้อมูลเพิ่มเติม!) อีกวิธีหนึ่งที่เป็นประโยชน์ในการลดความซับซ้อนลงโดยเฉพาะอย่างยิ่งถ้าคุณไม่ต้องการการเรียงลำดับเต็มรูปแบบในครั้งเดียว แต่เพียงแค่ต้องสามารถดึงใกล้ที่สุดออกมา ทันที - อาจผ่านไดอะแกรม Voronoi ที่สูงกว่า: ส่วนขยายของเซลล์ Voronoi มาตรฐานที่รองรับไม่เพียงเพื่อนบ้านที่ใกล้ที่สุด แต่ใกล้เคียงที่สุดเป็นอันดับสองและอื่น ๆ อีกมากมายกระดาษของ Frank Dehne ในการค้นหาเพื่อนบ้าน k- ที่ใกล้ที่สุดhttp: //people.scs .carleton.ca / ~ dehne / สิ่งพิมพ์ / 2-02.pdfน่าจะเป็นข้อมูลอ้างอิงที่เป็นที่ยอมรับ โฮมเพจของเขาที่http://www.dehne.carleton.ca/publicationsมีเอกสารจำนวนมากเกี่ยวกับไดอะแกรม Voronoi ที่อาจมีประโยชน์k


3
หากหนึ่งในพาร์ทิชันเครื่องบินเข้าไปในพื้นที่ที่มีการสั่งซื้อการจัดเรียงที่แตกต่างกันมีภูมิภาคไม่O ( n ! ) ขอบเขตระหว่างภูมิภาคคือเส้นแบ่งครึ่งตั้งฉากของคู่ของคะแนนมีΘ ( n 2 )เส้นดังกล่าวและชุดของภูมิภาคจะได้รับจากการจัดเรียงของเส้นเหล่านี้ Θ(n4)O(n!)Θ(n2)
David Eppstein

@ David ฉันคิดว่าคุณควรตอบคำถามนี้
James King

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