IN Algoritmer og datastrukturer

Like dokumenter
INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF2220: Time 4 - Heap, Huffmann

INF1020 Algoritmer og datastrukturer GRAFER

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

Notater til INF2220 Eksamen

INF1020 Algoritmer og datastrukturer. Dagens plan

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

... Dagens plan. Prioritetskø ADT

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

INF Algoritmer og datastrukturer

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

Definisjon av binært søketre

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

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

UNIVERSITETET I OSLO

PQ: HEAP. Heap. Er disse heap er? Hvordan implementere heap:

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

Lars Vidar Magnusson

INF2220: Forelesning 2

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

Definisjon: Et sortert tre

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

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

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

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

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

Binære trær: Noen algoritmer og anvendelser

INF2220: Forelesning 2

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

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

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

INF2220: Forelesning 1

Selv-balanserende søketrær

UNIVERSITETET I OSLO

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

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF2220: Forelesning 1

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

Trær. En datastruktur (og abstrakt datatype ADT)

Balanserte binære søketrær

IN Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

UNIVERSITETET I OSLO

Et eksempel: Åtterspillet

INF Algoritmer og datastrukturer

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Object [] element. array. int [] tall

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

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

Disjunkte mengder ADT

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

Uke 5 Disjunkte mengder

København 20 Stockholm

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Grunnleggende Datastrukturer

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

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

PG4200 Algoritmer og datastrukturer Forelesning 7

Et eksempel: Åtterspillet

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

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

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

Datastrukturer for rask søking

INF Algoritmer og datastrukturer

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

KONTINUASJONSEKSAMEN

Oppgave 1. Sekvenser (20%)

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Minimum Spenntrær - Kruskal & Prim

INF2220: Time 12 - Sortering

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

UNIVERSITETET I OSLO

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.

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

Transkript:

IN2010 - Algoritmer og datastrukturer HØSTEN 2018 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 3: Prioritetskø og Heap Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 1 / 38

Prioritetskø Algorithm design and applications kap. 5 (-5.2), 10.3 Kø implementasjoner vi kjenner FIFO - Liste LIFO - Stack adgang til elementene kun v.hj.a.plassering (Position) Vi ønsker ofte bedre kontroll over elementene i køen Eksempel: Job scheduler Jobber kan ikke kjøre ferdig før neste slipper til Jobber tas typisk ut og settes inn igjen Round-Robin kan bli urettferdig Prioritet kan gjøre fordeling rettferdig Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 2 / 38

Prioritetskø - Nøkler og total ordning Fjerning av elementer er basert på nøkler (prioriteringer) som er tilordnet elementene når de settes inn i køen Hvert element har sin egen nøkkel, nøkler er ikke nødvendigvis unike Total ordning av nøkler: reflexive: k k antisymmetrisk: hvis k 1 k 2 og k 2 k 1 da er k 1 = k 2 transitiv: hvis k1 k 2 og k 2 k 3 da er k 1 k 3 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 3 / 38

Prioritetskø - grensesnitt Nøkkel er gitt ved heltall (lavt tall = høy prioritet) Vi kan se på prioritet som tid vi maksimalt kan vente insert(k, e) sett inn element e med nøkkel k removemin() returnerer og fjerne elementet med høyest prioritet (minste nøkkel) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 4 / 38

Metode Returverdi innhold i kø insert(5, A) { (5, A) } insert(9, C) { (5, A), (9, C) } insert(3, B) ) { (3, B). (5, A), (9, C) } removemin() (3, B) { (5, A), (9, C) } insert(7, D) { (5, A), (7, D), (9, C) } removemin() (5, A) { (7, D), (9, C) } removemin() (7, D) { (9, C) } removemin() (9, C) { } removemin() null { } Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 5 / 38

Prioritetskø - Datastruktur og Kompleksitet Forskjellige datastrukturer kan implementere et slikt grensesnitt Liste (sortert eller uordnet) Søketre Heap insetting sletting uordnet liste O(1) O(n) sortert liste O(n) O(1) søketrær (worst/av. case) O(n)/O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 6 / 38

Prioritetskø - Heap Heap er den vanligste implementasjonen av en prioritetskø Vi skal se på en implementasjon som kalles binær heap En binær heap er et binærtre med et strukturkrav En binær heap er et komplett binærtre Og et ordningskrav Barn er alltid større eller lik sine foreldre Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 7 / 38

