Documente Academic
Documente Profesional
Documente Cultură
- este stabil
- este iterativ
- CF sunt sortate
- Cd sortare descrescator
- Trebuie utilizat cand stim ceva despre datele de intrare
- Sorteaza nr naturale
1
- il folosim cand nu stim nimic
- pt numere suficient de mari; MS este mai eficient decat IS in caz D
- FC si CD
- Memorie suplimentara; paradigma divide si stapaneste
2
- partitionarea nu e echilibrata -> algoritmul se executa la fel de incet ca INSERT
SORT
CD -> cand partitia pune mereu intro parte a vectorului doar un singur element (
) (e ordonat)
nr cifrelor;
le adunam prima cu a doua, etc
- se incepe cu ultimul
- face presupuneri despre datele de intrare
Metoda de sortare prin numarare consta in construirea unui tablou B care are
aceeasi dimensiune ca si tabloul A, in care depunem elementele din A ordonate crescator.
Vom analiza fiecare element si il vom compara cu fiecare alt element din sir pt a
putea retine in variabila k numarul elementelor care sunt mai mici decat elementul
considerat, astfel vom afla pozitia pe care trebuie sa-l punem pe acesta in sirul B.
Daca in problema avem nevoie de sirul ordonat tot in tabloul A, vom copia in A
intreg tabloul B prin A:=B.
3
7. Ordonarea pe grupe (sortari in timp real)
- nu se bazeaza pe comparatii
- face presupuneri despre datele de intrare (sunt generate de un proces aleatoriu
care distribuie uniform in ionterval [0 ,1)
- memorie suplimentara
4
8. Programarea dinamica
Ex: sa ne imaginam o competitie in care doi jucatori A si B joaca o serie de cel mult 2n-1
partide, castigatorul fiind cel care acumuleaza primul n victorii.
Atat programarea dinamica, cat si tehnica greedy, pot fi folosite atunci cand
solutia unei probleme este privita ca rezultatul unei secvente de decizii. Deoarece
principiul optimalitatii poate fi exploatat de ambele metode, s-ar putea sa fim tentati sa
elaboram o solutie prin programare dinamica, acolo unde este suficienta o solutie greedy,
sau sa aplicam in mod eronat o metoda greedy, atunci cand este necesara de fapt aplicarea
programarii dinamice. Vom considera ca exemplu o problema clasica de optimizare.
9.Algoritmi GREEDY
5
o O multime de candidati (lucrari de executat, varfuri ale grafului etc)
o O functie care verifica daca o anumita multime de candidati constituie o solutie
posibila, nu neaparat optima, a problemei
o O functie care verifica daca o multime de candidati este fezabila, adica daca este
posibil sa completam aceasta multime astfel incat sa obtinem o solutie posibila,
nu neaparat optima, a problemei
o O functie de selectie care indica la orice moment care este cel mai promitator
dintre candidatii inca nefolositi
o O functie obiectiv care da valoarea unei solutii (timpul necesar executarii tuturor
lucrarilor intr-o anumita ordine, lungimea drumului pe care l-am gasit etc);
aceasta este functia pe care urmarim sa o optimizam (minimizam/maximizam)
9.1Coduri Huffman
Rezolvarea coliziunilor se face astfel: toate nregistrarile pentru care cheile intra
n coliziune sunt inserate ntr-o lista simplu nlantuita. Vor exista astfel mai multe liste,
fiecare continnd nregistrari cu acelasi cod de dispersie. Pointerii spre primul element
6
din fiecare lista se pastreaza ntr-un tablou, la indexul egal cu codul de dispersie .Ca
urmare modelul unei tabele de dispersie este urmatorul:
7
Sa pornim de la urmatorul exemplu:
Gigel dispune de 1000 numere generate aleator. Nu ne intereseaza cum a reusit
performanta. Ne intereseaza ce vrea sa faca cu ele... Pai vrea sa stie daca printre aceste
numere se gaseste si un anume X. Ce se gandeste Gigel? Fac un algoritm "NAIV" de
O(n) si caut numrul X."
Dar daca Gigel are 1000000 de numere? Sau 1000000000? Timpul de executie
creste... Si Gigi nu are timp de asteptat. De aceea va incerca sa foloseasca dispersia
elementelor introduse (sau "posedate", depinde cum doriti sa le ziceti). Gigel isi creeaza o
structura de date pentru care adaugarea unui element consuma timp constant (O(1)).
Dispersie: in loc sa retin o lista de N elemente "aleatoare", retin L liste de
aproximativ N/L elemente pe "categorii". Atunci cand am nevoie de un anume element nu
caut in O(N), ci gasesc "categoria" in care trebuie sa caut, dupa care fac doar O(N/L)
operatii.
Un arbore rosu-negru este un arbore binar de cautare care are un bit suplimentar
pentru memorarea fiecarui nod: culoarea acestuia, care poate fi Rosu sau Negru.Prin
restrangerea modului in care se coloreaza nodurile pe orice drum de la radacina la o
frunza, arborii rosu-negru garanteaza ca nici un astel de drum nu este mai lung decat
dublul lungimii oricarui alt drum, deci ca arborele este aproximativ echilibrat.
8
Fiecare nod al arborelui contine campurile culoare, cheie, stanga, dreapta si p. Daca
fiul sau parintele unui nod nu exista, campul pointer corespunzator din nod are valoarea
null.
13. B Arbori
- arbore de cautare
- echilibrat
- sunt similari cu arborii rosu-negru deoarece au aceeasi inaltime
- un nod poate avea mai multi fii
- cauta info memorata pe disc magnetic
Arborii B formeaza o categorie speciala de arbori, care se caracterizeaza in
principal prin faptul ca un nod contine mai multe chei, nu una singura
Un astfel de nod care contine mai multe chei poarta denumirea de pagina
Se observa ca:
In cadrul unei pagini, cheile sunt pastrate intr-un tablou ordonat
Numarul maxim de chei dintr-o pagina este fix (4, in cazul nostru)
Numarul maxim de fii ai unei pagini neterminale este de asemenea fix (5 =
4 + 1, in cazul nostru)
9
14.2 Selectie in timp liniar in cazul cel mai defavorabil
- trateaza problema selcetiei generale intr-un timp teta (n)
- un algoritm teoretic
- partitioneaza recursiv un tablou de intrare
- garanteaza o partitionare buna a tabloului
- multime neordonata
10