jednostavni algoritmi i programiranje/e-student/009... · zits :: algoritmi i programiranje ::...
TRANSCRIPT
Algoritmi i programiranje
Jednostavni algoritmi
Prof. dr. sc. Tonči Carić
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Sadržaj
– Uvod
– Traženje najvećeg člana u polju
– Najveća zajednička mjera
– Izračun prim brojeva
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Neki problemi se često rješavaju
– Pretraživanje podataka
– Traženje najmanje ili najveće vrijednosti
– Množenje i inverz matrica
• Koriste se standardizirani algoritmi
– Optimizirani prema brzini i potrošnji memorije
• Laka prilagodba za različite vrste podataka i područja primjene
Uvod
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Svaki član polja označen indeksom
– Prvi član polja ima indeks 0
• Dovoljno pronaći indeks najvećeg člana
• Potrebno proći kroz cijelo polje
• Bitno zadati početnu vrijednost indeksa najvećeg člana polja
– Mora biti unutar zadanog polja
– Najbolje indeks prvog člana polja
• Složenost O(n)
– Potrebno n - 1 usporedbi
• Pretpostavka da je prvi član polja početni najveći član
Traženje najvećeg člana polja
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Pseudokôd
Unos
polje
Inicijalizacija
indeksNajvecegClana = 0;
Ponavljaj za svaki član polja
Ako polje[indeksNajvecegClana] < polje[indeks] indeksNajvecegClana = indeks;
indeks++;
– Varijabla indeksNajvecegClana sadrži indeks najvećeg člana polja nakon završetka petlje
Traženje najvećeg člana polja
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Dijagram toka
– Varijable
polje - podaci
i – brojilo za prolaz kroz cijelo polje
max – indeks najvećeg
člana polja
– Najveći član polja
polje[max]
Traženje najvećeg člana polja
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
Traženje najvećeg člana polja
Programski kôd
NajveciPolja
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Računa se za dva cijela broja
• Predstavlja najveći zajednički broj koji može podijeliti dva broja da ostatak bude 0
– Ako je NZM najveći broji za koji cjelobrojno dijeljenje a/NZM i b/NZM ima ostatak 0 tada je NZM najveća zajednička mjera između brojeva a i b
• Primjer • NZM (28, 14) = 14
• NZM (1029, 42) = 21
• NZM (13, 7) = 1
Najveća zajednička mjera
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Koraci algoritma
Najveća zajednička mjera
Korak I ponavlja se na način da se u svakoj
slijedećoj iteraciji izvrši rotacija sadržaja varijabli
na ovaj način
a”=b’, b”=c’, c”=a”%b”
sve dok c ne postane 0. Tada se u varijabli b
nalazi najveća zajednička mjera brojeva a i b
iz prve iteracije
• I korak – a’=1029, b’=42
– a’/b’=24,5
– 1029=42*24+21
– c’=a’%b’
– c’=21
Tražimo NZM(1029,42)
◦ Podijelimo a i b
◦ Ostatak pri dijeljenju je 21
◦ U c pospremimo cjelobrojni ostatak
II korak ◦ a”=42, b”=21
◦ c”=a%b
◦ c”=0
a b c
I korak 1029 42 21
II korak 42 21
NZM =21 ◦ 1029=49*21
◦ 42=2*21
◦ 1029/42=49/2
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Dijagram toka
– Varijable
a – prvi broj
b – drugi broj
c – ostatak cjelobrojnog dijeljenja a i b
– Rezultat sadržan u varijabli a uz uvjet b == 0 (Raptor b = 0)
Najveća zajednička mjera
b==0
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
Najveća zajednička mjera Programski kôd
NZM
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
Najveća zajednička mjera Programski kôd
• Rekurzivna implementacija
NZMrekurzija
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Prim broj je djeljiv samo sa 1 i samim sobom
• Primjer prim brojeva
– 2, 3, 7, 11, …
• Broj 4 djeljiv sa 1, 2 i 4
• Broj 6 djeljiv sa 1, 2, 3 i 6
• Prim brojevi bitni kod kreiranja zaporki i raspršenog adresiranja
– Minimiziran proboj algoritma generiranja zaporke
– Minimiziranje grupiranja podataka na malo mjesta
• Primjer kod automatiziranih skladišta
Izračun prim brojeva
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Ispituje se dali je varijabla n djeljiva sa svim brojevima manjim od sebe
Izračun prim brojeva Programski kôd
PrimBroj
• Dijeljenje sa 1 se ne ispituje • Svaki broj djeljiv sa 1
• Varijabla zastavica služi za detekciju prim broja
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Izbacuju se svi višekratnici prim broja
– Počinje se od
broja 2
– Eratostenovo
sito
Izračun prim brojeva
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
• Prim brojevi indeksi polja f
– Vrijednost polja f označava prim broj
• True -> indeks prim broj
Izračun prim brojeva Dijagram toka
1
1
ZITS :: Algoritmi i programiranje :: Jednostavni algoritmi © 2013 Carić, Ivanjko
Izračun prim brojeva Programski kôd
• Metoda
GenerirajPrimBrojeve vraća polje prim brojeva
– Varijabla brojac sadrži količinu prim brojeva
• Bitno za deklaraciju izlaznog polja
– Logička vrijednost polja f indicira prim broj (indeks)