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

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

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 : h98 8. PrioritetsKøer: 1. Samling. n-te/vilkårlig. FiLi. PosSamling. Sequence

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

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

Sortering med Comparable og Comparator

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

ADTer: Stabel, Kø og 2-sidig Kø. ADT Kø (eng: queue) ... En tabell-basert kø. Abstrakt Data Type Kø

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

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

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

EKSAMEN. Emne: Algoritmer og datastrukturer

Algoritmer - definisjon

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

UNIVERSITETET I OSLO

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

Om Kurset og Analyse av Algoritmer

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Samlinger, Lister, Sekvenser

INF1010. Stein Michael Storleer (michael) Lenkelister

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

Kapittel 9: Sortering og søking Kort versjon

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

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

STABLER OG REKURSJON. Abstrakte Data Typer (ADT) Stabler. ADT Stabel

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

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

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

UNIVERSITETET I OSLO

GJØVIK INGENIØRHØGSKOLE

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Læringsmål for forelesningen

Algoritmer og Datastrukturer IAI 21899

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

INF Notater. Veronika Heimsbakk 10. juni 2012

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

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF Seminaroppgaver til uke 3

INF1010 Tråder II 6. april 2016

Liste som abstrakt konsept/datatype

Kapittel 8: Sortering og søking

Algoritmer - definisjon

IN1010 våren Repetisjon av tråder. 15. mai 2018

Løsningsforslag EKSAMEN

Kapittel 9: Sortering og søking Kort versjon

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

Kapittel 9: Sortering og søking Kort versjon

Algoritmer og datastrukturer Eksamen

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Kap.8 Sortering og søking sist oppdatert 16.03

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

Object [] element. array. int [] tall

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

ADT og OO programmering

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

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

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

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

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

Kapittel 9: Sortering og søking Kort versjon

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

TDT4105 Informasjonsteknologi, grunnkurs

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Norges Informasjonsteknologiske Høgskole

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Kapittel 8: Sortering og søking INF100

Kapittel 8: Sortering og søking INF100

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

Forelesning 30: Kompleksitetsteori

TDT4100 Objektorientert programmering

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Norges Informasjonsteknologiske Høgskole

Stack. En enkel, lineær datastruktur

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

Del 3: Evaluere uttrykk

Grunnleggende Datastrukturer

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

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

Løsningsforslag Test 2

Hvor raskt klarer vi å sortere?

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

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

7) Radix-sortering sekvensielt kode og effekten av cache

Algoritmer og Datastrukturer

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Transkript:

PRIORITETSKØ Applikasjon: aksjehandel ADT (eng: Priority Queue - PQ) Implementering av PQ med sekvenser Sortering vha PQ Mer om sortering Aksjehandel Vi ser på en aksje som kjøpes og selges på børsen. Investorer gir ordre som består av tre deler (aksjon, pris, antall), hvor aksjon er kjøp eller salg, pris er laveste prisen han/hun er villig til å betale/motta, og antall er antall aksjer involvert. Ekvilibrium eksisterer om alle kjøp-ordre har lavere pris enn alle salgs-ordre. Spekulanter kan be om å få vite høyeste kjøpspris og laveste salgspris. Et salg forekommer om en ny ordre kan imøtekommes av en eller flere eksisterende ordre, noe som fører til fjerning av endel ordre. En ordre kan når som helst kanselleres. 5.1 5.2 Datastruktur for aksjehandel For hver aksje har vi to datastrukturer, en for kjøpsordre, og en for salgsordre. Operasjoner som kan utføres: Aksjon Salg Datastruktur Disse datastrukturene heter prioritetskøer. Kjøp Datastruktur ny ordre insert(price, size) insert(price, size) Finn lav/høy min max salg removemin removemax kanseller remove(order) remove(order) På NASDAQ utføres daglig ca 1 milliard salg. Nøkler og Totalorden-relasjonen En (eng: Priority Queue - PQ) rangerer elementer vha en nøkkel som har en totalorden relasjon. Nøkler: - Hvert element har en nøkkel - Flere element kan ha samme nøkkel Totalorden-Relasjon - Angitt ved - Total: for ethvert par k 1,k 2 så har vi enten k 1 k 2 eller k 2 k 1 - Refleksiv: k k - Antisymmetrisk: om k 1 k 2 og k 2 k 1, så har vi k 1 = k 2 - Transitiv: om k 1 k 2 og k 2 k 3, så har vi k 1 k 3 En kan utføre følgende operasjoner på nøkkel-element par (k,e): - min - insertitem(k, e) - removemin 5.3 5.4

