Sunteți pe pagina 1din 24

1. Verificare.

Corectitudine
1.a. Algoritm- proprieti
1.b. Verificarea algoritmului
- Verificare experimental
- Verificare analitic;
1.c. Variabilele i strile unui program
1.d. Metod formal de analiz a corectitudinii

Algoritm
Geneza cuvntului algoritm: Este legat de numele savantului AI-Khwarizmi (algoritmi)
matematician, geograf, astronom i astrolog persan (780-850 d.Hr.), considerat i printele
algebrei moderne.
Proiectarea algoritmului const n dou etape:
Descrierea algoritmului printr-un pseudolimbaj
(schem logic, pseudocod);
Demonstrarea corectitudinii rezultatelor n raport cu datele de intrare.
Analiza algoritmului se refer la evaluarea performan-elor acestuia (timp de execuie, spaiu
de memorie).
Algotirm definiii, caracteristici
Algoritmul este o secven de operaii care transform mulimea datelor de intrare n date de
ieire, sau ntr-o definiie mai exact
Este un set de pai executabili, descrii fr echivoc, care definesc un proces finit.
Caracteristici legate de definirea algoritmului:
Finititudine;
Generalitate;
Corectitudine (determinism);
Completitudine.
Proprietile algoritmului
Proprieti care definesc modalitatea de descriere a algoritmului:
Concizia;
Claritatea;
Rigurozitatea;
Proprieti legate de executare algoritm:
Executabilitatea descrie prelucrrile numai prin intermediul unor operaii care pot fi
executate n calculator;
Eficiena Gradul n care executarea se reali- zeaz cu consum redus de resurse (timp,
memorie, etc.)
1

Verificarea corectitudinii algoritmului


Etapele verificrii:
I.
Experimental Testarea algoritmului
pentru stri particulare ale
problemei;
II.
Analitic Demonstrarea riguroas, formal, a funcionrii corecte pentru orice
set de date de intrare;
Etapele verificrii analitice
Identificarea proprietilor datelor de intrare (precondiiile problemei).
Identificarea proprietilor pe care trebuie s le satisfac rezultatul (postcondiiile problemei).
Demonstrarea faptului c pornind de la precondiii i aplicnd prelucrrile specificate n algoritm
se ajunge la satisfacerea postcondiiilor.

Variabilele i strile unui algoritm (program)


Prin examinarea unui algoritm codificat ntr-un limbaj de programare se identific dou aspecte:

controlul execuiei instruciunilor (if-then, etc);

execuia comenzilor (ca asignri de valori rezultate n urma unor evaluri).

Pentru fiecare variabil a programului exist o stare care conine informaia curent la
orice moment de timp.

Aceast stare este identificat prin valoarea variabilei care poate fi schimbat prin
execuia unei comenzi.
Starea unui program
S presupunem c fiecrei variabile a unui program i asociem una din axe ntr-un
spaiu cartezian multidimensional, care se va numi spaiul strilor unui program.
Un punct n acest spaiu este o stare a programului.
Execuia unei comenzi elementare este vizualizat n acest
spaiu ca un segment
ce leag starea programului nainte de execuie de cea de dup execuie.
n acest context, spaiul strilor este o mulime a tuturor variabilelor programului.
Precondiii- Postcondiii
Expresia condiiilor care trebuie satisfcute, n spaiul strilor, pentru o execuie corect a
programului, se numete precondiie.
Specificaiile strilor la terminarea algoritmului (programului) se numesc postcondiii.
Ideea verificrii este de a stabili care trebuie s fie starea la fiecare moment astfel nct n final
s fie satisfcute postcondiiile.
O dat stabilite strile intermediare este suficient s se verifice c fiecare prelucrare asigur
transformarea strii care o precede n cea care o succede.
Starea algoritmului este modificat prin atribuiri de valori variabilelor.
2

Metode de proiectare-verificare formal


n conformitate cu Dijkstra, programatorii pot
algoritmilor:
Enumerarea,
Inducia matematic
Abstractizarea.

utiliza trei modaliti de proiectare a

Enumerarea
Instrumentul mental al enumerrii este principala metod folosit de programatori.
Utilizm gndirea enumerativ ori de cte ori vrem s instruim pe cineva despre
execuia mai multor activiti.

