Datastrukturer och algoritmer

Slides:



Advertisements
Liknande presentationer
Beskriver vad eleven ska försöka uppnå
Advertisements

Gymnasiearbetet p..
Andragradsfunktioner & Andragradsekvationer
Från Fanta till Fleece Lokal pedagogisk planering Biologi åk 5
”Språk, lärande och identitetsutveckling är nära förknippade
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
hej och välkomna EKVATIONER Ta reda på det okända talet.
Pedagogisk dokumentation i det systematiska kvalitetsarbetet
Ersättning för extra djuromsorg för suggor -villkor och riktlinjer
PROJEKTARBETE Nationell kursplan 100 gymnasiepoäng
Programmeringsteknik I: F1 1 Föreläsning 1: Intro till kursen och programmering  Kursens hemsida  Studentportalen.
Acando föreläsning Uppsala caseakademi
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Björn Thuresson CSC HPCViz/VIC Datorspelsdesign DH2650.
Studenter Lär Av Studenter ”SLAS”
P-uppgiften: regler, planering och specifikation
- Vikten av att kunna sälja in sin idé
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Välkommna! till kursen HI1024 Programmering, grundkurs 8,0 hp
Introduktion Logikprogrammering HT-02 Staffan Larsson.
Coach.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 1.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 1.
Projektarbete 100p Ekebygymnasiet
Swedex Muntligt test B1 40 poäng.
Studenter Lär Av Studenter ”SLAS” Karim Daho Januari 2007.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Matematiklyftet Märta-Stina Gahlin Lundberg
Introduktion till matematik studierna på LTH
Lärandemålklinik – vanliga och ovanliga frågor om lärandemål (=LM) Kvalitetsenheten och Lärcentret samarbetar inom projekt Alcuin, som har som.
Presentation 5 p (kräver närvaro hela lektionen) Fundera under presentationen på hur de olika bakgrunderna fungerar ! SRH.
Frågor om elevinflytande till elever i åk 3 – 9 i grundskolan
Välkomna hit! Film – på vilket sätt är bedömning en (liten) del av all vår verksamhet? Kursplanens uppbyggnad. Skillnad strävansmål / uppnåendemål? Kunskapssynen.
Känna till och ha provat metoder och verktyg för processledning
Handledarutbildning Delkurs 4 Barn- och fritidsprogrammet BF
Läroplansträff Välkomna!.
PROJEKTARBETE 2010 – 2011.
FORUM 3: PPT material Instruktioner De efterföljande PPT bilderna kommer att guida gruppen igenom Forum 3 med presentationer och övningar steg för steg.
Portfolion / Dokumentationen bidrar till utveckling
Föreläsning 11 J-uppgiften. Nästa period ägnas åt J-uppgiften. Den är individuell, dvs man jobbar på egen hand med uppgiften (inte tillsammans med labbkompisen).
Högskoleverkets kvalitetskonferens i Umeå 2007
Projektarbete (PA1201) 100 poäng.
Antagning förstahandssökanden 53 antagna efter 2:a antagningen – Tekniskt basår Efterantagning under augusti 76 inskrivna –2 avhopp.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
ITP – IT för Personligt Arbete VT 2006 Lisa Brouwers
Ingenjörsmetodik IT & ME 2008
Välkommna! till kursen HI1024 Programmering, grundkurs 8,0 hp
Presentation of I. Name: Disputerat nu vår Forskningsintresset är:
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16.
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
Introduktion. Administration Jag, B448, , Kursböcker enligt webben Schema enligt webbenwebben Laborationer 23, 29/10 + 7/11 kl
Kursintroduktion 2 Programmeringsteknik, 4p vt-00 Lärare/handledare Föreläsningar Thomas Johansson ank Marie Nordström
Caroline Hansson, Pilbäckskolan
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
FÖ8a-VT07 TFYY98/TFKI13 - A.Henry/D.Lawrence 1 Ingenjörsprojekt för Teknisk Biologi och Kemisk Analysteknik Projektet, Under- och Efter-fas (Fö8a - vt2007)
II1300 Ingenjörsmetodik 7,5 hp HT2010
Föreläsning 1 Introduktion till kursen. Algoritmer
Ifous Små barns lärande APT 22 april 2015
Föreläsningsanteckningar Kortfattat om programmeringsmetodik Ola Ågren Hur det går till att göra ett program.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
Pedagogiska året Vattentornet 15/16
Exempel på skriftligt omdöme
Handledarutbildning för Läslyftet ht15-vt16 Handledning – Ewa Wictor
Bild 1 EXAMENSARBETET KANSKE STARTEN PÅ DIN NYA KARRIÄR…
EXAMENSARBETE DEGREE PROJECT 15 HP Byggingenjörsprogrammet och Affärsutvecklingsprogrammet.
Föreläsning 16: Tentan, att förbereda sig…
Kunskapsguiden Ny webbutbildning om läkemedelsbehandling av äldre
Presentationens avskrift:

