Algoritmi in podatkovne strukture 1 Visokošolski strokovni študij Računalništvo in informatika

Σχετικά έγγραφα
Funkcijske vrste. Matematika 2. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 2. april Gregor Dolinar Matematika 2

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 22. oktober Gregor Dolinar Matematika 1

KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK

Booleova algebra. Izjave in Booleove spremenljivke

Diferencialna enačba, v kateri nastopata neznana funkcija in njen odvod v prvi potenci

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 21. november Gregor Dolinar Matematika 1

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 5. december Gregor Dolinar Matematika 1

Splošno o interpolaciji

*M * Osnovna in višja raven MATEMATIKA NAVODILA ZA OCENJEVANJE. Sobota, 4. junij 2011 SPOMLADANSKI IZPITNI ROK. Državni izpitni center

matrike A = [a ij ] m,n αa 11 αa 12 αa 1n αa 21 αa 22 αa 2n αa m1 αa m2 αa mn se števanje po komponentah (matriki morata biti enakih dimenzij):

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 15. oktober Gregor Dolinar Matematika 1

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 14. november Gregor Dolinar Matematika 1

Tretja vaja iz matematike 1

IZPIT IZ ANALIZE II Maribor,

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 10. december Gregor Dolinar Matematika 1

MATEMATIČNI IZRAZI V MAFIRA WIKIJU

Delovna točka in napajalna vezja bipolarnih tranzistorjev

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Osnovni primer. (Z, +,,, 0, 1) je komutativan prsten sa jedinicom: množenje je distributivno prema sabiranju

Gimnazija Krˇsko. vektorji - naloge

13. Jacobijeva metoda za računanje singularnega razcepa

PONOVITEV SNOVI ZA 4. TEST

8. Diskretni LTI sistemi

SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 12. november Gregor Dolinar Matematika 1

Kotne in krožne funkcije

Osnove elektrotehnike uvod

Algebraične strukture

Na pregledni skici napišite/označite ustrezne točke in paraboli. A) 12 B) 8 C) 4 D) 4 E) 8 F) 12

Iterativno reševanje sistemov linearnih enačb. Numerične metode, sistemi linearnih enačb. Numerične metode FE, 2. december 2013

Kontrolne karte uporabljamo za sprotno spremljanje kakovosti izdelka, ki ga izdelujemo v proizvodnem procesu.

Zapiski s predavanj predmeta Algoritmi in podatkovne strukture 2

1. Definicijsko območje, zaloga vrednosti. 2. Naraščanje in padanje, ekstremi. 3. Ukrivljenost. 4. Trend na robu definicijskega območja

Numerično reševanje. diferencialnih enačb II

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Sreda, 3. junij 2015 SPLOŠNA MATURA

p 1 ENTROPIJSKI ZAKON

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Primerjava algoritmov porazdeljevanja pri hitrem urejanju

Deli in vladaj. J.Kozak: PSA II, / 75

DISKRETNA FOURIERJEVA TRANSFORMACIJA

NEPARAMETRIČNI TESTI. pregledovanje tabel hi-kvadrat test. as. dr. Nino RODE

ARHITEKTURA DETAJL 1, 1:10

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

EPL475:Εργαστήριο 5, GDB

UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET SIGNALI I SISTEMI. Zbirka zadataka

Enačba, v kateri poleg neznane funkcije neodvisnih spremenljivk ter konstant nastopajo tudi njeni odvodi, se imenuje diferencialna enačba.

Programiranje in algoritmi

ADS sistemi digitalnega snemanja ADS-DVR-4100D4

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 3 Έλεγχος Ροής Προγράμματος

Matematika 1. Gregor Dolinar. 2. januar Fakulteta za elektrotehniko Univerza v Ljubljani. Gregor Dolinar Matematika 1

APROKSIMACIJA FUNKCIJA

Računarska grafika. Rasterizacija linije

1. Trikotniki hitrosti

DISKRETNA MATEMATIKA - PREDAVANJE 7 - Jovanka Pantović

V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant.

