Diferente pentru minimal-enclosing-circle intre reviziile #22 si #51

Nu exista diferente intre titluri.

Diferente intre continut:

h1. Minimal enclosing circle
(Categoria _Geometrie analitica_, Autor _Bogdan Tataroiu_)
(Categoria _Geometrie_, Autor _Bogdan Tataroiu_)
In cadrul acestui articol vom analiza problema determinarii unui cerc de raza minima ce contine in interior sau pe circumferinta toate punctele dintr-un set dat. Aceasta problema mai poate fi gasita si sub denumirea de _Smallest Enclosing Circle_ sau _Mininum Spanning Circle_.
Algoritmul descris are complexitate {$O(N^3^)$} pentru generarea cercurilor si inca {$O(N)$} pentru fiecare cerc pentru verificare, in total avand {$O(N^4^)$}.
h2. Algoritm {$O(N^2^)$} !>minimum-enclosing-circle?schema.gif!
h2. Algoritm {$O(N^2^)$} !>minimal-enclosing-circle?schema.gif!
Algoritmul acesta se bazeaza pe aceeasi observatii ca mai sus. Se porneste de la un cerc mare care sigur cuprinde toate punctele si se micsoreaza la fiecare pas raza cercului cat mai mult posibil.
Algoritmul acesta se bazeaza pe aceleasi observatii ca mai sus. Se porneste de la un cerc mare care sigur cuprinde toate punctele si se micsoreaza la fiecare pas raza cercului cat mai mult posibil.
# Se construieste un cerc de raza suficient de mare incat sa cuprinda toate punctele in mod sigur (raza infinit) si un centru ales aleator.
# Se gaseste punctul cel mai departat de centrul cercului, notat cu {$A$}, si se micsoreaza raza cercului pana cand acesta atinge punctul.
Algoritmul acesta construieste cercul in mod incremental, adaugand pe rand puncte in cercul de raza minima.
Pentru inceput, se permuta punctele din set intr-un mod aleator si se formeaza un cerc care are ca diametru segmentul format de primele 2 puncte din permutare. Notam cu {$C{~i~}$} cercul de raza minima ce include primele i puncte.
Notam cu {$C{~I~}$} cercul de raza minima ce contine in interior punctele din setul {$I$}.
Pentru fiecare punct {$P{~i+1~}$}, putem determina in timp constant daca punctul se afla in interiorului cercului {$C{~i~}$}. In cazul in care {$P{~i+1~}$} este inclus in {$C{~i~}$}, atunci {$C{~i+1~}$} va fi egal cu {$C{~i~}$}. In caz contrar, trebuie sa schimbam cercul {$C{~i~}$} pentru a cuprinde si acest punct. Cercul ce cuprinde toate punctele va fi evident {$C{~N~}$}, unde {$N$} este numarul de puncte din set. Singura problema este cum determinam acel cerc modificat.
Pentru fiecare punct {$P$}, putem determina in timp constant daca punctul se afla in interiorului cercului {$C{~I~}$}. In cazul in care {$P$} este inclus in {$C{~I~}$}, atunci {$C{~I ∪ {P}~}$} va fi egal cu {$C{~I~}$}. In caz contrar, trebuie sa schimbam cercul {$C{~I~}$} pentru a cuprinde si acest punct. Cercul ce cuprinde toate punctele va fi evident {$C{~S~}$}, unde {$S$} este setul de puncte dat. Singura problema este cum determinam acel cerc modificat.
!>minimum-enclosing-circle?punctlasatinext.png 63%! La o prima vedere se pare ca trebuie doar sa calculam cel mai mic cerc ce include {$P{~i+1~}$} alaturi de cele 3 puncte ce determinau {$C{~i~}$} fara sa mai luam in considerare celelalte puncte din set, insa nu este greu de gasit un caz pentru care raman puncte in exterior, asa cum se vede in poza alaturata.
Vom demonstra in continuare ca daca punctul {$P$} se afla in exteriorul cercului {$C{~I~}$}, atunci el trebuie sa fie pe circumferinta cercului {$C{~I ∪ {P}~}$}.
Vom demonstra in continuare ca daca punctul {$P{~i+1~}$} se afla in exteriorul cercului {$C{~i~}$}, atunci el trebuie sa fie pe circumferinta cercului {$C{~i+1~}$}.
* {!>minimal-enclosing-circle?figura.png 40%!} Dandu-se doua cercuri de raza {$R{~1~}$} si {$R{~2~}$}, avand {$R{~1~} < R{~2~}$}, atunci intersectia cercului de raza {$R{~2~}$} cu interiorul cercului de raza {$R{~1~}$} formeaza un arc de cerc de lungime mai mica decat {$&pi;$} (cel albastru in poza alaturata). Daca arcul de cerc ar avea o lungime mai mare ca {$&pi;$} atunci acesta ar trebui sa contina 2 puncte diametral opuse, aflate la o distanta de {$2R{~2~}$}, insa in cercul de raza {$R{~1~}$} cea mai mare distanta intre 2 puncte din interiorul sau poate fi maxim {$2R{~1~}$}. Cum {$R{~1~} < R{~2~}$}, acest lucru este imposibil.
* Presupunem prin reducere la absurd ca {$P$} nu apartine circumferintei cercului {$C{~I &#8746; {P}~}$}. Este usor de vazut ca raza cercului {$C{~I~}$} este mai mica ca cea a cercului {$C{~I &#8746; {P}~}$}, deoarece {$C{~I &#8746; {P}~}$} cuprinde un punct care nu este cuprins de {$C{~I~}$}. Daca notam cu {$R{~1~}$} raza cercului {$C{~I~}$} si cu {$R{~2~}$} raza cercului {$C{~I &#8746; {P}~}$}, atunci intersectia cercului {$C{~I &#8746; {P}~}$} cu interiorul cercului {$C{~I~}$} este un arc de cerc de lungime mai mica ca {$&pi;$}.
* Datorita faptului ca {$P$} nu apartine circumferintei cercului {$C{~I &#8746; {P}~}$}, punctele care definesc cercul {$C{~I &#8746; {P}~}$} se afla printre punctele din setul {$I$}. Cum toate aceste puncte se afla in interiorul cercului {$C{~I~}$} si intersectia cercului {$C{~I &#8746; {P}~}$} cu interiorul cercului {$C{~I~}$} este un arc de cerc de lungime mai mica decat {$&pi;$}, punctele care determina cercul {$C{~I &#8746; {P}~}$} trebuie sa se afle pe acest arc de cerc. Astfel avem cel putin 2 puncte consecutive pe circumferinta cercului {$C{~I &#8746; {P}~}$} care formeaza un arc de cerc de lungime mai mare {$&pi;$} (cel rosu in poza alaturata).
* Acest lucru intra in contradictie cu faptul ca cercul are raza minima. Astfel {$P$} trebuie sa se afle pe circumferinta cercului {$C{~I &#8746; {P}~}$}.
 !>minimum-enclosing-circle?arccerc.png 75%! * Dandu-se doua cercuri de raza {$R{~1~}$} si {$R{~2~}$}, avand {$R{~1~} < R{~2~}$}, atunci intersectia cercului de raza {$R{~2~}$} cu interiorul cercului de raza {$R{~1~}$} formeaza un arc de cerc de lungime mai mica decat {$&pi;$} (cel albastru in poza alaturata). Daca arcul de cerc ar avea o lungime mai mare ca {$&pi;$} atunci acesta ar trebui sa contina 2 puncte diametral opuse, aflate la o distanta de {$2R{~2~}$}, insa in cercul de raza {$R{~1~}$} cea mai mare distanta intre 2 puncte din interiorul sau poate fi maxim {$2R{~1~}$}. Cum {$R{~1~} < R{~2~}$}, acest lucru este imposibil.
* Presupunem prin reducere la absurd ca {$P{~i+1~}$} nu apartine circumferintei cercului {$C{~i+1~}$}. Este usor de vazut ca raza cercului {$C{~i~}$} este mai mica ca cea a cercului {$C{~i+1~}$}, deoarece {$C{~i+1~}$} cuprinde un punct care nu este cuprins de {$C{~i~}$}. Daca notam cu {$R{~1~}$} raza cercului {$C{~i~}$} si cu {$R{~2~}$} raza cercului {$C{~i+1~}$}, atunci intersectia cercului {$C{~i+1~}$} cu interiorul cercului {$C{~i~}$} este un arc de cerc de lungime mai mica ca {$&pi;$}.
* Datorita faptului ca {$P{~i+1~}$} nu apartine circumferintei cercului {$C{~i+1~}$}, punctele care definesc cercul {$C{~i+1~}$} se afla printre punctele {$P{~1~}$}, {$P{~2~}$}, ..., {$P{~i~}$}. Cum toate aceste puncte se afla in interiorul cercului {$C{~i~}$} si intersectia cercului {$C{~i+1~}$} cu interiorul cercului {$C{~i~}$} este un arc de cerc de lungime mai mica decat {$&pi;$}, punctele care determina cercul {$C{~i+1~}$} trebuie sa se afle pe acest arc de cerc. Astfel avem cel putin 2 puncte consecutive pe circumferinta cercului {$C{~i+1~}$} care formeaza un arc de cerc de lungime mai mare {$&pi;$} (cel albastru in rosu alaturata).
* Acest lucru intra in contradictie cu faptul ca cercul are raza minima. Astfel {$P{~i+1~}$} trebuie sa se afle pe circumferinta cercului {$C{~i+1~}$}.
Acum trebuie doar sa calculam cel mai mic cerc care contine punctele din setul I in interior si care are punctul {$P$} pe circumferinta. Vom extinde {$C{~I~}$} adaugand un nou parametru. Astfel notam cu {$C{~I,B~}$} cercul de raza minima ce contine setul {$I$} de puncte in interior si punctele din setul {$B$} pe circumferinta (pot exista si alte puncte pe circumferinta, dar cele din setul {$B$} sunt fortate). Cercul de raza minima care contine toate punctele va fi {$C{~S,&#216;~}$}.
...TODO restul...
...
...
...
Calcularea lui {$C{~I,B~}$} se va face in mod recursiv. Mai jos voi prezenta un pseudocod pentru functia respectiva:
==code(c) |
Cerc MINCIRCLE( Set I, Set B )
    Daca |I| == 0 sau |B| >= 3
        returneaza cercul format de punctele din B
    P = punct random apartinand setului I
    C = MINCIRCLE( I - {P}, B )
    Daca P nu este inclus in C
        returneaza MINCIRCLE( I - {P}, B + {P} )
    returneaza C
==
 
Singurul lucru care mai ramane de demonstrat este _de ce_ complexitatea este {$O(N)$}.
 
Pentru {$|B|$} egal cu 3, cercul este foarte usor de determinat in complexitate {$O(1)$}.
 
Pentru {$|B|$} egal cu 2, complexitatea este evident {$O(N)$}, deoarece calcularea cercului de raza minima pentru setul {$B + {P}$} se rezolva in {$O(1)$}.
 
Pentru {$|B|$} egal cu 1, notam cu {$T(N)$} numarul mediu de operatii folosite pentru a calcula {$C{~S,B~}$}, unde {$|S|$} este egal cu {$N$}.
 
Din setul {$I$} vom scoate un element la fiecare apelare a functiei MINCIRCLE, deci pentru a calcula numarul mediu de operatii pentru {$N$} elemente, adunam numarul mediu de operatii pentru {$N - 1$} elemente ({$T(N - 1)$}).
Fiecare punct din {$I$} are probabilitatea {$^1^/{~N~}$} de a fi ales in cadrul functiei. Din aceasta cauza, functia MINCIRCLE{$(I - {P}, B &#8746; {P})$} va fi apelata cu o probabilitate egala cu (numarul de puncte {$P$} care nu apartin cercului {$C{~I - {P},B~}$}) / {$N$}. De asemenea, fiecare apel al acestei functii are complexitatea {$O(N)$}, dupa cum am demonstrat mai sus pentru {$|B|$} egal cu 2.
 
Astfel {$T(N)$} respecta relatia:
 
* {$T(N) <= T(N - 1) + Probabilitatea( P &notin; C{~I - {P},B~} ) * O(N) + O(1)$}
 
Datorita faptului ca cercul de raza minima care cuprinde toate punctele din setul {$I$} este determinat de 2 sau 3 puncte, la fiecare apel al functiei exista maxim 3 puncte pentru care cercul {$C{~I - {P},B~}$} va trebui marit. Astfel probabilitatea ca {$P$} sa nu apartina cercului {$C{~I - {P},B~}$} este egala cu {$^3^/{~N~}$}. Inegalitatea devine:
 
* {$T(N) <= T(N - 1) + ^3^/{~N~}*O(N) + O(1)$}
ceea ce este echivalent cu
* {$T(N) <= T(N - 1) + O(1)$}
 
Astfel complexitatea devine {$O(N)$}. Demonstratia pentru {$|B|$} egal cu 0 se face in mod asemanator.
 
 
Ca o ultima precizare, exista si un algoritm de complexitate {$O(N log N)$} pentru aceasta problema, ce foloseste diagrame voronoi.
Exercitii: "SPOJ ALIENS":http://www.spoj.pl/problems/ALIENS/

Nu exista diferente intre securitate.

Diferente intre topic forum:

 
3684