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

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

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

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

Definisjon av binært søketre

Definisjon: Et sortert tre

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

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

INF Algoritmer og datastrukturer

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?

INF1020 Algoritmer og datastrukturer. Dagens plan

Datastrukturer for rask søking

Et eksempel: Åtterspillet

... Dagens plan. Prioritetskø ADT

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

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

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

INF Algoritmer og datastrukturer

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

IN Algoritmer og datastrukturer

Liste som abstrakt konsept/datatype

INF2220: Forelesning 2

Et eksempel: Åtterspillet

INF Algoritmer og datastrukturer

Selv-balanserende søketrær

INF2220: Time 4 - Heap, Huffmann

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

Flerveis søketrær og B-trær

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

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

Lars Vidar Magnusson

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

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

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

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

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

PG4200 Algoritmer og datastrukturer Forelesning 7

INF2220: Time 12 - Sortering

Binære trær: Noen algoritmer og anvendelser

Hvor raskt klarer vi å sortere?

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

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

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

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

Grunnleggende Datastrukturer

INF2220: Forelesning 2

Minimum Spenntrær - Kruskal & Prim

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

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

Balanserte binære søketrær

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

Notater til INF2220 Eksamen

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

Kap 9 Tre Sist oppdatert 15.03

Oppgave 1. Sekvenser (20%)

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

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

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

Vi skal se på grafalgoritmer for:

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

EKSAMEN med løsningsforslag

Innhold. Innledning 1

Logaritmiske sorteringsalgoritmer

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

Obligatorisk oppgave 2 i INF 4130, høsten 2009

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.

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Pensum: fra boken (H-03)+ forelesninger

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

Stack. En enkel, lineær datastruktur

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Disjunkte mengder ADT

Pensum: fra boken (H-03)+ forelesninger

Uke 5 Disjunkte mengder

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Lars Vidar Magnusson

Algoritmer og Datastrukturer IAI 21899

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

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

København 20 Stockholm

Vi skal se på grafalgoritmer for:

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

EKSAMEN. Algoritmer og datastrukturer

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert

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

INF Algoritmer og datastrukturer

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

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Algoritmer og Datastrukturer

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

KONTINUASJONSEKSAMEN

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

Hashing: Håndtering av kollisjoner

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

PG 4200 Algoritmer og datastrukturer Innlevering 2

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

Transkript:

Heap og prioritetskø Marjory the Trash Heap fra Fraggle Rock

Binær heap En heap er et komplett binært tre: Alle nivåene i treet, unntatt (muligens) det nederste, er alltid helt fylt opp med noder Alle noder på nederste nivå ligger så langt til venstre som mulig

Ordningen i en heap Nodene i en heap er ordnet, men ikke sortert Min-heap: Verdien i en node er alltid mindre eller lik verdien i nodens barn Max-heap: Verdien i en node er alltid større eller lik verdien i nodens barn Min-heap Max-heap

To komplette binære trær bare treet til venstre er en heap

Heap: Monotont binært tre Min-heap: Verdiene øker når vi følger en vei fra roten til et blad i treet monoton stigning Minste verdi i en min-heap er alltid i roten av treet Max-heap: Verdiene avtar når vi følger en vei fra roten til et blad Største verdi i en max-heap er alltid i roten av treet Alle subtrær i en heap er også en heap

Verdiene stiger langs alle veier fra roten Alle subtrær er også en heap

Høyden h av en heap med n noder n = 1 2 n < 4 4 n < 8 8 n < 16 16 n < 32 h = 0 = log 1 h = 1 = log 2 h = 2 = log 4 h = 3 = log 8 h = 4 = log 16... Generelt: Høyden er lik største heltall mindre eller lik log 2 n

Bruk av heap En heap tilbyr bare to operasjoner: Fjern den minste (eller største) verdien i datastrukturen Sett inn et nytt element i datastrukturen Garanterer O(log n) effektivitet av operasjonene Brukes i problemer der det er viktig å ha rask tilgang til det minste (eller største) av dataelementene Kan også brukes til å lage en svært effektiv in-house sorteringsalgoritme, heapsort, som alltid er O(n log n)

Arrayimplementasjon av heap Rotnoden lagres på indeks 0 Barna til noden på indeks i lagres alltid på indeksene: 2 i + 1 og 2 i + 2 Forelder til noden på indeks i (unntatt roten) lagres alltid på indeks: (i 1) / 2 (heltallsdivisjon) Arrayimplementasjon er enkelt og svært effektivt, fordi en heap alltid er et komplett binært tre. Trenger bare å holde rede på antall noder i heapen

Arrayimplementasjon, eksempel En heap pakkes effektivt inn i en array, fra venstre mot høyre og fra roten og nedover, uten hull i arrayen

