for bare trær Andre forelesning

Like dokumenter
for bare trær Andre forelesning

Foilene legges ut her:

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

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

deeegimnoorrrsstt Sjette forelesning

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

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

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger

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

Litt om grafer og traversering, og om hashing. Jeg gikk en tur i. Tredje forelesning

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Live life and be merry

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

Innhold. Innledning 1

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

deeegimnoorrrsstt Sjette forelesning

INF2220: Time 12 - Sortering

Rundt og rundt og. Trettende forelesning

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Litt om grafer og traversering, og om hashing. Jeg gikk en tur i. Tredje forelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Algdat Eksamensforelesning. Nils Barlaug

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

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

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

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

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.

INF2220: Forelesning 2

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

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

Lineær sortering. Radix sort

Eksamen i tdt4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Definisjon av binært søketre

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

Definisjon: Et sortert tre

MAT1030 Diskret Matematikk

Binære trær: Noen algoritmer og anvendelser

August

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

INF2220: Forelesning 2

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

Grunnleggende Grafteori

INF2220: Time 4 - Heap, Huffmann

INF Algoritmer og datastrukturer

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

All good things. Fjortende forelesning

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Notater til INF2220 Eksamen

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

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

Algoritmer og Datastrukturer IAI 21899

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

INF Algoritmer og datastrukturer

O, what a tangled. Fjerde forelesning. Robot-eksemplet som ikke ble gjennomgått sist blir frivillig selvstudium (ut fra foilene :-)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

INF Algoritmer og datastrukturer

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

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

MAT1030 Forelesning 25

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

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

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

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

MAT1030 Diskret Matematikk

INF Algoritmer og datastrukturer

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

IN Algoritmer og datastrukturer

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

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

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

UNIVERSITETET I OSLO

Lars Vidar Magnusson

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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

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

INF1020 Algoritmer og datastrukturer GRAFER

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

INF2220: Forelesning 1

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

SIF8010 ALGORITMER OG DATASTRUKTURER

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

Transkript:

Formler eller bevis e.l. som er uklare? Si ifra, så kan jeg gå g jennom dem. Forelesningene er ment å være en hjelp til å forstå det man leser i boka ikke «spoon-feeding» av det samme som står der for bare trær Andre forelesning

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 Kruskal Merge sort Prim Quicksort Radix sort Randomized Select Select Selection sort Sterke komponenter Topologisk sortering

!

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

Round Robin Kvadratisk Knockout Lineær

(Eksempel på en form for tellebevis: Tell en mengde på to ulike måter de to resultatene må være like.) To måter å finne antall håndtrykk på: n-1 + + 0 og alle hilser på n 1; del på to for å få antall håndtrykk. Disse må være like.

n 1 1 n

En annen måte å se det på: Alle tar n 1 personer i hånda (n*(n 1)). Vi har da telt hvert håndtrykk to ganger, og må dele på 2. I vårt tilfelle: Innsetting blant k ferdigsorterte tar O(k) tid, og k går fra 1 til n, så vi får (ca.) 1 + 2 + + n, som gir kvadratisk kjøretid. n n 1 2 Nesten n 2. Kvadratisk. Dette må også pugges!

Hvor lang tid tar det å fylle en petri-skål med amøber vha. celledeling? Turnering. Hvor mange kamper (og runder)? Igjen to fremgangsmåter: Halvering i hver runde: 1 + 2 + 4 + + n/2. Hver kamp slår ut én: n 1.

n = 2 h h = log 2 n

Skriv av og pugg denne figuren! Antall *runder* blir logaritmisk. n 1 Interne noder = turneringer. Eliminér alle utenom vinneren. n log 2 n n 2 n 2 = n Totallssystemet: 111 = 1000-1 etc. 1 1 1 Innhold fordeles nedover, og summen forblir den samme. n 20 spørsmål: Hvor mange doblinger fra 1 til n? Halveringer fra n til 1? Med 20 spørsmål kan man skjelne mellom ca. 1 mill. (Hva med 300?)

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?

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 Kruskal Merge sort Prim Quicksort Radix sort Randomized Select Select Selection sort Sterke komponenter Topologisk sortering

