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

Like dokumenter
Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

Foilene legges ut her:

for bare trær Andre forelesning

for bare trær Andre forelesning

INF1010 notat: Binærsøking og quicksort

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

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

Om Kurset og Analyse av Algoritmer

Hvor raskt klarer vi å sortere?

Ninety-nine bottles. Femte forelesning. I dagens forelesning: Mest matematiske verktøy. Først: Asymptotisk notasjon. Så: Rekurrensligninger.

TDT4105 Informasjonsteknologi, grunnkurs

Algoritmer - definisjon

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

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

INF Algoritmer og datastrukturer

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

Eksamen i tdt4120 Algoritmer og datastrukturer

LO118D Forelesning 2 (DM)

Læringsmål og pensum. Algoritmeeffektivitet

Algoritmer - definisjon

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

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

7) Radix-sortering sekvensielt kode og effekten av cache

ALGORITMER OG DATASTRUKTURER

Forelesning 30: Kompleksitetsteori

ALGORITMER OG DATASTRUKTURER

n/b log b n = (lg n) a log b n = n log b a

Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

ALGORITMER OG DATASTRUKTURER

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Eksamenshefte TDT4120 Algoritmer og datastrukturer

Rekursiv programmering

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

Backtracking som løsningsmetode

ALGORITMER OG DATASTRUKTURER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Live life and be merry

TDT4102 Prosedyreog objektorientert programmering Vår 2016

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

Backtracking som løsningsmetode

Algoritmeanalyse. (og litt om datastrukturer)

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

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

deeegimnoorrrsstt Sjette forelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

NP-kompletthet. «Hvordan gjøre noe lett for å vise at noe annet er vanskelig»

Algoritmer og Datastrukturer IAI 21899

Algoritmer og Datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Longest. increasing. subsequence. Betingelser. Matrise- common. Grådig vs. DP. Forside. Intro. Fibonacci-tall. Memoisering DP

INF2220: Time 12 - Sortering

Velkommen til MAT1030!

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

MAT1030 Diskret Matematikk

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Oppgave 1. Sekvenser (20%)

Magnus Lie Hetland. Problemløsningsguide, Algoritmer og datastrukturer

Mattespill Nybegynner Python PDF

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Choices, choices. Tiende forelesning. Dynamisk programmering: En serie med valg der valgmulighetene er avhengige av hva vi har valgt før.

Innhold. Innledning 1

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Logaritmiske sorteringsalgoritmer

Rekursiv programmering

Forelesning 1. Algoritmer, pseudokoder og kontrollstrukturer. Dag Normann januar Vi som skal undervise. Hva er diskret matematikk?

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Vi som skal undervise. MAT1030 Diskret matematikk. Hva er diskret matematikk? Hva er innholdet i MAT1030?

UNIVERSITETET I OSLO

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

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

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Når Merge sort og Insertion sort samarbeider

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

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

Pensum: fra boken (H-03)+ forelesninger

INF1020 Algoritmer og datastrukturer GRAFER

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Løsnings forslag i java In115, Våren 1998

TDT4110 IT Grunnkurs Høst 2015

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

Norsk informatikkolympiade runde

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

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

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

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

UNIVERSITETET I OSLO

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Pensum: fra boken (H-03)+ forelesninger

En oppsummering (og litt som står igjen)

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

Definisjon av binært søketre

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

Algoritmer Teoribok, kapittel 5. Algorithms

Transkript:

Anbefalte forkunnskaper Studentene forutsettes å kunne programmere, for eksempel ved å ha tatt TDT4100 Objektorientert programmering. Studentene forutsettes også å ha kunnskaper om funksjoner, logaritmer, grensebetraktninger, mengder, relasjoner, induksjonsbevis, rekker og elementær sannsynlighetsregning.

Hei, jeg er @mlhetland

Evt. gå inn på it s:learning for å finne link til nettsider og foiler. http://www.idi.ntnu.no/~algdat algdat@idi.ntnu.no http://www.idi.ntnu.no/~mlh/algdat/footstool Nettsidene fortsatt under oppdatering Øvingsopplegg presenteres neste tirsdag

Senere i semesteret: Korteste vei i vilkårlige kart/nett verk. Nå forenkler vi veldig. Kun hexmaps (som i mange spill, f.eks.) og vi ser kun på *to* rader. Korteste vei blir da litt for enkelt, så vi teller *antallet mulige* veier/ stier i stedet.

Hvor mange stier fra venstre til høyre? (Start øverst til venstre.) 1 2 5 13 1 3 8 21

Disse tallene er Fibonaccitall! F1 F3 F5 F7 F2 F4 F6 F8

