Sunteți pe pagina 1din 10

1.

Sortarea prin insertie


Sortarea prin comparare ,(sunt algoritmi de sortare prin comparare) eficient pt sortarea
unui nr mic de obiecte
Datele de intrare sunt sortate pe loc

- este stabil
- este iterativ
- CF sunt sortate
- Cd sortare descrescator
- Trebuie utilizat cand stim ceva despre datele de intrare
- Sorteaza nr naturale

2. Sortarea prin interclasare (Merge sort) (prin comparare)


- sortare prin comparare
- este recursiv
- imparte sirul in 2 subsiruri de n/2 elemente
- sorteaza recursiv cele 2 subsiruri utilizand sortare prin inteclasare
- interclaseaza cele 2 subsiruri ordonate
- datele de intrare nu sunt sortate pe / in loc
- este putin stabil

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

3. HEAP SORT (prin comparare)


- algoritm de sortare prin comparare
- sorteaza nr reale arbitrare

- sorteaza pe loc n numere arbitrare intr-un timp


- utilizeaza structura de date heop
- nu este stabil deoarece muta datele de foarte multe ori

- inaltimea unui arbore este lgn (binar complet)


- N / 2 elemente sunt frunze (CONSTRUIESTE HEAP se face pt restu)
- Daca nu am informatie suplimentara folosesc HEAPSORT nu INSERTSORT

4. SORTARE RAPIDA (QUICK SORT) (prin comparare)

- un algoritm de sortare prin comparare


- sorteaza pe loc n numere
- folosit pt sortarea tablourilor de dimensiuni foarte mari

- timpul de executie in cazul CD este


- lucreaza bine intr-un mediu de memorie virtuala

- timpul mediu de executie este


- se bazeaza pe paradigma divide si stapaneste
- imparte sirul A [ p . r ] in 2 subsiruri A [ p . q ] si A [ q+1 . r ] (elementele din
A [ p . q ] sunt mai mici decat cele din A [ q+1 . r ])
- se sorteaza fiecare subsir prin apeluri recursive ale metodei de sortare QS
- nu mai esste necesara interclasarea
- partitionare echilibrata -> la fel de rapid ca MS

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)

CF -> cand partitia produce 2 vectori de n /2 elemente ( )

5. Sortarea prin numarare (in timp liniar)


- sortare in timp liniar
- nu se bazeaza pe comparatii
- datele de intrare sunt un nr intreg intre 1 si 10
- memorie suplimentara
- este stabil numerele cu aceeasi valoare apar in tabloul de iesire in aceeasi ordine
in care se gasesc

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.

6. Sortarea pe cifre (in timp liniar)


- sortare in timp liniar
- nu se bazeaza pe comparatii
- este folosit la masinile de sortare a cartelelor
- sortarea este stabila

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

Ordonarea pe grupe se executa, n medie, n timp liniar. Ca i sortarea prin


numrare, ordonarea pe grupe este rapid pentru ca face anumite presupuneri despre
datele de intrare. n timp ce sortarea prin numrare presupune c intrarea consta din
ntregi dintr-un domeniu mic, ordonarea pe grupe presupune c intrarea este generata de
un proces aleator care distribuie elementele n mod uniform n intervalul [0, 1).
Principiul algoritmului de ordonare pe grupe este de a mpari intervalul [0, 1) n
n subintervale egale, numite grupe (engl. buckets) i apoi s distribuie cele n numere de
intrare n aceste grupe. ntruct datele de intrare sunt uniform distribuite n intervalul
[0,1), nu ne ateptm s fie prea multe numere n fiecare grupa. Pentru a obine rezultatul
dorit, sortam numerele din fiecare grupa, apoi trecem prin fiecare grupa n ordine, listnd
elementele din fiecare.
Pseudocodul pentru ordonarea pe grupe presupune c datele de intrare formeaz
un tablou A avnd n elemente i ca fiecare element A[i] satisface relaia 0 A[i] < 1.
Codul necesita un tablou auxiliar B[0..n-1] de liste nlnuite (reprezentnd grupele) i
presupune c exista un mecanism pentru meninerea acestor liste.

4
8. Programarea dinamica

- inmultirea unui sir de matrice (un algoritm care rezolva probleme)


- tehnici importnte pt analiza si proiectarea algoritmilor eficienti
- probleme de optimizare
- stocheaza solutia fiecarei subprobleme
- rezolva probleme comunicand solutiile unor subprobleme
- problema de optimizare trebuie sa prezinte urm(ataorele) comp(onente) de baza:
o substructura optima
o suprapunerea subproblemelor
- depinde de solutia subproblemelor
- problemele se rezolva in maniera bathom -up
Cele 3 principii;
- evitarea calcularii de mai multe ori a aceluiasi subcaz, prin memorarea
rezultatelor intermediare
- ea opereaza de jos in sus (bottom-up)
- este utilizata pt a optimiza o problema care satisface principiul optimalitatii
(intr-o secventa optima de decizii sau alegeri, fiecare subsecventa trebuie sa fie de
asemenea optima)

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.

8.1 Programarea dinamica comparata cu tehnica greedy

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.

Un hot patrunde intr-un magazin si gaseste n obiecte, un obiect i avand valoarea vi


si greutatea gi. Cum sa-si optimizeze hotul profitul, daca poate transporta cu un rucsac cel
mult o greutate G? Deosebim doua cazuri. In primul dintre ele, pentru orice obiect i, se
poate lua orice fractiune 0 xi 1 din el, iar in al doilea caz, xi {0,1}, adica orice
obiect poate fi incarcat numai in intregime in rucsac. Corespunzator acestor doua cazuri,
obtinem problema continua a rucsacului, respectiv, problema 0/1 a rucsacului. Evident,
hotul va selecta obiectele astfel incat sa maximizeze functia obiectiv

