Datastrukturer och algoritmer



Relevanta dokument
Datastrukturer och algoritmer

Datastrukturer och algoritmer

Innehåll. Inblandade personer. ÿkurspresentation Inblandade personer Administration Målsättning Förkunskaper Kursutvärdering Upplägg Översikt

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Föreläsning 6: Introduktion av listor

Föreläsning 10. ADT:er och datastrukturer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 7. Träd och binära sökträd

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer och algoritmer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Dugga Datastrukturer (DAT036)

Programmering för språkteknologer II, HT2014. Rum

Datastrukturer och algoritmer

Datastrukturer. föreläsning 3. Stacks 1

Objektorienterad programmering D2

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen TEN1 HI

Datastrukturer och algoritmer (Python) Algoritmer och listor

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

Tommy Färnqvist, IDA, Linköpings universitet

Sätt att skriva ut binärträd

Föreläsning 1 & 2 INTRODUKTION

Datastrukturer och algoritmer

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

OOP Objekt-orienterad programmering

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Tentamen Datastrukturer D DAT 036/DIT960

Tentamen Datastrukturer (DAT036)

Programmering A. Johan Eliasson

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Introduktionsmöte Innehåll

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

1DV433 HT13. I vilken utsträckning har kursens innehåll och uppläggning gett förutsättningar för att du ska ha uppnått respektive lärandemål?

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Föreläsning 3.1: Datastrukturer, en översikt

Objektorienterad programmering i Java

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Introduktion till arv

Tentamen Datastrukturer (DAT036)

Tentamen, EDA501 Programmering M L TM W K V

Föreläsning 13 och 14: Binära träd

Länkade strukturer. (del 2)

Tentamen Datastrukturer (DAT036)

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

Tentamen, EDAA20/EDA501 Programmering

Tentamen OOP

Tentamen Datastrukturer (DAT037)

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Evaluation Summary - CD5570 DoA, distans VT 2004 Dan Levin

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

Objektorienterad programmering, analys och design med Java, 5p 2D4135, vt Kursprogram

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 4 Innehåll

13. Vad tycker du om samarbete och enskilt arbete på kurserna när det gäller laborationer?

Kortfattad sammanfattning av studenternas synpunkter och förslag

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Programmering = modellering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning Datastrukturer (DAT036)

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Exempeltenta GruDat 2002/2003

TDDC74 Programmering, abstraktion och modellering. Tentamen

Programutveckling med Java 7.5 p, ht 2007 (D0019N) STUDIEHANDLEDNING - ALLMÄN INFORMATION

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer (DAT036)

Tentamen i Objektorienterad programmering

Föreläsning 14 Innehåll

Datastrukturer och algoritmer

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

1. Hur många timmar per vecka har du i genomsnitt lagt ner på kursen (inklusive schemalagd tid)?

Övningar Dag 2 En första klass

Classes och Interfaces, Objects och References, Initialization

Tentamen i Algoritmer & Datastrukturer i Java

OOP Objekt-orienterad programmering

Transkript:

Innehåll Datastrukturer och algoritmer Föreläsning 1 Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2007 2 Kurspresentation Inblandade personer, Målsättning, Förkunskaper, Kursutvärdering, Upplägg, Översikt Föreläsning 1 Viktiga begrepp Listor o Specifikation, Konstruktion o Algoritmmönster Riktade listor, länkade celler o Specifikation, Konstruktion o Dynamiska resurser Att läsa: Kapitel 1-4 Inblandade personer Mina målsättningar 3 Föreläsare Lena Kallin Westin (kursansvarig) Lars Larsson Handledare Tommy Löfstedt Gruppövningar Lena, Lars och Tommy Lars Larsson 4 Rolig och viktig kurs Bli en bättre programmerare och inse att man blivit det Känna till kända lösningar på typiska problem Konstruera robusta och korrekta program Konstruera och beskriva algoritmer och datatyper Planera sitt arbete så att projekt blir klar i tid Förstå komplexitetsbegreppet Tid och rum Bli bättre på att kommunicera resultat skriftligt Era målsättningar? Vad krävs för att nå dit? Ge kursen en ärlig chans Kom i tid till föreläsningarna Läs boken, förstå vad som står där Gör övningar Börja med laborationerna i tid Utnyttja handledningen Säg till om det är något som inte funkar 5 6

