Algoritmi - Slozenost

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Algoritmi

Python
Sloenost i vrijeme izvoenja algoritma

Perzijski matematiar Al-Khowarizmi (Abu Ja'far Mohammed Ibn Musa al Khowarizmi) u udbeniku matematike (oko 825. godine n.e.) prikazao je rjeenja nekih aritmetikih problema u obliku uputstava koja su se sastojala od tono odreenih osnovnih koraka.

to je algoritam?
Algoritam je precizno opisan nain rjeenja nekog problema Svojstva algoritma:

Definiranost

Svaka operacija ili pravilo mora imati definirano i samo jedno znaenje Primjeri za nedoputene instrukcije:

definiranost konanost rezultat

izraunaj 5/0 uveaj x za 6 ili 7

Konanost

Algoritam je upotrebljiv ako se dobije rezultat u konanom vremenu Vrijeme izvoenja mora biti "razumno"

Primjer ne-razumnog vremena:

Algoritam koji bi ispitivao sve mogue posljedice poteza u ahu: 20 moguih prvih poteza bijelog, 20 moguih prvih poteza crnog, > 20 moguih drugih poteza bijelog, > 20 moguih drugih poteza crnog Za 10 poteza svakog igraa, barem 2020 Kad bi se 1 kombinacija analizirala 1 s, to je 3170979198376 godina

Informatika, 4.E

Rezultat.

Po zavretku algoritma mora postojati mogunost da se ustanovi rezultat njegovog rada, odnosno da li je algoritam postigao svoj cilj ili nije.

Algoritam je ispravan ako za sve dozvoljene ulazne podatke daje ispravne rezultate

nije uvijek mogue dokazati ispravnost (relativno) lako se dokazuje neispravnost

Mjerenje vremena u Pythonu - modul time


time() vraa broj sekundi od poetka epohe (1.1.1970) (uobiajeno za proceseod nekoliko sekundi na dulje) clock() vraa procesorsko vrijeme u sekundama od poetka procesa, odnosno od prvog poziva funkcije clock()
>>> from time import * >>> clock() 1.0263041760316923e-06 >>> clock() 11.0761882036598 >>> clock() 40.59102958834939 >>> time() 1386711661.879 >>> time() 1386711665.841

Zadatak
Napisati funkciju koja e sortirati listu metodom zamjene ( exchange sort). Za sluajno generiranu listu od 1000 elemenata izmjeriti vrijeme trajanja sortiranja.

Imenovanje listi (podsjeanje)

Bubble Sort
Sortiranje zamjenom susjednih elemenata
1

Nakon naredbe B = A, listi A je pridijeljeno jo jedno ime (B je pseudonim imena A)

Informatika, 4.E

"Bubbling Up" izranjanje najveeg elementa


najvei elementi se redaju na kraju liste

"Bubbling Up"

u prvom prolazu e najvei element "izroniti" na kraju liste u drugom prolazu e na kraj (pod)liste "izroniti" drugi najvei itd

1 77

2 42

3 35

4 12

5 101

6 5

1 2 Swap 42 77 42 77

3 35

4 12

5 101

6 5

"Bubbling Up"

"Bubbling Up"

1 42

4 12

5 101

6 5

1 42

2 35

Swap 35 77 77 35

3 4 12Swap 77 12 77

5 101

6 5

"Bubbling Up"

"Bubbling Up"

1 42

2 35

3 12

4 77

5 101

6 5

1 42

2 35

3 12

4 77

5 6 5 Swap101 101 5

Ne treba zamjena

Informatika, 4.E

"Bubbling Up"
ostali elementi se jo trebaju postaviti ponoviti jo N-1 puta

Bubbling svih elemenata

1 42

2 35

3 12

4 77

5 5

6 101

Najvei element "izronio"

1 42 1 35 1 12 1 12 1 5

2 35 2 12 2 35 2 5 2 12

3 12 3 42 3 5 3 35 3 35

4 77 4 5 4 42 4 42 4 42

5 5 5 77 5 77 5 77 5 77

6 101 6 101 6 101 6 101 6 101

Bubble sort u Pythonu


def bubble(lista): k = 1 did_swap = True while did_swap: did_swap = False for index in range(len(lista) - k): if lista[index] > lista[index + 1]: lista[index], lista[index + 1] =\ lista[index + 1], lista[index] did_swap = True k += 1 return lista

1 77 1 42 1 35 1 12 1 12

2 42 2 35 2 12 2 35 2 5

3 35 3 12 3 42 3 5 3 35

4 12 4 77 4 5 4 42 4 42

5 101 5 5 5 77 5 77 5 77

6 5 6 101 6 101 6 101 6 101

Sortiranje sjedinjavanjem (merge sort)

Merging (cont.)
X:

N-1

10

23

54

Y:

25

75

naelo podijeli pa vladaj (divide and conquer) Primjer L1 = [3, 8, 9] L2 = [1, 5, 7] [1, 3, 5, 7, 8, 9]

Result:

Informatika, 4.E

Merging (cont.)
X:

Merging (cont.)

10

23

54

Y:

25

75

X:

10

23

54

Y:

25

75

Result:

Result:

Merging (cont.)
X:

Merging (cont.)

10

23

54

Y:

25

75

X:

23

54

Y:

25

75

Result:

Result:

10

Merging (cont.)
X:

Merging (cont.)

54

Y:

25

75

X:

54

Y:

75

Result:

10

23

Result:

10

23

25

Informatika, 4.E

Merging (cont.)
X: Y:

Merging (cont.)

75

X:

Y:

Result:

10

23

25

54

Result:

10

23

25

54

75

Podijeli pa vladaj
Sjedinjavanje

Primjer:

99 dvije liste od jednog elementa isto je to i sortiranje sort dijeli nesortiranu listu do lista s jednim elementom i onda sjedinjuje (sortira) u parovima mogue i koritenjem rekurzije
Merge

86

15

58

35

86

99 99 6

86 86

15 15

58 58

35 35

86 86

4 4

0 0

99 99 6

86 86

15 15

58 58

35 35

86 86

4 4

0 0

99

86

15

58

35

86

Informatika, 4.E

99 99 6

86 86

15 15

58 58

35 35

86 86

4 4

0 0

99 99 6

86 86

15 15

58 58

35 35

86 86

4 4

0 0

99

86

15

58

35

86

99

86

15

58

35

86

99

86

15

58

35

86

99

86

15

58

35

86

99

15

86

35

58

86

99
Merge

86

15

58

35

86

99
Merge

86

15

58

35

86

0 6 15 86 99 0 4 35 58 86 6

4 15 86

15 99

35 0

58 4

86 35

86 58

99 86

99

15

86

35

58

86

Merge

Merge

Informatika, 4.E

Sortiranje po Hoareu (quick sort)

15

35

58

86

86

99

Informatika, 4.E

You might also like