Inducia matematic
Este foarte utilizat pentru proiectarea i verificarea structurilor repetitive (cicluri).
Inducia matematic este un proces mental natural ca i enumerarea.
n general, principiile induciei pot fi definite astfel:
1. Ba za induciei este de a stabili c un anumit element p al unui mulimi S satisface o relaie
R.
2. Pasul induciei este de a arta c un element generic y a lui S satisface R, adic exist T(y),
unde T este orice fel de transformare n care alt element a lui S satisface R.
3. Dac baza i pasul induciei sunt demonstrate, atunci orice element derivnd din p printr-un
num r de aplica ii a le lui T, de asem enea satisface R.
Verificarea structurilor secveniale i repetitive
n cazul prelucrrilor secveniale (succesiuni de atribuiri), verificarea este n general simpl
constnd n a analiza succesiv efectul fiecrei atribuiri asupra strii algoritmului.
Structurile repetitive reprezint principala surs de erori din cauz c se pot specifica greit
iniializrile, prelucrrile din corpul ciclului sau condiia de oprire (continuare).
Pentru a demonstra c o prelucrare repetitiv este corect se folosete adesea metoda induciei
matematice.
Exemplu:Minimum dintr-un ir finit de numere
minim(n,a)
min a[1]
FOR i 2,n DO
IF min > a[i] THEN
3

min a[i]; RETURN min;

Analiza algoritmului minim (n,a)


Enunul problemei nu impune nici o restricie
asupra tabloului a[1,..,n] deci setul
precondiii este constituit doar din n 1 (irul nu este vid).
Postcondiia este min a[i] pentru orice
i = 1,2,.., n.
Rmne s artm c postcondiia rezult n urma aplicrii algoritmului.

de

Demonstrm prin inducie matematic


dup variabila i c min a[i], i = 1,2,..,n.
1.Cum min = a[1] i valoarea lui min este nlocuit doar cu una mai mic rezult c min a[1].
2.Presupunem c min a[i] adevrat pentru orice i.
Rmne s artm c min a[i+1].
3.La pasul i al ciclului FOR valoarea lui min se modific astfel:
Dac min a [i+1] atunci min rmne nemodificat.
Dac min > a [i+1] atunci min se nlocuiete cu a [i+1].
Astfel n oricare dintre variante se obine c min a[i+1].
Conform metodei induciei matematice rezult c postcondiia este satisfcut, deci algoritmul
este corect.
Dac algoritmul este:
minim(n,a)
min a[1];
FOR i 1,n-1 DO
IF a [i+1] > a [i] THEN
min a[i];
ELSE
min a[i+1];
RETURN min;
n acest caz prelucrarea din corpul ciclului conduce la min = min {a[i], a[i+1]} astfel c nu se
mai poate demonstra c pornind de la min = min{a[1],..,a[i]} c min = min{a[1],..,a[i+1]}.
Contraexemplu - irul {2, 1, 3, 5, 4} pentru care algoritmul de mai sus nu funcioneaz corect.
n schimb se poate demonstra c algoritmul returneaz min{a[n-1], a[n]}
Abstractizarea procedural- Metod formal de analiz a corectitudinii
Ea const din abstractizarea unei piese din program(de
regul
nescris
nc)
prin
substituirea n textul su a precondiiei i postcondiiei.
Astfel intreaga structura a programului poate fi definita si se demonstreaza corectitudinea lui prin
5

utilizarea unui text mai scurt

Metod formal de analiz a corectitudinii


Pe baza precondiiilor i postcondiiilor problemei se stabilesc aseriuni pentru fiecare prelucrare
privind valorile datelor i relaiile dintre ele;
Pentru fiecare prelucrare se demonstreaz c ea asigur satisfacerea aseriunii care o urmeaz,
dac este satisfcut aseriunea care o precede.
Notm cu P precondiiile problemei, cu A algoritmul i cu Q postcondiiile.
A
algoritm
corect,
i
notm
,
P