Datastrukturer och algoritmer Föreläsning 1-2

Innehåll Kurspresentation och information Föreläsning Innehållsöversikt, upplägg, kursmaterial, kursutvärdering, förväntade studie resultat etc... Föreläsning Programbyggnadskonst Olika ansatser Viktiga begrepp Listor Specifikation, Konstruktion Algoritmmönster Riktade listor, länkade celler Dynamiska resurser Att läsa: Kapitel 1-4

Kursens innehåll Abstrakta datatyper Algoritmer Begrepp, definition, konstruktion Algoritmer Tids- och rumsfrågor Designprinciper Sökning Sortering Introduktion till projektarbete enligt LIPS-modellen Både teoretiskt och praktiskt

Kursens innehåll – Abstrakta Datatyper (ADT) Många olika ADT kommer att diskuteras! Stack, Kö, Listor, Träd, Graf, Prioritetskö, Heap, Tabell, Sträng, Mängd, Sökträd, Tries, mm Grundbegrepp Vad är en organisation, modell, gränsyta, sorterad ADT, mm Primär vs. sekundär struktur Absolut vs. relativ komplexitet Varje ADT beskrivs på ungefär samma sätt Organisation, Modell, Gränsytan (formell, informell) Sätt att implementera +/-, när var hur, komplexitet för de viktigaste operationerna Vart hittar vi ADT typiskt, vilka typproblem? Hur hänger ADT ihop med andra ADT? Algoritmer på ADT

Kursens innehåll – Algoritmer Tids och rumsfrågor Exekvering, implementering, underhåll Tids- och rumskomplexitet Fokus på tidskomplexitet T(n) för en alg => O(n) Experimentell och asymptotisk analys Att beskriva algoritmer Designprinciper Brute force, Divide&conquer, Greedy och dynamisk programmering

Kursens innehåll – Algoritmer Sökning (traversering) Vad är traversering Linjär- och Binärsökning +/- Krav på implementationen av ADTn Sortering Varför sorterar vi? Sorterad ADT vs sortering av data 5-6 olika algoritmer, inklusive analys Stabil sortering

Kursens innehåll – Projektarbete enligt LIPS-modellen LIPS utvecklad i Linköping http://www.liu.se/cul/resurser/lips En introduktion och sedan får ni arbeta med en delmängd av modellen Bilden tagen från websidan ovan

Kursens upplägg Föreläsningar (16 st) Gruppövningar (4 st) Teoripresentation och lite praktiska inslag Gruppövningar (4 st) 3 grupper, SI-stil OBS! Obligatorisk närvaro på gruppövning 4! Individuell handledning i datorsal eller på handledarens rum Examination Tentamen (moment 1) 6 obligatoriska uppgifter (moment 2)

Tentamen Ordinarie tentamen 5/6 9-15 i Noliahallen på Nolia! Anmälan krävs! https://www.cs.umu.se/information/tenta/ Senast 10 dagar innan tentan ges Enligt rektors beslut kodas tentamen Kan tyvärr leda till längre tid innan resultat anslås pga administrativt trassel! Max 15 arbetsdagar (för första tentan blir det 30/6) Ett urval av gamla tentamina från tidigare år finns på kurssidan.

