Sunteți pe pagina 1din 15

LICEUL TEORETIC NEAGOE BASARAB-OLTENITA

Lucrare de atestat

ELEV: Pietrusel Raluca-Florentina


PROFESOR INDRUMATOR:
CHIU LUCIAN

MAI-2014

Cuprins

1.

Algoritmul de cutare...................................................................4

1.1. Cutare
1.2. Arbori

binar...........................................................................................................4

binari de cutare9

Bibliografie..13

Introducere
Cutarea i sortarea sunt dou dintre cele mai des ntlnite subprobleme n
programare. Ele constituie o parte esenial din numeroasele procese de prelucrare
a datelor. Operaiile de cutare i sortare sunt executate frecvent de ctre oameni n
viaa de zi cu zi, ca de exemplu cutarea unui cuvnt n dicionar sau cutarea unui
numr n cartea de telefon.
Cutarea este mult simplificat dac datele n care efectum aceast operaie
sunt sortate (ordonate, aranjate) ntr-o anumit ordine (cuvintele n ordine
alfabetic, numerele n ordine cresctoare sau descresctoare).
Sortarea este o metoda (un algoritm), prin intermediul careia se poate ordona o
anumita clasa de obiecte concrete sau abstracte, dupa unul sau mai multe criterii
impuse iar cautarea este o metoda, prin intermediul careia, se poate cauta, dupa
criterii precizate, pentru regasire un anumit obiect concret sau abstract intr-o
multime ordonata sau nu de obiecte concrete sau abstracte
Ca exemple se pot da :
sortarea (ordonarea) crescatoare sau descrescatoare a unui sir de
numere reale si cautarea unui numar sau a mai multor numere in acest
sir de numere
sortarea unei liste de persoane in ordinea alfabetica a numelor si
prenumelor acestora si cautarea unei persoane sau a mai multor
persoane cu anumite caracteristici precizate.
ordonarea unei liste de persoane dupa importanta muncii lor si
cautarea unor persoane dupa criterii precizate.
ordonarea unei liste de persoane dupa anumite criterii preferentiale
si cautarea in aceasta lista.
etc.
Caracteristici ale sortarii
Sortare stabila se numeste acea sortare care in urma executarii sale face ca
inregistrarile cu chei egale sa isi pastreze pozitiile relative.
Sortare interna este aceea sortare care pastreaza, pe tot parcursul executarii
sale toate inregistrarile in memoria interna a calculatorului.
Sortare externa este aceea sortare care, din cauza numarului mare de
inregistrari, nu pastreaza, pe tot parcursul executarii sale toate inregistrarile in
memoria interna a calculatorului si foloseste pentru memorare si spatii pe
memoriile externe (discuri magnetice, flexibile, optice, etc.)..
Pentru simplificarea prezentarii problemelor de sortare se vor aplica
principalii algoritmi de sortare asupra unor vectori care contin cheile de sortare iar
pentru ca implementarea lor in C sa fie cat mai fireasca se va considera ca primul
element al oricarui vector ocupa pozitia zero si are, in consecinta, indexul zero.

Sortarea datelor consta n rearanjarea coleciei de date astfel ncat un cmp al


elementelor coleciei s respecte o anumit ordine. De exemplu n cartea de telefon
fiecare element (abonat) are un cmp de nume, unul de adres i unul pentru
numrul de telefon. Colecia aceasta respect ordinea alfabetic dup cmpul de
nume.
Dac datele pe care dorim s le ordonm, adic s le sortm, sunt n memoria
intern, atunci procesul de rearanjare a coleciei l vom numi sortare intern.
Fiecare element al coleciei de date se numete articol iar acesta la randul sau
este compus din unul sau mai multe componente. O cheie C este asociat fiecrui
articol i este de obicei unul dintre componente. Spunem c o colecie de n
articole este ordonat crescator dup cheia C dac C (i) C ( j ) pentru 1 i j n ,
iar dac C (i) C ( j ) atunci irul este ordonat descresctor.

1. Algoritmul de cutare

1.1. Cutare binar


Algoritmul de cutare binar este un algoritm de cutare folosit pentru a gsi
un element ntr-o list ordonat (tablou unidimensional/vector). Algoritmul
funcioneaz pe baza tehnicii divide et impera. Valoarea cutat este comparat cu
cea a elementului din mijlocul listei. Dac e egal cu cea a acelui element,
algoritmul se termin. Dac e mai mare dect acea valoare, algoritmul se reia, de
la mijlocul listei pn la sfrit, iar dac e mai mic, algoritmul se reia pentru
elementele de la nceputul listei pn la mijloc. ntruct la fiecare pas cardinalul
mulimii de elemente n care se efectueaz cutarea se njumt e te, algoritmul
are complexitate logaritmic.

