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

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

PRIORITETSKØ. Aksjehandel. Datastruktur for aksjehandel. Nøkler og Totalorden-relasjonen

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

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

Pensum: fra boken (H-03)+ forelesninger

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

Pensum: fra boken (H-03)+ forelesninger

IN Algoritmer og datastrukturer

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

PrioritetsKøer I. ADGANG TIL ELEMENTER I EN SAMLING II. TOTALE ORDNINGER OG NØKLER III.PRIORITETSKØ ADT IV. IMPLEMENTASJON MED SEQUENCE ADT

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

PG4200 Algoritmer og datastrukturer Forelesning 7

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Definisjon av binært søketre

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Lars Vidar Magnusson

PrioritetsKøer. i-120 : h98 8. PrioritetsKøer: 1. Samling. n-te/vilkårlig. FiLi. PosSamling. Sequence

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Definisjon: Et sortert tre

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

Object [] element. array. int [] tall

INF Algoritmer og datastrukturer

INF2220: Time 4 - Heap, Huffmann

Trær. En datastruktur (og abstrakt datatype ADT)

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

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

INF2220: Forelesning 2

Et eksempel: Åtterspillet

Liste som abstrakt konsept/datatype

INF2220: Forelesning 2

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

Oppgave 1. Sekvenser (20%)

Oppsummering. I. HVA VAR DET? I.1 ADTer og Programutvikling I.2 Datastrukturer I.3 Algoritmer II. PENSUM III.EKSAMEN IV. ØNSKER

Et eksempel: Åtterspillet

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

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

EKSAMEN med løsningsforslag

Minimum Spenntrær - Kruskal & Prim

INF1020 Algoritmer og datastrukturer. Dagens plan

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

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

UNIVERSITETET I OSLO

INF2220: Time 12 - Sortering

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

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

Notater til INF2220 Eksamen

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

EKSAMEN. Algoritmer og datastrukturer

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

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

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

... Dagens plan. Prioritetskø ADT

Kap 9 Tre Sist oppdatert 15.03

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Grunnleggende Datastrukturer

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

Balanserte binære søketrær

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

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Binære trær: Noen algoritmer og anvendelser

Kap.8 Sortering og søking sist oppdatert 16.03

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

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

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

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Algoritmer og Datastrukturer

Selv-balanserende søketrær

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

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

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

Ordbøker I. ORDBOK /PRIORITETSKØ = SEKVENS /LIFI II. IMPLEMENTASJON MED SEQUENCE III.IMPLEMENTASJON MED HASH TABELL

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

INF2220: Forelesning 3

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

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

Samlinger, Lister, Sekvenser

UNIVERSITETET I OSLO

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

UNIVERSITETET I OSLO

SIF8010 ALGORITMER OG DATASTRUKTURER

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Norges Informasjonsteknologiske Høgskole

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Løsnings forslag i java In115, Våren 1998

Rekursiv programmering

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

n/b log b n = (lg n) a log b n = n log b a

Transkript:

PQ: HEAP Ingen sammenheng med memory heap Definisjon og data-invarianter for heap InsertKey og RemoveMin for heap Kompleksitet for operasjoner: O(log n) Prioritetskø impl vha Heap Heap En heap er et binært tre T som lagrer en samling nøkler (eng: key), eller nøkkel-element par, i sine interne noder og tilfredsstiller 2 krav (2 datainvarianter): - HeapOrdning: key(forelder(node)) key(node) - Komplett Binært tre: alle nivå er fulle, unntatt det siste som er fyllt opp fra venstre mot høyre: HeapSortering i tid O(n log n) Bottom-Up Heap Konstruksjon & Locator 2 2..2 Er disse heap er? Hvordan implementere heap: NB: Heap er et Komplett Binært Tre. Derfor: bruk array direkte (eller mer generellt ADT Sequence) som i implementasjon av Binært Tre i denne ukes gruppeøvelse. 2 2 2 0 2 Løvene kan være implisitte (dvs ikke som i figuren) Bruk doblingsvekststrategien for størrelse på array. 2 2 Da er lagringsplass for n elementer O(n) og enhver traversering mellom barn og forelder tar tid O()...

Høyden på en Heap En heap T som lagrer n nøkler har høyde... h = log(n + ), dvs h=o(log n) n + 2 + +... + 2 h-2 + = 2 h- - + = 2 h- 0 Heap Insertion Anta vi har en heap og skal utføre Insert() h 2 h h n + 2 + +... +2 h- = 2 h - 0 2 0 h 2 h h 2 2 22 Derfor har vi 2 h- n 2 h - Ta log på begge sider: h- log n h log (n + ) h log n +, gir h = log(n+).. Heap Insertion Legg den nye nøkkelen i neste ledige posisjon i heap en. Upheap Swap alle feil forelder-barn nøkkelpar: 2 0 2 0 22 2 2 2 0 Så må vi gjenopprette Heapordning vha Upheap...

