http://en.wikipedia.org/wiki/Greedoid Proiectarea Algoritmilor 2010 3 Proiectarea Algoritmilor 2010 Scheme de algoritmi Prin scheme de algoritmi nelegem tipare comune pe care le putem aplica in rezolvarea unor probleme similare.
O gam larg de probleme se poate rezolva folosind un numr relativ mic de scheme.
=> Cunoaterea schemelor determin o rezolvare mai rapid si mai eficient a problemelor. 4 Proiectarea Algoritmilor 2010 Divide et impera (I) Ideea (divide si cucerete) este atribuit lui Filip al II- lea, regele Macedoniei (382-336 i.e.n.), tatl lui Alexandru cel Mare si se refer la politica acestuia fa de statele greceti.
In CS Divide et impera se refer la o clas de algoritmi care au ca principale caracteristici faptul c mpart problema in subprobleme similare cu problema iniial dar mai mici ca dimensiune, rezolv problemele recursiv si apoi combin soluiile pentru a crea o soluie pentru problema original. 5 Proiectarea Algoritmilor 2010 Divide et impera (II) Schema Divide et impera const in 3 pai la fiecare nivel al recurenei:
Divide problema dat intr-un numr de subprobleme;
Impera (cucerete) subproblemele sunt rezolvate recursiv. Dac subproblemele sunt suficient de mici ca date de intrare se rezolv direct (ieirea din recuren);
Combin soluiile subproblemelor sunt combinate pentru a obine soluia problemei iniiale. 6 Proiectarea Algoritmilor 2010 Divide et impera Avantaje si Dezavantaje Avantaje: Produce algoritmi eficieni.
Descompunerea problemei in subprobleme faciliteaz paralelizarea algoritmului in vederea execuiei sale pe mai multe procesoare.
Dezavantaje: Se adaug un overhead datorat recursivitii (reinerea pe stiv a apelurilor funciilor). 7 Proiectarea Algoritmilor 2010 Merge Sort (I) Algoritmul Merge Sort este un exemplu clasic de rezolvare cu D&I.
Divide: Divide cele n elemente ce trebuie sortate in 2 secvene de lungime n/2.
Combin: Secvenele sortate sunt asamblate pentru a obine vectorul sortat.
Recurena se oprete cnd secvena ce trebuie sortat are lungimea 1 (un vector cu un singur element este ntotdeauna sortat ) .
Operaia cheie este asamblarea soluiilor pariale. 8 Proiectarea Algoritmilor 2010 Merge Sort (II) Algoritm [Cormen] MERGE-SORT(A, p, r) 1 Dac p < r 2 Atunci q [(p + r)/2] // divide 3 MERGE-SORT(A, p, q) //impera 4 MERGE-SORT(A, q + 1, r) 5 MERGE(A, p, q, r) // combin // (interclasare)
9 Proiectarea Algoritmilor 2010 Merge Sort (III) Algoritmul de interclasare Algoritm [Cormen] MERGE(A, p, q, r) // p si r sunt capetele intervalului, q este mijlocul 1 n 1 q - p + 1 // numrul de elemente din partea stnga 2 n 2 r q // numrul de elemente din partea dreapta 3 creeaz vectorii S[1 -> n 1 + 1] si D[1 -> n 2 + 1] 4 Pentru i = 1 n 1 5 S[i] A[p + i - 1] // se copiaz partea stnga in L 6 Pentru j = 1 n 2 7 D[j] A[q + j] // si partea dreapta in R 8 S[n 1 + 1] 9 D[n 2 + 1] 10 i 1 11 j 1 12 Pentru k = p r // se copiaz napoi in vectorul de 13 Dac S[i] D[j] // sortat elementul mai mic din cei 14 Atunci A[k] S[i] // doi vectori sortai deja 15 i i + 1 16 Altfel A[k] D[j] 17 j j + 1 10 Proiectarea Algoritmilor 2010 Exemplu funcionare Merge Sort Exemplu funcionare [Wikipedia]:
complexitatea interclasrii numr de subprobleme dimensiunea subproblemelor => (din T. Master) T(n) = (n * logn) 12 Proiectarea Algoritmilor 2010 Divide et impera alte exemple (I) Calculul puterii unui numr: x n Algoritm clasic: Pentru i = 1 n rez = rez * x; ntoarce rez Complexitate: (n)
Algoritm divide et impera: Dac n este par Atunci ntoarce x n/2 * x n/2 Altfel (n este impar) ntoarce x * x (n-1)/2 * x (n-1)/2 Complexitate: T(n) = T(n/2) + (1) = (logn) 13 Proiectarea Algoritmilor 2010 Divide et impera alte exemple (II) Calculul celei mai scurte distante intre 2 puncte din plan (http://www.cs.ucsb.edu/~suri/cs235/ClosestPair.pdf)
algoritmul naiv (n 2 )
14 Proiectarea Algoritmilor 2010 Divide et impera alte exemple (III) Sorteaz punctele in ordinea cresctoare a coordonatei x ((nlog n));
mprim setul de puncte in 2 seturi de dimensiune egal si calculm recursiv distana minim in fiecare set (l = linia ce mparte cele 2 seturi, d = distana minim calculat in cele 2 seturi);
Elimin punctele care sunt plasate la distana de l > d;
Sorteaz punctele rmase dup coordonata y;
Calculeaz distantele de la fiecare punct rmas la cei 5 vecini (nu pot fi mai muli);
Dac gsete o distant < d, atunci actualizeaz d. 15 Proiectarea Algoritmilor 2010 Divide et impera tem de gndire Se d o mulime M de numere ntregi si un numr x. Se cere sa se determine daca exist a,bM a.i. a + b = x
Algoritmul propus trebuie sa aib complexitatea (nlogn)