วงกลมล้อมรอบสูงสุดของรัศมีที่กำหนด


19

ฉันพยายามหาวิธีแก้ไขปัญหาต่อไปนี้:

ให้ชุดของจุดและรัศมีค้นหาจุดศูนย์กลางของวงกลมเช่นวงกลมที่มีจำนวนคะแนนสูงสุดจากชุด เวลาทำงานควรจะ2)SrO(n2)

ตอนแรกมันดูเหมือนจะเป็นสิ่งที่คล้ายกับปัญหาวงกลมล้อมรอบขนาดเล็กที่สุดที่สามารถแก้ไขได้ใน2) ความคิดคือการตั้งศูนย์โดยพลการและล้อมรอบทุกจุดของส ถัดไปทีละขั้นตอนแทนที่วงกลมเพื่อสัมผัสจุดซ้าย / ขวาสุดและลดขนาดวงกลมไปยังรัศมีที่กำหนดชัดเจนว่านี่จะไม่ทำงานO(n2)S

คำตอบ:


7

ฉันไม่ทราบวิธีแก้ปัญหานี้ในเวลาแต่อัลกอริทึม O ( n 2 ) O ( n 2บันทึกn )O(n2)O(n2logn)

Let เป็นวงกลมที่มีศูนย์s ฉันที่ฉันจุด -th มีรัศมีR ไม่ยากที่จะหาว่าชุดจุดP = { p 0 , p 1 , , p m }สามารถล้อมรอบด้วยวงกลมที่มีรัศมีr iff จุดตัดI ( P )ของC ( p 0 ) , C ( p 1) ) , ...C(si)siirP={p0,p1,,pm}rI(P)ไม่ว่างเปล่า ยิ่งกว่านั้นถ้า I ( P )ไม่ว่างต้องมีบางจุดใน I ( P )วางบน bd C ( p i ) (ขอบเขตของ C ( p i ) ) ดังนั้นสำหรับแต่ละ C ( s ฉัน )และแต่ละจุด Pบน bondary ของเราพยายามที่จะหาวิธีการหลายวงการประกอบด้วยพี จำนวนสูงสุดของ pทั้งหมดจะเป็นคำตอบสำหรับปัญหานี้C(p0),C(p1),,C(pm)I(P)I(P)BD(พีผม)(พีผม)(sผม)พีพีพี