Obligatoriska uppgifter 2 OU utförs enskilt och 4 OU utförs parvis Ordinarie sista redovisningsdag står på varje uppgifts webbsida. OU bedöms med G, K, O eller U Komplettering inom 5 arbetsdagar från första tillfälle för uthämtning Finns ett uppsamlingstillfälle (augusti). Måste göra om alla uppgifter Kan vara nya uppgifter/nya handledare

Obligatoriska uppgifter 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. “Jag hinner inte” kommer inte att godtas som enda skäl till uppskov. Resultat anslås på kursens hemsida.

OU2 Implementera tabeller Syfte: Du ska Individuell, inlämnas 15/4 klockan 12.00 Syfte: 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 ADT:n Tabell, öva dig i att hantera dynamiska strukturer, öva dig i skriftlig presentation.

OU4 Analysera algoritmer Syfte: Du ska Experimentellt (individuell) Asymptotiskt (gruppövning med individuell redovisning) Inlämnas 8/5 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.

Projektet Implementera mjukvaran i en Router Syftet: Ni ska Utförs parvis och delredovisas vid 4 tillfällen. Syftet: Ni ska få praktiska kunskaper om användandet av datatyper och algoritmer. 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 givna krav. få en introduktion till en projektmodell och träna att arbeta utifrån den öva er att redovisa ett större arbete muntligt och skriftligt.

Projektets delredovisningar OU1 inlämnas 3/4 klockan 12.00 Skapande av en projektgrupp OU3 inlämnas 21/4 klockan 12.00 Skapande av en projektplan OU5 inlämnas 15/5 klockan 17.00 Muntlig redovisning av pågående arbete på gruppövning 4 och reviderad projektplan OU6 inlämnas 5/6 klockan 12.00 Slutredovisning av färdig produkt och dokumentation av projektet

Kursens (och bokens) strategi: 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, 5DV081 eller 5DV090 ska du implementera koden i Java. Läser du ett annat studieprogram, eller läst TDBA66, TDBA39 eller 5DV035 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

Kursmaterial Kurslitteratur Referenslitteratur: Janlert L-E., Wiberg T., Datatyper och algoritmer, 2:a uppl., Studentlitteratur, 2000, ISBN9144-01364-7 Föreläsningsunderlag (finns på websidan) 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

Kursmaterial Allt material som ev. delas ut under kursen http://www.cs.umu.se/kurser/5DV043/VT08/ 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 Mail som skickas till hela gruppen lagras i ett arkiv http://support.cs.umu.se/mail/archive/5dv043

Mina målsättningar 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

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

Hur kan man lägga upp sina studier? En 7,5 hp kurs motsvarar 200h total studietid för ”normalstudenten”. 5 veckor ger ca 40h/vecka. Delta på undervisningen Läsa boken Göra obligatoriska uppgifter Repetera/”tentaplugga” Ofta samma sak som att arbeta med OU...

Hur kan jobbet fördelas? 30h läsa boken+LIPS-material 5 min*max 370 sidor 40h övrigt ”tentaplugg” 40h schemalagd undervisning (F/G) 90h kvar till de obligatoriska uppgifterna 15h till OU2 25h till OU4 50h till projektet (* 2 personer = 100h) PLANERING AV ARBETET VIKTIGT!

Projektet 50h * 2 personer = 100h! Översikt över kursen Vecka 14 15 16 17 18 19 20 21 22 23 F/G 6 4 2 Plugg 7 OU 9 11 13 Projektet 50h OU2 15h OU3 8h OU4 25h OU5 8h OU6 33,5h OU1 0.5h Projektet 50h * 2 personer = 100h!

Kursutvärdering från ifjol Bara 37 av 114 (32%) som svarade skriftligt Muntlig utvärdering genomfördes på sista föreläsningen (ca 40) 90 studenter aktiva hela kursen igenom Sammanfattning finns på sidan http://www.cs.umu.se/~kursv/TDBA36/VT-07/index.html