Förkunskaper Kursutvärdering från ifjol 7 Kunna implementera en godtycklig algoritmbeskrivning i JAVA/C 8 Annan föreläsare ifjol! Från sammanställningen: Lite mindre än hälften tyckte att kurslitteraturen var bra. Majoriteten tyckte att de obligatoriska uppgifterna, undervisningen och handledningen var bra. Kursens svårighetsgrad var lagom till svårt Man fick ut jättemycket till en del nytt i form av ny kunskap. Majoriteten deltog i schemalagda aktiviteter alltid till mer än hälften av tillfällena. Man jobbade kontinuerligt med kursmaterialet nästan alltid till nästan aldrig. Arbetsinsatsen som krävdes på kursen uppskattades som mycket högre till lika stor som tidigare kurser. Intryck från samtliga svar Så... 9 Antingen tyckte man kursboken var bra eller också avskydde man den. OU var bra och man lärde sig mycket Specifikationerna svåra att tolka OU var jobbiga, speciellt den sista Handledning (4 handledare ifjol) Skiftande kommentarer, många ville ha mer handledning, speciellt i slutet av kursen Föreläsningar Vissa klagomål på oh-bildernas utseende Gruppövningar Fungerade bra 10 Vi har bytt layout på slides och websidor. Samtliga obligatoriska uppgifter är omarbetade. En ny uppgift införd (eg. delat upp jobbet med Router-labben lite) Gruppövningarna är omgjorda Gruppövning 1 och 2 som ifjol, resten har nya uppgifter inblandade. o Många uppgifter från programmeringstävlingar Arbetssättet behåller vi (SI-liknande) Här sitter vi mera lokaler 11 Exp. Studievägl. Lena MIT-huset våning 4 Lådor för OU-inlämning Support 12 Naturvetarhuset våning 3 Lars och Tommy NA310/NA320 är reserverad för kursen alla förmiddagar 8-12 (Alltid tillgängliga via kort)

Kursmaterial Kursmaterial 16 Kurslitteratur Janlert L-E., Wiberg T., Datatyper och algoritmer, 2:a uppl., Studentlitteratur, 2000, ISBN9144-01364-7 Referenslitteratur: Mark Allen Weiss, "Datastructures and Algorithm Analysis in Java", 2 ed, Pearson, Addison Wesley ISBN 0-321-37319-7 Mark Allen Weiss, "Datastructures and Algorithm Analysis in C Addison Wesley Longman ISBN 0-321-18995-7 Föreläsningsunderlag (finns på websidan) 17 Ev. ytterligare material som delas ut under kursen Hemsidan: http://www.cs.umu.se/kurser/tdba36/vt07/ Mycket information skickas via mail. Läs dina cs-mail minst en gång om dagen! Gör forward: https://support.cs.umu.se/userinfo/info/index.html Kursens upplägg Obligatoriska uppgifter 18 Föreläsningar (16 st) Teoripresentation och lite praktiska inslag Gruppövningar (5 st) 3 grupper, SI-stil Individuell handledning Examination 4 obligatoriska uppgifter = 2p o Två utförs parvis och två ska redovisas enskilt Skriftlig tentamen, 6 timmar = 3p o OBS! Tentamen 1 går 16-22 den 31/5 19 Ordinarie sista redovisningsdag står på varje uppgifts webbsida. Uppgiften bedöms med G, K, O eller U Komplettering inom 5 dagar från första tillfälle för uthämtning av uppgiften Om man inte är klar med alla 4 OU måste man komplettera vid ett uppsamlingstillfälle (augusti). Måste göra om alla uppgifter Kan vara nya uppgifter/nya handledare Obligatoriska uppgifter OU1 20 En uppgift som är 5 minuter sen är för sen! Ansökan om uppskov pga exvis sjukdom ska ske minst en dag före sista inlämningsdag. Kursansvarig bedömer uppskoven. Notera att det ingår i examinationen att ni ska lära er att hinna blir klar med uppgifterna i tid. o Jag hinner inte kommer inte att godtas som enda skäl till uppskov. Resultat anslås på kursens hemsida. 21 Implementera tabeller Individuell, Inlämnas 3/4 klockan 12.00 Syftet: Du ska börja få en förståelse varför man använder sig av abstrakta datatyper, analysera för- och nackdelar med olika implementationer av den abstrakta datatypen tabell, öva dig i att hantera referenser och dynamiska strukturer, öva dig i skriftlig presentation.

