INF Algoritmer og datastrukturer

Like dokumenter
INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF2220: Time 4 - Heap, Huffmann

INF1020 Algoritmer og datastrukturer. Dagens plan

... Dagens plan. Prioritetskø ADT

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

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

Notater til INF2220 Eksamen

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

UNIVERSITETET I OSLO

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

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

INF Algoritmer og datastrukturer

Definisjon av binært søketre

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

INF Algoritmer og datastrukturer

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

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort 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

Lars Vidar Magnusson

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

INF2220: Forelesning 2

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

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

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

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

Kap 9 Tre Sist oppdatert 15.03

IN Algoritmer og datastrukturer

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

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

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

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

INF2220: Forelesning 2

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF2220: Forelesning 1

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Binære trær: Noen algoritmer og anvendelser

Selv-balanserende søketrær

INF Algoritmer og datastrukturer

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

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

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

INF2220: Forelesning 1

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

Balanserte binære søketrær

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Et eksempel: Åtterspillet

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

IN Algoritmer og datastrukturer

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

INF2220: Time 12 - Sortering

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Korteste vei i en vektet graf uten negative kanter

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

Uke 5 Disjunkte mengder

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

Et eksempel: Åtterspillet

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

PG4200 Algoritmer og datastrukturer Forelesning 7

Minimum Spenntrær - Kruskal & Prim

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

Datastrukturer for rask søking

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

PG4200 Algoritmer og datastrukturer Forelesning 10

Grunnleggende Datastrukturer

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

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

København 20 Stockholm

Disjunkte mengder ADT

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

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.

Algoritmer og Datastrukturer IAI 21899

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

Innhold. Innledning 1

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

UNIVERSITETET I OSLO

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

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

INF Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

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

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

UNIVERSITETET I OSLO

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Transkript:

INF2220 - Algoritmer og datastrukturer HØSTEN 2015 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 4: Prioritetskø og Heap Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 1 / 25

Prioritetskø M.A.W. Data Structures and Algorithm Analysis kap. Kø implementasjoner vi kjenner FIFO - Liste LIFO - Stack Vi ønsker ofte bedre kontroll over elementene i køen Eksempel: Job scheduler (OS) 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) INF2220 H2015, forelesning 4 2 / 25

Prioritetskø - grensesnitt Prioritet er gitt ved heltall (lavt tall = høy prioritet) Vi kan se på prioritet som tid vi maksimalt kan vente insert(p, x) sett inn element x med prioritet p deletemin() fjern element med høyest prioritet Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 3 / 25

Prioritetskø - Datastruktur og Kompleksitet Forskjellige datastrukturer kan implementere et slikt grensesnitt Liste (sortert eller uordnet) Søketre Heap uordnet liste sortert liste søketrær (worst/av. case) insetting sletting Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 4 / 25

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)) O(n)/O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 4 / 25

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 Ordet Heap blir også brukt om dynamisk allokert minne Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 5 / 25

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 Ordet Heap blir også brukt om dynamisk allokert minne Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 5 / 25

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 Ordet Heap blir også brukt om dynamisk allokert minne Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 5 / 25

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 Ordet Heap blir også brukt om dynamisk allokert minne Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 5 / 25

Binær Heap - Strukturkrav - Komplett Binætre Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 / 25

Binær Heap - Strukturkrav - Komplett Binætre Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 / 25

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) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 7 / 25

Binær Heap - Ordningskrav 4 7 12 17 1 23 17 31 24 37 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 8 / 25

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) INF2220 H2015, forelesning 4 9 / 25

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

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

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

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

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

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 percolate up i læreboka Siden treet er i balanse kan vi maksimalt flyte O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 12 / 25

Binær Heap - deletemin 4 7 12 17 1 23 17 31 24 37 22 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 4 7 12 17 1 23 17 31 24 37 22 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 13 / 25

Binær Heap - deletemin 7 12 17 1 23 17 31 24 37 22 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 7 12 17 1 23 17 31 24 37 22 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 13 / 25

Binær Heap - deletemin 22 7 12 17 1 23 17 31 24 37 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 22 7 12 17 1 23 17 31 24 37 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 13 / 25

Binær Heap - deletemin 7 22 12 17 1 23 17 31 24 37 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 7 22 12 17 1 23 17 31 24 37 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 13 / 25

Binær Heap - deletemin 7 1 12 17 22 23 17 31 24 37 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 7 1 12 17 22 23 17 31 24 37 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 13 / 25

Binær Heap - deletemin 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 percolate down i læreboka Siden treet er i balanse kan vi maksimalt flyte O(log 2 (n)) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 14 / 25

Binær Heap - Andre Operasjoner findmin 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 + deletemin Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 15 / 25

Oppgave Hvilken av følgende BT er ikke en heap?: 1 4 3 4 4 4 5 4 3 7 5 7 (A) (B) (C) I: A, B og C II: B og C III A og C Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 1 / 25

Oppgave Basert på prioritetskø, hvor fort kan vi sortere n tall?: I: O(n) II: O(n 2 ) III: O(nlogn) IV: O(logn) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 17 / 25

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 (deletemin) på O(n log 2 (n)) 2 O(n log 2 (n)) = O(n log 2 (n)) (worst case) Oppbygging av heap kan også effektiviseres Legg alle elementene på heapen (inn i arrayen) foreach node som ikke er bladnode: percolatedown(node) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 18 / 25

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 (deletemin) på O(n log 2 (n)) 2 O(n log 2 (n)) = O(n log 2 (n)) (worst case) Oppbygging av heap kan også effektiviseres Legg alle elementene på heapen (inn i arrayen) foreach node som ikke er bladnode: percolatedown(node) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 18 / 25

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) INF2220 H2015, forelesning 4 19 / 25

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) INF2220 H2015, forelesning 4 19 / 25

Venstreorientert Heap - Strukturkrav 1 1 0 0 0 0 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 20 / 25

Venstreorientert Heap - Strukturkrav 1 1 0 0 1 0 0 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 20 / 25

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) INF2220 H2015, forelesning 4 21 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 8 8 10 8 12 7 21 14 17 19 24 37 18 12 7 19 24 37 18 17 7 37 18 17 23 33 33 7 3 37 8 12 7 10 17 18 19 24 8 37 21 14 12 7 33 17 18 23 19 24 8 37 33 17 18 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 22 / 25

Merge - Eksempel 3 10 8 12 7 21 14 17 19 24 37 18 23 33 3 12 7 19 24 8 37 33 17 18 10 21 14 23 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 23 / 25

Kompleksitet insert: utføre merge med en en-noders heap deletemin: fjerne rotnoden og merge høyre og venstre subheap O(log n) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 24 / 25

Neste Forelesning: 17. september Grafer Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 4 25 / 25