con-tra-pos-i-tive [ kon-tr^-poz-i-tiv] n. Logic A proposition derived by negating and permuting the terms of another, equivalent proposition; for example, All not-y are not-x is the contrapositive of All X are Y.

Hovedstrategien: Finn et kjent problem og en transform. Eksempel fra eksamen: Finn korteste vei fra p1 til p2 uten å krysse linjestykker på veien. Naturlig å bruk en korteste-vei-algoritme, men mange gjorde ikke det. Mye er vunnet på å kunne velge riktig algoritme fra pensum. Reduksjon: Det er jo bare å Ikke juks hvis du skal bruke det i bevis Selv om vi kommer tilbake til det siden, er det mange som har litt trøbbel med å bruke reduksjon til å vise at ting er *vanskelige* så vi ser litt på det allerede (som en forsmak).

Nytt problem Vanskelig problem Enkelt Enkelt Enkelt problem Nytt problem Nytt = enkelt Reduksjon + løsning Nytt = vanskelig Ellers: Selvmotsigelse

Nytt problem Enkelt Vanskelig problem Nytt = hvem vet? Enkelt å gjøre alt vanskelig

Ikke la dere lure av ordet reduksjon her! X? Det er jo bare å Y. Hvilken vei gir informasjon? Hvis jeg vil vise at A er vanskelig og jeg vet at B er vanskelig må jeg redusere _ til _

Hvis jeg vil vise at A er vanskelig og jeg vet at B er vanskelig må jeg redusere B til A «B? Det er jo bare å A» Hvis A var enkelt ville B også være det

Problem

Krav

Virkemåte

Styrke

Svakhet

Kjøretid

Problem Krav Virkemåte Styrke Svakhet Kjøretid

Etter tips fra Alexander Bjerkan. Flere eksempler + kode: http://hurl.no/aht Insertion Sort

Sortering For hver i Sett inn blant i-1 Lavt konstantledd Skalerer dårlig Θ(n 2 ) Merk at vi kan få O(n) i best-case her, hvis vi implementerer riktig. Sortering ved innsetting Hvordan kan vi få bra best-case på nesten alle algoritmer?

reduksjon! rekursjon dekomp. induksjon gjenbruk travers.

Sykelløs Traversering

Besøk noder Evt. på leting Siden vi ser bort fra sykler gjelder dette altså bare for trær. Merk: Metodene her fungerer også for DAGs. Det eneste som skjer er at enkelte noder blir besøkt flere ganger. Ingen sykler Foreløpig Besøk deltrær Rekursivt Grundig Retningsløs Θ(n) Traversering

!

Venstrehåndsregelen. Fungerer bare hvis vi ikke har sykler.

Først: Høyreregelen. Så: Rekursiv formulering. Bilde: Hver node er en person. Det sendes rundt en påmeldingsliste. Hver person er ansvarlig for at alle underordnede signerer. Når har hver person lista? (Når signerer han/hun? Pre-, post- og in-fix.) B D F A C E G D B A B C B D F E F G F D

Traversering av trær. Dybde-først-søk, egentlig. Kjerneeksempel på rekursjon. Helt «likt» med mange rekursive algoritmer som ikke eksplisitt har trær å jobbe med. Helt essensielt å forstå grundig! Først: Prefikstraversering.

Infiks

Postfiks

Prefiks-, infiks- og postfikstraversering på tavla. Rekursjonen evt. illustrert ved hjelp av folk som står i «stack» (DFS). Se så hva som skjer hvis de står i kø i stedet (BFS). Merk at nodene her står i BFSrekkefølge. A B C D E F G

Hva er forskjellig? DFS/Infixordning. Søketre-egenskap. Evt. demonstrer søk. «Ledet DFS» bare halve det rekursive arbeidet. D Minimum og maksimum kan finnes lett. Hva blir kjøretiden på alt dette? B F A C E G