Till den som ska planera kursen nästa gång: Komplexitetsuppgiften (OU3) Lägg gruppövningen (gö) längre ifrån inlämningsdagen. Var tydlig med att uppgiften kräver enskilt arbete utöver gö och att man bör ha försökt lösa uppgiften före gö för att få optimal hjälp från gö. Routerlabben (OU2 och OU4) Gör om OU2 så att den till exempel går ut på att skriva en problembeskrivning för OU4. Tanken att "tvinga" studenterna att läsa OU4 och bearbeta specifikationen lyckades inte helt. Skriv om specifikationen av OU4 från grunden eftersom den fortfarande är svår att övergripa. Fundera på om Routerlabben ska bytas ut mot något annat, exempelvis träd. Handledning och rättning av obligatoriska uppgifter Gemensamma rättningsmallar för att minimera "orättvisor". Uppmuntra grupphandledning och sköt inte handledningen via mail. Samma frågor ställs flera gånger och mailandet tar för mycket tid från personlig handledning.

Förändringar på kursen sen förra året Komplexitetsuppgiften (OU3 i år OU4) En vecka mellan gruppövning och inlämnande Info i specifikationen om förberedelse och tidsåtgång Routerlabben (OU2 och OU4) Drivs i projektform med 4 avstämningar Uppgiften och specifikation ordentligt genomarbetad Handledning och rättning av obligatoriska uppgifter Gemensamma mallar/diskussioner Handledningsresursen räcker inte till mailsvar kring kodfrågor Mängden föreläsningar om träd minskar och en föreläsning om projekt och projektmodellen LIPS införs.

Registrering Sker på studentexpeditionen eller hos Pedher Johansson. Alla som antagits med villkor (alla studenter på C/DV/ID) måste visa att man uppfyller förkunskapskraven. Skriv ut ett Ladokutdrag! Gå till http://www.student.umu.se/ Logga in (med ert UMDAC-student konto + lösenord) Välj fliken ”Expedition” Markera gärna förkunskaperna (5DV081/5DV090) med överstrykningspenna... Ingen examination förrän man är registrerad Regga dig innan första uppgiften ska vara inlämnad (på torsdag)!

Förkunskaperna innebär i praktiken Studenten ska kunna implementera en godtycklig algoritm-beskrivning i JAVA/C. ha god erfarenhet av problemlösning.

Kursens mål FSR (1) Efter avslutad kurs ska studenten kunna: redogöra för grundläggande begrepp relaterade till datastrukturer och algoritmer redogöra för organisation och specifikation för grund-läggande abstrakta datatyper såsom lista, stack, kö, träd, mängd, graf och tabell redogöra för grundläggande algoritmer, deras komplexitet och karakteristiska egenskaper välja lämpliga datatyper och algoritmer för ett givet problem välja och utföra lämpliga implementationer (konstruk-tioner) av de valda datatyperna och algoritmerna

Kursens mål FSR (2) Efter avslutad kurs ska studenten kunna: analysera enklare 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 och dynamisk programmering) på nya problem tillämpa de teoretiska kunskaperna och objektoriente-ringsparadigmen praktiskt på ett programmeringsprojekt, dvs. konstruera en komplett programvara inklusive doku-mentation (med systembeskrivning och webbaserad API) utifrån givna riktlinjer utforma en enkel arbetsplan för ett programmerings-projekt som utförs i grupp samt dokumentera, följa upp och skriftligt utvärdera den gjorda planeringen.

Inblandade personer Föreläser Håller i gruppövningar: Lena Kallin Westin (kallin@cs.umu.se) Ola Ringdahl (ringdahl@cs.umu.se) Håller i gruppövningar: Ola Ringdahl Linus Jonsson (linusj@cs.umu.se) Oskar Lindgren (oskarl@cs.umu.se) Handleder och rättar obligatoriska uppgifter: Linus Jonsson Oskar Lindgren Johan Westerlund (johanw@cs.umu.se)

MIT-huset, våning 4 Lablådor Oskar Johan support Lena Studentexp. Studievägl. Pedher Studievägl. Lena P Lena

MIT-huset, våning 2 Linus Ola

Programbyggnadskonst, Listor