ขอตรวจสอบคะแนนใน ) มีการทำแผนที่หนึ่งต่อหนึ่งระหว่างจุดบนเป็นBD C ( s ฉัน )และจำนวนจริงใน[ 0 , 2 π ) สำหรับแต่ละวงกลมC ( s J )สี่แยกระหว่างC ( s J )และBD C ( s ฉัน )สามารถแสดงโดยช่วง[ อีกรัมฉันn JBD(sผม)BD(sผม)[0,2π)(sJ)(sJ)BD(sผม) ] ดังนั้นสำหรับวงกลมทั้งหมดที่ไม่ใช่ C ( s i )มีช่วงไม่เกิน n - 1 (วงกลมบางวงอาจไม่ตัดกับ C ( s i ) ) จำนวนสูงสุดสามารถพบได้ง่ายโดยการเรียงลำดับจุดสิ้นสุดของช่วงเวลา 2 ( n - 1 )ทั้งหมดสแกนตามลำดับและนับจำนวนที่ทับซ้อนกันในปัจจุบัน สำหรับแต่ละ C ( s ฉัน )ขั้นตอนนี้สามารถทำได้ใน O ( n log n[อีก.ผมnJ,อีndJ](sผม)n-1(sผม)2(n-1)(sผม)เวลาและมี nวงการดังกล่าวจึงซับซ้อนเวลาของขั้นตอนวิธีนี้คือ O ( n 2บันทึกn )O(nเข้าสู่ระบบn)nO(n2เข้าสู่ระบบn)


2
การจัดเรียงของวงกลมสามารถสร้างขึ้นในเวลา (ที่มีความน่าจะเป็นสูง) โดยใช้อัลกอริทึมแบบเพิ่มหน่วยสุ่ม อันที่จริงเวลาทำงานคือO ( n log n + k )โดยที่kคือจำนวนของวงกลมคู่ที่ตัดกัน ดูตำราเรขาคณิตที่คุณชื่นชอบ O(n2)O(nเข้าสู่ระบบn+k)k
JeffE

2

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

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

หากคุณกำลังมองหาเฉพาะชุดของจุดที่น่าจะเป็นค่าสูงสุดแล้วคุณอาจจะสามารถลดจำนวนชุดค่าผสมที่คุณต้องทดสอบโดยการเลือกจุดที่อยู่ในละแวกเซลล์ที่มีความหนาแน่นของละแวกใกล้เคียง มากกว่า X

เมื่อพูดถึงสิ่งนี้ทั้ง "การลด" อาจล้มเหลวได้และในกรณีที่เลวร้ายที่สุดคุณจะต้องคำนวณวงกลมเพื่อหาคะแนนที่เป็นไปได้ทั้งหมด


1

ใน Chazelle, B.; กระดาษลี DT 's Computing 36, 1-16 (1986), ทฤษฎีบทที่ 3 ในหน้า 15 ก็ระบุว่าสูงสุดที่ล้อมรอบวงกลมขั้นตอนวิธีการค้นหาใช้เวลา ค่าใช้จ่ายครั้งO(n2)

ฉันคิดว่ากุญแจสำคัญยังคงเป็นอัลกอริทึมการสร้างกราฟกล่าวถึงก่อนหน้านี้ (หรือดู Edelsbrunner, H. (1987), อัลกอริทึมใน Combinatorial Geometry, บทที่ 7) หลังจากนั้น maximun ที่ล้อมรอบการค้นพบวงกลมควรจะตรงไปตรงมาO(n2)

เห็นได้ชัดว่าปัญหานี้เทียบเท่ากับการหาจุดที่ครอบคลุมด้วยจำนวนสูงสุดของวงกลมที่กำหนดและเป็นเรื่องง่ายที่จะรู้เพียงว่าส่วนใหญ่จุดที่ตัดกันโดยวงกลม n ที่กำหนดจะต้องพิจารณาเป็นผู้สมัคร (สิ่งนี้จะนำไปสู่อัลกอริทึมO ( n 2 l o g ( n ) )โดยตรง)2n2O(n2log(n))

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

ทฤษฎีบทของจอร์แดนจุดตัดของวงกลมถูกล้อมรอบด้วยวงกลมเฉพาะเมื่อมันพบกับ "การจากไปของอาร์ค" ที่เป็นของวงกลมนั้นก่อนหรือมีเหตุการณ์อาร์คที่เป็นของวงกลมนั้น ดังนั้นหลังจากการเดินทางทั้งหมดสามารถหาวงกลมล้อมรอบได้ง่ายที่สุด มันเป็นเรื่องที่คล้ายกันในกรณีของการตัดสินใจเวลาที่ครอบคลุมสำหรับคะแนนที่มีช่วงเวลาที่สั่งตามเส้นตรง (หรือคือปัญหา 1D ของปัญหาการปิดล้อมนี้) ยกเว้นการเดินทางได้รับคำสั่งจากผู้เดินทางแล้ว ในขณะที่โดยออยเลอร์สูตรV+EF=2สำหรับกราฟเชิงระนาบจำนวนอาร์คทั้งหมดเป็นเส้นตรงตามจำนวนจุดยอดและเนื่องจากไม่จำเป็นต้องบันทึกข้อมูลที่เกี่ยวข้องอีกครั้งเมื่อเดินทางกลับไปที่จุดยอดที่เคยเยี่ยมชมแล้วโดยการจับมือบทแทรกค่าเวลาทั้งหมดจะเป็น )O(n2)


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