Notater til INF2220 Eksamen

Like dokumenter
INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Balanserte binære søketrær

UNIVERSITETET I OSLO

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF2220: Forelesning 2

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

INF2220: Time 4 - Heap, Huffmann

UNIVERSITETET I OSLO

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

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF2220: Forelesning 2

INF1020 Algoritmer og datastrukturer GRAFER

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

INF Algoritmer og datastrukturer

Definisjon av binært søketre

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Definisjon: Et sortert tre

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

ALGORITMER OG DATASTRUKTURER

INF Algoritmer og datastrukturer

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

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

UNIVERSITETET I OSLO

Uke 5 Disjunkte mengder

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

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

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

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

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

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

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

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

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

EKSAMEN med løsningsforslag

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

ALGORITMER OG DATASTRUKTURER

INF2220: Time 12 - Sortering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Disjunkte mengder ADT

Lars Vidar Magnusson

IN Algoritmer og datastrukturer

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

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

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

Pensum: fra boken (H-03)+ forelesninger

INF2220: Forelesning 1

INF2220: Forelesning 3

Binær heap. En heap er et komplett binært tre:

INF1020 Algoritmer og datastrukturer GRAFER

UNIVERSITETET I OSLO

Selv-balanserende søketrær

Pensum: fra boken (H-03)+ forelesninger

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

Innhold. Innledning 1

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

INF Algoritmer og datastrukturer

INF2220: Forelesning 3

All good things. Fjortende forelesning

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

INF1020 Algoritmer og datastrukturer

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

INF2220: Forelesning 1

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Søking i strenger. Prefiks-søking Naiv algoritme Knuth-Morris-Pratt-algoritmen Suffiks-søking Boyer-Moore-algoritmen Hash-basert Karp-Rabin-algoritmen

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

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

PG4200 Algoritmer og datastrukturer Forelesning 10

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

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

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

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

Korteste vei i en vektet graf uten negative kanter

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Turingmaskiner.

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

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Transkript:

Notater til INF2220 Eksamen Lars Bjørlykke Kristiansen December 13, 2011 Stor O notasjon Funksjon Navn 1 Konstant log n Logaritmisk n Lineær n log n n 2 Kvadratisk n 3 Kubisk 2 n Eksponensiell n! Trær Høyden til en node er lengden av den lengste veien fra noden til en løvnode. Høyden av et tre er log D N der D er antall barn per node og N er totalt antall noder. Dybden til en node er avstanden fra roten til noden. Postfiks - først seg selv så barna Prefiks - først venstre barn så seg selv, så høyre. Postfiks - først barna, så seg selv. Rød-svarte trær Regler: 1. Roten er svart. 2. Hvis en node er rød, må barna være svarte. 3. Enhver vei fra en node til en null-peker må inneholde samme antall svarte noder. Reglene sikrer at høyden på et rød-svart tre er maksimalt 2 log 2 (N + 1) Innsetting Hvis forelder-noden er svart er den nye noden rød. Hvis forelder-noden er rød må treet endres ved hjelp av rotasjoner og omfarging. 1. Gjør innsetting som i vanlig binært søketre, den nye noden X farges rød. 1

2. Hvis foreldren er svart: ferdig 3. Hvis P er rød: Hvis onkel er rød: Gjør G rød. Gjør S (onkel) og P svart. Se figur 1 Hvis ikke: Hvis X og P begge er venstre eller høyre barn: Gjør zig rotasjon med nødvendige fargeendringer. Se figur 3 Hvis X er venstre og P høyre eller motsatt: Gjør zig-zag rotasjon med nødvendige fargeendringer. Se figur 2 Ferdig 4. Sett X til å være den nye roten i det roterte subtreet. 5. Hvis X nå er roten i selve treet: Farg denne svart. Ellers: gjenta fra steg 2. Figure 1: Omfarging Figure 2: Zig-zag B-trær Brukes når ikke hele treet får plass i RAM. Treet er balansert og har stor bredde. Data lagres kun i løvnodene. De andre nodene har M barn og lagrer min/max verdier til barna. 2