Forenklinger i forhold til læreboken Læreboken implementerer heap med: Generisk ADT som kan lagre 'alt' Både array og pekere For å holde fokus på prinsippene og algoritmene, og ikke på Java, forenkler vi til: Bare implementasjon med array Ingen ADT, bare noder som inneholder enkle data som heltall eller tegn Enkel min-heap med heltall: intheap.java

Innsetting av ny verdi i en min-heap 1. Sett inn ny node med ny verdi sist i heap'en, på første ledige plass i nederste nivå 2. Hvis ny verdi er mindre enn verdi i foreldernoden, bytt om ny node og forelder 3. Fortsett bytteprosessen oppover i treet inntil ny node står riktig (>= forelder eller i roten) Den nye verdien vil flyte oppover i treet inntil den står på riktig plass ( percolate upwards, siftup, bubble up )

Innsetting i min-heap lagret i array Samme eksempel som på forrige side: 0 1 2 3 4 5 6 7 8 9 10 13 21 16 24 31 19 68 65 26 32 14 13 21 16 24 14 19 68 65 26 32 31 13 14 16 24 21 19 68 65 26 32 31 13 14 16 24 21 19 68 65 26 32 31 Demo: Animasjon av innsetting i min-heap

Innsetting: Effektivitet og implementasjon Implementeres med en enkel while-løkke som starter fra siste posisjon i heap og bytter med foreldernode inntil ny verdi står riktig Finner foreldernode ved en enkel indeksberegning, raskt og effektivt Verste tilfelle: Ny node beveger seg helt opp til roten Er alltid O(log n) for heap med n noder Java-kode for min-heap med heltall: intheap.java

Fjerning av minste verdi (roten) i min-heap 1. Ta ut rotnoden 2. Fyll igjen hullet ved å flytte den siste noden i heap'en inn på rotens posisjon 3. Hvis flyttet node er større enn et av barna: Bytt om det minste av barna med flyttet node 4. Fortsett å bytte flyttet node nedover i treet inntil den står riktig (<= begge barn eller blad) Noden som flyttes opp til roten vil flyte nedover i treet inntil den står riktig ( percolate downwards, siftdown )

Fjerning av minste verdi i min-heap Samme eksempel som på forrige side, med array : 0 1 2 3 4 5 6 7 8 9 10 13 14 16 19 21 19 68 65 26 32 31 31 14 16 19 21 19 68 65 26 32 14 31 16 19 21 19 68 65 26 32 14 19 16 31 21 19 68 65 26 32 14 19 16 26 21 19 68 65 31 32 14 19 16 26 21 19 68 65 31 32 Demo: Animasjon av fjerning i min-heap

Fjerning av minste verdi: Effektivitet og implementasjon Implementeres med en enkel while-løkke som starter med ny rot og bytter med minste barn inntil verdi står riktig Finner barnenodene ved enkel indeksberegning, raskt og effektivt Verste tilfelle: Ny rotnode beveger seg helt ned til et blad Er alltid O(log n) for heap med n noder Java-kode for min-heap med heltall: intheap.java

Prioritetskø En kø som ikke er First-In-First-Out Alle elementene i køen har en verdi som angir en prioritet Det er alltid elementet med størst (evt. minst) prioritet som først skal tas ut av køen dequeue: Ta ut elementet med størst/minst prioritet enqueue: Sett inn et element med en gitt prioritet

Implementasjon av prioritetskø Med sortert array: Fjerning av elementet i køen med størst prioritet, dequeue, blir O(1) Innsetting av nytt element med gitt prioritet, enqueue, blir O(n), for langsomt for store datasett Med binært søketre / AVL-tre: Både dequeue og enqueue blir O(log n) Unødvendig komplisert for en prioritetskø, trenger ikke å ha en full sortering av elementene i køen Beste alternativ: Heap

Prioritetskø og heap En heap implementerer en prioritetskø: insert = enqueue removemin = dequeue Innsetting og fjerning blir begge O(log n) Java-implementasjon: Se koden fra læreboka

Anvendelser av prioritetskøer I operativsystemer: Scheduling av prosesser Køer til delte ressurser som f.eks. printere Simulering av køsystemer: Objektene som skal håndteres står i en prioritetskø Eksempel: Flyplass-simulering der flyene som skal lande prioriteres etter gjenværende mengde drivstoff Handlingsdrevet simulering

Handlingsdrevet simulering Discrete event simulation / Event-driven simulation Handlingene (events) som skal skje i systemet ligger i en prioritetskø, ordnet på tidspunkt for handlingen Simuleringen drives fremover ved at vi i hvert steg tar ut og utfører handlingen som skal utføres først (har lavest tidsstempel ) Utførelse av en handling kan føre til at nye handlinger legges inn i prioritetskøen