Forg jenger/ etterkommer: Ser bare på etterkommer. Vi vil nå kunne gå oppover, så vi har piler begge veier. D Tilfelle 1: Vi har et høyre deltre velg minimum der. Tilfelle 2: Vi har ikke et høyre deltre. Velger da «Den laveste forfader med venstre barn som også er en forfader (eller oss selv)». B F A C E G

Best-case/average-case: Roughly balansert. Full traversering: O(n). Å traversere k etterfølgende noder: O(lg n + k). Søk, minimum, maksimum, forgjenger, etterfølger: O(lg n). Generelt (worst-case): «h» (høyden) i stedet for «lg n». Vi kan få h = n (lenket liste). log 2 n n 2 n 1 n n 2 = n 1 1 1 n Nok et bilde for å huske antall interne noder: Anta at alle foreldre (interne noder) har to iskrem hver, og at de gir dem til barna sine. Alle vil da ha is, bortsett fra rota. Ser du hvorfor det betyr at vi har n løvnoder og n 1 interne?

reduksjon! rekursjon dekomp. induksjon gjenbruk travers. Traversering

Binærsøk

Søk Kun sortert Rekursiv Halvering Tabell Liste Θ(lg n) Binærsøk

ALF Tenk på et tall mellom 1 og 100. BETH OK. (Hun tenker på 42.) ALF Er det over 50? BETH Nei. ALF Over 25? BETH Ja. ALF Over 37? BETH Ja. Over 43? Nei. Over 40? Ja. Over 42? Nei. Over 41? Ja. ALF BETH ALF BETH ALF BETH ALF BETH 7 spørsmål = lg2 100

Vi leter etter 27. 3 13 15 16 27 28 29 32 39 46 49 73 77 85 88 3 13 15 16 27 28 29 32 39 46 49 73 77 85 88 3 13 15 16 27 28 29 32 39 46 49 73 77 85 88 3 13 15 16 27 28 29 32 39 46 49 73 77 85 88 3 13 15 16 27 28 29 32 39 46 49 73 77 85 88 Forkast halve tabellen i hver iterasjon Her spesialbehandler vi midt-elementet Ja, vi kan velge om vi vil bruke rekursjon eller iterasjon. Og: Ved at vi sjekker midt-elementet spesifikt kan vi av og til avslutte tidligere. Konstant best-case.

n 1 n log 2 n n 2 n 2 = n 1 1 1 n

reduksjon! rekursjon dekomp. induksjon gjenbruk travers. Binærsøk

Nøkler i interne noder eller ikke Binære eller ikke Fortsatt traversering av trær. Denne gangen: På leting etter løvnode *med* veiskilt. + Søketrær

Søk Ordnede verdier Rekursiv «Halvering» Tilfeldige verdier Sorterte verdier Avg Θ(lg n) Ω(1), O(n) Søk i søketre uten balansering

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

reduksjon! rekursjon dekomp. induksjon gjenbruk travers. Søk i søketre uten balansering

Balansering

Vi kan rotere begge veier. Husk at A, C og E her godt kan ha deltrær under seg, og at B kan ha et tre over seg, som må flyttes til D (eller omvendt). B D Garanterer ikke balansering i seg selv: Må brukes til å overholde en eller annen global «policy». A D B E C E A C Mulig policy: AVL-trær Høyden på deltrær har maks-diff på 1

Nodesplitting Heller ingen garanti for balansering. Brukes som regel med flere barn enn 2, og krav til både maks- og min-grad for noder. B For eksempel: Indre noder har minst 2, og maks 3 barn. Da kan vi sørge for balansering uansett. Mer generelt: B-trær. B B E A D E A D E Mulig policy: 2-3-trær Indre noder har 2 eller 3 barn

Θ(lg n) Innsetting og søk i selvbalanserende søketre

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 Kruskal Merge sort Prim Quicksort Radix sort Randomized Select Select Selection sort Sterke komponenter Topologisk sortering