Come non calcolare il cerchio più piccolo che racchiude un insieme finito di cerchi


17

Supponiamo di avere un insieme finito L di dischi in , e vogliamo calcolare il più piccolo disco per i quali . Un modo standard per farlo è quello di utilizzare l'algoritmo di Matoušek, Sharir e Welzl [1] per trovare una base di , e lasciare che , il disco più piccolo che contiene . Il disco può essere calcolato algebricamente usando il fatto che, poiché è una base, ogni disco in è tangente a .R2DLDBLD=BBBBBB

( è una base di se è minima tale che . Una base ha al massimo tre elementi; in generale per le palle in una base ha al massimo elementi.)BLB B = L R d d + 1LBB=LRdd+1

È un algoritmo ricorsivo randomizzato come segue. (Ma vedi sotto per una versione iterativa, che può essere più facile da capire.)

Procedura : Input : insiemi finiti di dischi , , dove è una base (di ).MSW(L,B)
B B BLBBB

  1. Se , ritorno .L=B
  2. Altrimenti scegli a caso.XL
  3. Sia .BMSW(L{X},B)
  4. Se restituisce .B 'XBB
  5. Altrimenti restituire , dove B '' è una base di B '\ cup \ {X \} .B B { X }MSW(L,B)BB{X}

Usato come MSW(L,) per calcolare una base di L .

Di recente ho avuto motivo di implementare questo algoritmo. Dopo aver verificato che i risultati erano corretti in milioni di casi di test generati casualmente, ho notato che avevo fatto un errore nell'implementazione. Nell'ultimo passaggio stavo restituendo MSW(L-{X},B") anziché MSW(L,B") .

Nonostante questo errore, l'algoritmo stava dando le risposte giuste.


La mia domanda: perché questa versione errata dell'algoritmo sembra fornire risposte corrette qui? Funziona sempre (in modo dimostrabile)? Se è così, è vero anche in dimensioni superiori?


Aggiunto: alcune idee sbagliate

Diverse persone hanno proposto argomenti errati secondo cui l'algoritmo modificato è banalmente corretto, quindi può essere utile prevenire alcune idee sbagliate qui. Una falsa credenza popolare sembra essere che . Ecco un controesempio a tale affermazione. Dati i dischi come di seguito (il limite di è mostrato anche in rosso):un , b , c , d , e un , b , e BMSW(L,B)a,b,c,d,ea,b,e

Dischi a, b, c, d, e

possiamo avere ; e nota che :e c , d MSW({c,d},{a,b,e})={c,d}ec,d

il più piccolo cerchio che racchiude c e d non contiene e

Ecco come può succedere. La prima osservazione è che :MSW({c},{a,b,e})={b,c}

  • Desideriamo calcolareMSW({c},{a,b,e})
  • ScegliX=c
  • SiaB=MSW(,{a,b,e})={a,b,e}
  • Osserva cheXB
  • Quindi lascia che sia una base diB { X } = { a , b , c , e }BB{X}={a,b,c,e}
  • Osserva cheB={b,c}
  • Restituisci{ b , c }MSW({c},{b,c}) , che è{b,c}

Adesso considera MSW({c,d},{a,b,e}) .

  • Desideriamo calcolareMSW({c,d},{a,b,e})
  • Scegliere X=d
  • Permettere B=MSW({c},{a,b,e})={b,c}
  • Osservalo XB
  • Quindi lascia cheB { X } = { b , c , d }B sia una base diB{X}={b,c,d}
  • Osservalo B={c,d}
  • Restituisce , ovvero{ c , d }MSW({c,d},{c,d}){c,d}

(Per motivi di chiarezza, supponiamo che i dischi abbiano tutti il ​​raggio 2 e siano centrati su , , , e rispettivamente.)( 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)


Aggiunto: una presentazione iterativa

Potrebbe essere più semplice pensare a una presentazione iterativa dell'algoritmo. Trovo certamente più facile visualizzarne il comportamento.

Input : una lista di dischi Output : una base diL
L

  1. Lascia cheB .
  2. ShuffleL modo casuale.
  3. Per ogni inLXL :
  4.   SeXB :
  5.     Sia una base diBB{X} .
  6.     Torna al passaggio 2.
  7. Return .B

Il motivo per cui l'algoritmo termina, per inciso, è che il passaggio 5 aumenta sempre il raggio di - e ci sono solo finitamente molti possibili valori diBB .

La versione modificata non ha una presentazione iterativa così semplice, per quanto posso vedere. (Ho provato a dare uno nella modifica precedente a questo post, ma era sbagliato - e ha dato risultati errati.)


Riferimento

[1] Jiří Matoušek, Micha Sharir e Emo Welzl. Un limite subesponenziale per la programmazione lineare. Algorithmica, 16 (4-5): 498-516, 1996.


Innanzitutto, nella riga "Input: ..." Penso che tu voglia "(di L)" anziché "(di B)". In secondo luogo, quando si restituisce MSW (L- {X}, B '') anziché MSW (L, B ''), la base B '' viene definita come base di [B 'unione {X}], quindi X è assicurato comunque di essere coperto da MSW (L- {X}, B ''), anche se l'hai rimosso dal set.
JimN,

No, intendo davvero "(di B)" lì, e B non è necessariamente un sottoinsieme di L nelle chiamate ricorsive. Gli elementi di BL non sono necessariamente coperti da MSW (L, B), come in questo esempio bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c dove e (premi i piccoli pulsanti freccia per scorrere il calcolo).L={a,b,c,d}B={a,b,e}
Robin Houston,

Risposte:


1

Questo passaggio di rimozione di da prima di continuare la ricorsione migliora effettivamente l'algoritmo, poiché rimuove la già aggiuntaXLX dal pool di candidati di base. Funzionerà sempre, in modo dimostrabile, perché equivale all'algoritmo esistente e funzionerà anche per dimensioni superiori.

Traccia attraverso l'algoritmo. Quando usi , ci sono X L e X B . Supponiamo di averlo scelto di nuovo nel passaggio 2. Indipendentemente dal risultato del passaggio 3, B avrà sempre X , poiché la funzione ricorsiva ha l'invariante B M S W ( L ,MSW(L,B)XLXBBX .BMSW(L,B)

In altre parole, il miglioramento dell'algoritmo consente di accedere al passaggio 3 nella parte in cui X è stato scelto


Non è vero che in generale. Dai un'occhiata all'esempio collegato nel mio commento sulla domanda. BMSW(L,B)
Robin Houston,

Né è vero in generale che , del resto ! Forse cercavi X B " ? Ho il sospetto che se provi a spiegare la tua argomentazione in modo più rigoroso, vedrai che non funziona. XBXB
Robin Houston,

NB. Non è nemmeno vero in generale che . BMSW(L,B)
Robin Houston,

Ho aggiunto una sezione alla domanda dando un controesempio per , dal momento che diverse persone hanno supposto che fosse vero. BMSW(L,B)
Robin Houston,

1
Oh, mi mancava del tutto! . Sì, questa risposta è totalmente sbagliata. Devo cancellarlo? B''=B'X
Larry B.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.