INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Notater til INF2220 Eksamen

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF2220: Time 4 - Heap, Huffmann

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

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

INF2220: Forelesning 3

INF Algoritmer og datastrukturer

Obligatorisk oppgave 1 INF1020 h2005

EKSAMEN med løsningsforslag

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

INF2220: Forelesning 2

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Algoritmer og Datastrukturer

EKSAMEN. Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

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

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

UNIVERSITETET I OSLO

INF1020 Algoritmer og datastrukturer

Algoritmer og Datastrukturer

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Ordliste. Obligatorisk oppgave 1 - Inf 1020

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

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

UNIVERSITETET I OSLO

INF2220: Time 12 - Sortering

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

Algoritmer og Datastrukturer IAI 21899

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

INF2220: Forelesning 3

INF Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 7

INF2810: Funksjonell Programmering. Trær og mengder

Algoritmer og Datastrukturer

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

UNIVERSITETET I OSLO

INF2220: Forelesning 2

Kap 9 Tre Sist oppdatert 15.03

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

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

PG4200 Algoritmer og datastrukturer Forelesning 10

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

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

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

INF Algoritmer og datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

1 Hver node er enten rød eller sort. 2 Rota er sort. 3 En rød node kan bare ha sorte barn

IN1010 våren januar. Objektorientering i Java

INF Uke 10. Ukesoppgaver oktober 2012

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

INF2810: Funksjonell Programmering. Trær og mengder

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Løsningsforslag EKSAMEN

PG 4200 Algoritmer og datastrukturer Innlevering 2

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

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

PG4200 Algoritmer og datastrukturer Forelesning 12

SIF8010 ALGORITMER OG DATASTRUKTURER

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

Obligatorisk oppgave 1 i INF 4130, høsten 2008

INF Algoritmer og datastrukturer

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

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

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

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

Transkript:

INF2220 - Algoritmer og datastrukturer HØSTEN 2009 Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 13: Eksamensgjennomgang Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 1 / 22

Generelle Tips Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 2 / 22

Generelle Tips Du blir bedømt etter hva du viser at du kan Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 2 / 22

Generelle Tips Du blir bedømt etter hva du viser at du kan Du må begrunne svar Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 2 / 22

Generelle Tips Du blir bedømt etter hva du viser at du kan Du må begrunne svar Du må ikke skrive av bøker eller foiler Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 2 / 22

Generelle Tips Du blir bedømt etter hva du viser at du kan Du må begrunne svar Du må ikke skrive av bøker eller foiler Gjør de enkleste oppgavene først Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 2 / 22

