ALGORYTMY I STRUKTURY DANYCH WYKŁAD 13 Algorytmy w geometrii Grażyna Mirkowska PJWSTK, 2004
G. Mirkowska, ASD_13 algorytmy w geometrii Plan wykładu Podstawowe operacje geometryczne Położenia punktu względem prostej Punkt wspólny dwóch odcinków Badanie, czy punkt leży wewnątrz trójkąta porównywanie kątów Znajdowanie otoczki wypukłej Algorytm Grahama Algorytm Jarvisa Wyznaczanie pierwiastka 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Produkt wektorowy p1 p2= det (p1,p2) = x1 *y2 – x2 *y1 Jeśli p1 p2= 0, to p1, p2 są współliniowe. p0 p1 p2 x y p1+p2 Jeśli p1 p2 < 0, to p1 jest na lewo od p2. Jeśli p1 p2 > 0, to p1 jest na prawo od p2. Jeśli (p1-p0) (p2 –p0) < 0, to p1 jest na lewo od odcinka p0p2. Jeśli p0 nie jest początkiem układu współrzędnych, to Jeśli (p1-p0) (p2 –p0) > 0, to p1 jest na prawo od odcinka p0p2. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Porównywanie kątów p0 p1 p2 x y Jeśli (p1-p0) (p2 –p0) < 0, to kąt (p1,p0, p) jest większy od kata (p2,p0,p). Jeśli (p1-p0) (p2 –p0) > 0, to kąt (p1,p0, p) jest mniejszy od kata (p2,p0,p). p Załóżmy, że dane punkty tworzą wielokąt wypukły. Jak zbadać, czy punkt p też tworzy z nimi wielokąt wypukły? p Jeśli idąc po krawędzi wielokąta od pi do pi+1 (kolejność przeciwna do ruchu wskazówek zegara), mam p po lewej stronie prostej wyznaczonej przez tę krawędź, to p może być następnym wierzchołkiem wielokąta wypukłego. p3 p2 p1 p0 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Jak znaleźć wierzchołki otoczki wypukłej? Otoczka wypukła W geometrii, dowodzi się, że taki zbiór punktów (dla |Q| >2) jest wielokątem wypukłym. Problem Dla danego skończonego zbioru Q punków na płaszczyźnie, znaleźć najmniejszy zbiór wypukły taki, że każdy punkt zbioru Q znajduje się albo w jego wnętrzu albo na brzegu. Jak znaleźć wierzchołki otoczki wypukłej? Przykład Kryterium negatywne Punkt p nie jest wierzchołkiem otoczki wypukłej wttw leży wewnątrz trójkąta o wierzchołkach ze zbioru Q różnych od p, lub gdy leż na odcinku łączącym dwa różne od p punkty zbioru Q. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Algorytm - trójkąty Metoda. Dla każdej trójki punktów p1, p2, p3 ze zbioru Q : jeśli są one współliniowe i p jest punktem środkowym tej trójki, to ze zbioru Q usuwamy punkt p, jeśli nie są współliniowe, to oznaczmy przez d trójkąt, którego wierzchołkami są te punkty i usuńmy ze zbioru Q wszystkie punkty leżące wewnątrz tego trójkąta. Zbiór punktów, które pozostaną w Q jest zbiorem wierzchołków szukanej otoczki wypukłej. Jeśli |Q|=n, to można utworzyć (n nad 3) trójkąty. Zatem pętla główna wykona O(n3) iteracji. W wewnętrznej pętli sprawdzamy wszystkie punkty zbioru Q. Ponieważ sprawdzenie, czy punkt leży wewnątrz trójkąta można wykonać z kosztem stałym, zatem koszt pętli wewnętrznej- O(n). Ostatecznie koszt całego algorytmy O(n4). Koszt: Niech |Q|=n. Jest (n nad 3) różnych trójek punktów liczba iteracji pętli zewnętrznej – O(n3). Koszt pętli wewnętrznej – O(n). Razem O(n4). 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Przykład Konstrukcja otoczki metodą trójkątów 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Algorytm Grahama 1. W zbiorze Q wybieramy punkt p o najmniejszej współrzędnej y. Jeżeli jest kilka takich punktów, to wybieramy ten z nich, który ma najmniejszą współrzędną x. 2. Sortujemy pozostałe punkty ze względu na kąt jaki tworzy wektor p0p z dodatnim kierunkiem osi x. Jeśli kilka punktów tworzy ten sam kąt, usuwamy wszystkie z wyjątkiem najbardziej oddalonego od p0. Niech uzyskanym ciągiem będzie p1, p2,...pm. sprawdzamy, czy po dołączeniu nowego punktu, punkty na stosie tworzą zbiór wypukły p0 x p 3. Do początkowo pustego stosu s wkładamy punkty p0, p1, p2. Algorytm ten wykorzystuje stos jako strukturę pomocniczą. Każdy punkt zbioru Q jest raz wkładany na st os i o ile stwierdzimy, że nie może być wierzchołkiem otoczki, jest usuwany ze stosu.Na zakończenie stos zawiera wszystkie wierzchołki otoczki w porządku przeciwnym do ruchu wskazówek zegara 4. for i:=3 to n do while pi leży na prawo od prostej (top(pop(s)), top(s)) do s := pop(s) od; s:= push(pi); od; p0 p1 p2 pi 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Poprawność algorytmu Grahama 1. Każdy punkt, który został usunięty ze stosu nie należy do otoczki wypukłej. Przypuśćmy, że rozważamy punkt pi zbioru Q i że leży on na prawo od prostej pkpj. Zgodnie z algorytmem, ze stosu usuwamy punkt pj. pj pk ... p0 stos top Rzeczywiście, jak pokazuje rysunek punkt pj nie może należeć do otoczki wypukłej zbioru Q. p0 pk pj pi Ponieważ przeglądamy punkty w porządku rosnących współrzędnych biegunowych względem p0, to dla punktu pj istnieje trójkąt we wnętrzu którego znalazłoby się pj. Zatem pj nie może być wierzchołkiem otoczki wypukłej. Punkty przeglądamy w porządku rosnących współrzędnych biegunowych. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Poprawność algorytmu Grahama c.d. 2. Gdy do ciągu wierzchołków wielokąta wypukłego dołączamy nowy punkt ze wskazanego na rysunkach obszaru, to otrzymamy znów wielokąt wypukły. p0 pj p1 pk pk p0 pj p1 pi pi Zgodnie z algorytmem, jeśli dołączamy pi do stosu, to pi leży po lewej stronie prostej pkpj. Ponadto kąt jaki tworzy pip0 z dodatnim kierunkiem osi OX jest większy niż kąt jaki tworzy pjp0 z osią OX. Mamy więc gwarancję, że dołączony punkt pi należy do zakreskowanego obszaru. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Koszt algorytmu Grahama Z powyższych rozważań wynika, że niezmiennikiem pętli w 4tym kroku algorytmu Grahama jest własność: Zbiór punktów na stosie tworzy wielokąt wypukły. Koszt algorytmu Operacje dominujące to porównywanie współrzędnych lub badanie położenia punktu względem prostej. O(n) + O(nlg n) + O(1) + O(n-3) = O(nlg n) szukanie minimum krok4 inicjalizacja stosu sortowanie 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Przykład Dany zbiór punktów Q: A B C D E F H I J K G Po posortowaniu: BKIJFGHECDA stos J K B F G J K B I K B K B J K B J K B itd 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Algorytm Jarvisa Metoda Obroty kartką papieru 1. Znaleźć punkty o najmniejszej i największej współrzędnej y: p0 i q0. 2. Skonstruować dwa ciągi: lewy ciąg p0,... , pm=q0 i prawy ciąg q0,...,qk = p0, takie że razem tworzą otoczkę wypukłą Algorytm p i+1 jest tym punktem zbioru Q, który ma najmniejszy kąt biegunowy ze względu na pi licząc od dodatniej półosi OX w lewo. Niech p0 będzie punktem o najmniejszej współrzędnej y. Zaczynając od p0, przykładamy kartkę papieru równolegle do X i obracamy ją w lewo, tak długo aż napotkamy jakiś punkt zbioru Q. Ten znaleziony punkt będzie wierzchołkiem otoczki. Powtarzamy postępowanie od znalezionego punktu. q i+1 jest tym punktem zbioru Q, który ma najmniejszy kąt biegunowy ze względu na qi licząc od ujemnej półosi OX w prawo. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Koszt algorytmu Jarvisa Niech k będzie liczbą wierzchołków szukanej otoczki. Razem O(n*k) Każdy krok pętli kosztuje O(n), bo szukamy minimum kąta biegunowego. Uwaga W algorytmie Jarvisa podobnie jak w algorytmie Grhama nie musimy liczyć kątów. Wystarczy wiedzieć, że jeden kąt jest większy od drugiego. Poprawka (Eddy&Floyd) 1.Wybrać cztery ekstremalne punkty. 2.Usunąć wszystkie punkty leżące wewnątrz tego czworokąta. 3. Dalej tak jak w alg. Jarvisa lub Grahama. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
G. Mirkowska, ASD_13 algorytmy w geometrii Przykład ABCDEFGHIJK A B C D E F H I J K G BACDEFGHIJK BKCDEFGHIJA BKJDEFGHICA BKJHEFGDIJA BKJHDFGEIJA BKJHDAGEIJF Zamiast kąta względem osi wystarczy badać kąt wzgl. przedłużenia ostatnio znalezionego boku otoczki. 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii
Obliczanie pierwiastka 2018-11-23 G. Mirkowska, ASD_13 algorytmy w geometrii