Q
Spunem c tripletul (P, A,Q) formeaz un
Dac urmtoarea afirmaie este adevrat:
Dac datele problemei satisfac precondiiile P atunci:
A. rezultatul satisface postcondiiile Q;
B. algoritmul A se termin dup un numr finit de pai.
Verificarea poate fi descompus la nivelul structurilor de prelucrare.
Pentru fiecare dintre structurile de prelucrare exist reguli care uureaz verificarea.
Vom stabili reguli pentru cele trei structuri fundamentale conform teoremei de structur:
structura secvenial, structura alternativ i structura repetitiv.
I. Regula structurii secveniale
Fie algoritmul A constituit din succesiunea de prelucrri (A1,A2,..,An).
Notm cu P

i P starea algoritmului nainte i respectiv dup efectuarea prelucrrii A .


i-1
i
i
Regula structurii secveniale poate fi enunat astfel:
A pentru i=1,2,..,n i
D P
ac

P
0,
P
i
1
P AQ

P Q, atunci
n

Exemplu

se

Fie n i m dou valori ntregi, iar x i y dou variabile ce conin valorile n i m. S


schimbe ntre ele valorile celor dou variabile.

Precondiiile problemei sunt:


{x = n, y = m},
Postcondiiile sunt {x = m, y = n}.
Consideram prelucrrile
algoritmului:
A : aux x
1
A : x y
2
A : yaux
3
P = {x = n, y = m} (nainte de A )
0
1
P = {aux = n, x = n, y = m} (dup A )
1
1
P = {aux = n, x = m, y = m} (dup A )
2
2
P = {aux = n, x = m, y = n} (dup A )
3
3
Este uor de remarcat c P = P , P Q,
0 3
pentru i=1,2,3.

i1

P
i

Ai

Dac ns algoritmul de mai


sus se nlocuiete cu:

A :
1

A :
2

Aseriunile corespunztoare sunt:


{x = m, y = m}, att dup A ct i dup A .
1
2
n acest caz aseriunile A i A nu
1
2
conduc la postcondiia Q.

Aceeai problem poate fi rezolvat fr a


folosi o variabil auxiliar efectund
prelucrrile:

A :x x-yA :y x+yA :x y-x


1
2
3

Aseriunile privind strile algoritmului sunt : P = {x = n, y = m} (nainte de A )


0
1
P = {x = n - m, y = m} (dup A )
1
1
P2 = {x = n - m, y = n} (dup A ) P = {x = m, y = n} (dup A )
2 3
3
Este uor de remarcat c P = P , P Q,
P
A
0 3
i i P
1
pentru i=1,2,3.

Reguli

a) ntrirea precondiiei Dac R

A
P Q

P i
R

atunci ,

adic algoritmul rmne corect dac


A

se particularizeaz datele de intrare.


b) Slbirea postcondiiei Dac Q

R i
P
atunci ,

P Q

adic algoritmul rmne corect dac

A

R

se reduc cerinele pentru datele de ieire.


c) Proprieti nsoitoare
P
Dac

Q
i

P
A

Q

atu
2
nci

A
1 Q Q
1

Regula structurii alternative

Considerm stuctura:
IF c THEN
A1
ELSE
A2

Dac P i Q sunt precondiiile, respectiv postcondiiile atunci


regula poate fi enunat n modul urmtor:

Dac c este bine definit (poate fi evaluat), atunci i


A
Pc
A
si
P Q
P c 1 Q ,
A2
dec

i
Q

Regula sugereaz c trebuie verificat corectitudinea fiecrei ramuri (att cnd c


este adevrat ct i n cazul n care este fals).

Exemplu. Considerm problema determinrii

minimului dintre dou valori reale, distincte

IF a < b THEN
ma
ELSE
mb
Precondiiile sunt:

a R, b R, a b
Postcondiia este
m = min{a, b}.
Condiia c este
a < b.
Dac a < b atunci m = a < b deci m = min{a, b}.
n caz contrar (a > b) iar prelucrarea de pe ramura ELSE
conduce la m = b < a deci din nou m = min{a, b}.

Regula structurii repetitive

Deoarece toate structurile repetitive pot fi transformate ntr-o structur repetitiv cu


test iniial o vom analiza doar pe aceasta.
Fie structura:
S: WHILE c DO A;
Precondiia P i Postcondiia Q.

