PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Like dokumenter
PG4200 Algoritmer og datastrukturer Forelesning 7

Liste som abstrakt konsept/datatype

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

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

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

PG4200 Algoritmer og datastrukturer Forelesning 4 Beholdere

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Stack. En enkel, lineær datastruktur

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

Læringsmål for forelesningen

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

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

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 Løsningsforslag

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

Grunnleggende Datastrukturer

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

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

Norges Informasjonsteknologiske Høgskole

Algoritmer og datastrukturer Eksamen

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

INF1010, 23. februar Parametriserte klasser Om å gå gjennom egne beholdere (subklasser og grensesnitt 3)

INF1010. Stein Michael Storleer (michael) Lenkelister

Algoritmer og datastrukturer E Løkker i Java

PG4200 Algoritmer og datastrukturer Forelesning 10

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

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

IN1010 våren januar. Objektorientering i Java

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

Oppgave 1. Sekvenser (20%)

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

UNIVERSITETET I OSLO

Inf 1020 Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

MED TIDESTIMATER Løsningsforslag

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

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

TOD063 Datastrukturer og algoritmer

Algoritmer og datastrukturer Eksamen

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

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

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

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

Dagens tema INF1010 INF1010 INF1010 INF1010

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

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

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

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

INF Notater. Veronika Heimsbakk 10. juni 2012

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

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.1

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

UNIVERSITETET I OSLO

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 Løsningsforslag

Algoritmer og Datastrukturer

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

Løsningsforslag EKSAMEN

Programmeringsspråket C Del 3

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

EKSAMEN. Emne: Algoritmer og datastrukturer

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Løsningsforslag Test 2

Kap 9 Tre Sist oppdatert 15.03

Programmeringsspråket C Del 3

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

INF1010 våren januar. Objektorientering i Java

Studieaktiviteter i INF1010

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar I dag skal vi undersøke en rekke velkjente databeholdere i Java:

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

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

INF Seminaroppgaver til uke 3

Transkript:

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister Lars Sydnes, NITH 5. februar 2014

I. Implementasjoner

Tabell-implementasjon av Stakk Tabellen er den lettest tilgjengelige datastrukturen Oppslag i tabell har kjøretid av orden O(1). La oss bruke en en variabel int top til å holde orden på hvor det øverste elementet i stakken ligger. posisjon: 0 1 2 3 k-1 k adresse: A B C D (TOPP) null null top = 4

Tabell-implementasjon av Stakk Representasjon av data public class ArrayStack{ private int top; private T[] stack; public ArrayStack(int initialcapaticy) { top = 0; stack = (T[])(new Object[initialCapacity]); } /*...*/ }

Tabell-implementasjon av Stakk push public void push(t theelement) { if(!(top < stack.length)) { expandcapacity(); } stack[top] = element; top++; } private void expandcapacity() { stakk = Arrays.copy(stakk,stakk.length*2); }