Att bygga program ≈ bygga hus/broar Husbygge Specifikation/Beskrivning Material Verktyg Utvärdering/uppföljning Programmering Problembeskrivning Systemdesign Modelleringsverktyg Datatyper – representera datat i programmet Algoritmer – stegvis plan för att utföra något, modellera hur man löser problemet Kontrollstrukturer – för att modellera flödet Utvärdering/uppföljning Komplexitetsanalys Valideringskriterier Specifikation/beskrivning: Förståelse för hur den färdiga konstruktionen ska utnyttjas, vilken uppgift den ska fylla, driftsförhållanden, framtida behov etc Materialkännedom är viktigt, teknikkunskap och vetskap om bakomliggande teorier. Kunskap och färdighet i att använda olika verktyg operativsystem editorer Metodkunskap, förmåga att utvärdera olika konstruktionsförslag, kvalitetskriterier etc kreativitet.

Metaforer och världsbilder för programbyggnad Låg nivå nära datorn Metaforer för programbyggnad Instruktionsmetaforen Problemlösningsmetaforen Adaptionsmetaforen Världsbilder/ansatser Manipulativa ansatsen Funktionella ansatsen Objektorienterade ansatsen Hög nivå Boken ligger på en mellannivå….

Metaforer för programbyggnad Låg nivå nära datorn 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 Hög nivå Boken ligger på en mellannivå….

Datavärldsbilder Manipulativa ansatsen Funktionella 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++

Terminologi Inte alltid enhetlig! Viktigt sätta grunden för bokens och kursens innehåll. Data bär information genom att representera något. x 3.4 12 ”hej” 7 true ’a’ y 52.1

Terminologi Datatyp = objekt + operationer Objekten finns i en värdemängd/objektmängd Operationerna kan vara funktioner, relationer och predikat -3 34 12 7 15 98 -345 52 ”udda” - * heltal = + % + ”jämn” > / <=

enkel sammansatt datatyp heterogen homogen Relation (personinfo) namn ålder kön Relation (personinfo) Lista av heltal: 1 7 3 5 till exempel Heltal: 1,2,3,4 till exempel till exempel homogen heterogen kan vara enkel sammansatt ... kan vara... datatyp

datatyp konkret abstrakt konstruerad implementerad fysisk Står det bara ”datatyp” så menar man ”abstrakt datatyp” abstrakt konkret ... kan vara... fysisk implementerad konstruerad ... kan vara ... När man pratar om en datatyp utan att bry sig om och hur den är realiserad i programspråk/hårdvara När man besrkivit hur objekten ska representeras och hur operationerna skulle kunna implementeras (algoritmer) Kan anses vara abstrakt eftersom... En fysisk datatyp är... En datatyp som är impl i en fysik datatyp är... Komplett konstruerad från grunden och redo att användas i ett program Implementerad i språket/hårdvaran tex int, char

Mer terminologi: Element Beståndsdel i en sammansatt datatyp Består av värde och position a Värde: 2 Position: 3 c d e 23 53 2 -2 f g h i j Värde: d Position: 2:a barn till roten

Mer terminologi: Struktur Position 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 Position Plats i strukturen Positionsbeskrivningar förändras när element sätts in eller tas bort Hur man anger positioner avgörs vid konstruktionen av datatypen. Strukturförändrande operationer behöver returnera nytt positionsvärde

Genomgång av en datatyp - Beskrivningar Modell - vardaglig, ”det man modellerar” Organisation Grundläggande natur på objekten, linjärt ordnade, före och efter relation etc. Informell beskrivning Gränsytan (de operationer som hör till datatypen) Informell beskrivning av operationernas funktion Signaturdiagram Ofta den mest omfattande beskrivningen! Formell beskrivning rent matematisk-logisk (axiom och slutsatser)

Genomgång av en datatyp Konstruktioner och implementationer Olika sätt att konkretisera datatypen ”Lista som en array” vs ”Lista som en dynamisk struktur” Komplexitetsanalys Exemplen i boken i huvudsak Java eller ML Tillämpningar och algoritmer Typproblem och algoritmer som löser dem

