Documente Academic
Documente Profesional
Documente Cultură
algoritmilor
DIVIDE ET
IMPERA
Backtrakin
g
diametrelor.
Clugrii templului au sarcina mutrii
discurilor de pe o tij pe alta, folosind o tij
auxiliar astfel nct:
B.
Pentru asta, trebuie mutate n-1 discuri de pe A pe B prin C,
ultimul
disc de pe A pe C i apoi n-1 discuri de pe B pe C prin A.
HANOI (n, A, C, B)
if n>=1 then
HANOI (n-1, A, B,
C) PRINT (AC)
HANOI (n-1, B, C, A)
Hanoi.cpp
Complexitatea algoritmului
Hanoi
Complexitate
Metoda greedy
Algoritmii greedy aleg la fiecare moment cel mai bun
candidat posibil.
Metoda greedy face optimizri locale, cu speranta c
acestea vor
conduce la un optim global.
Aceti algoritmi sunt de obicei rapizi si furnizeaz o
solutie relativ bun, car nu ntotdeauna cea mai bun.
GREEDY (C)
S=0 while C0 do
x = BEST
(C) C = C{x}
if FEASIBLE (S U {x}) then
S = S U {x}
11
Greedy- Problema
rucsacului
din obiecte.
Greedy rucsac.cpp
Obinerea arborelui de
acoperire de cost minim prin
algoritmul lui Kruskal
Algoritmul lui Kruskal selecteaz prin
metoda Greedy muchiile grafului, n
ordinea strict cresctoare a costului lor.
Sunt incluse n arborele de acoperire
numai acele muchii, a cror adugare la
arbore nu produce formarea unor circuite.
Fie, de ex., graful din figura 1, n care
nodurile sunt etichetate cu litere, iar
pentru fiecare muchie este specificat
costul parcurgerii acesteia.
Figura 1
13
Arborele de acoperire de
Arborele de acoperire de
cost
minim figura 2
n.
se
pune nodul surs n Q.
Fiecrui nod din Q i se ataeaz ca informaie
distana de la nodul surs pn la nodul dat.
Se intr apoi ntr-un ciclu Greedy.
La fiecare parcurgere a ciclului se extrage din Q
nodul de prioritate maxim (deci cel pentru care
distana de la nodul sursa este minim) i se pune
n S.
Pentru a se putea reconstitui arborele, n
structurile S i Q fiecare element va conine i o
referin la tatl acestuia, deci va fi reprezentat
prin urmtorul triplet:
(<tata> < nod_curent>
<distan_la_surs>)
S={(null, A, 0.0), (A, D, 1.2)}, Q={ (D, E, 2.0), (D, B, 4.1), (D, C, 4.3),
(A, F,
5.1), (D, H, 5.4)}
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0)},Q={ (E, F, 3.9), (D, B, 4.1),
(E, G,
4.1), (D, C, 4.3), (D, H, 5.4) }
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0), (E, F, 3.9)}, Q={ (D, B, 4.1),
(E, G,
4.1), (D, C, 4.3), (D, H, 5.4) }
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0), (E, F, 3.9), (D, B, 4.1)},
Q={(E, G,
4.1), (D, C, 4.3), (D, H, 5.4) }
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0), (E, F, 3.9), (D, B, 4.1),
(E,G,4.1)},
Q={ (D, C, 4.3), (D, H, 5.4) }
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0), (E, F, 3.9), (D, B, 4.1), (E,
G, 4.1), (D, C, 4.3)}, Q={(D, H, 5.4) }
S={(null, A, 0.0), (A, D, 1.2), (D, E, 2.0), (E, F, 3.9), (D, B, 4.1), (E,
G, 4.1), (D, C, 4.3), (D, H, 5.4)}, Q={ }
nodul surs.
Arborele de acoperire
minimDijkstra Fig.3
mare,
se va mbina sortarea cu hashing-ul.
Hash Table
Ideea de baz n hashing este de a
ncerca s mprim elementele mulimii
ntr-un numr oarecare de clase de
echivalen (avnd fiecare cam acelai
numr de elemente).
Dac se reuete acest lucru, nseamn
c la cutarea unui element n cadrul
mulimii vom stabili n prima faz crei
clase de echivalen i aparine, iar apoi l
vom cuta doar n cadrul acelei
submulimi.
n cazul n care clasele de echivalen vor
fi sortate, viteza crete i mai mult.
Implementarea
unei
agende
telefonice
n
care
cutarea
numerelor de telefon s se fac
printr-o tabel de hashing
Criteriul mpririi n clase de echivalen va fi
cifra final
a numrului de telefon.
n consecin vom avea 10 clase de
echivalen, avnd aprox. acelai numr de
elemente.
Tabela de hashing este constituit dintr-un ir
de 10 elem., fiecare coninnd un pointer la o
list simplu nlnuit.
Toate elementele ce aparin aceleiai liste au n
comun
Hashtab.cpp
Deci a cuta n agend un numr de
telefon ce se termin cu cifra i
nseamn a-l cuta secvenial n cadrul
listei la care pointeaz al i- lea element
din tabela de hashing.
i
Exerciiu: Ordonarea claselor de
echivalen cutarea (inserarea) n
metoda divide et impera metoda
njumtirii intervalului. De
asemenea,scrierea
v
propunem
unui destructor al
clasei
hash_array.
Exemplu
S considerm c la o conferin, n
jurul unei mese rotunde, trebuie asezate
n persoane, astfel nct s nu fie aezate
alturi 2 persoane rivale, (este dat
pentru fiecare persoan lista rivalilor
acesteia).
Remarcm imediat c soluia, dac
exist, se gsete printre permutrile
celor n persoane.
n consecin, generm toate
permutrile de n obiecte i le selectm
pe acelea n care, pentru fiecare
persoan n parte, cei doi vecini nu se
gsesc n lista de rivali.