Upheap forts. langs sti til rot Slutt på Upheap 2 0 2 0 2 0 Upheap slutter når den nye nøkkelen er større enn foreldrenøkkel eller når rot er nådd. Tidskompleksitet for Insert(key) blir da : O(total #swaps) O(høyde), dvs O(log n)..0 Fjerne minste nøkkel fra Heap RemoveMin() Downheap 2 0 2 0 Minste nøkkel er i rotnode (Heapordning) 2 0 Fjerning av rotnode gir Komplett Binært Tre med node mindre - Løsning: ) Siste node legges i rotnode 2) Gjenopprett Heapordning: Downheap Downheap sammenlikner forelder med minste barn. Om mindre, utfør swap og fortsett...2

Downheap forts på minste sti Downheap forts på minste sti 0 2 0 2 0 0 2 2 22 2 2.. Slutt på Downheap 0 Hvordan finne Neste Ledige Node? Heap implementert vha array eller ADT Sekvens Node med indeks/rank i har venstre barn med indeks/rank 2j og høyre barn med indeks/rank 2j+. 2 2 22 2 2 Downheap slutter når nøkkelen er større enn nøkkelen i begge barn, eller når vi har nådd nederste nivå. Tidskompleksitet for RemoveMin() blir da: O(total #swaps) O(høyde), dvs O(log n) 0 2 Neste ledige node er i neste ledige indeks/rank. Insetting og fjerning anvender metoder insertlast og removelast for sekvensen, da Last alltid vil være neste ledige node...

Hvor er Neste ledige Node? Heap impl. vha ADT Binært Tre. 2 spesialtilfeller: (2,C) (,A) (,C) (,K) (,F) (,Q) (,Z) PQ implementert vha Heap public class HeapPriorityQueue implements PriorityQueue { } BinaryTree T; Position last; Comparator comparator;... z (,X) (2,J) (,E) (2,H) (,S) (,W) (,B) (0,L) (,C) (,A) u (,Z) heap (,A) last (,C) comp (,Z) < = > (,X) (,K) (2,J) (,E) (,F) (2,H) w z (,Q) (,B) (,X) (,K) (2,J) (,E) (,F) (2,H) (,S) (,Q) (,W) (,B).. PQ vha Heap Med Prioritetskø implementert som heap, vil insertitem og removemin hver ta tid O(log k), hvor k er antall elementer i PQ på det aktuelle tidspunkt. Om vi har max n elementer i heap, så er høyden på heap alltid h <= log(n+) og verste-fall tidskompleksitet for disse metodene O(log n). Heap-Sortering :for i= to n {Heap.insertItem(key,element)} 2:for i= to n {Heap.removeMin()} Både fase og 2 tar O(n log n) tid, og dermed blir heap-sortering en O(n log n) algoritme. O(n log n) kjøretid er mye bedre enn O(n 2 ) som for selection-sort og insertion-sort. In-Place Heap-Sort Gitt sekvens som skal sorteres, så bygg en heap ut av samme sekvensen. Ikke bruk ekstern heap. Hvordan bygge heap ut av en sekvens? Bottom-Up Heap Konstruksjon bygg (n + )/2 trivielle ett-element heap er 2 2 bygg så -element heap er oppå disse 2 2 2 2..

Bottom-Up Heap Konstruksjon downheap for a bevare heap-ordning Bottom-Up Heap Konstruksjon Utfør downheap på disse -element heap er. 2 2 2 2 2 2 2 2 bygg så -element heap er oppå disse 2 2 2 2 2 2 2 2.2.22 Bottom-Up Heap konstruksjon (forts.) 2 2 2 2 Presto! En heap. Analyse av Bottom-Up Heap Konstruksjon Påstand: Bottom-up heap konstruksjon med n nøkler tar O(n) tid, selv om vi også setter inn i sekvensen. - Sett inn (n + )/2 noder - Sett inn (n + )/ noder og utfør downheap - Sett inn (n + )/ noder og utfør downheap -... - visuell analyse: 2 2 2 2 n innsettinger, n/2 upheaps med totalt O(n) kjøretid Vi kan altså bygge en heap i O(n) tid..2.2

Locator En Locator er knyttet til et objekt og brukes til å finne igjen objektet selv om det har blitt flyttet til en ny posisjon i en samling. ADT locator har følgende metoder: - element(): return the element of the item associated with the locator. - key(): return the key of the item assocated with the locator. Vha locator kan vi legge inn følgende metoder i ADT Prioirtetskø: - insert(k,e): insert (k,e) into P and return its locator - min(): return the locator of an element witih smallest key - remove(l): remove the element with locator l I applikasjonen for aksjehandel er dette nyttig: returner locator når en ordre settes inn, slik at ved kansellering av samme ordren kan den lett finnes vha locator, selv om ordrens posisjon er blitt endret. Position og Locator Hva er forskjellen på posisjon og locator? Deres metoder likner, men bruken er forskjellig Posisjon abstraherer en spesifikk implementasjon av aksess til elementer (f.eks. indeks eller noder). Posisjoner er definert relativt til hverandre (e.g., previous-next, parent-child) Locator er holder tritt med hvor elementer er lagret. Locators assossierer elementer med nøkler..2.2