Lista Modell Organisation Pärm Diskret linjärt ordnad Bläddra, inspektera, lägga till, ta bort Organisation Diskret linjärt ordnad Ändligt antal linjärt ordnade element Första / sista element Före / efter relation av element (inte värden) Alla element (utom det sista) har en efterföljare Alla element (utom det första) har en föregångare Två grundprinciper för konstruktion av lista dynamisk mha länkade celler statisk mha fält Mer om implementationen senare Byggblock för andra strukturer

ADT:n Lista är en Dynamisk datatyp Generisk datatyp (polytyp) Struktur och storlek förändras under datatypens livslängd Generisk datatyp (polytyp) Lista av typ Typ kan vara av vilken typ som helst Lista av heltal, Lista av tecken, etc Homogen datatyp Alla element har samma typ

Lista – Specifikation: Gränsyta 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) 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 Inspect(p,l) – Returnerar värdet för elementet på position p, operationen är inte definierad för listans sista pos. (End) 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

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

Bild från sidan 47 i Janlert L-E. , Wiberg T Bild från sidan 47 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

Varför är specifikationen viktig? 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

Implementation av gränsyta till Lista 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 public interface Pos { public boolean eq(Pos p); }

Implementation av gränsytan i C /* 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);

Lista – Konstruktion: Statiskt Lista som Fält Snabb inspektion av element Fast reserverat utrymme Kostsamt sätta in och ta bort element Avsatt för lite / mycket utrymme Måste flytta delar av listan framåt / bakåt ADT Lista implementerad enligt specifikation och gränssnitt Kan använda ADT:ens operationer utan att veta hur den är implementerad: VAD den gör inte HUR är intressant Jämför med läskautomat: När du ska köpa läsk ser du bara gränsytan och bryr dig inte hur den funkar bara du får din läsk. Kan bara utföra de uppgifter som gränsytan presenterar Måste förstå uppgifterna (Vad måste man göra för att köpa läsk) Kan inte se insidan av maskinen Kan använda den utan att veta vad som händer på insidan Om man byter ut maskinens inre teknik med en ny version men med samma gränsyta kan du använda maskinen på samma sätt ListClient  läskköparen Göra en lista som håller reda på en resultatlista. Hålla reda på löparnas placering, lägga in löparna sist i listan Antar att AList implementerar Java gränssnittet List List runnerList = new AList(); //Kan bara anropa metoder i gränssnittet VISA källkod för runnerList Bild från sidan 51 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

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 * Kommer bara åt listelement genom att traversera från listans början (kan lösa detta genom en ”svans” om man ofta ska lägga till/ta bort i slutet av listan) Gå igenom stolarna Alltså: För att konstruera en lista behöver vi något som håller reda på referenser och elementvärden Cell kan liknas vid stolen

Länkad Lista Länkar mellan elementen Elementen är en cell som består av länkar och värde Dubbel eller enkellänkad En länk framåt och en bakåt Kan ha ett huvud för att undvika problem med första och sista elementet. Huvudet saknar värde nextel refererar till 1:a elementet prevel refererar till sista elementet Gå igenom implementationen för DLLista

Dubbellänkad lista Före insättning

Dubbellänkad lista Skapa ny nod för insättning newNode skapas nodeBefore nodeAfter 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

Dubbellänkad lista Efter insättning och före borttagning

Dubbellänkad lista Ta bort ett element nodeBefore nodeAfter 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

Dubbellänkad lista Efter borttagning

Algoritmmönster Traversering Sökning Filtrering 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 Några exempel på grundläggande algoritmer Lista kan traverseras på två sätt: från början -> slutet eller tvärtom Betydelse för problemet vilken ordning man besöker elementen Resultatobjekt initieras Traversering av listan Kolla om man nått slutet av listan eller ska avbryta av annat skäl Visa pseudokod

Algoritmmönster Reduktion Mappning Beräknar en funktion av objektets elementvärden Ex. Summera alla tal i en lista Mappning Transformera varje elementvärde i en datastruktur Ex. multiplicera alla talen i en lista med 4

Riktad Lista Modell Organisation Rekursiv definition: 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 Kan ta sig till starten Passerar portarna i bestämd riktning Kan åka om en del av banan Har riktning men bara framåt SPECIALISERING: tar bort operationer ur gränsytan, utan att mängden objekt som kan konstrueras förändras. Rekursiv def: En riktad lista är tom eller har ett första element som följs av en riktad lista Minnesutrymmet prop mot antalet element i listan

Riktad Lista – Specialisering 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. Previous och end behövs ej och 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... Java: Kan ej ta bort en del av gränsytan för en överordnad klass Riktad Lista som helt ny klass => Ingen återvinning av kod

Gränsyta till Riktad Lista 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)

Riktad Lista – konstruktion Konstruerad som Fält Dubbellänkad Lista Enkellänkad Lista Mer (rums)ekonomisk – behöver ju ändå inte bakåtlänkarna Enkellänkad Lista Mer ekonomisk, behöver inte bakåtlänkarna

Riktad Lista som Enkellänkad Lista Problem vid insättning Lösning: Representera position mha en länk till föregångarelementet Fysisk och logisk referens Listhuvud Tomma objekt Gränspositioner Problem vid insättning Ex på tavlan Representera position mha en länk till föregångarelementet => PROBLEM VID FÖRSTA ELEMENTET Listhuvud – handtag till listan, som länkar till det första elementet Underlätta konstruktionen för datatypens operationer när det gäller Tomma objekt: Har fortfarande huvudet kvar Gränspositioner: I ”ändarna” av objektet Lagra info om dataobjektet (huvudet av annan typ än elementen)

Enkellänkad Lista Konstruktion utan huvud Stopplänkvärde (nil, null) Insättning före elementet X Skapa en ny cell Sätt in den efter X Kopiera X:s värde till den nya cellen Sätt X:s värde till v Slutpositionen identifieras genom ett stopplänkvärde Insättning av ett nytt element med värde v före elementet X så här: skapa en ny cell sätt in den i listan efter X Kopiera X:s värde till den nya cellen Sätt X:s värde till v Kopieringen tar olika tid beroende på språk Java: Kopierar referens => snabbt Java jobbar med referenstilldelning, dvs cellens värde är en referens till objektet med det egentliga värdet

n-länkad Cell Tippel som består av Byggmaterial för andra datatyper ett värde n st länkar Byggmaterial för andra datatyper n-länkad struktur Objekt konstruerade med n-länkade celler Listor, träd Cell är en implementationsdetalj i ADT:en Lista som kan gömmas för listans klient Cell kan alltså definieras i klassen som implementerar listan (intern klass), deklareras privat behöver inte ha set & get metoder Cell är en implementationsdetalj i ADT:en Lista som kan gömmas för listans klient Cell kan alltså definieras i klassen som implementerar listan (intern klass), deklareras privat. (behöver inte ha set & get metoder

”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) next = NextCell; } //end Cell

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; } Det finns olika typer av listor Dubbellänkade Enkellänkade Riktade

Länk Referens, pekare Objekt som refererar till annat objekt 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 Ex på sid 82 Länk som index i fält Fysisk datatyp i många programspråk Tillämpning: Flytta och kopiera länkar till stora dataobjekt i st f att kopiera objektet

Dynamiska resurser 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) Skapar dataobjekt för tillfälliga behov Kill, Create för att lösgöra resp skapa resurser som behövs Ex Vid kopiering Cell och lista implementerade som dynamiska resurser se figur 4.14 Upptar resurser, utrymme och administrativa kostnader Dynamisk datatyp: Kan modifiera objektets struktur (storlek) Dynamisk resurs: skapar nya objekt vid behov som hämtas ur ett förråd och outnyttjade objekt återgår till detta förråd Cell statisk datatyp som är en dynamisk resurs Vålnader: döda celler som ”går igen” om man dödar celler som det fortfarande finns länkar till. Använd Kill med försiktighet Sophämtning (garbage collection) Administrativ procedur identifierar och återvinner objekt som inte utnyttjas (JAVA)