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

Like dokumenter
Samlinger, Lister, Sekvenser

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

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Liste som abstrakt konsept/datatype

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

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

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.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

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

Grunnleggende Datastrukturer

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

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

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

Inf 1020 Algoritmer og datastrukturer

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

INF1010. Stein Michael Storleer (michael) Lenkelister

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

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Stack. En enkel, lineær datastruktur

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

PG4200 Algoritmer og datastrukturer Forelesning 7

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

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

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

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

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

Oppgave 1. Sekvenser (20%)

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Inf1010 oppgavesamling

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

Inf1010 oppgavesamling

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

Dagens tema INF1010 INF1010 INF1010 INF1010

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

UNIVERSITETET I OSLO

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

ADT og OO programmering

Stabler, Køer og Lister. ADT er

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

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

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

Object [] element. array. int [] tall

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

Pensum: fra boken (H-03)+ forelesninger

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

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

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

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

Læringsmål for forelesningen

Pensum: fra boken (H-03)+ forelesninger

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

Løsningsforslag for eksamensoppgave, våren 2004

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

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

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

TDT4100 Objektorientert programmering

Studieaktiviteter i INF1010

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

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

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

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

Kapittel 9: Sortering og søking Kort versjon

Velkommen til INF1010

Lenkelister. Lister og køer.

UNIVERSITETET I OSLO

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

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

INF2810: Funksjonell Programmering. Muterbare data

Slope-Intercept Formula

IN Algoritmer og datastrukturer

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

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

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

INF1010. Om pensum INF1010 INF1010 INF1010 INF1010. Det vesentlige er å forstå og kunne lage programmer ved hjelp av eksemplene i bøkene.

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Forelesning ISA: IJVM Kap 4.2

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

Algoritmer og Datastrukturer

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Kunne beskrive bruken av referansepekere og videre kunne. Kunne sammenligne lenkede datastrukturer med tabellbaserte

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

Versjon (vil bli endret).

Transkript:

ADTer: Stabel, Kø og 2-sidig Kø Data strukturer, dvs konkrete implementasjoner: Tabell, lenket liste, 2-veis lenket liste. Tidligere har vi sett: Stabel implementert vha tabell. Idag: ADT stabel implementert ved å adaptere ADT 2-sidig kø. Kø implementert vha tabell og vha lenket liste, samt ved å adaptere ADT 2-sidig kø. 2-sidig kø implementert vha 2-veis lenket liste. ADT Kø (eng: queue) En kø følger first-in-first-out (FIFO) prinsippet. Elementer kan innsettes når som helst, men kun elementet som har befunnet seg lengst i køen kan taes ut. Elementene settes inn bakerst (eng:rear) (enqueue) og fjernes fra fronten (dequeue) front... bak a 0 a 1 a 2 a n-1 2.1 2.2 To metoder: Abstrakt Data Type Kø - enqueue(o): Insert object o at the rear of the queue - dequeue(): Remove the object from the front of the queue and return it; an error occurs if the queue is empty En tabell-basert kø Implementer en kø vha array som brukes sirkulært Max.størrelse N, f.eks. N= 1,000. Køen består av en N-element array Q og to integer variable: - f, index til front element - r, index til element rett etter det bakerste normal konfigurasjon Følgende støtte-metoder kan også defineres: - : Return the number of objects in the queue Q... 0 1 2 f sirkulær konfigurasjon r - : Return a boolean value that indicates whether the queue is empty Q 0 1 2 r f... - front(): Return, but do not remove, the front object in the queue; an error occurs if the queue is empty Hva innebærer f=r? 2.3 2.4