Se dau un vector A a1 , a 2 ,..., a n i o valoare x . Se cere s se determine dac


x se afl printre elementele vectorului A .
Dac A este un vector oarecare, atunci trebuie parcurse secvenial elementele
vectorului. Aceast modalitate necesit cel mult n comparaii n cazul unei cutri
cu succes i exact n comparaii n cazul cutrii fr succes. Numrul mediu de
1 2 ... n n 1

n
2
comparaii n cazul unei cutri cu succes este:
Dac A are elementele n ordine cresctoare - situaie des ntlnit n practic

atunci exist posibilitatea de a efectua o cutare mai performant. Deci n

continuare vom lucra n ipoteza a1 a2 ... an .


Vom folosi metoda Divide et impera , ncepnd prin a compara x cu
n 1
2 . Dac ai x , atunci cutarea
elementul din mijloc, adic cu ai unde
se ncheie cu succes. n caz contrar, vom cuta x n secvena {a1 ...ai 1} dac x ai
sau n secvena {ai1 ,..., an } dac x ai . Vom presupune c dorim ca soluia s fie
i

exprimat sub forma:


(1, i ) dac x ai , i {1 ,..., n}
(0, i ) dac ai 1 x ai , i {1,..., n, n 1}

( s, i )

(1)

unde a0 , an1 . Atunci metoda descris este corectat n procedura


CautareBin ara , n care p i u sunt primul, respectiv ultimul indice din secvena
curent n care se afl x .
procedure CautareBin ara ( A, n, x)
array A( x)
p 1; u n
while p u

p u

ai x : p i 1

a i x : s i; write s, i; return

case

ai x : u i 1

repeat

endcase

s 0; write s, p; return
end

Singura explicaie necesar este legat de cazul n care cutarea se termin fr


succes. Observm c situaia p u este precedat de situaia n care valorile lui p
x ap
i u sunt p i u cu p u i . Dac x ai avem p p deci
; dac x ai
x ai 1 a p
atunci p p 1 i 1 deci
. Rezult c valoarea
corect.

p tiprit este

Analiza timpui de lucru


n acest scop vom ncerca s determinm numrul de comparaii care au loc
ntre x i ai . Acest numr este cel care va dicta eficacitatea algoritmului deoarece,
pe de o parte, elementele {ai } pot fi matrici, polinoame etc., iar pe de alt parte
numrul de atribuiri i numrul de comparaii impuse de execuia ciclului while
difer cu o unitate de numrul cutat. Un prim rezulatat este urmtorul:
k 1

Pentru 2 n 2 , n cazul unei cutri cu succes se fac cel mult k


comparaii, iar n cazul unei cutri fr succes se fac k 1 sau k comparaii.
nainte de a face demonstraia, vom ataa algoritmului un arbore binar astfel:

pentru n 1 arborele se reduce la (1), pentru n 0 arborele este vid

pentru o valoare n oarecare arborele are forma din Fig.1, unde


n 1
2 , S

este arborele corespunztor lui i 1 , iar D este arborele corespunztor lui


n i , n care numerele vrfurilor sunt mrite cu i .
3
i
1

2
Fig.1

Fig.2

Astfel pentru n 5 obinem arborele din Fig.2


Numele de cutare binar se datoreaz tocmai acestui arbore binar ataat.
Pentru a demonstra propoziia de mai sus este suficient s artm c vrfurile
care au mai puin de 2 descendeni se afl pe nivelele k 1 i k , ceea ce se poate
arta prin inducie dup n.
Ne intereseaz s nu ne mrginim la studiul cazului cel mai defavorabil, ci s
studiem valoarea medie a numrului de comparaii. n acest scop este convenabil
s transformm arborele binar construit ca mai sus ntr-un arbore binar strict astfel:
i
fiecrui vrf i care are mai puin de doi descendeni i adugm un descendent
i+1
stng notat
(dac i nu are descendent stng) i un descendent drept notat
(dac i nu are descendent drept). Conform notaiei, vom numi aceste vrfuri (care
sunt vrfuri terminale n arbore) vrfuri ptratice. Pentru exemplul considerat mai
sus, obinem arborele binar strict din Fig.3.
3
1

Fig. 3

Pentru a determina numrul p al vrfurilor ptratice, vom numra muchiile


arborelui n dou moduri. Arborele avnd n p vrfuri, are n p 1 muchii. Pe de

