Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Grażyna Mirkowska PJWSTK 15 listopad 2000

Podobne prezentacje


Prezentacja na temat: "Grażyna Mirkowska PJWSTK 15 listopad 2000"— Zapis prezentacji:

1 Grażyna Mirkowska PJWSTK 15 listopad 2000
Metody Analizy Programów Wykład 04 Metoda Floyda badania poprawności programu Grażyna Mirkowska PJWSTK 15 listopad 2000 Metody Analizy Programów Wykład 04

2 Metody Analizy Programów Wykład 04
Przypomnienie Przykład while xy do if x>y then x:=x-y else y := y-x fi od Różne specyfikacje tego algorytmu: <x=x0 and y=y0 , y=nwd(x0,y0)> <x>y , x=y > < k|x and k|y , ky > <z=a , z=a> <x  0 and y  0 , true> Definicja Program P jest częściowo poprawny ze względu na specyfikację <a, b> w strukturze danych M wttw dla każdych danych w strukturze M, jeżeli warunek początkowy a specyfikacji jest spełniony przez dane i program zatrzymuje się po skończonej liczbie kroków, to warunek końcowy b jest spełniony przez wyniki programu, tzn. Dla każdego wartościowania v w strukturze M, M,v |= (a and Ptrue ) => Pb Integer = < {min,...,max}, +, *, -, |, div, mod, , = > Definicja Specyfikacją algorytmu programu będziemy nazywali parę warunków(formuł) <wp, wk>. Intuicyjnie odpowiadają one warunkowi, które powinny spełniać dane (warunkowi początkowemu) i warunkowi, który powinien być spełniony po zakończeniu algorytmu (warunkowi końcowemu). Metody Analizy Programów Wykład 04

3 Floyd (1967) : Podzielić program na jak najmniejsze moduły, których częściowa poprawność jest łatwa do udowodnienia, a następnie korzystając z tych informacji udowodnić częścio- wą poprawność całego programu. Dokładniej: Dla danego programu skonstruować diagram przepływu (schemat blokowy) każdej krawędzi przyporządkować formułę, w taki sposób, by w czasie realizacji algorytmu (programu), wa- runki przypisane dowolnej krawędzi były spełnione przez wartościowanie, które obowiązuje w chwili przejścia przez tę krawędź. Metoda Floyda Flowdiagram programu P: START x:=1;y:=1 x=1, y=1 Przykład 2. Niech P będzie następujacym programem: begin x:=1; y:=1; while y < n do x:= x+2y+1; y := y+1 od end Niech R będzie strukturą, w której interpretujemy ten program. y<n TAK NIE y<n, y N, x= {2i+1 : 0i<y}=y2 y=n, y N, x=n2 STOP x := x+(2y+1) y+1<n+1, y N x= y2 +2y+1= (y+1)2 y := y+1 y<n+1, y N, x= y2 Metody Analizy Programów Wykład 04

4 Metody Analizy Programów Wykład 04
Definicja Schemat blokowy programu P wraz z przypisanymi jego krawędziom formułami nazywamy opisem programu P. Powiemy, że opis programu P w strukturze M jest poprawny (akceptowalny) wttw gdy dla każdego wykonania programu P, w chwili przejścia przez dowolną krawędź, odpowiadająca jej formuła jest spełniona przez aktualne wartościowanie. x>0 y*y= x x>0 x>y START y:= sqrt(x) STOP START y:= sqrt(x) STOP Ten opis jest akceptowalny w R, a ten opis nie jest akceptowalny w R Twierdzenie Jeżeli program P ma akceptowalny opis w strukturze M taki, że a jest formułą przypisaną jego wejściowej krawędzi, a b jest formuła przypisaną krawędzi wyjściowej, to program P jest w strukturze M częściowo poprawny ze względu na specyfikację <, b >, tzn. M |= (( Ptrue)  P b) Metody Analizy Programów Wykład 04

5 Jak uzyskać akceptowalny opis programu?
Niech będą akceptowalne opisy programów P1 i P2 w strukturze M Akceptowalny opis instrukcji przypisania START START a1 a2 a(x/t) Twierdzenie Jeżeli program Pi jest częściowo poprawny ze względu na specyfikację <ai, bi> w strukturze danych M, gdzie i=1,2 oraz M |= (b1 g)  (g  a2) , to program P= begin P1; P2 end jest częściowo poprawny w M ze względu na specyfikację <a1, b2>. a(x) P2 P1 START x:= t STOP b2 b1 Wtedy następujący opis złożenia programów begin P1;P2 end jest akceptowalny w strukturze M, o ile spełniony jest warunek (*) STOP STOP warunek(*) M |= (b1 g)  (g  a2) START P1 P2 STOP a1 g b2 Metody Analizy Programów Wykład 04