Sortering vha PQ En P kan brukes til å sortere en sekvens S som følger: Fase 1: sett inn elementene fra S i P vha en rekke insertitem(e, e) operasjoner Fase 2: fjern elementene fra P i stigende rekkefølge og sett dem tilbake i S vha en rekke removemin operasjoner Algorithm PriorityQueueSort(S, P): Input: A sequence S storing n elements, on which a total order relation is defined, and a Priority Queue P that compares keys with the same relation Output: The Sequence S sorted by the total order relation while!s.isempty do e S.removeFirst P.insertItem(e, e) while P is not empty do e P.removeMin S.insertLast(e) ADT Proritetskø En PQ P har følgende operasjoner: - size: Returner antall elementer i P - isempty: Test om P er tom - insertitem(k,e): Sett inn nytt element e med nøkkel k i P - minelement: Returner (uten å fjerne) et element i P som har den minste nøkkel; feilmelding om P tom. - minkey: Returner minste nøkkel i P; feilmelding om P er tom - removemin: Returner og fjern et element i P som har den minste nøkkel; feilmelding om P tom. 5.5 5.6 Comparator En generisk PQ bruker comparator objekter. Et comparator objekt sammenlikner to nøkler, men er ekstern til disse. Når en PQ skal sammenlikne nøkler, brukes comparator objektet. Dermed kan en generisk PQ lagre, og sammenlikne, hvilke objekter som helst. ADT comparator har operasjoner: - islessthan(a, b) - islessthanorequalto(a,b) - isequalto(a, b) - isgreaterthan(a,b) - isgreaterthanorequalto(a,b) - iscomparable u Elementene i S består av en nøkkel k, og et element e. For PQ-operasjon insertitem bruker vi Sekvensoperasjon insertlast. Dette tar tid. 5 8 4 1 6 Merk at elementene blir lagret usortert. 5.7 5.8

