Prioritetskøer Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer.

Slides:



Advertisements
Liknende presentasjoner
12.Studienreise nach Finnland,
Advertisements

Kvinner og politikk Kvinnelig valgmobilisering i Nord-Norge: Glasstak eller etterslep? Marcus Buck.
1 NTNUs Multimediesenter 1.Integrasjon 2.Produksjon 3.Framtidsvisjon NTNUs Multimediesenter REN Medlemsmøte Trondheim 31. August 2005.
1 Arbeidssted, bruk av fasiliteter og - mengde 5.
Litt mer om PRIMTALL.
Ti måter å ødelegge en CT-undersøkelse av halsen på
Teknologi for et bedre samfunn 1 Asbjørn Følstad, SINTEF Det Digitale Trøndelag (DDT) Brukervennlig digitalisering av offentlig sektor.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
1 Arbeidssted, bruk av fasiliteter og - mengde 5.
Møre og Romsdal. 2 Ligger det et bedehus eller et kristelig forsamlingshus (ikke kirke) i nærheten av der du bor? (n=502) i prosent.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
2. Planter. Del 1 (1–4). Nivå 2. Side 19–24
Fôr til oppdrettstorsk – bruk av vegetabilsk feitt Odd Leknes Forskningsdagene 2007 Alta.
Fra forelesningene om involveringspedagogikk Et utviklingsarbeid Philip Dammen Manuset er under arbeid.
Kapittel 14 Simulering.
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Forelesningsnotater SIF8039/ Grafisk databehandling
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Foreløpige tall pr Randi Sæther
P-MP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
P-CP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
Highlights fra markedsundersøkelse Utarbeidet av Inger Marie Brun,
Kap 06 Diskrete stokastiske variable
Øvingsforelesning 9 - Børge Rødsjø
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Skriv om slik at setningene betyr omtrent det samme
11 IKT-baserte læremidler Arne Ketil Eidsvik Avd. for lærerutdanning.
SINTEF Teknologi og samfunn PUS-prosjektet Jan Alexander Langlo og Linda C. Hald 1 Foreløpig oppsummering – underlag for diskusjon på PUS-forum
INF 295 Algoritmer og datastrukturer Forelesning 21 Merge, Quick og Bøtte, Radix og ekstern sortering Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 24 Repetisjon
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
GRØNNALGER BRUNALGER RØDALGER
1 BM-dagen 29.okt BM1 Fysisk miljøplanlegging Studieprogram for Bygg- og miljøteknikk Meny Prosjektoppgaven Arealbruk og befolkning Transport og.
Figur 1 Behov. Figur 2 Behov Figur 3 Prioritering/ressursinnsats.
Eiendomsmeglerbransjens boligprisstatistikk Juni 2010 Norges Eiendomsmeglerforbund og Eiendomsmeglerforetakenes Forening ECON Poyry og FINN.
Eiendomsmeglerbransjens boligprisstatistikk Februar 2011 Norges Eiendomsmeglerforbund og Eiendomsmeglerforetakenes Forening ECON Poyry og FINN.
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
Fra forelesningene om involveringspedagogikk Et utviklingsarbeid Philip Dammen Manuset er under arbeid.
NM i prototyping - Yggdrasil 2014
”Jeg reiser smart”-kampanjen 16. september – 30. oktober 2010.
Bankenes sikringsfond Revisjonskontoret
Samdata 2012 Somatikk.
Virksomhetsrapport Oktober Innhold 1. Oppsummering 2. Hovedmål 3. Pasient 5. Aktivitet 4. Bemanning 6. Økonomi 7. Klinikker 2.
To accompany Quantitative Analysis for Management, 8e by Render/Stair/Hanna 15-1 © 2003 by Prentice Hall, Inc. Upper Saddle River, NJ Kapittel 15.
Avlevering i praksis KDRS-samling
Elevundersøkelsen ( ) UtvalgGjennomføringInviterteBesvarteSvarprosentPrikketData oppdatert 7. trinnVår , Symbolet (-) betyr.
INF3100 – – Ellen Munthe-Kaas Indeksering UNIVERSITETET I OSLO © Institutt for Informatikk Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10,
Samhandling og informasjon Kunnskaps- utvikling og refleksjon Menings- danning og over- talelse Skrive- kompetanser Handlinger og formål Kunn- skaps- lagring.
Inflation og produktion 11. Makroøkonomi Teori og beskrivelse 4.udg. © Limedesign
Virksomhetsrapport August Innhold 1. Oppsummering 2. Hovedmål 3. Pasient 5. Aktivitet 4. Bemanning 6. Økonomi 7. Klinikker 2.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
1 Trivsel Utvalg Trives svært godt Trives godt Trives litt Trives ikke noe særlig Trives ikke i det hele tatt Snitt Trivsel Brannfjell skole (Høst 2014)
Veivalgsanalyse etter Sørlandsmesterskapet i lang (klassisk) distanse 2004.
Tidsregistrering v/HiST DATAGRUNNLAG: Evaluering av HiST; en spørreskjemaundersøkelse blant Forskerforbundets medlemmer høsten 2009 v/HiST.
Kapittel 1, oppgave i) Sett inn preposisjoner eller adverb som passer.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
Befolkning og arbejdsmarked 7. Mikroøkonomi Teori og beskrivelse © Limedesign
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Utskrift av presentasjonen:

Prioritetskøer Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer (prosesstyring i multitaskingssystemer), og søkealgoritmer (A, A*, D*, etc.).

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 deleteMin() – 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 merge() – Slå sammen to prioritetskøer