OU2 OU3 22 Läsa och förstå vad OU4 går ut på samt skapa ett testfall för OU4 Parvis, Inlämnas 17/4 klockan 12.00 Syftet: Ni ska läsa in er på det avslutande programmeringsprojektet på kursen skaffa er en förståelse för vad en router är och hur programmet som ni ska skriva senare borde fungera skapa testfall som tillsammans med alla andra studenters testfall bildar en bank med uppgifter som gör det enklare att klara av det avslutade programmeringsprojektet. 23 Analysera algoritmer Experimentellt (individuell) Asymptotiskt (gruppövning men individuell redovisning) Inlämnas 20/4 klockan 12.00 Syfte: Du ska få prova på att testa och utvärdera implementationer av okända algoritmer. öva er på att analytiskt utvärdera algoritmer. OU4 Registrering till tentamen 24 Implementera en router Parvis, samma par som OU2 Dokumentation inlämnas 16/5 klockan 12.00 Implementationen inlämnas 25/5 klockan 12.00 Syfte: Ni ska få goda kunskaper inom vanligt använda datatyper och algoritmer. praktiskt få prova på att tillämpa tidigare tillgodosedda kunskaper i en verklig och aktuell miljö. praktisera arbete i mindre grupper utföra ett arbete under tidspress och lära er planera ert arbete och prioritera bland olika lösningar för att få en färdig produkt som uppfyller kundens (handledarnas) krav. öva er att redovisa ett större arbete skriftligt. 25 Man måste anmäla sig för att få skriva tentamen i datavetenskap Man går till sidan https://www.cs.umu.se/information/tenta/ och fyller i sin användare och lösenord. Sen letar man reda på rätt kurs (kurskod TDBA36) och registrerar sig. Man måste anmäla sig senast 10 dagar innan tentan ges, på denna kurs absolut senast onsdag 16 maj. Gruppövningar Tentan 26 Öningar från boken tillsammans med en eller flera programmeringstävlingsuppgifter Vissa utvalda räknar vi på gruppövningarna Kursen indelad i tre grupper Sitter i smågrupper och hjälper varandra fram till förståelse. 27 Tidigare år: Tvådelad tentamen (Måste vara godkänd på båda delarna). o En begreppsdel Förklara kortfattat ett antal begrepp o En förståelsedel Frågor där man får visa att man förstått kursen hur saker och ting hänger ihop I år????