Tabell-implementasjon av Stakk pop og peek public T pop() { T result = peek(); top--; stack[top] = null; // HVORFOR!!! return result; } public T peek() { if (top == 0) return null; return stack[top-1]; }

Tabell-implementasjoner Tabeller har fast kapasitet: Integer[] tall = new Integer[100]; Hvis vi skal lage mer fleksible datastruktrer, må vi kunne utvide kapasiteten: tall = Arrays.copyOf(tall,200); Dette innebærer alltid kopiering av alle elementene i tabellen. Fast kapasitet = Grunnleggende problem med tabeller. Indeksering = Grunnleggende fordel med tabeller.

Lenkede strukturer Figur 1: Java-kode public class LinearNode<T> { public T innhold; public LinearNode<T> adresse; } Figur 2: Utdrag av minnet Peker til T Peker LinearNode<T> Figur 3: Grafisk fremstilling T 1 T 2

Lenkede lister: Innsetting TOP T 4 T 3 T 2 T 1 T 5 (Setter inn ny node T 5 ) TOP T 4 T 3 T 2 T 1 TOP T 5 T 4 T 3 T 2 T 1 Dette gir stakk-operasjonen push

Lenkede lister: Ta ut elementer TOP T 5 T 4 T 3 T 2 T 1 T 5 (Fjerner node T 5 ) TOP T 4 T 3 T 2 T 1 TOP T 4 T 3 T 2 T 1 Dette gir stakk-operasjonen pop

Lenkede Lister: Generell innsetting: TOP T 4 T 3 T 2 T 1 T NY (Setter inn ny node T NY ) TOP T 4 T 3 T 2 T 1 TOP T 4 T NY T 3 T 2 T 1

Lenkede lister: Ta ut generelle elementer TOP T 5 T 4 T 3 T 2 T 1 T 4 (Fjerner node T 4 ) TOP T 5 T 3 T 2 T 1 TOP T 5 T 3 T 2 T 1

Lenkede Lister vs. Tabeller Lenkede Lister: Det er vanskelig å finne fram til elementer: Vi må spørre om veien. Enkelt å sette inn og ta ut elementer. Størrelsen passer seg selv. Tabeller: Det er enkelt å finne fram til en konkret adresse. De har en oversiktlig representasjon i datamaskinens minne. Vi må holde øye med kapasiteten.

II. Sirkulære tabeller: Array-implementasjon av kø.

Naiv implementasjon class ArrayQueue<E> { E[] queue; int count; /*...*/ } Det første objektet i køen har indeks 0. Det bakerste opbjektet i køen har indeks count-1. Innsetting (offer) går greit: Plassér nytt objekt i indeks count og inkrementer count Å ta ut objekter (poll) er mer tungvint: Hent ut objektet i indeks 0 og kopiér alle de andre objektene ett steg til venstre.

Sirkulær tabell class CircularQueue<E> { E[] queue; int front,rear; /*...*/ } Det første objektet i køen har indeks front. Det bakerste opbjektet i køen har indekx rear-1. Innsetting (offer): Plassér nytt objekt i indeks rear og inkrementer rear Å ta ut objekter (poll): Hent ut objektet i indeks front og inkrementer front.

Demonstrasjon A B C D null null null front = 0, rear = 4 null null C D E null null front = 2, rear = 5 null null C D E F null front = 2, rear = 6

Demonstrasjon: Twist in the tail null null null null E F G front = 4, rear = 0 Er det fullt her nå? H I null null E F G front = 4, rear = 2 Nei, vi kan utnytte den ledige plassen ved begynnelsen av tabellen!

Sirkulær tabell noen spørsmål Det kan være praktisk å bruke hjelpevariabler som int count,capacity; Disse hjelpevariablene er strengt tatt unødvendige. Hva skjer med front,rear når de overstiger listens kapasitet? Rest-operatoren % kan være nyttig: Når n, m > 0 er n%m lik resten i divisjonen n/m, dette er et tall 0 men < m.

Liste-implementasjoner Forenklet liste-grensesnitt: interface List<E> implements Iterable<E> { boolean set(e e,int i); E get(int i) E remove(int i); int size(); } Iterator<E> iterator(); // SENERE Lage lenket liste Lage tabell-liste.

III. Iteratorer

Iterable<E> For beholdere som implementerer Iterable<E>-grensesnittet kan vi skrive for-each-løkker: for(string str: beholder) System.out.println(str); Iterable-grensesnittet: package java.lang; import java.util.iterator; public interface Iterable<T> { Iterator<T> iterator(); }

Iterator<E> Iterator-grensesnittet: package java.util; public interface Iterator<E> { boolean hasnext(); E next(); } void remove(); Obs: Remove er ofte ikke implementert.

Iterator<E> Vi kan se på for(string str: beholder) dosomething(str); Som en praktisk forkortelse for Iterator<String> itr = beholder.iterator(); while (itr.hasnext()) dosomething(itr.next()

Implementasjon av iterator Iteratorobjektet må hele tiden holde orden på hvor i listen vi befinner oss. Lenket liste: Hvilken node er vi i for øyeblikket? Tabell-liste: Hvilken indeks er aktuell?

IV. Bruk av lineære strukturer

Bruk av lister Som en ren beholder. Lagre objekter Hentet ut uspesifiserte objekter Som en ordnet liste: Vi vil holde ting i en bestemt rekkefølge. Som en indeksert liste: Vi vil assosiere objekter med en indeks.

Ikke-bruk av lister Lister egner seg ikke for vanlig lagring og søk: arraylist.contains(target); Her står vi i fare for å sammenligne target med alle objektene i beholderen. HashSet o.l egner seg utmerket for denne operasjonen. Jfr. Lab 1. Mer om HashSet i en senere forelesning.