Bagaimana tidak menghitung lingkaran terkecil yang melampirkan satu set lingkaran terbatas

17

Misalkan kita memiliki himpunan berhingga disk di , dan kami ingin menghitung disk terkecil yang . Sebuah cara standar untuk melakukan ini adalah dengan menggunakan algoritma Matoušek, Sharir dan Welzl [1] untuk menemukan dasar dari , dan biarkan , yang terkecil disk yang berisi . Disk dapat dihitung secara aljabar menggunakan fakta bahwa, karena adalah basis, setiap disk dalam bersinggungan dengan .R 2 D L D B L D = B B B B B B LR2DLDBLD=BBBBBB

( adalah dasar dari jika B adalah minimal sehingga B = L Sebuah dasar memiliki paling banyak tiga elemen;. Secara umum untuk bola di dasar memiliki paling Elemen .)BLLBB=L d+1Rdd+1

Ini adalah algoritma rekursif acak sebagai berikut. (Tapi lihat di bawah untuk versi yang berulang, yang mungkin lebih mudah dimengerti.)

Prosedur : Input : Kumpulan disk hingga , , di mana adalah basis (dari ).MSW(L,B)
B B BLBBB

  1. Jika , kembali .BL=B
  2. Kalau tidak, pilihXL secara acak.
  3. Biarkan .BMSW(L{X},B)
  4. Jika maka kembalikan .BXBB
  5. Kalau tidak, kembalikan , di mana adalah basis dari .B B { X }MSW(L,B)BB{X}

Digunakan sebagai MSW(L,) untuk menghitung dasar L .

Baru-baru ini saya punya alasan untuk mengimplementasikan algoritma ini. Setelah memverifikasi bahwa hasilnya benar dalam jutaan kasus uji yang dibuat secara acak, saya perhatikan bahwa saya telah membuat kesalahan dalam implementasi. Pada langkah terakhir saya mengembalikan MSW(L{X},B) daripada MSW(L,B) .

Meskipun ada kesalahan ini, algoritma ini memberikan jawaban yang benar.


Pertanyaan saya: Mengapa versi algoritma yang salah ini tampaknya memberikan jawaban yang benar di sini? Apakah selalu berhasil (terbukti)? Jika demikian, apakah itu juga benar dalam dimensi yang lebih tinggi?


Ditambahkan: beberapa kesalahpahaman

Beberapa orang telah mengajukan argumen yang salah tentang efek bahwa algoritma yang dimodifikasi sepele benar, sehingga mungkin berguna untuk mencegah beberapa kesalahpahaman di sini. Satu kepercayaan keliru yang populer tampaknya adalah bahwa . Berikut adalah contoh tandingan terhadap klaim itu. Disk yang diberikan seperti di bawah ini (batas \ langle a, b, e \ rangle juga ditampilkan dalam warna merah):a , b , c , d , e a , b , e BMSW(L,B)a,b,c,d,ea,b,e

Disk a, b, c, d, e

kita dapat memiliki MSW({c,d},{a,b,e})={c,d} ; dan perhatikan bahwa ec,d :

lingkaran tertutup c dan d terkecil tidak mengandung e

Inilah yang bisa terjadi. Pengamatan pertama adalah bahwa :MSW({c},{a,b,e})={b,c}

  • Kami ingin menghitungMSW({c},{a,b,e})
  • PilihX=c
  • BiarkanB=MSW(,{a,b,e})={a,b,e}
  • AmatiXB
  • Jadi, biarkan menjadi basis dariB { X } = { a , b , c , e }BB{X}={a,b,c,e}
  • Perhatikan bahwaB={b,c}
  • Kembalikan , yaitu{ b , c }MSW({c},{b,c}){b,c}

