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

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

PrioritetsKøer. i-120 : H PrioritetsKøer: 1. Container. n-te/vilkårlig. PositionalContainer. PositionalSequence. Tree. Deque PriorityQueue

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

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

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger

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

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

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

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

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

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

UNIVERSITETET I OSLO

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

Container ADT. Sekvenser. int size(); antall elementer i samlingen */ boolean isempty(); true hviss samlingen er tom */

IN Algoritmer og datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Kap.8 Sortering og søking sist oppdatert 16.03

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

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

Lars Vidar Magnusson

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

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

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

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

Binære trær: Noen algoritmer og anvendelser

Liste som abstrakt konsept/datatype

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

PG4200 Algoritmer og datastrukturer Forelesning 7

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

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

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

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

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

UNIVERSITETET I OSLO

INF2220: Forelesning 2

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

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

Algoritmer og Datastrukturer

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

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

Kapittel 9: Sortering og søking Kort versjon

INF1010 Sortering. Marit Nybakken 1. mars 2004

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

Kapittel 9: Sortering og søking Kort versjon

Oppgave 1. Sekvenser (20%)

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF Algoritmer og datastrukturer

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Oppgave 1. Stabler og Køer (30%)

Kapittel 9: Sortering og søking Kort versjon

Definisjon av binært søketre

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Samlinger, Lister, Sekvenser

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

EKSAMEN. Emne: Algoritmer og datastrukturer

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Algoritmer og datastrukturer Eksamen

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Kapittel 8: Sortering og søking

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

UNIVERSITETET I OSLO

INF Seminaroppgaver til uke 3

Algoritmer og datastrukturer Eksamen 22. februar 2011

UNIVERSITETET I OSLO

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

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

UNIVERSITETET I OSLO

ADT og OO programmering

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

INF2220: Forelesning 2

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

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

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

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

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

INF Algoritmer og datastrukturer

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

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

INF1020 Algoritmer og datastrukturer. Dagens plan

INF Notater. Veronika Heimsbakk 10. juni 2012

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

EKSAMEN med løsningsforslag

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Definisjon: Et sortert tre

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

Norges Informasjonsteknologiske Høgskole

Løsningsforslag eksamen INF1020 høsten 2005

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

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

Transkript:

PrioritetsKøer I. ADGANG TIL ELEMENTER I EN SAMLING gjennom Position gjennom nøkkel II. TOTALE ORDNINGER OG NØKLER III.PRIORITETSKØ ADT IV. IMPLEMENTASJON MED SEQUENCE ADT V. IMPLEMENTASJON MED HEAP DS Linket Struktur Sequence (Array) Kap. 6 (kursorisk: 6.3.; unntatt 6.) i-0 : h. PrioritetsKøer: adgang til elementene kun v.hj.a. plassering (Position) i samlingen Samling første/siste n-te/vilkårlig FiLi PosSamling Queue Stack PosSequence Sequence struktur er uavhengig av (abstrakte) objekters interne struktur og egenskaper Tree BinTree men f.eks. Sortering er en operasjon ) på strukturer med rekkefølgen (total ordning) på Posisjoner, og hvor ) alle elementene er ordnet (mht. en nøkkel-verdi) 3 sorter 3 3 3 plassering i en samling avhenger av elementets verdi (nøkkel) adgang til elementene v.hj.a. nøkkel minste/største PrQueue Dictionary med nøkkel==k i-0 : h. PrioritetsKøer:

