Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Grażyna Mirkowska PJWSTK, 10 stycznia 2001

Podobne prezentacje


Prezentacja na temat: "Grażyna Mirkowska PJWSTK, 10 stycznia 2001"— Zapis prezentacji:

1 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 Metody Analizy Programow Programowanie obiektowe

2 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 Metody Analizy Programow Programowanie obiektowe

3 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 Metody Analizy Programow Programowanie obiektowe

4 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 Metody Analizy Programow Programowanie obiektowe

5 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 Metody Analizy Programow Programowanie obiektowe

6 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 Metody Analizy Programow Programowanie obiektowe

7 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 Metody Analizy Programow Programowanie obiektowe

8 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 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 Metody Analizy Programow Programowanie obiektowe

9 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 Metody Analizy Programow Programowanie obiektowe

10 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 Metody Analizy Programow Programowanie obiektowe

11 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 Metody Analizy Programow Programowanie obiektowe

12 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 Metody Analizy Programow Programowanie obiektowe

13 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 Metody Analizy Programow Programowanie obiektowe

14 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 Metody Analizy Programow Programowanie obiektowe

15 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 Metody Analizy Programow Programowanie obiektowe

16 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 Metody Analizy Programow Programowanie obiektowe


Pobierz ppt "Grażyna Mirkowska PJWSTK, 10 stycznia 2001"

Podobne prezentacje


Reklamy Google