u Siden elementene er lagret usortert må PQoperasjonene minelement, minkey, og removemin i verste-fall undersøke alle elementene i S. Verste-fall tidskompleksitet for disse operasjonene blir derfor, om vi har n elementer. Sortert sekvens S La oss bruke en sekvens S, og lagre elementene i stigende nøkkelrekkefølge. minelement, minkey, og removemin tar tid 1 4 5 6 8 5 8 4 1 6 PQ-operasjon insertitem må nå i verste-fall, gå gjennom alle elementer i P. Dermed blir insertitem en operasjon. insertitem 1 4 5 6 8 8 minkey, minelement removemin insertitem minkey, minelement removemin 5.9 5.10 public class SequenceSimplePriorityQueue implements SimplePriorityQueue { //Implementation of a priority queue using a sorted sequence protected Sequence seq = new NodeSequence; protected Comparator comp; // auxiliary methods protected Object key (Position pos) { return ((Item)pos.element).key; // note casting here protected Object element (Position pos) { return ((Item)pos.element).element; // casting here too // methods of the SimplePriorityQueue ADT public SequenceSimplePriorityQueue (Comparator c) { comp = c; public int size {return seq.size; Continued on next page public void insertitem (Object k, Object e) throws InvalidKeyException { if (!comp.iscomparable(k)) { throw new InvalidKeyException("The key is not valid"); if (seq.isempty) { //if the sequence is empty, this is the seq.insertfirst(new Item(k,e));//first item //check if it fits right at the end if (comp.isgreaterthan(k,key(seq.last))) { seq.insertafter(seq.last,new Item(k,e)); //we have to find the right place for k. Position curr = seq.first; while (comp.isgreaterthan(k,key(curr))) { curr = seq.after(curr); seq.insertbefore(curr,new Item(k,e)); Continued 5.11 5.12

public Object minelement throws EmptyContainerException { if (seq.isempty) { throw new EmptyContainerException("The priority queue is empty"); return element(seq.first); public boolean isempty { return seq.isempty; SeleksjonsSortering Seleksjonssortering får vi fra PQ-Sortering når PQ er implementert som usortert sekvens. Fase 1: å sette et enkelt element inn i P tar tid. Med n elementer totalt tar fase 1 dermed tid. Fase 2, å fjerne et element fra P tar tid proporsjonalt med antall gjenværende elementer i P. Sekvens S P Input (7, 4, 8, 2, 5, 3, 9) Fase 1: Fase 2: (c) (d) (e) (f) (4, 8, 2, 5, 3, 9) (8, 2, 5, 3, 9) (2) (2, 3) (2, 3, 4) (2, 3, 4, 5) (2, 3, 4, 5, 7) (2, 3, 4, 5, 7, 8) (7) (7, 4) (7, 4, 8, 2, 5, 3,,9) (7, 4, 8, 5, 3, 9) (7, 4, 8, 5, 9) (7, 8, 5, 9) (7, 8, 9) (8, 9) (9) 5.13 5.14 Seleksjonssortering Vi får en flaskehals i fase 2. Den første removemin-operasjon tar tid, den andre O(n 1), etc. inntil den siste som tar tid. Total tid for fase 2 blir: n O( n + ( n 1) + + 2 + 1) O i i = 1 Dette kjenner vi fra før: n i = i = 1 n( n + 1) ------------------- 2 Tidksompleksitet for fase 2 blir dermed O(n 2 ). Tidskompleskistet for hele sorteringen blir dermed også O(n 2 ). InsettingsSortering (eng: insertion sort) Seleksjonssortering får vi fra PQ-Sortering når PQ er implementert som sortert sekvens. Sekvens S P Input (7, 4, 8, 2, 5, 3, 9) Fase 1: Fase 2: (c) (d) (e) (f) (4, 8, 2, 5, 3, 9) (8, 2, 5, 3, 9) (2, 5, 3, 9) (5, 3, 9) (3, 9) (9) (2) (2, 3) (7) (4, 7) (4, 7, 8) (2, 4, 7, 8) (2, 4, 5, 7, 8) (2, 3, 4, 5, 7, 8) (3, 4, 5, 7, 8, 9) (4, 5, 7, 8, 9) 5.15 5.16

Insettingssortering Fase 2 forbedres til. Fase 1 blir den nye flaskehalsen. Den første insertitem tar tid, den andre tar O(2) osv, inntil den siste som tar tid, i verste-fall. Samme analyse som isted gir totaltid O(n 2 ). Seleksjonssortering og insettingssortering er dermed begge O(n 2 ) sorteringsalgoritmer. Seleksjonssortering vil alltid utføre et antall operasjoner proporsjonalt med n 2, uavhengig av input, dvs beste-fall er også O(n 2 ). Kjøretiden for innsettingssortering avhenger av input-sekvensen, i beste-fall er den. Ingen av disse er noen god sorteringsalgoritme, om det er mange elementer som skal sorteres. Vi skal snart få se en bedre implementasjon av PQ, som vil gi PQ-sorteringsalgoritme med tidksompleksitet O(nlogn). Litt mer om Sortering Sortering er vesentlig fordi ethvert søk i database krever at dataene er lagret sortert. Det antaes at 20% av all maskintid over hele verden brukes til sortering. De enkleste sorteringsalgoritmene er ikke de raskeste. Vi har nettopp sett to O(n 2 ) sorteringsalgoritmer, som er ubrukelige for store verdier av n. Sammenlikning av nøkler: brukes hele nøkkelen, eller kun deler av nøkkelen, til sammenlikning? Minnebruk: in-place sortering innebærer at vi ikke bruker datastruktur utenom den som alt lagrer dataene ved input. Stabilitet: en stabil sorteringsalgoritme opprettholder input-rekkefølgen til elementer som har samme nøkkel 5.17 5.18