Datastrukturer. Datastruktur = data + operationer herpå

Relaterede dokumenter
Datastrukturer. Datastruktur = data + operationer herpå

Datastrukturer (recap)

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Datastrukturer (recap) Datastruktur = data + operationer herpå

Sortering. Eksempel: De n tal i sorteret orden

DM507 Algoritmer og datastrukturer

Datastrukturer (recap)

Sortering af information er en fundamental og central opgave.

Prioritetskøer og hobe. Philip Bille

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DM507 Algoritmer og datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

Mm6: More sorting algorithms: Heap sort and quick sort - October 29, 2008

A Comparative Analysis of Three Different Priority Deques af: Søren Skov & Jesper Holm Olsen

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Mindste udspændende træ

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

DM507 - Algoritmer og datastrukturer

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

DM02 Kogt ned. Kokken. Januar 2006

DM507 Algoritmer og datastrukturer

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DM507 Algoritmer og datastrukturer

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Rolf Fagerberg. Forår 2013

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2015

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

Rolf Fagerberg. Forår 2015

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Introduktion til datastrukturer. Philip Bille

Merging og Hashing (del I)

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Danmarks Tekniske Universitet

Introduktion til DM507

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

DM507 Algoritmer og datastrukturer

Introduktion til datastrukturer

Abstrakte datatyper C#-version

Prioritetskøer ved»heap«, simulering

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Rolf Fagerberg. Forår 2014

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Danmarks Tekniske Universitet

Oversættere, ugeopgave 3

Skriftlig eksamen i Datalogi

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Rolf Fagerberg. Forår 2012

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jens Myrup Pedersen (JMP) Mm4: Sorting algorithms - October 23, 2009

Transkript:

Prioritetskøer

Prioritetskøer?

Datastrukturer Datastruktur = data + operationer herpå

Datastrukturer Data: Datastruktur = data + operationer herpå Ofte en ID + associeret data. ID kaldes også en nøgle (key). ID er ofte fra et ordnet univers (har en ordning), f.eks. int, float, String. Vi nævner normalt ikke den associerede data. Dvs. elementer er reelt (ID,data) eller (ID,reference til data), men omtales blot som ID.

Datastrukturer Data: Datastruktur = data + operationer herpå Ofte en ID + associeret data. ID kaldes også en nøgle (key). ID er ofte fra et ordnet univers (har en ordning), f.eks. int, float, String. Vi nævner normalt ikke den associerede data. Dvs. elementer er reelt (ID,data) eller (ID,reference til data), men omtales blot som ID. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer, samt deres køretider. Målene er fleksibilitet og effektivitet (som regel konkurrende mål).

Datastrukturer Data: Datastruktur = data + operationer herpå Ofte en ID + associeret data. ID kaldes også en nøgle (key). ID er ofte fra et ordnet univers (har en ordning), f.eks. int, float, String. Vi nævner normalt ikke den associerede data. Dvs. elementer er reelt (ID,data) eller (ID,reference til data), men omtales blot som ID. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer, samt deres køretider. Målene er fleksibilitet og effektivitet (som regel konkurrende mål). Tænk på en datastruktur som et API for adgang til en samling data, eller som en klasse i OO-programmering (indkapsler data, og giver adgang via metoder).

Datastrukturer Data: Datastruktur = data + operationer herpå Ofte en ID + associeret data. ID kaldes også en nøgle (key). ID er ofte fra et ordnet univers (har en ordning), f.eks. int, float, String. Vi nævner normalt ikke den associerede data. Dvs. elementer er reelt (ID,data) eller (ID,reference til data), men omtales blot som ID. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer, samt deres køretider. Målene er fleksibilitet og effektivitet (som regel konkurrende mål). Tænk på en datastruktur som et API for adgang til en samling data, eller som en klasse i OO-programmering (indkapsler data, og giver adgang via metoder). DM507: katalog af datastrukturer med bred anvendelse samt effektive implementationer heraf.

Prioritetskøer Data: Element = nøgle (ID) fra et ordnet univers + associeret data.

Prioritetskøer Data: Element = nøgle (ID) fra et ordnet univers + associeret data. Definerende operationer (max-version af prioritetskø): Q.Extract-Max: Returnerer elementet med den største nøgle i prioritetskøen Q (et vilkårligt sådant element, hvis der er flere lige store). Elementet fjernes fra Q. Q.Insert(e: element). Tilføjer elementet e til prioritetskøen Q.

