Documente Academic
Documente Profesional
Documente Cultură
SD C5 Cautare PDF
SD C5 Cautare PDF
V. Cautare
1. Generalitati
2. Cautare secventiala
3. Cautare in vectori ordonati
4. Cautare in arbori binari
Lista simplu inlantuita: primn – prima inreg.; nextn – legatura la urmatoarea inreg.
v = primn, i = 1, p = 0 (posadr = Λ)
cat timp v ≠ Λ
daca cheie(v) = K
atunci p = i, (posadr = v) v = Λ
altfel i = i + 1, v = nextn(v)
daca p = 0
atunci cautare fara succes
altfel cheie gasita in pozitia p (cheie gasita la adresa posadr)
2. Cautare secventiala
Evitarea dublei conditionari a terminarii algoritmului: adaugarea la lista simplu
inlantuita a unui ultim element ce contine cheia K
Pas 1: adauga ca ultima inregistrare o inregistrare cu cheia K, R este prima
inregistrare, i = 1
Pas 2: cat timp cheie(R) ≠ K, R este urmatoarea inregistrare, i = i + 1
Pas 3: daca R este ultima inregistrare atunci cautare fara succes altfel cheia este
gasita in pozitia i
Ex. pt vectori
n = n + 1, K[n] = K, i = 1
cat timp K[i] ≠ K
i=i+1
daca i = n
atunci cautare fara succes
altfel cheie gasita in pozitia i
2. Cautare secventiala
Ex. lista simplu inlantuita
daca primn = Λ
atunci cautare fara succes
altfel
GETCEL(w), cheie(w) = K, nextn(w) = Λ
v = primn
cat timp nextn(v) ≠ Λ
v = nextn(v)
nextn(v) = w
v = primn, i = 1
cat timp cheie(v) ≠ K
v = nextn(v), i = i + 1
daca next(v) = Λ
atunci cautare fara succes
altfel
cheie gasita in pozitia i (la adresa v)
2. Cautare secventiala
• Structura cu cheie multipla
Rezultatul cautarii: vector p care contine identificarile inregistrarilor care au
valoarea cheii egala cu K.
Cautare fara succes: dimensiunea vectorului 0.
q = Λ, p = R
cat timp p ≠ Λ si cheie(p) ≠ K
q=p
daca K < cheie(p)
atunci p = llink(p)
altfel p = rlink(p)
daca p = Λ
atunci eroare cheie absenta
altfel
daca p = R
atunci
daca llink(p) = Λ
atunci R = rlink(p), q = Λ
altfel R = llink(p), q = R, p = rlink(p)
altfel
4. Cautare in arbori binari
Eliminarea nodului cu cheia K: (continuare)
altfel
daca llink(p) = Λ
atunci
daca K < cheie(q)
atunci llink(q) = rlink(p)
altfel rlink(q) = rlink(p)
q=Λ
altfel
daca K < cheie(q)
atunci llink(q) = llink(p)
altfel rlink(q) = llink(p)
q = llink(p), p = rlink(p)
daca q ≠ Λ
cat timp rlink(q) ≠ Λ
q = rlink(q)
rlink(q) = p