Binær Heap - Strukturkrav - Komplett Binætre Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 8 / 38

Binær Heap - Strukturkrav Ett komplett binærtre har følgende egenskaper Treet vil være i perfekt balanse Bladnoder vil ha høydeforskjell på maksimalt 1 Treet med høyden h har mellom 2 h og 2 h+1 1 noder Den maksimale høyden på treet vil være log 2 (n) hvis vi kan utføre oppdateringsoperasjoner i tid proporsjonal med høyden, vil disse operasjonene ta logaritmisk tid Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 9 / 38

Binær Heap - Ordningskrav 4 7 12 17 16 23 17 31 24 37 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 10 / 38

Binær Heap - Representasjon Binærtreet er komplett så vi kan legge elementene i en array Vi kan enkelt finne foreldre og barn ut i fra array index Venstre barn: index 2 Høyre barn: index 2 +1 Foreldre: (int) index/2 Vi kan risikere å måtte allokere ny array og kopiere alle elementene Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 11 / 38

Binær Heap - Representasjon A B C D E F G H I J 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D E F G H I J Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 12 / 38

Binær Heap - insert 4 7 12 17 16 23 17 31 24 37 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 13 / 38

Binær Heap - insert Legg det nye elementet på neste ledige plass i heapen La det nye elementet flyte opp til riktig posisjon Dette kalles up-heap bubbling i læreboka Siden treet er i balanse kan vi maksimalt flyte O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 14 / 38

Binær Heap - removemin 4 7 12 17 16 23 17 31 24 37 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 15 / 38

Binær Heap - removemin Vi fjerner rot elementet fra heapen Vi lar det siste elementet bli ny rot Vi lar den nye rota flyte ned til riktig posisjon Dette kalles down-heap bubbling i læreboka Siden treet er i balanse kan vi maksimalt flyte O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 16 / 38

Binær Heap - Andre Operasjoner min kan gjøres i konstant tid delete fjern vilkårlig element fra heapen Vi kan også endre prioritet på elementer i heap Senking av prioritet kalles ofte increasekey Øking av prioritet kalles ofte decreasekey Både increasekey og decreasekey gjøres typisk ved å: Lokalisere element i heapen Øk eller senk prioritet La elementet flyte opp eller ned avhengig av operasjon delete kan typisk gjøres ved decreasekey + removemin Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 17 / 38

Binær Heap - Sortering Vi kan bruke en binær heap til å sortere Vi kan bygge en binær heap (insert) på O(n log 2 (n)) Vi kan ta ut alle elementene (removemin) på O(n log 2 (n)) 2 O(n log 2 (n)) = O(n log 2 (n)) (worst case) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 18 / 38

Oppgave Gitt en array av Integer, hvordan sjekker man om den representerer en min-heap? Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 19 / 38

Flette to heaper gitt to heaper og nøkkel k vi lager en ny heap med k i rotnoden og med de to heaper som subtrær utfører down-heap og gjenopprette ordningskravet Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 20 / 38

Bottom-Up Heap Construction gitt en liste av n nøkkel-element par, konstruerer heap O(n) tid hvert rekursivt call returnere en subtre som er en heap Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 21 / 38

A l g o r i t h m BottomUpHeap ( S ) : I n p u t : A l i s t S s t o r i n g n = 2 h 1 k e y s Output : A heap T s t o r i n g t h e k e y s i n S i f S i s empty then r e t u r n an empty heap Remove t h e f i r s t key, k, form S S p l i t S i n t o two l i s t s, S 1 and S 2, each o f s i z e (n 1)/2 T 1 < BottomUpHeap (S 1 ) T 2 < BottomUpHeap (S 2 ) c r e a t e b i n a r y t r e e T w i t h r o o t r s t r i n g k, l e f t s u b t r e e T 1 and r i g h t s u b t r e e T 2. down heap b u b b l i n g from r r e t u r n T Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 22 / 38

Huffman-koding Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 23 / 38

Huffman-koding Huffman-koding Motivasjon Store tekstfiler tar stor plass, og tar lang tid å overføre over en kanal med lav båndbredde Enheter med begrenset lagringsplass og vi ønsker å maksimere antall dokumenter vi lagrer f.eks.,fixed-length encoding: ASCII 7-bits, Unicode 16-bits Unicode gir minst dobbelt så store filer som ASCII Det er behov for tekstkompresjon og variable-length encoding! Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 24 / 38

