ALGORYTMY I STRUKTURY DANYCH WYKAD 13 Algorytmy w
















- Slides: 16
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 4 Znajdowanie otoczki wypukłej – Algorytm Grahama – Algorytm Jarvisa 4 4 Wyznaczanie pierwiastka 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 2
Produkt wektorowy p 1 p 2= det (p 1, p 2) = x 1 *y 2 – x 2 *y 1 y p 1+p 2 p 1 Jeśli p 1 p 2 < 0, to p 1 jest na lewo od p 2 p 0 Jeśli p 1 p 2 > 0, to p 1 jest na prawo od p 2. x Jeśli p 0 nie jest początkiem układu współrzędnych, to 2021 -03 -02 Jeśli p 1 p 2= 0, to p 1, p 2 są współliniowe. Jeśli (p 1 -p 0) (p 2 –p 0) < 0, to p 1 jest na lewo od odcinka p 0 p 2. Jeśli (p 1 -p 0) (p 2 –p 0) > 0, to p 1 jest na prawo od odcinka p 0 p 2. G. Mirkowska, ASD_13 algorytmy w geometrii 3
Porównywanie kątów y Jeśli (p 1 -p 0) (p 2 –p 0) < 0, to kąt (p 1, p 0, p) jest większy od kata (p 2, p 0, p). p 1 p 2 p 0 p Jeśli (p 1 -p 0) (p 2 –p 0) > 0, to kąt (p 1, p 0, p) jest mniejszy od kata (p 2, p 0, p). x Załóżmy, że dane punkty tworzą wielokąt wypukły. Jak zbadać, czy punkt p też tworzy z nimi wielokąt wypukły? 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. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii p p 3 p 2 p 0 p 1 4
Otoczka wypukła 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. W geometrii, dowodzi się, że taki zbiór punktów (dla |Q| >2) jest wielokątem wypukłym. Jak znaleźć wierzchołki otoczki wypukłej? 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. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 5
Algorytm - trójkąty Metoda. Dla każdej trójki punktów p 1, p 2, p 3 ze zbioru Q : 1. jeśli są one współliniowe i p jest punktem środkowym tej trójki, to ze zbioru Q usuwamy punkt p, 2. 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. 3. Zbiór punktów, które pozostaną w Q jest zbiorem wierzchołków szukanej otoczki wypukłej. Koszt: Niech |Q|=n. Jest (n nad 3) różnych trójek punktów liczba iteracji pętli zewnętrznej – O(n 3). Razem O(n 4). 2021 -03 -02 Koszt pętli wewnętrznej – O(n). G. Mirkowska, ASD_13 algorytmy w geometrii 6
Przykład Konstrukcja otoczki metodą trójkątów 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 7
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 p 0 p z dodatnim kierunkiem osi x. Jeśli kilka punktów tworzy ten sam kąt, usuwamy wszystkie z wyjątkiem najbardziej oddalonego od p 0. czy po Niech uzyskanym ciągiemsprawdzamy, będzie p 1, p 2, . . . pm. p dołączeniu nowego punktu, punkty na 3. Do początkowo pustego stosu s wkładamy stosie tworzą zbiór punkty p 0, p 1, p 2. wypukły 4. for i: =3 to n do p 0 pi while pi leży na prawo od prostej (top(pop(s)), top(s)) do s : = pop(s) od; s: = push(pi); od; 2021 -03 -02 x G. Mirkowska, ASD_13 algorytmy w geometrii p 2 p 0 p 1 8
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 top Q i że leży on na prawo od prostej pk pj. pj Zgodnie z algorytmem, ze stosu usuwamy pk punkt pj. Rzeczywiście, . . . pi jak pokazuje pk p 0 rysunek punkt pj pj nie może Punkty przeglądamy w należeć do porządku rosnących otoczki współrzędnych wypukłej p 0 biegunowych. zbioru Q. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 9
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 pk wielokąt wypukły. p k pj pi p 1 p 0 pj pi p 0 p 1 Zgodnie z algorytmem, jeśli dołączamy pi do stosu, to pi leży po lewej stronie prostej pk pj. Ponadto kąt jaki tworzy pip 0 z dodatnim kierunkiem osi OX jest większy niż kąt jaki tworzy pjp 0 z osią OX. Mamy więc gwarancję, że dołączony punkt pi należy do zakreskowanego obszaru. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 10
Koszt algorytmu Grahama Z powyższych rozważań wynika, że niezmiennikiem pętli w 4 tym kroku algorytmu Grahama jest własność: Zbiór punktów na stosie tworzy wielokąt wypukły. 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) szukanie minimum 2021 -03 -02 sortowanie inicjalizacja stosu G. Mirkowska, ASD_13 algorytmy w geometrii = O(nlg n) krok 4 11
Przykład Dany zbiór punktów Q: H E D J G C F I A K Po posortowaniu: B I K B 2021 -03 -02 K B J K B F J K B G J K B BKIJFGHECDA G. Mirkowska, ASD_13 algorytmy w geometrii 12
Algorytm Jarvisa Obroty kartką papieru 1. Znaleźć punkty o najmniejszej i największej współrzędnej y: p 0 i q 0. 2. Skonstruować dwa ciągi: lewy ciąg p 0, . . . , pm=q 0 i prawy ciąg q 0, . . . , qk = p 0, takie że razem tworzą otoczkę wypukłą 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. 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. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 13
Koszt algorytmu Jarvisa Niech k będzie liczbą wierzchołków szukanej otoczki. Każdy krok pętli kosztuje O(n), bo szukamy minimum kąta biegunowego. Razem O(n*k) 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. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 14
Przykład ABCDEFGHIJK H BACDEFGHIJK E D J BKCDEFGHIJA G BKJDEFGHICA C F A I BKJHEFGDIJA K B BKJHDFGEIJA BKJHDAGEIJF Zamiast kąta względem osi wystarczy badać kąt wzgl. przedłużenia ostatnio znalezionego boku otoczki. 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 15
Obliczanie pierwiastka 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 16