แบบฝึกหัดต่อไปนี้มอบให้กับนักเรียนที่ฉันควบคุมดูแล:
กำหนดจุดบนเครื่องบินประดิษฐ์อัลกอริธึมที่หาคู่ของจุดที่ระยะทางน้อยที่สุดในทุกจุด อัลกอริทึมควรใช้ในเวลาที่o ( n 2 )
มี (ค่อนข้าง) แบ่งและพิชิตอัลกอริทึมง่ายๆที่แก้งานในเวลาที่เป็น )
คำถามที่ 1 : มีอัลกอริทึมที่แก้ปัญหาที่เกิดขึ้นในเวลาที่เลวร้ายที่สุดหรือไม่?
สิ่งที่ทำให้ฉันสงสัยว่าสิ่งนี้อาจเป็นไปได้คือผลลัพธ์ที่ฉันจำได้ว่าได้เห็นในการพูดคุย (อ้างอิงชื่นชม) มันระบุสิ่งที่ตามเส้นที่ไม่เกินค่าคงที่จำนวนจุดสามารถจัดอยู่ในระนาบที่อยู่รอบ ๆ บางจุดPอยู่ภายในวงกลมรัศมีR ∈ RกับRระยะทางที่น้อยที่สุดระหว่างสองจุดที่เกี่ยวข้อง . ฉันคิดว่าc = 7จุดที่สร้างรูปหกเหลี่ยมด้านเท่ากันหมดที่มีpอยู่ตรงกลาง (ในกรณีที่รุนแรง)
ในกรณีดังกล่าวอัลกอริทึมต่อไปนี้ควรแก้ไขปัญหาได้ในขั้นตอน
fun mindist [] | p::[] = INFINITY
| mindist p1::p1::[] = dist(P[0], P[1])
| mindist p::r = let m = mindist(r) in
min(m, nextNeighbour(p, r, m))
end
โปรดทราบว่านี่คือ (อ้างว่าเป็น) ในเวลาเชิงเส้นเพราะมีเพียงจำนวนจุดคงที่ในr
ไม่ไกลm
จากp
(สมมติว่าข้อความข้างต้น); เฉพาะจุดเหล่านี้จะต้องมีการตรวจสอบเพื่อหาขั้นต่ำใหม่ มีการจับแน่นอน คุณจะใช้งานอย่างไรnextNeighbour
(อาจมีการประมวลผลล่วงหน้าในเวลาเชิงเส้น)
คำถามที่ 2 : ให้ชุดของจุดและจุดP ∉ R ปล่อยm ∈ Rด้วย
และ
\}
สมมติว่ามี จำกัด เป็นไปได้หรือไม่ที่จะหามีระยะทางน้อยที่สุดจากใน (ตัดจำหน่าย) เวลา ? (คุณอาจสันนิษฐานว่าจะถูกสร้างขึ้นโดยการเพิ่มคะแนนที่ตรวจสอบหนึ่งต่อหนึ่ง) p ′ ∈ R p , m p O ( 1 ) R p