Kursens mål: Kursens mål FSR: 28 Kursdeltagarna ska förvärva förtrogenhet med grundläggande element och konstruktioner/tekniker för att organisera data och lösa problem. Detta inbegriper formell och informell beskrivning av grundläggande abstrakta datatyper, grundläggande algoritmer och effektivitetsanalys paradigmer/tekniker för algoritmkonstruktion. 29 Efter avslutad kurs ska studenten kunna: känna till grundläggande begrepp relaterade till datastrukturer och algoritmer känna till grundläggande abstrakta datatyper såsom lista, stack, kö, träd, mängd, graf och tabell välja datatyper för ett givet problem välja implementation av datatyper känna till grundläggande algoritmer, deras komplexitet och karakteristiska egenskaper för typiska problem analysera algoritmer praktiskt och teoretiskt med avseende på prestanda använda sig av grundläggande problemlösningsstrategier, som till exempel divide and conquer, brute force, greedy, dynamisk programmering, på nya problem tillämpa den objektorienteringsparadigmen på ett större programmeringsprojekt strukturerat dokumentera algoritmer och datatyper 30 Websajten http://www.cs.umu.se/kurser/tdba36/vt07/ Schema Uppdateringar Resultatredovisning Gruppövningar Föreläsningar o Introduktion, OH-bilder, läsanvisningar Gamla tentor Obligatoriska uppgifter Mailarkiv för kursen Anmälan till tenta 31 Innehållsöversikt Algoritmer Tids- och rumsfrågor Designprinciper Abstrakta datatyper Sökning Sortering Innehållsöversikt Algoritmer Innehållsöversikt Algoritmer 32 Tids och rumsfrågor Exekvering, implementering, underhåll Tid vs rumskomplexitet Analys av exekveringstider o Olika sätt, vad de står för och +/- Experimentell Asymptotisk o T(n) för en alg => O(n) Primitiva operationer Okulärbesiktning o Att beskriva algoritmer 33 Designprinciper Idéer till 4 olika algoritmtyper o Brute force, D&C, Greedy och dynamisk programmering o Exempel på varje o +/- o Typiska användningar

34 Innehållsöversikt Abstrakta Datatyper (ADT) Stack, Kö, Listor, Träd, Graf, Prioritetskö, Heap, Tabell, Sträng, Mängd, Sökträd, Tries, mm Beskrivningssätt Organisation, Modell, Gränsytan (formell, informell) Grundbegrepp Vad är en organisation, sorterad ADT, mm Primär vs. sekundär struktur Absolut vs. relativ komplexitet Sätt att implementera +/-, när var hur Komplexitet för de viktigaste operationerna Vart hittar vi ADT typiskt Hur olika ADT hänger ihop med varandra Algoritmer på ADT 35 Innehållsöversikt Sökning (traversering) Vad är traversering Olika metoder för sökning i sekvenser Linjär & Binär +/- Ställer de några krav på implementationen av ADTn? Innehållsöversikt Sortering Att bygga program bygga hus/broar 36 Varför sorterar vi? Sorterad ADT vs sortering av data Sökningen blir snabbare ibland Hur kan vi sortera (olika former) +/- När passar dom? Stabil sortering 5-6 olika algoritmer, analys 37 Husbygge Specifikation/Beskrivning Material Verktyg Utvärdering/uppföljning Programmering Problembeskrivning Systemdesign Modelleringsverktyg o Datatyper representera datat i programmet o Algoritmer stegvis plan för att utföra något, modellera hur man löser problemet o Kontrollstrukturer för att modellera flödet Utvärdering/uppföljning o Komplexitetsanalys o Valideringskriterier Metaforer för programbyggnad Datavärldsbilder 38 Instruktionsmetaforen Programmeraren är en arbetsledare Ger instruktioner till datorn Datorn följer dessa i tur och ordning till punkt och pricka. Problemlösningsmetaforen Vad ska göras och hur ska det göras? Programmeraren löser problemet (skriver en algoritm) som sedan implementeras. Adaptionsmetaforen Programmet är ett objekt som ingår och interagerar med en miljö. Programmet anpassas till miljön gradvis Låg nivå nära datorn Hög nivå 39 Manipulativa ansatsen Hantverksmetafor, man har ett (passivt) objekt som bearbetas steg för steg tills man nått målet. Imperativa språk som C, Pascal, Modula, Ada Funktionella ansatsen Matematisk funktionsmetafor, man ändrar aldrig ett objekt. Resultatobjekten är avbildningar av startobjekten. Funktionella/relationella språk som ML, Lisp, Prolog Objektorienterade ansatsen Objekten har själv egenskaper och beteenden och interagerar med andra objekt. Händelsestyrd programmering. Objektorienterade språk som Java, C++