alt parte, innd cont c din fiecare vrf circular (intern) diverg dou muchii,
arborele are 2n muchii. Egalnd obinem c p n 1 .
Este evident c vrfurile ptratice pot aprea numai pe nivelele k i k 1 .
S observm c vrfurile ptratice corespund intervalelor dintre elementele
vectorului. Mai precis, vrful i corespunde intervalului ( ai 1 , ai ) . Aceasta devine i
mai clar dac observm c vrfurile arborelui binar sunt n ordinea urmtoare:
1

...

n+1

Se vede c oricare arbore binar cu n vrfuri corespunde unei metode de

cutare binar ntr-un vector A (a1 ,..., an ) avnd elementele ordonate cresctor.
ntr-adevr, completm arborele la un arbore binar strict prin adugarea de vrfuri
ptratice i numerotm n inordine vrfurile arborelui obinut cu
.
1

...

n+1

Un arbore obinut n acest mod se numete arbore de cutare.


Exemplu. n Fig.4 este ilustrat o astfel de coresponden:
5

Fig.4

ntrebarea pe care ne-o punem este dac arborele ataat algoritmului


CautareBin ara este optim n privina numrului mediu de comparaii printre toi

arborii binari strici construii ca mai sus.


Este momentul de a defini numrul mediu de comparaii. Vom presupune c
probabilitile cu care se caut numerele a1 ,..., an sunt egale. De asemenea vom
presupune c intervalele (-, a1 ), (a1 , a 2 ), ... , (a n -1 , a n ), (a n , ) sunt egal probabile.
Numrul de comparaii necesar n cazul unei cutri cu succes este egal cu
nivelul vrfului respectiv (reamintim c rdcina se afl pe nivelul 1), adic este
egal cu distana vrfului respectiv fa de rdcin plus unu. Dac definim
lungimea drumului intern ca fiind suma distanelor fa de rdcin a tuturor

vrfurilor interne i o notm cu I n , atunci numrul mediu de comparaii Cn n


Cn

In n
n .

cazul unei cutri cu succes va fi dat de


Numrul de comparaii n cazul unei comparri fr succes este egal cu
distana fa de rdcin a vrfului ptratic corespunztor. Definind lungimea
drumului extern En ca fiind suma distanelor fa de rdcin a tuturor vrfurilor

externe, atunci numrul mediu de comparaii C n n cazul unei cutri fr succes


Cn

este dat de
Propoziie.

En
n 1 .
E n I n 2n

Vom face demonstraia prin inducie dup n. Pentru n 1 , arborele are forma
din Fig.5.
E1 2, I1 0 , i deci E1 I1 1

1
1

2
fig.5

Presupunnd E1 I1 1 pentru toi arborii binari strici cu n vrfuri interne, s


considerm un arbore cu n 1 vrfuri interne. Punem n eviden un vrf intern
pentru care ambii descendeni sunt vrfuri ptratice; fie k nivelul pe care se afl
acest vrf. Eliminnd cele dou vrfuri terminale (ptratice) i nlocuind vrful
intern respectiv cu unul ptratic obinem un arbore binar cu n vrfuri interne.
Conform ipotezei de inducie, E1 I1 1 . Eliminarea vrfului intern face ca

I n I n1 (k 1) . Eliminarea a dou vrfuri ptratice de pe nivelul k 1 i


adugarea unui vrf ptratic pe nivelul k face ca En En1 2k k 1 . Din
En I n 2n rezult c:
En1 k 1 I n1 k 1 2n , adic

En1 I n1 2(n 1) (ceea ce trebuia demontrat)

Pe baza acestui rezultat minimizarea lui Cn se face concomitent cu cea a lui C n

I n n E n 2n n (n 1)C n n
n 1

Cn
C n 1
n
n
n
n
deoarece
adic
. Rezult c

valorile Cn , C n sunt minime dac En este minim.


Cn

Propoziie. En minim vrfurile terminale apar pe cel mult dou nivele


consecutive.
S considerm un arbore cu n vrfuri interne pentru care En are valoare
minim. Fie m i M cel mai mic, respectiv, cel mai mare nivel pe care apar
vrfurile terminale. S presupunem prin absurd c m M 2 . Fie atunci a un vrf
terminal de pe nivelul m i fie b un vrf de pe nivelul M . Vom construi un nou
arbore n care c, d vor deveni descendenii vrfului a (Fig.6).
m

m
m+1

M-1
M

M-1

d
b

Fig.6

Fie En lungimea drumului extern pentru noul arbore. Ea se obine din E n


