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

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

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

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

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

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

Algoritmer og Datastrukturer

Liste som abstrakt konsept/datatype

Stack. En enkel, lineær datastruktur

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

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

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

INF Algoritmer og datastrukturer

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

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

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

Oppgave 1. Sekvenser (20%)

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Definisjon: Et sortert tre

Definisjon av binært søketre

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Datastrukturer for rask søking

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

INF1020 Algoritmer og datastrukturer. Dagens plan

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

Scheduling og prosesshåndtering

... Dagens plan. Prioritetskø ADT

Binære trær: Noen algoritmer og anvendelser

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

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

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

INF Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 7

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

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

Grunnleggende Datastrukturer

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

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

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

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

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

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

Velkommen til INF1010

Inf 1020 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Lenkelister. Lister og køer.

Et eksempel: Åtterspillet

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

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

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

Et eksempel: Åtterspillet

Dagens tema INF1010 INF1010 INF1010 INF1010

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

København 20 Stockholm

Selv-balanserende søketrær

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:

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

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

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

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

Kap 9 Tre Sist oppdatert 15.03

UNIVERSITETET I OSLO

Studieaktiviteter i INF1010

Notater til INF2220 Eksamen

Dagens forelesning. INF1010 Datastrukturer Lister og køer Pekerkjedelister Øvelser. Innhold i dette lysarksettet

PG4200 Algoritmer og datastrukturer Forelesning 10

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

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

Vi skal se på grafalgoritmer for:

Pensum: fra boken (H-03)+ forelesninger

Hvor raskt klarer vi å sortere?

INF1010 siste begreper før oblig 2

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Programmeringsspråket C Del 3

Pensum: fra boken (H-03)+ forelesninger

Versjon (vil bli endret).

EKSAMEN med løsningsforslag

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

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

Obligatorisk oppgave 1 INF1020 h2005

Operativsystemer og grensesnitt

INF Algoritmer og datastrukturer

Innhold. Innledning 1

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

EKSAMEN. Emne: Algoritmer og datastrukturer

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

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

UNIVERSITETET I OSLO

Transkript:

Køer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid det første Sammenlikning: Kø med kunder som venter på betjening Elementet som har ventet lengst er det som behandles først: FIFO First In, First Out

Innsetting og fjerning av data: enqueue og dequeue

Operasjonene på en kø enqueue: legge til et element bakerst i køen dequeue: ta ut første element i køen first: se på første element i køen isempty: sjekk om køen er tom size: antall elementer som er lagret i køen