Figure 3: Zig Prioritetskø Kan implementeres med for ekempel: en liste, et søketre eller en heap. prioritetskø må ha to metoder: void i n s e r t ( i n t p r i o r i t y, E e ) ; E deletemin ( ) ; // f j e r n element med l a v e s t p r i o r i t e t En Kompleksitet Uordnet Liste: insert(): O(1) deletemin(): O(n) Sortert Liste insert(): O(n) deletemin(): O(1) Søketrær insert() (average): O(log 2 (n)) insert() (worst): O(n) deletemin() (average): O(log 2 (n)) deletemin() (average): O(n) Heap Barn er alltid større eller lik sine foreldre. Må være komplett og derfor også balansert. Kan bruke et array. Venste barn: index 2. Høyre barn: index 2+1. Foreldre: (int)index/2. Percolate down/up - kan maksimalt flyte O(log 2 (n)) siden treet er i balanse. Innsetting tar i gjennomsnitt O(n). Leftist Heap Lagd for rask merge. Er med vilje ubalansert. Bruker null path length - lengden av korteste veien fra x til en node uten to barn. Merge tar O(log 2 n). 3

Hashing Hashfunksjonen Hashfunksjonen bør spre verdiene godt. Tabellstørrelsen bør være et primtall. Tallet X i X % Y bør være høyt for best mulig spredning. Kollisjon Ved kollisjon (To ting som hasher til samme verdi) har man to valg: Lukket hashing (åpen adressering) og åpen hashing (lukket adressering). Lukket hashing har en egen liste (eller annen datastruktur) for hver hashverdi og alle som hasher til samme verdi legges i listen. Ved åpen hashing vil den (forsøke) å finne en ledig plass i hashtabellen. Grafer En topologisk sortering er en rekkefølge av nodene i en graf der for alle kanter fra X til Y, vil X komme før Y. Et minimalt spenntre er en graf med minst mulig total kostnad (antall kanter) for å nå alle noder. En sterkt sammenhengende graf er en graf der man kan komme fra alle noder til alle andre noder. En svakt sammenhengede graf er en graf der man kan i en tilsvarende urettede grafen komme fra alle noder til alle andre noder. Inngraden til en node er antall kanter inn til noden. Utgraden til en node er antall kanter ut fra noden. Floyds algoritme - korteste vei alle-til-alle Idé: Hvis det går en vei fra node i til node k med lengde ik, og en vei fra node k til node j med lengde kj, så går det en vei fra node i til node j med lengde ik + kj. Algoritmen Avstanden fra node i til node k settes lik vekten på kanten fra i til k. Alle andre til. For alle noder K: For alle kombinasjoner av to noder A og B: Se om det er bedre å gå fra A til B gjennom K. Floyds algoritme er dynamisk fordi man kan parallelisere det nest siste punktet. 4