Neformalna verifikacija

Vaja: Odbojnostni senzor z optičnimi vlakni. Namen vaje

MATRICE I DETERMINANTE - formule i zadaci - (Matrice i determinante) 1 / 15

1. Optimizacijske naloge

Μεταγλωττιστές 2019 Θέμα εργασίας

Integralni račun. Nedoločeni integral in integracijske metrode. 1. Izračunaj naslednje nedoločene integrale: (a) dx. (b) x 3 +3+x 2 dx, (c) (d)

Dragi polinom, kje so tvoje ničle?

vezani ekstremi funkcij

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

Spoznajmo sedaj definicijo in nekaj osnovnih primerov zaporedij števil.

IZVODI ZADACI (I deo)

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

1 Fibonaccijeva stevila

Poliedri Ines Pogačar 27. oktober 2009

Μεταγλωττιστές Βελτιστοποίηση

Kvantni računalnik. Avtor: Miha Muškinja Mentor: prof. dr. Norma Susana Mankoč Borštnik

Multivariatna analiza variance

ΕΙΣΑΓΩΓΗ. Στόχοι του μαθήματος

FEATURES APPLICATION PRODUCT T IDENTIFICATION PRODUCT T DIMENSION MAG.LAYERS

Izpeljava Jensenove in Hölderjeve neenakosti ter neenakosti Minkowskega

Σειρά Προβλημάτων 5 Λύσεις

Osnove matematične analize 2016/17

Program testirati pomoću podataka iz sledeće tabele:

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Δομές Δεδομένων & Αλγόριθμοι

Matrike. Poglavje II. Matrika je pravokotna tabela realnih števil. Na primer: , , , 0 1

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Sklepanje je torej tudi interpretacija stavka predstavljena kot sekvenca instanc pravil.

ιαφάνειες παρουσίασης #7

Μεταγλωττιστές Βελτιστοποίηση

8. Posplošeni problem lastnih vrednosti

Δομές Δεδομένων (Data Structures)

Uvod v numerične metode (matematika)

INTELIGENTNO UPRAVLJANJE

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * FIZIKA NAVODILA ZA OCENJEVANJE. Petek, 10. junij 2016 SPLOŠNA MATURA

Opis in implementacija RSA

1. Έντυπα αιτήσεων αποζημίωσης Αξίωση αποζημίωσης Έντυπο Πίνακας μεταφράσεων των όρων του εντύπου...

Iskazna logika 3. Matematička logika u računarstvu. novembar 2012

IZVODI ZADACI ( IV deo) Rešenje: Najpre ćemo logaritmovati ovu jednakost sa ln ( to beše prirodni logaritam za osnovu e) a zatim ćemo

PID: Domen P je glavnoidealski [PID] akko svaki ideal u P je glavni (generisan jednim elementom; oblika ap := {ab b P }, za neko a P ).

Matematika 1. Gabrijel Tomšič Bojan Orel Neža Mramor Kosta

SEMINARSKA NALOGA Funkciji sin(x) in cos(x)

Analiza I. (študijsko gradivo) Matija Cencelj

FUNKTSIONAALNE PROGRAMMEERIMINE. Skeemid. Eesmärk: esitada riistvara skeeme ja teisi andmevoodiagrammidel baseeruvaid kirjeldusi Haskellis

Fractional Colorings and Zykov Products of graphs

Transcript:

Algoritmi in podatkovne strukture 1 Visokošolski strokovni študij Računalništvo in informatika Algoritmi in problemi Jurij Mihelič, UniLj, FRI

Algoritmi Izvor izraza al-khwārizmī al-gwaritmi algoritmi Sem Muhammad ibn Mūsā al-khwārizmī Perzijski matematik iz 9. stoletja. Opisal sem algoritme za seštevanje, množenje, deljenje, kvadratni koren, izračun decimalk π, itd. števil v Arabskem (Indijskem) zapisu.

Algoritmi Algoritem je jasen in nedvoumen razumljiv in razumljiv na samo en način mehaničen postopek izvajanje postopka ne zahteva genialnosti, ki za dani vhod Intuitivno vrne ustrezen izhod. vhod algoritem izhod

