1 / 14

Wykład 05 Metody Analizy Programów Niezmiennik pętli

Wykład 05 Metody Analizy Programów Niezmiennik pętli. Grażyna Mirkowska PJWSTK, 22 listopad 2000.

sugar
Download Presentation

Wykład 05 Metody Analizy Programów Niezmiennik pętli

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wykład 05 Metody Analizy ProgramówNiezmiennik pętli Grażyna MirkowskaPJWSTK, 22 listopad 2000 Wyklad 05 Metody analizy programow

  2. 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|= {ga} 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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<ip )  i|n  bool (p-1)|n  bool  (  1<i<p)  i|n  bool Istnieje 1<in , ż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

  8. 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

  9. 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

  10. 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

  11. 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)} in = {A(i)} in oraz- B(i)  B(i+1) dla i=1,…, n-1 Wyklad 05 Metody analizy programow

  12. 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

  13. 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, jn. 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

  14. Najmocniejszy następnik w tym algorytmie:( j, 0<j<n) B(j)  B(j+1) i = 0 ( i, 0<in) (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

More Related