Prioritetskøer En usortert lenket liste kan brukes. insert() legger inn først i listen (O(1)) og deleteMin() søker igjennom listen etter elementet med høyest prioritet (O(n)). En sortert liste kan brukes. (Omvendt kjøretid.) – Ikke så veldig effektivt. For å lage en effektiv prioritetskø, holder det at elementene i køen er ”nogenlunde sorterte”.

Binære heaper (vanligst) 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. abcdefghij a bc de hij fg

Binære heaper (vanligst) 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. abcdefghij i2i a bc de hij fg

Binære heaper (vanligst) 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. abcdefghij i+1 a bc de hij fg

Binære heaper (vanligst) 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. abcdefghij  i / 2  a bc de hij fg

Binære heaper (vanligst)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14)

Binære heaper (vanligst) insert(14) ” percolateUp() ”

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin()

Binære heaper (vanligst) deleteMin() ” percolateDown() ”

Binære heaper (vanligst) W.C. Avg C. insert() O(log N)O(1) deleteMin() 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).) merge() O(N) (N = antall elementer)

Venstrevridde heaper For å implementere merge() effektivt, går vi bort fra tabell-metoden, og ser på 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. For alle noder X i treet, definerer vi nullsti-lengede(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 stor som nullsti-lengden til det høyre barnet.

Venstrevridde heaper IKKE LEFTIST LEFTIST

Venstrevridde heaper merge() 36

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper merge()

Venstrevridde heaper deleteMin() insert(3)merge() 11 merge() 1

Venstrevridde heaper W.C. merge() O(log N) insert() O(log N) deleteMin() O(log N) buildHeap() O(N) (N = antall elementer) I venstrevridde heaper med N noder, er høyre sti maksimalt  log (N+1)  lang.

Skeive heaper Skeive heaper (skew heaps) er en selvbalanserende variant av venstrevridde heaper. Vi har ikke lengre noe eksplisitt skeivhetskrav, som for de venstrevridde heapene, og vi vedlikeholder ingen nullsti-lengde, heapen er selvjusterende (analogt med AVL/Splay-trær). For skeive heaper er merge() -rutinen den samme som for venstrevridde heaper, men vi bytter alltid om på barna, bortsett fra noden med høyest key i de høyre stiene (denne har ikke noe høyre barn).

Skeive heaper merge()

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

merge() Skeive heaper

3 merge() Skeive heaper

Binomialheaper Venstrevridde / skeive heaper: merge(), insert() og deleteMin() i tid O(log N). Binære heaper: insert() i tid O(1) i gjennomsnitt. Binomialheaper merge(), insert() og deleteMin() i tid O(log N) W.C. insert() i tid O(1) i gjennomsnitt. Binomialheaper er ikke trær, men en skog av trær, hvert tre en heap.

Binomialheaper Binomialtrær B0B0

Binomialheaper Binomialtrær B0B0 B1B1

Binomialheaper Binomialtrær B0B0 B1B1 B2B2

Binomialheaper Binomialtrær B0B0 B1B1 B2B2 B3B3

Binomialheaper Binomialtrær B0B0 B1B1 B2B2 B3B3 B4B4

Binomialheaper Binomialtrær B0B0 B1B1 B2B2 B3B3 B4B4 Et tre av høyde k har: 2 k noder, antall noder på nivå d er

Binomialheaper Binomialheap

Binomialheaper Binomialheap Lengden av rot-listen for en heap med N elementer er O(log N). (Dobbelt lenket, sirkulær liste.)

merge() Binomialheaper

merge() Binomialheaper

merge() Binomialheaper

merge() Binomialheaper

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

deleteMin() Binomialheaper

deleteMin() merge() Binomialheaper

W.C. Avg C. merge() O(log N) O(log N) insert() O(log N)O(1) deleteMin() O(log N)O(log N) buildHeap() O(N) O(N) (Kjør N insert() i en tom heap.) (N = antall elementer) Binomialheaper

Implementsjon Binomialheaper Dobbeltlenkede, sirkulære lister

Implementsjon Binomialheaper Dobbeltlenkede, sirkulære lister

Implementsjon Binomialheaper Dobbeltlenkede, sirkulære lister

Meget elegant, og i teorien effektiv, måte å implementere heaper på: De fleste operasjoner har amortisert kjøretid O(1). (Fredman & Tarjan ’87) insert(), decreaseKey() og merge() O(1) amortisert tid deleteMin() 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å deleteMin() i forhold til de andre operasjonene. Datastrukturen utviklet i forbindelse med en korteste sti-algoritme. Også benyttet i spenntre-algoritmer. Fibonacciheaper

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper Leftist Ikke leftist

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper Leftist Ikke leftist

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper Leftist

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. Fibonacciheaper

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Fra venstrevridde heaper tar vi med en smart decreaseKey() metode. 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. Fibonacciheaper min

Vi bruker lazy merging / lazy binomial queue. Fibonacciheaper

Vi bruker lazy merging / lazy binomial queue. Fibonacciheaper

Problemet med decreaseKey() -metoden vår og lazy merging er selvsagt at vi må rydde opp i etterkant. Dette gjøres i deleteMin(), 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.) Fibonacciheaper

Amortisert tid insert() O(1) decreaseKey() O(1) merge() O(1) deleteMin() O(log N) buildHeap() O(N) (Kjør N insert() i en tom heap.) (N = antall elementer) Fibonacciheaper