Finne løkke s t a t i c boolean findloop ( Node g, Node l o o k i n g F o r ) { i f ( g. v i s i t e d && g == l o o k i n g F o r ) r e t u r n t r u e ; i f (! g. v i s i t e d ) { g. v i s i t e d = t r u e ; f o r ( Node c h i l d : g. neighbours ) { i f ( findloop ( c h i l d, l o o k i n g F o r ) { r e t u r n t r u e ; r e t u r n f a l s e ; Kombinatorisk søk Finne alle mulige kombinasjoner og teste om de er løsning på problemet. Også kalt bruteforce. Disjunkte mengder Mengde av elementer som er like (relasjonen er transitiv, symetrisk og refleksiv). Hvis A og B er i samme ekvivalensklasse og B og C i samme ekvivalensklasse er også A og C i samme ekvivalensklasse. f i n n ( a ) ; // r e t u r n e r e r en r e p r e s e n t a n t f o r e k v i v a l e n s k l a s s e n t i l a. union ( a, b ) ; // S l å r sammen e k v i v a l e n s k l a s s e n e t i l a og b Det er bevist at finn() og union() ikke kan være O(1) samtidig. Kan implementeres med grafer eller arrays. Grafen kan være en array der array[4] = 7 betyr at element 4 har samme ekvivalsenklasse som 7. array[7] == -1 betyr at element 7 er representasjonen for ekvivalensklassen. Det er flere måter å slå sammen grafene for å få kortest mulig sti til det siste elementet: Union-by-size Det minste treet blir subtree av det største Union-by-height Treet med minst høyde blir subtre av det høyeste. Man kan bruke negativt tall i rotnoden for å si noe om høyden/størelsen. Kan gjøre stiene kortere ved å forkorte et oppslag slik at neste gang samme oppslag kommer peker det direkte til roten. NP-kompletthet NP-komplette problemer er problemer hvor: Som ikke kan løses i polynomisk tid N k, men kun i N k (mye større). Dersom en mulig løsning er gitt, så kan løsningen kontrolleres i polinomisk tid. Alle NP-problemer kan konverteres til problemet ved en modifikasjon av inputsdataene. 5

Tekstalgoritmer Huffman-koding Måte å komprimere en tekstfil. Lager korte bitsekvenser til mye brukte tegn og lengre til de som er skjeldnere brukt. Regler Hvert tegn som forekommer i filen, skal ha si egen entydige kode. Ingen kode er prefiks av en annen kode. Kodingen må komme først i filen eller separat. Algoritmen Lag en frekvenstabell for alle tegn som forekommer i datafilen. Betrakt hvert tegn som en node, og legg dem inn i en prioritetskø P med frekvensen som vekt. Mens P har mer enn ett element: Ta ut de to minste nodene fra P. Gi dem en felles foreldrenode med vekt lik summen av de to nodenes vekter. Legg foreldrenoden inn i P med vekt lik summen av barnas vekt. Huffmankoden til et tegn (bladnode) får vi ved å gå fra roten og gi en 0 når vi går til venstre og 1 når vi går til høyre. Boyer-Moore Nålen er strengen vi forsøker å finne i Høystakken. Boyer-Moore bruker good character shift og bad character shift. Boyer-Moore-Horspool er en forenkling av Boyer-Moore og bruker kun bad character shift. Algoritmen starter sammenlikningen fra det siste tegnet i nålen og går bakover. Bad character shift Bad character shift er en array på lengde med antall forskjellige tegn i strengene, typisk 256. Den inneholder hvor langt vi må flytte nålen hvis vi får en mismatch for å få en match. Dersom tegnet det sammenliknes med ikke finnes i nålen er verdien lengden av nålen. S t r i n g høystakk = abcde ; S t r i n g nål = de ; i n t [ ] bcs = new i n t [ 2 5 6 ] ; På den første testen (b mot e) vil nålen flyttes 2 hakk. Den neste (d mot e) vil den flyttes 1 hakk. 6

Good character shift Good character shift er en array som er like lang som nålen. Den angir hvor langt vi må flytte nålen gitt at alle tegn etter det nåværende tegnet har matchet, men ikke det nåværende. S t r i n g høystakk =....XMANPANMAN ; S t r i n g nål = ANPANMAN ; i n t [ ] gcs = new i n t [ nål. l e n g t h ( ) ] ; Etter at N, A og M har matchet, blir det en missmatch på X og N. gcs[4] er 6. Vi flytter 6 tegn siden vet at AN i starten av ANPANMAN kommer til å matche. Programmerings paradigmer Splitt og hersk del opp problemet i flere mindre delproblemer til det er trivielt å løse. Grådige algoritmer I hvert trinn, gjør valget som ser ut til å være nærmest løsningen. Dynamisk programmering har overlapp av delproblemer. Dynamisk programmering Bør brukes på problemer som ser ut til å trenge eksponensiell eksekveringstid. Dynamisk programmering gir alltid algoritmer som er polynomiske i tid. Egenskaper til dynamiske problemer Enkle delproblemer. En optimal løsning må kunne settes sammen av optimale løsninger på delproblemene. Overlapp av delproblemer. Sortering Se SortProg.java Lykke til! 7