Uvodno predavanje

Preview:

DESCRIPTION

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?. - PowerPoint PPT Presentation

Citation preview

Uvodno predavanje

Mirko Planinić

PMF

Predavanje 1Predavanje 1

•Znači želite se baviti računalima u životu?

•Idemo natrag u osnovnu školu: Množenje dva broja

Želite se baviti računalima?

Da li je vaš cilj da postanete obič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.

• Hm? Recite mi što da isprogramiram.

Sa sve sofisticiranijim softwareskim sistemima,potreba za običnim programerima će nestajati.

Vaš odgovor može biti:

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.

– 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

Budućnost pripada računalnom znalcu koji posjeduje

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 apstrakcije

za razvijanje,

razmišljanje o,

i opisivanje algoritama

Pitanja se smiju postavljati !

Pregled fundamentalnih ideja i tehnika stvaranja

algoritama

Na primjer . . .

Počnimo s matematikom

Veličina ulaza

Vri

jem

eKlasificirane Funkcije

f(i) = n(n)

Rekurzivne Relacije

T(n) = a T(n/b) + f(n)

Jednostavno zbrajanje∑i=1 f(i).

Kompleksnost vremenat(n) = (n2)

Iterativni algoritmi Invarijantne petlje

i-1 i

ii0

T+1<preCond> codeA loop <loop-invariant> exit when <exit Cond> codeBcodeC<postCond>

9 km

5 km

Code UtrkaKorak po

korak

Rekurzivni algoritmi

?

?

Redukcija

=

Korisne metode učenja

Objašnjavanje

• Morate znati objasniti stvar.

• Najbolje je da objašnjavate sebi i drugima glasno, pa čak i svojem punjenom medvjedu.

Razmišljajte (sanjarite)

Fizika nije uvijek linearno

razmišljanje.

Dopustite da srž materijala uđe u vašu

podsvijest.

Isprobajte ideje koje nastaju kao bljeskovi

inspiracije.

Dok dan traje ...

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 Nekoliko primjera AlgoritamaAlgoritama

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?

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 ? **

*

* **

*

* **

*

* **

*

* **

*

* **

*

* **

*

* **

*

* **

*

* **

*

***

*

+*

*

Kompleksnost vremena 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.

# broj bitova u brojevima

vr

i

j

e

m

e

f = θ(n) znači da se f može staviti u sendvič između dvije linije

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 vremenu

•Bez obzira na razliku u konstantama kvadratična krivulja će dominirati nad linearnom.

# of bits in numbers

time

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ži problem 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

n

T(n/2) T(n/2)

T(n) =

n/2

T(n/4)T(n/4)T(n/4)

nT(n) =

n/2

T(n/4)T(n/4)T(n/4)

n/2

T(n/4)T(n/4)T(n/4)

n/2

T(n/4)T(n/4)T(n/4)

n

n/2 + n/2 + n/2

Level i is the sum of 3i copies of n/2i

. . . . . . . . . . . . . . . . . . . . . . . . . .

1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1

n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4

0

1

2

i

log n2

=1n

= 3n/2

= 9n/4

= 3i n/2i

Total: θ(nlog3) = θ(n1.58..)

Level i is the sum of 3 i copies of n/ 2 i

1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1

. . . . . . . . . . . . . . . . . . . . . . . . . .

n/ 2 + n/ 2 + n/ 2

n

n/ 4 + n/ 4 + n/ 4 + n/ 4 + n/ 4 + n/ 4 + n/ 4 + n/ 4 + n/ 4

0

1

2

i

lo g n2 = 3lognn/2logn

=nlog31

Dramatic improvement for large n

Not just a 25% savings!

θ(n2) vs θ(n1.58..)

Multiplication Algorithms

Kindergarten n2n

Grade School n2

Karatsuba n1.58…

Fastest Known n logn loglogn

You’re cool! Are you free sometime this weekend?

Not interested, Bonzo. I took the initiative and asked out a guy in my

3101 class.

End

Restart Introduction

Relevant Mathematics