สมมติว่าเรามีขอบเขตของดิสก์ในและเราต้องการที่จะคำนวณดิสก์ขนาดเล็กที่สุดที่D วิธีมาตรฐานในการทำเช่นนี้คือการใช้อัลกอริทึมของ Matousek, Sharir และ Welzl [1] เพื่อหาพื้นฐานของและให้ดิสก์ขนาดเล็กที่สุดที่มีB ดิสก์อาจคำนวณพีชคณิตโดยใช้ความจริงที่ว่าตั้งแต่เป็นพื้นฐานแต่ละดิสก์ในสัมผัสกันไปB
(เป็นพื้นฐานของถ้านั้นน้อยที่สุดเช่นพื้นฐานมีองค์ประกอบอย่างน้อยสามองค์ประกอบโดยทั่วไปสำหรับลูกในเป็นพื้นฐาน มีองค์ประกอบมากที่สุด)L B ⟨ B ⟩ = ⟨ L ⟩ R d d + 1
มันเป็นอัลกอริทึมแบบสุ่มซ้ำดังนี้ (แต่ดูด้านล่างสำหรับเวอร์ชันที่ซ้ำซึ่งอาจเข้าใจได้ง่ายขึ้น)
โพรซีเดอร์ : อินพุต : ชุดดิสก์จำนวน จำกัด ,โดยที่เป็นพื้นฐาน (ของ )
- ถ้ากลับB
- มิฉะนั้นเลือกโดยการสุ่ม
- ให้B)
- ถ้าแล้วกลับB'B '
- มิฉะนั้นกลับที่เป็นพื้นฐานของ\}
ใช้เป็นในการคำนวณพื้นฐานของL
เมื่อเร็ว ๆ นี้ฉันมีสาเหตุที่จะใช้อัลกอริทึมนี้ หลังจากตรวจสอบว่าผลลัพธ์นั้นถูกต้องในกรณีทดสอบนับล้านรายการที่สร้างแบบสุ่มฉันสังเกตว่าฉันได้ทำข้อผิดพลาดในการใช้งาน ในขั้นตอนสุดท้ายที่ผมกำลังจะกลับมากกว่า'')
แม้จะมีข้อผิดพลาดนี้อัลกอริทึมก็ให้คำตอบที่ถูกต้อง
คำถามของฉัน:ทำไมอัลกอริทึมรุ่นที่ไม่ถูกต้องนี้ให้คำตอบที่ถูกต้องที่นี่ มันใช้งานได้ดีหรือไม่ ถ้าเป็นเช่นนั้นนั่นเป็นความจริงในมิติที่สูงขึ้นหรือไม่
เพิ่ม: ความเข้าใจผิดบางอย่าง
หลายคนเสนอข้อโต้แย้งที่ไม่ถูกต้องกับเอฟเฟกต์ที่อัลกอริทึมที่แก้ไขนั้นถูกต้องเล็กน้อยดังนั้นจึงอาจเป็นประโยชน์ในการป้องกันความเข้าใจผิดบางประการที่นี่ หนึ่งความเชื่อที่ผิดที่นิยมน่าจะเป็นที่B) นี่คือตัวอย่างของการอ้างสิทธิ์ ให้ดิสก์ดังด้านล่าง (ขอบเขตของก็แสดงเป็นสีแดงด้วย):, B , C , D , E ⟨ , B , E ⟩
เราสามารถมี ; และโปรดทราบว่า :อี∉ ⟨ ค, d ⟩
นี่คือวิธีที่มันสามารถเกิดขึ้นได้ การสังเกตครั้งแรกคือ :
- เราต้องการคำนวณ
- เลือก
- ให้
- สังเกตว่า
- ดังนั้นให้เป็นพื้นฐานของB ′ ∪ { X } = { a , b , c , e }
- สังเกตว่า
- ส่งคืนซึ่งคือ{ b , c }
ตอนนี้พิจารณา\})
- เราต้องการคำนวณ
- เลือก
- ให้
- สังเกตว่า
- ดังนั้นให้เป็นพื้นฐานของB ′ ∪ { X } = { b , c , d }
- สังเกตว่า
- ส่งคืนซึ่งคือ{ c , d }
(เพื่อความชัดเจนให้เราบอกว่าดิสก์ทั้งหมดมีรัศมี 2 และมีศูนย์กลางอยู่ที่ , , ,และตามลำดับ)( 30 , 5 ) ( 30 , 35 ) ( 10 , 5 ) ( 60 , 26 ) ( 5 , 26 )
เพิ่ม: การนำเสนอซ้ำ
มันอาจจะง่ายกว่าที่จะคิดเกี่ยวกับการนำเสนอซ้ำของอัลกอริทึม แน่นอนว่าฉันเห็นภาพพฤติกรรมของมันได้ง่ายขึ้น
อินพุต : รายการของดิสก์เอาต์พุต : พื้นฐานของล
- Let B
- สลับสุ่ม
- สำหรับแต่ละใน :L
- ถ้า :
- ให้เป็นพื้นฐานของ\}
- กลับไปที่ขั้นตอนที่ 2
- ย้อนกลับB
เหตุผลที่สิ้นสุดขั้นตอนวิธีบังเอิญเป็นที่ขั้นตอนที่ 5 เสมอเพิ่มรัศมีของ - และมีค่าที่เป็นไปเพียงขีดหลายB
เวอร์ชันที่แก้ไขไม่มีการนำเสนอซ้ำ ๆ แบบง่ายๆเท่าที่ฉันเห็น (ฉันพยายามที่จะให้หนึ่งในการแก้ไขก่อนหน้านี้ไปโพสต์นี้ แต่มันผิด - และให้ผลลัพธ์ที่ไม่ถูกต้อง)
การอ้างอิง
[1] JiříMatoušek, Micha Sharir และ Emo Welzl ขอบเขตเอ็กซ์โพเนนเชียลสำหรับการโปรแกรมเชิงเส้น อัลกอริทึม, 16 (4-5): 498–516, 1996