Hashfunksjoner Finn to svakheter ved hashfunksjonen gitt under. int hashfunc ( String s, int t a b l e S i z e ){ int hashvalue =0; for ( int i = 0; i < s. length ( ) ; i ++){ hashvalue += 7 ( int ) s. charat ( i ) ; return hashvalue % t a b l e S i z e ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 3 / 22

Hashfunksjoner Finn to svakheter ved hashfunksjonen gitt under. int hashfunc ( String s, int t a b l e S i z e ){ int hashvalue =0; for ( int i = 0; i < s. length ( ) ; i ++){ hashvalue += 7 ( int ) s. charat ( i ) ; return hashvalue % t a b l e S i z e ; 1. Funksjonen er kommutativ dvs. hashfunc( abc ) == hashfunc( acb ) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 3 / 22

Hashfunksjoner Finn to svakheter ved hashfunksjonen gitt under. int hashfunc ( String s, int t a b l e S i z e ){ int hashvalue =0; for ( int i = 0; i < s. length ( ) ; i ++){ hashvalue += 7 ( int ) s. charat ( i ) ; return hashvalue % t a b l e S i z e ; 1. Funksjonen er kommutativ dvs. hashfunc( abc ) == hashfunc( acb ) 2. Funksjonen gir alt for lave verdier, en ganger bare int verdi med 7 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 3 / 22

Åpen og Lukket Hashing Forklart kort problemene som kan oppstå ved sletting av elementer når en bruker lukket hashing (åpen adressering). Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 4 / 22

Åpen og Lukket Hashing Forklart kort problemene som kan oppstå ved sletting av elementer når en bruker lukket hashing (åpen adressering). A En kan ende opp med å måtte traversere hele hashtabellen på leiting etter elementer, fordi en tom tabell-celle betyr ikke nødvendigvis at ingenting har hashet til denne verdien. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 4 / 22

Todeling av elementer Hvor mange ganger kan en dele tallet N i to før en får en verdi som er mindre eller lik 1? Begrunn svaret. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 5 / 22

Todeling av elementer Hvor mange ganger kan en dele tallet N i to før en får en verdi som er mindre eller lik 1? Begrunn svaret. A log 2 (N) siden dette er revers funksjonen til 2 N, dvs. log 2 (2 N ) = N 2 (log 2(N)) = N Dvs. 2 N = {1, 2, 4, 8, 16, 32,.. dobler 1, og log 2 (N) sier hvor mange ganger vi kan halvere N før vi er tilbake til 1. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 5 / 22

Todeling av elementer A En kan evt. sette opp ligning og løse denne N 2 x 1 (1) N 2 x (2) log 2 (N) log 2 (2 x ) (3) log 2 (N) x log 2 (2) (4) log 2 (N) x (5) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 6 / 22

Binærheap Anta at en binærheap har N elementer, og høyde M. Hvor mange elementer må vi sette inn i heapen for at vi med med sikkerhet kan si at den vil få høyde M + 1? Begrunn svaret. HINT: Hvor mange noder er det på nederste nivå i et komplett binærtre, sammenlignet med resten av treet? Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 7 / 22

Binærheap Anta at en binærheap har N elementer, og høyde M. Hvor mange elementer må vi sette inn i heapen for at vi med med sikkerhet kan si at den vil få høyde M + 1? Begrunn svaret. HINT: Hvor mange noder er det på nederste nivå i et komplett binærtre, sammenlignet med resten av treet? A Minst N, siden siste nivå i et komplett binærtre innholder like mange noder som resten av treet + 1, dvs. worst-case tilfelle er når nederste nivå i treet bare har 1 node, da vil N - 1 nye noder fylle opp siste nivå, og N vil gi oss en node på neste nivå. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 7 / 22

Boyer Moore Boyer Moore bruker en int-array som kalles bad-character-shift som har lengde 256, hvorfor er denne av lengde 256? Og hva inneholder den? Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 8 / 22

Boyer Moore Boyer Moore bruker en int-array som kalles bad-character-shift som har lengde 256, hvorfor er denne av lengde 256? Og hva inneholder den? A bad-character-shift.length 256 fordi vi antar at bokstavene våre er 8-bit characters, (2 8 = 256) vi lager en shift-verdi for alle mulige characters i nålen dvs. hvor langt vi kan flytte nålen fram basert på missmatch i siste element, siden vi matcher bakfra. Boyer Moore vil ikke fungere for UTF-8 dersom spesielle tegn blir brukt, og vil aldri fungere for UTF-16, eller andre tegnsett som bruker mer enn 8-bits enkoding, selv om det fins spesielle versjoner av Boyer Moore for disse.. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 8 / 22

Huffmankoding Når vi komprimerer en fil med Huffmankoding, så teller vi opp antall forekomster av hver bokstav i filen, hvorfor gjør vi det? Forklar kort hvordan dette brukes til å generere Huffman koden. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 9 / 22

Huffmankoding Når vi komprimerer en fil med Huffmankoding, så teller vi opp antall forekomster av hver bokstav i filen, hvorfor gjør vi det? Forklar kort hvordan dette brukes til å generere Huffman koden. A 1. Grunnen til at vi teller opp forekomster er fordi vi vil bruke den korteste bit-sekvensen til å lagre den bokstaven som forekommer oftest. 2. Vi bygger et binærtre av alle forekomstene, der vi slår sammen noder basert på frekvens. de nodene som forekommer oftest vil havne høyest opp i binætreet (og sånn sett få kortest binær-representasjon) mens de som opptrer sjelden vil få lengre sekvenser. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 9 / 22

Huffmankoding Når vi komprimerer en fil med Huffmankoding så lagrer vi binær-sekvensene som representerer bokstavene uten noe form for skilletegn. Binær-sekvensene er ofte av forskjellig lengde, hvordan kan vi vite når et tegn slutter og når neste begynner? Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 10 / 22

Huffmankoding Når vi komprimerer en fil med Huffmankoding så lagrer vi binær-sekvensene som representerer bokstavene uten noe form for skilletegn. Binær-sekvensene er ofte av forskjellig lengde, hvordan kan vi vite når et tegn slutter og når neste begynner? A Bitsekvensene som brukes har unik start, fordi de alle er løvnoder i et binætre, dvs. det fins ikke to bit-sekvenser med samme start hvor den ene er lenger enn den andre. sånne binærtre bli kalt TRIES, dvs. binætre som kun har verdier i løvnodene. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 10 / 22

Topologisk Sortering F E B D C A Skriv to lovlige topologiske sorteringer av nodene. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 11 / 22

Rekursive etterfølgere Anta at nodene i grafen gitt over er representert ved denne klassen: public c l a s s Node{ char id ; Set<Node> c h i l d r e n ; Node( char id ){ t h i s. id = id ; c h i l d r e n = new HashSet<Node >(); void reachable ( Set<Node> set ){ // TODO void addchild (Node n){ c h i l d r e n. add (n ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 12 / 22

Rekursive etterfølgere Implementer funksjonen reachable som legger alle elementene (Nodene) som kan nås fra kall-noden, i mengden Set<Node> set. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 13 / 22

Rekursive etterfølgere Implementer funksjonen reachable som legger alle elementene (Nodene) som kan nås fra kall-noden, i mengden Set<Node> set. A void reachable ( Set<Node> set ){ set. add ( t h i s ) ; for (Node n : c h i l d r e n ){ n. reachable ( set ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 13 / 22

Sykler Dersom grafen vår inneholder sykler/løkker vil ikke funksjonen reachable nødvendigvis terminere. Modifiser funksjonen slik at rekursjonen stopper dersom vi kommer til et element som allerede fins i mengden. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 14 / 22

Sykler Dersom grafen vår inneholder sykler/løkker vil ikke funksjonen reachable nødvendigvis terminere. Modifiser funksjonen slik at rekursjonen stopper dersom vi kommer til et element som allerede fins i mengden. A void reachable ( Set<Node> set ){ i f ( set. contains ( t h i s )){ return ; set. add ( t h i s ) ; for (Node n : c h i l d r e n ){ n. reachable ( set ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 14 / 22

Fritekst søk Denne oppgaven omhandler et fritekst søk og bygging av en revers-indeks. En revers-indeks er en datastruktur der du ut ifra et søkeord, kan finne ut hvilke artikler dette ordet forekommer. Map<String, LinkedList <String >> index = new HashMap<String, LinkedList <String >>(); / mapping f r a : ord > l i s t e r av artikkelnavn / Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 15 / 22

Fritekst søk Det blir også gitt et eksempel på hvordan et søk kan implementeres når en har en revers-indeks. void search ( String word ){ LinkedList <String > l i s t ; i f ( index. containskey ( word )){ System. out. p r i n t l n ( fant : +word ) ; l i s t = index. get ( word ) ; for ( String a r t i c l e : l i s t ){ System. out. p r i n t l n ( a r t i c l e ) ; e l s e { System. out. p r i n t l n ( fant ikke : +word ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 16 / 22

Fritekst søk - implementer indexarticle Dere kan anta at artikler på forhånd er blitt konvertert fra sitt originale format (pdf,ps,doc,html...) til String arrayer. Du kan også anta at HashMapen index (se over) er global i klassen denne metoden implementeres. Du skal nå implementere følgende metode for å legge en ny artikkel inn i indeksen. void i n d e x A r t i c l e ( String [ ] articlewords, String articlename ){ / implementer metoden / Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 17 / 22

Fritekst søk - implementer indexarticle A void i n d e x A r t i c l e ( String [ ] articlewords, String articlename ){ LinkedList <String > l i s t ; for ( String word : articlewords ){ i f ( index. containskey ( word )){ l i s t = index. get ( word ) ; i f (! l i s t. contains ( articlename )){ l i s t. add ( articlename ) ; e l s e { l i s t = new LinkedList <String >(); l i s t. add ( articlename ) ; index. put (word, l i s t ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 18 / 22

Fritekst søk - sletting av artikler Vi er også interessert i å kunne slette artikler fra indeksen vår, implementer metoden med signaturen under, som sletter en artikkel fra indeksen. void removearticle ( String articlename ){ / implementer metoden / Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 19 / 22

Fritekst søk - sletting av artikler A void removearticle ( String articlename ){ LinkedList <String > l i s t ; Set<String > keys = index. keyset ( ) ; for ( String key : keys ){ l i s t = index. get ( key ) ; i f ( l i s t. contains ( articlename )){ / optional / l i s t. remove ( articlename ) ; / optional / Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 20 / 22

Fritekst søk - kompleksitet Anta at vår indeks (HashMap) har hashet alle ord i indeksen til forskjellige verdier, dvs. kompleksiteten av å finne et ord i HashMapen (index) er lik 1. Anta også at vi har M forskjellige ord i indeksen vår, dvs. index. keyset ( ). s i z e () == M Anta at vi har indeksert N forskjellige artikler, dvs. vi kan få returnert maksimalt N artikler når vi søker på et ord. Hva blir da worst-case kompleksiteten av å slette en artikkel fra indeksen? Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 21 / 22

Fritekst søk - kompleksitet Anta at vår indeks (HashMap) har hashet alle ord i indeksen til forskjellige verdier, dvs. kompleksiteten av å finne et ord i HashMapen (index) er lik 1. Anta også at vi har M forskjellige ord i indeksen vår, dvs. index. keyset ( ). s i z e () == M Anta at vi har indeksert N forskjellige artikler, dvs. vi kan få returnert maksimalt N artikler når vi søker på et ord. Hva blir da worst-case kompleksiteten av å slette en artikkel fra indeksen? A O(N, M) = N M Vi har M nøkler, alle disse kan gi oss lister med N elementer, og vi må leite i hele listen etter vår artikkel, dvs. vi må leite i lister som er maksimalt N lange, M ganger. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 21 / 22

Fritekst søk - kompleksitet Vi prøver å forbedre indeksen vår ved å bytte ut datastrukturen artiklene ligger i (listen), vi velger å legge artiklene våre i et rød-sort tree i steden for en liste, dvs. vi legger artikkelnavnene våre i et balansert binærtre. Map<String, TreeSet<String >> index = new HashMap<String, TreeSet<String >>(); / mapping f r a : ord > balanserte bin tre av artikkelnavn / Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 22 / 22

Fritekst søk - kompleksitet Vi prøver å forbedre indeksen vår ved å bytte ut datastrukturen artiklene ligger i (listen), vi velger å legge artiklene våre i et rød-sort tree i steden for en liste, dvs. vi legger artikkelnavnene våre i et balansert binærtre. Map<String, TreeSet<String >> index = new HashMap<String, TreeSet<String >>(); / mapping f r a : ord > balanserte bin tre av artikkelnavn / A O(N, M) = M log 2 (N) Her er da har vi fortsatt M nøkler, men å finne artikkelen vår i disse balanserte binærtreene har en maksimal kompleksitet på log 2 (N) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 13 22 / 22