Comment ne pas calculer le plus petit cercle entourant un ensemble fini de cercles


17

Supposons que nous ayons un ensemble fini L de disques en R2 , et nous souhaitons calculer le plus petit disque D pour lequel LD . Une manière standard de le faire est d'utiliser l'algorithme de Matoušek, Sharir et Welzl [1] pour trouver une base B de L , et que D=B , le plus petit disque contenant B . Le disque B peut être calculé algébriquement utilisant le fait que, étant donné que B est une base, chaque disque B est tangente à B.

( BL est une base de L si B est minimale telle que B=L base A comporte au plus trois éléments;. En général pour les boules dans Rd une base a au plus d+1 . Éléments)

Il s'agit d'un algorithme récursif randomisé comme suit. (Mais voir ci-dessous pour une version itérative, qui peut être plus facile à comprendre.)

Procédure : MSW(L,B)
Entrée : ensembles finis de disques L , B , où B est une base (de B ).

  1. Si L= , retour B .
  2. Sinon, choisissez XL au hasard.
  3. Soit BMSW(L{X},B) .
  4. Si XB puis retour B .
  5. Sinon, retournez , où B est une base de B { X } .MSW(L,B)BB{X}

Utilisé comme pour calculer une base de L .MSW(L,)L

Récemment, j'ai eu à implémenter cet algorithme. Après avoir vérifié que les résultats étaient corrects dans des millions de cas de test générés aléatoirement, j'ai remarqué que j'avais fait une erreur dans l'implémentation. Dans la dernière étape, je retournais plutôt que M S W ( L , B ) .MSW(L{X},B)MSW(L,B)

Malgré cette erreur, l'algorithme donnait les bonnes réponses.


Ma question: pourquoi cette version incorrecte de l'algorithme donne-t-elle apparemment des réponses correctes ici? Cela fonctionne-t-il toujours (de manière prouvée)? Si oui, est-ce également vrai dans les dimensions supérieures?


Ajouté: quelques idées fausses

Plusieurs personnes ont proposé des arguments incorrects à l'effet que l'algorithme modifié est trivialement correct, il peut donc être utile de prévenir certaines idées fausses ici. Une fausse croyance populaire semble être que . Voici un contre-exemple à cette affirmation. Compte tenu de disques a , b , c , d , e comme ci - dessous (la limite de a , b , e est également montré en rouge):BMSW(L,B)a,b,c,d,ea,b,e

Disques a, b, c, d, e

on peut avoir ; et notez que e c , d :MSW({c,d},{a,b,e})={c,d}ec,d

le plus petit cercle englobant de c et d ne contient pas e

Voici comment cela peut se produire. La première observation est que :MSW({c},{a,b,e})={b,c}

  • Nous souhaitons calculer MSW({c},{a,b,e})
  • Choisissez X=c
  • Soit B=MSW(,{a,b,e})={a,b,e}
  • Remarquons que XB
  • Soit donc une base de B { X } = { a , b , c , e }BB{X}={a,b,c,e}
  • Observez que B={b,c}
  • Renvoie , qui est { b , c }MSW({c},{b,c}){b,c}

Considérons maintenant .MSW({c,d},{a,b,e})

  • Nous souhaitons calculer MSW({c,d},{a,b,e})
  • Choisissez X=d
  • Soit B=MSW({c},{a,b,e})={b,c}
  • Remarquons que XB
  • Soit donc une base de B { X } = { b , c , d }BB{X}={b,c,d}
  • Observez que B={c,d}
  • Renvoie , qui est { c , d }MSW({c,d},{c,d}){c,d}

(Par souci de clarté, disons que les disques ont tous un rayon 2 et sont centrés sur ( 30 , 5 ) , ( 30 , 35 ) , ( 10 , 5 ) , ( 60 , 26 ) et ( 5 , 26 ) respectivement.)a,b,c,d,e(30,5)(30,35)(10,5)(60,26)(5,26)


Ajouté: une présentation itérative

Il peut être plus facile de penser à une présentation itérative de l'algorithme. Je trouve certainement plus facile de visualiser son comportement.

Entrée : une liste de disques Sortie : une base LL
L

  1. Soit .B
  2. Mélangez au hasard.L
  3. Pour chaque dans L :XL
  4.   Si :XB
  5.     Soit une base de B { X } .BB{X}
  6.     Revenez à l'étape 2.
  7. Retour .B

La raison pour laquelle l'algorithme se termine, soit dit en passant, est que l' étape 5 augmente toujours le rayon de - et il n'y a que de nombreuses valeurs possibles finiment de B .BB

La version modifiée n'a pas une présentation itérative aussi simple que je sache. (J'ai essayé d'en donner un dans l'édition précédente de ce post, mais c'était faux - et j'ai donné des résultats incorrects.)


Référence

[1] Jiří Matoušek, Micha Sharir et Emo Welzl. Une limite sous-exponentielle pour la programmation linéaire. Algorithmica, 16 (4-5): 498-516, 1996.


Tout d'abord, dans votre ligne "Input: ..." je pense que vous voulez "(de L)" plutôt que "(de B)". Deuxièmement, lorsque vous retournez MSW (L- {X}, B '') au lieu de MSW (L, B ''), votre base B '' est définie comme une base de [B 'union {X}], donc X est toujours assuré d'être couvert par MSW (L- {X}, B ''), même si vous l'avez retiré de l'ensemble.
JimN

Non, je veux vraiment dire «(de B)», et B n'est pas nécessairement un sous-ensemble de L dans les appels récursifs. Les éléments de BL ne sont pas nécessairement couverts par MSW (L, B), comme dans cet exemple bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c et B = {L={a,b,c,d}B={a,b,e} (Appuyez sur les petits boutons fléchés pour parcourir le calcul.)
Robin Houston

Réponses:


1

Cette étape de suppression de X de avant de continuer la récursivité améliore réellement l'algorithme, car elle supprime le X déjà ajouté du pool de candidats de base. Cela fonctionnera toujours, de manière prouvée, car il est équivalent à l'algorithme existant, et il fonctionnera également pour des dimensions plus élevées.LX

Suivez l'algorithme. Lorsque vous utilisez , il y a X L et X B . Supposons que nous l'avons choisi à nouveau à l'étape 2. Quel que soit le résultat de l'étape 3, B aura toujours X , car la fonction récursive a l'invariant B MMSW(L,B)XLXBBX .BMSW(L,B)

En d'autres termes, votre amélioration des raccourcis de l'algorithme à l'étape 3 dans la partie où est choisi.X


Il n'est pas vrai que en général. Jetez un oeil à l'exemple lié dans mon commentaire sur la question. BMSW(L,B)
Robin Houston

Il n'est pas vrai non plus en général que , d'ailleurs! Vouliez - vous dire X B " ? Je soupçonne que si vous essayez d'expliquer votre argument plus rigoureusement, vous verrez que cela ne fonctionne pas. XBXB
Robin Houston

NB. Il est même pas vrai en général que . BMSW(L,B)
Robin Houston

J'ai ajouté une section à la question en donnant un contre - , puisque plusieurs personnes ont supposé qu'il soit vrai. BMSW(L,B)
Robin Houston

1
Oh, j'ai totalement raté ça! . Ouais, cette réponse est totalement fausse. Dois-je le supprimer? B=BX
Larry B.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.