Biz sonlu bir dizi olduğunu varsayalım disklerden ve biz en küçük diski hesaplamak isteyen için . Bunu yapmak için, standart bir şekilde bir baz bulmak için Matoušek, Sharir ve Welzl [1] algoritmasını kullanmak ve ve izin , küçük disk içeren . Disk cebirsel beri gerçeğini kullanarak hesaplanabilir temeli olan her diskin teğet olduğu .
( a, baz ve ise az olduğu şekilde bir baz en fazla üç öğe içerir;. Topları için genel olarak baz en sahiptir . Elemanları)
Aşağıdaki gibi rastgele bir özyinelemeli algoritmadır. (Ancak, anlaşılması daha kolay olabilecek yinelemeli bir sürüm için aşağıya bakın.)
Prosedür : giriş : diskler sonlu setleri L , B , B (bir temeli olan B ).
- Eğer dönüş B .
- Aksi takdirde rastgele seçin .
- Let .
- Eğer sonra dönmek B ' .
- Aksi takdirde geri , B " bir temeli olan B ' ∪ { X } .
Olarak kullanılır bir temel hesaplamak için L .
Son zamanlarda bu algoritmayı uygulamak için nedenim vardı. Rastgele oluşturulmuş milyonlarca test vakasında sonuçların doğru olduğunu doğruladıktan sonra, uygulamada bir hata yaptığımı fark ettim. Son adımda, bir dönen yerine M S W ( L , B " ) .
Bu hataya rağmen algoritma doğru cevapları veriyordu.
Benim sorum: Algoritmanın bu yanlış versiyonu görünüşte doğru cevapları neden veriyor? Her zaman (muhtemelen) işe yarıyor mu? Eğer öyleyse, bu daha yüksek boyutlarda da geçerli mi?
Eklendi: bazı yanlış anlamalar
Birkaç kişi, değiştirilmiş algoritmanın önemsiz derecede doğru olduğu konusunda yanlış argümanlar önermiştir, bu nedenle burada bazı yanlış anlamaların önlenmesi yararlı olabilir. Bir popüler yanlış inanış gibi görünüyor . İşte bu iddia için bir karşı örnek. Diskleri göz önüne alındığında , bir , b , c , d , e (sınır aşağıdaki gibi ⟨ bir , B , E ⟩ da kırmızı renkte gösterilmiştir):
Elimizdeki olabilir ; ve not bu e ∉ ⟨ c , d ⟩ :
İşte böyle olabilir. İlk gözlem ise :
- Biz hesaplamak isteyen
- X = c'yi seçin
- Let
- Gözlemleyin
- Öyleyse B ′ ∪ { X } = { a , b , c , e } 'nin temeli olsun
- Gözlemleyin
- Dönüş olup, { b , c }
Now consider .
- We wish to compute
- Choose
- Observe that
- Öyleyse bırak be a basis of
- Observe that
(Kesin olmak adına disklerinin olduğunu söyleyelim., , , , and respectively.)
Added: an iterative presentation
It may be easier to think about an iterative presentation of the algorithm. I certainly find it easier to visualise its behaviour.
Input: A list of disks
Output: A basis of
- Let .
- Shuffle randomly.
- For each in :
- If :
- Let be a basis of .
- Go back to step 2.
- Return .
The reason the algorithm terminates, incidentally, is that step 5 always increases the radius of – and there are only finitely many possible values of .
The modified version doesn’t have such a simple iterative presentation, as far as I can see. (I tried to give one in the previous edit to this post, but it was wrong – and gave incorrect results.)
Reference
[1] Jiří Matoušek, Micha Sharir, and Emo Welzl. A subexponential bound for linear programming. Algorithmica, 16(4-5):498–516, 1996.