You are on page 1of 14

ASP

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?

Kada analiziramo vremensku složenosti algoritma promatramo krivulju brzine raste

Pa tako ako je Algoritam1 implementiran u O(nlogn), a Algoritam2 u O(n) može se dogoditi da je


ovisno o sadržaju ulaza ili nekom specifičnom slučaju Algoritam1 brži od Algoritma2. Možemo reći da
će postojati neki n0 nakon kojeg će ova „odstupanja“ prestati i da će vrijeme izvršavanja uvijek biti
kraće za algoritam sa manjim rastom.

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).

2.Koje su dvije osnove operacije reda?

Osnovne operacije reda su enqueue koja dodaje element na kraj liste i dequeue koja briše element sa
početka liste

3.Koja je složenost sljedećih dijelova koda?

for (i = 0; i < 2*n; i++){


for (j = 0; j < 3*n; j++){
if (a[i] == i){
printf(“ %d“, a[i]);
break;
}
}
}
O(n^2) jer imamo dvije ugniježđene for petlje i ignoriramo konstante
while (n > 8) {
for(i = 0; i < n; i++)
printf(“%d\n“,n);
n = 8;
}

for (i = 0; i < n; i++){


printf(“%d“, n);
n/=2;
}

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

Za uneseni string Rijeka vraća kjR

6. Napiši program za Fibonaccijev niz rekurzivno i iterativno


iterativno

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

pa pivot može biti 4, 5 ili 9

9. Kako izgleda polje nakon prvog koraka particioniranja ako sortiramo quick sortom.

polje: 4 8 1 6 3 7 2 5

ako odaberem za pivot 5

34125678

10. O notacija za složenost(worst-case)

binarno-pretraživanje O(logn)

heap sort O(nlogn)

quick sort O(n2)

selection sort O(n2)

insertion sort O(n2)

11. Koja je O notacija za

for(int i = 0; i < n; i++){

if(i == 10) break;

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)

12. Zašto je rekurzivna varijanta izračuna Fibonaccija sporija ?

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.

13. Koje su O notacije ?

1.for(i = 0; i < 2n; i++)

//kod

O(n) zbog jedne ugniježđene for petlje

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

->pronalazak roditelja je brza operacija DA NA POZICIJI 2I a kod MIN HEAPEA I/2

->Složenost upisivanja brojeva je O(n) NETOČNO UBACIVANJE JE INSERT O(LOGN)

->Gomila je potpuno binarno stablo TOČNO

->Svaki čvor je veći ili jednak od svoje 'djece' TOČNO

15.Objasni strukturu podataka red i objasni implementaciju pomoću kružne liste

Red je lista kojoj se elementi ubacuju na kraj liste, a izbacivanje elemenata se vrši s početka liste.

FIFO – First in, First Out

Osnovne operacije su dodavanje (enqueue) na kraj liste i brisanje s početka(dequeue).

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

for( i =0; i < n; i++ ) {

if( a[i] == i ) break;

} Radi se O(n) jer očigledno imamo prolaz kroz for petlju

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.

19. Odredi složenost O notacije

a) for(i=0;i<n;i++){

i*=2; // i = i*2, te je zbog toga logn

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

22. Odredite O notacije

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

Maksimalna visina stabla sa n čvorova je h = n -1

Minimalna visina h = log2(n+1) - 1

24. Maksimalan/min broj čvorova u binarnom stablu visine h je

Maksimalan broj čvorova visine n = 2^(h+1) – 1

Minimaln broj čvorova visine h je n = h + 1


25. Koje su osnove funckije gomile (heap) i njihova složenost?

Osnovne funkcije gomile(heapa) su:

Search min – O(1) – uvijek je u korijenu

Deletemin – O(logn):

brišemo najmanji element na način da kopiramo zadnji element u


korijen(pobrišemo korijen) i zatim pomičemo element prema dolje
uspoređujući ga sa najmanjim od dvoje djece.

Insertmin – O(logn):

dodajemo element na prvo slobodno mjesto najniže razine. Ako se svojstvo


gomile poremetilo radimo bubble up, tj mjenjamo element s roditeljem ako
je element veći.

26. Na što se ne može primjeniti binarno pretraživanje:

a. sortirana vezana lista (jer imamo i pokazivače)

b. sortirano binarno stablo

c. sortirano jednodimenzionalno polje

d. polje pokazivača – ne piše jel polje pokazivača sortirano!

27. Opiši slučaj u kojem je quick sort On2

Quick sort je On2 kada je pivot uvijek najmanji[najveći] element.

Najbolji slučaj je O(nlogn) kada je pivot uvijek srednji element.

28. Ako je gomila (npr. max heap) implementirana poljem, što vrijedi – ovo sam već imala jbga

a. gomila je potpuno stablo - DA

b.svaki čvor je već ili jednak od svoje djece - DA

c. operaija pronalaska roditelja je jednostavna (2i) – DA a u MIN heapu i/2

d. stvaranje gomile O(N) – DA ( insert je O(logn)

29. Napiši funkciju koja ispisuje sve parne elemente binarnog pretraživanja, od najvećeg do
najmanjeg
30. Objasni heap sort

Heap sort možemo implementirati sa pomoćnim poljem na način:

1. Izgradimo gomilu od N elemenata

2. Izvršimo N deleteMin Operacija ( elemente se izvlače sortirani i spremamo ih u pomoćno


polje)

3. Kopiramo nazad elemente iz pomoćnog polja

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

Drugi način bez pomoćnog polja:

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

31. Objasni ideju sortiranja bez uspoređivanja

Za uspoređivanje elemenata bez uspoređivanja koristimo bucket sort

35. Napiši program koji izračunava najveći element u polju koristeći strategiju podijeli pa vladaj.
Objasni O notaciju

37. Složenost BST-a i kosog stabla za findMin i findMax? ne znam

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

40. Iz zadanog prefix izraza ++a*bc*+*defg pronađi postfix izraz

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

45. findMin i findMax složenosti BST-a i koja je u slučajevima kosog stabla?

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 ?

47. Binarno pretraživanje koristimo za ?

48. Napiši pseudokod ili kod za osnovne operacije sa stogom//znam

49. Napiši pseudokod ili kod za osnovne operacija sa listom//znam

50. Napiši pseudokod binarnof pretraživanja i objasni

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

Napisati ispis koji se dobije inorder, postorder i preorder obilaženjem stabla

55. Postorder obilaskom stabla dobijemo E A C K F H D B G što dobijemo sa preorder ?

56. Koji od sljedećih uvjeta nije potreban za binarni algoritam pretraživanja ?

lista mora biti sortirana

srednjim elementima bilo koje podliste se može pristupati direktno

mora postojati način da se pobrišu ili ubace elementi u listu

niti jedan od navedenih

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:

for(i = 0;i < n;i++) {

if(a[i] == n)

break;

62. Objasni ili nacrtaj kako bi implementirali stablo s promjenjivim brojem djeve u memoriji.
Obrazloži

63. Rad sa stogom u statičkom polju

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)

for(i = 0;i < n;i++){

...

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

You might also like