Algoritmi Algoritem je jasen in nedvoumen mehaničen postopek za reševanje računskega problema. vhod naloga primerek algoritem izhod rešitev rezultat Računski problem je več kot le računanje 19 + 23 Kaj je računski problem? Kaj pomeni rešiti ga?

Računski problemi Rešiti računski problem pomeni, za vse možne naloge problema znati poiskati ustrezno rešitev. Computational problem Računski problem splošno in natančno opisuje želeni odnos med nalogami in njihovimi rešitvami.

Računski problemi Vrste računskih problemov odločitveni rešitev je oblike da/ne preštevalni rešitev je število naštevalni rešitev je seznam iskalni rešitev je iskani objekt optimizacijski iskanje najboljše rešitve itd. kriterijski iščemo le vrednost rešitve konstrukcijski rešitev želimo konstruirati

Računski problemi Formalna definicija računskega problema množica vseh parov naloga problema in njena rešitev Formalna definicija algoritma Alan Turing, 1912-1954 Turingov stroj,, programski jeziki Church-Turingova teza S Turingovim strojem se da izračunati vse, kar se sploh da izračunati.

Snovanje algoritmov Kako snovati algoritme? Predpogoj dobro razumevanje problema Cilj opis algoritma Kriteriji pravilnost učinkovitost preprostost implementabilnost Zapisal sem Evklidov algoritem za največji skupni delitelj dveh števil.

Snovanje algoritmov Kako snovati algoritme? snovanje algoritmov je umetnost TAOCP, Donald Knuth Kdor hoče dobro pisati, mora veliko brati. How to solve it?, George Polya 1. Razumevanje problema 2. Izdelava načrta 3. Sledenje načrtu 4. Pogled nazaj

Snovanje algoritmov Metode snovanja algoritmov groba sila (brute force) in izčrpno preiskovanje (exhaustive search) sestopanje (backtracking) razveji in omeji (branch & bound) požrešno (greedy) Več o metodah v nadaljevanju. deli in vladaj (divide & conquer) zmanjšaj in vladaj (reduce & conquer) pretvori in vladaj (transform & conquer) dinamično programiranje (dynamic programming) linearno programiranje (linear programming)

Opisni jeziki naravni jezik Snovanje algoritmov diagrami poteka psevdokoda programski jezik strojna koda itd.

Snovanje algoritmov Naravni jezik nejasnost dvoumnost Prepisovalci bodo javno obešeni na oglasni deski. primeren za opis ideje Dvojiško iskanje elementa v urejeni tabeli izvedemo tako, da s primerjavo iskanega elementa s sredinskim elementom tabele ugotovimo ali je iskani element v levi ali desni polovici. Nato gremo iskat element v ustrezni del tabele. Odločitveni ali iskalni problem Naloga: urejena tabela elementov Rešitev: odgovor da/ne indeks iskanega elementa

Snovanje algoritmov Diagram poteka grafični prikaz globalen pogled okoren opis podrobnosti Start Preberi a Preberi b p 0 p p + b a a - 1 Iskalni problem Naloga: par števil a in b Rešitev: zmnožek p = a * b da a > 0 ne Izpiši p Konec

Snovanje algoritmov Psevdokoda prenosljivost? človek/človek človek/stroj, stroj/stroj poljubna natančnost opisa uporaba matematičnih formul Iskalni problem Naloga: par števil a in b Rešitev: zmnožek p = a * b preberi a in b p 0 while a > 0 do p p + b a a 1 endwhile izpiši p Glej tudi: http://en.wikipedia.org/wiki/sieve_of_eratosthenes Naj bo L seznam celih števil od 2 do N Ponavljaj Naj bo X prvi neobdelani element v seznamu L Izpiši X Iz seznama odstrani vse večkratnike X Dokler je X manjši od N Iskalni problem Naloga: število N Rešitev: seznam praštevil

