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

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

for bare trær Andre forelesning

deeegimnoorrrsstt Sjette forelesning

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

Rundt og rundt og. Trettende forelesning

Live life and be merry

for bare trær Andre forelesning

O(V 2 ) bwfs(v, i=1) λ[v] = i for each neighbor u of v if 0 < λ[u] < i. bwfs(u, i+1) if λ[u] = 0

Foilene legges ut her:

A new study has found that cockroaches are morons in the morning and geniuses in the evening in terms of their learning capacity.

August

Pensum: fra boken (H-03)+ forelesninger

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

Pensum: fra boken (H-03)+ forelesninger

deeegimnoorrrsstt Sjette forelesning

Evt. forklar på tavla. Diskuter kjøretid (best-/ worst-case). Innsetting og søk. Rekursjon igjen. A C E G

Innhold. Innledning 1

ALGORITMER OG DATASTRUKTURER

Algdat Eksamensforelesning. Nils Barlaug

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

ALGORITMER OG DATASTRUKTURER

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

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

All good things. Fjortende forelesning

Hvor raskt klarer vi å sortere?

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

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

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

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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Om Kurset og Analyse av Algoritmer

Eksamen i tdt4120 Algoritmer og datastrukturer

INF2220: Time 12 - Sortering

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

INF1010 notat: Binærsøking og quicksort

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Eksamenshefte TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Agenda. 1 Sortering, heap og select. 2 Binære trær. 3 Grafer, BFS og DFS. 4 Spenntrær og Korteste vei. 5 Maks flyt. 6 Dynamisk programmering

ALGORITMER OG DATASTRUKTURER

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

Logaritmiske sorteringsalgoritmer

Sortering i Lineær Tid

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

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

Lineær sortering. Radix sort

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

Algoritmer - definisjon

TDT4105 Informasjonsteknologi, grunnkurs

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

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

Introduksjon til Algoritmeanalyse

Notater til INF2220 Eksamen

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

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

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

Algoritmer - definisjon

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

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

INF Algoritmer og datastrukturer

Forelesning 30: Kompleksitetsteori

All good things. Fjortende forelesning

Løsningsforslag for utvalgte oppgaver fra kapittel 3

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

INF2220: Time 4 - Heap, Huffmann

Løsningsforslag for utvalgte oppgaver fra kapittel 9

7) Radix-sortering sekvensielt kode og effekten av cache

Læringsmål og pensum. Algoritmeeffektivitet

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

Algoritmer og Datastrukturer IAI 21899

Oppsummering. I. HVA VAR DET? I.1 ADTer og Programutvikling I.2 Datastrukturer I.3 Algoritmer II. PENSUM III.EKSAMEN IV. ØNSKER

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

Grunnleggende Grafteori

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

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

Oppgave 1. Sekvenser (20%)

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

Definisjon av binært søketre

Innføring i matematisk analyse av algoritmer

Transkript:

http://www.idi.ntnu.no/~algdat algdat@idi.ntnu.no Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

b c g a f d e h

The pitch drop experiment. Foreløpig kjørt fra 1927 til nå. Åtte dråper har falt så langt.

bogo sort: test tilfeldige permutasjoner Ideer til andre hacks som ikke er like brutale? 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 «enn-log-enn» 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!

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?

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

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 ).

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

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.

Mens dere tenker

Vær oppmerksom på at tabeller i læreboka 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 Nå har vi jo allerede smugtittet på kjøretiden, da vi sammenlignet med merge sort men hvordan kommer vi frem til den?

For de nysgjerrige: Her er alle de viktigste algoritmene dere skal lære. Bellman-Ford BFS/DFS Binære søketrær Binærsøk Bubblesort Bucket sort Counting sort Dijkstra DAGshortest-path Edmonds- Karp Floyd- Warshall Hashing Heapsort Huffmankoding Insertion sort Kruskal Merge sort Prim Quicksort Radix sort Randomized Select Select Selection sort Sterke komponenter Topologisk sortering

Bellman-Ford BFS/DFS Binære søketrær Binærsøk Bubblesort Bucket sort Counting sort Dijkstra DAGshortest-path Edmonds- Karp Floyd- Warshall Hashing Heapsort Huffmankoding Insertion sort Og denne skal vi ta i dag. Kruskal Merge sort Prim Quicksort Radix sort Randomized Select Select Selection sort Sterke komponenter Topologisk sortering