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


17

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

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

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

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

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

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

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

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


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


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

หลายคนเสนอข้อโต้แย้งที่ไม่ถูกต้องกับเอฟเฟกต์ที่อัลกอริทึมที่แก้ไขนั้นถูกต้องเล็กน้อยดังนั้นจึงอาจเป็นประโยชน์ในการป้องกันความเข้าใจผิดบางประการที่นี่ หนึ่งความเชื่อที่ผิดที่นิยมน่าจะเป็นที่B) นี่คือตัวอย่างของการอ้างสิทธิ์ ให้ดิสก์ดังด้านล่าง (ขอบเขตของก็แสดงเป็นสีแดงด้วย):, B , C , D , E ⟨ , B , E ⟩B⊆⟨MSW(L,B)⟩a,b,c,d,e⟨a,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}
  • สังเกตว่าX∉⟨B′⟩
  • ดังนั้นให้เป็นพื้นฐานของB ′ ∪ { X } = { a , b , c , e }B″B′∪{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}
  • สังเกตว่าX∉⟨B′⟩
  • ดังนั้นให้เป็นพื้นฐานของB ′ ∪ { X } = { b , c , d }B″B′∪{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.   ถ้า :X∉⟨B⟩
  5.     ให้เป็นพื้นฐานของ\}BB∪{X}
  6.     กลับไปที่ขั้นตอนที่ 2
  7. ย้อนกลับBB

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

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


การอ้างอิง

[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′′)X∈LX∈B′′B′XB⊆MSW(L,B)

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


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

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

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

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

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