Snovanje algoritmov Programski jezik realnost ogromna izbira algoritem lahko dejansko izvedemo int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); }.text.global pgcd pgcd: push mov mov mov push.loop: cmp je xor div mov mov jmp.end: pop leave ret %ebp %esp, %ebp 8(%ebp), %eax 12(%ebp), %ecx %edx $0, %ecx.end %edx, %edx %ecx %ecx, %eax %edx, %ecx.loop %edx Iskalni problem Naloga: par števil a in b Rešitev: število g - gcd gcd a 0 = a gcd a b = gcd b (a `rem` b) : gcd ( a b -- c ) [ abs ] [ [ nip ] [ mod ] 2bi gcd ] if-zero ; Vir programov: http://rosettacode.org/wiki/greatest_common_divisor

0000280 0e 00 00 00 20 00 00 00 0c 00 00 00 2f 75 73 72 0000290 2f 6c 69 62 2f 64 79 6c 64 00 00 00 00 00 00 00 00002a0 1b 00 00 00 18 00 00 00 56 2d 90 64 27 5b 38 9c 0000000 cf fa ed fe 07 00 00 Snovanje 01 03 00 00 80 02 00 00 00 algoritmov 00002b0 a0 e1 79 d4 ab 94 a6 a1 24 00 00 00 10 00 00 00 0000010 0f 00 00 00 38 03 00 00 85 00 20 00 00 00 00 00 00002c0 00 0a 0a 00 00 09 0a 00 2a 00 00 00 10 00 00 00 0000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45 00002d0 00 00 00 00 00 00 00 00 28 00 00 80 18 00 00 00 0000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00002e0 70 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00002f0 0c 00 00 00 38 00 00 00 18 00 00 00 02 00 00 00 0000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000300 01 01 ad 04 00 00 01 00 2f 75 73 72 2f 6c 69 62 0000060 00 00 00 00 00 00 00 00 19 00 00 00 38 01 00 00 0000310 2f 6c 69 62 53 79 73 74 65 6d 2e 42 2e 64 79 6c 0000070 5f Strojna 5f 54 45 58 54 koda 00 00 00 00 00 00 00 00 00 00 0000320 69 62 00 00 00 00 00 00 26 00 00 00 10 00 00 00 0000080 00 00 00 00 01 00 00 00 00 10 00 00 00 00 00 00 0000330 38 10 00 00 08 00 00 00 29 00 00 00 10 00 00 00 0000090 00 00 00 razumljiva 00 00 00 00 00 00 le 10 00 računalniku 00 00 00 00 00 0000340 40 10 00 00 00 00 00 00 2b 00 00 00 10 00 00 00 00000a0 07 00 00 00 05 00 00 00 03 00 00 00 00 00 00 00 0000350 40 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00000b0 5f 5f 74 65 78 74 00 00 00 00 00 00 00 00 00 00 0000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000c0 5f 5f 54 45 58 54 00 00 00 00 00 00 00 00 00 00 * 00000d0 20 0f 00 hitro 00 01 00 izvajanje 00 00 77 00 00 00 00 00 00 00 0000f20 55 48 89 e5 48 83 ec 10 89 7d f8 89 75 f4 81 7d 00000e0 20 0f 00 00 04 00 00 00 00 00 00 00 00 00 00 00 0000f30 f4 00 00 00 00 0f 85 0b 00 00 00 8b 45 f8 89 45 00000f0 00 04 00 80 00 00 00 00 00 00 00 00 00 00 00 00 0000f40 fc e9 14 00 00 00 8b 7d f4 8b 45 f8 99 f7 7d f4 0000100 5f 5f 75 6e 77 69 6e 64 5f 69 6e 66 6f 00 00 00 0000f50 89 d6 e8 c9 ff ff ff 89 45 fc 8b 45 fc 48 83 c4 0000110 5f 5f 54 45 58 54 00 00 00 00 00 00 00 00 00 00 0000f60 10 5d c3 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 0000120 98 0f 00 00 01 00 00 00 48 00 00 00 00 00 00 00 0000f70 55 48 89 e5 48 83 ec 10 bf 2a 00 00 00 be 17 00 0000130 98 0f 00 00 02 00 00 00 00 00 00 00 00 00 00 00 0000f80 00 00 e8 99 ff ff ff be 00 00 00 00 89 45 fc 89 0000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000f90 f0 48 83 c4 10 5d c3 90 01 00 00 00 1c 00 00 00 0000150 5f 5f 65 68 5f 66 72 61 6d 65 00 00 00 00 00 00 0000fa0 00 00 00 00 1c 00 00 00 00 00 00 00 1c 00 00 00 0000160 5f 5f 54 45 58 54 00 00 00 00 00 00 00 00 00 00 0000fb0 02 00 00 00 20 0f 00 00 34 00 00 00 34 00 00 00 0000170 e0 0f 00 00 01 00 00 00 18 00 00 00 00 00 00 00 0000fc0 98 0f 00 00 00 00 00 00 34 00 00 00 03 00 00 00 0000180 e0 0f 00 00 03 00 00 00 00 00 00 00 00 00 00 00 0000fd0 0c 00 01 00 10 00 01 00 00 00 00 00 00 00 00 01 0000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000fe0 14 00 00 00 00 00 00 00 01 7a 52 00 01 78 10 01 00001a0 19 00 00 00 48 00 00 00 5f 5f 4c 49 4e 4b 45 44 0000ff0 10 0c 07 08 90 01 00 00 00 00 00 00 00 00 00 00 00001b0 49 54 00 00 00 00 00 00 00 10 00 00 01 00 00 00 0001000 00 01 5f 00 05 00 03 5f 6d 68 5f 65 78 65 63 75 00001c0 00 10 00 00 00 00 00 00 00 10 00 00 00 00 00 00 0001010 74 65 5f 68 65 61 64 65 72 00 26 67 63 64 00 2a 00001d0 d0 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00 0001020 6d 61 69 6e 00 2f 02 00 00 00 03 00 a0 1e 00 03 00001e0 00 00 00 00 00 00 00 00 22 00 00 80 30 00 00 00 0001030 00 f0 1e 00 00 00 00 00 a0 1e 50 00 00 00 00 00 00001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0001040 fa de 0c 05 00 00 00 14 00 00 00 01 00 00 00 00 * 0001050 00 00 00 00 00 00 00 00 02 00 00 00 0f 01 10 00 0000210 00 10 00 00 38 00 00 00 02 00 00 00 18 00 00 00 0001060 00 00 00 00 01 00 00 00 16 00 00 00 0f 01 00 00 0000220 58 10 00 00 04 00 00 00 98 10 00 00 38 00 00 00 0001070 20 0f 00 00 01 00 00 00 1b 00 00 00 0f 01 00 00 0000230 0b 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 0001080 70 0f 00 00 01 00 00 00 21 00 00 00 01 00 00 01 0000240 00 00 00 00 03 00 00 00 03 00 00 00 01 00 00 00 0001090 00 00 00 00 00 00 00 00 20 00 5f 5f 6d 68 5f 65 0000250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00010a0 78 65 63 75 74 65 5f 68 65 61 64 65 72 00 5f 67 * 00010b0 63 64 00 5f 6d 61 69 6e 00 64 79 6c 64 5f 73 74 00010c0 75 62 5f 62 69 6e 64 65 72 00 00 00 00 00 00 00

Snovanje algoritmov Semantični prepadi ideja algoritma opis algoritma (algoritem) izvorna koda strojna koda snovanje, metode snovanja programiranje, implementacija prevajanje / tolmačenje izvajanje A b s t r a k c i j a proces

Implementacija algoritmov Programiranje 1, 2, in 3 itd. branje vhoda in izpis izhoda aritmetične in logične operacije nizi in tabele (polja, array) odločitveni stavki iteracija oz. zanke

Rekurzija Implementacija algoritmov funkcija kliče samo sebe (lahko posredno) podprta v večini jezikov (potrebuje sklad) ustavljanje rekurzije repna rekurzija fun fib(n) is if n == 0 then return 0 if n == 1 then return 1 return fib(n - 1) + fib(n - 2) fun produkt(a, b) is if a == 0 then return 0 return b + produkt(a 1, b) end fun hanoi(n, a, b, c) is if n == 0 then return hanoi(n-1, a, c, b) a -> b hanoi(n-1, c, b, a)

Rekurzija Implementacija algoritmov repna rekurzija (tail recursion) int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int gcd(int a, int b) { while (b > 0) { int c = a % b; a = b; b = c; } return a; }

Implementacija algoritmov Razhroščevanje kode printf metoda sledenje programu (trace) prekinitvena točka (breakpoint) opazovanje (watch) Profiliranje in instrumentacija kode ugotavljanje, koliko časa/pomnilnika/itd. porabijo posamezni deli programa programu dodamo ukaze za merjenje

Implementacija algoritmov Izvajanje programa prevajanje izvorne kode v strojno kodo interpretiranje izvorne kode Izvedba algoritma program zaženemo na ustreznem računalniku izvajanje eksperimentov znanstvena metoda: hipoteza eksperimentalno ovrednotenje algoritma

Sled algoritma Sled algoritma izpis podatkov tekom izvajanja, npr.: spremenljivke, podatkovne strukture št. korakov, globina rekurzije, itd. Izvajanje Computer simuliranje na papir dejansko z računalnikom

Evklidov algoritem Sled algoritma int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } gcd(264, 72) # a b q r 0 264 72 3 48 gcd(264, 72) = 1 72 48 1 24 gcd(72, 48) = 2 48 24 2 0 gcd(48, 24) = 3 24 0 gcd(24, 0) = 24

Eratostenovo sito Sled algoritma Naj bo L seznam celih števil od 2 do N Ponavljaj Naj bo X prvi neobdelani element v seznamu L Izpiši X Iz seznama odstrani vse večkratnike X Dokler je X manjši od N Eratostenovo sito za n = 30 # izbrani X in seznam L 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 3 2 3 5 7 11 13 17 19 23 25 29 4 2 3 5 7 11 13 17 19 23 29 5 2 3 5 7 11 13 17 19 23 29 6 2 3 5 7 11 13 17 19 23 29 7 2 3 5 7 11 13 17 19 23 29 8 2 3 5 7 11 13 17 19 23 29 9 2 3 5 7 11 13 17 19 23 29 10 2 3 5 7 11 13 17 19 23 29 11 2 3 5 7 11 13 17 19 23 29

Pravilnost algoritmov Pravilnost algoritmov Ali algoritem res dela tisto, kar mislimo, da dela? glede na neko specifikacijo Delna pravilnost vrne pravilno rešitev, kadar jo vrne lahko se zacikla Totalna pravilnost ustavljivost se za vse vhode ustavi

Pravilnost algoritmov Dokazovanje pravilnosti intuitivno razumevanje preverjanje s testnimi primeri formalni dokaz pravilnosti avtomatsko formalno preverjanje Oglejmo si vse štiri.

Pravilnost algoritmov Intuitivno razumevanje vpogled v algoritem nepopolno, subjektivno podvrženo človeškim zmotam sled algoritma je lahko v pomoč Množenje s prištevanjem? Preberi x in y p 0 do p p y x x + 1 while x > 0 Izpiši p

Testni primeri Pravilnost algoritmov pravilnost pokažemo le za testne primere lažje pokazati nepravilnost kot pravilnost dober nabor testnih primerov večja zanesljivost testiranja uporaba robnih primerov potreba po izvajanju algoritma preverjanje sledi in izhoda simulacija na papir / dejansko izvajanje popolno testiranje je praktično nemogoče nepopolnost in neobvladljivost praktično nemogoče preveriti vseh možne vhode

Testni primeri Pravilnost algoritmov zgled: največji skupni delitelj int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } Koliko let bi trajalo testiranje, če vsako sekundo preizkusimo milijardo (10 9 ) vhodov? razumevanje problema kaj je vhod? koliko je različnih vhodov? Vhod: dve 32-bitni števili 2 32 2 32 =2 64 1,8 10 19

Testni primeri Pravilnost algoritmov zgled: urejanja seznama Navadno izbiranje fun selectionsort(a) is for i = 0 to n 2 do m = i for j = i + 1 to n - 1 do if a[j] < a[m] then m = j swap(a, i, m) endfor end Tabela dolžine n Elementi so števila od 1 do n Elementi se lahko ponavljajo Vsi elementi so različni. n n n!

Pravilnost algoritmov Formalni dokaz pravilnosti zanesljivost pravilnosti zahtevnost dokazovanja dokaz je lahko daljši kot algoritem uporaba matematike vsak»resen«algoritem mora imeti formalen dokaz pravilnosti

Pravilnost algoritmov Formalni dokaz pravilnosti indukcija metoda za dokazovanje neke trditve (hipoteze) za vse n po velikosti vhoda, po strukturi vhoda osnovni primer dokaz trditve za nek majhen primer, npr. n = 0 induktivna predpostavka predpostavka, da trditev velja za n induktivni korak iz majhnega primera na večjega, npr. n n + 1 uporaba induktivne predpostavke, da izpeljemo veljavnost trditve za n + 1

Pravilnost algoritmov Avtomatsko formalno preverjanje temelji na klasičnem formalnem dokazovanju zahtevnost programiranja dokaz pravilnost preko tipov s tipi je moč računati Curry-Howardova enakovrednost tipi so izjave programi so dokazi module Stack %default total data Stack : List a -> Type where StNil : Stack Nil {a} StCons : {xs : List a} -> (x : a) -> Stack xs -> Stack (x :: xs) drop : {x : a} -> {xs : List a} -> Stack (x :: xs) -> Stack xs drop (StCons y ys) = ys peek : {x : a} -> {xs : List a} -> Stack (x :: xs) -> (y : a ** y = x) peek (StCons y ys) = (y ** refl) pop : {x : a} -> {xs : List a} -> Stack (x :: xs) -> (p : (a, Stack xs) ** (fst p) = x) pop (StCons y ys) = ((y, ys) ** refl) push : {xs : List a} -> (x : a) -> Stack xs -> Stack (x :: xs) push x xs = StCons x xs dup : {x : a} -> {xs : List a} -> Stack (x :: xs) -> Stack (x :: x :: xs) dup (StCons y ys) = StCons y (StCons y ys) swap : {x : a} -> {z : a} -> {xs : List a} -> Stack (x :: z :: xs) -> Stack (z :: x :: xs) swap (StCons y (StCons w ws)) = (StCons w (StCons y ws)) isempty : {l : List a} -> Stack l -> Bool isempty StNil = True isempty (StCons x y) = False Vir: Blaž Repas, Preverjanje pravilnosti programov z odvisnimi tipi v programskem jeziku Idris

Zahtevnost algoritmov Zahtevnost algoritmov Analiza algoritmov, teorija algoritmov Katere vire potrebuje algoritem? Koliko virov algoritem potrebuje? Viri: realni čas, št. korakov, št. operacij, poraba pomnilnika, št. odprtih datotek, poraba električne energije, itd. Porabo virov navadno le ocenimo. Se da bolje? Ocena temelji na modelu računanja.

Algoritmika Veda o algoritmih Področja Applications problems machines data Teorija algoritmov Analiza algoritmov Models of problems computation data Benchmarking datasets Računska zahtevnost Izračunljivost Inženiring algoritmov Design idea description pseudocode Experiments testing profiling performance Inženiring programov itd. APS Analysis correctness complexity Implementation idea source code machine code Libraries

Povzetek Algoritem, računski problem naloga, rešitev, vrste problemov Snovanje algoritmov opis algoritma, metode snovanja Sled algoritma Pravilnost algoritmov intuitivno, testiranje, formalno, avtomatsko Zahtevnost algoritmov analiza zahtevnosti Implementacija algoritmov rekurzija, eksperimenti