6 c.d. Konstrukcja akceptowalnych opisów.
Niech będą akceptowalne opisy programów P1 i P2 w strukturze M Wtedy następujący opis instrukcji warunkowej if g then P1 else P2 fi jest akceptowalny w strukturze M, o ile spełniony jest warunek (**) Twierdzenie Jeżeli program Pi jest częściowo poprawny ze względu na specyfikację < ai, bi> w strukturze M dla i =1,2, oraz jeżeli formuła ((a  g )  a1 ) ((a  g )  a2) jest prawdziwa w M, to program P=if g then P1 else P2 fi jest częściowo poprawny w M ze względu na specyfikację < a ,( b1b2 ) >. START START START a1 a2 a g P2 P1 TAK NIE (a1 g) (a2 g) b2 b1 STOP STOP P2 P1 Warunek(**) M |= (a  g )  a1 M |= (a  g )  a2 (b1 b2) STOP Metody Analizy Programów Wykład 04

7 c.d. Konstrukcja akceptowalnego opisu programu.
Wtedy następujący opis instrukcji pętli while g do P1 od jest akceptowalny w strukturze M, pod warunkiem (***) Niech będzie akceptowalny opis programu P1 w strukturze M Twierdzenie Jeżeli program P1 jest częściowo poprawny w strukturze M ze względu na specyfikację < a1,b1> oraz M |= ((a  g)  a1) (b1  b) ((b  g)  a1 ), to program P= while g do P1 od jest częściowo poprawny ze względu na specyfikację < a, ((a  b) g)> START START a1 a b g P1 TAK NIE (a1 g) b1 ((a  b) g) STOP Warunek (***) M |= (a  g)  a1 M |= (b1  b) M |= (b  g)  a1 P1 STOP b Metody Analizy Programów Wykład 04

8 Przykład 3 Przedstawiony opis jest akceptowalny w strukturze liczb naturalnych. START x>0, y>0 begin q := 0; r := x; while y > r do r := r - y; q := q od end Rozważmy ten program w strukturze liczb naturalnych. q:=0; r :=x q=0, r=x, x>0, y>0 q>0, r  0, x=qy+r r  y TAK NIE q  0, r  y , x=qy+r q  0, r<y, x=qy +r r := r-y Program jest częściowo poprawny ze względu na warunek początkowy x>0, y>0 i warunek końcowy q= x div y , r = x mod p. STOP q  0, r  0, x=qy+r+y q := q+1 q>0, r  0, x=qy+r Metody Analizy Programów Wykład 04

9 Przykład 4 START x>0 Ostatecznie, przedstawiony program jest częściowo poprawny ze względu na warunek początkowy x>0 i warunek końcowy y= x- sqrt(x) 2 begin y := 1; i := 0; z := x; while z-y >0 do i := i+1; z := z-y; y := y+2 od; if z=y then y := 0 else y := z fi; end y :=1; i :=0; z:= x i=0, z=x, x>0, y=1 z > y TAK NIE y= 2i+1, z  y , x=i2+z y= 2i+1 ,z y, x=i2+z i := i+1 z=y y= 2i-1, z  y , x=(i-1)2+z= i2+z-y TAK NIE x=(i+1)2 z := z-y y:=0 y:=z y= 2i-1, z  0 , x=i2+z y= x- i2 y := y+2 STOP y= 2i+1, z  0 , x=(i-1)2+z+y-2 Metody Analizy Programów Wykład 04

10 Twierdzenie Jeżeli program P jest częściowo poprawny ze względu na specyfikację <a, b> w strukturze M , oraz formuły ( a*  a), ( b  b*) są prawdziwe w M, to program P jest częściowo poprawny ze względu na specyfikację <a* , b* > Fakt, że program jest częściowo poprawny w strukturze M ze względu na warunek początkowy a i warunek końcowy b przyjęto zapisywać w postaci M |= {a} P {b} Stosując powyższą notację twierdzenie możemy zapisać w postaci: Jeżeli M |= {a} P {b} , M|=(a*  a), M |= (b  b*) to M |= {a*} P {b*}. Metody Analizy Programów Wykład 04