Prioritetskøer Data: Element = nøgle (ID) fra et ordnet univers + associeret data. Definerende operationer (max-version af prioritetskø): Q.Extract-Max: Returnerer elementet med den største nøgle i prioritetskøen Q (et vilkårligt sådant element, hvis der er flere lige store). Elementet fjernes fra Q. Q.Insert(e: element). Tilføjer elementet e til prioritetskøen Q. Bemærk: vi kan sortere med disse operationer:

Prioritetskøer Data: Element = nøgle (ID) fra et ordnet univers + associeret data. Definerende operationer (max-version af prioritetskø): Q.Extract-Max: Returnerer elementet med den største nøgle i prioritetskøen Q (et vilkårligt sådant element, hvis der er flere lige store). Elementet fjernes fra Q. Q.Insert(e: element). Tilføjer elementet e til prioritetskøen Q. Bemærk: vi kan sortere med disse operationer: n Insert n Extract-Max

Prioritetskøer Data: Element = nøgle (ID) fra et ordnet univers + associeret data. Definerende operationer (max-version af prioritetskø): Q.Extract-Max: Returnerer elementet med den største nøgle i prioritetskøen Q (et vilkårligt sådant element, hvis der er flere lige store). Elementet fjernes fra Q. Q.Insert(e: element). Tilføjer elementet e til prioritetskøen Q. Bemærk: vi kan sortere med disse operationer: n Insert n Extract-Max Så mindst een af operationerne Insert og Extract-Max må tage Ω(log n) for enhver implementation af prioritetskøer, som kan beskrives i den sammenligningsbaserede model.

Prioritetskøer Ekstra operationer: Q.Increase-Key(r: reference til et element i Q, k nøgle). Ændrer nøglen til max{k, gamle nøgle} for elementet refereret til af r. Q.Build(L: liste af elementer). Bygger en prioritetskø indeholdende elementerne.

Prioritetskøer Ekstra operationer: Q.Increase-Key(r: reference til et element i Q, k nøgle). Ændrer nøglen til max{k, gamle nøgle} for elementet refereret til af r. Q.Build(L: liste af elementer). Bygger en prioritetskø indeholdende elementerne. Trivielle operationer for alle datastrukturer: Q.IsEmpty(), Q.CreateNew(), Q.RemoveEmpty(). Vil ikke blive nævnt fremover.

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort.

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.)

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max:

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify.

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid:

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid: O(log n). Build:

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid: O(log n). Build: Brug Heapify gentagne gange bottom-up.

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid: O(log n). Build: Brug Heapify gentagne gange bottom-up. Køretid:

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid: O(log n). Build: Brug Heapify gentagne gange bottom-up. Køretid: O(n).

Implementation via Heaps En mulig implementation: brug heapstrukturen fra Heapsort. (NB: Arrayversionen af heaps kræver et kendt maximum for størrelsen n af køen. Alternativt kan array erstattes af et extendible array, f.eks. java.util.arraylist i Java, eller man kan implementere heaptræet pointerbaseret.) Vi har allerede: Extract-Max: Er essentielt hvad der bruges under anden del af Heapsort fjern rod, flyt sidste blad op som rod, kald Heapify. Køretid: O(log n). Build: Brug Heapify gentagne gange bottom-up. Køretid: O(n). Mangler: Insert Increase-Key

Increase-Key

Increase-Key 1. Ændre nøgle for element.

Increase-Key 1. Ændre nøgle for element. 2. Genopret heaporden.

Increase-Key 1. Ændre nøgle for element. 2. Genopret heaporden.

Increase-Key 1. Ændre nøgle for element. 2. Genopret heaporden. Køretid:

Increase-Key 1. Ændre nøgle for element. 2. Genopret heaporden. Køretid: O(log n).

Insert

Insert 1. Indsæt nye element sidst ( heapfacon i orden).

Insert 1. Indsæt nye element sidst ( heapfacon i orden). 2. Genopret heaporden som i Increase-Key.

Insert 1. Indsæt nye element sidst ( heapfacon i orden). 2. Genopret heaporden som i Increase-Key. Køretid:

Insert 1. Indsæt nye element sidst ( heapfacon i orden). 2. Genopret heaporden som i Increase-Key. Køretid: O(log n).