Documente Academic
Documente Profesional
Documente Cultură
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
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.