II. Nøkler og Ordninger Gitt en (vilkårlig) mengde S :. en binær relasjon R på S, er en mengde av par (s,p) der s og p ε S (man skriver ofte (s,p) ε R som R(s,p), og hvis R er, skriver vi s p). en relasjon er en total ordning (TO) på S hviss den er: refleksiv: s s for alle s ε S transitiv: hvis s p & p q så s q for alle s,p,q ε S antisymmetrisk : hvis s p & p s så s = p for alle s,p ε S (for to vilkårlige elementene s p ε S vil enten p < s eller s < p) TO S : heltallene R(x,y) : x y S : et (latinsk, norsk, russisk) alfabet R(x,y) : x kommer-før y S : alle strenger (ord) over et gitt alfabet R : leksiskografisk ordning NB! Samme mengde kan ordnes totalt på forskjellige måter, f.eks. S : heltallene R(x,y) : x >= y ikke S : heltallene R(x,y) : x < y TO S : pers. i 6-te rad R(x,y) : x sitter-til-venstre-for y * R (x,y) : x sitter-til-venstre-for-eller-der-hvor y S : mennesker R(x,y) : x yngre-enn y, x ikke-yngre-enn y Nøkkel (for en mengde E) er en funksjon key : E S, der I. S er en (vilkårlig!) totalt ordnet mengde (med en ) II. key er injektiv, dvs. slik at : hvis e f så key(e) key(f) (to forskjellige elementene fra E har forskjellige nøkkel-verdier) tenk på key(e) som en egenskap/et attributt til e E S : key stasborgere personnumre (heltall, ) : key(e) = e s persnr * pers i 6-te rad plasser, til-venstre-eller-likt : key(e) = e s sitteplass? mennesker heltall, : key(e) = e s alder Ofte, oppfyller ikke nøkler II: flere elementer fra E kan ha samme nøkkel-verdi. i-0 : h. PrioritetsKøer: 3 Objekter med nøkler class E { e= new E(,333, Oslo ) int alder; key: E heltall, e.alder; int pnr; key: E heltall, e.pnr; Object adr; key3: E Object,? e.adr; Nøkkel for et Objekt e kan være et vilkårlig Objekt k : (e,k) For det meste (om ikke alltid) bruker vi (totalt) ordnede nøkler Ideen av TO kan uttrykkes abstrakt v.hj.a. Designmønster (pattern) public interface Comparator { boolean lt(object a, Object b); boolean leq(object a, Object b); boolean gt(object a, Object b); boolean geq(object a, Object b); boolean eq(object a, Object b); Algoritmer skal bruke bare dette mønsteret som parameter Dette mønstret må implementeres i hvert tilfelle for å fange den spesifikke TO en : avhengig av de aktuelle Objektene og slik applikasjonen krever /** generisk int-comp : sammenligner Integer objekter **/ class intcomp implements Comparator { public boolean lt(object a, Object b) { return (((Integer)a).intValue() < ((Integer)a).intValue()); public boolean leq(object a, Object b) { return (((Integer)a).intValue() <= ((Integer)a).intValue()); boolean yngre_enn(e e, E g) { return new intcomp().lt(new Integer(e.alder), new Integer(g.alder)) ; i-0 : h. PrioritetsKøer:

Spesifikke Comparator implementerer både nøkkel-funksjonen og sammenlikning Algoritmer skal bruke bare Comparator mønsteret som parameter Dette mønstret må implementeres i hvert tilfelle for å fange den spesifikke TO en : avhengig av de aktuelle Objektene og slik applikasjonen krever F.eks. en sorterings metode programmeres som Object[] sort(object[] A, Comparator C) { utelukkende ved å bruke Comparator-operasjoner. Dersom vi nå skal sortere array med objekter av class Eks { int alder; int pnr; Object adr; mht. alder, pnr, etc. lager vi en Comparator for hvert tilfelle class aldcomp implements Comparator { // antar Objekter Eks boolean lt(object a, Object b) { return (((Eks)a).alder < ((Eks)b).alder); class pnrcomp implements Comparator { // antar Objekter Eks boolean lt(object a, Object b) { return (((Eks)a).pnr < ((Eks)b).pnr); class adrcomp implements Comparator { // antar Objekter Eks boolean lt(object a, Object b) { return (((Eks)a).adr?? ((Eks)b).adr); sort(a, new aldcomp()); sort(a, new pnrcomp()); sort(a, new adrcomp()); NB! en Comparator skal brukes kun med de spesifikke Objektene den er designet for i-0 : h. PrioritetsKøer: Vi skal bruke public class Par { // et par Objekt-nøkkel private Object el, key; public Par(Object k, Object e) { setelem(e); setkey(k); public Object key() { return key; public Object elem() { return el; public void setkey(object k) {key=k; public void setelem(object e) {el=e; class ParComp implements Comparator { public boolean lt(object a, Object b) { Par aa = (Par)a; Par bb = (Par)b; return aa.key()??? bb.key() ; // passende sammenlikning i-0 : h. PrioritetsKøer: 6

III. PrioritetsKø en samling som gir oss adgang til elementet med den minste nøkkelen (i en aktuell total ordning) public interface Samling { int size(); boolean isempty(); Enumeration elements(); public interface PrQueue extends Samling { /** sett inn et nytt element * @param e objektet som skal innsettes * @param k noekkel objekt */ void insert(object e, Object k); NB!! /** return - og fjern - minste * @return elementet med minste noekkel */ Object remmin(); /** return - uten aa fjerne - minste * @return elementet med minste noekkel */ Object min(); /** return minste noekkel-verdi * @return minste noekkel */ Object minkey(); Ofte lagrer vi Objekter der nøkkel er et attributt i så fall må vi lagre de med et kall PQ.insert(o, o.key()) Men her kan vi også samle Objekter uten noen nøkkel en nøkkel tilordnes ved innsetting: PQ.insert(o, new Key()) i-0 : h. PrioritetsKøer: 7 PrQ-Sortering mønster Sorter en gitt Sequence S mht. en bestemt ordning (Comparator C) bruker en PrQueue P (med samme Comparator C) void sort(sequence S, PrQueue P) a) while (! S.isEmpty()) e = S.removeFirst() fjern ett og ett element fra S O() P.insert(e,e) og sett dem inn i P b) while (! P.isEmpty()) e = P.remMin() fjern ett og ett element fra P S.insertLast(e) og sett dem inn på slutten av S O() a) b) trykkfeil i boken s.07 3 3 3 3 3 3 3 3 3 3 n O( P k.insert ( e ) ) + O( P k.remmin( ) ) k = k = n i-0 : h. PrioritetsKøer:

IV. PrQueue >> Sequence class PQSeq implements PrQueue { protected Comparator cp; protected Sequence sq=new SeqDL(); public PQSeq(Comparator c) { cp= c; ev. protected Sequence sq ; public PQSeq(Comparator c, Sequence s) { cp= c; sq= s; class parcomp implements Comparator { public boolean lt(object a, Object b) { Par aa = (Par)a; Par bb = (Par)b; return aa.key() < bb.key() ; public class Par { private Object el, key; public Par(Object k, Object e) { setelem(e); setkey(k); public Object key() { return key; public Object elem() { return el; public void setkey(object k) {key=k; public void setelem(object e) {el=e; i-0 : h. PrioritetsKøer: PrQueue >> Sequence >> (LL,DL,Array) I. DATA INVARIANT : INGEN USORTERT A D Z B insert(o,k) : sq.insertlast(new Par(k,o)) O() minkey() : finn C Position p = sq.first(); Object o = p.elem(); while (p!= sq.last() ) p = sq.after(p); if (cp.lt(p.elem(), o) o = p.elem(); return ((Par)o).elem().key(); Θ(n) min() : finn Θ(n) remmin() : finn og fjern Θ(n) : O() II. DATA INVARIANT : SORTERT STIGENDE A B D Z minkey() : ((Par) sq.first().elem()). key() O() min() : ((Par) sq.first().elem()). elem() C O() remmin() : ((Par) (sq.removefirst().elem()) ). elem() O() insert(o,k) : Par ny= new Par(k,o); if ( sq.isempty() ) sq.insertfirst(ny) else if ( cp.leq(ny, sq.first().elem()) ) sq.insertfirst(ny) else if ( cp.geq(ny, sq.last().elem()) ) sq.insertlast(ny) else Position c = sq.first() while (cp.gt(ny, c.elem() ) c= sq.after(c) sq.insertbefore(c,ny) O(n) : O() i-0 : h. PrioritetsKøer: 0

Oppdater aldri objekter i en Samling! fordi nøkkel-verdi avhenger, typisk, av Objektets attributter class El { private int alder; private int pnr; public Object key() { return new Integer(alder); public void setalder(int a) { alder=a; PK PrQueue PK = new PQSeq(new intcomp()); El e= new El(); El e= new El(); PK.insert(e, e.key()); PK.insert(e, e.key()); insert(o) remmin() min() minkey() e El o = (El) PK.min(); o e o. setalder(6); 6 e. setalder(0); 6 0 i-0 : h. PrioritetsKøer: Et godt - metodologisk - råd!!! I. IMPLEMENETER DATA INVARIANT /** DI: sequence av Par (Key,Object) * sortert mht. Comparator cp * Comparator cp sammenlikner Par mht. Key-verdi */ class PQSeq implements PrQueue { protected Comparator cp; protected Sequence sq=new SeqDL(); public PQSeq(Comparator c) { cp= c; private boolean DI() { // sjekk om sq er sortert boolean b= true; Position c= sq.first(), s= sq.last(); while (c!= s && b ) { if ( cp.gt( (Par)(c.elem()), (Par)(sq.after(c).elem()) ) ) b= false; else c= sq.after(c); return b; public Object min() throws DIException { if (! DI()) throw DIException( DI feil: Ikke sortert ); else return ((Par)sq.first().elem()).elem() II. FOR Å OPPDATERE ET OBJEKT I EN SAMLING : El o = (El) PK.removeMin();. fjern fra Samlingen o.setalder(6);. oppdater PK.insert(o, o.key()); 3. sett inn i Samlingen Dette kan virke noe kostbart (spesielt når vi oppdaterer attributter som ikke påvirker nøkkel-verdier) men :. Hvilke attributter påvirker nøkkel kan variere og være uklart. Kostnaden øker vanligvis ikke algoritmers kompleksistet 3. Resulterende kode er betydelig sikrere i-0 : h. PrioritetsKøer:

Insertion /Selection Sort 3 u: s: 3 u: 3 s: 3 3 3 u: u: 3 s: s: 3 3 3 u: u: 3 s: s: 3 3 3 u: u: s: s: 3 3 n O( P k.insert e ) + O( P k.remmin( )) k = k = n 3 n u: 3 n + n -------------- 3 O(n ) Ω(n ) 3 n + n -------------- s: 3 n 3 O(n ) Ω(n) i-0 : h. PrioritetsKøer: 3 V. Heap DS er et Binært Tre T (for lagring av nøkler, eller objekter med nøkler) som tilfredstiller DATA INVARIANT: Heap-Ordering ( relasjonell ). for enhver node v (unntatt roten): key(v) key(parent(v)) Komplett Binært Tre ( strukturell ). T med høyde h:.a) alle nivåene i=0,,,h- har maks. no. noder = i.b) på nivå h- alle interne noder er til venstre for alle eksterne 0 6 6 7 7 h-= 3 h= 0 Heap med har høyde: n (interne) noder h = log(n+) 6 + ++ h- + = h- n n + ++ h- + h- = h h-= 3 7 h log(n) + & log(n+) h h= sist i-0 : h. PrioritetsKøer:

Implementasjon av PrQueue Heap public class HPK implements PrQueue { private BinTree Heap private Position sist private Comparator cp 6 7 <, >, =, public HPK(Comparator c) { rcp = c ; private boolean DI() { traverser Heap og sjekk at enhver node v har key(v) key(parent(v)) Komplett BinTree er vanskeligere public Object min() { return ((Par) Heap.root().elem()). elem() ; public Object minkey() { return ((Par) Heap.root().elem()). key() ; public Object remmin() { public void insert(object k, Object e) { i-0 : h. PrioritetsKøer: A. Insert i Heap sist 0 7 7 Bevar KOMPLETT BINÆRT TRE INVARIANT:. Finn innsettingsnode til høyre for siste utvid bladet til en intern node og sett inn det nye elementet gitt sist:o() el. O(log n) sist 0 7 7 Gjenopprett HEAP-ORDERING INVARIANT :. Flytt det nye elementet oppover inntil dets far har mindre nøkkel h= log(n+) = O(log n) 0 7 7 i-0 : h. PrioritetsKøer: 6

A.. Finn innsettingsnode. Gitt siste, finn innsettingsnode u avhengig av implementasjon av BinTree Sequence (array): siste = n; u = siste + O() BinTree interface (Linket Struktur) Avhengig av hvem siste er har vi tre tilfeller: a) T.isEmpty() : u = T.root() u b) ytterste noden i nivå h- 0 7 c) en mellomnode i nivå h- u 0 7 7 u = siste while ( u!= root() && u!= leftchild(parent(u)) ) u = parent(u) if ( u!= root) u = rightchild(parent(u)) while (! isexternal(u) ) u = leftchild(u) return u O(log n) i-0 : h. PrioritetsKøer: 7 A.. Oppover bobling u = siste A. while ( u!= root() && u!= leftchild(parent(u)) ) u = parent(u) if ( u!= root) u = rightchild(parent(u)) while (! isexternal(u) ) u = leftchild(u) return u O(log n) expandexternal(u) ; u.setelem(ny) ; 0 7 7 while ( u!= root() && cp.lt( u.elem(), parent(u).elem() ) ) A. swap(u, parent(u)) u = parent(u); O(log n) i-0 : h. PrioritetsKøer:

B. Fjerning min() fra Heap. hold root-objektet (til return) ((Par)root().elem()).elem() 7 0 7. Bevar KOMPLETT BINTREE INVARIANT : plasser sist.elem() i rot-posisjon og fjern sist-posisjon sett inn et nytt blad (BinTree: removeaboveext(leftchild(sist)) ) 7 7 0 O() 3. Gjenopprett HEAP-ORDERING INVARIANT: flytt det nye rot-elementet nedover til en passende posisjon ( nedover bobling ) u = root(); done = false; while (! done ) if ( isexternal(leftchild(u)) && isexternal(rightchild(u)) ) done = true else { if ( isexternal(rightchild(u)) ) n = leftchild(u) else if (cp.lt( leftchild(u).elem(), rightchild(u).elem() )) n = leftchild(u) else n = rightchild(u); if ( cp.gt( u.elem(), n.elem() )) swap(u,n); u = n 7 else done= true 7 0 O(log n) i-0 : h. PrioritetsKøer: PrioritetsKø Sortering 3 3 3 3 3 3 3 3 3 3 n O( P k.insert e ) + O( P k.remmin( )) k = k = n Selection Sort: O(n ) 3 n u: 3 n + n -------------- 3 Insertion Sort: O(n ) n + n 3 -------------- s: 3 n 3 Heap Sort: O(n log(n)) 3 n log(n) h:........ n log(n) 3 i-0 : h. PrioritetsKøer: 0