Kursens (och bokens) strategi: Gränssnitt 40 Beskriva datastrukturer och ansatser så neutralt och språkoberoende som möjligt. Kunskaperna mer generella och allmänt tillämpbara. Flesta studenterna har Java som bakgrund, några har C som bakgrund. Läser du DV, ID, eller TDV eller har läst TDBA63, TDBA62 ska du implementera koden i Java. Annat studieprogram, eller läst TDBA66, TDBA39 så får du lösa uppgiften i C även om vi rekommenderar att den görs i Java. Oftast pseudokod på föreläsningarna 41 Vad är ett gränssnitt? Kontaktyta Gränsen mellan två eller flera delar Överenskommelse - oberoende av vem, vart, hur ska det passa o Musköten 1700-talet o Lego Uppmuntrar till flexibilitet o Skruvmejslar med olika spetsar Gränssnitt Gränssnitt i datavetenskapen 42 Separerar Funktion och implementation Användning och skapande Specifikation och konstruktion 43 Mellan centralenheter och periferienheter Mellan människan och maskinen Mellan mjukvarukomponenter Funktioner/metoder Datatyper Datakommunikation Distribuerade system Begrepp En datatyp kan vara 44 Data objekten som bär information genom att representera något Datatyp = operationer + objekt Vilka objekt är det? o Vad vill vi modellera/representera/abstrahera? Vad kan man göra med dem? o Vilka operationer/metoder? Objekten finns i en värdemängd/objektmängd Struktur det som finns kvar när man bortser från elementvärden 45 Enkel (heltal) Sammansatt (Lista av heltal) Homogen vs. Heterogen Fysisk Implementerad i språket/hårdvaran int, string Abstrakt När man inte är intresserad av om/hur den är implementerad i språk/hårdvara En fysisk datatyp är abstrakt

En datatyp kan vara Beskrivning av en datatyp i boken 46 Konstruerad när man beskrivit hur man skulle representera objekten och operationer Implementerad komplett konstruerad från grunden och redo att användas i ett program en fysisk datatyp är implementerad Konkret Fysiska, implementerade och konstruerade datatyper 47 Modell - vardaglig, det man modellerar Kö Organisation Den grundläggande naturen på objekten, linjärt ordnade, före och efter relation etc. Informell beskrivning Gränsytan (nödvändig och minimal, kraftfull) Informell beskrivning av operationernas funktion Signaturdiagram Ofta den mest omfattande beskrivningen Beskrivning av en datatyp forts. Lista 48 Formell beskrivning rent matematisk-logisk Konstruktioner och implementationer Komplexitetsanalys Exemplen i boken i huvudsak Java eller ML Tillämpningar och algoritmer 49 Modell Pärm o Bläddra, inspektera, lägga till, ta bort Organisation Diskret linjärt ordnad o Ändligt antal linjärt ordnade element o Första / sista element o Före / efter relation av element (inte värden) o Alla element (utom det sista) har en efterföljare o Alla element (utom det första) har en föregångare Lista - Organisation Lista Organisation: Begrepp 50 Dynamisk datatyp Struktur och storlek förändras under datatypens livslängd Generisk datatyp (polytyp) Lista av typ o Typ kan vara av vilken typ som helst Homogen datatyp Alla element har samma typ 51 Element Beståndsdel i en sammansatt datatyp Består av värde och position o positionen är läget i strukturen hos den sammansatta datatypen Struktur Bortser från elementvärden Ändras när element läggs till eller tas bort Listan (1, 2) och ((1,2,3), (4,5,6)) har samma struktur

