Sunteți pe pagina 1din 21

Aprecierea performantelor cautarii liniare

 Criteriul: numarul de comparatii efectuate pana la gasirea elementului cautat

 Caz particular: x pe pozitia i -> se efectueaza i comparatii, timpul de executie


proportional cu i
 Cel mai defavorabil caz: x pe pozitia N -> N comparatii

 In cazul in care elementul x se gaseste cu siguranta in tablou, numarul de


comparatii cel mai probabil este N/2 ( apreciere timp mediu)
 Denumirea de cautare liniara se datoreaza nu numai tehnicii de parcurgere
secventiala, dar si faptului ca t creste liniar cu timpul
 Performanta cautarii liniare: in medie un element este gasit dupa parcurgerea
a jumatate din elementele tabloului
 Reducerea timpului de executie se poate obtine prin reducerea numarului de
operatii efectuate in fiecare ciclu

SDA curs3 I IS 2009/2010 1


Metoda fanionului

 Simplificarea invaraiantului se poate realiza garantand cel putin o “potrivire” in


procesul de cautare, respectiv prezenta elementului x in tablou
 Se completeaza tabloul cu o locatie suplimentara, in care se plaseaza elemetul
cautat x

a[N+1]=x;
i=1;
while (a[i] != x)i++;
if(i>N) printf (“nu exista elementul cautat”);
else printf(“Elem cautat este pe poz %d”, i);

 Conditia de terminare: (a i = x) && ( Ak : 1 <= k < i: a k != x)

SDA curs3 I IS 2009/2010 2


Exemple

#define MAX 100


typedef struct {
int camp;
}record;
typedef record rec_tab[MAX];

cautare _liniara1(rec_tab data, int n, int cheie, int * pgasit, int* ploc)
{
*ploc=1;
while((*ploc<=n)&&(data[*ploc].camp!=cheie))
(*ploc)++;
*pgasit=(*ploc <(n+1));
}

SDA curs3 I IS 2009/2010 3


cautare _liniara2(rec_tab data, int n, int cheie, int * pgasit, int* ploc)
{
*ploc=1;
data[n+1].camp=cheie;
while((data[*ploc].camp!=cheie))
(*ploc)++;
*pgasit=(*ploc <(n+1));
}
 Varianta 2 elimina n teste in caz de cautare fara succes, respectiv i teste in
caz de cautare cu succes ( reducere a timpului cu 20-50%)
 Alte variante de reducere a timpului in cautarile liniare: pastrarea datelor
ordonate dupa cheie, ceea ce permite abandonarea cautarii la un moment
dat; pastrarea datelor ordonate dupa frecventa cu care sunt cautate(in
acest caz timpul mediu se reduce simtitor)

SDA curs3 I IS 2009/2010 4


Tehnica cautarii binare

 Procesul de cautare poate fi mult accelerat daca dispunem de informatii


suplimentare referitoare la organizarea datelor prezente in tablou
 Elementele tabloului sunt ordonate conform unui anumit criteriu:
Ak : 1< k <= N : a k-1 <=a k
Principiul cautarii binare: se compara elementul cautat x cu elementul aleator am.
daca am < x cautarea continua in intervalul care contine elemente cu indici mai
mari dacat m ;
daca am>x, cautarea continua in intervalul care contine elemente cu indici mai
mici decat m;
daca am == x , elementul a fost gasit si cautarea se opreste
Procesul se continua pana cand se gaseste elementul x sau intervalul in care se
executa cautarea devine vid.

SDA curs3 I IS 2009/2010 5


 indicii s si d precizeaza limita stanga si dreapta a intevalului

int s=1, d=N, gasit=0, m;