Pseudokode Algorithm : return (N - f + r) mod N Tabell-basert kø Kø implementert vha lenket liste noder kjedet sammen i en lineær ordning Algorithm : return (f = r) Algorithm front(): if then throw a QueueEmptyException return Q[f] Arna Seattle Toronto Algorithm dequeue(): if then throw a QueueEmptyException temp Q[f] Q[f] null f (f + 1) mod N return temp på listen er foran i køen, og n på listen er bakerst i køen hvorfor ikke motsatt? Algorithm enqueue(o): if size = N - 1 then throw a QueueFullException Q[r] o r (r +1) mod N 2.5 2.6 Fjerne element i Hode Sette inn i Halen lag ny node Arna Seattle Toronto Arna Seattle Toronto Zurich flytt peker fram legg noden inn i kjeden og flytt peker Arna Seattle Toronto Arna Seattle Toronto Zurich hva med å fjerne element i n? 2.7 2.8

To-sidige køer En to-sidig kø, (en: double-ended queue = deque), tillater innsetting og fjerning både foran og bak. Deque Abstrakt Data Type - insertfirst(e): Insert e at the deginning of deque. - insertlast(e): Insert e at end of deque - removefirst(): Removes and returns first element - removelast(): Removes and returns last element Implementering av stabler og køer vha Deques Stabler med Deques: Stack Method top() push(e) pop() Køer med Deques: Deque Implementation last() insertlast(e) removelast() Støtte-metoder kan være: - first() - last() - - Queue Method front() enqueue() dequeue() Deque Implementation first() insertlast(e) removefirst() 2.9 2.10 Adaptor Pattern Det å bruke en deque til å implementere kø eller stabel er eksempel på adaptor pattern. Adaptor pattern innebærer implementasjon av en ADT vha av en annen ADT. 2 mulige applikasjoner: - Spesialisere en generell ADT ved å endre noen metoder. Eks: implementere stabel ved deque. - Spesialisere typen objekter som en ADT bruker. Eks: Definer IntegerArrayStack som adapterer ArrayStack til å lagre kun integers. Implementering av 2-sidige køer vha 2-veis lenkede lister Fjerning fra n av 1-veis lenket liste kan ikke gjøres i tid, dvs konstant tid. For implementering av deque, bruker vi 2-veis lenket liste (eng: doubly linked list) med ekstra noder kallt og. Noder har next og prev lenker. Følgende metoder (NB: Ikke en ADT, men en data struktur): - setelement(object e) - setnext(object newnext) - setprev(object newprev) - getelement() - getnext() - getprev() Alle deque metoder har nå kjøretid. 2.11 2.12

Implementering av 2-sidige køer vha 2-veis lenkede lister Hva gjør og nodene? - Header noden går foran første element i listen, og har en null prev lenke. - Trailer noden kommer etter siste element i listen, og har en null next lenke. Header og nodene er dummy noder som ikke lagrer elementer Diagram: Implementering av 2-sidige køer vha 2-veis lenkede lister Visualisering av removelast(). secondtolast secondtolast last last San Francisco San Francisco 2.13 2.14 ADT Vektorer ADT Posisjoner ADT Lister SEKVENSER Generell ADT Idag: Vektor implementert vha tabell og vha 2-veis lenket liste ADT Vektor ADT Vektor er en samling av n elementer S, ordnet lineært vha rang(rank), med følgende metoder: - elematrank(r): Return the element of S with rank r; an error occurs if r < 0 or r > n -1 - replaceatrank(r,e): Replace the element at rank r with e and return the old element; an error condition occurs if r < 0 or r > n - 1 - insertatrank(r,e): Insert a new element into S which will have rank r; an error occurs if r < 0 or r > n - removeatrank(r): Remove from S the element at rank r; an error occurs if r < 0 or r > n - 1 2.15 2.16

