Professional Documents
Culture Documents
_______________________________________________________________________________
V. TEHNICI DE CAUTARE
V.1. Introducere n tehnicile de cutare
O operaie fundamental intrinsec pentru un numr mare de probleme de calcul este
cutarea: recuperarea unei buci de informaii dintr-o mulime de informaii stocate anterior.
De obicei informaia este divizat in mai multe nregistrri fiecare !nregistrare are o cheie
care este folosit !n procesul de cutare. Obiectivul cutrii este de a gsi toate !nregistrrile care au
c"ei identice cu cea care este c"eia de cutare. Scopul cutrii este de a accesa informaiile din
!nregistrri pentru procesare.
#n cazul procesului de cutare avem diferite programe care sunt cunoscute pretutindeni i
utilizate frecvent deci merit s studiem o serie de metode mai detaliat. $om !ncepe cu studierea
unor metode elementare care sunt utilizate cu succes pentru tabele de dimensiuni mici i !n alte
situaii speciale i ilustreaz fundamental te"nicile e%ploatate de ctre metode mult mai avansate.
$om studia metodele care stoc"eaz !nregistrri !n liste care sunt cutate ori prin compararea
c"eilor sau prin inde%are valorii c"eii i vom studia metode fundamentale care construiesc structuri
definite de valoarea c"eii.
&utarea reprezint operaiunea care dureaz cel mai mult !n ma'oritatea programelor de
prelucrare iar !nlocuirea unei metode mai (proaste de cutare cu una mai (bun conduce deseori
la o cretere substanial !n viteza de prelucrare.
Deci scopul acestui capitol este s prezinte !ntr-o manier accesibil pentru programatori
c)teva te"nici de cutare cum ar fi* cutarea secvenial cutarea binar arbori binari de cutare
si tabele de dispersie +"as", precum o serie de te"nici de rezolvare a coliziunilor -.or /0112.
3n locul descrierii la nivel conceptual a soluiilor unor probleme de programare folosind
e%clusiv instrumente 4artificiale4 gen 5seudocod care s fie adaptate mai mult sau mai puin
claselor de algoritmi discutai prezentarea celor mai performante soluii teoretice este completat
de descrierea metodelor i mecanismul de implementare a lor folosind limba'ul de programare
Pascal.
V.1.1.CUTARE !ECVENTIA"
V.1.1.1. Descrierea #eneral a $etodei
&ea mai simpl metod de cutare este cutarea secvenial. O metod simpl de stocare a
informaiei este stocarea !nregistrrilor !ntr-o tabel. &)nd o nou !nregistrare este inserat acesta se
adaug !n poziia dorit c)nd trebuie efectuat o cutare tabela este parcurs secvenial.
&utarea secvenial este cea mai simpl metod de cutare a unei !nregistrri !ntr-o tabel
________________________________________________________________________________
/67
Structuri de date i algoritmi
_______________________________________________________________________________
neordonat !ntr-un mod secvenial p)n c)nd !nregistrarea dorit este gsit.
3n multe aplicaii este nevoie ca s e%tindem programul pentru ca s putem lucra cu
!nregistrri si c"ei mai complicate dar acesta nu va afecta fundamental algoritmul de cutare.
8lte operaii posibile !ntr-o tabel !n afar de operaia de cutare% sunt operaiile de
inserare i tergere. Datele pot fi inserate sau terse la nceputul tabelei la sfritul tabelei i !n
interiorul tabelei.
9n algoritm de inserare la sf)ritul tabelei implementat !n 5ascal este prezentat mai 'os*
PR&CEDURE #:S;<8<;=
'E(IN
)RITE+>#ntroducei elementul pe care dorii s-l inserai*>,=
READ"N+g,=
T-nr?/2*@g= A nr numrul de elemente din tablou B
END=
#n cazul operaiei de tergere la nceput primul element din tabel este ters iar celelalte
elemente se vor translata fiecare cu o poziie !n sus !n tabel. 9n algoritm general pentru cutare
secvenial este prezentat mai 'os.
8vem un vector neordonat T av)nd C8D +C8D E@ /, elemente. 8cest algoritm caut !n
vectorul T elementul particular av)nd valoarea D. Funcia returneaz inde%ul elementului vector
dac cutarea este cu succes altfel returneaz 7.
Secvena de instruciuni !n 5seudocod este*
G *@ /=
&HII#C5 G J@ C8D ;D;&9IK
D8&K I-G2 @ D
8I9:&#
L returneaz G= Acutare cu succesB
;D#I=
8MIF;M
G *@ G ? /=
SFD8&K
SF&HI
L returneaz 7= Acutare cu insuccesB
5rimul pas al algoritmului iniializeaz valoarea variabilei * cu a'utorul creia parcurgem
tabela. 3n pasul al doilea se face o cutare secvenial. Dac variabila * depete capacitatea
ma%im C8D atunci avem cutare fr succes +nu s-a gsit un element al tabelei cu valoarea D,
altfel avem cutare cu succes i variabila * va conine inde%ul !nregistrrii cutate.
#mplementarea !n 58S&8M a algoritmului de cutare secvenial este*
________________________________________________________________________________
/6/
Structuri de date i algoritmi
_______________________________________________________________________________
Exemplul 4.1.
+unction &89I8<; _S;&$;:I#8M8 + I ' D , * integer =
'e#in
G *@ / = A G - elementul cu care parcurgem tabela B
O. *@ ,alse
-hile + not O. , and + G J@ ' , do A ' - numrul de elemente din tabela I B
.e#in
i, I - G 2 @ D t"en A D N c"eia cutat B
.e#in
O. *@ true =
&89I8<;_S;&$;:I#8M8 *@ G =
end =
e/it
else
G *@ G ? / =
end=
&89I8<;_S;&$;:I#8M8 *@ 7 =
end =
5erformana unei metode de cutare se msoar prin numrarea comparaiilor c"eii p)n ce
este gsit o !nregistrare particular. Sunt dou cazuri importante i anume -8"o /0162*
Cazul general +8verage Mengt" of Searc" - ALOS,
Cazul cel mai nefavorabil +Oorst Mengt" of Searc" - WLOS, .
&utarea secvenial +implementare cu a'utorul unui vector de dimensiune n, necesit !n
cazul cel mai nefavorabil +cutare fr succes, n?/ operaii de comparaie iar !n cazul general
avem +n?/,PQ operaii de comparaie pentru o cutare cu succes. Formula de calcul a performanelor
metodei de cutare !n cazul general N ALOS este e%primat prin formula +-Ire /01R2,*
n
i
i i
nr p ALOS
/
+S./,
unde p
i
reprezint probabilitatea ca informaia a-i-a s fie cutat iar nr
i
reprezint numrul de
operaii necesar accesrii informaiei a-i-a. 5robabilitatea ca o dat s fie cutat poate fi e%primat
prin raportul*
cautari de total nr
i datei al cautari de nr
p
i
_ _ _
_ _ _ _ _
+S.Q,
5entru o cutare cu succes dac presupunem c probabilitatea de cutare a unei !nregistrri
particulare este aceeai cu probabilitatea de cutare a altor !nregistrri atunci numrul general de
comparaii este*
________________________________________________________________________________
/6Q
Structuri de date i algoritmi
_______________________________________________________________________________
( )
Q
/
Q
/
Q / /
/
+
+ +
n
n
n n
n
n
i
n
ALOS
n
i
+S.T,
3n cazul !n care probabilitatea de accesare a datelor din tabel nu este ec"iprobabil atunci
cea mai eficient metod de organizare a datelor este cea !n ordine descresctoare a probabilitilor
de cutare datele cele mai probabile a fi cutate fiind dispuse la !nceputul tabelei. S dovedim
aceast afirmaie*
- fie datele organizate !ntr-o tabel !n ordinea descresctoare a probabilitilor de cutare i
anume*
Data
1
Data
2
.. Data
i
.. Data
n
astfel !nc)t*
n i
p p p p > > >
Q /
+S.R,
5entru aceast organizare a datelor !n tabel avem performana*
+ + + + + +
n
i
n j i i
n
i
i i
p n p j p i p p i p nr p ALOS
/
Q /
/
/
Q /
unde
j i <
. S presupunem c e%ist o alt organizare a datelor unde acestea nu sunt organizate !n
tabel !n ordinea descresctoare a probabilitilor de cutare +S.T, i s msurm performana
8MOS a algoritmului de cutare. ;ste suficient s presupunem c e%ist o simpl permutare a
datelor i anume c avem permutate Data
i
cu Data
j
!n tabel. 3n aceast situaie performana
algoritmului de cutare este*
+ + + + + +
n
i
n i j i
n
i
i i
p n p j p i p p i p nr p ALOS
/
Q /
/
Q
Q /
S comparm cele dou performane*
( ) ( ) ( )( ) 7
Q /
< + + j i p p i j p j i p p j p i p j p i ALOS ALOS
j i j i i j j i deoarece
j i p p
j i
< > i
.
&oncluzia este evident organizarea datelor !ntr-o tabel pentru a avea cea mai bun
performan media a operaiei de cutare este conform cu +S.R, adic datele trebuie organizate !n
ordine descresctoare a probabilitii de cutare.
V.1.1.0. Pro.le$e re1ol2ate 3entru cutare sec2en4ial
Exemplul 4.2. 5roblema cutrii unei !nregistrri particulare !ntr-o tabel
Fiind dat un tablou cu o capacitate de ma%im C8D !nregistrri posibile +!nregistrri de tip
numr !ntreg , se cere implementarea !n limba'ul 5ascal a unui algoritm algoritmi care s realizeze
________________________________________________________________________________
/6T
Structuri de date i algoritmi
_______________________________________________________________________________
urmtoarele operaii* inserare cutare +secvenial, i tergere !n tablou.
Pro#ra$ cautare_in_tabel =
const
C8D@/77=
t53e
tablou @ arra5 -/..C8D2 of integer=
2ar
I * tablou =
d nr G g i ' * integer =
a * c"ar =
Procedure I;SI8<; =
.e#in
i, nr E C8D then .e#in
A nr N numrul elementelor din tabel B
A C8D N numrul ma%im de elemente B
-rite + > Depire capacitate > , =
dela5 + R777 , =
halt =
end =
end =
Procedure #:S;<8<; =
.e#in
-rite + > #ntroducei elementul de inserat* > , =
readln + g , = A g N elementul care se !nsereaz B
,or G *@ nr do-nto / do
I- G?/ 2 *@ I - G 2 =
I- / 2 *@ g =
-riteln + > Iabloul este* > , =
,or i *@ / to +nr ? /, do
-riteln + > I- > i > 2@ > I- i 2 , =
readln =
end =
Procedure SI;<U;<; =
.e#in
-rite + >#ntroducei poziia elementului de sters* > , =
readln + d , = A d N reprezint poziia elementului care va fi ters B
,or G *@ d?/ to nr do
I - G-/ 2 *@ I - G 2 =
-riteln + > Iabloul este * > , =
,or i *@ / to + nr-/ , do
-riteln + > I - > i > 2@ > I - i 2 , =
________________________________________________________________________________
/6R
Structuri de date i algoritmi
_______________________________________________________________________________
readln =
end =
Procedure &89I8<; =
2ar
oG * .oolean =
" * inte#er =
.e#in
-rite + > #ntroducei elementul cutat * > , =
readln + " , = A " N elementul cutat B
o* *@ ,alse =
,or i *@ / to nr do
.e#in
i, I- i 2 @ " then
.e#in
o* *@ true=
-riteln + > ;lementul cutat se afl pe poziia * > i , =
end =
end =
i, not o* then
-riteln + > ;lementul cutat nu e%ist !n tablou V > , =
read*e5 =
end =
'E(IN
clrscr =
-rite + > #ntroducei nr. de elemente dorite * > , =
readln + nr , =
I;SI8<; =
,or i *@ / to nr do
.e#in
-rite + > I- > i > 2 @ > , =
readln + I- i 2 , =
end =
re3eat
clrscr =
-riteln + > 8psai tasta dorit * > , =
Writeln + > 7 * 5entru !nserare !n tablou > , =
Writeln + > / * Xtergere !n tablou > , =
Writeln + > Q * &utare !n tablou > , =
Writeln + Y 5entru ieire din program apsai tasta ;sc Y , =
a *@ read*e5 =
case a o,
> 7 > * #:S;<8<; =
> / > * SI;<U;<;=
> Q > * &89I8<; =
________________________________________________________________________________
/6S
Structuri de date i algoritmi
_______________________________________________________________________________
end =
until a @ Z Q6 =
END.
Exemplul 4.2. roblema elementelor pozitive! negative si nenule
:umrai elementele pozitive negative i nenule ale unei liste !ntr-o funcie care dup
apelare returneaz un pointer la un vector cu trei componente ce stoc"eaz rezultatele parcurgerii
listei.
Pro#ra$ numara =
t53e
plista @ [ lista =
lista @record
b * integer =
paue * plista =
end 6
vec @ arra5 - /..T 2 o, b\te =
pv @ vec =
2ar
cp/ * plista =
i n * integer =
vect * vec =
pvec * pv =
+unction creare + n*integer , * plista =
2ar
prad * plista =
.e#in
i, n @ 7 then
creare *@ NI"
else
.e#in
n *@ n-/=
-rite + > Dati elementul " >, =
ne- +prad, =
readln +prad [.b, =
prad [.paue *@ creare +n, =
creare *@ prad =
end 6
end 6
+unction numr +p/ * plista, * pv =
2ar
plucru * pv =
________________________________________________________________________________
/6]
Structuri de date i algoritmi
_______________________________________________________________________________
.e#in
plucru *@ vect =
,or i *@ / to T do
plucru [- i 2 *@ 7 =
-hile p/ J E NI" do
.e#in
i, p/ [. b E 7 then
plucru [ - / 2 *@ plucru [- / 2 ? /
else
i, p/ [.b J 7 then
plucru [ - Q 2 *@ plucru [- Q 2 ? /
else
plucru [ - T 2 *@ plucru [- T 2 ? / =
p/ *@ p/ [.paue =
end 6
numr *@ plucru =
end 6
'E(IN
-rite +> #ntroduceti numrul de elemente ale listei * >, =
readln +n, =
cp/ *@ creare +n, =
pvec *@ numr +cp/, =
-riteln 6
END.
V.1.1.7. Pro.le$e 3ro3use
1. Dac toate c"eile de cutare sunt ec"iprobabile care este deviaia standard a numrului de
comparaii efectuate !ntr-o cutare secvenial cu succes !ntr-un tabel cu N !nregistrri ^
0. 5resupunem c dorii s cutai !ntr-un fiier voluminos nu dup criteriul egalitii ci pentru a
gsi /777 de !nregistrri cele mai apropiate unei c"ei date !n sensul c aceste /777 de
!nregistrri au cea mai mic valoare a lui d !i"!# pentru o funcie d de distan dat. &are
structur de date este cea mai adecvat pentru o asemenea cutare secvenial ^
7. Fiind date dou succesiuni J D
/
D
Q
_ D
n
E i J `
/
`
Q
_ `
n
E de numere reale care
permutare a
/
aa
Q
a_aa
n
a indiciilor va determina valoarea ma%im al lui +D
i
a `
ai
,^ Dar
valoarea minim ^
8. 9n programator dorete s testeze dac n condiii date s)nt sau nu simultan !ndeplinite. +De
e%emplu el poate dori s testeze dac simultan este adevrat ca % E 7 si \ J zaz dar nu este
evident care dintre condiii trebuie testat prima,. S presupunem c sunt necesare I
i
uniti de
________________________________________________________________________________
/66
Structuri de date i algoritmi
_______________________________________________________________________________
timp pentru testarea condiiei i i c aceast condiie se adeverete cu probabilitatea 5
i
independent de rezultatul celorlalte teste de condiii. 3n care ordine trebuie s se e%ecute testarea
condiiilor ^
9. Fiind dat un te%t cu ma%im 17 de caractere ce se termin cu caracterul b s se scrie un program
care s afieze te%tul !n ordine invers.
:. Dac D este un vector cu n componente reale scriei secvene de instruciuni pentru a obine
urmtoarele transformri + fr a folosi un vector suplimentar , *
a , + D
/
D
Q
_ D
n
, + D
n
D
/
D
Q
_ D
n-/
,
b , + D
/
D
Q
_ D
n
, + D
n
D
n-/
D
n-Q
_ D
Q
D
/
,
c , + D
/
D
Q
_ D
n
, + D
i/
D
iQ
_ D
in
,
astfel !nc)t D
i/
J D
iQ
J _ J D
in
iar / J @ i
G
J @ n = / J @ G J @ n .
d , 5e primele poziii s apar elementele negative in aceeai ordine ca !n irul iniial .
;. Se consider un te%t ce conine litere mari litere mici semnele de punctuaie* YY = Y.Y = Y*Y = YVY =
Y^c = Y-Y = Y_c = i se termin cu caracterul b. S se afieze numrul de apariii ale fiecrui
caracter precum i numrul de caractere diferite !nt)lnite !n te%t. Se presupune c Ybc nu este un
caracter al te%tului.
<. Fie ; un numr natural cu n cifre memorate !ntr-un vector cu n din domeniul 7..0. S se verifice
dac ; este un numr divizibil cu *
a, Q = b, S = c, R = d, T = e, 0 = f, 6 = g,// = ", 1 = i, QS = ', /QS =
G, /T = l, Q6 = m, T6 = n, ] = o, /S.
=. S se afieze toate numerele de n cifre care adunate cu rsturnatul lor dau un ptrat perfect .
1>. S se implementeze un algoritm care rearan'eaz toate elementele dintr-un tablou
unidimensional astfel !nc)t toate valorile negative vor precede pe cele pozitive . S se utilizeze
un numr minim de intersc"imbri .
11. S se implementeze un algoritm care pentru dou numere !ntregi cu n cifre memorate vectorial
s determine suma produsul c)tul i restul !mpririi primului numr la al doilea numr.
<ezultatele se vor obine sub forma vectorial .
V.1.0. CUTARE 'INAR
V.1.0.1.Descrierea #eneral a $etodei
________________________________________________________________________________
/61
Structuri de date i algoritmi
_______________________________________________________________________________
O alt metod relativ simpl de accesare a unei tabele este metoda cutrii .inare.
Organizarea datelor !n aceast tabel se bazeaz pe ordonarea linear$ a c"eilor +de e%emplu !n
ordine alfabetic sau ordine numeric cresctoare,. O metod potrivit pentru ordonarea datelor este
sortarea despre care vom vorbi !ntr-un alt capitol.
O cutare pentru o !nregistrare cu o anumit valoare a c"eii este asemntoare cu cutarea
unui nume !ntr-o agend de telefoane. ;ste localizat cu apro%imaie !nregistrarea din mi'locul
tabelei este comparat c"eia !nregistrrii din mi'loc cu c"eia !nregistrrii cutate. Dac c"eia
cutat este mai mare dec)t valoarea c"eii din mi'loc atunci procedura se repet !n 'umtatea de
interes a tabelei p)n c)nd !nregistrarea dorit este gsit sau intervalul de cutare este gol ceea ce
semnific lipsa c"eii cutate.
3n +i#ura 8.1 avem un e%emplu de cutare binar a c"eii % aflat !ntr-o tabel construit
prin inserarea c"eilor a s e a r c " i n g e % a m p l e +Ire -/01R2,. #ntervalul de c"ei este
!n'umtit la fiecare pas deci numai patru comparaii s)nt necesare !n acest caz.
#igura 1. E/e$3lu de cutare .inar.
Operaia de inserare +metoda inseriei binare , realizeaz !n fiecare din cei &-/ pai ai si
!nserarea celei de a i N a !nregistrri din tabloul iniial !n irul de'a sortat al precedentelor i -/
!nregistrri .
Determinarea poziiei de !nserare se face prin cutare binar folosindu-se faptul c
!nregistrrile precedente sunt de'a sortate i reduc)ndu-se astfel numrul mediu de comparaii
necesare de la iPQ la log
Q
i .
Operaia de ?ter#ere este identic cu cea din cutarea secvenial adic elementele din
tablou aflate !naintea elementului care va fi ters vor rm)ne pe loc poziiile lor nu se sc"imb
;lementele care se afl dup elementul care va fi ters vor fi translatate cu o poziie.
V.1.0.0. Descrierea al#orit$ului de cutare n Pseudocod
9n algoritm pentru o astfel de procedur de cutare este prezentat !n r)ndurile urmtoare.
8vem un vector @ cu N elemente ordonate cresctor acest algoritm face o cutare pentru
un element cu valoarea A. $ariabilele "&) BIDD"E i HI(H noteaz li$ita in,erioar
________________________________________________________________________________
/60
Structuri de date i algoritmi
_______________________________________________________________________________
$iClocul i li$ita su3erioar a intervalului de cutare. Funcia de cutare returneaz inde%ul
elementului cutat dac avem o cutare cu succes altfel returneaz valoarea 7.
MOO *@ /
d#Ud *@ :
&HII#C5 MOO J@ d#Ud ;D;&9IK
C#DDM; *@ -+MOO ?d#Ud , P Q 2
D8&K D J . -C#DDM;2
8I9:&# d#Ud *@ C#DDM;-/
8MIF;M D8&K D E . -C#DDM;2
ATUNCI MOO *@ C#DDM; ? /
A"T+E" A&$utare cu succes B
Lreturnea1 C#DDM;.
SFD8&K
SFD8&K
SF&HI
Lreturnea1 7. A'$utare f$r$ succes B
5asul / iniializeaz variabilele MOO i d#Ud pasul T calculeaz valoarea variabilei
C#DDM; care este mi'locul tabelei. 5asul R face comparaiile !ntre c"eia de cutat i valorile limit
i returneaz c"eia cutat dac este gsit. 5asul S returneaz valoarea 7 adic cutare fr succes.
&utarea binar poate fi fcut i !n mod recursiv. Ma un astfel de algoritm este important
ti$3ul de e/ecu4ie +timpul de cutare , i s3a4iul ,olosit. Descrierea algoritmului de cutare binar
+!n mod recursiv , !n 5seudocod este prezentat !n continuare .
8vem un subinterval a crei limite s)nt 5 si e i un vector .. 8cest algoritm recursiv caut
un element dat al crei valoare este stocat !n variabila D C#DDM; i MO& s)nt variabile de tip
!ntreg.
F9:&I#8 &89I8<;_f#:8<8 _< +5 e . D , ;SI;*
D8&K 5 E e
8I9:&#
MO& *@ 7=
8MIF;M
C#DDM; *@ -+ 5 ? e ,P Q 2=
D8&K D J . -C#DDM; 2
8I9:&#
MO& *@ &89I8<;_f#:8<8 _< +5C#DDM;-/.D ,=
8MIF;M
D8&K D E . -C#DDM; 2
8I9:&#
MO&*@&89I8<;_f#:8<8 _< +C#DDM;?/e.D ,=
8MIF;M
MO& *@ C#DDM;=
SFD8&K
SFD8&K
________________________________________________________________________________
/17
Structuri de date i algoritmi
_______________________________________________________________________________
SFD8&K
SF-&89I8<;_f#:8<8=
E/e$3lul 8.7. #mplementarea algoritmului de cutare binar !n 5ascal.
+unction &89I8<; _f#:8<8 + . MOOd#Ud C#DDM; D , * inte#er =
'e#in
MOO *@ / =
d#Ud *@ :=
re3eat
C#DDM; *@ +MOO ? d#Ud, P Q =
i, D J .-C#DDM;2 then
.e#in
d#Ud *@ C#DDM;-/
else i, D E .-C#DDM;2 then do
MOO *@ C#DDM; ? /
else .e#in
-riteln + Y &utare cu succes V Y, =
-riteln + Y5oziia * Y C#DDM; ,=
e/it =
end =
end =
until MOO DE d#Ud6
-riteln + Y &utare fr succes V Y, =
end =
V.1.0.7. Per,or$an4a al#orit$ului de cutare
Iimpul de cutare +e%ecuie, I+n, depinde de numrul de comparaii efectuate care depind
la r)ndul lor de poziia informaiei cutate D. 3n cel mai bun caz informaia cutat este poziionat
!n locaia
1
]
1
+
Q
/ n
+am notat cu - 2 funcia parte !ntreag,. 3n aceast situaie este necesar doar o
________________________________________________________________________________
/1/
Structuri de date i algoritmi
_______________________________________________________________________________
singur operaie de comparaie deci I+n, @ O+/,. &utarea binar nu folosete nici odat mai mult
de lg & ?/ comparaii pentru cutarea cu succes c)t i pentru cutarea fr succes +-8"o /0162,.
#n procesul de cutare binar recursiv c"eia cutat este gsit !n ma%imum log& comparaii
care este un c)tig deosebit faa de cele :PQ comparaii ale cutrii secveniale .
5entru a determina timpul de cutare !n cazul operaiei de cutare binar vom considera c
toate datele sunt ec"iprobabile. 5entru a simplifica analiza vom presupune c dimensionalitatea
datelor este de forma / Q
(
n . 8tunci ( ) / log
Q
+ n ( .
8ceast ipotez nu distruge generalitatea argumentaiei cci putem oric)nd completa o
structur de date cu elemente care nu sunt cutabile ca s o aducem la forma 2
(
N /. Oricum timpul
de e%ecuie al structurii de date originale va fi mai mic sau egal dec)t a structurii de date aduse la
forma / Q
(
n .
S notm cu S
i
numrul de elemente pentru care algoritmul de cutare binar efectueaz un
numr de i operaii +comparaii,. 8vem*
7
/
Q / S =
/
Q
Q Q S =
Q
T
Q R S
= _
( i S
i
i
Q
/
8plic)nd formula +S./, vom avea*
( ) ( ) ( )
( ) ( ) ( ) [ ] ( )
( )
( )
( ) n n
n n
n
n
n
(
( ( (
n
(
n
i i
n
i i
n
i
n
i
n
i
n
S
d p n )
( ( (
(
i
(
i
i i
(
i
i
(
i
(
i
i
(
i
i i i
(
i
(
i
(
i
i i
i i
Q Q
Q
Q
/
/
7
/
/
/ /
/
7
/
/ / /
/
log / / log
/
/
/ log
/ / log
/ / Q /
/
/ Q Q
/
Q Q Q
/
Q / Q
/
Q Q
/
Q
/
+
,
_
+
+
+ +
+ + +
,
_
,
_
'
d b f
c a f
+S.%,
V.7.0.1. +unc4ia hash I $etoda $3r4irii
9na dintre cele mai utilizate funcii "as" este cea bazat pe metoda mpririi. 8ceasta este
definit !n felul urmtor*
( ) / mod * + % - - 3 A ! 3
+S.%,
unde % este un divizor !ntreg nenul iar operatorul $od este operatorul %odulo adic restul
!mpririi lui % la m. 8dresele generate de aceast funcie "as" vor fi /QT _ m.
________________________________________________________________________________
QRS
Structuri de date i algoritmi
_______________________________________________________________________________
Funcia "as" bazat metoda !mpririi asigur p)n la o anumit limit o distribuie
uniform a mulimii adreselor generate. 8ceast distribuie uniform prezint !ns dezavanta'ul
producerii de coliziuni pentru c"eile de cutare din aceeai clas de ec"ivalent %odulo m.
V.7.0.0. +unc4ia hash I $etoda 3tratului $ediu
O alt funcie "as" care este folosit !n multe aplicaii se bazeaz pe metoda ptratului
mediu. #n aceast metod c+eia de c$utare este ridicat la ptrat iar adresa unde va fi cutat
!nregistrarea este obinut prin alegerea unui numr de cifre sau bii din mi'locul numrului obinut
prin ridicare la ptrat. :umrul de cifre ales este dependent de dimensiunea structurii de date care
stoc"eaz !nregistrrile cutate.
De e%emplu s considerm o c"eie din ase cifre* /QT.RS]. <idicm la ptrat i rezult
numrul /S.QR1.7<T.0T]. Dac avem nevoie de o adres format din trei numere atunci putem alege
poziiile din mi'loc de la 9 la ; deci adresa va fi 17<.
V.7.0.7. +unc4ia hash I $etoda ndoirii
5entru funcia "as" bazat pe metoda ndoirii% numrul corespunz)nd c"eii de cutare este
divizat !n numere de lungime egal cu dimensiunea spaiului de adresare cu o posibil e%cepie
corespunz)nd ultimei pri care se poate completa cu zerouri nesemnificative pentru a avea aceeai
dimensiune cu celelalte diviziuni. 8ceste pri sunt !nsumate este ignorat cifra carr6 rezultatul
adunrii form)nd adresa dorit.
&.ser2a4ie* Dac c"eia este binar vom folosi operaia logic DO< !n locul operaiei de
adunare.
E/e$3lu* &"eia de cutare TS].0RQ.61/ este !mprit !n trei numere de c)te trei cifre pentru a
forma o adres de trei cifre deoarece spaiul de stocare necesit cel mult 000 de locaii de memorie.
&ele trei numere obinute sunt TS] 0RQ si 61/. 8dunate obinem*
TS] ?
0RQ renunm la cifra Q de transfer i avem adresa 760.
61/
--------
Q760
V.7.0.8. +unc4ia hash I $etoda ci,relor
________________________________________________________________________________
QR]
Structuri de date i algoritmi
_______________________________________________________________________________
Funcia "as" bazat pe metoda cifrelor formeaz adrese prin selectarea i translatarea cifrelor
din c"eia de cutare original.
E/e$3lu* O c"eie de cutare ce are valoarea numeric 6.SR]./QT este transformat !n adresa Q/]R
prin selectarea cifrelor din poziiile Q la ] i inversarea ordinii lor.
Cetoda de selectare i de inversare trebuie folosit cu consecven pentru o aceeai mulime
de c"ei de cutare. 5entru un set de c"ei aceeai poziie din c"eie aceeai rearan'are trebuie
folosit cu consisten.
V.7.0.9. +unc4ia hash I $etoda de3endent de lun#i$ea cheii
O alta funcie "as" des utilizat !n structuri de date alocate static care folosesc tabele este
funcia "as" bazat pe metoda dependent de lungimea c'eii. 3n aceast metod lungimea c"eii
este folosit singur sau !mpreun cu o parte a c"eii pentru a produce direct o adres din tabel ori
pentru a produce o c"eie intermediar care este folosit mai departe cu o alt metod cum ar fi de
e%emplu metoda !mpririi pentru a genera o adresa final din tabel.
O funcie "as" de acest tip sumeaz valoarea reprezentrii binare interne a primului i al
ultimului caracter al c"eii i a lungimii c"eii translatat la st)nga cu patru poziii binare +sau
multiplicat cu Q
R
@ /],.
E/e$3lu* 8vem c"eia de cutare PR&TE&. ;a va genera adresa*
Q/S ? Q/R ? + ] a /] , @ SQS dac utilizm codul E'CDIC.
Dac considerm 909 ca o c"eie intermediar i aplicm metoda !mpririi cu divizorul 8=%
atunci adresa rezultat este 7:.
V.7.0.:. +unc4ia hash K $etoda codi,icrii al#e.rice
Funcia "as" bazat pe metoda codificrii algebrice are la baz teoria de codificare
algebric -.nu /06]2. O c"eie binar de n bii +(
1
(
2
...(
n
,
Q
este codificat cu a'utorul unui polinom
de gradul n*
( )
n
i
i
i
- ( - !
/
/
+S.%,
Dac spaiul de adresare este !n intervalul [ ] / Q 7
%
atunci vom construi un polinom
divizor al polinomului . i anume*
( )
+
%
i
i
i
%
- p - - 7
/
/
+S.%,
3mprind polinomul ! la polinomul 7 folosind operaii !n baza Q vom obine polinomul
rest*
________________________________________________________________________________
QR6
Structuri de date i algoritmi
_______________________________________________________________________________
( ) ( ) ( )
r
i
i
i
- r - 7 - ! - 8
/
/
mod
+S.%,
&oeficienii polinomului rest
( ) - 8
++
1
+
2
+
r
,
Q
vor genera adresa cutat.
V.7.0.;. +unc4ii hash I $etoda $ulti3licati2
S.nu /06]2 a artat ca funciile "as" de cutare bazate pe metoda multiplicativ sunt
printre cele mai performante. Dac
+
9 -
iar c este o constant c pozitiv subunitar 7 J c J /
atunci funcia "as" arat !n felul urmtor*
( )
1 ]
/ + c- % - 3
+S.%,
8m notat cu ]
-
cel mai mare !ntreg mai mic dec)t - i cu 1
-
partea fracionar a lui -.
8ceast funcie "as" d rezultate foarte bune dac constanta c este aleas corespunztor.
8legerea constantei c este dificil.
V.7.7. Per,or$an4a ,unc4iilor hash
-.nu /06T2 prezint studii asupra funciilor "as" prezentate anterior. 3n general aceste
funii "as" genereaz adrese uniforme dar o generalizare a acestei afirmaii este dependent de
mulimile particulare de c"ei de cutare.
;ste nevoie de introducerea unui sistem de referin pentru a compara performanele
diferitele funcii "as". &el mai larg acceptat criteriu de referin este 8MOS +A*erage Lengt+ of
Searc+, prezentat !n +S./,.
De obicei cea mai performant funcie "as" de folosit pentru un anumit mulime de cutare
va minimiza 8MOS. Sunt !ns i ali factori !n afar de performana funciilor "as" care
minimizeaz 8MOS timpul mediu de cutare.
V.7.8. Tehnici de re1olu4iune a coli1iunilor
V.7.8.1. Introducere
&u a'utorul funciilor "as" se poate realiza transformarea c'eie de cutare < adres. :u am
inut !ns cont de problema prezentat !n +S.%, i anume de problema coliziunilor. O coliziune
apare aa cum am mai artat atunci c)nd dou c"ei de cutare distincte sunt mapate de funcia "as"
la aceeai adres a structurii de date. #n practic un astfel de fenomen se !nt)mpl pentru c spaiul
________________________________________________________________________________
QR1
Structuri de date i algoritmi
_______________________________________________________________________________
c"eilor de cutare este mai mare dimensional dec)t spaiul adreselor. 3ntr-o astfel de situaie funcia
"as" nu este in'ectiv deci dou sau mai multe c"ei de cutare pot genera prin intermediul funciei
"as" aceeai adres. ;vident c nu putem suprapune dou sau mai multe !nregistrri cu c"ei de
cutare diferite la aceeai adres generat de funcia "as".
<ezolvarea acestei probleme se face cu a'utorul te'nicilor de rezoluiune a coliziunilor.
Ie"nicile de rezoluiune a coliziunilor se !mpart !n dou clase*
adresare deschis6
adresare nln4uit.
Obiectivul general al te"nicilor de coliziune este de a !ncerca plasarea !nregistrrilor aflate
!n coliziune la alte adrese ale structurii de date. Dac structura de date este o tabel atunci ne
propunem s plasm !nregistrrile aflate !n tabel !n alte locaii libere ale tabelei. 8ceasta va implica
o serie de operaii de cutare !n tabel p)n c)nd gsim o poziie liber unde se poate insera una
din !nregistrrile aflate !n coliziune.
Deci avem nevoie de un mecanism i de algoritmul corespunztor care s e%amineze toate
poziiile structurii de date !n vederea realizrii operaiilor de inserare cutare tergere actualizare.
9n astfel de mecanism trebuie s satisfac o serie de cerine i anume -Iom /0062*
2ite1a +pentru a determina repede o nou poziie liber,=
3uterea de aco3erire +pentru a putea cuta !n toate poziiile e%istente !n structura de date,=
re3roducti.ilitatea +pentru a regsi !nregistrrile inserate !n structura de date,.
V.7.8.0. Tehnici de re1olu4iune a coli1iunilor 3rin adresare deschis
#deea de baz !n te"nica de rezoluiune a coliziunilor prin adresare desc"is este de a cuta
pentru !nregistrarea aflat !n coliziune o nou poziie liber !n structura de date. Dac structura de
date este alocat static !n memorie atunci vom folosi o tabel pentru reprezentare tabela se va numi
tabel 'as'. O astfel de tabel "as" fiind alocat static are un numr finit de poziii de stocare a
!nregistrrilor aceast capacitate ne put)nd fi modificat pe parcursul e%ecuiei programului ce
implementeaz algoritmul de manipulare a !nregistrrilor. De aceea pentru a folosi c)t mai eficient
spaiul de stocare fi% oferit de o tabel "as" va trebui s facem disponibile toate spaiile eliberate !n
urma unor operaii de tergere.
5utem a gestiona aceast problem vom introduce marca'e care s ne indice faptul c o
poziie a tabelei "as" este liber sau nu. $om avea urmtoarele valori posibile pentru o poziie liber
din tabel "as" !n c)mpul c"eii de cutare*
;mtp\ N poziie liber !n tabela "as" !n care nu s-a inserat nici o !nregistrare=
D;M;I;D - poziie liber !n tabela "as" unde a e%istat o !nregistrare dar a fost tears*
Cecanismul prin care realizm cutarea unei noi adrese pentru o c"eie de cutare aflat !n
coliziune prin te"nica adresrii desc"ise este de mai multe feluri i anume*
________________________________________________________________________________
QR0
Structuri de date i algoritmi
_______________________________________________________________________________
a. Pro.are liniar
.. Pro.are aleatoare
a. Pro.area liniar
9nul din cele mai simple mecanisme de cutare a unei locaii libere pentru o !nregistrare
av)nd o c"eie de cutare !n coliziune este de a folosii o secven de cutare liniar. 5resupun)nd c
avem c"eia
( ) A a ( 3 ! (
iar adresa la adresa a avem o coliziune atunci probarea liniar se
bazeaz pe urmtoarea secven de cutare liniar*
a % a T / % U % % I / % % % / % Q % U % a I / +S.%,
unde % reprezint capacitatea ma%im de stocare a tabelei. $om gsi o locaie liber dac tabela nu
este de'a plin.
&)nd efectum o operaie de cutare a unei !nregistrri cu c"eia de cutare ( vom proceda
astfel*
- calculm adresa corespunztoare c"eii de cutare (*
( ) A ( 3 a
=
- comparm c"eia de la adresa a cu c"eia de cutare (=
- Dac c"eia de la adresa a este cea cutat atunci avem o cutare cu succes*
- Dac c"eia de la adresa a nu este cea cutat pornim mecanismul de probare liniar +S.%,.
Dac an a'uns la locaia de adres a N / atunci cutare nu este cu succes !nregistrarea
cutat nu e%ist !n tabel. 8ltfel cutarea este cu succes.
8ceast te"nic de rezolvare a coliziunilor se numete probare liniar .
Operaia de inserare este prezentat cu a'utorul unui e%emplu. S presupunem c avem
urmtoarele o tabel de dimensiune // i c)teva !nregistrri cu urmtoarele c"ei de cutare*
:#:8 SIO#&8: 8:8 8D8 F9:&I#; f f<8:D i 58<8C;I<9
8plic)nd o funcie "as" 3" s presupunem ca avem urmtoarea situaie*
C'eia de
cutare
(dresa din tabela
'as'
:#:8 3 +:#:8, @ /
SIO#&8: 3 +SIO#&8:, @ Q
8:8 3 +8:8, @ T
8D8 3 +8D8, @ T
________________________________________________________________________________
QS7
Structuri de date i algoritmi
_______________________________________________________________________________
F9:&I#; 3 +F9:&I#;, @ 0
f 3 +f, @ 0
f<8:D 3 +f<8:D, @ 0
58<8C;I<9 3 +58<8C;I<9, @ 0
Dup operaia de inserare aplic)nd mecanismul probrii liniare vom avea urmtoarea tabel*
+i#ura 9./: Con4inutul ta.elei hash du3 a3licarea o3era4iilor de inserare ?i a cutrii
unei noi 3o1i4ii li.ere 3rin $ecanis$ul de 3ro.are liniar.
5rimele trei !nregistrri av)nd c"eile de cutare :#:8 SIO#&8: 8:8 sunt inserate
printr-o singur probare !n primele trei poziii libere +;mpt\, ale tabelei.
3nregistrarea cu c"eia de cutare 8D8 trebuie plasat !n poziia R a tabelei cci poziia T este
ocupat i astfel apare o coliziune. ;ste nevoie de dou probri.
3nregistrarea cu c"eia de cutare F9:&I#; este inserat !n poziia 0 de la prima operaie de
probare cci poziia 0 din tabel era liber +;mpt\,.
3nregistrrile cu c"eile de cutare f si f<8:D sunt !n coliziune cu !nregistrarea cu c"eia
de cutare F9:&I#; respectiv f. 5entru a insera !nregistrarea cu c"eia de cutare f aplicm
mecanismul probrii liniare i obinem poziia liber /7 din tabel !n urma a Q operaii de probare.
5entru a insera !nregistrarea cu c"eia de cutare f<8:D aplicm mecanismul probrii liniare i
obinem poziia liber // din tabel !n urma a T operaii de probare.
3n final !nregistrarea cu c"eia de cutare 58<8C;I;< va fi plasat prin mecanismul
probrii liniare !n poziia S a tabelei necesit)nd 1 operaii de probare fiind !n coliziune cu
!nregistrrile inserate anterior fiind probate poziiile ocupate 0 /7 // / Q T R i poziia liber S.
________________________________________________________________________________
QS/
Structuri de date i algoritmi
_______________________________________________________________________________
Specificarea problemei de inserare-cutare av)nd ca date de intrare tabela de "as" tab
dimensiunea ma%im a tabelei % c"eia de inserare-cutare c"eia #:S @ / pentru operaia de
inserare i #:S @ 7 pentru operaia de cutare este urmtoarea*
D8I; tab m c"eia #:S=
<;g9MI8I; tab=
Descrierea algoritmului de inserare !n 5seudocod este*
8MUO<#IC9M #:S;<8<;_&K9I8<;_5robare_liniar ;SI;*
&#I;XI; c"eia #:S=
a *@ d +c"eia,=
5;:I<9 i*@a=+m?a-/, COD C8D ;D;&9IK Ase genereaz adresele a a?/..mB
A/Q_ a-/ N probare liniar B
D8&K tab -i2 @ c"eia 8I9:&#
D8&K #:S @ 7 8I9:&#
Lreturneaz adresa a A&utare cu succesB
8MIF;M
I#5K<;XI; +Y;<O8<; #:S;<8<; N c"eie dublc a,=
;D#I=
SFD8&K
SFD8&K
D8&K +tab -i2 @ ;mpt\, sau +tab -i2 @ D;M;I;D, 8I9:&#
D8&K #:S @ / 8I9:&#
Linserm noua !nregistrare la adresa a din tabel
8MIF;M
D8&K +tab -i2 @ ;mpt\, 8I9:&#
I#5K<;XI; +Y;<O8<; &K9I8<;N inf. nu e%istc,=
SFD8&K
SFD8&K
SFD8&K
SF5;:I<9
D8&K #:S @ 7 8I9:&#
I#5K<;XI; +Y;<O8<; &K9I8<;N inf. nu e%istc,=
8MIF;M
I#5K<;XI; +Y;<O8<; #:S;<8<;N tabela plin,=
SF8MUO<#IC
8lgoritmul de cutare implementat !n limba'ul 5ascal ca o funcie ce returneaz adresa
poziiei cutate din tabela "as" !n cazul unei cutri cu succes este*
+unction searc"+ Ge\ * t\peGe\= var r * dataarra\ , * inte#er=
________________________________________________________________________________
QSQ
Structuri de date i algoritmi
_______________________________________________________________________________
2ar i last * inte#er=
.e#in
i *@ "as"function+ Ge\ , =
last *@ +i?n-/, $od m=
-hile +iJElast, and +not empt\+r-i2,, and +r-i2.GJEGe\, do
i *@ +i?/, $od m=
i, r-i2.G@Ge\ then searc" *@ i Aaaa !nregistrarea a fost gsit aaaB
else searc" *@ -/= Aaaa !nregistrarea nu a fost gsit aaaB
end6
Operaia de tergere a unei !nregistrri din tabela "as" este simpl. $om cuta !nregistrarea
de ters din tabela "as". Dac !nregistrarea e%ist vom avea gri' s marcm c)mpul corespunztor
c"eii de cutare cu marca'ul D;M;I;D. 8cest marca' este necesar pentru a optimiza operaiile de
cutare care se opresc !n cazul unei cutri cu insucces dac avem valoarea marca'ului D;M;I;D
i pentru a evita inserarea unor !nregistrri cu c"eie dubl. De e%emplu !n tabela +S.%, dac tergem
!nregistrarea cu c"eia de cutare F9:&I#; i nu marcm c)mpul c"eie cu marca'ul D;M;I;D
atunci dac vrem s !nserm o nou !nregistrare cu c"eia de cutare 'RAND poziia 0 din tabela
"as" va fi considerat liber i !nregistrarea duplicat va fi inserat.
Specificarea problemei de tergere av)nd ca date de intrare tabela de "as" tab dimensiunea
ma%im a tabelei % c"eia de tergere c"eia este urmtoarea*
D8I; tab m c"eia=
<;g9MI8I; tab=
Descrierea algoritmului de inserare !n 5seudocod este*
8MUO<#IC9M XI;<U;<;_5robare_liniar ;SI;*
&#I;XI; c"eia=
adresa *@ #:S;<8<;_&K9I8<;+tab C8D c"eia 7,=
D8&K adresa J@ 7 8I9:&#
I#5K<;XI; +Y;<O8<; &K9I8<;N inf. nu e%istc,=
8MIF;M
Lmarc"eaz locaia de ters cu marca'ul D;M;I;D
3n lucrarea -.nu /06]2 gsim un model probabilistic pentru a analiza te"nicile de rezoluie
a coliziune i calculare pentru determinarea performanelor algoritmului de cutare !n cazul
mecanismului de probare liniar. Codelul presupune ca fiecare c"eie este ec"iprobabil pentru
cutare. Dac notm cu % capacitatea ma%im a tabelei "as" atunci probabilitatea ca o !nregistrare
s fie cutat este
%
p
i
/
.
Dac dimensiunea spaiului c"eilor de cutare este n atunci vom avea un numr de %
n
________________________________________________________________________________
QST
Structuri de date i algoritmi
_______________________________________________________________________________
funcii posibile de la ! la A.
$om nota cu
%
n
factorul de ncrcare a tabelei 'as' . Iimpul mediu de cutare va fi
dependent de factorul de !ncrcare. 3n -.nu /06]2 gsim urmtoarea formul*
( )
'
,
_
,
_
/
/
/
Q
/
/
/
/
Q
/
Q
+S.%,
5entru o distribuie uniform a mulimii c"ei de cutare 3ro.area liniar d rezultate
rezonabile dac o comparm cu algoritmii de cutare sec2en4ial sau de cutare .inar
presupun)nd c tabela nu este plin. Factorul de !ncrcare trebuie s fie mai mic dec)t 71. 5entru
o valoare mai mare a factorului de !ncrcare 3ro.area liniara degenereaz rapid.
.. Pro.area aleatoare
Cetoda probrii liniare are o serie de dezavanta'e. 9n prim dezavanta' este datorat faptului
ca trebuie s gestionm un indicator suplimentar de tergere numit D;M;I;D 3n acest fel o
!nregistrare oarecare din tabel are trei stri i anume liber +;mpt\, ocupat sau tears
+D;M;I;D,. 3n mod normal ar trebui ca o !nregistrare din tabel s aib doar una din cele dou
stri posibile i anume liber sau ocupat.
9n alt dezavanta' al metodei de probare liniar este problema gruprii primare +primar\
clustering,. 8cest fenomen apare datorit cutrii secveniale a unei poziii libere pentru
!nregistrrile aflate !n coliziune. De aceea !nregistrrile aflate !n coliziune tind s se grupeze !ntr-o
anumit poziie a tabelei !n loc ca ele s se distribuie c)t mai uniform fenomen care duce la
scderea performanelor algoritmului de cutare.
;fectele negative fenomenului ale gruprii primare pot fi reduse prin selectarea unei alte
metode de probare care s foloseasc un mecanism aleatoriu de cutare a unei poziii libere !n
tabela "as" !n loc de mecanismul de cutare secvenial. O astfel de metod de probare se numete
probare aleatoare +random probing,
Secvena de adrese de cutare pentru o poziie liber !n tabela de "as" va fi generat aleator
dar va trebui s acopere toat mulimea de adrese cuprinse !ntre / i % e%act o singur dat. O
tabel de "as" va fi plin !n momentul !n care inser)nd o nou !nregistrare apel)nd ca urmare a
coliziunii la mecanismul de probare aleatoare se genereaz aleatoriu o adres duplicat -Ire /01R2.
9n e%emplu de mecanism de generare aleatoare a adreselor pentru o tabel "as" este *
a *@ + a ? c , %od % +S.%,
unde a este adresa iniial generat de funcia "as" c este o constant !ntreag nenul aleas astfel
________________________________________________________________________________
QSR
Structuri de date i algoritmi
_______________________________________________________________________________
!nc)t s fie relativ prim cu %.
De e%emplu dac considerm c % @ // i c @ S atunci presupun)nd c iniial a @ Q atunci
secvena de adrese generat pentru a cuta o poziie liber este 6 / ] 7 S /7 R 0 T 1 i Q.
Specificarea problemei de inserare av)nd ca date de intrare tabela "as" numit tab
dimensiunea ma%im a tabelei % c"eia de inserare c"eia este urmtoarea*
D8I; tab m c"eia=
<;g9MI8I; tab=
Descrierea algoritmului de inserare !n 5seudocod este*
8MUO<#IC9M #:S;<8<; _5robare_aleatoare ;SI;*
&#I;XI; c"eia=
a *@ d +c"eia,=
D8&K +tab -i2 @ ;mpt\, sau +tab -i2 @ D;M;I;D, 8I9:&#
Linserm noua !nregistrare la adresa a din tabel=
&HII#C5 Lnu s-a gsit o poziie liber !n tabela "as" ;D;&9IK
Lcalculeaz noua adres a utiliz)nd probarea aleatoare=
D8&K Ls-a generat o adres duplicat 8I9:&#
I#5K<;XI; +Y;<O8<; #:S;<8<;N tabela plin,=
;D#I=
8MIF;M
D8&K +tab -i2 @ ;mpt\, sau +tab -i2 @ D;M;I;D, 8I9:&#
Linserm noua !nregistrare la adresa a din tabel=
SFD8&K
SFD8&K
SF&KI
SF8MUO<#IC
5roblemele legate de tergere devin i mai severe !n cazul probrii aleatoare dec)t !n cazul
probrii liniare. Dei probarea aleatoare rezolv problema gruprii primare din pcate nu elimin
problema gruprii secundare +secondar\ clustering,. Uruparea secundar apare c)nd se genereaz
aceeai secven de adrese libere pentru dou c"ei de cutare aflate !n coliziune.
O soluie pentru problema gruprii secundare este de a folosii o funcie "as" secundar
care s genereze o valoare aleatoare pentru constanta c din formula +S.%, independent de prima
funcie "as". 5rin aplicarea acestei metode se anuleaz efectul negativ al gruprii.
Fie
A ! 3 *
/
prima funcie de "as" i
! ( (
Q /
'
/
/
/ ln
/
+S.%,
Cetoda probrii aleatoare cu "as" dublu este o metod mai performant dec)t probarea
liniar !n special c)nd tabela "as" este plin. De e%emplu c)nd o tabel "as" are un grad de
________________________________________________________________________________
QS]
Structuri de date i algoritmi
_______________________________________________________________________________
umplere de 0S l numrul mediu de operaii pentru metoda probrii liniare este /7S pe c)nd la
metoda probrii aleatoare cu dublu "as" este TQV
V.7.8.7. Tehnici de re1olu4iune a coli1iunilor 3rin adresare nln4uit
O alta metod de a rezolva problema coliziunilor este acea de a grupa c"eile de cutare
aflate !n coliziune !n clase de ec"ivalen. <eprezentantul unei clase de ec"ivalen va fi capul unei
liste simplu !nlnuite cu a'utorul creia se vor gestiona dinamic toate c"eile de cutare aflate !n
aceeai clas de coliziune adic toate c"eile de cutare care genereaz aceeai adres*
{ } ( ) ( )
i i l j i <
( ( 3 ( 3 dac$ ( ( ( ( ( ( ! A ! 3
Q Q /
m
m
m
m
*
$om avea in acest fel o tabel "as" fi% de dimensiune % mai mare sau egal cu numrul
claselor de ec"ivalen. 3n aceast tabel "as" vom stoca doar c"eia de cutare reprezentant al clasei
de ec"ivalen i adresa de !nceput a listei simplu !nlnuite care stoc"eaz restul c"eilor de cutare
aflate !n coliziune cu c"eia reprezentant al clasei de ec"ivalen.
8ceast te"nic de rezoluiune a coliziunilor se numete adresare nlnuit.
Exemplu" 3n figura de mai 'os avem un e%emplu de reprezentare a metodei adresrii !nlnuite
pentru % @ // si n @ 0. 5resupunem c c"eile sunt !nserate !n ordinea urmtoare *
:OD; SIO<8U; 8: 8DD F9:&I#O: f f<8:D i 58<8C;I;<
#igura -.x." Bodelul de re1ol2are a coli1iunilor 3rin adresare nln4uit.
________________________________________________________________________________
QS6
Structuri de date i algoritmi
_______________________________________________________________________________
S analizm algoritmul de inserare. Dac inserarm !n structura noastr de date !nregistrri
cu o c"eie de cutare ( facem urmtorii pai*
8plicm funcia "as" i obinem adresa a pentru !nregistrarea de inserat=
&utm !n tabela de "as" la adresa a e%istena unei alte !nregistrri=
Dac poziia a din tabela "as" este liber !nregistrarea de inserat nu este !n coliziune i
crem primul nod al listei simplu !nlnuite corespunztoare clasei de ec"ivalen am
.
Dac poziia a din tabela "as" este ocupat !nregistrarea de inserat este !n coliziune i
inserm la sf)ritul listei simplu !nlnuite noul element.
Specificarea problemei de inserare av)nd ca date de intrare tabela "as" numit tab
dimensiunea ma%im a tabelei % c"eia de inserare c"eia este urmtoarea*
D8I; tab m c"eia=
<;g9MI8I; tab=
Descrierea algoritmului de inserare !n 5seudocod este*
8MUO<#IC9M #:S;<8<; _adresare_!nlnuit ;SI;*
&#I;XI; c"eia=
a *@ d +c"eia,=
D8&K +tab -i2 @ ;mpt\, 8I9:&#
Linserm noua !nregistrare la adresa a din tabel=
Linserare la sf)rit lista simplu !nlnuit=
8MIF;M
Linserare la sf)rit lista simplu !nlnuit=
SFD8&K
SF8MUO<#IC
Specificarea problemei de cutare av)nd ca date de intrare tabela "as" numit tab c"eia de
cutare c"eia_caut este urmtoarea*
D8I; tab c"eia_caut=
<;g9MI8I; adresa=
8MUO<#IC9M &K9I8<; _adresare_!nlnuit ;SI;*
&#I;XI; c"eia_caut=
a *@ d +c"eia_caut,=
D8&K +tab -i2 @ ;mpt\, 8I9:&#
I#5K<;XI; +Y;<O8<; &K9I8<;N inf. nu e%istc,=
________________________________________________________________________________
QS1
Structuri de date i algoritmi
_______________________________________________________________________________
Lreturneaz :#M=
8MIF;M
adr *@ caut_list +M#SI c"eia_caut,= Ase caut !n lista simplu !nlnuit B
D8&K adr @ :#M 8I9:&#
I#5K<;XI; +Y;<O8<; &K9I8<;N inf. nu e%istc,=
Lreturneaz :#M=
8MIF;M
Lreturneaz adr=
SFD8&K
SFD8&K
SF8MUO<#IC
5erformana algoritmului de cutare bazat pe adresare !nlnuit este conform -Ire /01R2*
'
+
+
Q
/
+S.%,
V.7.9. Pro.le$e 3ro3use 3entru ,unc4ii hash ?i tehnici de re1olu4iune
a coli1iunilor
/. Descriei modul de implementare a unei funcii "as" folosind un generator de numere aleatoare.
8re sens implementarea unui generator de numere aleatoare folosind o funcie "as" ^
Q. #lustrai coninutul tabelei "as" care rezult c)nd inserm c"eile* U N E A E B P " U D E P N T
R E ' A R E sunt inserate !n aceast ordine !ntr-o tabel iniial goal de dimensiune /T folosind
te"nica probrii liniar. + Folosii ca funcie "as" 3+(, @ ( mod /T pentru litera a-( a alfabetului,.
T. #lustrai coninutul tabelei "as" care rezult c)nd inserm c"eile* U N E A E B P " U D E P N T
R E ' A R E sunt !nserate !n aceast ordine !ntr-o tabela iniial goal de dimensiune /T folosind
probarea aleatoare i "as" dublu + Folosii ca funcie "as" primar funcia 3 din e%emplul Q iar ca
funcie "as" secundar funcia 3
2
+(, @ /? + ( mod //, , .
R. &)te probri sunt necesare c)nd este folosit te"nica probrii aleatoare pentru a insera n c"ei de
________________________________________________________________________________
QS0
Structuri de date i algoritmi
_______________________________________________________________________________
cutare egale^
S. &are metoda de probare este mai eficient !n situaia !n care se insereaz mai multe c"ei de
cutare egale ^
]. S presupunem c numrul de !nregistrri care trebuie inserate !ntr-o tabel "as" este cunoscut !n
prealabil. 3n ce condiii metoda adresrii !nlnuite este preferabil fat de metoda adresrii
desc"ise^
6. Folosind metoda divizrii calculai adresa generat de funcia "as" pentru urmtoarele seturi de
c"ei de cutare* PAA ARC RATE i NUBR. !e 2a ,olosi reprezentarea A!CII a c"eilor de
cutare i m @ ///.
1. <ezolvai problema 1 folosind o reprezentare E'CDIC a c"eilor de cutare.
0. 8vem urmtoarele c"ei de cutare numerice* ]] R6 16 07 /Q] /R7 /RS /ST /66 Q1S T0T
T0S R6] S]] ]Q7 6TS. Stocai !nregistrrile !ntr-o tabel "as" cu Q7 de poziii folosind metoda
divizrii pentru funcia "as" i metoda probrii liniare pentru rezolvarea coliziunilor.
/7. Folosind aceleai c"ei de cutare ca la e%erciiul 0 stocai !nregistrrile !ntr-o tabel "as" cu Q7
de poziii folosind metoda !mpririi pentru funcia "as" i metoda probrii aleatoare pentru
rezolvarea coliziunilor.
VI.TEHNICI DE !&RTARE
VI.1. I!T&RIC
&utarea originii metodelor actuale de sortare ne conduce !n secolul al D#D-lea c)nd au fost
inventate primele maini de sortat. 3n Statele 9nite cu ocazia recensm)ntului din /117 derman
dollerit" anga'at al firoului de <ecensm)nt a inventat o main electric de tabelat pentru a
rspunde necesitilor de prelucrare statistic. 9n om putea prelucra R0 de cartele pe minut. 3n /07/
a inventat o main mai modern care lucra automat. Caina de sortat al lui dollerit" este baza
metodelor de sortare dup ranguri folosite !n prezent pe calculatoare.
#deea interclasrii provine de la o alt main cu cartele numit 4collator4 din /0T1 care
putea interclasa dou pac"ete de cartele !ntr-unul singur !ntr-o singur trecere.
5rimul program scris pentru un calculator cu program memorat a fost o rutin de sortare. no"n von
:eumann a pregtit programe de sortare intern !n /0RS pentru a testa valabilitatea unor coduri de
instruciuni propuse de el pentru calculatorul ;:#8&. non" Cauc"l\ a confereniat despre 4Sortare
________________________________________________________________________________
Q]7
Structuri de date i algoritmi
_______________________________________________________________________________
si Fuziune4 la sesiunea special asupra calculatoarelor inut la Coore Sc"ool !n /0R] iar notele
acestei conferine constituie prima discuie public a sortrii pe calculator. 5rima metod de sortare
folosea numrarea comparaiilor= apoi urmau o serie de treceri de interclasare ec"ilibrat cu dou
ci.
3n /0SQ Daniel Uoldenberg a codificat S metode diferite* interclasarea direct cu dou ci
sortarea cu baz Q selecia direct metoda bulelor. SeWard a introdus idea de numrare a
distribuiilor si de selecie cu !nlocuire.
8stfel istoria sortrii este str)ns legat de multe premiere din domeniul calculatoarelor*
primele maini de prelucrare a datelor primele programe memorate primul softWare primele
metode de utilizare a zonelor tampon de intrare-ieire primele lucrri asupra analizei algoritmilor si
asupra comple%itii calculelor.
3n /0S0 Donald M. S"ell a propus sortarea prin micorarea incrementului= sortarea cu
interclasare si intersc"imb a fost descoperit de .. ;. fatc"er !n /0]R= &. 8. <. doare a descoperit
metoda sortrii rapide= !n /0]R a fost descoperit sortarea de ansambluri de ctre n. O. n. Oilliams.
5e parcursul anilor s-au !mbuntit aceste metode de sortare si s-au descoperit si metode noi
metode "ibride.
VI.0. Al#orit$i de sortare
3n acest capitol vom prezinta pe scurt cele mai importante informaii despre caracteristicile
principalelor metode de sortare i a algoritmilor corespunztori !ncep)nd de la cele mai simple
metode de sortaare p)n la cele comple%e metode de sortare folosind diferite structuri de date*
matrice liste !nlnuite stive arbori _. etc.
;%ist urmtoarea clasificare a metodelor de sortare -MeW /00/2*
Cetode de sortare simple * selecie inserare bule ,'ell=
Cetode de sortare comple%e * rapid interclasare ansambluri! <adi%.
Cetodele simple de sortare au de obicei comple%itatea O+&
2
, adic pot sorta & elemente
!ntr-un timp proporional cu &
2
si sunt eficiente pentru tabele mici !n care numrul de elemente este
mai mic dec)t S77. Iotui pentru multe aplicaii de sortare este mai bine s folosim metode simple
dec)t comple%e. De e%emplu dac tabela este de'a sortat !n cazul metodei de sortare rapid
pivotul ales +elementul !n 'urul creia se face sortarea, este primul element metoda de sortare prin
selecie este mai rapid. Cetodele simple sunt !ntotdeauna mai potrivite pentru un numr de
elemente mai mic dec)t S7. Iabelele parial sau total sortate sau cele care conin un numr mare de
c"ei identice sunt relativ uor de sortat cu a'utorul algoritmilor simplii. :ecesit relativ puin timp
de programare si !ntreinere.
Cetodele comple%e pot sorta & elemente !ntr-un timp proporional cu &log&. :ici un
algoritm nu poate folosi mai puin de &log& comparaii !ntre c"ei. 8ceste metode comple%e sunt
eficiente mai ales pentru sortarea unui numr mare de elemente. :ecesit mai mult timp pentru
programare dar sunt mai eficiente. 9nul dintre cei mai populari algoritmi de sortare cu scop general
________________________________________________________________________________
Q]/
Structuri de date i algoritmi
_______________________________________________________________________________
este sortare rapid +euicGsort, care are o comple%itate de O+&log&, e%primat pentru mediu
necesar operaiei de sortare. 8cest algoritm de sortare are performane bune !n general c"iar dac !n
caz nefavorabil comple%itatea devine O+&
2
,.
#deea 4divide et impera4 a fost aplicat problemelor de sortare !n mai multe feluri rezult)nd
urmtorii algoritmii de sortare* rapid interclasare ansambluri! <adi% care sunt mult mai eficiente
dec)t cele simple. Sortarea prin ansambluri si sortarea prin interclasare au comple%itatea egal cu
O+&log&, dei !n cazul general comportarea lor nu este c"iar aa de bun ca la algoritmul de
sortare rapid. ;%ist metode care folosesc proprietile digitale ale c"eilor ca s obin o
comple%itate proporional cu & ca de e%emplu sortarea <adi%.
Ma baza studiului comple%itii unui algoritm st detectarea !n descrierea algoritmului a
operaiei sau a operaiilor de baz adic acea operaie aflate !n cel mai interior corp de ciclu
repetitiv si a crei analiz permite estimarea !n avans !nainte de lansarea !n e%ecuie a algoritmului
ce descrie metoda de sortare respectiv.
3n ma'oritatea cazurilor e%ist o legtur foarte str)ns !ntre operaia de baz +cea mai repetat
operaie, si operaia care este dedus !n etapa de analiz a problemei ca fiind operaia inevitabil
pentru rezolvarea problemei.
De e%emplu !n cazul problemei sortrii unui sir de & c"ei prin comparaii este limpede c
operaia de comparare a mrimii c"eilor este operaia inevitabil si de asemenea ea va fi i
operaia de baz a crei contorizare va permite estimarea !nainte de e%ecuia programului ce
implementeaz algoritmul a duratei de e%ecuie a programului ce implementeaz algoritmul de
sortare respectiv.
3n aceast situaie toi algoritmii diferii care soluioneaz aceeasi problem si care se
bazeaz pe aceeai operaie de baz +inevitabil, formeaz clasa algoritmilor de soluionare a
problemei. De obicei numele clasei va fi dat c"iar de numele acelei operaii de baz ce este
coninut de fiecare algoritm al clasei !n mod inevitabil.
De e%emplu !n cazul problemei sortrii unui sir de & c"ei prin comparaii algoritmii diferii
ce soluioneaz aceast problema sunt grupai !n clasa algoritmilor de sortare prin comparaii spre
deosebire de clasa algoritmilor de sortare prin distribuire ce soluioneaz aceeai problem
baz)ndu-se !ns pe alt operaie de baz* distribuirea c"eilor de sortat.
8stfel algoritmi de sortare prin comparare descrii in aceasta lucrare sunt* algoritmul de
sortare prin inserare algoritmul de sortare prin selecie algoritmul de sortare ,'ell algoritmul de
sortare combinat algoritmul de sortare simplu algoritmul de sortare rapid algoritmul de sortare
prin ansambluri algoritmul de sortare prin interclasare iar algoritm de sortare prin distribuire este
algoritmul de sortare <adi%.
&ompararea eficienei a doi algoritmi diferii ce soluioneaz aceeai problem se face prin
determinarea teoretic a numrului de repetiii a operaiei de baz !n fiecare algoritm si compararea
celor dou valori. 3n final rezultatul comparrii va permite estimarea comparativ a (timpului de
sortare a programelor ce implementeaz acei algoritmi i alegerea celui mai bun.
&ompararea eficientei a doi algoritmi din punct de vedere practic se face prin compararea
timpilor medii de e%ecuie a celor dou programe ce !i implementeaz. 8ceast metod pragmatic
are dezavanta'ul c necesit rularea programelor care !n anumite situaii poate dura un timp
surprinztor de mare.
________________________________________________________________________________
Q]Q
Structuri de date i algoritmi
_______________________________________________________________________________
8naliz)nd comple%itatea algoritmilor factorul cel mai important este timpul de e%ecuie
e%primat prin 4O-mare4. Irebuie s folosim mai multe criterii pentru evaluarea timpului de e%ecuie
al algoritmului de sortare cum ar fi numrul de pai ai algoritmului si numrul de comparaii dintre
c"ei necesare pentru a sorta & elemente. 8ceast msur este de folos c)nd compararea dintre
perec"ile de c"ei este costisitoare c)nd c"eile sunt iruri lungi de caractere sau c)nd mrimea
!nregistrrii este mare.
8l doilea factor important este cantitatea +volumul, de memorie suplimentar folosit de un
algoritm de sortare. Cetodele se !mpart !n trei tipuri* cei care sorteaz pe loc nu folosesc memorie
suplimentar cu e%cepia poate unei tabele sau stive mici= cei care au o reprezentare de list
!nlnuit deci folosesc & cuvinte de memorie !n plus pentru pointerii listei= cei care au nevoie de
memorie suplimentar pentru o copie a tabelei iniiale.
&aracteristica care este uneori important !n practic este stabilitatea. O metod de sortare
este stabil dac pstreaz ordinea relativ a c"eilor egale !n tabel. +Dac sortm un sir de nume
numele cu aceeai liter de !nceput sunt sortate !n ordine alfabetic,. Ca'oritatea metodelor simple
sunt stabile dar muli dintre algoritmii de sortare compleci nu au aceast proprietate.
8MUO<#IC9M
D; SO<I8<;
O<D#:;8 D; C8U:#I9D#:;
S58I#9
FOMOS#I
&az
Favorabil
&az
Ueneral
&az
:efavorabil
Sortare prin
selecie
O+&
2
, O+&
2
, O+&
2
, Sorteaz pe loc
Sortare cu bule O+&
2
, O+&
2
, O+&
2
, Sorteaz pe loc
Sortare cu bule
4flag4
!mbuntit
O+&, O+&
2
, O+&
2
, Sorteaz pe loc
Sortare prin
inserare
O+&,
ir sortat
O+&
2
, O+&
2
, Sorteaz pe loc
Sortare ,'ell o O+&
2
, o O+&
2
, O+&
2
, Sorteaz pe loc
________________________________________________________________________________
Q]T
Structuri de date i algoritmi
_______________________________________________________________________________
Sortare
combinat
O+&log &, O+&
2
, O+&
2
, Sorteaz pe loc
Sortare simpl O+&
2
, O+&
2
, O+&
2
, Sorteaz pe loc
Sortare rapid O+&log &, O+&log &, O+:Q,
depinde de ir
i de pivot
Mog& !nregistrri
suplimentare
Sortare prin
interclasare
O+&log &, O+&log &, O+&log &, & !nregistrri
suplimentare
Sortare prin
ansambluri
O+&log &, O+&log &, O+&log &, Sorteaz !n loc
Sortare <adi% O+=?&, O+=?&, Spaiu suplimentar
pentru legturi
=abela 1.1. Co$3ararea al#orit$ilor de sortare.
Cetodele de sortare particulare nu sunt !n totdeauna superioare celorlalte metode pentru
orice set de c"ei. 5roprietile unui set de c"ei 'oac un rol important !n alegerea algoritmului de
sortare potrivit. 5roprieti ca numrul de !nregistrri mrimea !nregistrrii distribuia si ordinea
c"eilor dicteaz des care metoda de folosit. De e%emplu sortarea cu bule poate fi folosit dac
numrul elementelor din tabel este mic. Dac & este mare si c"eile de comparat sunt mici este mai
performant algoritmul de sortare <adi%. Dac & este mare si c"eile de comparat sunt lungi se poate
folosi algoritmul de sortare rapid algoritmul de sortare prin interclasare sau algoritmul de sortare
prin ansambluri. Dac tabela iniial este aproape sortat algoritmul de sortare rapid nu are
performane bune algoritmul de sortare prin inserare fiind alegerea cea mai bun.
VI.0.1. Al#orit$ul de sortare 3rin $etoda .ulelor Lbubble sortH
VI..0.1.1. Descrierea #eneral a $etodei
S ne imaginm o tabel !n poziie vertical care conine elemente +!nregistrri, nesortate.
3nregistrrile cu c"ei mici fiind mai (uoare asemenea bulelor de aer urc spre v)rful tabelei.
Sortarea bulelor se bazeaz pe cutarea celui mai mare +mic, element. &omparm elementele
tabelei dac dou elemente adiacente nu sunt !n ordine cresctoare le intersc"imbm. 8stfel
elementul cu c"eia cea mai mare va a'unge primul la locul potrivit iar elementul cu c"eia cea mai
mic urc tot timpul spre v)rf tabelei.
________________________________________________________________________________
Q]R
Structuri de date i algoritmi
_______________________________________________________________________________
VI.0.1.0. Descrierea al#orit$ului
Fie dat o tabel A cu & !nregistrri 8
i
fiecare !nregistrare av)nd c"eia de cutare !
i
. 5entru
sortarea tabelei este nevoie de &-/ pai.
5arcurgem tabela !n felul urmtor* comparm c"eia primului element !
1
cu c"eia celui de al
doilea element !
2
i dac nu sunt !n ordine cresctoare intersc"imbm primul element 8
1
cu cel de-
al doilea element 8
2
.
5rocesul se repet pentru !nregistrrile 8
2
8
>
_ 8
&
.. Dup prima parcurgere a tabelei
!nregistrarea cu cea mai mare c"eie va a'unge pe ultima poziie & a tabelei.
3n continuare vom lua !n considerare primele & N / !nregistrri. Dup aceea vom lua !n
considerare primele & -Q !nregistrri _ etc. Dup fiecare pas elementele cu c"ei mari vor a'unge
pe poziiile & - / & - Q _ Q !n final rezult)nd o tabel sortat !n ordine cresctoare.
Exemplul */.1" Sortarea tabelei 8 din Figura $#./ !n ordine cresctoare folosind algoritmul de
sortare prin metoda bulelor*
asul 1" relucrm primele 15 nregistrri ale tabelei.
- comparm ] cu R intersc"imbm=
- comparm ] cu S si intersc"imbm*
- comparm ] cu /7 nu intersc"imbm=
- comparm /7 cu T intersc"imbm=
- comparm /7 cu / intersc"imbm=
- comparm /7 cu 1 intersc"imbm=
- comparm /7 cu 0 intersc"imbm=
- comparm /7 cu 6 intersc"imbm=
- comparm /7 cu Q intersc"imbm=
3nregistrarea cu c"eia cea mai (grea /7 a a'uns la partea inferioar a tabelei.
asul 2" relucrm primele 4 nregistrri ale tabelei.
- comparm ] cu R intersc"imbm=
- comparm R cu S si nu intersc"imbm*
- comparm S cu ] nu intersc"imbm=
- comparm ] cu T intersc"imbm=
- comparm ] cu / intersc"imbm=
- comparm ] cu 1 nu intersc"imbm=
- comparm 1 cu 0 nu intersc"imbm=
- comparm 0 cu 6 intersc"imbm=
________________________________________________________________________________
Q]S
Structuri de date i algoritmi
_______________________________________________________________________________
- comparm 0 cu Q intersc"imbm=
3nregistrarea cu c"eia cea mai (grea 0 a a'uns la partea inferioar a tabelei.
___________________..
8lgoritmul de sortare prin metoda bulelor ordoneaz cele /7 !nregistrri ale tabelei 8 !n 1
pai.
#igura */.1. !ortarea unei ta.ele A cu 1> ele$ente 3rin al#orit$ul de sortare .a1at 3e metoda
bulelor.
VI.0.1.7. I$3le$entarea al#orit$ului
Specificarea problemei de sortare av)nd ca date de intrare tabela 8 dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_fubble_sort ;SI;*
&#I;XI; 8 :=
G *@ :=
<;5;IK
________________________________________________________________________________
Q]]
Structuri de date i algoritmi
_______________________________________________________________________________
OG *@ I<9;=
5;:I<9 i *@ /=G ;D;&9IK
D8&K 8-i2 E 8-i?/2 8I9:&#
temp *@ 8-i2=
8-i2 *@ 8-i?/2=
8-i?/2 *@ temp=
OG *@ F8MS;=
SFD8&K
SF5;:I<9
G *@ G -/=
5H:K&H:D OG SF<;5
SF8MUO<#IC
#mplementarea algoritmului de sortare prin metoda bulelor !n limba'ul 5ascal este*
Procedure bubble=
'e#in
. *@ n=
Re3eat
OG *@ true=
For i *@ / to G do
I, 8-i2 E8-i?/2 then
'e#in
temp *@ 8-i2=
8-i2 *@ 8-i?/2=
8-i?/2 *@ temp=
OG *@ ,alse=
End=
G *@G-/=
Until OG=
End=
VI.0.1.8. Co$3le/itatea al#orit$ului
8lgoritmul de sortare prin metoda bulelor este o metod de sortare simpl eficient pentru
un numr mic de elemente +mai puin de /S, dar nu pentru tabele mari.
:u necesit mult memorie dar este de dou ori mai lent dec)t algoritmul de sortare prin
inserare !n aproape orice situaie. Iimpul de e%ecuie depinde de structura iniial a datelor de
intrare adic de ordinea iniial al elementelor -SGi /0062. Dac tabela de dimensiune & este de'a
sortat e nevoie de un singur pas adic de &-/ operaii de comparaie !n aceast situaie algoritmul
________________________________________________________________________________
Q]6
Structuri de date i algoritmi
_______________________________________________________________________________
fiind de ordinul $+&,.
3n cazul cel mai nefavorabil sunt necesare & p +& - /, P Q operaii de comparaie i de & p +&
N /, P Q operaii de intersc"imbare. &omple%itatea algoritmului de sortare prin metoda bulelor este
( )
Q
n O !n aceast situaie. ;ste o metod stabil.
5erformana algoritmul de sortare se poate !mbunti prin introducerea unei variabile de tip
boolean care ne arat c)nd tabela este sortat !nainte de terminarea numrului ma%im de iteraii
-Iom /0062.
VI.0.0. Al#orit$ul de sortare 3rin selec4ie
VI.0.0.1. Descrierea #eneral a $etodei
Selecia direct este una dintre cele mai simple metode de sortare ce are performane foarte
bune pentru tabele mici fiecare element +!nregistrare, al tabelei fiind mutat !n procesul de sortare
cel mult o dat. ;ste o metod de sortare liniar pentru !nregistrri lungi si c"ei de cutare mici.
#mplementarea algoritmului este simpl dar necesit spaiu de memorie destul de mare pentru a
stoca dou tabele acest lucru fiind un nea'uns al algoritmului de sortare.
VI.0.0.0. Descrierea al#orit$ului
Se caut cel mai mic element din tabela de sortat A si se sc"imb cu elementul de pe
prima poziie. Dup aceea se caut al doilea element minim si se sc"imb cu elementul de
pe poziia a doua .a.m.d. 3n general !n pasul i se selecteaz elementul cu cea mai mic
c"eie dintre !nregistrrile A?i@" A?iA1@"" A?&@ si se sc"imb cu A?i@. &a rezultat dup i
pai al i2lea element minim va ocupa poziiile A?i@" A?iA1@"" A?&@ !n ordine sortat. Se
continu p)n c)nd toate elementele vor fi sortate !n ordine cresctoare.
Exemplul */.2" Sortarea tabelei 8 din Figura $#.Q folosind algoritmul de sortare prin selecie !n
ordine cresctoare*
________________________________________________________________________________
Q]1
Structuri de date i algoritmi
_______________________________________________________________________________
#igura */.2. !ortarea unei ta.ele A cu 1> ele$ente 3rin al#orit$ul de sortare prin selecie.
asul 1" relucrm nregistrrile 1+15 ale tabelei.
- cutm !nregistrarea cu c"eia de cutare minim. 8cesta este !nregistrarea cu c"eia / de pe poziia
] a tabelei=
- intersc"imbm !nregistrarea de pe poziia / cu !nregistrarea minim de pe poziia ]=
3nregistrarea cu c"eia cea mai (uoar / a a'uns !n poziia / a tabelei.
asul 2" relucrm nregistrrile 2+15 ale tabelei.
- cutm !nregistrarea cu c"eia de cutare minim. 8cesta este !nregistrarea cu c"eia Q de pe poziia
/7 a tabelei=
- intersc"imbm !nregistrarea de pe poziia Q cu !nregistrarea minim de pe poziia /7=
3nregistrarea cu c"eia cea mai (uoar Q a a'uns !n poziia Q a tabelei.
asul %" relucrm nregistrrile %+15 ale tabelei.
- cutm !nregistrarea cu c"eia de cutare minim. 8cesta este !nregistrarea cu c"eia T de pe poziia
S a tabelei=
- intersc"imbm !nregistrarea de pe poziia T cu !nregistrarea minim de pe poziia S=
3nregistrarea cu c"eia cea mai (uoar T a a'uns !n poziia T a tabelei.
__________________________________..
8lgoritmul de sortare prin metoda seleciei ordoneaz cele /7 !nregistrri ale tabelei 8 !n 1
pai.
VI.0.0.7. I$3le$entarea al#orit$ului
________________________________________________________________________________
Q]0
Structuri de date i algoritmi
_______________________________________________________________________________
Specificarea problemei de sortare av)nd ca date de intrare tabela 8 dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_#nserie ;SI;*
&#I;XI; 8 :=
5;:I<9 i *@ /=:-/ ;D;&9IK
min *@ i=
5;:I<9 ' *@ i ?/=: ;D;&9IK
D8&K 8-'2 J 8-min2 8I9:&#
Cin *@ '=
SFD8&K
SF5;:I<9
temp *@ 8-i2=
8-i2 *@ 8-min2=
8-min2 *@ temp=
SF5;:I<9
SF8MUO<#IC
#mplementarea algoritmului de sortare prin metoda seleciei !n limba'ul 5ascal este*
Procedure selection +2ar 8*arra\t\pe= n*inte#er,=
Var i min*integer= Ainde% B
'e#in
+or i *@ / to n-/ do
'e#in
min *@ i=
+or ' *@ i?/ to n do
#f 8-'2J8-min2 t"en min *@ '=
temp *@ 8-i2=
8-i2 *@ 8-min2=
8-min2 *@ temp=
________________________________________________________________________________
Q67
Structuri de date i algoritmi
_______________________________________________________________________________
End6
End6
VI.0.0.8. Co$3le/itatea al#orit$ului
8lgoritmul de sortare prin metoda seleciei este o metod de sortare eficient pentru un
numr mic de elemente de sortat dar nu pentru tabele mari.
Operaiile cele mai costisitoare sunt cele de cutare a !nregistrrii cu c"eia minim din
partea rmas nesortat !n tabel. Dup fiecare pas de cutare este necesar o inters"imbare deci
numrul intersc"imbrilor pentru & elemente este & 2 1. :umrul total de operaii de comparaie
pentru a gsi c"eia minim este -.nu /06]2*
( ) ( )
( ) ( )
+
/
/
Q
/
Q
/
/
n
i
n n n n
n n i n
8tunci performana algoritmului de sortare prin metoda seleciei este
( )
Q
n O
. 8celeai
performane se obin i !n medie i !n cazul cel mai nefavorabil c"iar i atunci c)nd tabela este de'a
sortat. Dac avem !nregistrri mari si c"ei mici algoritmul de sortare prin metoda seleciei va fi
alegerea cea mai bun.
VI.0.7. Al#orit$ul de sortare 3rin inserare
VI.0.7.1. Descrierea #eneral a $etodei
;ste un algoritm aproape la fel de simplu ca algoritmul de sortare prin selecie dar poate
mai fle%ibil.
Dac considerm c elementele A?1@...A?i21@ sunt de'a sortate atunci va trebui s inserm
elementul A?i@ !n locul potrivit pentru a menine ordinea de sortare aleas.
VI.0.7.0. Descrierea al#orit$ului
Fiind dat o tabel A cu & elemente nesortate parcurgem tabela si inserm fiecare element
!n locul potrivit pentru a menine ordinea de sortare aleas !ntre celelalte elemente considerate de'a
sortate.
5entru fiecare i @ Q.. & dac elementele A-/2 A-Q2_ A-i2 sunt sortate vom insera
elementul A-i2 !ntre lista elementelor sortate* A-/2 A-Q2_ A-i2.
;lementele aflate !n st)nga inde%ului i sunt sortate dar nu sunt !nc !n poziia lor final.
Iabela este complet sortat c)nd inde%ul a'unge la captul drept al tabelei.
5utem uura procesul inserrii +e%* c)nd cel mai mic element e greu de definit, prin introducerea
________________________________________________________________________________
Q6/
Structuri de date i algoritmi
_______________________________________________________________________________
unul element de 4limit4 A-72 c"eia care va avea o valoare mai mic dec)t orice valoare posibil a
unei c"ei din tabel. $om considera c aceast c"eie are valoarea
.
Exemplul */.%" Sortarea tabelei A din Figura $#.T folosind algoritmul de sortare prin inserare !n
ordine cresctoare*
A-'2 ] 8 S /7 T / 1 0 6 Q
pas /
pas Q
pas T
pas R
pas S
pas ]
pas 6
pas 1
pas 0
R ] 9 /7 T / 1 0 6 Q
R S ] 1> T / 1 0 6 Q
R S ] /7 7 / 1 0 6 Q
T R S ] /7 1 1 0 6 Q
/ T R S ]/7 < 0 6 Q
/ T R S ] 1 /7 = 6 Q
/ T R S ] 1 0/7 ; Q
/ T R S ] 6 1 0/7 0
/ Q T R S ] 6 1 0 /7
#igura */.%. !ortarea unei ta.ele A cu 1> ele$ente 3rin al#orit$ul de sortare prin inserare.
asul 1" (vem sortate nregistrrile dintre poziiile 1+1 ale tabelei.
- avem !nregistrarea de pe poziia Q cu c"eia R. Se caut poziia de inserare care este poziia /=
- se insereaz c"eia R !naintea poziiei de inserare=
Secvena de c"ei din poziiile /-Q ale tabelei sunt sortate.
asul 2 (vem sortate nregistrrile dintre poziiile 1+2 ale tabelei.
- avem !nregistrarea de pe poziia T cu c"eia S. Se caut poziia de inserare care este poziia Q=
- se insereaz c"eia S !naintea poziiei de inserare=
Secvena de c"ei din poziiile /-T ale tabelei sunt sortate.
asul %" (vem sortate nregistrrile dintre poziiile 1+% ale tabelei.
- avem !nregistrarea de pe poziia R cu c"eia /7. Se caut poziia de inserare care este poziia R=
- se insereaz c"eia /7 !naintea poziiei de inserare=
________________________________________________________________________________
Q6Q
Structuri de date i algoritmi
_______________________________________________________________________________
Secvena de c"ei din poziiile /-R ale tabelei sunt sortate.
asul 4" (vem sortate nregistrrile dintre poziiile 1+4 ale tabelei.
- avem !nregistrarea de pe poziia S cu c"eia T. Se caut poziia de inserare care este poziia /=
- se insereaz c"eia T !naintea poziiei de inserare=
Secvena de c"ei din poziiile /-S ale tabelei sunt sortate.
__________________________________..
8lgoritmul de sortare prin metoda inserrii ordoneaz cele /7 !nregistrri ale tabelei 8 !n 0
pai.
VI.0.7.7. I$3le$entarea al#orit$ului
Specificarea problemei de sortare av)nd ca date de intrare tabela A dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_#nserare ;SI;*
&#I;XI; 8 :=
8-72 *@ =
5;:I<9 i *@ Q=: ;D;&9IK
' *@ i=
&HII#C5 8-'2 J 8-' -/2
temp *@ 8-'2=
8-'2 *@ 8-' -/2=
8-' -/2 *@ temp=
' *@ ' -/=
SF&HI
SF5;:I<9
SF8MUO<#IC
________________________________________________________________________________
Q6T
Structuri de date i algoritmi
_______________________________________________________________________________
#mplementarea algoritmului de sortare prin metoda inserrii !n limba'ul 5ascal este*
Procedure insertion + 2ar 8* arra\t\pe= n*inte#er ,=
Var i '* inte#er=
'e#in
8-72 *@ minus_infinit= Aminus_infinit este o constant de valoare foarte micB
+or i*@Q to n do Ai' - variabila de tip inde%B
'e#in
' *@ i=
)hile 8-'2J8-'-/2 do
'e#in
temp *@ 8-'2=
8-'2 *@ 8-' -/2=
8-' -/2 *@ temp=
' *@ '-/=
End6
End6
End6
VI.0.7.8. Co$3le/itatea al#orit$ului
8lgoritmul de sortare prin inserare sort este un algoritm de sortare liniar* &omple%itatea
algoritmului este $+&, pentru tabele care conin & elemente sortate sau aproape sortate.
&omple%itatea algoritmului de sortare prin inserare depinde de numrul de inserri i
translatri care este influenat de ordinea iniial al elementelor. 3n caz general sunt necesare
R
Q
&
operaii de comparaie i
1
Q
&
operaii de intersc"imbare deci ordinea comple%itii este $+&
Q
,.
-Ire /01R2
VI.0.8. Al#orit$ul de sortare ,'ell
VI.0.8.1. Descrierea #eneral a $etodei
Sortarea prin micorarea incrementului numit i sortare S"ell este o e%tensie simpl al
metodei de sortare prin inserare !mbuntind performanele algoritmului prin intersc"imbarea
elementelor cele mai !ndeprtate. #deea de baz o constituie rearan'area elementelor din tabela A !n
________________________________________________________________________________
Q6R
Structuri de date i algoritmi
_______________________________________________________________________________
aa fel !nc)t lu)nd fiecare al +-lea element +!ncep)nd de oriunde, s obinem o tabel sortat.
8stfel spunem c tabela este +-sortat. O tabel +-sortat este format din + subtabele sortate
independent. Folosind astfel o procedur pentru fiecare secven de valori ale lui + care se termin
pentru valoarea / va rezulta o tabel sortat.
S considerm tabela A i un increment mai mare dec)t / fie acesta +. $om avea atunci
urmtoarele subtabele*
Subtabelul1/ A-/2 A-+ ?/2 A-Q+ ?/2 _.
Subtabelul2/ A-Q2 A-+ ?Q2 A-Q+ ?Q2 _.
Subtabelul>/ A-T2 A-+ ?T2 A-Q+ ?T2 _.
________________...
Subtabelul +/ A-+2 A-2+2 A-T+2 _.
Dac sortm fiecare din cele + subtabele folosind de e%emplu algoritmul de sortare prin
inserare atunci elementele (!ndeprtate se vor apropia srind cu pasul + ctre st)nga. 3n final vom
proceda la o sortare prin inserare cu incrementul / ceea ce va necesita un timp foarte scurt cci
tabela nu mai necesit corecii importante ma'oritatea !nregistrrilor fiind !n poziia cresctoare
dorit.
8lgoritmul de sortare ,'ell necesit o mulime de incremeni
/ /
+ + +
t t
ultimul
increment +
1
fiind egal cu /.
O formula des utilizat !n practic propune urmtoarele formule pentru secvena de
incremeni*
/ T = /
/ /
+
+ i i
+ + +
+]./,
Secvena este /R/T R7 /Q/ _. cu formula general*
Q
/ T
i
i
+ +].Q,
Deci numrul total de incremeni va fi*
( )
]
/ Q log
T
+ n t
+].T,
VI.0.8.0. Descrierea al#orit$ului
8lgoritmul de sortare ,'ell necesit mai multe operaii dec)t algoritmul de sortare prin
inserare dar la fiecare pas elementele ce urmeaz a fi intersc"imbate efectueaz salturi (lungi spre
poziia corect ceea ce ar trebui s duc la !mbuntirea performanelor algoritmului de sortare.
3n general algoritmul de sortare ,'ell poate fi descris astfel -8"o /0062*
5;:I<9 G *@ t=/ ;D;&9IK
5;:I<9 d *@ 7=
/
(
+
;D;&9IK
&d;8CK SO<I8<;_#nserare+LSubtabela d,=
Exemplul */.4" Sortarea tabelei 8 din Figura $#.R +a, folosind algoritmul de sortare ,'ell !n ordine
________________________________________________________________________________
Q6S
Structuri de date i algoritmi
_______________________________________________________________________________
cresctoare*
asul 1" Crearea celor ' subtabele +Fig. $#.R. +b,,
- S presupunem c am ales incrementul + @ S. Se creeaz cele S subtabele*
Subtabela 1* // ] /
Subtabela 2* /7 S 7
Subtabela >* 0 R
Subtabela ;* 1 T
Subtabela .* 6 Q
8- 2
A[1]A[2]A[3]
8-R2 8-S2 8-]2 8-62 8-12 8-02 8-/72 8-//2 8-/Q2
+a,
11 10 9 8 7 6 5 4 3 2 1 0
+b,
11 6 1
10 5 0
9 4
8 3
7 2
+c,
1 6 11
0 5 10
4 9
3 8
2 7
+d,
1 0 4 3 2 6 5 9 8 7 11 10
+e,
0 1 2 3 4 5 6 7 8 9 10 11
#igura */.4. !ortarea unei ta.ele A cu 10 ele$ente 3rin al#orit$ul de sortare ,'ell.
________________________________________________________________________________
Q6]
Structuri de date i algoritmi
_______________________________________________________________________________
asul 2 ,ortarea celor - subtabele +Fig. $#.R. +c,,
asul %" =abela iniial dup pasul de sortare cu incrementul - +Fig. $#.R. +d,,
asul %" =abela iniial dup pasul de sortare cu incrementul 1 +Fig. $#.R. +d,,
__________________________________..
VI.0.8.7. I$3le$entarea al#orit$ului
Specificarea problemei de sortare av)nd ca date de intrare tabela A dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_S"ell ;SI;*
&#I;XI; 8 :=
inc *@ #ncrement_intial+n,=
&KII#C5 inc E@ / ;D;&9IK
5;:I<9 i *@ inc= n-/ ;D;&9IK
' *@ i=
% *@ 8-i2=
&KII#C5 ' E@ inc i 8-' - inc2 E % ;D;&9IK
8-'2 *@ 8-' - inc2=
' *@ ' - inc=
SF&HI
8-'2 *@ %=
SF5;:I<9
inc *@ #ncrement_urmtor+inc n,=
SF8MUO<#IC
$bservaie"
Secvena de incrementare este determinat iterativ folosind funciile #ncrement_intial+n, i
________________________________________________________________________________
Q66
Structuri de date i algoritmi
_______________________________________________________________________________
#ncrement_urmtor+inc n,. Funcia #ncrement_intial+n, va returna cel mai mare increment
utilizabil pentru sortarea unei tabele de dimensiune n.
Funcia #ncrement_urmtor+inc n, va returna cel mai mare increment dar mai mic dec)t inc
utilizabil pentru sortarea unei tabele de dimensiune n.
Funciile #ncrement_intial+n, i #ncrement_urmtor+inc n, vor genera irul descresctor de
incremeni
/ /
+ + +
t t
@/.
Se presupune c #ncrement_urmtor+/ n, @ 7. &iclul e%terior se va termina c)nd inc @ /.
#mplementarea algoritmului de sortare prin metoda inserrii !n limba'ul 5ascal este*
Procedure S"ellsort + 2ar 8* arra\-/.. :2 of inte#er,=
Var i ' incr*integer=
'e#in
incr *@ : di2 Q= A Funcia #ncrement_intial+n,B
)hile incr E 7 do
'e#in
+or i *@ / to incr do
'e#in
G *@ i?incr=
)hile GJ@ : do
'e#in
% *@8-G2= A% @ elementul de comparatB
' *@ G-incr=
)hile 'E7 do
'e#in
I, %.Ge\ J 8-'2.Ge\ then
'e#in
Sc"imba +8-'?incr2 8-'2,=
' *@ ' - incr=
End=
G *@ G?incr
End
End=
incr *@ incr di2 Q= AFuncia #ncrement_urmator+incn,B
End=
End=
End=
VI.0.8.8. Co$3le/itatea al#orit$ului
________________________________________________________________________________
Q61
Structuri de date i algoritmi
_______________________________________________________________________________
&omple%itatea algoritmului de sortare ,'ell sort este greu de analizat greu de comparat cu
alte metode fiind dependent i de mulimea de incremeni. 5entru acest algoritm de sortare
cercetri empirice au artat c comple%itatea este !n general
( ) & & O log
-8"o /0062. ;%ist
mulimi de incremeni pentru care s-a dovedit c comple%itatea este ( ) ( )
Q
log & & O . :u se cunoate
p)n !n prezent o mulime optimal de incremeni pentru algoritmul de sortare ,'ell.
VI.0.9. Al#orit$ul de sortare rapid :>uic?sort;
VI.0.9.1. Descrierea #eneral a $etodei
8lgoritmul de sortare considerat a fi cel mai rapid de comple%itate
( ) & & O log
este numit
algoritm de sortare rapid +juicGsort, folosind partiionarea ca idee de baz. ;ste mai rapid dec)t
orice metod de sortare simpl se comport eficient pentru fiiere sau tabele mari dar ineficient
pentru cele de mici dimensiuni.
Strategia de baz are la baz o te"nic de tip 4divide et impera4 -Miv /01]2 pentru c este
mai uor de sortat dou tabele mici dec)t o tabbel mare. 8lgoritmul este uor de implementat
consum mai puine resurse dec)t orice alt metod de sortare.
VI.0.9.0. Descrierea al#orit$ului
8v)nd o tabel A cu & elemente alegem o c"eie pivot * !n 'urul creia rearan'm
elementele. 5ivotul poate fi ales !n mai multe moduri. O modalitate simpl ar fi s alegem ca pivot
primul element.
Dup ce avem pivotul partiionm tabela. 5rin partitionare toate elementele cu c"ei mai
mici dec)t pivotul le vom plasa !n partiia st)ng a tabelei iar elementele cu c"ei mai mari dec)t
pivotul !n partiia dreapt.
Dup aceea apelm recursiv algoritmul de sortare rapid relativ la cele dou subtabele
formate prin partiionare.
Se consider urmtoarea sc"em de comparaie-intersc"imb*
- folosindu-se Q indicatori i" j cu valorile iniiale i @ / i j @ & se compar !nregistrarea cu
numrul de ordine i cu !nregistrarea cu numrul de ordine j=
- algoritmul mut pe i la dreapta p)n c)nd gsete o c"eie mai mare dec)t pivotul * si mut
pe j la st)nga p)n c)nd gsete o c"eie mai mic dec)t pivotul *.
________________________________________________________________________________
Q60
Structuri de date i algoritmi
_______________________________________________________________________________
- dac nu este necesar intersc"imbarea se decrementeaz j cu / si se repet procesul de
comparaie=
- dac apare un intersc"imb se incrementeaz i cu / si se continu compararea mrind i p)n
la apariia unui nou intersc"imb=
- se decrementeaz j continu)ndu-se acest proces de numit 4ardere a lum)nrii la ambele
capete4 p)n c)nd i E@ j.
5rocedura se apeleaz recursiv printr-un apel de forma* SO<I8<;_<apida+A / &,=
Exemplul */.-" Sortarea tabelei A din Figura $#.R +a, folosind algoritmul de sortare ,'ell !n ordine
cresctoare*
asul 1" (legem pivotul! elementul cu c'eia @ de pe poziia 1
- &omparm pe 6 cu R 6 E R i intersc"imbm=
asul 2" Caut de la st&nga la dreapta elementul cu c'eia mai mare dec&t @ :indexul i;
- 8cesta este 1 comparm pe 6 cu 1 1 E 6 i intersc"imbm=
asul %" Caut de la dreapta la st&nga elementul cu c'eia mai mic dec&t @ :indexul 8;
- 8cesta este ] i intersc"imbm cu elementul de pe poziia i=
5rocesul de 4ardere a lum)nrii la ambele capete4 se continu p)n c)nd i E@ j" atunci tabela
se !mparte !n dou subtabele care se sorteaz separat recursiv p)n c)nd fiecare subtabel va conine
doar un element.
________________________________________________________________________________
Q17
Structuri de date i algoritmi
_______________________________________________________________________________
#igura */.-. !ortarea unei ta.ele A cu 10 ele$ente 3rin al#orit$ul de sortare ,'ell.
VI.0.9.7. I$3le$entarea al#orit$ului
Specificarea problemei de sortare av)nd ca date de intrare tabela 8 dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea general a algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_<apid +i ', ;SI;*
D8&K L!ntre 8-i2 i 8-'2 e%ist cel puin dou c"ei distincte 8I9:&#
Lfie v *@ cea mai mare dintre cele dou c"ei distincte=
Lpermutm 8-i2 _. 8-'2 astfel !nc)t pentru
j ( i +/
s avem*
elementele 8-i2 _. 8-G-/2 au c"ei strict mai mici dec)t pivotul v=
elementele 8-G2 _. 8-'2 au c"ei mai mari sau egale cu pivotul v=
&d;8CK SO<I8<;_<apid +i G-/,
&d;8CK SO<I8<;_<apid +G ',
________________________________________________________________________________
Q1/
Structuri de date i algoritmi
_______________________________________________________________________________
SF8MUO<#IC
#mplementarea algoritmului de sortare prin metoda rapid !n limba'ul 5ascal este*
$ariabilele left si rig+t reprezint !nceputul si sf)ritul tabelei sau subtabelei.
Procedure e9#&.+2ar 8*arra6t6pe= left rig"t* inte#er,=
Var i'* inte#er=
v t* ele%=
'e#in
i *@ left= ' *@ rig"t= v *@ 8-l2=
Re3eat
)hile 8-i2.Ge\ J v.Ge\ do
i *@ i?/=
)hile 8-'2.Ge\ E v.Ge\ do
' *@ '-/=
I, i J ' then
'e#in
t *@ 8-i2=
8-i2 *@ 8-'2=
8-'2 *@ t=
End
Until i E@ ' Apentru siguran= conform algoritmului era suficient i @ 'B
I, left J '-/ then
e9#&. +left '-/,=
I, i?/ J rig"t then
e9#&. +i?/ rig"t,=
End=
VI.0.9.7. Co$3le/itatea al#orit$ului
3n algoritmului de sortare rapid fiecare element este comparat cu pivotul adic avem
comple%itatea O+&,.
#n continuare tabela este divizat !n dou pri fiecare parte este iari divizat !n dou pari
_. .a.m.d. Dac fiecare parte este !mprit apro%imativ !n dou 'umti egale vom avea log
Q
&
operaii de !mprire.
Deci comple%itatea algoritmului de sortare rapid este !n caz mediu O+&log
Q
&, iar !n caz
nefavorabil este ( )
Q
& O -.nu /06]2.
Dup cum am artat mai sus algoritmul de sortare rapid este o metod bun !n cazul
general dar nu i !n cazul nefavorabil c)nd este preferabil alegerea pivotului conform formulei
________________________________________________________________________________
Q1Q
Structuri de date i algoritmi
_______________________________________________________________________________
+].Q,. 5erformanele algoritmului de sortare rapid sunt dependente de ordinea datelor de intrare. De
aceea nu este o metod de sortare stabil.
VI.0.:. Al#orit$ul de sortare prin interclasare :mergesort;
VI.0.:.1. Descrierea #eneral a $etodei
8lgoritmul de sortare prin interclasare se bazeaz pe urmtoarea idee* pentru a sorta o tabel
cu & elemente !mprim tabela iniial !n dou subtabele pe care le sortm separat si le interclasm.
;ste o metod de sortare care folosete ca strategie de baz te"nica 4di*ide et i%pera4 conform
creia o problema care se poate descompune !n alte dou subprobleme de acelai tip se rezolv cale
dou subprobleme iar rezultatele subproblemelor se combin pentru a genera rezultatul problemei
iniiale. 8lgoritmul de sortare prin interclasare sorteaz elementele !n ordine cresctoare.
VI.0.:.0. Descrierea al#orit$ului
Fiind dat o tabel A cu & elemente !mprim tabela !n dou pri sortm separat fiecare
parte si (!mbinm prin interclasare cele dou pri !ntr-o tabel au%iliar temporar. Dac o parte
conine doar un singur element atunci considerm acea parte sortat.
3mprirea tabelei !n dou pri presupune gsirea elementului de mi'loc*
+pri% ? ulti%, P Q +].R,
5entru a (!mbina 'umtile sortate interclasm fiecare subtabel comparm succesiv
perec"ile de c"ei +din fiecare parte, si punem valoarea mai mic !ntr-o tabela temporal. 8lgoritmul
general necesit urmtorii pai*
/. 3mparte tabela !n dou
Q. Sorteaz 'umtatea st)ng
T. Sorteaz 'umtatea dreapt
R. 3mbin prin interclasare cele dou 'umti sortate !ntr-o tabel sortat.
3mbinarea celor dou pri necesit un numr de operaii de ordinul O+&,. 8lgoritmul se
termin c)nd o subtabel nu mai are nici o !nregistrare si mutm !nregistrrile rmase din cealalt
subtabel !n tabela temporar. Dup pasul de interclasare putem copia tabela temporar sortat !n
tabela original.
________________________________________________________________________________
Q1T
Structuri de date i algoritmi
_______________________________________________________________________________
#igura */.1. VP$.inareaR 3rin interclasare a unei ta.ele A cu 1>> ele$ente.
asul 1" (flm mi8locul tabelei! utiliz&nd formula 1.4
- mi'loc *@ +/ ? 0, P Q @ S=
asul 2 .mprim tabela n dou subtabele fat de elementul de mi8loc.
- avem subtabela format din !nregistrrile / Q T R=
- avem subtabela format din !nregistrrile S ] 6 1 0=
asul %" ,ortm subtabela st&ng.
- avem !nregistrrile cu c"eile sortate* Q S 6 1.
asul 4" ,ortm subtabela dreapt.
- avem !nregistrrile cu c"eile sortate* / T R ] 0.
asul -" /nterclasm subtabela st&ng i dreapt n tabela =emp.
asul 1" Copiem nregistrrile din tabela =emp n tabela original (.
________________________________________________________________________________
Q1R
Structuri de date i algoritmi
_______________________________________________________________________________
#igura */.@. !ortarea unei ta.ele A cu = ele$ente 3rin al#orit$ul de sortare prin interclasare.
VI.0.:.7. I$3le$entarea al#orit$ului
Specificarea problemei de sortare av)nd ca date de intrare tabela A dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea general a algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_#nterclasare ;SI;*
&#I;XI; 8 :=
Bnde- *@ 7ri%StngC
&HII#C5 Lmai sunt elemente !n 'umtatea st)ng si !n cea dreapt
D8&K c+eia_Bnde-1curent1stng D c+eia_Bnde-1curent1drept 8I9:&#
)e%p-Bnde-2 *@ 8-Bnde- curent stng2
Bnde-1curent1stng *@ Bnde-1curent1stng ? /=
8IF;M
)e%p-Bnde-2 *@ 8-Bnde- curent1 drept2=
________________________________________________________________________________
Q1S
Structuri de date i algoritmi
_______________________________________________________________________________
Bnde-1curent1drept *@ Bnde-1curent1drept ? /=
L&opiaz toate elemente rmas din 'umtatea st)ng !n tabela )e%p=
L&opiaz toate elemente rmas din 'umtatea deapt !n tabela )e%p=
L&opiaz toate elemente sortate din tabela )e%p !n tabela A=
SF8MUO<#IC
#mplementarea algoritmului de interclasare !n limba'ul 5ascal este*
$ariabilele lfirst" llast" rfirst" rlast indic cele dou capete ale subtabelei din st)nga si ale
subtabelei din dreapta. $ariabilele curent1left si curent1rig+t reprezint elementul curent din st)nga
respectiv din dreapta. )e%p este tabela temporar folosit pentru sortare.
Procedure #nterclasare +2ar 8*arra6t6pe= lfirst llast rfirst rlast* inte#er,=
2ar
temp* arra6t6pe=
inde% curent_left curent_rig"t* inte#er=
'e#in
curent_left*@lfirst=
curent_rig"t*@rfirst=
inde%*@lfirst=
)hile +curent_leftJ@llast, and +curent_rig"tJ@rlast, do
'e#in
I, 8-curent_leftJ 8-curent_rig"t2 then
'e#in
Iemp-inde%2*@8-curent_left2=
curent_left*@curent_left?/=
End
Else
'e#in
Iemp-inde%2*@8-curent_rig"t2=
curent_rig"t*@curent_rig"t?/=
End=
inde% *@ inde%?/=
End6
)hile curent_leftJ@llast do
'e#in
Iemp-inde%2*@8-curent_left2=
curent_left*@curent_left?/=
inde%*@inde%?/=
End=
)hile curent_rig"tJ@rlast do
'e#in
Iemp-inde%2*@8-curent_rig"t2=
curent_rig"t*@curent_rig"t?/=
inde%*@inde%?/=
________________________________________________________________________________
Q1]
Structuri de date i algoritmi
_______________________________________________________________________________
End=
+or inde%*@lfirst to rlast do
8-inde%2 *@ Iemp-inde%2
End6
#mplementarea algoritmului de sortare prin interclasare! !n limba'ul 5ascal este*
Procedure SO<I8<;_#nterclasare +var 8* arra6t6pe= firstlast*integer,=
2ar
middle* inte#er=
'e#in
I, first J last then
'e#in
middle*@+first?last, di2 Q=
SO<I8<;_#nterclasare +8 first middle,=
SO<I8<;_#nterclasare +8 middle ?/ last,=
#nterclasare +8 first middle middle ?/ last,=
End=
End=
VI.0.:.7. Co$3le/itatea al#orit$ului
Ca'oritatea operaiilor efectuate de algoritmul de sortare prin interclasare sunt efectuate de
operaiile de comparare i de copiere.
3n cadrul operaiilor de interclasare fiecare !nregistrare din cele dou subtabele este
comparat aceast !nsemn)nd o comple%itate de ordinul $+&,.
&opierea !nregistrrilor din tabela temporar )e%p !n tabela original A necesit un numr
de operaii tot de ordinul $+&,.
5rocedura de sortare propriu-zis este recursiv i este apelat recursiv pentru 'umtatea
st)ng i pentru 'umtatea dreapt. Iabela iniial A poate fi !mprit de cel mult log
Q
& ori. Ma
fiecare !mprire se e%ecut operaia de interclasarere care este de ordinule $+&,.
8tunci algoritmul de sortare prin interclasare va avea o comple%itate de ordinul O+& log
Q
&,
!n toate dintre cele trei cazuri -Iom /0062. ;ste o metod stabil. 8lgoritmul de sortare prin
interclasare nu este dependent de ordinea iniial a elementelor.
Dezavanta'ul algoritmului de sortare prin interclasare este c necesit o tabel au%iliar
)e%p de dimensiune & egal cu dimensiunea tabelei de sortat A.
VI.0.:. Al#orit$ul de sortare 3rin ansambluri :'eapsort;
________________________________________________________________________________
Q16
Structuri de date i algoritmi
_______________________________________________________________________________
VI.0.:.1. Descrierea #eneral a $etodei
0efiniia 1.1." 9n arbore binar posed proprietatea de ansamblu dac orice nod al su verific
proprietatea* c"eia de cutare a nodului este mai mare sau egal dec)t c"eia de cutare a nodului
fiu_st)nga sau dec)t c"eia de cutare a nodului fiu_dreapta.
0efiniia 1.2." 9n ansamblu +'eap, este un arbore binar complet ce posed proprietatea de
ansamblu +Definiia ]./,.
&aracteristica de baz a acestei structuri de date numit ansamblu! este c modificarea
valorii c"eii de cutare a unui nod se poate face uor pstr)nd totui proprietatea de ansamblu.
5resupun)nd c c"eia de cutare a unui nod_fiu depete c"eia de cutare a nodului_tat este
suficient s intersc"imbm !ntre ele cele dou noduri s continum procedeul pe drumul ascendent
ctre nodul rdcin p)n c)nd proprietatea de ansamblu este restabilit. $om spune c valoarea
modificat a fost filtrat ctre noua poziie -8nd /00S2.
Dac dimpotriv c"eia de cutare a nodului_tat scade devenind mai mic dec)t c"eia de
cutare a unui nod_fiu atunci este suficient s sc"imbm !ntre ele nodul_tat cu nodul_fiu av)nd
c"eia de cutare cea mai mare apoi s continum procesul !n mod descendent p)n c)nd
proprietatea de ansamblu este restabilit. $om spune c valoarea modificat a fost cernut ctre
noua sa poziie -8nd /00S2.
Cetoda de sortare prin ansambluri se bazeaz pe reprezentarea arborescent al unei tabele
date.
VI.0.:.0. Descrierea al#orit$ului
a. Construirea ansamblului * Descrierea general a algoritmului !n 5seudocod este*
Specificarea problemei de construire a ansamblului av)nd ca date de intrare tabela A
dimensiunea ma%im a tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8nsamblu= A (nsamblul construit din tabela nesortat 8 B
Descrierea general a algoritmului de creare al ansamblului !n 5seudocod este*
8MUO<#IC9M &reare_8nsamblu ;SI;*
&#I;XI; 8 := A (nsamblul construit din tabela nesortat 8 B
5;:I<9 i *@ +: div Q,= / ;D;&9IK
&d8CK &ernere +8 : i,=
________________________________________________________________________________
Q11
Structuri de date i algoritmi
_______________________________________________________________________________
SF-5;:I<9
SF8MUO<#IC
8MUO<#IC9M &ernere +f C ', ;SI;*
G *@ '* A Se cerne valoarea din tabela f-'2 B
<;5;IK
l *@ G= A Usete fiul cu valoarea cea mai mare B
D8&K +Ql J@ C, i +f-Ql2 E f-G2, 8I9:&#
G *@ Ql=
SFD8&K
D8&K +Ql J C, i +f-Ql ?/2 E f-G2, 8I9:&#
G *@ Ql ?/=
SFD8&K
temp *@ f-l2=
f-l2 *@ f-G2=
f-G2 *@ temp=
5H:K&H:D l @ G SF<;5
SF8MUO<#IC
3n Figura $#.1 avem un e%emplu de construire a unui ansamblu. :odurile reprezentate cu
cercuri __ semnific elementele care constituie ansamblul iar nodurile reprezentate cu cercuri
__ reprezint noduri care violeaz proprietatea ansamblului.
(a) (b) (c)
(d) (e) (f)ansamblu
#igura */.3. Construirea unui ansa$.lu A cu = ele$ente.
7oEitia 1 2 > ; . F : G H
________________________________________________________________________________
Q10
Structuri de date i algoritmi
_______________________________________________________________________________
ta.ela
ori#inala
; 9 < 0 7 = 1 : 8
dupa +b, 6 S 1 ] T 0 / Q R
dupa +c, 6 S 0 ] T 1 / Q R
dupa +d, 6 ] 0 S T 1 / Q R
dupa +e, 0 ] 1 S T 6 / Q R
asul 1" Construim arborele binar corespunztor tabelei originale
- secvena de noduri este* 6 S 1 Q T 0 / ] R=
- arborele binar este reprezentat !n Figura $#.1.a.
asul 2" 9odul cu c'eia 2 violeaz proprietatea de ansamblu +arborele binar este reprezentat !n
Figura $#.1.b.,
- cernem valoarea nodului cu c"eia Q=
- intersc"imbm nodul cu c"eia Q cu nodul cu c"eia 0=
- arborele binar este reprezentat !n Figura $#.1.d.
asul %" 9odul cu c'eia 3 violeaz proprietatea de ansamblu +arborele binar este reprezentat !n
Figura $#.1.d.,
- cernem valoarea nodului cu c"eia 1=
- intersc"imbm nodul cu c"eia Q cu nodul cu c"eia ]=
- arborele binar este reprezentat !n Figura $#.1.c.
asul 4" 9odul cu c'eia - violeaz proprietatea de ansamblu +arborele binar este reprezentat !n
Figura $#.1.d.,
- cernem valoarea nodului cu c"eia S=
- intersc"imbm nodul cu c"eia S cu nodul cu c"eia ]=
- arborele binar este reprezentat !n Figura $#.1.e.
asul -" 9odul cu c'eia @ violeaz proprietatea de ansamblu +arborele binar este reprezentat !n
Figura $#.1.e.,
- cernem valoarea nodului cu c"eia 6=
________________________________________________________________________________
Q07
Structuri de date i algoritmi
_______________________________________________________________________________
- intersc"imbm nodul cu c"eia S cu nodul cu c"eia 0=
- arborele binar este reprezentat !n Figura $#.1.f.
3n Figura $#.1.f aven reprezentat ansamblul construit din tabela 8.
#mplementarea algoritmului de creare al ansamblului !n limba'ul 5ascal este*
Procedure &reare_8nsamblu +2ar 8* arra6t6pe first last* inte#er,=
2ar
r ma%* inte#er=
oG* .oolean=
'e#in
r *@ first= oG*@,alse=
)hile +raQ J@ last, and not oG do
'e#in
#f raQ @ last then
ma% *@raQ
Else
I, 8-raQ2 E 8-raQ?/2 then
ma% *@ raQ
Else
ma% *@ raQ?/=
I, 8-r2 J 8-ma%2 then
'e#in
SWap+ 8-r2 8-ma%2 ,=
r *@ ma%=
End
Else
oG *@ true=
End
End=
b. ,ortare cu ansambluri" Fiind dat o tabel nesortat A de dimensiune & s presupunem c am
construit ansamblul corespunztor tabelei A. 8stfel vom putea accesa uor elementul ma%im din
tabel pentru c acesta este c"iar nodul rdcin al ansamblului si !n reprezentarea cu a'utorul
tabelei va fi !nregistrarea A-/2. 8ceast !nregistrare va fi intersc"imbat cu !nregistrarea A-&2. :e
vom ocupa !n continuare de primele & -/ !nregistrri A-/2 _ A-&-/2 care alctuiesc aproape un
ansamblu iari apelm la algoritmul de creare al ansamblului pentru aceste !nregistrri _.
.a.m.d. p)n c)nd toate !nregistrrile vor fi la locul potrivit adic toate !nregistrrile vor fi sortate.
VI.0.:.7. I$3le$entarea al#orit$ului
________________________________________________________________________________
Q0/
Structuri de date i algoritmi
_______________________________________________________________________________
Specificarea problemei de sortare av)nd ca date de intrare tabela 8 dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 :=
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea general a algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_8nsamblu ;SI;*
&#I;XI; 8 :=
&d;8CK &reare_8nsamblu*
5;:I<9 i *@ := Q ;D;&9IK
temp *@ 8-l2=
8-/2 *@ 8-i2=
8-i2 *@ temp=
&d;8CK &ernere +f i -/ /,=
SF-5;:I<9
SF8MUO<#IC
8lgoritmul Sortare_8nsambluri construiete ansamblul original pentru elementele nesortate
si sorteaz elementele !n ansamblu prin sc"imbarea nodului rdcin A-/2 cu ultimul element
nesortat A-i2 apoi rearan'eaz elementele rmase.
#mplementarea algoritmului de sortare prin ansambluri !n limba'ul 5ascal
este*
Procedure SO<I8<;_8nsamblu +2ar 8* arra\t\pe= :* inte#er,=
Var i* inte#er=
'e#in
&reare_8nsamblu +8 / :,=
+or i*@ : do-nto Q do AsortareB
'e#in
SWap+8-/28-i2,=
&reare_8nsamblu +8/i-/,=
End
End=
VI.0.:.8. Co$3le/itatea al#orit$ului
________________________________________________________________________________
Q0Q
Structuri de date i algoritmi
_______________________________________________________________________________
9n arbore binar complet cu & noduri are nevoie de logQ+& ?/, operaii !n cazul cel mai
nefavorabil pentru a cerne nodul rdcin astfel !nc)t s a'ung !n poziia de nod frunz.
8lgoritmul &reare_8nsamblu efectueaz un numr de log
Q
& intersc"imbri deci comple%itatea sa
va fi $+log
Q
&,. -Iom /0062
&iclul 5;:I<9 din algoritmul de sortare se va e%ecuta de &-/ ori deci comple%itatea
algoritmului de sortare este O+&log
Q
&,.
8lgoritmul de sortare prin ansambluri are comple%itatea O+&log
Q
&, !n toate din cele trei
cazuri de analizat* cazul general favorabil i nefavorabil -.nu /06]2.
5entru tabele mici algoritmul de sortare prin ansambluri este ineficient dar foarte eficient
pentru cele tabele mari. :u necesit memorie suplimentar. ;ficiena algoritmul de sortare prin
ansambluri nu este afectat de ordinea iniial a elementelor.
VI.0.;. Al#orit$ul de sortare RADIA
VI.0.;.1. Descrierea #eneral a $etodei
Sortarea <8D#D +sau sortarea digital , este o metod de sortare care precede apariia
calculatoarelor electronice fiind inspirat dintr-o metod de sortare mecanic a cartelelor perforate.
;ste una din cele mai eficiente metode de sortare intern cu condiia ca dimensiunea & a numrului
de !nregistrri de sortat s nu fie prea mic iar c"eile dup care se face ordonarea s nu fie prea mici.
8lgoritmul de sortare <adi% trateaz c"eile ca i cum ar fi numere reprezentate !ntr-o baz
= utiliz)nd cifrele din reprezentarea individuale a numerelor +de e%emplu caracterele pot fi
reprezentate !n baz /Q1,.
Dac folosim clasica reprezentare zecimal deci = @ /7 vom folosi /7 buzunare
corespunz)nd celor /7 cifre zecimale ale sistemului de numeraie zecimal. Fiecare coloan este
sortat !ncep)nd cu rangul cel mai puin semnificativ al c"eilor +primul din dreapta, mut)nd
!nregistrrile din zona de intrare a algoritmului de sortare !ntr-o zon au%iliar a algoritmului de
sortare. 5rocesul de sortare continu apoi cu urmtorul rang semnificativ p)n c)nd !n pasul final
se ordoneaz toate !nregistrrile.
VI.0.;.0. Descrierea al#orit$ului
5utem organiza !nregistrrile de sortat !n buzunare +pocGet, fiecare buzunar corespunz)nd
________________________________________________________________________________
Q0T
Structuri de date i algoritmi
_______________________________________________________________________________
unei cifre din reprezentarea c"eilor de sortat !n baza =. Fiecare buzunar poate fi reprezentat ca o
structur de date de tip coad +list #/#$,. Ma sf)ritul fiecrui pas al procesului de sortare cozile
pot fi combinate uor !n ordine potrivit.
Dac numrul ma%im de cifrei !ntr-o c"eie este = atunci vor fi necesari = pai de sortare
pornind de la cifra cea mai puin semnificativ la cifra cea mai semnificativ. ;ste recomandat a se
folosi reprezentarea !nlnuit sub forma de list simpl !nlnuit a structurii de date
corespunz)nd buzunarelor deoarece nu putem ti c)te !nregistrri vor intra !ntr-un buzunar.
5rima dat vom sorta !nregistrrile dup cifra cea mai puin semnificativ a c"eii
interclasm apoi buzunarele. <epetm procesul de la primul pas sort)nd !nregistrrile dup cifra
urmtoare interclasm iari buzunarele .a.m.d.
Exemplu" S considerm urmtoarea secven de numere de sortat !n ordine cresctoare*
RQ QT 6R // ]S S6 0R T] 00 16 67 1/ ]/
Fiind vorba de o reprezentare zecimal vom avea nevoie de /7 buzunare pentru procesul de
sortare. Datorit ordinului de mrime al numerelor de sortat avem doar Q cifre de reprezentare cifra
unitilor i cifra zecilor.
asul 1" relucrm datele de sortat dup cifra unitilor n cele 15 buzunare
asul 2" /nterclasm buzunarele
- obinem secvena de c"ei* 67 // 1/ ]/ RQ QT 6R 0R ]S T] S6 16 00
asul %" relucrm datele de sortat dup cifra zecilor n cele 15 buzunare
asul 4" /nterclasm buzunarele
- obinem secvena de c"ei* // QT T] RQ S6 ]/ ]S 67 6R 1/ 16 0R 00
VI.0.;.7. I$3le$entarea al#orit$ului
________________________________________________________________________________
Q0R
Structuri de date i algoritmi
_______________________________________________________________________________
Specificarea problemei de sortare av)nd ca date de intrare tabela 8 dimensiunea ma%im a
tabelei & este urmtoarea*
D8I; 8 : C= A C reprezint baza sistemului de numeraie B
<;g9MI8I; 8= A tabela 8 sortat !n ordine cresctoare B
Descrierea general a algoritmului de sortare !n 5seudocod este*
8MUO<#IC9M SO<I8<;_<8D#D ;SI;*
&#I;XI; 8 : C=
G*@ Lnumrul ma%im de cifre necesar reprezentrii c"eilor din tabela 8=
5;:I<9 i *@ /= G ;D;&9IK
Lgolete buzunarul f-i2=
5;:I<9 ' *@ /= : ;D;&9IK
Lanalizeaz cifra i a c"eii 8-'2 i introducem !nregistrarea !n buzunarul f-2=
SF-5;:I<9
L interclaseaz buzunarele f-/2 f-Q2_ f-C2=
SF-5;:I<9
SF8MUO<#IC
#mplementarea algoritmului de sortare prin ansambluri !n limba'ul 5ascal este*
Fie dat o mulime de & !nregistrri organizat ca o list !nlnuit cu c)mpurile c"eie +?eA,
si legtur +next,. $ectorii 'ead si tail contin adresele primelor i respectiv ultimelor !nregistrri din
fiecare buzunar +coad,. $ariabila i este inde%ul pasului de sortare variabila j este inde%ul
buzunarelor variabila r este variabila pointer al !nregistrrii curente. $ariabila + de tip !ntreg
corespunde cifrei de analizat din c"eie variabila = reprezint numrul ma%im de cifre care
alctuiesc c"eia +?eA @ c
/
c
Q
c
T
_c
=2/
c
=
,.
+unction SO<I8<;_<8D#D +r * list , * list=
2ar "ead tail * arra5-7..02 o, list=
i ' " * inte#er=
fegin
+or i*@C do-nto / do Anumrul de pai necesariB
'e#in
+or '*@ 7 to 0 do
"ead-'2 *@ nil= Ainiializeaz listele corespunztoare buzunarelorB
)hile r JEnil do Apune !nregistrrile !n buzunarul corespunztorB
'e#in
" *@ c"arac+ i r[.Ge\ ,= Aobtine bitul i al c"eii B
#f "ead-"2@ nil then
"ead-"2 *@ r
________________________________________________________________________________
Q0S
Structuri de date i algoritmi
_______________________________________________________________________________
Else
tail-"2[.ne%t *@ r=
tail-"2 *@ r=
r *@ r[.ne%t=
End=
r *@ nil= A interclasm buzunarele B
+or '*@0 do-nto 7 do
I, "ead-'2 JE nil then
'e#in
tail-'2[.ne%t *@ r=
r *@ "ead-'2
End6
End=
SO<I8<;_<8D#D *@ r=
End=
VI.0.;.8. Co$3le/itatea al#orit$ului
5entru ca algoritmul de sortare <8D#D fie performant este necesar s folosim structuri de
date potrivite De e%emplu este preferabil ca s avem !nregistrrile de sortat organizate ca o list
simplu !nlnuit si nu ca o tabel static. Dac folosim organizarea sub form de list simpli
!nlnuit atunci nu va trebui s copiem !nregistrrile efectiv din structura iniial !n buzunare ci
doar s mutm adresa !nregistrrii dintr-o list !n alta. De asemenea pentru ca interclasarea s fie
rapid avem nevoie de pointeri la sf)ritul fiecrei liste.
&omple%itatea algoritmului de sortare <adi% este liniar adic de comple%itate O+&, dac
c"eile de sortare sunt de tip !ntreg sau de tip ir de caractere cu lungime fi% -Ire /01R2.
Dac avem & !nregistrri de sortat cu ma%imum = cifre necesare pentru reprezentare atunci
comple%itatea algoritmul de sortare <8D#D este O+=&,.
'I'"I&(RA+IE
8tanasiu 8. <. 5intea -/00]2. 'ulegere de proble%e 7ascal% ;ditura 5etrion fucureti.
________________________________________________________________________________
Q0]
Structuri de date i algoritmi
_______________________________________________________________________________
8"o 8. $. n. ;. dopcroft n. D. 9llman -/06R2. )+e Design and Anal6sis of 'o%puter
Algorit+%s Addison-Wesley, Reading, Massachusetts.
8"o 8. $. n. ;. dopcroft n. D. 9llman -/0162. Data Structures and Algorit+%s 8ddison -
Wesley, Reading, Massachusetts.
8lbeanu U. -/00R2. 7rogra%are n 7ascal i )urbo 7ascal .'ulegere de proble%e% ;ditura
Ie"nic fucureti.
8ndonie <. #. U)rbacea -/00S2. Algorit%i funda%entali. O perspecti*$ 'AA" ;ditura Mibris
&lu'-:apoca.
faase S. -/0162. 'o%puter Algorit+%s. Bntroduction to Design and Anal6sis 8ddison-Oesle\
Reading, Massachusetts.
flaga 5. U. &oman S. Uroze -/0612. IaEele Bnfor%aticii B. 'ulegere de proble%e Mitografia
9niversitii fabe-fol\ai &lu'-:apoca.
fq"m &. I. &. nacopini -/0]]2. FloW Diagrams Iuring Cac"ines and Manguages Wit" onl\
tWo Formation <ules 'o%%. A.'.=. =*S.
foian F. C. Frentiu -/00Q2. IaEele Bnfor%aticii. Li%bajul 7ascal ediia a ##-a Mitografia
9niversitii fabe-fol\ai &lu'-:apoca.
furdescu D.D. -/0012. AnaliEa co%ple-it$0ii algorit%ilor ;ditura 8lbastr fucureti.
&ooG S. 8. -/0672. I"e comple%it\ of t"eorem-proving procedure >2rd A'= S6%posiu% of
'o%puting pg /S/-/S1.
&ristea $. #. 8t"anasiu ;. .alisz 8. 5noiu -/00Q2. )urbo 7ascal F.J% ;ditura Ieora
fucureti.
&ristea $. #. 8t"anasiu ;. .alisz $. #orga -/00T2. )e+nici de progra%are ;ditura Ieora
fucureti.
Dale :. S. &. Mill\ -/0112. 7ascal 7lus Data Structures D. &. deat" and &ompan\ Me%ington
Cassac"usetts.
Fortune S. &. n. $an O\G -/00T2. ;fficient ;%act 8rit"metic for &omputational Ueometr\
7roceedings of t+e Ht+ A'= S6%posiu% 'o%putational Keo%etr6.
________________________________________________________________________________
Q06
Structuri de date i algoritmi
_______________________________________________________________________________
Frentiu C. S. Uroze -/01]2. IaEele Bnfor%aticii ediia a ##-a Mitografia 9niversitii fabe-
fol\ai &lu'-:apoca.
Uiumale &.8. -Q77R2. Bntroducere n analiEa algorit%ilor. )eorie i aplica0ie ;ditura 5olirom
fucureti.
doroWitz ;. S. Sa"ni -/0612. Lunda%entals of 'o%puter Algorit+%s &omputer Science 5ress
<ocGville.
.nut" D. ; -/06]2. )ratat de progra%area calculatoarelor. Algorit%i funda%entali ;ditura
Ie"nic fucureti.
.nut" D. ;. -/06]2. )ratat de progra%are a calculatoarelor. Sortare i c$utare ;ditura
Ie"nic fucureti.
.ors" n. F. M. n.Uarrett -/0112. Data Structures" Algorit+%s and 7rogra% St6le Msing ' 5OS-
.ent 5ublis"ing &o. foston.
MeWis d.<. M. Denenberg -/00/2. Data Structures N )+eir Algorit+%s darper &ollins
5ublis"ers :eWP`orG.
Mivovsc"i M. -/0172. Sc+e%e logice. Se%nifica0ie" elaborare" *erificare testare ;ditura
Ie"nic fucureti.
Mivovsc"i M. d. Ueorgescu -/01]2. SinteEa i analiEa algorit%ilor ;ditura Stiinific i
;nciclopedic fucureti.
Cocanu C. U. Carian &. fdic &. fdic -/00T2. >>> proble%e de progra%are% ;ditura
Ieora fucureti.
SedgeWitz <. -/0112. Algorit+%s Addison-Wesley, Reading, Massachusetts.
SedgeWitz <. -/0072. Algorit+%s in ' Addison-Wesley, Reading, Massachusetts.
S"eWc"uG n. <. -/0062. Floating-point arit"metic and fast robust geometric predicates
Discrete and 'o%putational Keo%etr6 /1.
SGiena S. -/0062. )+e Algorit% Design =anual ;ditura Springer-$erlag :eW-`orG.
Iomescu #. -/06Q2. Bntroducere n co%binatoric$ ;ditura Ie"nic fucureti.
Iomescu #. -/01/2. 7roble%e de co%binatoric$ i teoria grafurilor ;ditura Didactic i
5edagogic fucureti.
Iomescu #. -/0062. Data Structures ;ditura 9niversitii din fucureti fucureti.
________________________________________________________________________________
Q01
Structuri de date i algoritmi
_______________________________________________________________________________
Irembla\ n. 5. 5. U. Sorenson -/01R2. An Bntroduction to Data Structures Oit+ Applications
second edition CcUraW-dill :eW-`orG.
Iudor S. -/00T2. )e+nici de progra%are i structuri de date vol. ## ;ditura Iurbo <abbit
fucureti.
________________________________________________________________________________
Q00