Sunteți pe pagina 1din 2

Tipuri de algoritmi

Algoritmul este un concept folosit  pentru a desemna o mulţime finită de operaţii, complet ordonată în timp,
care pornind de la date de intrare produce într-un timp finit date de ieşire. Cu alte cuvinte, algoritmul redă
metoda de rezolvare a unei probleme  într-un număr finit de paşi. Altfel spus, un algoritm este un sistem de
reguli care utilizând un set de date iniţiale ale unei probleme, după execuţia unui număr finit de paşi,
facilitează obţinerea datelor finale, trecând printr-un şir de rezultate intermediare.
Un algoritm nu este aplicabil oricăror date iniţiale; o dată iniţială pentru care se poate aplica un algoritm se
numeşte dată sau informaţie admisibilă.
Un algoritm trebuie să satisfacă în general următoarele cerinţe:

a.   claritate – descrierea algoritmului trebuie să se facă precis, fără nimic arbitrar, fără ambiguităţi şi să
fie prevăzute toate etapele de calcul şi toate situaţiile care se pot ivi până la obţinerea soluţiei;
b. generalitate – algoritmul trebuie să permită rezolvarea de probleme dintr-o întreagă clasă;
c. finititudine – algoritmul trebuie să furnizeze rezultatele într-un număr finit (cât mai mic) de paşi;
d. unicitate – etapele algoritmului trebuie să fie definite în mod unic.

În general algoritmii se împart în următoarele categorii:

1. În funcție de modul de implementare, un algoritm poate fi:


a. recursiv – se impelementează prin functii care in corpul lor au secvențe de autoapelare,
algoritmul este efectiv din punctul de vedere a mărimii codului scris, dar partea negativă a
acestuia este consumul mare de memorie pentru parametrii si variabilelor functiilor in
cazurile unor recursii ”adînci”.
b. iterativ (repetitiv) – se implementeză folosind bucle pentru repetarea operațiilor cu condiții
clare de oprire a buclei, este mai efectiv ca algoritmul recursiv din punctul de vedere a
consmului de memorie (functiile la fiecare apel stochează în memorie parametri, variabile
locale, adresa de revenire).
c. serial sau paralel – aceste două tipuri se deosebesc cardinal unul fața de altul, primul se
refera la proiectarea algoritmului pentru sisteme cu un singur procesor, al doilea se refera la
proiectarea unui algoritm pentru sisteme cu mai multe procesare, în generl un algoritm serial
poate fi transformat în unul paralel însa nu tottimpul. O analogie exemplificativă: o femeie
naște un copil în decursul a nouă luni, dar nouă femei nu pot naște un copil în decurs de o
lună.
2. În funcție de paradigma utilizată, ei pot fi:
a. algoritmi backtracking – este un algoritm general de descoperire a tuturor soluțiilor unei
probleme de calcul, algoritm ce se bazează pe construirea incrementală de soluții-candidat,
abandonând fiecare candidat parțial imediat ce devine clar că acesta nu are șanse să devină o
soluție validă.
b. algoritmi de gen divide et impera – se bazează pe principiul descompunerii problemei în
două sau mai multe subprobleme (mai ușoare), care se rezolvă, iar soluția pentru problema
inițială se obține combinând soluțiile subproblemelor. De multe ori, subproblemele sunt de
același tip și pentru fiecare din ele se poate aplica aceeași tactică a descompunerii în (alte)
subprobleme, până când (în urma descompunerilor repetate) se ajunge la probleme care
admit rezolvare imediată.
c. algoritmi de programare dinamică – se aplică atunci cînd rezolvarea unei probleme se
reduce la rezolvarea problemelor ce compun problema principală, astfel combinînd solutii
pentru subprobleme mici se obțin soluții pentru subprobleme mari. Acest algoritm se
deosebește de algoritmul devide et impera prin faptul că devide et impera se aplică
problemelor ce se descompun în subprobleme independente pe cînd programarea dinamică se
aplică problemelor ce se descompun în subprobleme soluțiile cărora depind una de alta.
d. algoritmi de tip greedy – acest algoritm rezolva problema gasind solutii optime locale cu
speranta de a gasi solutia optima globala.