190 likes | 345 Views
Konveksni omotač Merge Hull Chan’s algorithm Kirkpatrick-Seidel. Stefan Đorđević,Aleksandra Mačkić,Nenad Avramović,Nikola Grujić. Konveksni omotač. Konveksni omotač.
E N D
KonveksniomotačMerge HullChan’s algorithmKirkpatrick-Seidel Stefan Đorđević,Aleksandra Mačkić,Nenad Avramović,Nikola Grujić
Konveksni omotač 2D-konveksni omotač skupa tačaka definišemo kao najmanji konveksni poligon koji obuhvata sve tačke. "Najmanji" se odnosi kako na površinu, tako i na obim poligona.
Struktura koja se koristi mora da omogući iterativni prolazak kroz skup tačaka u oba smera pa se koristi kružno povezana lista ili jednodimenzioni niz sa pametnim indeksiranjem. Pametno indeksiranje je realizovano pomoću elemenata u strukturi koji čuvaju vrednosti indeksa prethodne tačke i sledeće tačke. Prvi korak je sortiranje tačaka po X osi. Delimo skup tačaka na dva jednaka podskupa L i R, zatim rekurzivno pronalazimo konveksni omotač od L i R.
Da bismo spojili levi i desni omotač neophodno je naći gornju i donju zajedničku tangentu (crvene ivice). Gornju tangentu pronalazimo u linearnom vremenu prolaskom kroz temena levog omotača u smeru kazaljke na satu i prolaskom kroz desni omotač u suprotnom smeru. Tangente dele svaki omotač na dva dela pa ivice koje pripadaju ovim delovima moraju biti obrisane (žute ivice). Spajanje (merge) može biti izvršeno u linearnom vremenu, pa je složenost algoritma O(nlogn).
Čenov algoritam je nastao kombinovanjem dva sporija , Graham-ovog i Jarvis March-ovog. Zajedno oni formiraju algoritam koji je brži od oba. Problem Grahamovog algoritma je u tome što sortira tačke i ima složenost O(nlogn) bez obzira na veličinu konveksnog omotača. Jarvis March može da bude brži ukoliko već znamo nekoliko temena omotača, ali je vreme izvršavanja O(n)
Ako imamo skup od n tačaka i pretpostavimo da znamo da postoji h tačaka koje čine konveksni omotač, ovaj algoritam počinje tako što razlaže tačke na n/h podskupova, koji su svi veličine h, i izračunava omotač za svaki od njih koristeći Grahamov algoritam. Vremenska složenost ovog koraka je O((n/h)hlogh) = O(nlogh). Problem je u tome što ne znamo koliko je h, pa se počinje od optimističnih h=3, i ukoliko ta vrednost nije dovoljno velika, povećavamo je.Pošto bi povećavanje h za male vrednosti, 3,4,5 oduzimalo previše vremena, a prevelike vrednosti bi izazvale probleme, rešenje je da se stepenuje odabrana vrednost sve dok algoritam ne vrati ispravnu vrednost. Ovaj metod se zove doubling search.
Kada imamo n/h podomotača, počinjemo sa izvršavanjem Jarvis March algoritma, pronalazimo linije omotača oko podomotača. Startuje sa najlevljom tačkom L(p=L) i sukcesivno pronalazi temena omotača u smeru suprotnom kazaljci na satu sve dok se ne vrati na L. Naslednik od p mora da bude na desnoj tangenti između p i jednog od podomotača, tj. podomotač se nalazi desno od linije gledano od p. Desnu tangentu možemo naći za O(logh) koristeći binarnu pretragu, pa se ukupno vreme za pronalaženje naslednika od p svodi na O((n/h) logh), Pošto imamo h ivica omotača, i svaku pronalazimo za O((n/h)logh), ukupna vremenska složenost je O(nlogh)
U obzir uzimamo najmanju i najveću x koordinatu iz nekog skupa tačaka P ,i označavamo ih Xmin i Xmax. Konveksni omotač od P može se posmatrati kao par konveksnih lanaca koji se nazivaju gornji i donji omotač (upper & lower hull), izuzimajući vertikalne ivice koje prolaze kroz Xmin i Xmax.
Predstavićemo algoritam koji izračunava gornji omotač, donji omotač se izračunava na sličan način. Algoritam UpperHull(P) 0. if|P| 2 return 1. else begin 2. Pronaći srednju x koordinatu, Xmed iz skupa P 3. Podeliti P u dva skupa L i R oko tačke Xmed, oba približne veličine n/2 4. Pronaći upper bridge , između L i R, pri čemu p L ,q R 5. L’={ r L | x(r) x(p)} 6. R’={r R | x(r) x(q)} 7. LUH <- UpperHull(L’) 8. RUH <- UpperHull(R’) 9. Vraća spojenu listu LUH, , RUH kao upper bridge od P 10. Kraj
Analiza algoritma Ovo je primer podeli-i-vladaj algoritma. Ključni korak je u izračunavanju upper bridge-a u 4. koraku, može biti izvršen u vremenu O(n). Takođe znamo da korak 2. može biti izvršen u vremenu O(n) pomoću algoritma za pronalaženje srednje vrednosti, kao i koraci 3-6. Podrazumevaćemo da UpperHull ima h ivica, a skup P, n tačaka. Pretpostavićemo da LUH i RUH, koraci 7 i 8, imaju h1 i h2 ivica. Kako su |L’| |L| i |R’| |R| rekurzivni pozivi ovih funkcija su T(n/2,h1) i T(n/2,h2). Rekurentna jednačina za složenost najgoreg slučaja je sledeća
Teorema: T(n,h)=O(nlogh) Dokazaćemo da je indukcija od h jednaka T(n,h) cnlogh, za svako n,i za svako h , pri čemu je c neka konstanta. Bazni slučaj h=2, T(n,h) cn cn log 2=cn log h. Za induktivni slučaj:
PRIMENA ALGORITAMA ZA KONVEKSNI OMOTAČ • ROBOTIKA • OBRADA DIGITALNIH FOTOGRAFIJA • PREPOZNAVANJE OBLIKA • … • ImplementacijaČenovogalgoritma • http://www.cs.uwaterloo.ca/~tmchan/ch3d/ch3d.pdf