innd cont c s-au eliminat drumurile de la rdcin la a, c i d i s-au adugat
drumurile de la rdcin la b, c, d adic:
E n E n m 1 2( M 1) M 2 2m E n M m 1 E n M m 2 1 E n
ceea ce contrazice faptul c arborele de la care am plecat are valoarea E n minim.

Reciproc, s considerm un arbore binar strict n care vrfurile terminale

apar pe cel mult dou nivele consecutive i fie E n lungimea drumului su extern.

Fie En valoarea minim a drumului extern, valoare realizat pentru un arbore .


Dac n vrfurile terminale nu apar pe cel mult dou nivele consecutive, atunci

valoarea En poate fi mbuntit aa cum s-a artat mai sus; contradicie. Dac n
vrfurile terminale apar pe cel mult dou nivele consecutive k i k 1 , atunci
k 1
pe nivelul k apar att n ct i n 2 vrfuri, iar pe nivelul k 1 apare n

arbori acelai numr 2n 1 2 de vrfuri. Ca urmare En En .


Concluzie. Algoritmul CautareBin ara este optim n clasa algoritmilor de
cutare reprezentabili pe arbori binari.
Afirmaia rezult imediat din propoziia anterioar i din faptul c arborele
corespunztor algoritmului CautareBin ara are vrfurile terminale situate pe cel
mult dou nivele consecutive.
k 1

1.2. Arbori binari de cutare


Reamintim c un arbore binar de cutare este un arbore binar strict, etichetat, n
care cele n vrfuri neterminale (interne, circulare) sunt numerotate conform

inordinii i n care pentru orice vrf i , valoarea (eticheta) ai asociat lui este mai
mare dect cea asociat vrfurilor care l preced i mai mic dect a vrfurilor care
i succed n inordine n cadrul subarborelui care l admite ca rdcin. Cele n 1
vrfuri terminale (ptratice) sunt etichetate cu 1,2,..., n 1 i corespund n ordine
intervalelor I 1 , I 2 ,..., I n 1 unde:

I k (a k 1 , a k ); a 0 ; a n 1

Tot n paragraful precedent s-a fcut o analiz complet a problemei cutrii


unui element x n vectorul ( a1 ,..., an ) , folosind strategii reprezentabile prin astfel
de arbori, n ipoteza c valorile a1 ,..., an , precum i intervalele I 1 ,..., I n 1 sunt egal
probabile (apar cu aceeai frecven). n acest paragraf vom generaliza problema
pentru cazul unor probabiliti oarecare date. Mai precis vom presupune c

probabilitatea ca x s fie egal cu a k este p k , iar probabilitatea ca x I k este p k .


Bineneles este satisfcut relaia:

n 1

i 1

i 1

pi q i 1

S observm c n cazul unei cutri cu succes terminate cu x a k , numrul

necesar de comparaii este egal cu nivelul vrfului k , notat prin niv k . n cazul unei
cutri fr succes, terminate deci ntr-un vrf ptratic k {1,..., n 1} , numrul de
comparaii este egal cu niv k 1 . Atunci definim n mod natural pentru un arbore de
cutare binar A msur ( A) a numrului mediu de comparaii (costul arborelui
A ) prin:
n

n 1

k 1

k 1

( A) p k niv k q k (niv k 1)

i cutm arborele binar de cutare optim, adic acel arbore de cutare binar
pentru care valoarea ( A) este minim.
Vom rezolva aceast problem prin metoda programrii dinamice. Prima
decizie const n a determina vrful k ce trebuie ales ca rdcin. S observm c
este satisfcut principiul optimalitii, deoarece dac A este un arbore de cutare
optim pentru {a1 ,..., an } avnd rdcina k , atunci subarborii si stng i drept sunt
arbori de cutare optimali pentru {a1 ,..., ak 1} , respectiv {ak 1 ,..., an } .
Pentru a putea scrie relaiile de recuren, vom nota prin C (i, j ) costul arborelui
de cutare pentru secvena

{ai , ai 1 ,..., a j 1}

, n care intervin probabilitile

qi , pi ,..., p j 1 , q j

.
Este valabil relaia:

C 1, n 1 C 1, k q1 p1 q2 ... pk 1 qk C k 1, n 1
qk 1 pk 1 ... pn qn1 pk

( 2)

deoarece prin coborrea arborilor pentru {a1,,ak-1}, {ak+1,,an} cu un nivel i


considerarea n plus a rdcinii, costul se mrete cu

q1 p1 ... pk 1 qk qk 1 pk 1 ... pn qn1 pk


