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

Like dokumenter
Quicksort. Lars Vidar Magnusson Kapittel 7 Quicksort Randomisert Quicksort Analyse av Quicksort

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

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

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

Divide-and-Conquer II

Lars Vidar Magnusson

deeegimnoorrrsstt Sjette forelesning

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

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

Sortering i Lineær Tid

Minimum Spenntrær - Kruskal & Prim

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

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

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.

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

deeegimnoorrrsstt Sjette forelesning

Grunnleggende Datastrukturer

IN Algoritmer og datastrukturer

INF2220: Time 12 - Sortering

INF Algoritmer og datastrukturer

Om Kurset og Analyse av Algoritmer

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

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

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

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

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

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

Algdat Eksamensforelesning. Nils Barlaug

Definisjon av binært søketre

Lars Vidar Magnusson

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

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

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

Definisjon: Et sortert tre

Notater til INF2220 Eksamen

INF1020 Algoritmer og datastrukturer. Dagens plan

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

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

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

Pensum: fra boken (H-03)+ forelesninger

Hvor raskt klarer vi å sortere?

Pensum: fra boken (H-03)+ forelesninger

INF2220: Time 4 - Heap, Huffmann

... Dagens plan. Prioritetskø ADT

Innhold. Innledning 1

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

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

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

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

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

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

EKSAMEN med løsningsforslag

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Datastrukturer for rask søking

Korteste Vei II. Lars Vidar Magnusson Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Læringsmål og pensum. Algoritmeeffektivitet

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

Et eksempel: Åtterspillet

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

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

Et eksempel: Åtterspillet

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

INF2220: Forelesning 2

Algoritmer og Datastrukturer IAI 21899

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

LO118D Forelesning 2 (DM)

Binære trær: Noen algoritmer og anvendelser

Divide-and-Conquer. Lars Vidar Magnusson

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

Eksamen i tdt4120 Algoritmer og datastrukturer

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

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

Analyse av Algoritmer

Uke 5 Disjunkte mengder

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Logaritmiske sorteringsalgoritmer

Algoritmer og Datastrukturer

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

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

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

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

Grunnleggende Grafalgoritmer III

Grunnleggende Grafalgoritmer

PG4200 Algoritmer og datastrukturer Forelesning 7

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

ALGORITMER OG DATASTRUKTURER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

ALGORITMER OG DATASTRUKTURER

Transkript:

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

Sorterings Problemet Sorterings problemet er et av de mest fundementalske problemene innen informatikken. Vi sorterer typisk et record i henhold til dets nøkkel i.e. nøkkel + satellittdata = record, men for klarhetens skyld så holder vi oss i dette kurset til å sortere tall. Sortering blir ofte brukt som en subrutine i en mer kompleks rutine.

Sorteringsalgoritmer Det finnes en rekke sorteringsalgoritmer som alle har sine styrker og svakheter. Vi har allerede sett på Insertion-Sort og Merge-Sort med gjennomsnitts kjøretid på henholdsvis Θ(n 2 ) og Θ(n log n). Insertion-Sort sorterer elementene in-place, mens Merge algoritmen i Merge-Sort kopierer elmenetene over i en ny array.

Sorteringsalgoritmer Algoritme Verstefall kjøretid Gjennomsnitt kjøretid Insertion sort Θ(n 2 ) Θ(n 2 ) Merge sort Θ(n log n) Θ(n log n) Heapsort O(n log n) Quicksort Θ(n 2 ) Θ(n log n) (forventet) Counting sort Θ(n + k) Θ(n + k) Radix sort Θ(d(n + k)) Θ(d(n + k)) Bucket sort Θ(n 2 ) Θ(n) (gjennomsnitt)

Heapsort Heapsort benytter seg av en heap for å sortere n elementer. Algoritmen tilhører i verstefall input O(n log n) Algoritmen sorterer in-place Algoritmen kombinerer det beste fra Insertion-Sort og Merge-Sort.

Heaps Heaps er en datastruktur som kan beskrives som en nesten komplett binært tre. NB! Begrepet benyttes ofte også som en betegnelse på et minneområde uten garbage collection. Høyden til en node er den lengste enkle stien fra en node til en bladnode Høyden til en heap = høyden til rotnoden = Θ(log n)

Heaps - Lagring Selv om heaps konseptuelt er et nesten komplett binært tre er det vanlig å lagre de som vanlige arrays. Hvis array A brukes til å representere treet så vil roten til treet lagres i A[1], og vi får følgende navigeringsmetoder. Parent(i) 1 return i/2 Left(i) 1 return 2i Right(i) 1 return 2i+1

Heaps - Lagring Hvordan heaps er lagret i en array kan sees i diagrammet under.

Heap Property En heap må til enhver tid oppfylle et krav (heap property) For max-heaps må alle noder bortsett fra rotnoden oppfylle A[Parent(i)] A[i]. For min-heaps må alle noder bortsett fra rotnoden oppfylle A[Parent(i)] A[i]. En max-heap har til enhver tid største element i rotnoden En min-heap har til enhver tid minste element i rotnoden