Grensesnitt for en kø-adt i Java * public interface Queue<T> { // Legge nytt element bakerst i køen public void enqueue(t element); // Fjerne første element fra køen; public T dequeue(); // Se på første element i køen; public T first(); // Avgjøre om køen er tom public boolean isempty(); } // Antall elementer i køen public int size(); *: Som i læreboka

Anvendelser av kø Kryptering/dekryptering (avsnitt 5.3 i læreboka) Simulering av systemer med en eller flere køer av objekter som må vente på betjening (første obligatoriske oppgave) I operativsystemer, der brukere eller prosesser må vente i kø for å få tilgang til en delt ressurs (RAM, CPU, printer, disk, nettverksport...) Algoritmer som krever at data legges systematisk i kø for å kunne behandles i riktig rekkefølge (f.eks. radixsortering og bredde-først traversering av trær og grafer)

Kø implementert med array Mulig løsning: La fronten av køen alltid ligge på indeks 0 Hold rede på lengden av køen med en indeksvariabel rear Sett inn nye elementer på indeks rear og øk denne med 1 for hver innsetting enqueue blir O(1) Problem: Hver gang vi tar ut et element, må hele resten av køen flyttes et hakk fremover i arrayen Dequeue blir O(n) for en kø med n elementer Ønsker en løsning der både enqueue og dequeue er O(1)

Kø implementert med sirkulær array Lagrer elementene i køen i en array Holder rede på indeksene til starten (front) og slutten (rear) på køen Lagrer antall elementer i count 6 7 0 1 Innsetting og fjerning blir O(1) fordi: 5 2 Vi lar køen sirkulere (med wraparound) i arrayen 4 3 Slipper da å flytte alle elementer et hakk frem eller tilbake ved innsetting/fjerning Gjøres enkelt med modulusaritmetikk

mod (%) operatoren i Java Beregner resten ved heltallsdivisjon: 1%5 = 1, 2%5 = 2, 5%5 = 0, 8%5 = 3 Kan brukes til å beregne indeksene front og rear i en kø implementert som sirkulært array Enqueue (rear er første ledige indeks): rear = (rear + 1) % queue.length; Dequeue (front er indeks til start av køen): front = (front + 1) % queue.length;

Eksempel: Kø med sirkulær array count = 1 front = 0 rear = 01 //Java Code Queue q = new Queue(); q.enqueue(6); 6 0 1 2 3 4 5 Setter inn på indeks rear = 0: rear = (rear + 1) % q.length rear = (0 + 1) % 6 = 1

Eksempel: Kø med sirkulær array forts. count = 5 front = 0 rear = 12345 6 4 7 3 8 0 1 2 3 4 5 //Java Code Queue q = new Queue(); q.enqueue(6); q.enqueue(4); q.enqueue(7); q.enqueue(3); q.enqueue(8);

Eksempel: Kø med sirkulær array forts. count = 4 front = 12 0 rear = 5430 6 4 7 3 8 9 0 1 2 3 4 5 front = (0 + 1) % 6 = 1 front = (1 + 1) % 6 = 2 rear = (5 + 1) % 6 = 0 //Java Code Queue q = new Queue(); q.enqueue(6); q.enqueue(4); q.enqueue(7); q.enqueue(3); q.enqueue(8); q.dequeue();//front = 1 q.dequeue();//front = 2 q.enqueue(9);//rear = 0

Eksempel: Kø med sirkulær array forts. count = 5 front = 2 rear = 41 5 4 7 3 8 9 0 1 2 3 4 5 rear = (0 + 1) % 6 = 1 //Java Code Queue q = new Queue(); q.enqueue(6); q.enqueue(4); q.enqueue(7); q.enqueue(3); q.enqueue(8); q.dequeue();//front = 1 q.dequeue();//front = 2 q.enqueue(9);//rear = 0 q.enqueue(5); Lærebokas implementasjon: CircularArrayQueue.java

Kø implementert som lenket liste Køen har: Referanser til noden først (front) og sist (rear) i køen En teller (count)som inneholder antall elementer i kø Hver node i køen har: Referanse/peker til noden som står på neste plass i køen Referanse/peker til et objekt som inneholder dataene Alle operasjoner på køen blir O(1) Se avsnitt 5.6 i læreboka Lærebokas Java-kode: LinkedQueue.java

Kø implementert som lenket liste

Etter enqueue(e): Etter dequeue():

Simulering Bruker et system til å etterlige oppførselen til et annet system Nyttig hvis det f.eks. er for dyrt, farlig eller tidkrevende å eksperimentere med det virkelige systemet Bruksområder: Design og dimensjonering Predikere fremtidig oppførsel Forklare historiske data og fysiske fenomen Fysiske, matematiske eller datamaskinbaserte simuleringer

Simulering med datamaskiner Programutførelsen etterligner systemets oppførsel Datastrukturer beskriver systemets objekter Handlinger beskrives med operasjoner på dataene Reglene i systemet beskrives med algoritmer Stor fleksibilitet i forhold til fysiske modeller: Lett å endre modell (kode) og omgivelser (input) Raskt å teste et stort antall ganger Lett å legge inn statistisk usikkerhet (tilfeldige tall)

Et eksempel på tidsdrevet køsimulering: Postkontoret * Simulerer aktiviteten på et postkontor i løpet av et bestemt antall tidsenheter (f.eks. minutter) Det er et fast antall betjente kasser/skranker Alle kunder som ankommer stiller seg i én kø Betjening av første kunde i køen starter med en gang en kasse er ledig Vil observere ventetider, kølengde og effektivitet *: Eksemplet har mye til felles med oblig. 1: Flyplassen

Parametre i simuleringsmodellen Antall tidssteg som simuleringen skal gå Antall kasser som er åpne på postkontoret Lengste betjeningstid: Trekker tilfeldige tider mellom 1 og en gitt maks.tid Hvor ofte kundene ankommer: Maksimalt én kundeankomst per tidsenhet (forenkling) Sannsynligheten P K for at en kunde kommer er gitt Trekker tilfeldig i hvert tidssteg om det kommer eller ikke kommer en kunde og stiller seg i kø

Algoritme for postkontoret 1 Sett alle kasser til å være ledige 2 Sett køen av kunder til å være tom 3 For hvert tidssteg: 3.1 Trekk et tilfeldig (uniformt fordelt) tall r mellom 0 og 1 3.2 Hvis r < P k, sett ny kunde i kø 3.3 For hver kasse som er ledig: 3.3.1 Ta første kunde ut av køen 3.3.2 Beregn og lagre tidspunkt for når kassen vil bli ledig igjen 3.4 Lagre statusinformasjon for tidssteget 4 Beregn og skriv ut resultater fra simulering

Implementasjon Egen klasse for kunder, som tar vare på ankomsttiden Egen klasse for kassene, som lagrer tidspunktet når kassen blir ledig Bruker metoder fra java.util.random til å trekke tider og kundeankomster Lagrer og skriver ut informasjon om gjennomsnittlige ventetider for kundene og gjennomsnittlig antall kasser som stod tomme Se Javakoden

Prioritetskøer I vanlige FIFO-køer, setter vi inn elementer i den ene enden av køen, og tar ut elementer fra den andre enden. Av og til ønsker vi å prioritere elementene som ligger i køen. Noen må behandles med en gang, mens andre kan vente litt. En sykehuskø der pasientene blir prioritert etter hvor syke de er, er et eksempel på en prioritetskø.

Eksempel: Timesharing En datamaskin har oftest mange aktive programmer/ prosesser som skal kjøres samtidig En tradisjonell CPU utfører bare én operasjon om gangen Får til samtidighet med timesharing: Prosessene står i en kø og venter på eksekvering Første prosess tas ut av køen, kjører en liten stund (en timeslice, typisk 10-100ms), og legges så tilbake i køen igjen Med rask CPU og korte timeslices ser det ut som om alle jobbene kjører samtidig Men: Korte jobber kan ta urimelig lang tid på grunn av mye venting hvis det er mange aktive prosesser

Timesharing med en prioritetskø Operativsystemer inneholder en scheduler som hele tiden velger ut neste prosess som skal få kjøre i CPU Scheduleren bruker ofte en prioritetskø med prosesser: Prosesser med høy prioritet får mest CPU-tid Scheduler kan f.eks. senke prioriteten til jobber som allerede har kjørt lenge, slik at nye og korte jobber velges oftere og dermed utføres raskere

Operasjoner på prioritetskø Vi må (minst) kunne utføre følgende to operasjoner på en prioritetskø: settinn(x, p) Setter inn nytt element x med gitt prioritet p fjernmin() Fjerner elementet med laveste verdi (eller høyeste prioritet) fra prioritetskøen.

Mulige implementasjoner av prioritetskø settinn fjernmin Lenket liste Setter inn først i liste. Må gå gjennom hele listen for å finne min. O(1) O(n) Sortert lenket liste Må sette inn på riktig plass i liste. Tar ut første element. O(n) O(1) Binært søketre Kapittel 11 i læreboka O(log n) O(log n) Binær heap Kapittel 12 i læreboka O(log n) O(log n)