Sonlu bir daire kümesini çevreleyen en küçük daireyi hesaplama


17

Biz sonlu bir dizi olduğunu varsayalım L disklerden R2 ve biz en küçük diski hesaplamak isteyen D için LD . Bunu yapmak için, standart bir şekilde bir baz bulmak için Matoušek, Sharir ve Welzl [1] algoritmasını kullanmak B ve L ve izin D=B , küçük disk içeren B . Disk B cebirsel beri gerçeğini kullanarak hesaplanabilir B temeli olan her diskin B teğet olduğu B .

( BL a, baz ve L ise B az olduğu şekilde B=L bir baz en fazla üç öğe içerir;. Topları için genel olarak Rd baz en sahiptir d+1 . 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 ).MSW(L,B)
LBBB

  1. Eğer dönüş B .L=B
  2. Aksi takdirde rastgele seçin .XL
  3. Let .BMSW(L{X},B)
  4. Eğer sonra dönmek B ' .XBB
  5. Aksi takdirde geri , B " bir temeli olan B '{ X } .MSW(L,B)BB{X}

Olarak kullanılır bir temel hesaplamak için L .MSW(L,)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 " ) .MSW(L{X},B)MSW(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):BMSW(L,B)a,b,c,d,ea,b,e

A, b, c, d, e diskleri

Elimizdeki olabilir ; ve not bu e c , d :MSW({c,d},{a,b,e})={c,d}ec,d

c ve d'nin en küçük kapalı dairesi e içermez

İşte böyle olabilir. İlk gözlem ise :MSW({c},{a,b,e})={b,c}

  • Biz hesaplamak isteyen MSW({c},{a,b,e})
  • X = c'yi seçinX=c
  • Let B=MSW(,{a,b,e})={a,b,e}
  • Gözlemleyin XB
  • Öyleyse B { X } = { a , b , c , e } 'nin temeli olsunBB{X}={a,b,c,e}
  • Gözlemleyin B={b,c}
  • Dönüş olup, { b , c }MSW({c},{b,c}){b,c}

Now consider MSW({c,d},{a,b,e}).

  • We wish to compute MSW({c,d},{a,b,e})
  • Choose X=d
  • B=MSW({c},{a,b,e})={b,c}
  • Observe that XB
  • Öyleyse bırak B be a basis of B{X}={b,c,d}
  • Observe that B={c,d}
  • MSW({c,d},{c,d}){c,d}

(Kesin olmak adına disklerinin olduğunu söyleyelim.a,b,c,d,e(30,5), (30,35), (10,5), (60,26), and (5,26) 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 L of disks
Output: A basis of L

  1. Let B.
  2. Shuffle L randomly.
  3. For each X in L:
  4.   If XB:
  5.     Let B be a basis of B{X}.
  6.     Go back to step 2.
  7. Return B.

The reason the algorithm terminates, incidentally, is that step 5 always increases the radius of B – and there are only finitely many possible values of B.

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.


Firstly, in your line "Input: ..." I think you want "(of L)" rather than "(of B)". Secondly, when returning MSW(L-{X}, B'') instead of MSW(L,B''), your basis B'' is defined to be a basis of [B' union {X}] so X is still ensured to be covered by MSW(L-{X},B'') , even though you removed it from the set.
JimN

No, I really do mean “(of B)” there, and B is not necessarily a subset of L in recursive calls. Elements of B-L are not necessarily covered by MSW(L,B), as in this example bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c where L={a,b,c,d} and B={a,b,e} (Press the little arrow buttons to step through the computation.)
Robin Houston

Yanıtlar:


1

This step of removing X from L before continuing recursion actually improves the algorithm, because it removes the already-added X from the pool of basis candidates. It will always, provably work, because it's equivalent to the existing algorithm, and it will also work for higher dimensions.

Trace through the algorithm. When you use MSW(L,B), there is XL and XB. Suppose we chose it again in step 2. Regardless of the result of step 3, B will always have X, because the recursive function has the invariant BMSW(L,B).

In other words, your improvement to the algorithm shortcuts to step 3 in the part where X is chosen.


It is not true that BMSW(L,B) in general. Have a look at the example linked in my comment on the question.
Robin Houston

Neither is it true in general that XB, for that matter! Did you mean XB? I suspect if you try to explain your argument more rigorously, you will see that it does not work.
Robin Houston

NB. It isn’t even true in general that BMSW(L,B).
Robin Houston

I’ve added a section to the question giving a counterexample to BMSW(L,B), since several people have supposed it to be true.
Robin Houston

1
Oh, I totally missed that! B=BX. Yeah, this answer is totally wrong. Should I delete it?
Larry B.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.