วิธีที่จะไม่คำนวณวงกลมที่เล็กที่สุดซึ่งล้อมรอบกลุ่มของขอบเขตที่แน่นอน


17

สมมติว่าเรามีขอบเขตLของดิสก์ในและเราต้องการที่จะคำนวณดิสก์ขนาดเล็กที่สุดที่D วิธีมาตรฐานในการทำเช่นนี้คือการใช้อัลกอริทึมของ Matousek, Sharir และ Welzl [1] เพื่อหาพื้นฐานของและให้ดิสก์ขนาดเล็กที่สุดที่มีB ดิสก์อาจคำนวณพีชคณิตโดยใช้ความจริงที่ว่าตั้งแต่เป็นพื้นฐานแต่ละดิสก์ในสัมผัสกันไปBR2DLDBLD=BBBBBB

(เป็นพื้นฐานของถ้านั้นน้อยที่สุดเช่นพื้นฐานมีองค์ประกอบอย่างน้อยสามองค์ประกอบโดยทั่วไปสำหรับลูกในเป็นพื้นฐาน มีองค์ประกอบมากที่สุด)L B B = L R d d + 1BLLBB=LRdd+1

มันเป็นอัลกอริทึมแบบสุ่มซ้ำดังนี้ (แต่ดูด้านล่างสำหรับเวอร์ชันที่ซ้ำซึ่งอาจเข้าใจได้ง่ายขึ้น)

โพรซีเดอร์ : อินพุต : ชุดดิสก์จำนวน จำกัด ,โดยที่เป็นพื้นฐาน (ของ )MSW(L,B)
LBBB

  1. ถ้ากลับBL=B
  2. มิฉะนั้นเลือกโดยการสุ่มXL
  3. ให้B)BMSW(L{X},B)
  4. ถ้าแล้วกลับB'B 'XBB
  5. มิฉะนั้นกลับMSW(L,B)ที่Bเป็นพื้นฐานของB{X}\}

ใช้เป็นMSW(L,)ในการคำนวณพื้นฐานของLL

เมื่อเร็ว ๆ นี้ฉันมีสาเหตุที่จะใช้อัลกอริทึมนี้ หลังจากตรวจสอบว่าผลลัพธ์นั้นถูกต้องในกรณีทดสอบนับล้านรายการที่สร้างแบบสุ่มฉันสังเกตว่าฉันได้ทำข้อผิดพลาดในการใช้งาน ในขั้นตอนสุดท้ายที่ผมกำลังจะกลับMSW(L{X},B)มากกว่าMSW(L,B)'')

แม้จะมีข้อผิดพลาดนี้อัลกอริทึมก็ให้คำตอบที่ถูกต้อง


คำถามของฉัน:ทำไมอัลกอริทึมรุ่นที่ไม่ถูกต้องนี้ให้คำตอบที่ถูกต้องที่นี่ มันใช้งานได้ดีหรือไม่ ถ้าเป็นเช่นนั้นนั่นเป็นความจริงในมิติที่สูงขึ้นหรือไม่


เพิ่ม: ความเข้าใจผิดบางอย่าง

หลายคนเสนอข้อโต้แย้งที่ไม่ถูกต้องกับเอฟเฟกต์ที่อัลกอริทึมที่แก้ไขนั้นถูกต้องเล็กน้อยดังนั้นจึงอาจเป็นประโยชน์ในการป้องกันความเข้าใจผิดบางประการที่นี่ หนึ่งความเชื่อที่ผิดที่นิยมน่าจะเป็นที่B) นี่คือตัวอย่างของการอ้างสิทธิ์ ให้ดิสก์ดังด้านล่าง (ขอบเขตของก็แสดงเป็นสีแดงด้วย):, B , C , D , E , B , E BMSW(L,B)a,b,c,d,ea,b,e

ดิสก์ a, b, c, d, e

เราสามารถมี ; และโปรดทราบว่า :อี, d MSW({,d},{a,,อี})={,d}อี,d

วงกลมที่เล็กที่สุดของ c และ d ไม่มี e

นี่คือวิธีที่มันสามารถเกิดขึ้นได้ การสังเกตครั้งแรกคือ :MSW({},{a,,อี})={,}

  • เราต้องการคำนวณMSW({},{a,,อี})
  • เลือกX=c
  • ให้B=MSW(,{a,b,e})={a,b,e}
  • สังเกตว่าXB
  • ดังนั้นให้เป็นพื้นฐานของB { X } = { a , b , c , e }BB{X}={a,b,c,e}
  • สังเกตว่าB={b,c}
  • ส่งคืนซึ่งคือ{ b , c }MSW({c},{b,c}){b,c}

ตอนนี้พิจารณา\})MSW({c,d},{a,b,e})

  • เราต้องการคำนวณMSW({c,d},{a,b,e})
  • เลือกX=d
  • ให้B=MSW({c},{a,b,e})={b,c}
  • สังเกตว่าXB
  • ดังนั้นให้เป็นพื้นฐานของB { X } = { b , c , d }BB{X}={b,c,d}
  • สังเกตว่าB={c,d}
  • ส่งคืนซึ่งคือ{ c , d }MSW({c,d},{c,d}){c,d}