9.Algoritmi GREEDY

Algoritmii greedy (greedy = lacom) sunt in general simpli si sunt folositi la


probleme de optimizare, cum ar fi: sa se gaseasca cea mai buna ordine de executare a
unor lucrari pe calculator, sa se gaseasca cel mai scurt drum intr-un graf etc. In cele mai
multe situatii de acest fel avem:

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)

- problema selectarii unei activitati


o tehnici importante pt analiza si proiectarea algoritmilor eficienti
o probleme de optiomizare
- fiecare alegere intr-o maniera optima locala
- un algoritm greeddy alege la fiecare moment de timp solutia ce pare a fi cea mai
buna la momentul respectiv. Face o alegere optima locala, cu speranta ca ea va
conduce la un optim global
o substructura optima
o suprapunerea subproblemelor
- nu depinde de solutiile subproblemelor
- problemele se rezolva in maniera top down

9.1Coduri Huffman

O alta aplicatie a strategiei greedy si a arborilor binari cu lungime externa


ponderata minima este obtinerea unei codificari cat mai compacte a unui text.

Un principiu general de codificare a unui sir de caractere este urmatorul: se


masoara frecventa de aparitie a diferitelor caractere dintr-un esantion de text si se atribuie
cele mai scurte coduri, celor mai frecvente caractere, si cele mai lungi coduri, celor mai
putin frecvente caractere. Acest principiu sta, de exemplu, la baza codului Morse. Pentru
situatia in care codificarea este binara, exista o metoda eleganta pentru a obtine codul
respectiv. Aceasta metoda, descoperita de Huffman (1952) foloseste o strategie greedy si
se numeste codificarea Huffman.

10. Tabele de dispersie p nr de locatii

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:

10.1 Adresarea directa


- functioneaza bine cand U este rezonabil de mic
- o caitare cu succes necesita in medie un timp , alfa factor de
incarcare
- coliziunile sunt rezolvate prin inlantuire
- functiile de dispersie sunt create prin
o metoda diviziunii h (K) = K nod p (p trebuie sa fie prim)
o metoda inmultirii h (K) = [nx (Amcd 1)], valoarea lui n nu este critica
- exista liste sau elemente memorate in afara tabelei
- foloseste pointeri

10.2 Adresarea deschisa


- coliziunile sunt rezolvate prin folosirea unui parametru suplimentar
- toate elementele sunt memorate in tabela de dispersie
- tabelele de dispersie se pot umple
- evita total pointerii (astfel sunt mai multe locatii)
- pt a realiza o inserare verificam tabela de dispersie pt a gasi o locatie libera
Modalitati de realizare a functiei de verificare
o verificare liniara h (k, i) = ( h (k) + i ) mod p

o verificare patratica h (k, i) = mod p


o verificare dubla h (k, i) = ( h (k) + i h secund (k)) mod p
unde h (k) = k mod p prim
h secund (k) = 1 + k mod p secund

- nr mediu de cautari intro cautare cu succes este

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.

11. Arbori binari de cautare


- cheie [fs] <= cheie [p] <= cheie [fd]
- operatiile necesita O(h)
- nu este echilibrat
- intrarea si stergerea provoaca modificari multimii dinamice

n informatic un arbore binar de cutare este un arbore binar cu urmtoarele


proprieti:

fiecare nod are o valoare asociat;


o relaie de ordine este definit pe aceste valori;
pentru fiecare nod, subarborele stng conine valori mai mici dect cea a nodului,
iar cel drept conine valori mai mari dect cea a nodului

Arborii binari de cutare sunt utili n special n contextul algoritmilor de sortare i de


cutare, cum ar fi parcurgerea n inordine, care sunt foarte eficieni.

12. Arbori rosu negru


- o varianta a arborilor binari de cautare
- prezinta garantia unei executii bune (operatiile necesita O(lgn) )
- un arbore de cautare echilibrat
- intrarea si stergerea provoaca modificari multimii dinamice
- au un camp in plus numit culoare

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.

Un arbore binar de cautare este arbore rosu-negru daca el indeplineste urmatoarele


proprietati rosu-negru:

- Fiecare nod este fie rosu, fie negru.


- Fiecare frunza(null) este neagra.
- Daca un nod este rosu, atunci ambii fii ai sai sunt negri.
- Fiecare drum simplu de la un nod la un descendent care este frunza contine
acelasi numar de noduri negre.

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)

14. Statisticei de ordine statice

14.1 Selectie in timp mediu liniar


- trateaza problema selectiei generale intr-un timp teta (n)
- un algoritm practic
- are la baza paradigma divide si stapaneste
- partitioneaza recursiv tabloul de intrare
- spre deosebire de QS, lucreaza numai o componenta
- multime neordonata

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

14.3 Statistici dinamice de ordine


- operatiile sunt executate pe multimi dinamice

- statistica de ordine se determina intr-un timp


- foloseste arbori rosu-negru imbogatiti , numit arbore de statistica (unde un nod are
campurile cheie [x], p [x], stanga [x], dreapta [x], culoare [x], dimensiune [x] )
dim [x] = dim [stanga] + dim [dreapta] + 1
rangul = pe stanga, este dimensiunea
= pe dreapta, este dim + 1
R = dim [stanga [x] ] + 1
- rangul lui x este nr de noduri inspectate inaintea lui x la traversarea in inordine a
arborelui plus 1
- la inserare dimensiunea este patrata prin incrementare campului dimensiune la
nodurile traversate spre locul in care se va afla x (in jos)
- la stergere dimensiunile se conserva prin decrementare, nod traversand in sus spre
radacina

10

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