S introducem notaia:

rij qi pi q j 1 ... p j 1 q j

Se verific imediat c:
rij rik pk rk 1, j

k {i, i 1,..., j 1}

(3)

rij qi

Atunci relaia (2) devine:

C 1, n 1 C 1, k C k 1, n 1 r1,n1

(2)

relaia n care, reamintim, s-a presupus c rdcina este k . Dac nu tim acest
lucru este evident c:
C 1, n 1 min{C 1, k C k 1, n 1 r1,n1}

(4)

1 k n

Generaliznd, obinem relaia de recuren

C i, j min{C i, k C k 1, j rij }

(5)

1 k j

cu condiiile iniiale:

C (i, j ) 0
(6)
corespunztoare faptului ca C (i, j ) reprezint costul arborelui pentru secvena

vid.
Recapitulnd, ne intereseaz s determinm valoarea C (1, n 1) tiind c
C (i, j ) 0,

rij q i , i {1,2,..., n 1}

C (i, j ) min{C (i, k ) C (k 1, j ) rij }


ik j

unde

rij ri , j 1 pi 1 q j

(7)

(aceast formul a lui ij se obine lund k j 1 n (3)).


Vom proceda analog ca n problema determinrii ordinii de nmulire optim a
r

matricilor, adic vom calcula succesiv ij , ij , pentru j i lund succesiv valorile


1,2,..., n . n particular n C (i, j ) unde i j vom pstra valoarea k pentru care se
ralizeaz minimul n relaia (5). Ca rezultat obinem procedura CautareBin ara1 .

procedure CautareBin ara1( n, p, q, C , r )


float p (n), q (n 1), C (n 1, n 1), r (n 1, n 1)
for i 1, n 1

ru qi ; C (i, i ) 0

repeat

for m 1, n /* m reprez inta diferenta j i * /

for i 1, n 1 m :

j i m; rij ri , j 1 q j

C (i, j ) min{C (i, k ) c(k 1, j ) rij

C (i, j ) [valoarea lui k pentru care se obtine minimul de mai sus ]

i k j

repeat
end

Mai rmne de construit efectiv arborele binar de cutare optim. Vom construi
mai nti un arbore binar strict astfel:

rdcina este etichetat cu (1, n 1)

dac un vrf este etichetat cu (i, j ) unde i j , atunci descendenii si vor fi


etichetai cu (i, k ) i ( k 1, j ) , unde k (i, j );

vrfurile terminale sunt etichetate cu (i, i )


Plecnd de la acest arbore, un arbore de cutare optim se obine imediat,
i
schimbnd etichetele (i, j ) cu i j n k , unde k C (i, j ) , iar etichetele (i, i ) n
Analiza eficacitii algoritmului se face n acelai mod ca n problema
determinrii ordinii optime de nmulire a unui ir de matrici.

Bibliografie
[1] Leon Livovschi, Horia Georgescu Sinteza i analiza algoritmilor,
Editura tiintific Bucureti, 1986
[2] Robert Sedgewick Algorithms, Addison-Wesley Publishing, Reading,
Massachusetts London, 1983
[3] Robert Sedgewick Algorithms in Java: Parts 1-4, Third Edition,
Addison Wesley Publishing, London, 2002
[4] Alan Parker Algorithms and Data Structures in C++,
CRC Press, 1993
[5] Douglas Baldwin, Greg W. Scragg Algorithms and Data Structures: The
Science of Computing, Charles River Media, 2004
[6] Niklaus Wirth Algorithms and Data Structures, Prentice Hall, 1985
[7] Robert Lafore Data Structures & Algorithms in Java, Sams, 1998
[8] Alfred V. Aho, Jeffrey D. Ullman, John E. Hopcroft Data Structures and
Algorithms, Addison-Weslez, 1982
[9] Peter Drake Data Structures and Algorithms in Java, Prentice Hall,
2005
[10] Mark Allen Weiss Data Structures And Problem Solving Uusing C++,
Second Edition, Addison-Wesley, 2003
[11] Jimm Keogh, Ken Davison Data Structures Demystified, McGraw,
Osborne, 2004
[12] Sandra Andersen Data Structures in Java, Jones And Bartlett
Publishiers, Sudbury, Massachusetts, 2002
[13] Thomas H Cormen, Charles E Leiserson, Ronald L Rivest Introduction
to Algorithms, Second Edition, Prentice Hall, Massachusetts London,
2001
[14] Robert Lafore Sams Teach Yourself Data Structures and Algorithms in
24 Hours, Sams, Indianopolis, Indiana, 1999

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