1 / 38

Osnovi računarstva II

Osnovi računarstva II. Algoritamski koraci - ciklus Složenost algoritma. Selekcija (nastavak).

Download Presentation

Osnovi računarstva II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Osnovi računarstva II Algoritamski koraci - ciklus Složenost algoritma

  2. Selekcija (nastavak) • Selekcija može biti još složenija. Jedne naredbe se izvršavaju ako je prvi uslov zadovoljen; druge naredbe se izvršavaju ako prvi uslov nije zadovoljen, a drugi uslov jeste; treće naredbe se izvršavaju ako prva dva uslova nijesu zadovoljena, a treći uslov jeste. Ako nijedan od pobrojanih uslova nije zadovoljen izvršava se INAČE dio. • Da bi ovo ilustrovali, posmatrajmo slučaj određivanja korijena kvadratne jednačine. Neka je kvadratna jednačina koja se rješava AX2+BX+C=0 i neka su zadati koeficijenti A, B i C.

  3. Selekcija - Primjer • Rješenja ove jednačine zavise od diskriminante B2-4AC. Ako je diskriminanta veća od nule i A0kvadratna jednačina ima dva rješenja: • Ako je diskriminanta jednaka nuli, B2-4AC0, i A0, onda postoji jedno rješenje: X=-B/(2A) • Ako je diskriminanta manja od nule, a A0, jednačina nema rješenja u skupurealnih brojeva.

  4. Selekcija - Primjer • Ako je A0 i B0 postoji jedno rješenje X=-C/B. • Ako je A0 i B0 i C0 nema rješenja. • Ako je A0 i B0 i C0 rješenje je trivijalno, odnosno, svako X je moguće rješenje.

  5. NE START NE A0B0 B*B-4*A*C0A0 DA DA A,B,C:FLOAT X1,X2,X:FLOAT X=-C/B X=-B/(2*A) X X A,B,C NE B*B-4*A*C>0A0 DA NE B0C0 NE X1=(-B+KvKor(B*B-4*A*C))/(2*A) B*B-4*A*C<0 DA DA X2=(-B-KvKor(B*B-4*A*C))/(2*A) “Trivijalno” “Nema rješenja” “Nema rješenja” X1,X2 END Pretpostavljamoda je KvKorfunkcija koja daje kvadratni korjen. Sami napišite pseudokod za ovaj algoritam.

  6. Ciklus • Određeni broj algoritamskih koraka koji se ponavlja više puta se naziva ciklusom. • Postoji više tipova ciklusa: • ciklusi koji se ponavljaju tačno određen broj puta • ciklusi koji se ponavljaju dok je ispunjen određeni logički uslov. U zavisnosti od mjesta u ciklusu gdje se logički uslov provjerava imamo: • cikluse sa izlazom na početku • cikluse sa izlazom na kraju • cikluse sa izlazom u sredini • Svi ciklusi se mogu svesti na ciklus sa izlaskom na početku!

  7. Ciklus sa unaprijed zadatim brojem izvršavanja • Određenu operaciju treba ponoviti N puta gdje je N unaprijed zadat broj • Koristi se brojačka varijabla • Najčešće korišćeni tip ciklusa • Primjeri: • Unos N elemenata niza • Računanje zbira elemenata niza dužine N FOR I=1,N ... NEXT

  8. Primjer: Unos elemenata niza • Broj elemenata niza mora biti unaprijed poznat • U jednom ulaznom koraku može se učitati samo jedan element niza INPUT N FOR i = 1,N INPUT X[i] NEXT

  9. Primjer: Računanje zbira prvih N prirodnih brojeva • Rezultat je u varijabli S • Inicijalizacija sume (S=0) • Podrazumijeva se da je N poznat prije izvršavanja navedenih koraka i da je suma S iskorišćena u nastavku algoritma.

  10. Primjer: Računanje zbira prvih N prirodnih brojeva • Alternativno rješenje bez upotrebe ciklusa • Smanjeni broj računskih operacija • Zahtijeva detaljniju analizu posmatranog problema

  11. Ciklus sa izlazom na početku • Broj ponavljanja ciklusa može biti 0 (na samom početku uslov nije zadovoljen) • Primjena: • Polazimo od mogućeg rješenja problema i popravljamo ga u svakoj iteraciji (ciklusu) sve dok ne budemo zadovoljni WHILE uslov ... ENDWHILE

  12. Ciklus sa izlazom na kraju • Broj ponavljanja ciklusa je najmanje 1 • Primjena: • Unos podataka koji moraju zadovoljiti postavljene kriterijume • Primjer: od korisnika tražimo unos pozitivnog cijelog broja DO ... WHILE uslov

  13. Ciklus sa izlazom u sredini • Dio ciklusa mora biti izvršen a nakon toga se donosi odluka da li nastaviti sa izvršavanjem drugog dijela • Svaki ciklus se može svesti na ciklus sa izlazom na početku DO ... IF uslov THEN EXITDO ... LOOP

  14. Ciklus – Primjer 2 • Kao primjer ciklusa (onog koji se izvršava nepoznat broj puta, odnosno,dok je zadovoljen određeni logički uslov) navodimo Njutnov algoritam za približno određivanje kvadratnog korijena realnog broja. • Korak 1.Neka tražimo kvadratni korijen broja X. Kao početno pogađanje njegovog kvadratnog korijena uzmimo G=X/2. Izračunajmo broj H kaoH=X/G. • Korak 2. Ako su H i G veoma slični to znači da je H*G približno jednako X, odnosno da su G i H približno jednaki kvadratnom korijenu broja X. • Korak 3. Ako nijesu približno jednaki onda treba uzeti da je novo G jednako G=(G+H)/2 i ponovo sračunati H kao H=X/G. • Koraci 2 i 3 se ponavljaju dok se ne dođe do rješenja.

  15. CiklusKvadratni korijen X,G,H realni brojevi X,G,H: FLOAT

  16. Ciklusi i selekcija • Unutar jednog ciklusa se može nalaziti proizvoljna sekvenca naredbi. • Nekoliko ciklusa mogu jedan za drugim da čine sekvencu. • Unutar ciklusa se može nalaziti selekcija. • Unutar selekcije se može nalaziti ciklus. • Unutar selekcije se može nalaziti druga selekcija • Unutar ciklusa se može nalaziti drugi ciklus (to se naziva ugnježdenje ciklusa). • Važno pravilo je da se prvo završava unutrašnji dio (unutrašnji ciklus ili selekcija), pa tek onda spoljašnji, tj. ciklusi i selekcije se ne mogu sjeći.

  17. Primjeri za vježbu - Matrice • Matrice su izuzetno pogodne za uvježbavanje do sada naučenih elemenata algoritama. • Evo vam nekoliko zadataka za vježbanje: • Sabiranje, oduzimanje i množenje dvije matrice, sa provjerom da li im dimenzije omogućavaju ove operacije. • Odrediti sumu (ili proizvod) elemenata matrice; • Odrediti maksimalni (ili minimalni) element matrice; • Kreirati vektor koji se sastoji od zadate vrste (ili kolone) matrice; • Odrediti sumu (ili proizvod) svih kolona (ili vrsta) matrice.

  18. Primjeri za vježbu - Matrice • Kreirati vektor koji se sastoji od elemenata matrice sa glavne (ili sporedne) dijagonale; • Provjeriti da li su učitane kvadratne matrice inverzne; • Sračunati trag matrice (trag matrice je suma elemenata glavne dijagonale matrice); • Provjeriti da li je matrica simetrična; • Odrediti transponovanu matricu date matrice, i slično.

  19. Složenost algoritama • Broj operacija potreban da se algoritam izvrši od početka do kraja • Memorijski zahtjevi algoritma • U najjednostavnijim primjerima broj operacija i memorijski zahtjevi algoritma su konstantni • učitati tri broja A, B i C i izračunati izraz 2A+B/C • broj računskih operacija je 3 • 4 memorijske lokacije su iskorišćene (3 za ulazne podatke i jedna za rezultat) • pod memorijskom lokacijom se smatra memorija dovoljna za pamćenje jednog “broja”

  20. Složenost algoritama • Nijesu svi algoritmi koji rješavaju neki problem jednako kvalitetni. • Mjera kvaliteta algoritama je složenost. • Tipovi složenosti su: • Vremenska složenost • Koje vrijeme je potrebno za izvršavanje algoritma. • Proporcionalno je broju operacija (aritmetičkih, logičkih ili nekih drugih), koje algoritam izvršava. • Dakle, procjena vremenske složenosti se svodi na brojanje operacija u algoritmu.

  21. Složenost algoritama • Prostorna složenost • Podrazumjeva koliko prostora u memoriji zauzimaju podaci u algoritmu. • Određuje se sabiranjem veličine memorijskih lokacija koje zauzimaju promjenljive upotrijebljene u algoritmu. • Komunikaciona složenost • Određuje koliko je potrebno komunikacije procesora sa periferijama, diskovima i memorijom prilikom izvršavanja programa. • Posebno je značajna kod paralelnih kompjutera, kada razni procesori međusobno komuniciraju.

  22. Vremenska složenost • Mi ćemo se detaljnije zadržati na vremenskoj složenosti i donekle na prostornoj, dok komunikacionu nećemo razmatrati. • Pod vremenskom složenošću se podrazumjeva vrijeme izvršavanja algoritma koje je proporcionalno broju operacija u algoritmu vrijeme = broj operacijaxneki konstantni interval.

  23. Vremenska složenost • Teško je odrediti svaku operaciju u algoritmu, a teško je generalno i porediti operacije kao što su sabiranje i npr. operacije poređenja. • Uočeno je da, u pojedinim algoritmima, neka operacija dominira nad svim ostalim i da se češće upotrebljava. • Sada ćemo videti kako se broje aritmetičke operacije.

  24. Vremenska složenost • Kod sekvence se broje operacije na koje se naiđe. Na primjer, ako je dominantna operacija u algoritmu sabiranje:A=B+C+DE=A+FG=A*B • Kod selekcije se uzima varijanta sa više operacija:IF(A>3) B=A+B+3ELSE C=A+1ENDIF 3sabiranja i 1 množenje (kod prve naredbe postoje dva sabiranja). 2sabiranja (uzeta je gora varijanta)

  25. Vremenska složenost • Kod ciklusa se broj operacija tokom jednog izvršavanja ciklusa množi sa brojem ponavljanja ciklusa:I=1WHILE I12 A=A+B I=I+1ENDWHILE • Drugi primjer: I=1WHILE IN A=A+B I=I+1ENDWHILE ukupno 24 operacije (12 ponavljanja po 2 op.) ukupno 2N operacija

  26. Vremenska složenost • Ugnježdeni ciklusi:WHILE INWHILE JN .... J=J+1 ENDWHILE ... I=I+1ENDWHILE broj operacija proporcionalan sa N2

  27. Vremenska složenost • Što raditi kada ne postoji jedinstvena veza ulaznih podataka i složenosti? Postoje dvije strategije: • Analiza najgoreg slučaja (worst case analiza) • Uzme se najgori mogući slučaj i kaže se da algoritam ima toliku vremensku složenost u najgorem slučaju (ovo je češća strategija). • Analiza prosječnog slučaja (average case analiza) • Za svaki mogući obim ulaznih podataka treba znati koliko operacija je potrebno. Takođe, treba znati sa kojom se vjerovatnoćom taj podatak pojavljuje. Prosječan broj operacija je: Vjerovatnoća ulaznog podatka datog obima Obim ulaznog podatka

  28. Vremenska složenost • Za vjerovatnoće važi: • Primjer: Parni i neparni brojevi se pojavljuju u po polovini slučajeva. Obim operacija kod parnih brojeva je reda veličine N,dok je kod neparnih 2N. Što je najgori slučaj, a što je prosječni slučaj? • Odgovor: Najgori slučaj je 2N, dok je prosječni

  29. Vremenska složenost • Najčešće je veoma teško utvrditi kolika je tačna vremenska složenost, ali se može procijeniti red veličine broja potrebnih operacija. • Neka je potreban broj operacija za računanje algoritma g(N). Kaže se da je broj operacija reda W(f(N)) ako važi: Skup pozitivnih realnih brojeva (ne uključuje nulu i beskonačno) je reda W(N 2) Primjer:g(N)=6N2 +3N +1

  30. Složenost algoritama • Postoji i često korišćena oznaka O(f(N)), kod koje je dozvoljeno da konstanta c bude jednaka nuli. • To znači da je red potrebnih operacija manji ili jednak od date procijenjene vrijednosti (ovo dobro odgovara worst case analizi).

  31. Krećemo od 1 i sabiramo sa 2, 3, 4, 5, 6 i dobijamo 21, dakle jedno rješenje je niz 1, 2, 3, 4, 5 i 6. U narednoj iteraciji počinjemo od 2, jer postoji mogućnost da i sa tim brojem kao početnim imamo niz uzastopnih brojeva, koji daju sumu 21. Formiramo zbir 2+3+4+5+6+7 i taj je zbir veći od 21, dakle pošto mu je suma veća od 21 ne postoji niz uzastopnih prirodnih brojeva koji počinje sa 2 i daje zbir 21. Nastavljamo sa narednom iteracijom (broj 3). Zadatak sigurno ima jedno rješenje (niz od samo jednog prirodnog broja N) • Posmatrajmo sljedeći primjer: Za zadati prirodan broj N treba odrediti sve nizove uzastopnih prirodnih brojeva, čija je suma jednakaN. • Na primjer, ako je korisnik zadao N=21, treba da budu prikazani sljedeći nizovi:1, 2, 3, 4, 5, 66, 7, 810, 1121

  32. Analiza prethodnog primjera • Koji su podaci i koja je struktura ovakvog programa? • Učitavamo N. • U jednoj petlji idemo od K=1 do K=N. • Svaki put u petlji inicijalizujemo sumu S na S=K, jer za svako K pretpostavljamo da može da bude prvi element niza uzastopnih prirodnih brojeva čija je suma jednaka N. • U ugnježdenoj petlji na sumu S dodajemo uzastopne brojeve počevši od P=K+1 i ostajemo u petlji sve dok je ta suma S manja od N. • Ako je SN štampamo (prikazujemo) niz brojeva od K do P, a ako je S>N ne štampamo. • Zatim uvećamo K za 1 i ponovimo postupak. • Ovdje ćemo dati pseudokod ovog algoritma.

  33. Primjer - Nizovi koji daju sumu N STARTK,N,P,S,M:INTEGERINPUT NK=1WHILE KNS=K P=KWHILE S<N P=P+1S=S+PENDWHILE IF SN M=KWHILEMPOUTPUT M M=M+1 ENDWHILEENDIFK=K+1ENDWHILEEND

  34. Primjer - Nizovi koji daju sumu N Isti problem se može riješiti korišćenjem IF petlje STARTK,N,P,S,M:INTEGERINPUT NFORK=1,NS=K P=KWHILE S<N P=P+1S=S+PENDWHILE IF SN FOR M=K,POUTPUT M NEXTENDIFNEXTEND Primijetite da je algoritam čitljiviji ukoliko koristimo petlju sa poznatim brojem ponavljanja, kada je taj broj poznat.

  35. Primjer – Efikasnije rješenje • Naš cilj je da nađemo niz cijelih brojeva (K, K+1, ..., P) čija je suma jednaka N. Zapišimo ovaj niz kao: (K,K+1, ..., K+M). Njegova suma je jednaka: • Dakle, naš problem se svodi na rješavanje jednačine: sa parom rješenja (K,M) iz skupa prirodnih brojeva.

  36. Primjer – Efikasnije rješenje • Postavljeni problem se sada može riješiti efikasnije. • Formiramo petlju po M, koja ide od 0 (jer se niz može sastojati i od samo jednog člana K) ka nekom cijelom pozitivnom broju (vidjećemo koji je to broj). • Zatim se za posmatrano M provjerava da li postoji cijeli broj K koji je rješenje jednačine: • Ako postoji, onda se odštampa odgovarajući niz od K do K+M, a ako ne postoji posmatra se sljedeće M. Prethodna jednačina je riješena po K, koji predstavlja prvi u nizu brojeva koji se sumiraju.

  37. Primjer – Efikasnije rješenje • Problem koji trebamo pomenuti, prije nego pređemo na pisanje koda, su granice za M. Očigledno je, da je maksimalno M posljednje M za koje je zadovoljen uslov M(M+1)/2<N. Npr. za N=10 dovoljno je da petlja po M ide do 3, jer već za M=4 nije moguće ispunjenje prethodnog uslova. • Pseudokod realizacije: IF P-[P/(M+1)]*(M+1)0 K=P/(M+1) FOR R=K,K+MOUTPUT R NEXTENDIFM=M+1ENDWHILEEND STARTK,P,M,N,R:INTEGERINPUT NM=0WHILE M*(M+1)/2<NP=N-M*(M+1)/2

  38. Primjer - Komentari • Druga realizacija je, očigledno, znatno efikasnija. Isključujući dio za štampanje niza, čitav kod se odvija u jednoj petlji i npr. za N=10 samo se četiri puta ulazi u ciklus za M=0, 1, 2 i 3. Prva realizacija je zahtjevala dvostruki ciklus i 15 ulazaka u unutrašnju petlju. • Postoje mogućnosti da se još malo popravi efikasnost programa, uz neznatno više analize programa. • Dakle, nijesu sva rješenja jednog problema istog kvaliteta. • Bolja su ona rješenja koja daju manji broj potrebnih operacija. • Posebno je važno da analiza, koja vodi do razvoja “jednostavnijeg” algoritma, nije posebno složena.

More Related