Lista Organisation: Begrepp Lista Specifikation: Gränsyta 52 Position Plats i strukturen Positionsbeskrivningar förändras när element sätts in eller tas bort Positionen är elementets förhållande till objektet i övrigt Hur man anger positioner avgörs vid konstruktionen av datatypen. Strukturförändrande operationer behöver returnera nytt positionsvärde 53 abstract datatype List(val) auxiliary pos Empty() List(val) Insert(v:val,p:pos,l:List(val)) (List(val),pos) Isempty (l:list(val)) Bool Inspect (p:pos,l:list(val)) val First (l:list(val)) pos End (l:list(val)) pos Next(p:pos,l:List(val)) pos Previous(p:pos,l:List(val)) pos Remove((p:pos,l:List(val)) (List(val),pos) 54 Lista Specifikation: Informell funktionsspecifikation Empty() skapar ett nytt tomt listobjekt (konstruktor). En tom lista har en position som är First(l) = End(l) Insert (v,p,l) sätter in ett element med värdet v omedelbart före position p, returnerar positionen för v Isempty(l) true om listan är tom, dvs First(l) = End(l) Inspect(p,l) returnerar värdet för elementet på position p. Operationen är inte definierad för listans sista pos First,End returnerar listans första resp. sista position. OBS! End pekar på positionen efter sista elementet Next(p,l) Previous(p,l) returnerar närmast efterföljande (föregående). Ej definierad för listans sista (första) position Remove(p,l) tar bort element i positionen p, returnerar nya positionen för det element som följde omedelbart efter 55 Bild från sidan 47 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000 Varför är specifikationen viktig? Implementation av gränsyta till Lista 56 Nu kan vi skapa algoritmer för listor utan att behöva bry oss om hur listan verkligen implementeras. Ex, Söka efter elementet med värdet v i listan list: If not isempty(list) Then p:= first(list) While Not (Next(p,list) = End(list) Or v = inspect(p, list)) Do p:= next(p, list) End End 57 public interface List{ public boolean isempty(); public Pos insert(object v, Pos p); public Object inspect(pos p); public Pos first(); public Pos end(); public Pos next(pos p); public Pos previous(pos p); public Pos remove(pos p); }

Implementation av gränsyta till Pos Implementation av gränsytan i C 58 public interface Pos { public boolean eq(pos p); } /* Funktionsprototyper */ list_t *list_empty(); pos_t *list_insert(void *v, pos_t *pos, list_t *list); int list_isempty(list_t *list); void *list_inspect(pos_t *pos, list_t *list); int list_isend(pos_t *pos, list_t *list); pos_t *list_first(list_t *list); pos_t *list_next(pos_t *pos, list_t *list); pos_t *list_remove(pos_t *pos, list_t *list); Algoritmmönster Algoritmmönster 60 Traversering Besöker systematiskt alla element Sökning Söker det första elementet som uppfyller ett bestämt villkor Filtrering Filtrerar ut alla element som uppfyller ett bestämt villkor 61 Reduktion Beräknar en funktion av objektets elementvärden o Ex. Summera alla tal i en lista Mappning Transformera varje elementvärde i en datastruktur o Ex. multiplicera alla talen i en lista med 4 Lista Konstruktion: Statiskt Lista som Fält + Snabb inspektion av element - Fast reserverat utrymme - Kostsamt sätta in och ta bort element Bild från sidan 51 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000 63 Lista Konstruktion: Dynamiskt Länkade strukturer + Insättning / borttagning går snabbt + Minnesutrymmet är proportionellt mot storleken + Allokera minne när det behövs - Länkarna behöver också minnesutrymme - Kommer bara åt listelement genom att traversera från listans början Huvudlös eller med huvud Cirkulär eller linjär

Länkad Lista Dubbellänkad lista 64 Länkar mellan elementen Elementen är en cell som består av länkar och värde Dubbel eller enkellänkad 65 Före insättning Dubbellänkad lista Skapa ny nod för insättning nodebefore nodeafter newnode newnode skapas nodeafter = noden som ska vara efter den nya noden nodebefore = nodeafter:s bakåt länk newnode:s framåt länk = nodeafter newnode:s bakåt länk = nodebefore nodebefore:s framåt länk = newnode nodeafter:s bakåt länk = newnode 67 Dubbellänkad lista Efter insättning och före borttagning Dubbellänkad lista Dubbellänkad lista 68 Ta bort ett element nodebefore nodetoremove nodebefore = nodetoremove:s bakåt länk nodeafter = nodetoremove:s framåt länk nodebefore:s framåt länk = nodeafter nodeafter:s bakåt länk = nodebefore nodeafter 69 Efter borttagning

Riktad Lista Riktad Lista Specialisering 70 Modell Slalombana Man kan ta sig till starten Man passerar portarna i en riktning Man kan åka om en del av banan Organisation Specialisering av Lista Har endast en riktning från början av listan och framåt. Rekursiv definition: En riktad lista är tom eller har ett första element som följs av en riktad lista 71 Man tar bort operationer ur gränsytan, utan att mängden objekt som kan konstrueras förändras. Två objekt som är lika, ska vara lika också i specialiseringen. Riktad Lista Specialisering Gränsyta till Riktad Lista 72 Previous och end behövs ej Isend lagts till Java: Kan ej ta bort en del av gränsytan Exceptions för previous och end Riktad Lista som helt ny klass - Ingen återvinning av kod... abstract datatype DList(val) auxiliary pos Empty() DList(val) Insert(v:val,p:pos,l:DList(val)) (DList(val),pos) Isempty (l:dlist(val)) Bool Inspect (p:pos,l:dlist(val)) val First (l:dlist(val)) pos Isend (p:pos,l:dlist(val)) Bool Next(p:pos,l:DList(val)) pos Remove((p:pos,l:DList(val)) (DList(val),pos) 73 Riktad Lista konstruktion Riktad Lista som Enkellänkad Lista Konstruerad som Fält Dubbellänkad Lista Enkellänkad Lista Enkellänkad Lista Mer ekonomisk Problem vid insättning Lösning: Representera position mha en länk till föregångarelementet o Fysisk och logisk referens Listhuvud o Tomma objekt o Gränspositioner 74 75

Enkellänkad Lista n-länkad Cell 76 Konstruktion utan huvud Stopplänkvärde (nil, null) Insättning före elementet X o Skapa en ny cell o Sätt in den efter X o Kopiera X:s värde till den nya cellen o Sätt X:s värde till v 77 Tippel som består av ett värde n st länkar Byggmaterial för andra datatyper n-länkad struktur Objekt konstruerade med n-länkade celler o Listor, träd 78 1-Cell private class Cell { private Object data; //data portion private Cell next; //link to next node private Cell(Object dataportion) { data = dataportion; next = null; } //end constructor private Cell(Object dataportion, Cell NextCell) { data = dataportion; next = NextCell; } //end constructor } //end Cell 79 Cell används för positioner private class Cell implements Pos { } // se förra sidan för konstruktorer public boolean eq(pos p) { if (((Cell)p).next == this.next) return true; else return false; } Länk Gränsyta till Länk 80 Referens, pekare En fysisk datatyp i många språk Objekt som refererar till annat objekt Konstrueras oftast som index i fält (kursor) Billigare kopiera länkar till objekt än objekten själva Java: Inget objekt utan länk 81 Abstract datatype Link (obj) Make(x : obj) Link (obj) Nil( ) Link (obj) Isnil(l : Link (obj)) Bool Follow(l : Link (obj)) obj Equal(l1,l2 : Link (obj)) Bool

Dynamiska resurser 82 Skapar dataobjekt för tillfälliga behov Kill lösgör resurser Create reserverar resurser Vålnader döda celler som går igen uppkommer om man dödar celler som det fortfarande finns länkar till. använd Kill med försiktighet! Sophämtning administrativ procedur identifierar och återvinner objekt som inte utnyttjas (JAVA)