predavanje 1planinic/nast/spa/spa1.pdfuvodno predavanje •znači želite se baviti računalima u...
TRANSCRIPT
Uvodno predavanje•Znači želite se baviti računalima u životu?
•Idemo natrag u osnovnu školu: Množenje dva broja
Mirko PlaninićPMF
Predavanje Predavanje 11
Želite se baviti računalima?
Da li je vaš cilj da postaneteobičan programer?
Ili veliki vođa i mislilac ?
Originalno razmišljanje
Šef daje zadatak:
– Zadane su današnje cijene svinjetine, žita …– Zna se koliko čega ide u hotdog.– Napravite najjeftiniji hotdog.
Industrija svakodnevno postavlja takva pitanja.
Vaš odgovor može biti:
• Hm? Recite mi što da isprogramiram.
Sa sve sofisticiranijim softwareskim sistemima,potreba za običnim programerima će nestajati.
Vaš odgovor može biti i:
• Naučio sam onaj super algoritam koji ću ovdje primjeniti.
Uskoro ćete sve poznate algoritme
moći naći u bibliotekama.
Vaš odgovor može biti:
• Mogu napraviti novi algoritam za vas.
Veliki mislioci će se
uvijek tražiti.
Budućnost pripada računalnom znalcu koji posjeduje
– Sadržaj: Najnoviji popis problema i rješenja– Metodu: Principe i tehnike za rješavanje
velikog skupa nepoznatih problema koji se pojavljuju u brzomijenjajućem području rada
Sadržaj kolegija
• Popis algoritama. – Naučite ih isprogramirati.– Budite sigurni da rade.– Primjenite ih. class InsertionSortAlgorithm extends SortAlgorithm
{
void sort(int a[]) throws Exception {
for (int i = 1; i < a.length; i++) {
int j = i;
int B = a[i];
while ((j > 0) && (a[j-1] > B)) {
a[j] = a[j-1];
j--; }
a[j] = B;
}}
Sadržaj Kolegija• Pregled tehnika stvaranja algoritama.• Apstraktno razmišljanje.• Kako razviti nove algoritme za bilo koji
problem koji može iskrsnuti.
Otklanjanje Bug-ova
Istraživanje:
• Programerima je dan zadatak da naprave binarno pretraživanje.
Istraživanje:
• Programerima je dan zadatak da naprave binarno pretraživanje.
80% ih je napravilo krivo
Sva sreća da nije bilo za nuklearnu elektranu.
Što im je nedostajalo?
Što im je nedostajalo?
• Formalne metode dokazivanja?
Što im je nedostajalo?
• Formalne metode dokazivanja ?
Da, vjerojatno ...
Industrija počinje shvaćati da su formalni dokazi
potrebni.
Ali i bez formalnih
metoda …. ?
Što im je nedostajalo?• Fundamentalno razumijevanje tehnika
stvaranja algoritama.• Apstraktno razmišljanje.
Sadržaj kolegija
Notacije, analogije, i apstrakcijeza razvijanje,
razmišljanje o, i opisivanje algoritama
Pitanja se smiju postavljati !
Pregled fundamentalnihideja i tehnika stvaranja
algoritama
Na primjer . . .
Počnimo s matematikom
Veličina ulaza
Vrije
me
Klasificirane Funkcijef(i) = nΘ(n)
Kompleksnost vremenat(n) = Θ(n2)
Jednostavno zbrajanje∑i=1 f(i).
Rekurzivne RelacijeT(n) = a T(n/b) + f(n)
Iterativni algoritmiInvarijantne petlje
<preCond> codeA loop
<loop-invariant>exit when <exit Cond>codeB
codeC<postCond>
i-1 i
ii0 T+1
9 km
5 km
Korak po korakCode Utrka
Rekurzivni algoritmi
?
?
Pohlepni algoritmi
Algoritmi DinamičkogProgramiranja
Redukcija
=
Korisne metode učenja
Čitajte unaprijed
Predavanja možete naći na web - u :www.phy.hr/~planinic/nastava/nastava.htmlTo olakšava diskusiju za vrijeme predavanja.
Objašnjavanje
• Morate znati objasniti stvar.
• Najbolje je da objašnjavate sebi i drugima glasno, pa čak i svojem punjenom medvjedu.
Dok dan traje ...
Razmišljajte (sanjarite)
Fizika nije uvijek linearnorazmišljanje.
Dopustite da sržmaterijala uđe u vašu
podsvijest.Isprobajte ideje koje
nastaju kao bljeskovi inspiracije.
Budite kreativni•Pitajte pitanja. • Zašto je to napravljeno na ovaj način ili drugi ?
Pogađanja i protuprimjeri
• Pogađajte potencijalne algoritme za rješavanje problema.
• Tražite one primjere ulaznih podataka za koje algoritam daje krive rezultate.
Ponovno podešavanje:Najbolje rješenje dolazi kad se proces
podešavanja algoritma ponavlja
Vratimo se u osnovnu školu:Kako ćemo množiti dva broja ?
2 X 2 = 5
Nekoliko primjera AlgoritamaNekoliko primjera Algoritama
Kompleksni brojevi•Sjećate se kako se množe kompleksni brojevi?
•(a+bi)(c+di) = [ac –bd] + [ad + bc] i
•Input: a,b,c,d Output: ac-bd, ad+bc
•Ako množenje realnih brojeva košta 1 kn a zbrajanje 1 lipu. Koji je najjeftiniji način da se dobije izlaz (output) pomoću ulaza (inputa)?
•Možete li izračunati za manje od 4.02 kn?
Gaussova metoda za 3.05 kn :Input: a,b,c,d Output: ac-bd, bc+ad
• X1 = a + b• X2 = c + d• X3 = X1 X2 = ac + ad + bc + bd• X4 = ac• X5 = bd• X6 = X4 – X5 = ac-bd• X7 = X3 – X4 – X5 = bc + ad
Pitanje:•Gausov “hack” štedi jedno od 4 množenja. Zahtjeva 25% manje posla.
•Postoji li neki primjer gdje izvođenje 3 množenja umjesto 4 daje dramatične uštede?
BonzoOdette
Kako zbrojiti 2 n-bitna broja ?
**
**
**
**
**
**
**
**
**
**
**+
Kako zbrojiti 2 n-bitna broja ?
**
*
* **
**
**
**
**
**
**
**
**
**+
Kako zbrojiti 2 n-bitna broja ?* **
* **
*
**
*
**
**
**
**
**
**
**
**+
Kako zbrojiti 2 n-bitna broja ?* **
* **
*
* **
*
**
*
**
**
**
**
**
**
**+
Kako zbrojiti 2 n-bitna broja ?* **
* **
*
* **
*
* **
*
**
**
*
**
**
**
**
**+
Kako zbrojiti 2 n-bitna broja ?* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
***
*
**
*
+*
*
Kompleksnostvremena običnog zbrajanja
**
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
* **
*
+*
*
* **
* T(n) = Vrijeme potrebno za zbrajanje 2 n-bitna broja= θ(n) = linearno u vremenu.
Na svakom računalu zbrajanje 3 bita se može napraviti u konačnom vremenu.
f = θ(n) znači da se f može staviti u sendvič između dvije linije
# broj bitova u brojevima
vr
i
j
e
m
e
Pitajte pitanja!
Rudich www.discretemath.com
Možemo li zbrajati brže?
• PITANJE: Postoji li algoritam koji zbraja dva n-bitna broja čije vrijeme raste pod-linearno s n ?
Svaki algoritam za zbrajanje mora pročitati ulazne bitove
– Pretpostavite da postoji misteriozni algoritam koji ne ispituje ulazne bitove
– Dajte algoritmu par ulaznih brojeva. Mora postojati neka bit lokacija i koju ne moramo ispitivati
– Ako algoritam ne radi na paru brojeva našli smo Bug
– Ako je algoritam ispravan, promijenite bit na položaju i i dajte mu novi par brojeva. Daje isti odgovor kao i prije znači da mora biti pogrešan jer se suma morala promijeniti.
Svaki algoritam za zbrajanje mora biti linearan s obzirom na veličinu broja.
Zbrajanje je najbolji mogući algoritam(ne može biti jednostavnije).
Kako množiti 2 n-bitne brojeve.
X * * * * * * * * * * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * * * * * * * * * *
n2
Kako množitiKako množiti 2 n2 n--bitbitnana broja?broja?
X * * * * * * * * * * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * ** * * * * * * *
* * * * * * * * * * * * * * * *
n2
Aha! Ukupno vrijeme je ograničeno s cn2.
Zbrajanje: Linearno u vremenuMnoženje: Kvadratno u vremenuv
r
i
j
e
m
e # bitova u brojevima
•Bez obzira na razliku u konstantama kvadratičnakrivulja će dominirati nad linearnom.
Super! Pokazali smo da kad veličina brojeva raste množenje ispada
kompliciranije.
Matematički dokaz uvriježenog mišljenja.
Nemojte prerano zaključivati!Pokazali smo samo da množenje troši
više vremena nego zbrajanje.
Da bismo dokazali da je množenje težiproblem od zbrajanja trebali bismo pokazati da niti jedan algoritam za
množenje ne radi linearno u vremenu.
Zbrajanje: θ(n) vrijemeMnoženje: θ(n2) vrijeme
Postoji li pametan algoritam koji bi množio dva broja
linearno u vremenu?
Usprkos godinama istraživanja nitko ga nije pronašao! Ako riješte taj problem
PMF će vam dati doktorat !
KRAJ