LEGKISEBB   KÖR

 

Maga a feladat: van egy ponthalmazom és  meg kell határozni azt a legkisebb sugarú kört, amelyik tartalmaz(benne vagy rajta vannak) valamennyi pontot a ponthalmazból.

          Ez a probléma az egyik legrégibb multú feladat a komputacionális geometriából, már a XIX. század közepén foglalkoztak vele, mondjuk akkor még nem tekintették külön tudományágként a komputacionális geometriát.

1972(Elzinga és Hearn)-ben megjelent az első O(n˛) bonyolultságú algoritmus a feladat megoldására, amit 1975(Shamos és Hoey)-ben követett is egy O(n logn) bonyolultságú, de a nagy meglepetést Nimrod Megiddo 1983-ban  bemutatott lineáris megoldása jelentette. A mi megoldásunk egy 1885-ben Prf. Chrystal által bemutatott algoritmus. Igaz O(nł) bonyolultságú, de ennek a bekövetkezésének a valószínűsége viszonylag nagyon kicsi, az okokról, amiért ezt választottuk  majd később írunk.

Maga az algoritmus:

          Legelőször is észrevehető, hogy ez a kör függ a ponthalmaz konvex burkolójától, mert azok a pontok, melyeket a kör érint, mind rajta vannak a konvex burkolón. Ezért legelőször meghatározzuk a ponthalmaz konvex burkolóját, és nevezzük el H-nak; ez lineáris idő alatt megvan.

A következő lépésben kiválasztunk tetszőlegesen egy oldalt a konvex burkolóból, legyen ennek a neve S .

Ezután következhet az algoritmus fő része:

1.    A H minden szögpontjára, melyik nincs rajta az S szakaszon, kiszámítjuk az S-el bezárt szögét. A legkisebb ilyen szög legyen a V szögpontnál és a mérete legyen a.

 

 

ˇ       Ha a nagyobb vagy egyenlő mint 90 fok, akkor  kész vagyunk, mert a kör  átmérője az S szakasz lesz.

ˇ       Ha a kisebb mint 90 fok, akkor továbblépünk a 2. lépésre.  

2.    Mivelhogy a kisebb, mint 90 fok, ellenőriznünk kell az S és a V által alkotott háromszög szögeinek a mértékét.

ˇ       Ha nincs tompa szög, akkor kész vagyunk, a keresett kör az S és  a V által alkotott háromszög köré írt kör középpontja lesz.

ˇ       Ha van tompa szög, akkor az új S a tompa szöggel levő oldal lesz és megismételjük az algoritmus fő részét az 1. lépéstől.

 

 

Elemzés:

          Az algoritmus bonyolultsága O(nł), mert a fő rész lineáris a konvex burkoló szügpontjainak a számával, de ezt a fő részt legrosszabb esetben majdnem n˛-szer ((n-1)˛/2) kell elvégezni, mert ennyi a lehetséges élek száma. Ezért kezdtük a konvex burkoló meghatározásával, mert ezzel lineárisan egy pár pontot már ki lehet zárni, máskülönben az algoritmus helyes lenne ennek a meghatározása nélkül is.

          Az egyik oka ennek az algoritmusnak a választásának, az volt, hogy a többi módszerhez képest ez elég könnyű volt implementálni.

          A másik ok, amelyik már sokkal lényegesebb a program szempontjából is, az hogy nagyon hatékony további új adatok bevitelénél, mert ekkor az algoritmus nem kell megint mindent újra kiszámítson, hanem a fő részt kell megint futtassa az utoljára inicializált S oldallal, annyi kivétellel, hogy most az új pontot is leelenőrzi, nemcsak a konvex burkoló szögpontjait.