Structura repetitiv este corect dac exist o aseriune I (numit invariant al


prelucrrii repetitive) asociat strii algoritmului i o funcie t : N N (numit funcie de
terminare i care depinde de numrul de ordine al iteraiei) care satisfac proprietile:

(a) Aseriunea I este adevrat la nceputul


prelucrrii repetitive (P I).

(b) Aseriunea I este invariant: dac I este adevrat nainte de efectuarea


lui A iar c este adevrat atunci I rmne adevrat i
A
dup efectuarea lui A ( I
c I )
(c) La sfritul structurii repetitive (cnd c
devine fals) postcondiia Q poate fi dedus
din (

A
I c Q).

(d) Dup efectuarea prelucrrii A valoarea lui t


descrete
c t( p) k

A
t( p 1) k

(e) Dac c este adevrat atunci t(p) 1 (mai exist cel puin o iteraie), iar cnd
valoarea lui t este 0 condiia c devine fals (algoritmul se
termin dup un numr finit de iteraii).


Elementul esenial n demonstrarea corectitudinii unei prelucrri repetitive l
reprezint gsirea proprietii invariante.

Aceasta este o aseriune particular privind relaiile dintre variabilele


algoritmului, care este adevrat nainte de intrarea n prelucrarea repetitiv, rmne adevrat
dup fiecare iteraie iar cnd condiia c devine fals implic postcondiiile.
Gsirea unui invariant elimin necesitatea demonstraiei explicite prin inducie matematic.


Dac se demonstreaz doar faptul c algoritmul produce rezultatul dorit fr
a se analiza i terminarea acestuia atunci despre algoritm se spune c este parial corect.

Un algoritm este considerat complet corect atunci cnd se justific i faptul


c produce rezultatul dup un numr finit de operaii.

Exemplul 1.
Relum problema determinrii minimului
dintr-un ir finit de valori

minim(n,a)
A1: min a 1{min=a[1]} A2: i 2 {min=a[1], i=2} A3: WHILE i n DO
A4: IF min > a[i] THEN
A5: min a[i]
{min a[j], j=1,2,..,i} A6: i i+1
{min a[j], j=1,2,..,i1} RETURN min
{min a[j], j=1,2,..,n}

Precondiia este reprezentat de n 1,


Postcondiia este min x[i] , i = 1,2,.., n.
Aseriunile marcate dup fiecare prelucrare sunt uor de
stabilit.
Proprietatea invariant este min a[j], j =1,2,..,i-1.
ntr-adevr, dup prelucrarea A2 proprietatea este satisfcut.
Din aseriunea specificat dup A6 rezult c proprietatea
rmne adevrat dup fiecare iteraie.

Condiia de oprire este i = n + 1 i se observ c atunci cnd este satisfcut,


aseriunea final implic postcondiia.

Funcia de terminare este t(p) = n + 1 -ip, unde ip este valoarea indicelui i


corespunztor iteraiei p.
Cum ip+1= ip +1 rezult c t(p + 1) < t(p), iar t(p) = 0 implic
i = n + 1 adic condiia de oprire a algoritmului.

S considerm calculul sumei, S, a primelor


n numere naturale (n 1).

Precondiia este P ={ n 1 } iar


Postcondiia este Q = {S = 1 + 2 +...+ n}.
ntruct suma va fi calculat adugnd succesiv termenul
curent, i, un invariant adecvat ar fi S = 1 + 2 + .. + i.

Pentru a asigura validitatea acestui invariant, termenul curent trebuie pregtit chiar nainte
de a fi adugat. Pe de alt parte pentru a ne asigura c la finalul ciclului postcondiia este
satisfcut rezult c la ieirea din ciclu variabila i trebuie s aib valoarea n.
Astfel condiia de continuare a ciclului WHILE ar trebui s
fie i < n.

Toate aceste observaii conduc la


algoritmul:

Sum(n)
i 1
S 1
WHILE i < n DO
i i+1
SS+i
RETURN S

Este uor de remarcat faptul c exist i alte variante corecte de calcul a sumei. Una dintre
acestea este:

Sum(n)
i 1
S0
WHILE i n DO
SS+i
i i+1
RETURN S
Corectitudinea acestui algoritm poate fi demonstrat
folosind invariantul:
S = 1+2+...+(i-1)