F0 F1 F3 F5 F7 F2 F4 F6 F8 f n = ( n if n<2; f n 1 + f n 2 otherwise.

f n = ( n if n<2; f n 1 + f n 2 otherwise.

Påstand: Etter hvert som datamaskiner blir mer effektive, og raskt kan behandle større datamengder, så blir algoritmekonstruksjon mindre viktig. Vi har effektiv hardware Mulig motargument: Vi vil utnytte hardwaren bedre. Dobbelt så effektiv: 8 ganger så varm. Men det er ikke hovedargumentet hva skal vi med effektive algoritmer?

Eksperimentserver for AK-gruppa Fra i fjor Intel i7 920 @ 2.67GHz (quadcore) 12GB RAM (8192KB cache) Kode skrevet i C

Dette eksperimentet gjorde vi live i første forelesning i fjor. (Kan evt. gjentas om det blir mye «popular demand» ;-) vs Eksperimentserver for AK-gruppa Fra i fjor Intel i7 920 @ 2.67GHz (quadcore) 12GB RAM (8192KB cache) Kode skrevet i C Min føste hjemmemaskin Fra 1983 Zilog Z80 A @ 4MHz 32KB RAM Kode skrevet i BASIC (tolket) Om man kun ser på klokkefrekvensen bør man få en speedup på 667.5. Flere faktorer tyde på en langt større speedup.

De to ulike implementasjonene (og algoritmene) f n = ( n if n<2; f n 1 + f n 2 otherwise.

f n = ( n if n<2; f n 1 + f n 2 otherwise. int f(int n) { if (n<2) return n; return f(n-1) + f(n-2); } Opplagt, «pen» rekursiv implementasjon i C.

int f(int n) { if (n<2) return n; return f(n-1) + f(n-2); } 5 LET N = 50 10 LET P = 0 20 LET F = 1 30 FOR I = 1 TO N-1 40 LET T = F + P 50 LET P = F 60 LET F = T 70 NEXT I 75 PRINT F BASIC har ikke like god støtte for rekursjon, så vi bruker en FORløkke i stedet. Ikke like «pent» men kanskje ikke så dumt likevel? (Hint: Dette er en forsmak på dynamisk programmering.)

(Memotech-en klarer ikke høye nok heltall til å regne ut dette, så svaret vi får er et unøyaktig flyttall. Det kunne vi ha unngått hvis vi skrev vår egen kode for å håndtere store tall.) f 50 Dette er det vi prøver å finne nå. Ikke urimelig med n=50 i et ordentlig spill, f.eks. (og husk at dette er et *enklere* problem enn det man

vs ~3m ~0s Eksperimentserver for AK-gruppa Fra i fjor Intel i7 920 @ 2.67GHz (quadcore) 12GB RAM (8192KB cache) Kode skrevet i C Min føste hjemmemaskin Fra 1983 Zilog Z80 A @ 4MHz 32KB RAM Kode skrevet i BASIC (tolket) Om man kun ser på klokkefrekvensen bør man få en speedup på 667.5. Flere faktorer tyde på en langt større speedup.

Sorter ti mill 20m 5.5h Freq Alg Impl 10 7 n lg n 50 Insertion sort er det vi ender opp med i dag. Merge sort lærer dere siden. 10 10 n 2 2 Frekvens: Instruksjoner per sekund. Algoritme: F.eks. merge sort kontra insertion sort. Implementasjon: F.eks. inkompetent, høynivåsimplementasjon kontra ninjalavnivås-implementasjon.

Sorter hundre mill 4h 23d Freq Alg Impl 10 7 n lg n 50 10 10 n 2 2

Å finne kortest mulig rute innom byene i Sverige er supervanskelig, mens det å finne korteste rute fra vest til høst i Kina er superlett. Hva betyr det, helt presist og hvordan kan det ha seg? Det er en to forskjellige konsepter her: (1) Det finnes gode og dårlige algoritmer, og det er stor forskjell mellom dem; (2) det finnes problemer der vi ikke kjenner (eller kan finne) gode algoritmer. Det siste (problemkompleksitet) kommer vi tilbake til mot slutten av semesteret (NP-kompletthet o.l.).

bogo sort: test tilfeldige permutasjoner Ideer til andre hacks som ikke er like brutale? (Demo først bogo sort med tallkort.) 5 3 6 0 1 2 4 0 4 3 2 1 6 5 1 2 5 4 6 0 3 2 3 5 1 4 6 0 Det første man ofte prøver seg på (som et hack ) er en brute force -løsning. Bare prøv alle mulige løsninger, f.eks. Som et alternativ til bogo sort kan vi systematisk generere alle permutasjoner (så vi ikke risikerer å sjekke noen av dem flere ganger), s.k. permutation sort. Noen ideer til forbedringer? 6 2 3 0 1 4 5 Hva med å ta vare på biter som er riktige? Og kanskje være litt mer systematisk med å sette på plass tall som er på feil plass?

Hvorfor har vi ikke løst problemet?

Hvorfor har vi ikke løst problemet? Fordi 100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Altså 93326215443944152681699238856266 70049071596826438162146859296389 52175999932299156089414639761565 18286253697920827223758251185210 916864000000000000000000000000 permutasjoner må sjekkes

cn 2 T (n) n 0

http://boingboing.net/2008/06/19 O-notasjonen representerer en øvre grense. Det er en grunn til det

Klasse Merk: Det spiller ingen rolle hvilken logaritme vi bruker. (Hvorfor?) O( ) konstant 1 logaritmisk lg n lineær n loglineær n lg n kvadratisk n 2 kubisk n 3 polynomisk n k eksponentiell k n Det finnes også problemer som ikke kan løses polynomisk, problemer vi tror ikke kan løses polynomisk, og problemer som ikke kan løses i det hele tatt. Dette er funksjonsklasser som vi beskriver kjøretider med. Kjøretider som oppstår i krysningen algoritme+problem (dvs. type instanser). Permutation sort er altså enda verre n!

n 10 100 1 000 Hvis vi kan håndtere større problemer blir effektive algoritmer *viktigere*. n 2 100 10 000 1 000 000 2 n 1024 >10 30 >10 300 Bogo sort (og brute force) er *mye* verre enn dette, faktisk, med forventet kjøretid proporsjonal med n! ( n fakultet ).

Vi har effektiv hardware hva skal vi med effektive algoritmer?

Litt kombinatorikk

To typer turnering: Round robin (alle-motalle) og knockout-turnering (hver taper går ut umiddelbart). Her representert ved superheltene Robin (for øyeblikket ikke så rund ) og Knockout. (Not so round ) Robin Knockout

n 1

h = lgn n = 2 h

IN DUKSJON RE KURSJON

A? A? B? B? B! B! A! A! A? A!

Assume Delegate 1 n 1 n n n 1 1 Deduce Extend

Problemløsning

Tenk på noe enklere!

Tenk på noe enklere! Forenklet versjon, en bit av problemet, et trinn i en løsning, kjent algoritme som nesten passer, beslektet problem, «la oss foreløpig anta» Det er egentlig dette induksjon, reduksjon og rekursjon handler om også. Induksjon: Se kun på ett trinn om gangen bygg større løsninger fra små. Rekursjon: Beskriv en løsning ut fra enklere (del)problemer. Reduksjon: Løs ved hjelp av et annet problem som det er enklere for deg å løse.

Sortering er et klassisk eksempel.

Litt tilfeldig valgte forenklinger (De fleste forenklinger vil kunne gi oss ideer.) Kan dere komme på andre forenklinger/ spesialtilfeller? Gir det dere noen ideer? Hva om sekvensen har lengde 2? Hva om alle utenom ett element er sortert? Hva om vi bare skal få på plass det minste? Hva om alle elementene er enten 0 eller 1?

Hva om sekvensen har lengde 2? 5 3 3 5 Hmm. Bytter plass på to elementer ved siden av hverandre samtidig med at vi sammeligner dem. Kanskje nyttig grunnoperasjon?

Hva om alle utenom ett element er sortert? 0 1 3 4 5 2 6 0 1 2 3 4 5 6 Hmm. Det må flyttes forbi elementer, som må forskyves, én og én. Kanskje vi bare kan dytte det gjennom med sammenligning/ombytting av naboer?

Hva om vi bare skal få på plass det minste? 6 2 3 0 1 4 5 0 6 2 3 1 4 5 Lignende situasjon, men må må vi *finne* den minste. Det hadde vært bra om vi kunne bake det inn i sammenligninger/ ombyttinger. (Dette kan vi også ta videre for å komme frem til selection sort og bubble sort.)

Hva om alle elementene er enten 0 eller 1? 0 0 0 1 0 1 0 0 0 0 0 1 1 0 Hmm. Nullene til venstre trenger vi ikke flytte på. Hvis vi finner en ny null så må den presses gjennom evt. enere, inn i null-gruppen, med sammenlign-og-bytt - taktikken.

Vær oppmerksom på at selv om tabeller i Cormen indekseres fra 1 til n så indekseres de i Java og Python fra 0 til n-1 x > x x i j i j x x > x Insertion-Sort(A) 1 for j = 2 to A.length 2 x = A[j] 3 // Sett x inn i A[1.. j 1]: 4 i = j 1 5 while i > 0 and A[i] > x 6 A[i + 1] = A[i] 7 i = i 1 8 A[i + 1] = x Hva har kjøretiden her med vår kvadratiske Robin å gjøre? Hva er forskjellen på maks flaks og maks uflaks her?

Asymptotisk effektivitet kan være kritisk Robin + Knockout = en del kombinatorikk Kjerneverktøy: Induksjon/rekursjon Mer fokus på bruk av induksjon i algoritmedesign i «Python Algorithms», som igjen er inspirert av bl.a. «Using Induction to Design Algorithms» av Udi Manber.

Pensum Se nettsidene for detaljer.

Brukt i mange år. Innfører alternativ i år.

Frivillig Python Algorithms er en kort og lettlest bok, med forklaringer i retning av forelesningene, med Python-kode for alle algoritmene. Anbefalt støttelitteratur.

http://www.idi.ntnu.no/~algdat algdat@idi.ntnu.no http://www.idi.ntnu.no/~mlh/algdat/footstool Nettsidene fortsatt under oppdatering Øvingsopplegg presenteres neste tirsdag