АСП2/К1П 2012 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (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.
<syntaxhighlight lang="milo">
{{Милокод|<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;
</syntaxhighlight>
</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.
<syntaxhighlight lang="milo">
{{Милокод|<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;
</syntaxhighlight>
</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.

Stablo nakon svih umetanja
Stablo nakon svih brisanja

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:

  1. Objasniti kako i zašto metod transpozije optimizuje sekvencijalno pretraživanje.
  2. 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?
  3. Precizno definisati optimalno stablo binarnog pretraživanja.

Rešenje

  1. 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.
  2. [1]
  3. 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

  1. Ovo više nije gradivo K1