Grażyna Mirkowska PJWSTK 15 listopad 2000

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Sortowanie przez scalanie
Instrukcje - wprowadzenie
Materiały pomocnicze do wykładu
DOMINOWANIE W GRAFACH Magdalena Lemańska.
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
ALGORYTMY GRAFOWE.
METODY ANALIZY PROGRAMÓW
Metody Analizy Programów Wykład 02
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Wykład 06 Metody Analizy Programów System Hoare
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Minimalne drzewa rozpinające
Filip Andrzejewski Remigiusz Chiluta
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Matematyka Dyskretna, G.Mirkowska, PJWSTK
ALGORYTMY I STRUKTURY DANYCH
Ciągi de Bruijna generowanie, własności
Współprogramy III Ten wykład ma na celu pokazanie kolejnej ciekawej możliwości, którą oferują współprogramy. Wspólprogramy reprezentujące wyrażenia regularne.
Współprogramy II W tym wykładzie pogłębimy naszą znajomość z współprogramami. Omówimy współpracę procedur rekurencyjnych i współprogramów, wprowadzimy.
Liczby Pierwsze - algorytmy
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Turbo pascal – instrukcje warunkowe, iteracyjne,…
WYKŁAD 7. Spójność i rozpięte drzewa
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
ALGORYTMY I STRUKTURY DANYCH
Materiały pomocnicze do wykładu
Matematyka Dyskretna, Struktury algebraiczne G.Mirkowska, PJWSTK
12 grudnia 2001Matematyka Dyskretna, Elementy Kombinatoryki G.Mirkowska, PJWSTK 1 Wykład 11 Elementy Kombinatoryki.
Algorytmy grafowe Reprezentacja w pamięci
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
Wstęp do interpretacji algorytmów
ALGORYTMY I STRUKTURY DANYCH
Matematyka Dyskretna, G.Mirkowska PJWSTK
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Sortowanie przez kopcowanie
20 września 2003r. Centrum Kształcenia Ustawicznego im. St. Staszica w Koszalinie Wstęp do algorytmiki Autor: Marek Magiera.
Algorytmy i struktury danych
Rodzaje, przechodzenie grafu
ALGORYTMY I STRUKTURY DANYCH
Ogólna struktura programu w TP
Algorytmika.
Algorytmy i Struktury Danych
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
opracowała: Anna Mikuć
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Algorytmy i Struktury Danych Grafy
ANALIZA SKŁADNIOWA.
Algorytmy grafowe Minimalne drzewa rozpinające
Przeszukiwanie wszerz
METODY REPREZENTOWANIA IFORMACJI
Wstęp do interpretacji algorytmów
Grafy.
ALGORYTMY I STRUKTURY DANYCH
Algorytmy. Co to jest algorytm? Przepis prowadzący do rozwiązania zadania.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

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

Metody Analizy Programów Wykład 04 Przypomnienie 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: <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

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

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

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

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

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

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 + 1 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

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

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

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

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

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

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

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

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

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

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

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