Huffman-koding Idé og regler Hovedidé: Husk Morse Tegn som forekommer ofte korte koder, sjeldne tegn lange koder Regel 1: Hvert tegn som forekommer i filen, skal ha sin egen entydige kode Regel 2: Ingen kode er prefiks i en annen kode Eksempel på regel 2: Dersom 011001 er (binær)kode for et tegn, kan hverken 0, 01, 011, 0110 eller 01100 være kode for noe tegn Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 25 / 38

Huffman-koding Algoritme 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 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 Resultatfilen består av to deler: En tabell over Huffmankoder med tilhørende tegn Den Huffmankodede datafilen Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 26 / 38

Huffman-koding Eksempel Initiell prioritetskø: a 10 b 15 c 3 d 32 e 15 f 10 g 23 h 13 i 5 sp 23 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 27 / 38

Huffman-koding Bygging av treet De 2 minste (sjeldnest forekommende) nodene er c og i. Disse taes ut og erstattes med T 1 (vekt 8): a 10 b 15 d 32 e 15 T1 8 T 1 f 10 g 23 h 13 sp 23 c i Dernest erstattes T 1 og a med T 2 (vekt 18): b 15 d 32 e 15 T2 18 T 2 f 10 g 23 h 13 sp 23 T 1 a Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 28 / 38

Huffman-koding Så går f og h ut. De erstattes av T 3 (vekt 23): b 15 d 32 e 15 T2 18 T 3 g 23 sp 23 T3 23 f h Så erstattes b og e med T 4 (vekt 30): d 32 T2 18 T4 30 T 4 g 23 sp 23 T3 23 b e Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 29 / 38

Huffman-koding Dernest T 2 og g med T 5 (vekt 41): d 32 T4 30 T5 41 T 5 sp 23 T3 23 T 2 g Så byttes sp og T 3 ut med T 6 (vekt 46): d 32 T4 30 T5 41 T6 46 T 6 sp T 3 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 30 / 38

Huffman-koding Så d og T 4 med T 7 (vekt 62): T5 41 T6 46 T7 62 T 7 d T 4 Så T 5 og T 6 med T 8 (vekt 87): T7 62 T8 87 T 8 T 5 T 6 Endelig taes T 7 og T 8 ut av køen. Disse blir barn av rotnoden T 9 : T9 149 T 9 T 7 T 8 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 31 / 38

Huffman-koding Det ferdige kodetreet T 9 T 7 d T 4 ser slik ut: Det gir denne kodetabellen: (venstre 0, høyre 1) a 1011 f 1110 b 010 g 100 c 10100 h 1111 d 00 i 10101 e 011 sp 110 b e T 8 T 5 T 6 g T 2 sp T 3 T 1 c i a f h Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 32 / 38

Huffman-koding Venstreorientert Heap En venstreorientert heap er en prioritetskø implementert som en variant av binær heap Ordningskrav: samme som ordningskravet til binær heap Strukturkrav: La null path length npl(x) være lengden av den korteste veien fra x til en node uten to barn. npl(l) npl(r) hvor l og r er venstre og høyre barnet til x forsøker å være ubalansert! Å flette to binære heaper (merge) tar Θ(N) for heaper med like størrelser Venstreorientert Heap støtter merge i O(log n) Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 33 / 38

Huffman-koding Venstreorientert Heap - Strukturkrav 1 1 0 0 0 0 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 34 / 38

Huffman-koding La H1 og H2 være to heaper. Merge kan gjøres rekursivt: sammenligner H1.rot med H2.rot. Antar nå at H1.rot er minst. la den høyre subheapen til H1 være heapen som man får ved å merge H1.høyre med H2 bevare strukturkravet ved å bytte ut (swap) rotens høyre og ventre barn. Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 35 / 38

Huffman-koding Merge - Eksempel 3 6 6 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 26 17 7 37 18 26 17 23 26 33 33 7 6 3 37 8 12 7 10 6 17 18 19 24 8 37 21 14 12 7 26 33 17 18 23 19 24 8 37 26 33 17 18 26 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 36 / 38

Huffman-koding Merge - Eksempel 3 6 10 8 12 7 21 14 17 19 24 37 18 23 26 33 3 6 12 7 19 24 8 37 33 17 18 26 10 21 14 23 Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 37 / 38

Huffman-koding Neste Forelesning: 14. september Grafer Ingrid Chieh Yu (Ifi, UiO) INF2010 H2018, forelesning 3 38 / 38