Professional Documents
Culture Documents
00ASP Baza Pitanja
00ASP Baza Pitanja
1. U kojim slučajevima program koji implementira algoritam složenosti O(NlogN) može biti brži od
programa koji implementira algoritam složenosti N?
Primjer ovakog ponašanja bi bio Insertion sort koji ima složenost O(n2), ali za mali ulaz skoro
sortiranog niza će imati kraće vrijeme izvršavanja u usporedbi sa sofisticiranijim algoritimima za
sortiranje koji su O(nlogn).
Osnovne operacije reda su enqueue koja dodaje element na kraj liste i dequeue koja briše element sa
početka liste
Promatramo najgori slučaj. Ako unesemo n > 8 unutarnja for petlja će se sigurno izvršiti n puta nakon
čega ćemo postaviti n na 8 izaći iz while petlje. Druga for petlja će se bez obzira na početnu vrijednost
„poznat broj puta“ što je O(1). Ukupna vremenska složenost je onda O(n)
4. Napisati program koji za uneseni prirodni broj izračuna zbroj njegovih znamenki i onda to
rekurzivno ponavlja sve dok ne dobije kao rezultat jednoznamenkasti broj.
65530->19->10->1
5.Napisati program koji ispiše samo suglasnike unesenog stringa obrnutim redoslijedom
7.Imamo sustav koji ima 2048 bita, zapisuje nešto, prva dva su ključ, čitanje brzo, izmjena spora.
Koji sort bi koristili ?
Koristila bi selection sort jer je on najpogodnijii algoritam kada su zamjene skupa operacija. Selection
sort će izvršiti max O(n) zamjena
8. Što bi mogao biti pivot (i zašto) ako se nakon prvog koraka quick sorta polje nalazi u sljedećem
stanju:
polje: 3 0 2 4 5 8 7 6 9
Nakon prvog particioniranja svi elementi manji od pivota su lijevo od njega,a svi veći desno
9. Kako izgleda polje nakon prvog koraka particioniranja ako sortiramo quick sortom.
polje: 4 8 1 6 3 7 2 5
34125678
binarno-pretraživanje O(logn)
Ako nam je ulaz manji od 10 for petlja će se izvršiti n puta, s druge strane ako je n > 10 uvijek će se
izvršiti točno 10 puta. S obzirom da neovisno o veličini ulaza znamo točan broj izvršavanja radi se o
O(1)
Rekurzija je inače sporija od iteracije zbog overhead prilikom pozivanja, u ovom konkretnom slučaju
rekurzija za Fibonacci je sporija jer više puta računa iste vrijednost.
//kod
2. while(n>1){
for(i = 0; i < n; i++){
n = 1;
Promotrimo najgori slučaj. Ako unesemo n > 1 ulazimo u for petlju koja će se izvršiti samo jednom jer
ćemo odmah n postaviti na 1 izaći iz for petlje, a zatim i iz whilea. Složenost je O(1)
14. Navedi koje su tvrdnje točne za gomilu koja je max heap i implementirana pomoću polja
Red je lista kojoj se elementi ubacuju na kraj liste, a izbacivanje elemenata se vrši s početka liste.
U kružnoj listi imamo head koji pokazuje na prvi element i svaki dodavanjem elementa pomičemo naš
tail, također tail->next uvijek pokazuje na head.
----------------------------------------------------------------------------------------------------------------------------------
Red također možemo implementirati sa statičkim polje, kružnim poljem ili vezanom listom.
Sa statičkim poljem definiramo dovoljno veliko polje i glavu postavimo na 0, a rep na 1. Kako
dodajemo elemente pomičemo rep, a glava je fiksna, ali svaki put kad brišemo elemene s početka
potrebno je sve elemente prije pomaknuti naprijed za jedan što je prilično neučinkovito.
Sa kružnim poljem kada dodajemo element pomičemo rep kao i prije, ali sada kada brišemo
elemente pomičemo i glavu. Kada nam glava i rep pokazuju na istu poziciju znamo da je polje prazno i
treba paziti da glava ne ode poslije repa.
Prednosti i mane
Ako realiziramo red pomoću vezane liste treba nam više memorije (i za pokazivač) s druge strane
zauzme točno onoliko memorije koliko ima i podataka. Kapacitet je ograničen samo raspoloživom
memorijom. U realizaciji kružnim poljem i vezanom listom vrijeme izvršavanja osnovnih operacija je
O(1)
17. Odredi O notaciju
18. Objasni prednosti i mane implementacije liste poljem u odnosu na vezanu listu.
Listu možemo implementirati na dva načina. Koristeći polje ili vezanu listu.
S poljem:
Elementi su spremljeni jedan iza drugog i imamo pokazivač na zadnji element. Prednosti su
što je lagano izabacivanje i ubacivanje na kraj liste i pristup i-tom elementu. Mana je što
izbacivanje i ubacivanje elemenata u unutrašnjost zahtjeva pomicanje svih ostalih elemenata.
Također duljina liste je ograničena veličinom polja.
S vezanom listom:
Imamo čvorove koji sadrže elemente i pokazivače na idući. Imamo header koji pokazuje na
prvi element, a sam po sebi ne sadrži element. Zadnji element pokazuje na null. Prednosti su
što lako ubacujemo i dodajemo elemente po cijeloj duljini liste, a mana je da bi pristupili i-
tom elementu moramo proći čitavu listu.
a) for(i=0;i<n;i++){
if(i==n){ nesto;
break;
} O(log n)
b)
while (n>1){
if(nesto ){
n=n-4;
printf(“%d\n”,n);
} O(n)
}
20. Zadano je polje A[N]. A[N] je tipa char i N je tipa char. Napisati kod koji sortira po veličini od
najmanjeg do najvežeg koristeći što manje zamjena i mjesta skip skip...vraga bilo je na prvom kol
2019
21. Program sprema IP adrese koje su pristupile sustavu zajedno sa vremenom i datumom pristupa
u kružni buffer veličine 64KB. Koliko otprilike zapisa pristupa se može upisati prije nego se počnu
brisati najstariji zapisi. Osim povećanja veličine kružnog buffera, što još možete napraviti da
povećate broj zapisa koji se mogu čuvati? ništa ovo
// po našim kalkulacijama jedna IP adresa ima 4 broja koji zauzimaju po 8 bitova, dakle jedna
IP adresa zauzima 4 bajta ukupno. Googlali smo da se vrijeme i datum sprema u 32-bitni integer (on
zauzima 4 bajta). Prema tome jedan zapis u ovom zadatku zauzima 8 bajtova. 64 kilobajta je 64*1024
bajtova, ako to podijelimo s 8 dobijemo traženi rezultat: 8 *1024 = 8192 zapisa
a. for(i=0;i<n+123;i++)
if(i==123){
printf(“Nešto”);
break;
b. while(n>1){
n=n/3;
printf(“%d”,n);
23. Koliko najviše, a koliko najmanje razina/visina binarnog stabla pretraživanja sa N elemenata1
Deletemin – O(logn):
Insertmin – O(logn):
28. Ako je gomila (npr. max heap) implementirana poljem, što vrijedi – ovo sam već imala jbga
29. Napiši funkciju koja ispisuje sve parne elemente binarnog pretraživanja, od najvećeg do
najmanjeg
30. Objasni heap sort
Za insert n puta nam treba O(nlogn), za izbrisati n puta nam treba O(n logn), za kopirati n puta nam
treba O(n) što je ukupno O(NlogN) operacija
Nakon svake operacije deleteMin gomila se smanji za jedan element, odnosno zadnje polje
ostane slobodno. To zadnje polje iskoristimo da pohranimo izvučeni element. Na kraju
imamo polje sortirano od većeg prema manjem. Ako želimo sortirati u padajućem redoslijedu
koristimo min heap, a za rastući max heap.
je t
35. Napiši program koji izračunava najveći element u polju koristeći strategiju podijeli pa vladaj.
Objasni O notaciju
38. Nacrtati binarno stablo pretraživanja koje se dobije ako ubacimo (insert) redom slijedeća slova:
ACBDGEIHF
39. Navesti ispis koji se dobije inorder, preorder i postoreder obilaženjem stabla
41. Na koliko načina se može konstruirati binarno stablo od 4 cvora ako svi imaju jednaku vrijednost
42. Konstruirati stablo iz rijeci ALGORITMI i pretražiti stablo sa inorder, preorder i postorder
43. Ocjene koje su studenti ostvarili na KZ zapisani su u vezanoj listi. Napisati program koji ispisuje
studente koji su ostvarili natprosječan uspjeh.
44. Napisati program koji vraća 1 ako je binarno stablo ujedno i stablo pretraživanja
46. Napiši iterativan i rekurzivan kod koji zbara brojeve do unesenog N ( s time da parne oduzima, a
neparne zbraja
Kolike su složenosti, je li moguće algoritam riješiti sa složenošću O(1) i kako ?
51. Postoji server na koji se spajaju korisnici. Želimo sadržati ip adresu, datum i vrijeme. Kako bismo
to zapisali ? u strukturu podatka
52. Može li se program sa složenošću O(n3) brže sortirati od O(n) u nekom slučaju ? da objašnenje
prvog zadatka
53.Nacrtati binarno stablo pretraživanja koje se dobije ako ubacimo (insert) redom sljedeća slova:
HRVATSKI
58. Kako izgleda polje 5 3 8 9 1 7 0 2 6 4 ako nakon prvog koraka particioniranja quick sorta ako se za
stožer uzme element 5 ?
59.
60. Koja je O notacija ?
a) for (i=0;i<n;i++){
if(a[i] == i){
printf("%d",a[i]);
break;
b) while (n>1){
for(i=0;i<n;i++) printf("%d",i);
n=1;
for(i=0;i<2*n;i++){
printf("%d",i);
60. Napiši rekurzivnu funckiju zbroji2(N) koja vraća zbroj potencija 1*1 + 2*2 +...+N*N
61. Koja je O notacija:
if(a[i] == n)
break;
62. Objasni ili nacrtaj kako bi implementirali stablo s promjenjivim brojem djeve u memoriji.
Obrazloži
64.
Struktura podataka iz koje možemo dodavati ili brisati elemente s pocetka i kraja, ali ne i u sredini:
a. vezana lista
b. red DA
c. stog
d. deque DA
b)
...
n=n/4;
65.
Koliko ima cvorova stabla s n razina?
Ako nije binarno moze imati max beskonacno,a min n+1(jer razine pocinju od 0),a binarno moze imat
max 2^(n+1) - 1,a min n+1