ALGORYTMY I STRUKTURY DANYCH WYKAD 13 Algorytmy w

  • Slides: 16
Download presentation
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 13 Algorytmy w geometrii Grażyna Mirkowska PJWSTK, 2004 G.

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

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

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,

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

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

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

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

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

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

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

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

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:

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

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

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

Obliczanie pierwiastka 2021 -03 -02 G. Mirkowska, ASD_13 algorytmy w geometrii 16