Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Metody Analizy Programów Wykład 04 1 Metody Analizy Programów Wykład 04 Metoda Floyda badania poprawności programu Grażyna Mirkowska PJWSTK 15 listopad."— Zapis prezentacji:

1

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

3 Metody Analizy Programów Wykład 04 2 Przypomnienie Integer = Definicja Program P jest częściowo poprawny ze względu na specyfikację w strukturze danych M wttw dla każdych danych w strukturze M, jeżeli warunek początkowy specyfikacji jest spełniony przez dane i program zatrzymuje się po skończonej liczbie kroków, to warunek końcowy jest spełniony przez wyniki programu, tzn. Dla każdego wartościowania v w strukturze M, M,v |= ( and Ptrue ) => P Definicja Specyfikacją algorytmu programu będziemy nazywali parę warunków(formuł). 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). Przykład 1 while x y do if x>y then x:=x-y else y := y-x fi od Różne specyfikacje tego algorytmu: y, x=y >

4 Metody Analizy Programów Wykład 04 3 Metoda Floyda 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ź. 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. Flowdiagram programu P: y

5 Metody Analizy Programów Wykład 04 4 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. Twierdzenie Jeżeli program P ma akceptowalny opis w strukturze M taki, że jest formułą przypisaną jego wejściowej krawędzi, a jest formuła przypisaną krawędzi wyjściowej, to program P jest w strukturze M częściowo poprawny ze względu na specyfikację, tzn. M |= (( Ptrue) P ) y:= sqrt(x) START STOP x>0 y*y= x y:= sqrt(x) START STOP x>0 x>y Ten opis jest akceptowalny w R, a ten opis nie jest akceptowalny w R

6 Metody Analizy Programów Wykład 04 5 Jak uzyskać akceptowalny opis programu? x:= t (x/t) (x) START STOP Akceptowalny opis instrukcji przypisania Niech będą akceptowalne opisy programów P1 i P2 w strukturze M START STOP P1 P 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 (*) START STOP P1 1 P2 2 warunek(*) M |= ( 1 ) ( 2) Twierdzenie Jeżeli program Pi jest częściowo poprawny ze względu na specyfikację w strukturze danych M, gdzie i=1,2 oraz M |= ( 1 ) ( 2), to program P= begin P1; P2 end jest częściowo poprawny w M ze względu na specyfikację.

7 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 START STOP P1 P Wtedy następujący opis instrukcji warunkowej if then P1 else P2 fi jest akceptowalny w strukturze M, o ile spełniony jest warunek (**) START STOP P2 P1 TAKNIE 1 2 ( 1 2) Warunek(**) M |= ( ) |= ( ) Twierdzenie Jeżeli program Pi jest częściowo poprawny ze względu na specyfikację < i i w strukturze dla i oraz jeżeli formuła (( ) ( ) 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ę )

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

9 Metody Analizy Programów Wykład 04 8 Przykład 3 begin q := 0; r := x; while y > r do r := r - y; q := q + 1 od end Rozważmy ten program w strukturze liczb naturalnych. START STOP q:=0; r :=x r y r := r-y q := q+1 TAK NIE x>0, y>0 q=0, r=x, x>0, y>0 q 0, r y, x=qy+r q 0, r0, y>0 i warunek końcowy q= x div y, r = x mod p.

10 Metody Analizy Programów Wykład 04 9 Przykład 4 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 START z=y y :=1; i :=0; z:= x z > y i := i+1 y := y+2 TAK NIE x>0 i=0, z=x, x>0, y=1 y= 2i+1, z y, x=i 2 +z y= 2i-1, z y, x=(i-1) 2 +z= i 2 +z-y y= 2i+1, z 0, x=(i-1) 2 +z+y-2 TAKNIE y:=0y:=z STOP z := z-y y= 2i-1, z 0, x=i 2 +z y= x- i 2 x=(i+1) 2 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

11 Metody Analizy Programów Wykład Twierdzenie Jeżeli program P jest częściowo poprawny ze względu na specyfikację Fakt, że program jest częściowo poprawny w strukturze M ze względu na warunek początkowy i warunek końcowy przyjęto zapisywać w postaci M |= { } P { } Stosując powyższą notację twierdzenie możemy zapisać w postaci: Jeżeli M |= { } P { }, M|=( |= ( to M |= { } P { }.

12 Metody Analizy Programów Wykład Przykład 5 Algorytm znajdowania tranzytywnego domknięcia grafu. Algorytm Warshalla. 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

13 Metody Analizy Programów Wykład 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;

14 Metody Analizy Programów Wykład 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.

15 Metody Analizy Programów Wykład 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 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; Program pozwala przeglądać drzewo w porządku w głąb.

16 Metody Analizy Programów Wykład 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; Jeżeli zaimplementowano STR jako strukturę KOLEJEK, to program realizuje przeglądanie grafu poziomami.

17 Metody Analizy Programów Wykład 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;

18 Metody Analizy Programów Wykład Przykład 11 Rozważmy następujący program P działający w strukturze kolejek priorytetowych 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 Algorytm SORTUJE wczytany ciąg elementów!

19 Metody Analizy Programów Wykład Przykład 12 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 while card(p) >1 do Algorytm pozwala znaleźć minimalne drzewo rozpinające grafu. Niech q będzie kolejką priorytetową wszystkich krawędzi pewnego niezorientowanego, spójnego grafu G=, dla którego jest określona funkcja kosztu c : E R+, i niech p0 będzie podziałem początkowym zbioru V.

20 Metody Analizy Programów Wykład Przykład 13 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 Rozważmy algorytm P w strukturze danych złożonej ze struktury Kolejek i struktury Find-Union. Niech będzie dany graf G= 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.


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

Podobne prezentacje


Reklamy Google