АСП2/К1П 2012 — разлика између измена
м (Zapravo ispravka) |
м (Замена начина истицања милокода.) |
||
Ред 7: | Ред 7: | ||
=== Rešenje === | === Rešenje === | ||
Pretraživanje ide od početka niza K sa prvim ključem iz S dok se ne pronađe (i njegova pozicija zapamti u P) ili do prve veće vrednosti. Pretraživanje na sledeći ključ iz S počinje tamo gde se sa pretraživanjem na prethodni ključ stalo, pa se zato niz K prolazi samo jednom. Niz K je rastuće uređeni niz sa n ključeva koji se pretražuje na pojavu m ključeva zadatih u nizu S. Izlaz predstavlja vektor P gde se na poziciji koja odgovara ključu u nizu S nalazi pozicija ključa u nizu K, ako se on tamo pronađe, ili vrednost 0 ako se ne pronađe. Složenost ovog algoritma je O(n) za slučaj kada je m << n. | Pretraživanje ide od početka niza K sa prvim ključem iz S dok se ne pronađe (i njegova pozicija zapamti u P) ili do prve veće vrednosti. Pretraživanje na sledeći ključ iz S počinje tamo gde se sa pretraživanjem na prethodni ključ stalo, pa se zato niz K prolazi samo jednom. Niz K je rastuće uređeni niz sa n ključeva koji se pretražuje na pojavu m ključeva zadatih u nizu S. Izlaz predstavlja vektor P gde se na poziciji koja odgovara ključu u nizu S nalazi pozicija ključa u nizu K, ako se on tamo pronađe, ili vrednost 0 ako se ne pronađe. Složenost ovog algoritma je O(n) za slučaj kada je m << n. | ||
< | {{Милокод|<nowiki> | ||
SEQ-SEARCH-MUL(K,S) | SEQ-SEARCH-MUL(K,S) | ||
for(int i=0;i<m;i++) P[i] = 0; | for(int i=0;i<m;i++) P[i] = 0; | ||
Ред 17: | Ред 17: | ||
end_while | end_while | ||
return P; | return P; | ||
</ | </nowiki>}} | ||
== 2. zadatak == | == 2. zadatak == | ||
=== Postavka === | === Postavka === | ||
Ред 33: | Ред 33: | ||
=== Rešenje === | === Rešenje === | ||
Ukoliko čvor ima desnog sina, onda je njegov sledbenik najlevlji čvor u desnom podstablu, a ako nema, onda je njegov sledbenik najbliži predak čiji je levi sin takođe predak zadatog čvora. | Ukoliko čvor ima desnog sina, onda je njegov sledbenik najlevlji čvor u desnom podstablu, a ako nema, onda je njegov sledbenik najbliži predak čiji je levi sin takođe predak zadatog čvora. | ||
< | {{Милокод|<nowiki> | ||
BST-SUCC(k) | BST-SUCC(k) | ||
if(right(k) != nil) | if(right(k) != nil) | ||
Ред 46: | Ред 46: | ||
end_while | end_while | ||
return s; | return s; | ||
</ | </nowiki>}} | ||
== 4. zadatak == | == 4. zadatak == |
Тренутна верзија на датум 13. септембар 2024. у 01:09
Popravni prvi kolokvijum 2012. godine održan je 9. januara 2012. Postavka zadataka je dostupna sa stranice predmeta.
1. zadatak
Postavka
(30p) Predložiti adekvatnu strukturu podataka i detaljno navesti uslove njene upotrebe, a zatim skicirati algoritam za efikasnu pretragu na više celobrojnih ključeva nad neopadajuće uređenom tabelom. Smatrati da u tabeli ne postoje duplirani ključevi niti da se više puta vrši pretraga nad istim ključem.
Rešenje
Pretraživanje ide od početka niza K sa prvim ključem iz S dok se ne pronađe (i njegova pozicija zapamti u P) ili do prve veće vrednosti. Pretraživanje na sledeći ključ iz S počinje tamo gde se sa pretraživanjem na prethodni ključ stalo, pa se zato niz K prolazi samo jednom. Niz K je rastuće uređeni niz sa n ključeva koji se pretražuje na pojavu m ključeva zadatih u nizu S. Izlaz predstavlja vektor P gde se na poziciji koja odgovara ključu u nizu S nalazi pozicija ključa u nizu K, ako se on tamo pronađe, ili vrednost 0 ako se ne pronađe. Složenost ovog algoritma je O(n) za slučaj kada je m << n.
SEQ-SEARCH-MUL(K, S) for(int i=0;i<m;i++) P[i] = 0; i=j=1; while(i<=n) and (j<=m) while(i<n) and (S[j] > K[i]) i++; if(S[j] = K[i]) P[j] = i; j++; end_while return P;
2. zadatak
Postavka
(20p) U AVL stablo se redom umeću sledeći celobrojni ključevi: 13, 32, 14, 28, 15, 35, 44, 47, 22, 30, 24, 19, 20, a zatim se brišu ključevi 15, 30, 28, 24. Nacrtati izgled stabla nakon svake od navedenih izmena. Izračunati prosečan broj pristupa stablu za uspešnu pretragu nakon svih umetanja i u konačnom stanju.
Rešenje
Ukoliko želite da zadatak proverite korak po korak, to možete uraditi na linku.
Nakon svih umetanja:
Nakon svih brisanja:
3. zadatak
Postavka
(20p) Dati pseudokod i objasniti algoritam za određivanje sledbenika proizvoljno zadatog čvora u stablu binarnog pretraživanja.
Rešenje
Ukoliko čvor ima desnog sina, onda je njegov sledbenik najlevlji čvor u desnom podstablu, a ako nema, onda je njegov sledbenik najbliži predak čiji je levi sin takođe predak zadatog čvora.
BST-SUCC(k) if(right(k) != nil) p = right(k); while(left(p) != nil) p = left(p); return p; end_if p = parent(k), s = k; while(p != nil and right(p) = s) s = p; p = parent(p); end_while return s;
4. zadatak
Postavka
(30p) Pitanja:
- Objasniti kako i zašto metod transpozije optimizuje sekvencijalno pretraživanje.
- Ako se stablo binarnog pretraživanja koristi kao prioritetni red, objasniti kako izgedaju operacije PQ_INSERT i PQ_MIN_DELETE. Kolika je vremenska složenost ovih operacija?
- Precizno definisati optimalno stablo binarnog pretraživanja.
Rešenje
- Metod transpozicije optimizuje sekvencijalno pretraživanje tako što svaki put kada se traženi element nađe, on zameni mesto sa elementom levo od sebe i tako se priblližava početku niza. Time se obezbeđuje da su oni elementi kojima se češće pristupa bliže početku, pa pošto se sekvencijalno pristupa, i samo vreme pristupa tim elementima je skraćeno.
- [1]
- Optimalno stablo binarnog pretraživanja je ono stablo čija je cena najmanja, gde cenu definišemo kao: , gde su Pi verovatnoće pristupa ključevima Kn...Km, a Qi verovatnoće pristupa eksternim čvorovima. Osobina na kojoj se zasniva algoritam za nalaženje optimalnog stabla binarnog pretraživanja je da su sva podstabla optimalnog stabla pretraživanja takođe optimalna.
Napomene
- ↑ Ovo više nije gradivo K1