11 Metody Analizy Programów Wykład 04
Algorytm znajdowania tranzytywnego domknięcia grafu. Przykład 5 Algorytm Warshall’a. for k := 1 to n do for i := 1 to n do for j := 1 to n do P(i,j) := P(i,j)  (P(i,k)  P(k,j)) od od od Metody Analizy Programów Wykład 04

12 Metody Analizy Programów Wykład 04
Przykład 6 Algorytm pozwala obliczyć długość najkrótszej ścieżki od i do j for k :=1 to n do for i := 1 to n do for j :=1 ton do P(i,j) := min(P(i,j), P(i,k) + P(k,j)) od od od; Metody Analizy Programów Wykład 04

13 Metody Analizy Programów Wykład 04
Przykład 7 For k :=1 to n do for i :=1 to n do for j :=1 ton do P(i,j) := max(P(i,j), min(P(i,k), P(k,j))) od od od Algorytm pozwala wyliczyć maksymalny ciężar jaki może być przetransportowany z punktu i do punktu j. Metody Analizy Programów Wykład 04

14 Metody Analizy Programów Wykład 04
Przykład 8 Niech V będzie zbiorem wierzchołków pewnego skończonego, etykietowanego drzewa rzędu rz, o korzeniu w wierzchołku v. Rozważmy program P, działający w strukturze Stosów Program pozwala przeglądać drzewo w porządku „w głąb”. P: begin x := włóż(v, x); while not pusty(x) do v := pierwszy(x); wypisz_etykietę(v); x := usuń(x); for i := 1 to rz do x := włóż(v.syn(i),x) od; od; end; Metody Analizy Programów Wykład 04

15 Metody Analizy Programów Wykład 04
Jeżeli zaimplementowano STR jako strukturę KOLEJEK, to program realizuje przeglądanie grafu poziomami. Przykład 9 P: begin x := włóż(v, x); while not pusty(x) do v := pierwszy(x); wypisz_etykietę(v); x := usuń(x); for i := 1 to rz do x := włóż(v.syn(i),x) od; od; end; Metody Analizy Programów Wykład 04

16 Metody Analizy Programów Wykład 04
Przykład 10 Niech P będzie programem działającym w strukturze liczb całkowitych Algorytm Euklidesa begin r := n mod m; while r0 do n := m; m := r; r := n mod m od; wynik := m; end; Metody Analizy Programów Wykład 04

17 Metody Analizy Programów Wykład 04
Przykład 11 Rozważmy następujący program P działający w strukturze kolejek priorytetowych Algorytm SORTUJE wczytany ciąg elementów! P: begin for i :=1 to n do read(e); pq := włóż(e,pq) od; while not pusty(pq) do e := pierwszy(pq); wypisz(e); pq := usuń(pq) od end Metody Analizy Programów Wykład 04

18 Metody Analizy Programów Wykład 04
Niech q będzie kolejką priorytetową wszystkich krawędzi pewnego niezorientowanego, spójnego grafu G=<V,E>, dla którego jest określona funkcja kosztu c : E R+, i niech p0 będzie podziałem początkowym zbioru V. Przykład 12 while card(p) >1 do Algorytm Kruskala: begin p := p0; while not empty(q) do kr := first(q); q := delete(q); A := Find(p,k.początek); B := Find(p,k.koniec) if A =/= B then p := Union(p,A,B); wypisz(k) fi od end Algorytm pozwala znaleźć minimalne drzewo rozpinające grafu. Metody Analizy Programów Wykład 04

19 Metody Analizy Programów Wykład 04
Przykład 13 Rozważmy algorytm P w strukturze danych złożonej ze struktury Kolejek i struktury Find-Union. P: begin p := p0; while not empty(q) do kr := first(q); q := delete(q); A := Find(p,k.początek); B := Find(p,k.koniec) if A =/= B then p := Union(p,A,B); fi od; wypisz(p) end Niech będzie dany graf G=<V,E> i niech q będzie kolejką wszystkich krawędzi, a p0 podziałem początkowym zbioru wierzchołków tego grafu . Algorytm pozwala znaleźć spójne składowe danego grafu. Algorytm znajduje klasy abstrakcji najmniejszej relacji równoważności zawierającej E. Metody Analizy Programów Wykład 04


Pobierz ppt "Grażyna Mirkowska PJWSTK 15 listopad 2000"

Podobne prezentacje


Reklamy Google