(เพื่อความชัดเจนให้เราบอกว่าดิสก์ทั้งหมดมีรัศมี 2 และมีศูนย์กลางอยู่ที่ , , ,และตามลำดับ)( 30 , 5 ) ( 30 , 35 ) ( 10 , 5 ) ( 60 , 26 ) ( 5 , 26 )a,b,c,d,e(30,5)(30,35)(10,5)(60,26)(5,26)


เพิ่ม: การนำเสนอซ้ำ

มันอาจจะง่ายกว่าที่จะคิดเกี่ยวกับการนำเสนอซ้ำของอัลกอริทึม แน่นอนว่าฉันเห็นภาพพฤติกรรมของมันได้ง่ายขึ้น

อินพุต : รายการของดิสก์เอาต์พุต : พื้นฐานของL
L

  1. Let BB
  2. สลับสุ่มL
  3. สำหรับแต่ละใน :LXL
  4.   ถ้า :XB
  5.     ให้เป็นพื้นฐานของ\}BB{X}
  6.     กลับไปที่ขั้นตอนที่ 2
  7. ย้อนกลับBB

เหตุผลที่สิ้นสุดขั้นตอนวิธีบังเอิญเป็นที่ขั้นตอนที่ 5 เสมอเพิ่มรัศมีของ - และมีค่าที่เป็นไปเพียงขีดหลายBBB

เวอร์ชันที่แก้ไขไม่มีการนำเสนอซ้ำ ๆ แบบง่ายๆเท่าที่ฉันเห็น (ฉันพยายามที่จะให้หนึ่งในการแก้ไขก่อนหน้านี้ไปโพสต์นี้ แต่มันผิด - และให้ผลลัพธ์ที่ไม่ถูกต้อง)


การอ้างอิง

[1] JiříMatoušek, Micha Sharir และ Emo Welzl ขอบเขตเอ็กซ์โพเนนเชียลสำหรับการโปรแกรมเชิงเส้น อัลกอริทึม, 16 (4-5): 498–516, 1996


ประการแรกในบรรทัด "อินพุต: ... " ฉันคิดว่าคุณต้องการ "(จาก L)" มากกว่า "(จาก B)" ประการที่สองเมื่อส่งคืนขยะ (L- {X}, B '') แทนขยะ (L, B '') พื้นฐาน B '' ของคุณถูกกำหนดให้เป็นพื้นฐานของ [B 'union {X}] ดังนั้น X คือ ยังคงมั่นใจว่าจะถูกปกคลุมด้วยขยะ (L- {X}, B '') แม้ว่าคุณจะลบมันออกจากชุด
JimN

ไม่ฉันหมายถึง“ (จาก B)” จริงๆและ B ไม่จำเป็นต้องเป็นชุดย่อยของ L ในการโทรซ้ำ องค์ประกอบของ BL ไม่จำเป็นต้องครอบคลุมโดยขยะ (L, B) เช่นในตัวอย่างนี้bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392cโดยที่และB = { a , b , e } (กดปุ่มลูกศรเล็ก ๆ เพื่อข้ามการคำนวณ)L={a,b,c,d}B={a,b,e}
Robin Houston

คำตอบ:


1

ขั้นตอนการลบออกจากLก่อนที่การเรียกซ้ำครั้งต่อไปจะช่วยปรับปรุงอัลกอริทึมได้จริงเนื่องจากจะลบX ที่เพิ่มไปแล้วออกจากกลุ่มผู้สมัครพื้นฐาน มันจะใช้งานได้เสมอเพราะมันเทียบเท่ากับอัลกอริธึมที่มีอยู่และมันจะทำงานในมิติที่สูงกว่าXLX

ติดตามผ่านอัลกอริทึม เมื่อคุณใช้มีX LและX B ' ' สมมติว่าเราเลือกมันอีกครั้งในขั้นตอนที่ 2 โดยไม่คำนึงถึงผลการขั้นตอนที่ 3, B 'มักจะมีXเพราะฟังก์ชันเวียนมีค่าคงที่B M S W ( L , B )MSW(L,B)XLXBBXBMSW(L,B)

กล่าวอีกนัยหนึ่งการปรับปรุงทางลัดของอัลกอริทึมเป็นขั้นตอนที่ 3 ในส่วนที่ถูกเลือกX


มันไม่เป็นความจริงที่โดยทั่วไป ลองดูตัวอย่างที่เชื่อมโยงในความคิดเห็นของฉันกับคำถาม BMSW(L,B)
Robin Houston

ไม่เป็นความจริงเลยที่สำหรับเรื่องนั้น! คุณหมายถึงX B " ? ฉันสงสัยว่าถ้าคุณพยายามอธิบายการโต้แย้งของคุณอย่างจริงจังมากขึ้นคุณจะเห็นว่ามันไม่ได้ผล XBXB
Robin Houston

NB มันไม่ได้จริงในทั่วไปที่ BMSW(L,B)
Robin Houston

ฉันได้เพิ่มส่วนคำถามให้ counterexample จะเป็นเนื่องจากหลายคนได้ควรมันจะเป็นจริง BMSW(L,B)
Robin Houston

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