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 ⟩
( 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 .) d+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 ).
B B B
- Jika , kembali .B
- Kalau tidak, pilih secara acak.
- Biarkan .
- Jika maka kembalikan .B
- Kalau tidak, kembalikan , di mana adalah basis dari .B ″ B ′ ∪ { X }
Digunakan sebagai untuk menghitung dasar .
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 daripada .
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 ⟩
kita dapat memiliki ; dan perhatikan bahwa :
Inilah yang bisa terjadi. Pengamatan pertama adalah bahwa :
- Kami ingin menghitung
- Pilih
- Biarkan
- Amati
- Jadi, biarkan menjadi basis dariB ′ ∪ { X } = { a , b , c , e }
- Perhatikan bahwa
- Kembalikan , yaitu{ b , c }
Sekarang pertimbangkan .
- Kami ingin menghitung
- Pilih
- Biarkan
- Amati
- Jadi mari menjadi dasar dariB ′ ∪ { X } = { b , c , d
- Amati bahwa
- Kembalikan , yaitu{ 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 )
Ditambahkan: presentasi berulang
Mungkin lebih mudah untuk memikirkan presentasi algoritma yang berulang. Saya tentu merasa lebih mudah untuk memvisualisasikan perilakunya.
Input : Daftar disk Output : DasarL
- Biarkan .
- Acak secara acak.
- Untuk setiap diL :
- Jika :
- Biarkan menjadi basis .
- Kembali ke langkah 2.
- Kembali .
Alasan algoritme berakhir, secara kebetulan, adalah bahwa langkah 5 selalu meningkatkan jari-jari - dan hanya ada banyak kemungkinan nilai .
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.
sumber
Jawaban:
Langkah ini menghapus dari L sebelum melanjutkan rekursi sebenarnya meningkatkan algoritma, karena menghilangkan X yang sudah ditambahkanX L X 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′′) X∈L X∈B′′ B′ X B⊆MSW(L,B) .
Dengan kata lain, peningkatan Anda pada pintasan algoritma ke langkah 3 di bagian di mana dipilih.X
sumber