Grażyna Mirkowska PJWSTK, 10 stycznia 2001 Wykład 11 Metody Analizy Programów Struktury Danych: Specyfikacja i Weryfikacja Grażyna Mirkowska PJWSTK, 10 stycznia 2001 Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Przykład 11/1 Zbiór wyrażeń algebraicznych WA jest to najmniejszy zbiór ciągów znaków taki, że (1) x,y, z,u WA (2) jeżeli w1, w2 WA , to (w1+ w2) WA, (w1- w2) WA, (w1* w2) WA (3) jeżeli w WA, to (- w) WA . np.(((x+y) *(y-z))*(-x)) Przyjmijmy, że dane wyrażenie zostało zapisane jako string a, i wartościowanie v jako klasa (czy rekord) o atrybutach x, y, z, u. Ponadto załóżmy, że mamy do dyspozycji dwa stosy SA i SO. Elementami SO będą znaki a elementami SA wartości zmiennych. ZADANIE Obliczyć wartość wyrażenia algebraicznego dla dowolnie zadanych wartości zmiennych. Idea metody Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Schemat blokowy algorytmu c.d.Przykład 11/1 start Schemat blokowy algorytmu i n WP : a WA, i=1, WK : top(SA)= WA(v) koniec a(i) = ‘)’? a(i) jest operacją? o := top(SO) a(i) jest zmienną? dwu - arg? SO:= push(SO, a(i)) SA := push(SA, v(a(i))) a2 := top(SA) SA := pop(SA) a1 := top(SA) a1 := top(SA) oblicz a - wynik operacji o na arg. a1 i ew . a2 SA := push(SA,a) i := i+1 Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Przykładowe obliczenie wartości wyrażenia Wyrażenie: ((- (x+ z))* (z - (u + y))) wartościowanie: v(x,y,z,u )=(2,3,4,5) SO - SA 2 SO -, + SA 2, 4 SO - SA 6 SO SA -6 SO * SA -6, 4 SO *, - SA -6, 4, 5 SO *, -, + SA -6, 4, 5, 3 SO *, -, SA -6, 4, 8 SO * SA -6, -4 SO SA 24 Niezmiennik pętli: jeżeli stos operacji SO jest niepusty i o=top(SO), to - top(SA) jest argumentem operacji o, gdy jest ona jednoargumentowa - top(pop(SA)) i top(SA) są odpowiednio lewym iprawym argumentem operacji o, gdy jest ona 2-argumentowa. Jeżeli aktualnie czytanym znakiem jest ) pewnego podwyrażenia, to top(SO) jest operacją główną w tym podwyrażeniu, a ostatnio zapisane wartości na stosie SA są poprawnymi argumentami tej operacji. Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Przykład 11/2 Otoczka wypukła Dla danego skończonego zbioru punktów Q na płaszczyźnie, znaleźć najmiejszy zbiór wypukły taki, że każdy punkt zbioru Q znajduje się albo w jego wnętrzu albo na brzegu ( taki zbiór nazywa się otoczką wypukłą). Punkt p nie jest wierzchołkiem otoczki wttw gdy leży wewnątrz trójkąta w wierzchołkach ze zbioru Q różnych od p lub, gdy leży na odcinku łączącym dwa różne od niego punkty zb.Q Uwaga zbiór punktów Q otoczka wypukła zb.Q Prosty algorytm Dla każdej trójki punktów z Q : (1) jeśli są współliniowe, to usuwamy środkowy (2) jeśli nie są współliniowe, to usuwamy wszystkie punkty leżące wewnątrz utworzonego przez nie trójkąta. Jeśli card(Q)= n, to mamy (n nad 3) trójkąty, czyli T(n) = O(n4) Koszt Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Algorytm Grahama Algorytm ten wykorzystuje stos S jako strukturę pomocniczą. Każdy punkt zbioru Q jest jeden raz wkładany do stosu i o ile stwierdzimy, że nie może być wierzchołkiem otoczki, jest usuwany ze stosu. Na zakńczenie stos zawiera wszystkie wierzchołki otoczki. KROK1 Wybrać ze zb. Q punkt p0 o najmniejszej współrzędnej y. p1 p2 p3 KROK2 Posortować pozostałe punkty p 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, usunąć wszystkie z wyjątkiem najbardziej oddalonego od p0. Niech uzyskanym w wyniku sortowania ciągiem będzie p1,...,pm KROK3 Do początkowo pustego stosu S wkładamy punkty p0, p1,p2. KROK4 Dla każdego i >2 sprawdzamy, (*)czy po dołączeniu punktu pi, zbiór na stosie byłby wypukły. Jeśli tak, to dopisujemy do stosu pi. Jeśli nie, to usuwamy, po jednym, ostatnio włożone punty tak długo aż spełniony będzie warunek (*). Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Przykład wykonania 1 4 2 5 6 8 9 7 3 Dany zbiór punktów Zawartość stosu 9 7 8 5 4 6 3 21 Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Niezmiennikiem pętli zewnętrznej jest własność (*) zbiór punktów na stosie tworzy wielokąt wypukły przechodzący przez punkt pi. Wszystkie punkty o indeksach <i , których nie ma w stosie, leżą wewnątrz tego wielokąta. Kolejnośc wierzchołków na stosie odpowiada kolejności wierzchołków w wielokącie czytanych przeciwnie do ruchu wskazówek zegara. Krok4 algorytmu begin i :=3; while i<= n do y:= top(S); x := top(pop(S)); while{p(i) leży na prawo od wektora (xy)} do S := pop(S); y := x; x := top(pop(S)) od; S := push( S, p(i)); i := i+1 od end Koszt algorytmu Operacja dominująca to badanie po której stronie danej prostej leży punkt. T(n) = O(n) + O(n lg n) Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Poprawność algorytmu Grahama Fakt 1 Punkty usuwane ze stosu rzeczywiście nie mogą należeć do otoczki wypukłej OW(Q). pi pk p0 pj Przypuśćmy, że pj jest usuwane ze stosu. Ma to miejsce tylko wtedy, gdy punkt rozważany pi leży na prawo od wektora pkpj( =ostatnio utworzona krawędź ) (pj jest na szczycie stosu a pk poniżej). Ponieważ przeglądamy punkty w porządku rosnących współrzędnych biegunowych względem p0, to dla punktu pj istnieje trójkąt (p0pkpi), we wnętrzu którego znalazłoby się pj. Zatem pj nie może być wierzchołkiem otoczki wypukłej. Wyklad 11 Metody Analizy Programow Programowanie obiektowe
c.d. poprawność algorytmu Grahama Fakt 2 pj pk p0 pi Zgodnie z wykonywanym testem pi leży po lewej stronie wektora pkpj, a ponadto kąt jaki tworzy pip0 z dodatnim kierunkiem osi OX jest większy niż kąt jaki tworzy pj p0 z osią OX. Czyli mamy gwarancję, że dołączany punkt należy do zakreskowanego obszaru. pk pi p0 pj Gdy dołączymy do wielokata wypukłego dowolny punkt z zakreślonego obszaru, to nadal otrzymamy wielokąt wypukły. Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Służy do reprezentacji zbiorów uporządkowanych Kolejka priorytetowa Definicja Strukturę danych < E X ; insert, delmin, min, member, empty, > o sygnaturze insert : E X X delmin : E X X min : X E member : E X B0 empty : X B0 : X X B0 nazywamy kolejką priorytetową wttw gdy jej uniwersum składa się z dwóch rozłącznych zbiorów E i X ( elementów i kolejek pr.) oraz relacje i operacje struktury spełniają wymienione niżej postulaty PQ (aksjomaty). Operacje wstawiania i usuwania elementu Operacja minimum i operacja należenia Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Aksjomaty kolejek priorytetowych Zwrotna antysymetryczna przechodnia spójna Aksjomaty kolejek priorytetowych PQ1 : relacja jest liniowym porządkiem w E wartość min(q) jest najmniejszym elementem w q PQ2 : while empty(q) do q := delmin( q) od true q ma tylko skończoną liczbę elementów z E PQ3 : empty(q) (member(e,q) min(q) e) Wyklad 11 Metody Analizy Programow Programowanie obiektowe
c.d. aksjomaty kolejek priorytetowych operacja insert powoduje dołaczenie nowego el.em. c.d. aksjomaty kolejek priorytetowych PQ4 : member(e, insert(e, q)) e e’ member (e’,q) member(e’, insert(e,q)) operacja delmin usuwa element minimalny PQ5 : member(e, delmin(q)) e e’ member (e’,q) member(e’, delmin(q)) member daje w wyniku wartość true, gdy elem. e należy do kolejki PQ 6: member(e,q) P bool, gdzie P: begin bool := false; while not empty and not bool do e1 := min(q); bool := (e=e1); q:= delmin(q) od; end; Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Model standardowy PQST(E) = < E + Fin(E), insert, delmin, minm member, empty, > gdzie insert(q,e) = q {e} delmin (q) = q -{ min(q)} min(q) = e0 wttw (e) ( member(e,q) e0 e) member (e,q) wttw e q relacja porządku liniowego w zbiorze E AX Twierdzenie Struktura PQST(E) jest modelem aksjomatów PQ1-PQ6 Niech M będzie dowolnym modelem zbioru PQ. Definiujemy funkcję h(x) = {e E : memeber(e,x)} h(e)= e dla e E Funkcja h jest izomorfizmem odwzorowującym model M na model standardowy wyznaczony przez zbiór E. Twierdzenie Każdy model zbioru aksjomatow PQ jest izomorficzny z pewnym modelem standardowym. Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Przykładowa implementacja unit StrE : class; unit rel : function (e1,e2 : E): boolean; end rel; unit E : class; end E; end StrE; unit StrPQ : StrE class; unit PQ : class; end PQ; unit min : function (q : PQ) : E; end min; unit insert: function(e: E, q: PQ): PQ; end insert; unit delmin: function( q : PQ): PQ; end delmin; unit memeber : function(e:E, q :PQ) : boolean; end memeber; unit empty : fumction(q : PQ) : boolean; end empty; end StrPQ; Wyklad 11 Metody Analizy Programow Programowanie obiektowe
Wyklad 11 Metody Analizy Programow Programowanie obiektowe Przykład T(n) = O(n lg n) Koszt pref StrPQ block pq := new PQ; for i := 1 to n do insert(a(i), pq) od; i := 1; while not empty(pq) do a(i) := min(pq); pq := delmin(pq); i := i+1 od; end; DRZEWO TABLICA Synowie elementu z pozycji itej znajdują się na pozycjach 2i oraz 2i+1 a(1) a(2) ... a(i-1) kolejka zawiera tylko te elementy zbioru początkowego, ktore nie należą do ciągu a(1),...,a(i-1). Niezmiennik WP : a(i)a(j) dla i j i,j {1, ...,n}, a(i) <E, > WK : a(1) a(2) ... a(n) Wyklad 11 Metody Analizy Programow Programowanie obiektowe