Datastrukturer. Datastruktur = data + operationer herpå

Relaterede dokumenter
Datastrukturer. Datastruktur = data + operationer herpå

Datastrukturer (recap)

Datastrukturer (recap) Datastruktur = data + operationer herpå

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave.

DM507 Algoritmer og datastrukturer

Datastrukturer (recap)

Prioritetskøer og hobe. Philip Bille

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

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

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

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

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.

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

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

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

Mindste udspændende træ

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

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

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.

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.

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

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

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

DM507 Algoritmer og datastrukturer

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

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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

DM507 Algoritmer og datastrukturer

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

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.

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Merging og Hashing (del I)

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM02 Kogt ned. Kokken. Januar 2006

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

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

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

Danmarks Tekniske Universitet

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)

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

Danmarks Tekniske Universitet

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Prioritetskøer ved»heap«, simulering

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

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

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

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

Danmarks Tekniske Universitet

Skriftlig eksamen i Datalogi

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

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

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

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

Danmarks Tekniske Universitet

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2013

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

Oversættere, ugeopgave 3

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

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

Danmarks Tekniske Universitet

Introduktion til datastrukturer

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

Introduktion til DM507

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Abstrakte datatyper C#-version

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Rolf Fagerberg. Forår 2015

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

På nedenstående billede skal du finde den figur som optræder nøjagtig 3 gange.

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 modstridende mål).

Datastrukturer Tænk på en datastruktur som et API for adgang til en samling data. Datastrukturer niveau 1: de tilbudte operationer (i Java: et interface). Datastrukturer niveau 2: en konkret implementation af de tilbudte operationer (i Java: klasse som implementerer interfacet). En givent sæt operationer kan have mange forskellig implementationer, ofte med forskellige køretider.

Datastrukturer Tænk på en datastruktur som et API for adgang til en samling data. Datastrukturer niveau 1: de tilbudte operationer (i Java: et interface). Datastrukturer niveau 2: en konkret implementation af de tilbudte operationer (i Java: klasse som implementerer interfacet). En givent sæt operationer kan have mange forskellig implementationer, ofte med forskellige køretider. 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

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

Forskellige implementationer er Prioritetskøer Heap Lænket liste (usorteret) Extract-Max O(log n) O(n) Build O(n) O(1) Increase-Key O(log n) O(1) Insert O(log n) O(1)