Sunteți pe pagina 1din 11

Proiectarea Algoritmilor

Mitic Craus

Sortarea bitonica

Sortare prin interclasarea de secvente bitone Operatia de baza:


sortarea unei secvente bitone.

Secventa bitona
Secventa de elemente <a0, a1, , an-1>
Exista i a.i. <a0, ,ai> este monoton crescatoare si <ai+1, , an-1> este monoton descrescatoare SAU Exista o shift-are ciclica a.i. sa fie satifacuta conditia anterioara.

Secvente bitone
<1, 2, 4, 7, 6, 0>
Intai creste si apoi descreste i=3

<8, 9, 2, 1, 0, 4>
Shift stinga cu 4 pozitii i=3

Proprietati ale secventelor bitone


Fie s = <a0, a1, , an-1> o secventa bitona Fie s1=<min{a0, an/2}, min{a1, an/2 +1}min{an/2-1,an-1}> Fie s2=<max{a0, an/2}, max{a1,an/2+1}max{an/2-1,an-1}> In secventa s1 exista bi = min{ai, an/2+i} Toate elementele din fata lui bi sunt din secventa crescatoare Toate elementele de dupa bi sunt din secventa descrescatoare Secventa s2 are si ea un punct similar Secventele s1 si s2 sunt bitone Fiecare element din s1 este mai mic decit fiecare element din s2

Esenta sortarii unei secvente bitone


Problema sortarii unei secvente bitone se reduce de la sortarea unei secvente de lungime n la sortarea a doua secvente de dimensiune n/2

Exemplu de sortare a unei secvente bitone

Copyright (r) 1994 Benjamin/Cummings Publishing Co.

Conversia unei secvente oarecare in una bitona


Pentru a sorta o secventa de n elemente, prin tehnica sortarii unei secvente bitone, trebuie sa dispunem de o secventa bitona din n elemente Doua elemente formeaza o secventa bitona Orice secventa nesortata este o concatenare de secvente bitona de lungime 2 Ideea de sortare: Combinarea intr-o secventa mai larga pana se obtine o secventa bitona de lungime n

Fazele sortarii prin interclasarea de secvente bitone

Algoritm de sortare bazata pe interclasarea de secvente bitone


Conventii:
A[0:n-1] este tabloul de intrare; d este un parametru binar specificnd ordinea crescatoare (d = 0) sau descrescatoare (d = 1) a cheilor de sortare; COMP_EX(x,y;d) desemneaza operatie primitiva care aranjeaza doua numere x si y n ordine crescatoare sau descrescatoare depinznd de d.

Algoritmul Batcher de sortare bitonica


proc sortare_bitonica(A[i:i+b-1],d) begin if (b = 2) (A[i],A[i+1]) = COMP_EX(A[i],A[i+1];d)

else sortare_bitonica(A[i:i+b/2-1],0);

sortare_bitonica(A[i+b/2:i+b-1],1); interclasare_bitonica(A[i:i+b-1],d);
end

Algoritmul Batcher de interclasare a doua secvente bitone


proc interclasare_bitonica(A[i:i+b-1],d) begin if b = 2 (A[i],A[i+1]) = COMP_EX(A[i],A[i+1];d) else

for all j:0 j < b/2 do (A[i+j],A[i+b/2+j]) = COMP_EX(A[i+j],A[i+b/2+j];d); interclasare_bitonica(A[i:i+b/2-1],d); interclasare_bitonica(A[i+b/2:i+b-1],d)


end

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