Max-Heapify Algoritmen Max-Heapify benyttes for å ivareta max-heap proprty. Før kjøring av Max-Heapify er A[i] enten større eller mindre enn barna. Vi antar at del-trærne i de to barna er max-heaps Etter kjøring er del-treet med rot i i en max-heap

Hvordan Max-Heapify Virker Max-Heapify virker på følgende måte. Sammenlign A[i] med både A[Left(i)] og A[Right(i)]. Hvis nødvendig byttes verdien i A[i] med den største av de to barna Fortsett rekursivt til vi kommer til en bladnode.

Max-Heapify - Kjøretid Kjøretiden til Max-Heapify avhenger av høyden til treet (Θ(log n). Da kan vi naturlig nok også si at kjøretiden til Max-Heapify er O(log n) Alternativt kan vi utnytte oss av det faktum hvis det er n noder i treet med rot i i så er det på det meste 2n/3 noder i hvert av barna. T (n) = T (2n/3) + Θ(1) Masterteoremet gir oss da en kjøretid på O(log n) (som verifiserer intuisjonen)

Build-Max-Heap Det kan bevises at i en heap representert av en array A så er nodene A[n/2 + 1... n] bladnoder. Dette utnyttes i algoritmen Build-Max-Heap som brukes til å bygge en heap fra en usortert array.

Kjøring av Build-Max-Heap

Korrektheten til Build-Max-Heap Vi kan verifisere korrektheten til Build-Max-Heap ved å benytte loop invariant analyse. Loop invariant: Ved starten av alle iterasjoner så er alle noder i + 1, i + 2..., n roten til en max-heap Initialization: Dette følger naturlig av at A[n/2 + 1... n] er bladnoder. Maintenance: Barna til node i har høyere indeks enn i, så utifra vet vi at de begge er røtter i en max-heap. Max-Heapify sørger for at i blir en max-heap. Etter å ha minket i er loop invarianten korrekt. Termination: Når i = 0 så er node 1 roten i hele max-heap

Analyse av Kjøretiden til Build-Max-Heap Vi kan finne en enkel grense. Løkken kjører O(n) ganger Hvert kall til Max-Heapify har kjøretid på O(log n) Total øvre grense O(n log n) Det er mulig å gjøre en strammere analyse ved å utnytte at hvis høyden h til en node er log n, så kan vi si at kjøretiden til Max-Heapify er lineær i henhold til høyden til noden den kjører på.

Stram Analyse av Kjøretiden til Build-Max-Heap Flesteparten av nodene i en heap har lav høyde. Kjøretiden til Max-Heapify på en en node med høyde h er O(h) Vi har n/2 h+1 noder med høyde h Høyden til heapen er log n log n h=0 n O(h) = O 2 h+1 < O n ( n ( = O n = O(n) log n h=0 h=0 Kjøretiden til Build-Max-Heap er O(n). h 2 h ) h 2 h ) 1/2 (1 1/2) 2 )

Heapsort Heapsort fungerer på følgende måte. Bygger en max-heap utifra en usortert array med elementer med Build-Max-Heap Tar det største elementet fra roten og setter det på korrekt plass ved å bytte det med siste elementet. Fjern det siste elementet fra heapen og sørg for at det nye elementet i roten ligger på korrekt plass med Max-Heapify Gjenta til det bare er et element igjen i heapen

Kjøring av Heapsort

Analyse av Heapsort Det er enkelt å finne en øvre asymptotisk grense for Heapsort Build-Max-Heap er O(n) En for-løkke n 1 Bytte elementer er O(1) Max-Heapify er O(log n) Total kjøretid for Heapsort blir da O(n log n). Heapsort er en effektiv algoritme, men en velimplementert Quicksort er typisk bedre i praksis.

Prioritetskøer En prioritetskø er en effektiv datastruktur som er skreddersydd for å finne det høyest prioriterte elementet i et et sett. En prioritetskø blir ofte implementert med heaps da de gir et godt kompromiss mellom kjøretiden for innsetting og uthenting (O log n). Høyest prioritet i en max-heap er største element Høyest prioritet i en min-heap er minste element

Prioritetskø Operasjoner Hvis vi holder oss til max-prioritetskøer har vi følgende operasjoner Max-Heap-Insert(S, x): sett inn element x i settet S Heap-Maximum(S): returnerer det største elementet Heap-Extract-Max(S): Fjerner og returnerer det største elementet Heap-Increase-Key(S, x, k): Øker verdien til element x til k En min-prioritetskø har de samme operasjonene, bare speilet.

Heap-Maximum Vi ser først på Heap-Maximum. Kjøretiden er naturlig nok konstant.

Heap-Extract-Max Under er pseudekoden for Heap-Extract-Max. Kjøretiden er O(log n).

Heap-Increase-Key Under er pseudekoden for Heap-Increase-Key. Kjøretiden er O(log n).

Max-Heap-Insert Under er pseudekoden for Max-Heap-Insert. Kjøretiden er O(log n).