640 likes | 803 Views
Apstraktno Razmišljanje o Algoritmima. Uvodno predavanje. Znači želite se baviti računalima u životu ? Idemo natrag u osnovnu školu : Množenje dva broja. Mirko Planini ć PMF. Predavanje 1. Želite se baviti računalima ?. Da li je vaš cilj da postanete običan programer?.
E N D
Apstraktno Razmišljanje o Algoritmima Uvodno predavanje • Znači želite se baviti računalima u životu? • Idemo natrag u osnovnu školu: Množenje dva broja Mirko Planinić PMF Predavanje 1
Š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 pripadaračunalnom znalcukoji 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žajKolegija • Pregled tehnika stvaranja algoritama. • Apstraktno razmišljanje. • Kako razviti nove algoritme za bilo koji problem koji može iskrsnuti.
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? • 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? • Fundamentalnorazumijevanjetehnika stvaranja algoritama. • Apstraktno razmišljanje.
Sadržaj kolegija Notacije, analogije, i apstrakcije za razvijanje, razmišljanje o, iopisivanje algoritama
Pregled fundamentalnih idejai tehnika stvaranja algoritama Na primjer . . .
Klasificirane Funkcije Kompleksnost vremena t(n) = Q(n2) f(i) = nQ(n) Vrijeme Veličina ulaza Rekurzivne Relacije Jednostavno zbrajanje T(n) = a T(n/b) + f(n) ∑i=1 f(i). Počnimo s matematikom
0 i-1 i T+1 i i 9 km 5 km Iterativni algoritmiInvarijantne petlje <preCond> codeA loop <loop-invariant> exit when <exit Cond> codeB codeC <postCond> Korak po korak Code Utrka
Morate znati objasniti stvar. Najbolje je da objašnjavate sebi i drugima glasno, pa čak i svojem punjenom medvjedu. Objašnjavanje
Dok dan traje ... Razmišljajte (sanjarite) Fizika nije uvijek linearno razmišljanje. Dopustite da sržmaterijalauđ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đanjaiprotuprimjeri • 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 dolazikad se procespodešavanja algoritma ponavlja
2 X 2 = 5 Nekoliko primjera Algoritama Vratimo se u osnovnu školu:Kako ćemo množiti dva broja ?
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 kna 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” štedijedno 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?
Kako zbrojiti 2 n-bitnabroja ? ** ** ** ** ** ** ** ** ** ** ** +
Kako zbrojiti 2 n-bitnabroja ? ** ** ** ** ** ** ** ** ** * ** ** * +
Kako zbrojiti 2 n-bitna broja ? ** ** ** ** ** ** ** ** * ** * ** * ** * +
Kako zbrojiti 2 n-bitnabroja ? ** ** ** ** ** ** ** * ** * ** * * ** * ** * +
Kako zbrojiti 2 n-bitnabroja ? ** ** ** ** ** ** * ** * ** * * ** * * ** * ** * +
Kako zbrojiti 2 n-bitnabroja ? * * * ** * * ** * * ** * * ** * * ** * *** * * ** * * ** * * ** * * ** * ** * +
* * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * ** * + Kompleksnostvremena običnog zbrajanja Na svakom računalu zbrajanje 3 bita se može napraviti u konačnom vremenu. T(n) = Vrijeme potrebno za zbrajanje 2 n-bitnabroja = θ(n) = linearno u vremenu.
f = θ(n) znači da se f može staviti u sendvič između dvije linije vr i j e m e # broj bitova u brojevima
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).
n2 Kako množiti 2 n-bitnebrojeve. * * * * * * * * X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *