Om Kurset og Analyse av Algoritmer

Like dokumenter
Quicksort. Lars Vidar Magnusson Kapittel 7 Quicksort Randomisert Quicksort Analyse av Quicksort

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Divide-and-Conquer. Lars Vidar Magnusson

Algoritmer - definisjon

Analyse av Algoritmer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algoritmer - definisjon

Sortering i Lineær Tid

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

Minimum Spenntrær - Kruskal & Prim

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Algoritmeanalyse. (og litt om datastrukturer)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Anbefalte forkunnskaper Studentene forutsettes å kunne programmere, for eksempel ved å ha tatt TDT4100 Objektorientert programmering.

Grunnleggende Grafalgoritmer

Lars Vidar Magnusson

PRIORITETSKØ. Aksjehandel. Datastruktur for aksjehandel. Nøkler og Totalorden-relasjonen

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

INF2220: Time 12 - Sortering

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Lars Vidar Magnusson

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

INF1010 notat: Binærsøking og quicksort

7) Radix-sortering sekvensielt kode og effekten av cache

Læringsmål og pensum. Algoritmeeffektivitet

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

MAT1030 Diskret Matematikk

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Velkommen til MAT1030!

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

MAT1030 Diskret Matematikk

Morfologi i Binære Bilder III

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Pensum: fra boken (H-03)+ forelesninger

PG4200 Algoritmer og datastrukturer forelesning 3. Lars Sydnes 29. oktober 2014

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

MAT1030 Plenumsregning 1

TDT4105 Informasjonsteknologi, grunnkurs

Løsningsforslag - Parallellitet og repetisjon

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

ALGORITMER OG DATASTRUKTURER

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Norsk informatikkolympiade runde

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

MAT1030 Diskret matematikk

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

INF Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 2

Eksamen i tdt4120 Algoritmer og datastrukturer

Grunnleggende Grafalgoritmer II

Pattern matching algorithms. INF Algoritmer og datastrukturer. Lokalisering av Substrenger. Brute force

EKSAMEN. Emne: Algoritmer og datastrukturer

Algdat - øvingsforelesning

Oppgave 1. Sekvenser (20%)

INF2220: Forelesning 1

Divide-and-Conquer II

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

MAT1030 Diskret matematikk

Algoritme-Analyse. Asymptotisk ytelse. Sammenligning av kjøretid. Konstanter mot n. Algoritme-kompeksitet. Hva er størrelsen (n) av et problem?

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

ALGORITMER OG DATASTRUKTURER

Introduksjon til Algoritmeanalyse

MAT1030 Diskret matematikk

Øvingsforelesning 6. Sorteringsalgoritmer. Martin Kirkholt Melhus Basert på foiler av Kristian Veøy 30/09/14 1

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Når Merge sort og Insertion sort samarbeider

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

Transkript:

Om Kurset og Analyse av Algoritmer Lars Vidar Magnusson 8.1.2014 Praktisk informasjon om kurset Hva er en algoritme? (kapittel 1) Hvordan analysere en algoritme? (kapittel 2)

Praktisk Informasjon Introduction to Algorithms (Third Edition) - Cormen, Leiserson, Rivest & Stein - ISBN-13 978-0262033848 Forelesninger Onsdager 8.15-10.00 D1-055/056 Fredager 12.15-14.00 D1-052 Øvingstimer?? 4 obligatoriske innleveringer 4 timers skriftlig eksamen

Kodeeksempler Fagboken bruker pseudokode for alle kodeeksempler. Dette frigjør boken fra språklige tilpasninger. Alle eksempler gitt av faglærer vil bli gitt i to programmeringsparadigmer. Imperativ (Java) Funksjonell (SML)

Om Kurset Algoritmer og Datastrukturer er et helt essensielt kurs i en utviklingsorientert IT utdannelse. Kurset er derfor lagt opp etter internasjonal standard. Kurset er både vanskelig og omfattende. Vi legger opp til å unngå de tyngste teoretiske emnene, men vi legger samtidig til rette for at studentene kan sette seg så dypt inn i temaet som ønskelig. Kurset gir studenten de nødvendige ferdighetene for å kunne bedømme den beste måten å løse et hvilket som helst problem. Innsikt i algoritmer og datastrukturer er det som skiller en informatiker fra en applikasjonsutvikler.

Hva er en algoritme? Utdrag fra fagboken (CLRS) Informally, an algorithm is any well-defined computational proceduce that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output. Dette er en uformell definisjon av en algoritme, men enda løsere definisjoner er også vanlige e.g En sekvens av faste steg som utfører en bestemt oppgave.

Hva brukes algoritmer til? The Human Genome Project er avhengig av kompliserte datastrukturer og algoritmer for lagring og analyse av alle genene i menneskelig DNA. Internettet er avhengig av algoritmer for å sende data langs den mest effektive ruten, og søkemotorene bruker avanserte algoritmer for å gjøre innholdet søkbart. Elektronisk handel er avhengig av krypteringsalgoritmer for å sikre alle elektroniske transaksjoner....

Algoritmer og Effektivitet Algoritmer som løser det samme problemet har ikke nødvendigvis samme effektivitet e.g. insertion sort vs merge sort. Effektiviteten til en algoritme er ofte viktigere enn hastigheten på maskinvaren. Maskin A med kapasitet på 10 milliarder operasjoner i sekundet kjører insertion sort, og maskin B med kapasitet på 10 millioner operasjoner i sekundet kjører merge sort. Begge maskiner skal sortere 10 millioner tall. Kjøretid A = Kjøretid B = (10 7 ) 2 instruksjoner = 10.000 sekunder 10 10 instruksjoner per sekund 107 log 10 7 instruksjoner 23 sekunder 10 7 intruksjoner per sekund

Motivasjonshistorie - Matching Edmonds publiserte i 1965 en effektiv algoritme for maximum matching i en graf [Edmonds(1965)]. Artikkelen skal i utgangspunktet ha blitt avvist på grunnlag av at en algoritme var overflødig siden problemet kunne løses ved å teste alle mulige paringer (brute force). Edmonds skal da ha kommet opp med et enkelt eksempel som illustrerte hvorfor dette raskt vil føre til problemer.

Motivasjonshistorie - Matching - Brute Force Eksempel Si at man ønsker å finne den beste paringen mellom 100 gutter og 100 jenter hvor man enkelt kan se om et par er en god match eller ikke. Dette kan løses ved å teste alle mulige kombinasjoner av enten guttene eller jentene. Dette resulterer i å teste 100! mulige kombinasjoner. 100! = 100 99 1 9.3326215 10 157 > 10 156 La oss anta at vi kan teste 10 10 kombinasjoner i sekundet og at det er 10 8 sekunder i et år (som er nokså kraftige overdrivelser). I løpet av et år vil vi da kunne teste 10 10+8 = 10 18 kombinasjoner. Vi ender da opp med at det vil ta i overkant av 10 156 18 = 10 138 år å teste alle kombinasjonene. Til sammenligning har det ikke gått mer enn 1.4 10 10 år siden universets begynnelse.

Vår Første Algoritme - Insertion-Sort Insertion-Sort er en effektiv inkrementell sorteringsalgoritme for små inputstørrelser i.e. korte sekvenser av elementer å sortere. Algoritmen er gitt under i pseudokode. Insertion-Sort(A) 1 for j = 2 to A.length 2 key = A[j] 3 / Insert A[j] into the sorted sequence A[1.. j 1]. 4 i = j 1 5 while i > 0 and A[i] > key 6 A[i + 1] = A[i] 7 i = i 1 8 A[i + 1] = key

Loop Invarianter og Insertion-Sort På ethvert steg i kjøringen av Insertion-Sort på listen A med n elementer representerer A[1.. j 1] allerede sorterte elementer, eller keys, og A[j.. n] gjenstående elementer å sortere. Dette kalles en loop invariant. Initialization: Den skal være sann før første iterasjon løkken. Maintenance: Hvis den er sann før en iterasjon skal den være sann før neste. Termination: Loop invarianten gir riktigheten av algoritmen. Sjekk riktigheten av Insertion-Sort!

Analyse av Insertion-Sort Kjøretiden til Insertion-Sort avhenger av størrelsen på input i.e. sekvensen som skal sorteres. I beste fall (best-case analysis) er kjøretiden lineær. Dette forekommer når listen allerede er sortert. I verste fall (worst-case analysis) er kjøretiden kvadratisk. Dette forekommer når listen er sortert i motsatt rekkefølge. I gjennomsnitt (average-case analysis) er kjøretiden ofte sammenlignbar med verste fall. I tilfellet med Insertion-Sort hvert element må i gjennomsnitt sammenlignes med halvparten av de sorterte elementene. Vi kommer tilbake til dette i detalj senere.

Effektivitet vs. Order of Growth Når vi analyserer effektiviteten til algoritmer er vi normalt ikke interessert i konstantfaktorene og andre detaljer av regnestykket da disse gir oss mere informasjon enn vi trenger. Vi er bare opptatt av hvordan kjøretiden endrer seg i forhold til inputstørrelsen n. Dette kalles gjerne rate of growth eller order of growth. Vi skal se nærmere på dette i neste forelesning.

Vår Andre Algoritme - Merge-Sort Vår andre algoritme er også en sorteringsaloritme, men Merge-Sort har et annet designe en Insertion-Sort. Merge-Sort er en såkalt divide-and-conquer algoritme. Divide (Del) problemet inn i delproblemer av samme problem. I dette tilfellet innebærer det å dele listen i to like store lister Conquer (Løs) delproblemene. I Merge-Sort gjøres dette ved å sortere delproblemen rekursivt. Combine (Kombiner) de løste delproblemene. De to sorterte dellistene kombineres for å produsere det endelige resultatet. I Merge-Sort håndteres de to første stegene av Merge-Sort selv, mens det tredje steget håndteres av en hjelpefunksjon Merge.

Vår Andre Algoritme - Merge Pseudokode Merge(A, p, q, r) 1 n 1 = q p + 1 2 n 2 = r q 3 let L[1.. n 1 + 1] and R[1.. N 2 + 1] be new arrays 4 for i = 1 to n 1 5 L[i] = A[p + i 1] 6 for j = 1 to n 2 7 R[j] = A[q + j] 8 L[n 1 + 1] = 9 R[n 2 + 1] = 10 i = 1 11 j = 1 12 for k = p to r 13 if L[i] R[j] 14 A[k] = L[i] 15 i = i + 1 16 else A[k] = R[j] 17 j = j + 1

Vår Andre Algoritme - Merge-Sort Pseudokode Merge algoritmen benyttes i combine steget i divide-and-conquer algoritmen Merge-Sort. Pseudokoden for sorteringsalgoritmen er listet under. Merge-Sort(A, p, r) 1 if p < r 2 q = (p + r)/2 3 Merge-Sort(A,p,q) 4 Merge-Sort(A,q+1,r) 5 Merge(A,p,q,r)

Bibliography Jack Edmonds. Maximum matching and a polyhedron with 0, 1 vertices. J. of Res. the Nat. Bureau of Standards, 69 B:125 130, 1965.