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 timpul creste liniar cu n
 Performanta cautarii liniare: in medie un element este gasit dupa
parcurgerea a jumatate din elementele tabloului O(n/2)
 Reducerea timpului de executie se poate obtine prin reducerea numarului de
operatii efectuate in fiecare ciclu

SDA curs3 I INFO 2015/2016 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 elementul
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 INFO 2015/2016 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 INFO 2015/2016 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 INFO 2015/2016 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 INFO 2015/2016 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)/2; //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 INFO 2015/2016 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)->performanta

 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 INFO 2015/2016 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 INFO 2015/2016 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.


 Alte variante

SDA curs3 I INFO 2015/2016 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 foarte 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 INFO 2015/2016 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 valoare 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 INFO 2015/2016 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;
record tab[N];
pa=tab;
a.nume_tip1=….;
pa->nume_tip1=…;
tab[0].nume_tip1=…;
 Daca componentele unui tip articol sunt la randul lor structurate, accesul se
realizeaza prin concatenarea selectorilor
a.nume_tipk[i]=…;
 Selectia prin identificatori de camp ( nume de camp) este o selectie fixa,
realizata in urma unor elemente cunoscute inca in faza de compilare; selectia
dinamica nu este posibila
SDA curs3 I INFO 2015/2016 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 instructiuni care


permit scurtarea timpului de acces la componentele unui articol.

SDA curs3 I INFO 2015/2016 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} tip;
typedef struct{
tip fel;
union {
int x, y;
float r, fi;
}coord;
} coordonate;
coordonate c;
c.fel=cartezian;
c.coord.x=…;

SDA curs3 I INFO 2015/2016 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 INFO 2015/2016 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 INFO 2015/2016 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 INFO 2015/2016 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 eliberat
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 INFO 2015/2016 18


Reprezentarea tablourilor

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


realizeaza prin transformarea lui intr-un tablou avand drept
componente unitati de informatie, situate intr-o 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 ( biti, 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 de unitati de informatie la urmatorul intreg se
numeste aliniere ( umplere)

SDA curs3 I INFO 2015/2016 19


 Factor de umplere:
u= cantit de memorie necesara/ cantitate de memorie utilizata
 In alocarea memoriei 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 exista posibilitatea ca in
cadrul aceleiasi unitati de informatie sa se pastreze mai multe
componente, in urma unui proces de impachetare; accesul la o
componenta a unei structuri impachetate presupune atat determinarea
adresei j a unitatii de informatie, cat si adresa relativa k in cadrul
unitatii
 Solutie: pastrarea structurilor impachtate si despachetarea lor inainte
de utilizare

SDA curs3 I INFO 2015/2016 20


Reprezentarea articolelor

 Metoda de structurare fiind prin agregare , componentele avand tipuri


diferite, sunt necesare:

SDA curs3 I INFO 2015/2016 21

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