140 likes | 323 Views
Wykład 05 Metody Analizy Programów Niezmiennik pętli. Grażyna Mirkowska PJWSTK, 22 listopad 2000.
E N D
Wykład 05 Metody Analizy ProgramówNiezmiennik pętli Grażyna MirkowskaPJWSTK, 22 listopad 2000 Wyklad 05 Metody analizy programow
Definicja. Niezmiennik pętli.Powiemy, że formuła a jest niezmiennikiem pętli while g do P od w strukturze M, jeżeli dla wszystkich danych początkowych spełniających warunek g , jeżeli a jest spełnione przed wykonaniem P, to a jest również spełnione po wykonaniu P, czyli M|= {ga} P {a}. Definicja. Niezmiennik.Powiemy, że formuła a jest niezmiennikiem programu P w strukturze M, jeżeli zawsze wtedy, gdy dane początkwe spełniają a i program P zatrzymuje się , wyniki programu spełniają formułe a, tzn. M |= {a} P {a}. Przykład {y=y0} x:= t(x,y) {y=y0} Własność y=y0 jest niezmiennikiem instrukcji x := t(x,y). Przykład while x<y do x:= x+y od Własność x>0 jest niezmiennikiem tej pętli w strukturze R, bo {x<y x>0 } x := x+y {x>0}. TwierdzenieNiech P’= while g do P od. Jeżeli w strukturze M, j jest niezmiennikiem pętli w programie P’ oraz M|= (a g )f , M|= (f g) b , to program P’ jest częściowo poprawny ze względu na warunek wstępny a i warunek końcowy b. Wyklad 05 Metody analizy programow
Przykład 1 Warunek wstępny t(i,j) = 1 wttw istnieje krawędź łącząca i z j w pewnym grafie G o wierzchołkach 1…n. Algorytm Warshalla begin k := 1; while k n do for i := 1 to n do for j := 1 to n do t(i,j) := t(i,j) t(i,k) t(k,j) od od ; k := k+1 od end i k j Niezmiennik t(i,j)=1 wttw istnieje droga od i do j przechodząca przez wierzchołki o numerach < k. Warunek końcowy t(i,j)= 1 wttw istnieje droga od i do j w grafie G. Wyklad 05 Metody analizy programow
Folowdiagram P f(a)*f(b)< 0, eps>0 , a<b START Przykład 2 • P: while abs(b-a)>eps do x := (a+b)/2; if f(a)*f(x) <= 0 then b := x else a := x fi; • od f(a)*f(b) 0 abs(b-a)>eps NIE TAK Niezmiennik :f(a)*f(b) 0, x := (a+b)/2 STOP f(a)*f(b) 0, b-x = x-a f(a)*f(x) 0 NIE TAK f(a)*f(x) 0 f(x)*f(b) 0 b := x a := x x f(a)*f(b) 0 a b Wyklad 05 Metody analizy programow
Przykład 2cd.Czy program P zatrzymuje się? b-a = w, eps>0, i=0 START b-a= w/2i abs(b-a)>eps • P: while abs(b-a)>eps do x := (a+b)/2; if f(a)*f(x) <= 0 then b := x else a := x fi; i := i+1od NIE TAK b-a= w/2i > eps x := (a+b)/2 i:= i+1 STOP b-x = x-a = w/2 i+1 f(a)*f(x) 0 NIE TAK x - a = w/2 i+1 b- x = w/2 i+1 Dla i = lg (w/eps) mamy b-a eps. b := x a := x x b - a = w/2 i+1 a b Wyklad 05 Metody analizy programow
Przykład 3 (Binary power) Niezmiennik: zm* y = xn n jest liczbą naturalną, x- rzeczywistą • begin z := x; y := 1; m := n; while m 0 do if (m mod 2 =1) then y := y*z fi; m := m div 2; z := z*z; od;end; zm* y = xn z2* m div 2*(y * z) = xn oraz m mod 2=1 lub z2* m div 2* y=xn oraz m mod 2 = 0 (z*z)m div 2* y = xn Po wykonaniu pętli mamy : zm* y = xn , m=0 czyliy = xn (z*z)m* y = xn zm* y = xn Jaki jest koszt tego algorytmu? Ile wykonano mnożeń? 2 lg n Jeżeli n= ak2 k + a k-1 2 k-1 + …+ a0 , to x n = x ak 2k* x ak-1 2k-1* … * x a0 = (x ak * x 2k )*( x ak-1* x 2k-1 )* … *( xa1* x2 )* x a0 Wyklad 05 Metody analizy programow
Przykład 4 Zakładamy, że program P jest interpretowany w strukturze liczb nauralnych. Rozważmy następujący program P: begin p := 2; bool := true; while (p*p <= n and bool) do if n mod p = 0 then bool := false fi; p := p+1; od; prime := boolend bool dla wszystkich 1<i<p, i|p p|n bool ( 1<ip ) i|n bool (p-1)|n bool ( 1<i<p) i|n bool Istnieje 1<in , że i|n oraz bool=false lub żadne 1<i n nie jest dzielnikiem n oraz bool=true. prime wttw n jest liczbą pierwszą Wyklad 05 Metody analizy programow
Dlaczego zdanie „żadne i takie, że 1<i n, nie jest dzielnikiem n ” implikuje , że „n jest liczbą pierwszą”? Uzasadnienie Musimy wykazać, że jeśli n nie ma dzielników niewiększych od swojego pierwiastka, to nie ma żadnych dzielników różnych od 1.Przypuśćmy, że istnieje dzielnik p liczby n taki, że p > n, np. p= n+1 Wtedy istnieje q takie, że q * p = n. Oczywiście musi być q < n+1, czyli n ma jednak dzielnik n, co jest sprzeczne z założeniem. Uwaga n -1< n n Koszt algorytmu Załóżmy, że wszystkie wykonywane operacje kosztują tyle samo. Wtedy T(n) 2+3 n + 4 n -1 +1 7 n . Zatem T(n) = O( n ). Czy jest prawdą, że T(n) = ( n )? NIE! Np.: dla n=2k T(n) =(1). Wyklad 05 Metody analizy programow
Definicja Najmocniejszy następnik.Najmocniejszym następnikiem formuły a ze względu na program P w strukturze M będziemy nazywać taką formułę b, która spełnia warunki:(1) jeżeli dane spełniają a i program kończy poprawnie obliczenia, to wyniki spełniają b, (tzn. b jest warunkiem końcowym takim, że program P jest częściowo poprawny ze względu na specyfikację <a, b >),(2) każdy inny warunek d posiadający własność (1) jest konsekwencją b (tzn. jeżeli P jest częściowo poprawny ze względu na <a,d>, to d jest konsekwencją b strukturze M). a ? program P Formuła b jest najmocniejszym następnikiem formuły a ze względu na program P w strukturze M wttw (1) M|= {a} P {b} (2) M |= {a} P {d}, to M|= (b => d) dla dowolnej formuły d. Wyklad 05 Metody analizy programow
Przykład 5 Warunek wstępny wp a(1) < a(2) <… < a(n), n N, a(1) x a(n) Rozważmy następujący program w strukturze liczb rzeczywistych begin i :=1; j := n; while i+1 < j do m := (i+j) div 2; if a(m) <= x then i := m else j := m fi od end Niezmiennik a(i) x <a(j) Najmocniejszy następnika(i) x < a(i+1), i+1=j, a(1) < a(2) <… < a(n), n N, a(1) x a(n) Warunek końcowy wk a(i) x < a(i+1) Jaki jest koszt tego algorymu? T(n) = (lg n) Wyklad 05 Metody analizy programow
Niech A będzie n elementowym ciągiem liczb całkowitych z przedziału (1,k).Zadanie: Uporządkować elementy zbioru A niemalejąco.Metoda: dla każdego elementu x wyliczyć liczbę elementów ciągu niewiększych niż x. Przykład 6 begin for i := 1 to k do C(i) := 0 od; for j := 1 to n do C(A(j)) := C(A(j)) +1 od; for i := 2 to k do C(i) := C(i) + C(i-1) od; j := n; while j>0 do B(C(A(j)) := A(j); C(A(j)) := C(A(j)) -1; j := j-1 od end Dane: n - długość ciągu, n Nk - liczba naturalnaA- tablica liczb całkowitych, A(i) k dla i n Koszt algorytmu : T(n) = O(n+k) Wyniki: tablica B taka, że- {B(i)} in = {A(i)} in oraz- B(i) B(i+1) dla i=1,…, n-1 Wyklad 05 Metody analizy programow
Przykład 6 c.d Algorytm Sortowania przez zliczanie. A: 1 2 3 4 5 6 7 8 n=8 3 6 4 1 3 4 1 4 k=6 begin for i := 1 to k do C(i) := 0 od; for j := 1 to n do C(A(j)) := C(A(j)) +1 od; for i := 2 to k do C(i) := C(i) + C(i-1) od; j := n; while j>0 do B(C(A(j)) := A(j); C(A(j)) := C(A(j)) -1; j := j-1 od end C: 1 2 3 4 5 6 po drugiej pętli 2 0 2 3 0 1 C: 1 2 3 4 5 6 po trzeciej pętli 2 2 4 7 7 8 np.:C(6)=8, bo jest 8 elementów o wartościach 6. C(3)=4, bo są 4 elementy o wartościach 3 B: 1 2 3 4 5 6 7 8 umieszczamy A(8) na pozycji 7, 4 bo mamy 7 elementów 4 C: 1 2 3 4 5 6 po iteracji dla j=8 2 2 4 6 7 8 B: 1 2 3 4 5 6 7 8 umieszczamy A(7) na pozycji 2, 1 4 bo mamy 2 elementów 1 Ostatecznie B: 1 2 3 4 5 6 7 8 1 1 2 2 3 4 4 6 Wyklad 05 Metody analizy programow
Przykład 6 c.d Algorytm Sortowania przez zliczanie. wp: n N, k N, A(i) k dla i n begin for i := 1 to k do C(i) := 0 od; for i := 1 to n do C(A(i)) := C(A(i)) +1 od; for i := 2 to k do C(i) := C(i) + C(i-1) od; i := n; while i > 0 do B(C(A(i)) := A(i); C(A(i)) := C(A(i)) -1; i := i-1 od end C(j)= liczba elementów ciągu A równych j, dla j =1,…,k C(i) = liczba elementów ciągu A niewiększych niż i,dla i =1,…k W tablicy B umieszczono już wszystkie elementy A(j) dla j>i, jn. Ciąg wypełnionych pozycji tablicy B jest niemalejący. wk: ( i, 0<i<n) B(i) B(i+1) Uwaga Pozycje wypełnione w tablicy B na lewo od wypełnianego w i- tej iteracji miejsca są A(i), a pozycje wypełnione na prawo od tego miejsca są > A(i) Wyklad 05 Metody analizy programow
Najmocniejszy następnik w tym algorytmie:( j, 0<j<n) B(j) B(j+1) i = 0 ( i, 0<in) (j ) A(i) jest identyczny z B(j)C(i)= liczbie elementów w ciągu A o wartościach < i W tablicy B kolejność równych elementów jest taka sama jak w tablicy A Wyklad 05 Metody analizy programow