Chan-algoritmus

valamely ponthalmaz konvex burkát kiszámító algoritmus

A Timothy M. Chanról elnevezett Chan-algoritmus optimális kimenetérzékeny algoritmus, amellyel egy pontot tartalmazó halmaz konvex burkát lehet kiszámítani 2- és 3-dimenziós térben. A kiszámításhoz idő szükséges, ahol a konvex burok csúcsainak száma. A kétdimenziós esetben egy algoritmust (például a Graham-féle pásztázást) és a Jarvis-féle menetelést () kombinálja az optimális futásidő eléréséhez. A Chan-algoritmus arról nevezetes, hogy sokkal egyszerűbb, mint a Kirkpatrick–Seidel-algoritmus, és egyszerűen kiterjeszthető a háromdimenziós térbe is. Ezt a modellt Chantól függetlenül Frank Nielsen is kifejlesztette a Ph.D. disszertációjában.

A Chan-algoritmus 2-dimenziós esetben. Itt a pontokat x-koordináta alapján osztottuk szét, míg az igazi algoritmus tetszőleges szétosztásra is működik.

Algoritmus szerkesztés

Áttekintés szerkesztés

Az algoritmus sikeres lefutásához egyetlen   paraméterre van szükség. Tegyük fel, hogy ez egy fix érték (a valóságban  -t nem ismerjük előre, ezért több, egyre növekvő értékű   paramétert használunk, lásd később).

Az algoritmus első lépése a   halmaz tetszőleges szétosztása   darab részhalmazra  , mindben legfeljebb   ponttal. Ekkor  .

Ezután az első fázisban egy   algoritmus segítségével (például Graham-féle pásztázás) minden  -ra kiszámítja a részhalmaz konvex burkát,  -t, ahol   a részhalmaz pontjainak száma. Mivel   részhalmaz van és mindegyikben   pont, ez a fázis   időt vesz igénybe.

A második fázisban az algoritmus a Jarvis-féle menetelést hajtja végre, a már kiszámított kis konvex burkok   felhasználásával. Ennek során minden lépésben veszünk egy   pontot, amely a konvex burok része (először   lehet a   halmaz legalacsonyabb   koordinátájú pontja, amelyről biztosan tudjuk, hogy része lesz   konvex burkának), és keresünk hozzá egy olyan   pontot, hogy a   halmaz összes többi pontja a   egyenestől jobbra legyen. Itt a   jelölés azt jelenti, hogy a következő pontot ( -et)   és   függvényében határozzuk meg. A   részhalmaz   konvex burka ismert, és maximum   pontot tartalmaz (az óramutató járásával megegyező, vagy ellentétes irányban felsorolva), így   bináris kereséssel kiszámítható   idő alatt. Tehát   idő alatt a   darab részhalmaz mindegyikére kiszámítható az  . Ezek után   is meghatározható a szimpla Jarvis-féle meneteléssel, viszont elég csak az   pontokat, vagyis a kis konvex burkok pontjait figyelembe venni a teljes   halmaz pontjai helyett. Azon pontok felhasználásával pedig egy újabb pont megtalálásához a Jarvis-féle menetelés futási ideje  , ami elhanyagolható az  -k kiszámításához képest. A Jarvis-féle menetelés akkor fejeződik be, ha   alkalommal megismétlődött (mivel a lényege, hogy maximum   ismétlés után mindenképp megtaláljuk a   halmaz konvex burkát, ahol   a konvex burok pontjainak száma), tehát a második fázis   időt fog igénybe venni, ami egyenlő  -val, ha   egy  -hoz közeli érték (lásd lejjebb   megválasztásának stratégiáját).

A két fázis összesen   idő alatt számítja ki az   pont konvex burkát.

Az   paraméter megválasztása szerkesztés

Ha   szabadon választható paraméter, akkor előfordulhat, hogy  . Ebben az esetben a második fázisban   lépés után leállítjuk a Jarvis-féle mentelést, hogy ne legyen túl nagy a futásidő, és   idő elteltével a konvex burok még nem lesz kiszámítva.

Ezért azt az ötletet alkalmazzuk, hogy többször is lefuttatjuk az algoritmust egyre nagyobb   értékkel. A futás minden  -re   idő alatt befejeződik (eredményesen vagy eredménytelenül). Ha   túl lassan növekszik, akkor nagy lehet a szükséges iterációk száma, ellenben ha túl gyorsan, akkor az első  , amire sikeresen lefut, sokkal nagyobb lehet, mint  , így lassabbá válhat a futásidő:  .

Négyzetre emelős stratégia szerkesztés

Egy lehetséges stratégia, hogy minden iterációnál négyzetre emeljük   értékét, maximum  -ig.  -vel kezdve, a   iterációnál   legyen. Ebben az esetben   iteráció lesz, mivel az algoritmus befejeződik, amint

 

ahol 2-es alapú logaritmust veszünk, és az algoritmus teljes futásideje

 

Háromdimenziós térben szerkesztés

Ha háromdimenziós esetre akarjuk általánosítani, akkor a Graham-féle pásztázás helyett egy   algoritmust kell használnunk a háromdimenziós konvex burok kiszámítására, illetve a Jarvis-féle menetelés háromdimenziós változatát. A futásidő marad  .

Fordítás szerkesztés

Ez a szócikk részben vagy egészben a Chan's algorithm című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.