Sunteți pe pagina 1din 16

Platform de e-learning i curricul e-content

pentru nvmntul superior tehnic


Proiectarea Algoritmilor
2. Scheme de algoritmi Divide & Impera
Proiectarea Algoritmilor 2010
Cuprins
Scheme de algoritmi

Divide et impera

Exemplificare folosind Merge sort

Alte exemple de algoritmi divide et impera

Greedy

Exemplificare folosind arbori Huffman

Demonstraia corectitudinii algoritmului Huffman
2
Bibliografie
Giumale Introducere in Analiza Algoritmilor cap 4.4

Cormen Introducere n Algoritmi cap. 17

http://www.cs.ucsb.edu/~suri/cs235/ClosestPair.pdf

http://www.cs.umass.edu/~barring/cs611/lecture/4.pdf

http://thor.info.uaic.ro/~dlucanu/cursuri/tpaa/resurse/Curs6.
pps

http://www.math.fau.edu/locke/Greedy.htm

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.

Impera: Sorteaz secvenele recursiv folosind merge sort.

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]:

11
Proiectarea Algoritmilor 2010
Merge Sort - Complexitate
T(n) = 2 * T(n/2) + (n)

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)

Temele de la curs sunt facultative!
16

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