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

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

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

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

INF1020 Algoritmer og datastrukturer. Dagens plan

Notater til INF2220 Eksamen

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Obligatorisk oppgave 2 i INF 4130, høsten 2009

... Dagens plan. Prioritetskø ADT

Minimum Spenntrær - Kruskal & Prim

Lars Vidar Magnusson

INF2220: Time 4 - Heap, Huffmann

UNIVERSITETET I OSLO

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

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

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

Definisjon av binært søketre

Kap 9 Tre Sist oppdatert 15.03

Øvingsforelesning 7. Dijkstras algoritme. Foiler: Fredrik Ludvigsen Foreleser: Jon Marius Venstad 10/4/09 1

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

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

Grunnleggende Datastrukturer

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

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

INF2220: Forelesning 2

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

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

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

ALGORITMER OG DATASTRUKTURER

Balanserte binære søketrær

Definisjon: Et sortert tre

Dijkstras algoritme Spørsmål

PG4200 Algoritmer og datastrukturer Forelesning 10

Datastrukturer for rask søking

INF Algoritmer og datastrukturer

Selv-balanserende søketrær

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

INF Algoritmer og datastrukturer

Binære trær: Noen algoritmer og anvendelser

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Et eksempel: Åtterspillet

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

IN 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

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

Øvingsforelesning 4. Martin Aasen

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

INF2220: Time 12 - Sortering

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Balanserte søketrær. AVL-trær. AVL-trær. AVL-trær høyde AVL AVL. AVL-trær (Adelson-Velskii og Landis, 1962) Splay-trær (Sleator og Tarjan, 1985)

Oppgave 1. Sekvenser (20%)

INF Algoritmer og datastrukturer

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

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

EKSAMEN med løsningsforslag

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

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

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

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

Lars Vidar Magnusson

PG4200 Algoritmer og datastrukturer Forelesning 7

INF2220: Forelesning 2

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

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

UNIVERSITETET I OSLO

ALGORITMER OG DATASTRUKTURER

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

UNIVERSITETET I OSLO

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

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

Algoritmer og Datastrukturer

Innhold. Innledning 1

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

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

LO118D Forelesning 12 (DM)

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

Et eksempel: Åtterspillet

Algoritmer og Datastrukturer IAI 21899

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

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

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

Uke 5 Disjunkte mengder

Transkript:

Binære heaper (Leftist) Prioritetskøer Prioritetskøer er viktige i bla. operativsystemer (prosesstyring i multitaskingssystemer), og søkealgoritmer (A, A*, D*, etc.), og i simulering. Prioritetskøer Prioritetskøer er datastukturer som holder elementer med en prioritet (key) i en kø-aktig struktur, og som implementerer følgende operasjoner: insert() Legge et element inn i køen Ta ut elementet med høyest prioritet Og kanskje også: buildheap() Lage en kø av en mengde elementer increasekey()/decreasekey() Endre prioritet delete() Slette et element Slå sammen to prioritetskøer Prioritetskøer En usortert lenket liste kan brukes. insert() legger inn først i listen (O()) og søker igjennom listen etter elementet med høyest prioritet (O(n)). En sortert liste kan brukes. (Omvendt kjøretid.) En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key en til barna, i tillegg skal hvert deltre være en binærheap. Ikke så veldig effektivt. a b c For å lage en effektiv prioritetskø, holder det at elementene i køen er nogenlunde sorterte. d h i j e f g a b c d e f g h i j

En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key en til barna, i tillegg skal hvert deltre være en binærheap. En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key en til barna, i tillegg skal hvert deltre være en binærheap. a a b c b c i d h i j e f g d i+ h i j e f g a b c d e f g h i j a b c d e f g h i j En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key en til barna, i tillegg skal hvert deltre være en binærheap. a i / b c d e f g h i j a b c d e f g h i j

insert() insert() insert() insert()

insert() insert() insert() insert() percolateup()