Sekarang pertimbangkan .MSW({c,d},{a,b,e})

  • Kami ingin menghitungMSW({c,d},{a,b,e})
  • PilihX=d
  • BiarkanB=MSW({c},{a,b,e})={b,c}
  • AmatiXB
  • Jadi mari menjadi dasar dariB { X } = { b , c , dBB{X}={b,c,d}
  • Amati bahwaB={c,d}
  • Kembalikan , yaitu{ c , d }MSW({c,d},{c,d}){c,d}

(Demi kepastian, mari kita katakan bahwa disk semuanya memiliki radius 2, dan berpusat di , , , , dan masing-masing.)( 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)


Ditambahkan: presentasi berulang

Mungkin lebih mudah untuk memikirkan presentasi algoritma yang berulang. Saya tentu merasa lebih mudah untuk memvisualisasikan perilakunya.

Input : Daftar disk Output : DasarLL
L

  1. Biarkan .B
  2. AcakL secara acak.
  3. Untuk setiap diLXL :
  4.   Jika :XB
  5.     Biarkan menjadi basis .BB{X}
  6.     Kembali ke langkah 2.
  7. Kembali .B

Alasan algoritme berakhir, secara kebetulan, adalah bahwa langkah 5 selalu meningkatkan jari-jari - dan hanya ada banyak kemungkinan nilai .BB

Versi yang dimodifikasi tidak memiliki presentasi berulang yang sederhana, sejauh yang saya bisa lihat. (Saya mencoba memberikan satu di edit sebelumnya untuk posting ini, tetapi itu salah - dan memberikan hasil yang salah.)


Referensi

[1] Jiří Matoušek, Micha Sharir, dan Emo Welzl. Batas subeksponensial untuk pemrograman linier. Algorithmica, 16 (4-5): 498–516, 1996.

Robin Houston
sumber
Pertama, di baris Anda "Input: ..." Saya pikir Anda ingin "(dari L)" daripada "(dari B)". Kedua, ketika mengembalikan MSW (L- {X}, B '') alih-alih MSW (L, B ''), basis Anda B '' didefinisikan sebagai basis [B 'union {X}] jadi X adalah masih dipastikan akan dilindungi oleh MSW (L- {X}, B ''), meskipun Anda menghapusnya dari set.
JimN
Tidak, maksud saya benar-benar “(dari B)” di sana, dan B tidak selalu merupakan bagian dari L dalam panggilan rekursif. Elemen BL tidak harus tercakup oleh MSW (L, B), seperti dalam contoh ini bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c di mana dan B = { a , b , e } (Tekan tombol panah kecil untuk melangkah melalui perhitungan.)L={a,b,c,d}B={a,b,e}
Robin Houston

Jawaban:

1

Langkah ini menghapus dari L sebelum melanjutkan rekursi sebenarnya meningkatkan algoritma, karena menghilangkan X yang sudah ditambahkanXLX dari kumpulan kandidat dasar. Itu akan selalu, terbukti bekerja, karena itu setara dengan algoritma yang ada, dan itu juga akan bekerja untuk dimensi yang lebih tinggi.

Lacak melalui algoritma. Saat Anda menggunakan , ada X L dan X B . Misalkan kita memilihnya lagi pada langkah 2. Terlepas dari hasil langkah 3, B akan selalu memiliki X , karena fungsi rekursif memiliki B M S W ( L , B ) yang invarianMSW(L,B)XLXBBXBMSW(L,B) .

Dengan kata lain, peningkatan Anda pada pintasan algoritma ke langkah 3 di bagian di mana dipilih.X

Larry B.
sumber
Tidak benar bahwa secara umum. Lihat contoh yang ditautkan dalam komentar saya pada pertanyaan. BMSW(L,B)
Robin Houston
Juga tidak secara umum bahwa , dalam hal ini! Apakah Anda berarti X B " ? Saya curiga jika Anda mencoba menjelaskan argumen Anda dengan lebih keras, Anda akan melihat bahwa itu tidak berhasil. XBXB
Robin Houston
NB. Bahkan tidak benar secara umum bahwa . BMSW(L,B)
Robin Houston
BMSW(L,B)
1
B=BX