Tabell-basert implementasjon Tabell-basert implementasjon Pseudokode: Algorithm insertatrank(r,e): for i = n - 1, n - 2,..., r do S[i+1] s[i] S[r] e n n + 1 S 0 1 2 r n 1 Kjøretid (tidskompleksitet) for metodene: Metode Tid size isempty elematrank replaceatrank insertatrank O(n) removeatrank O(n) Algorithm removeatrank(r): e S[r] for i = r, r + 1,..., n - 2 do S[i] S[i + 1] n n - 1 return S 0 1 2 r n 1 2.17 2.18 Implementasjon vha 2-veis lenket liste listen etter innsetting: listen før innsetting: Paris Paris lag ny node for innsetting: Paris public void insertatrank (int rank, Object element) throws BoundaryViolationException { if (rank < 0 rank > ) throw new BoundaryViolationException( invalid rank ); DLNode next = nodeatrank(rank); // the new node //will be right before this DLNode prev = next.getprev(); // the new node //will be right after this DLNode node = new DLNode(element, prev, next); // new node knows about its next & prev. Now // we tell next & prev about the new node. next.setprev(node); prev.setnext(node); size++; 2.19 2.20

Implementering vha 2-veis lenket liste listen før fjerning av element: fjern en node: etter fjerning: Paris Paris fjerning av node Java-Implementasjon public Object removeatrank (int rank) throws BoundaryViolationException { if (rank < 0 rank > 1) throw new BoundaryViolationException( Invalid rank. ); DLNode node = nodeatrank(rank); // node to // be removed DLNode next = node.getnext(); // node before it DLNode prev = node.getprev(); // node after it prev.setnext(next); next.setprev(prev); size--; return node.getelement(); // returns the // element of the deleted node 2.21 2.22 Java-Implementasjon finne node med gitt rank private DLNode nodeatrank (int rank) { // auxiliary method to find the node of the // element with the given rank. We make // auxiliary methods private or protected. DLNode node; if (rank <= /2) { //scan forward from head node =.getnext(); for (int i=0; i < rank; i++) node = node.getnext(); else { // scan backward from the tail node =.getprev(); for (int i=0; i < -rank-1 ; i++) node = node.getprev(); return node; Noder Lenkede lister kan effektivt utføre node-baserte operasjoner: - removeatnode(node v) og insertafternode(node v, Object e), tar begge tid. MEN, node-baserte operasjoner kan ikke overføres til tabell-baserte implementasjoner, da tabeller ikke har noder! Node er en implementasjonsdetalj. Dilemma: - Hvis vi ikke definerer nodebaserte operasjoner, så gjør vi ikke full nytte av lenkede lister. - Hvis vi definerer dem, så bryter vi med grunnideen om ADT, dvs at ADT skal defineres uavhengig av bestemt implementasjon. 2.23 2.24

Fra Noder til Posisjoner ADT Posisjon (eng: position), som intuitivt er en celle, dvs et sted et element kan befinne seg. Posisjoner har kun en metode: element(): Return the element at this position. En posisjon defineres relativt til andre posisjoner (foran/bak relasjon) Posisjoner er ikke knyttet til et element eller en rank ADT LISTE ADT Liste er en ADT med posisjon-baserte metoder Sekvens ADT Kombinerer ADTer Vektor og List (multippel arv av grensesnitt) Nye metoder bygger bro mellom rank og posisjon: - atrank(r) returns a position - rankof(p) returns an integer rank En tabell-basert implementasjon må bruke objekter for å representere posisjoner: Rome generiske metoder, query metoder isfirst(p), islast(p) 0 1 2 3 accessor metoder first(), last(), before(p), after(p) update metoder swapelements(p,q), replaceelement(p,e), insertfirst(e), insertlast(e), insertbefore(p,e), insertafter(p,e). remove(p) S implementert vha 2-veis lenket liste vil hver av disse metodene ta tid. 0 1 2 3 2.25 2.26 Sammenlikning av sekvensimplementasjoner Operasjoner Array List size, isempty atrank, rankof, elematrank O(n) first, last before, after replaceelement, swapelements replaceatrank O(n) insertatrank, removeatrank O(n) O(n) insertfirst, insertlast insertafter, insertbefore O(n) remove O(n) Iterator Er en abstraksjon av det å gå gjennom alle elementene i en gitt samling elementer. Iterator enkapsulerer begrepene sted og neste. Utvider ADT Posisjon Generiske og spesialiserte iteratorer. ObjectIterator - hasnext() - nextobject() - object() PositionIterator - nextposition() Nyttige metoder som returnerer iteratorer: - elements() - positions() 2.27 2.28