worst case gjennomsnitt insert() O(log N) O() O(log N) O(log N) buildheap() O(N) (Legg elementene inn i tabellen i vilkårlig rekkefølge, og kjør percolatedown() på hver rot i deltrærne i heapen (treet) som oppstår, nedenifra og opp.) (Summen av høydene i et binærtre med N noder er O(N).) O(N) (N = antall elementer) percolatedown()

For å implementere effektivt, går vi bort fra tabell-metoden, og implementerer såkalte venstrevridde heaper (leftist heaps), som rene trær. Tanken er å gjøre heapen (treet) skeivt, slik at vi kan gjøre det meste av arbeidet på den laveste delen av treet. En venstrevridd heap er et binærtre med heap-struktur (røttene i deltrærne skal ha lavere key enn barna.) og et ekstra skeivhetskrav. LEFTIST For alle noder X i treet, definerer vi nullsti-lengde(x) (null path length) som lengden av korteste sti fra X til en node som ikke har to barn. Kravet er at for alle noder, skal nullsti-lengden til det venstre barnet være minst like lang som nullsti-lengden til det høyre barnet. IKKE LEFTIST

worst case insert() O(log N) insert() O(log N) O(log N) buildheap() O(N) (N = antall elementer) I venstrevridde heaper med N noder, er høyre sti maksimalt log (N+) lang. Venstrevridde / skeive heaper:, insert() og i tid O(log N). Binære heaper: insert() i tid O() i gjennomsnitt. Binomialtrær B, insert() og i tid O(log N) w.c. insert() i tid O() i gjennomsnitt. er ikke trær, men en skog av trær, hvert tre en heap.

B B B B B B B B Binomialtrær Binomialtrær B Binomialtrær Binomialtrær B B B B B

B B Binomialtrær Binomialheap B B Et tre av høyde k har: B k noder, antall noder på nivå d er k d Binomialheap Lengden av rot-listen for en heap med N elementer er O(log N). (Dobbelt lenket, sirkulær liste.)

Trærne (rotlisten) holdes sortert etter høyde.

worst case gjennomsnitt O(log N) O(log N) Implementsjon Dobbeltlenkede, sirkulære lister insert() O(log N) O() O(log N) O(log N) buildheap() O(N) O(N) (Kjør N insert() i en tom heap.) (N = antall elementer)

Implementsjon Dobbeltlenkede, sirkulære lister Implementsjon Dobbeltlenkede, sirkulære lister Meget elegant, og i teorien effektiv, måte å implementere heaper på: De fleste operasjoner har amortisert kjøretid O(). (Fredman & Tarjan ) insert(), decreasekey() og O() amortisert tid O(log N) amortisert tid Kombinerer elementer fra venstrevridde heaper og binomialheaper. I praksis litt komplisert å implementere, og enkelte skjulte konstanter er litt høye. Best egnet når det er få i forhold til de andre operasjonene. Datastrukturen utviklet i forbindelse med en korteste sti-algoritme. Også benyttet i spenntre-algoritmer.

Leftist Ikke leftist Leftist Leftist Ikke leftist Leftist

Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min

Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min Metoden må imidlertid modifiseres litt, ettersom vi ønsker å bruke trær som nesten er binomialtrær. - Noder merkes første gang de mister ett barn. - Andre gang de mister ett barn blir noden kappet av og blir rot i et eget tre, og merket fjernes. min

Vi bruker lazy merging / lazy binomial queue. Vi bruker lazy merging / lazy binomial queue. Problemet med decreasekey()-metoden vår og lazy merging er selvsagt at vi må rydde opp i etterkant. Dette gjøres i, som derfor får høy kjøretid (O(log N) amortisert tid). Alle trærne gjennomgåes, de minste først, og slåes sammen, slik at vi får maks ett tre av hver størrelse. (Hver rot vet hvor mange barn den har.) Amortisert tid insert() O() decreasekey() O() O() O(log N) buildheap() O(N) (Kjør N insert() i en tom heap.) (N = antall elementer)