Sunteți pe pagina 1din 31

Algoritmi

Conceptul de algoritm

Algoritmul este, n general, descrierea riguroas a secvenei de aciuni care trebuie executate pentru a atinge un anumit obiectiv.

In informatic algoritmul este un concept fundamental, deoarece descrie procesul de calcul (de prelucrare a datelor).
Denumirea de algoritm provin e de la numele

matematicianului A bu Ja'far Mohammed ibn Ms alKhowrizm, care a trit in Persia i a scris n anul 825 en (aproximativ), o carte care coninea reguli de aritmetic. Algoritmul trebuie

sa aib urmatoarele caracteristici: a. Caracter discret. Fiecare aciune prevzut n algoritm are un nceput i un sfrit i dureaz un anumit interval finit de timp, fiind

numit i pas al algoritmului; b. Caracter finit. Rezultatul trebuie s se obin dup un numr finit de pai. c. Caracter realizabil . Toate aciunile prevzute n algoritm trebuie s

poat fi realizate n mediul de execuie pentru care a fost conceput algoritmul respectiv. n general, la elaborarea algoritmului se are n vedere o mulime finit de aciuni, realizabile

n mediul de execuie considerat. d. Caracter de generalitate. Algoritmul se aplic asupra anumitor date de intrare, pentru a se obine anumite date de ieire. n general, la elaborarea

algoritmului se are n vedere ca acesta s se aplice oricrui set de date de intrare dintr-o anumit mulime de astfel de seturi de date avut n vedere. e. Caracter de unicitate a soluiei. De cte ori

se aplic acelai algoritm asupra acelorai date, trebuie s se obin acelai rezultat. innd cont de caracteristicile menionate, algoritmul poate fi definit i astfel:

Algoritmul const dintr-o mulime ordonat de pai executabili, descrii fr echivoc, care definesc un proces finit. Algoritmul este, deci, descrierea riguroas a

unui proces. n schimb, nu orice proces poate fi descris printr-un algoritm. De exemplu, n cazul unei aplicaii interactive bazat pe programarea orientat pe evenimente, executarea fiecrei

metode n parte este un proces descris algoritmic (prin nsi metoda respectiv). Dac ns urmrim executare a ntregii aplicaii, n care particip att calculatorul, ct i sursele de evenimente

externe (de exemplu operatorul uman care interacioneaz cu interfaa grafic), constatm ca acest proces nu este ntotdeauna algoritmizabil.
Complexitatea algoritmilor

Pentru rezolvarea aceleeai

probleme se pot concepe mai muli algoritmi. Este important s comparm aceti algoritmi din punct de vedere al numrului de operaii elementare necesare pentru a obine rezultatul i

din punct de vedere al memoriei ocupate. Cu ct numrul de operaii elementare este mai mic, cu att timpul de calcul necesar este mai mic i deci algoritmul

respectiv este mai eficient. Pentru acelai algoritm, numrul de operaii elementare depinde, n general, de cantitatea de date prelucrat. De exemplu, n algoritmii pentru

efectuarea anumitor operaii asupra tablourilor, numrul de operaii poate s depind de numrul de componente ale tabloului. Sa notm cu n numrul de date de intrare

prelucrate de algoritmul respectiv i cu f(n) funcia care exprim relaia dintre numrul de operaii i numrul de date de intrare. Prezint interes ce se ntmpl cu numrul de

operaii f(n) atunc i cnd n crete. n appletul de mai jos sunt trasate pe intervalul [1, 3] graficele unor funcii, pentru a pune n eviden tendina de variaie a fiecreia.

Se observ c, n ordinea vitezei de cretere, funciile pot fi ordonate astfel: log(n), n, 2 n n*log(n), n , e . Daca funcia este polinomial n n, pentru valori mari ale lui n viteza de cretere a funciei depinde numai de

cea mai mare putere a acestuia. Viteza de cretere a funciei exponeniale este, la valori mari ale variabilei n, mai mare dect a oricrei funcii polinomiale. Complexitatea algoritmului se

noteaz cu O(f(n)), unde f(n) este funcia care indic rapiditatea de cretere a numrului de operaii elementare n raport cu numrul de date de intrare. nmulirea cu

coeficient constant sau adunarea cu o constant nu sunt luate n consideraie, ntruct nu intereseaz valoarea exact a funciei ci numai tendina de cretere. Din acest punct de vedere

distingem, n ordinea vitezei de cretere: complexitate constant O(1), care nu depinde de numrul de date n; complexitate logaritmic O(log (n));

complexitate liniar O(n); complexitate k polinomial O(n ) , unde k>=0; complexitate superioar celei polinomiale, n particular cea exponenial O(e n ).

Complexitatea constant i cea liniar sunt, evident, cazuri particulare ale celei polinomiale. Este evident c cei mai avantajoi algoritmi sunt cei de complexitate O(1) , dar acetia se

ntlnesc rar. n general, se consider acceptabili algoritmii cu complexiti O(lo g(n)), O(n), O(n*log(n)), 2 3 O(n ) i O(n ). Remarcm c, totui, acest raionament este

valabil numai pentru valori mari ale lui n. La valori mici, este posibil ca un algoritm de complexitate exponenial sau polinomial de ordin superior s necesite timp de execuie mai mic dect unul de

complexitate liniar. n cazul cnd mai muli algoritmi se ncadreaz n aceeai categorie de complexitate, pentru a stabili gradul lor relativ de eficien este necesar o analiz mai fin.

Studiul complexitii este una din problemele fundamentale ale algoritmicii. Mai exist i alte categorii de complexitate, dar cele enunate aici sunt suficiente pentru acest curs.

S-ar putea să vă placă și