Geometriai Algoritmusok Konvex burok
Csóka Boglárka - Konvex burok Miről lesz szó? Bevezetés: miért fontos, gyakorlati alkalmazások Elmélet, algoritmusok Graham- féle pásztázás Jarvis menetelése Egyéb algoritmusok Példakódok, videók 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Bevezetés ’70-es évek: algoritmus kutatók elkezdenek érdeklődni a geometriai problémák iránt. Gyakorlati alkalmazása: például: alakfelismerés, képfeldolgozás, statisztika, földrajzi információs rendszerek, játékelmélet, fázisdiagramok előállítása eszközként, építőelemként is szolgál más számítási geometriai algoritmusok részeként, például: a ponthalmaz szélességét és átmérőjét megállapító forgó tolómérce módszer részeként 2019.05.02. Csóka Boglárka - Konvex burok
Autóknál ütközés megakadályozása Anomália detektálás Méret elemzés Konkrét példák: Autóknál ütközés megakadályozása Anomália detektálás Méret elemzés Csomagolás: legkisebb doboz kiszámítása 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Elmélet Konvex síkidom: olyan síkidom, amely bármely két pontját összekötő egyenes szakasz minden pontját tartalmazza. (Az ilyen udvarban nem lehet elbújni.) Konvex burok: egy Q ponthalmaz konvex burka az a legkisebb P konvex poligon, amelyre Q minden pontja vagy P határán van, vagy a belsejében. 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Poláris szög: a polárkoordináta-rendszer olyan kétdimenziós koordináta-rendszer, mely a sík minden pontját egy szög és egy távolság adattal látja el. Keresztszorzat (vektoriális szorzat): Az eredményvektor állása merőleges mind a-ra, mind b-re iránya olyan, hogy a,b és c jobbsodrású rendszert alkot 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Forgásirány: keresztszorzat segítségével meg tudjuk állapítani jobbsodrású balsodrású Előnye: nem kell kiszámolni pontos szöget, meg lehet mondani anélkül is előbb-utóbb, hogy a konvex burok csúcsa- e az adott pont. 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Algoritmusok Általánosságban: N elemű ponthalmaz konvex burkát határozzák meg 2 legismertebb: Graham-féle pásztázás (1972) Jarvis-menetelés (1973) Mindkettő használja a „forgásos söprés” technikát, amely a csúcsokat egy vonatkoztatási csúcs körüli poláris szög szerinti sorrendben dolgozza fel. Output: konvex burok csúcsai óramutató járásával ellentétes sorrendben 2019.05.02. Csóka Boglárka - Konvex burok
Algoritmusok Graham-féle pásztázás Alapötlet: Minden Q − beli pontot beírunk egyszer az S verembe. Azokat a pontokat, amelyek nem csúcsai a konvex buroknak, előbb-utóbb kivesszük a veremből. Amikor az algoritmus véget ér, S pontosan CH(Q) csúcsait tartalmazza. 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Vizuális példa videó: https://www.youtube.com/watch?v=Ps1idzOx6LA 2019.05.02. Csóka Boglárka - Konvex burok
Futásideje: O (n*logn) Kezdőpont (kódban: első sor): O(n). Rendezés (második sor): O(n*logn) (ha a poláris szögek rendezésére az összefésülő vagy kupacrendezést használjuk, a szögek összehasonlítására pedig a keresztszorzatos módszert). P0, P1 és P2 verembe tétele O(1). Mivel m ≤ n − 1, a for ciklusok magját legfeljebb n − 3 alkalommal (P0,P1,Pm nem) hajtjuk végre. A ciklusmag mindegyik végrehajtása O(1) ideig tart, kivéve a while ciklusban töltött időt. Egész for ciklus O(n) ideig tart, kivéve a beágyazott while ciklust. While ciklus összesen O(n) ideig tart. 2019.05.02. Csóka Boglárka - Konvex burok
Algoritmusok Jarvis mentelés Ajándék csomagolás néven is ismert Lépései: Jobb oldali lánc (amíg el nem érjük a legfelső pontot): P0 kiválasztása (has. Graham) P1 aminek a legkisebb a P0 körüli poláris szöge (vagy ezek közül a legtávolabbi) Hasonlóan a P2 a P1 körül legkisebb poláris szögű pont és így tovább 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Bal oldali lánc: Induljunk Pk -ból és legyen Pk+1 az a pont, amelynek a negatív x-tengelytől mérve legkisebb a poláris szöge Pk körül. Folytatjuk, míg vissza nem érünk P0-ba. Jarvis menetelését a konvex burok körül egyetlen fordulóban is megírhatnánk --> az utoljára kiválasztott oldalának szögét tartanánk nyilván és azt követelnénk meg, hogy az oldalak szöge szigorúan monoton növekedjen (a [0, 2π) tartományban, radiánban). Vizuális példa videó: https://en.wikipedia.org/wiki/Gift_wrapping_algorithm#/media/File:Animation_depicting_the_gift_wrapping_algorithm.gif 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Futásideje: O (n*h) CH(Q) minden h csúcsára megkeressük a legkisebb poláris szögű csúcsot. A poláris szögek közötti minden összehasonlítás O(1) idő. n érték minimumát O(n) időben kereshetjük, ha minden összehasonlítás O(1) idejű. 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Egyéb módszerek: Növekvényes, oszd-meg-és-uralkodj, eltávolító és kereső, Chan-algoritmus Chan- algoritmus (1993): Graham, Jarvis és az oszd-meg-és-uralkodj kombinációjából https://www.youtube.com/watch?v=ZnTiWcIznEQ Keressünk egy "mágikus" m értéket, amely minden pontot n/m részhalmazba oszt, ahol minden részhalmaz m pontot tartalmaz (rendezés nélkül). m legyen h-hoz minél közelebbi. Minden részhalmazra használjuk Graham algoritmusát a részburok kiszámítására. Minden részburokra használjuk Jarvis algoritmusát a végső konvex burok meghatározására Futási idő az output méretétől függ: O (n*log h) Python kód: „ló becsomagolása” 2019.05.02. Csóka Boglárka - Konvex burok
Csóka Boglárka - Konvex burok Források Előadás diák: http://cs.bme.hu/~friedl/algbony/konvexburok.pdf Könyv: Új algoritmusok (Geometriai algoritmusok fejezet) 2003 http://www.informatom.hu/sze/01/LGB_SZ001/Cormen-Lieserson-Rivest-Stein.- .Uj.algoritmusok.pdf Python kód: http://scikit- image.org/docs/dev/auto_examples/edges/plot_convex_hull.html#sphx-glr- download-auto-examples-edges-plot-convex-hull-py 2019.05.02. Csóka Boglárka - Konvex burok
Köszönöm szépen a figyelmet! 2019.05.02. Csóka Boglárka - Konvex burok