while ((s<=d) && ( !gasit) {
m=(s+d)/s; //orice valoare cuprinsa intre s si d
if ( a[m]==x) gasit=1;
else if (a[m]<x)s=m+1;
else d=m-1;
}
 Invariant: (s<=d)&&(Ak : 1<=k<s : ak< x)&&(Ak : d<k<=N : ak > x)

 Eficienta algoritmului este influentata de alegerea lui m: scopul urmarit


este de a reduce in fiecare pas intervalul in care se face cautarea

SDA curs3 I IS 2009/2010 6


 Daca fiecare intrare in ciclu asigura injumatatirea intervalului:
dupa prima trecere vor ramane N/2 elemente de procesat;
dupa k treceri vor ramane N/2k elemente de procesat
 Procesul continua pana la un interval care contine 1 element

N/2k < 1  N < 2k  log2 N < k (Notatia lg N)

 Numarul maxim de treceri : log2N (rotunjit superior)

 Tehnica cautarii binare, numita si bisectie, are la baza procesul


eliminarii : ori de cate ori se face o comparatie in procesul de cautare,
sunt posibile doua solutii pentru alegerea noului interval de cautare

SDA curs3 I IS 2009/2010 7


Cautare binara performanta

 Simplificarea invariantului prin renuntarea la conditia “!gasit”


Varianta1:

int s=1, d=N,m;


while (s<=d){
m=(s+d)/2;
if (a[m]<x) s=m+1;
else d=m-1;
}
if (a[m]==x) printf(“elem cautat se afla pe poz m”);
printf ( “nu exista elementul cautat”);

SDA curs3 I IS 2009/2010 8


Varianta 2:
int s=1, d=N+1, m;
while(s<d){
m=(s+d)/2;
if (a[m]<x) s=m+1;
else d=m;
}
if (d>N) printf (“elementul nu exista”)
if (d<=N)
if (a[d] == x) printf(“elem exista”);
else printf(“elem nu exista”);

 Cautarea binara performanta gaseste elementul x cu cel mai mic indice.

SDA curs3 I IS 2009/2010 9


Tehnica cautarii prin interpolare

 Cresterea performantei: determinarea cu mai multa precizie a intervalului in


care se face cautarea
cautare binara: m = s+( d-s)/2
cautare prin interpolare: m=s + (d-s) (x- a[s])/ (a[d]- a[s])
 In cazul unei distributii uniforme a elementelor, (x- a[s])/ (a[d]-a[s]) va
accelera procesul de cautare;
 numarul de treceri estimat :lg(lg (N))
Dezavantaje:
- depinde de distributia elementelor ; orice abatere afecteaza performanta
- este performanta pentru valori faorte mari ale lui N
Avantaje:
- se utilizeaza cand elem tabloului sunt structuri complexe
-pentru cautare externa, care necesita costuri suplimentare de acces

SDA curs3 I IS 2009/2010 10


1.4.3 Structura de date articol. TDA articol

 Se obtine prin agregare, respectiv prin reuniunea unor elemente apartinand


mai multor tipuri constitutive ( structurate la randul lor), intr-un tip complex,
structurat, numit articol ( inregistrare)
 Multimea de valori asociata unui tip articol: totalitatea combinatiilor posibile ale
valorilor tipurilor constitutive, selectand cate o singura valaore din fiecare tip
typedef struct{
tip1 nume_tip1;
tip2 nume_tip2;
.
tipn nume_tipn;
} record;
record a;

card(record)= card(tip1).card(tip2). .. card(tipn)

SDA curs3 I IS 2009/2010 11


 Articolul este o structura de date neomogena
 Selectia componentelor se realizeaza prin identificatorii de camp precizati la
definirea tipului si operatorii de selectie
record a, *pa;
a.nume_tip1=….;
pa->nume_tip1=…;
record tab[N];
tab[i].nume_tip1=…;
 Daca componentele unui tip articol sunt la randul lor structurate, accesul se
realizeaza prin concatenarea slectorilor
a.nume_tipk[i]=…;
 Selectia prin identificatori de camp ( nume de camp) este o selectie fixa,
realizata in urma unor elemente cunoscuate inca in faza de compilare; selectia
dinamica nu este posibila

SDA curs3 I IS 2009/2010 12


TDA articol

 I MM : colectie finita de elemente numite campuri, care pot sa apartina unor


TD diferite. Exista o corespondenta biunivoca intre lista identificatorilor de
campuri si colectia de elemente
 II Notatii:
a – instanta a tipului articol
id- identificator de camp
e- valoare a tipului asociat lui id
 III Operatori :
DepuneArticol(a, id, e)
FurnizeazaArticol(a, id)->e

Exemple de implementare. Unele limbaje de programare au instructii care


permit scurtarea timpului de acces la componentele unui articol.

SDA curs3 I IS 2009/2010 13


Articol cu variante

 Se utilizeaza cand doua sau mai multe tipuri de date e necesar a fi


definite drept variante ale aceluiasi tip
typedef enum {cartezian, polar};
typedef struct{
tip fel;
union {
int x, y;
float r, fi;
}coord;
} coordonate;
coordonate c;
c.fel=cartezian;
c.cood.x=…;

SDA curs3 I IS 2009/2010 14


 Pentru identificarea variantei curente s-a introdus discriminatorul de tip sau
campul selector
 Multimea valorilor tipului articol rezulta din reuniunea tipurilor constitutive;
cardinalitatea tipului articol este suma cardinalitatilor tipurilor constitutive
TYPE T =RECORD
s1:T1; s2:T2; s3:T3;….s n-1:T n-1;
CASE sn:Tn OF
c1:(s 1,1:T 1,1; s 1,2:T 1,2;…s 1,n1:T 1,n1);
.
Ck:(s k,1:T k,1; s k,2:T k,2;…s k,nk:T 1,nk);
.
C m:(s m,1:T m,1; s m,2:T m,2;…s m,nm:T m,nm);
END;
Si, sij - identificatori ; Sn – camp discriminator; C1…cm constante ale tipului Tn

SDA curs3 I IS 2009/2010 15


1.4.4 Structura de date multime. TDA multime

 Este un tip structurat fundamental, definit sau nu prin constructii sintactice:

TYPE TipMultime= SET OF T0;

T0 - tip de baza; Multimea valorilor lui To – multime de baza


multimea de valori pentru TipMultime= puterea multimii de baza

card(TipMultime)= 2 card (To)

Fiecare valoare din multimea de baza este “prezenta” sau “absenta” in fiecare
valoare asociata tipului multime.
O valoare a unei variabile de tip multime poate fi construita:
 Static- prin asignarea variabilei cu o constanta a tipului
 Dinamic- prin asignarea variabilei cu o expresie de calcul avand drept
operanzi multimi incadrate in acelasi tip de baza

SDA curs3 I IS 2009/2010 16


TDA multime

 I MM: elementele tipului multime apartin unui tip ordonat finit si sunt membre
ale unei multimi matematice
 II Notatii:
TipElement – tip de baza
S, T, V – multimi ale caror elemente apartin lui TipElement
e – valoare a lui TipElement; b- valoare booleana
III Operatori:
specifici (legi de compozitie):atribuire, reuniune, scadere, intersectie, negare;
relationali: egalitate, inegalitate, incluziune, etc
DepuneMultime(S,T);EgalitateMultime(S,T)->b;ApartineMultime(S,e)->b;
Submultime(S,T)->b;Reuniune(S, T)->V; Intersectie(S, T)->V

SDA curs3 I IS 2009/2010 17


1.4.5 Reprezentarea structurilor de date

 Un program poate fi conceput , realizat si verificat, in baza principiilor care


stau la baza nivelului de abstractizare utilizat. Utilizatorul este astfel elibarat
de detaliile legate de implementarea conceptelor abstracte la nivel fizic.
 Prin reprezentare se intelege exprimarea structurilor abstracte in termenii
tipurilor de date standard, implementate pe sistemul de calcul. La nivelul
reprezentarii se realizeaza corespondenta dintre structura de date abstracta si
memoria fizica.
 Memoria- tablou format din celule individuale numite locatii;
- indicii acestor locatii se numesc adrese;
- dimensiunea memoriei=cardinalitatea tipului adresa;
- locatiile de memorie sau multiplii acestora formeaza unitati de informatie
(unitati de memorie)

SDA curs3 I IS 2009/2010 18


Reprezentarea tablourilor

 Reprezentarea in memorie a unui tablou cu elemente de tip T se


realizeaza prin tansformarea intr-un tablou avand drept componente
unitati de informatie, situate intr- zona contigua de memorie
 Adresa i asociata componentei j a tabloului se poate afla daca se
cunoaste;
- adresa de inceput i 0 ( adresa de baza)
- dimensiunea s in unitati de memorie ( bitit, octeti, cuvinte) a
componentelor
i= io +(j-1)*s
 In multe situatii, dimensiunea unei componente nu este identica cu
dimesniunea unitatii de memorie, astfel incat anumite parti ale unitatii
de informatie pot ramane neutilizate in cadrul alocarii de memorie
 Rotunjirea numarului deunitati de informatie la urmatorul intreg se
numeste aliniere ( umplere)

SDA curs3 I IS 2009/2010 19


 Factor de umplere:
u= cantit de memorie necesra/ cantittate de memorie utilizata
 In alocarea emmoriei se realizeaza un compromis :
- aliniere, care reduce gradul de utilizare a memoriei
- renuntarea la aliniere, care conduce la acces ineficient la nivelul
componentelor
 In situatia in care factorul de umplere este 0.5 exita posibilitatea ca in
cadrul aceleiasi unitati de informatie sa se pastreze mai multe
componente, in urma unui proces de impachetare; accesul la o
component a a unei structuri impachetate presupune atat determinarea
adresei j a unitatii de informatie, cat si adresa relativa k in cadrul
unitatii
 Dolutie: pastrarea structurilor impachtate si despachetarea lor inainte
de utilizare

SDA curs3 I IS 2009/2010 20


Reprezentarea articolelor

 Metoda de structurare fiind prin agregare , air componentele avand


tipuri diferite, sunt necesare:

SDA curs3 I IS 2009/2010 21

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