Innehåll Datastrukturer och algoritmer Föreläsning 1! Introduktion och begrepp Kurspresentation! - Målsättning! - Kursutvärdering! - Upplägg! - Översikt! Viktiga begrepp "1 "2 Mina målsättningar Alla ska höja sig ett par snäpp som programmerare.! Förstå komplexitetsbegreppet! - Tid och rum! Ni ska ha lärt er några viktiga typer av algoritmer och datatyper! Rolig kurs 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 (om något är oklart så fråga)! - Gör övningar! - Börja med laborationerna i tid. På planeringen framgår när det är lämpligt att börja med uppgifterna.! - Utnyttja handledningen! - Säg till om det är något som inte funkar "3 "4 Websajten http://www.cs.umu.se/kurser/5dv149/vt14! - Schema! - Uppdateringar! - Formalia! - Resultatredovisning! - Gruppövningar! - Planering! OH-bilder! - Datatyper att använda under kursen! - Inlämningsuppgifter! - Gamla tentor Fem stycken! Obligatoriska uppgifter - Analysera algoritmer (i par)! Experimentellt! Börja samla data till detta redan idag annars kommer tiden bli knapp! Asymptotiskt! - Test! - Debugging! Redovisas muntligt. Ni kommer få boka in en tid för redovisning.! - Tabeller! - Hitta vägen "5 "6
Gruppövningar Gruppövning 1: Komplexitetsanalys Gruppövning 2: Minnesallokering och filer Gruppövning 3: Algoritmkonstruktion Gruppövning 4: Lite mer avancerade datatyper Gruppövning 5: Förberedelser inför tentan Kursutvärderingen från vt13 Plocka bort avsnittet om trådsäkerhet och omfördela en del av materialet med c-kursen, så att materialet görs mer lättillgängligt och mer tid kan läggas på tex kodexempel.! Gör instruktioner för vad man bör göra innan man frågar handledarna om för att frågorna ska gå snabbare att besvara och därmed göra så att folk slipper vänta så länge på handledare.! Försök få med lite mer kodexempel på föreläsningarna (utan att för den sakens skull minska på antalet exempel på pseudokod). Framför allt rörande minnesallokerande och pekare.! Försök hålla nere tiden som behövs för studenterna! Flytta bort några handledningstillfällen i början av labbarna för att kunna hjälpa lite mer på slutet.! Se över debugguppgiften tidsmässigt. Dedikerad tid för redovisning?! Se över handledningssituationen! Se över labspecifikationerna och se om något kan klargöras för att förenkla.! Poängtera tydligare att quizen i cambro finns och då det kan vara lämpligt att göra dem (lägg gärna till fler frågor) "7 "8 Datastrukturer & Algoritmer Vi ska strukturera upp ert tänk kring program.! Genom att se strukturer och hitta likheter ska vi bygga mer komplexa program! Ni ska lära er nya byggblock att bygga upp program av, och lära er i vilken situation de passar Innehållsöversikt Algoritmer! Pseudokod som ett sätt att beskriva algoritmer! Tids och rumskomplexitet! Komplexitetsanalys (exprimentell och asymptotisk)! Designprinciper! Abstrakta datatyper! Stack, Kö, Listor, Träd, Graf, Prioritetskö. Heap. Tabell, Sträng, Mängd, Sökträd, Tries,...! med tillhörande algoritmer! Sökning och Sortering! Målet är att ni efter kursen kan hitta och implementera en bra algoritm som passar för en given situation! Testning och felsökning "9 "10 Abstrakta DataTyper Beskrivningssätt! Grundbegrepp! Olika sätt att konstruera! Vart hittar vi typiskt olika ADT! Hur olika ADT hänger ihop med varandra! Fokus ligger på att använda datatyperna och förstå när man bör välja en given implementation. Att konstruera program Att bygga program bygga broar! Brobygge! - Specifikation! - Beskrivning! - Material! - Verktyg! - Uppföljning "11 "12
Att konstruera program Problembeskrivning! Systemdesign! Modelleringsverktyg! Datatyper representera datat i programmet! Algoritmer stegvis plan för att utföra något, modellera hur man löser problemet Datatyper = op. + obj. Vilka objekt är det?! - Vad vill vi modellera/representera/abstrahera! Vad kan man göra med dem?! - Vilka operationer/metoder "13 "14 Gränssnitt Gränssnitt Vad är ett gränssnitt?! - Kontaktyta! Separerar! - Funktion och implementationen! - Gränsen mellan två eller flera delar! - Användandet och skapandet! - Överenskommelse - oberoende av vem, vart och hur ska det passa! - Specifikationen och konstruktionen Musköten 1700-talet "15 "16 Gränssnitt i datavetenskapen Mellan centralenheter och periferienheter! Mellan människan och maskinen! Mellan mjukvarukomponenter! - Funktioner/metoder! - Datatyper! -! På den här kursen: mellan mjukvarukomponenter. Begrepp Data - objekten som bär information! Sammansatt datatyp vs. enkel! Homogen vs. Hetrogen! Struktur! Abstrakta datatyper! Konstruerad datatyp! Implementerad datatyp! Konkret datatyp Datatyp - värdemängd samt operationer! Fysisk implementerad i språket/hårdvaran! "17 "18
Beskrivningssätt 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! - Informell beskrivning av operationernas funktion! - Signaturdiagram! Formell beskrivning - rent matematisk-logisk Gränsyta till Fält Array(val,index)! Create (lo,hi:index) -> Array(val,index) Set-value(i:index,v:val,a:Array(val,index)) ->Array(val,index) Low (a:array(val,index)) -> index High (a:array(val,index)) -> index Has-value (i:index,a:array(val,index))-> Bool Inspect-value (i:index,a:array(val,index))-> val "19 "20 Ordobegreppet Ett sätt att förenklat beskriva hur mycket tid/utrymme en algoritm kräver! Om en algoritm tex har en tidskomplexitet O(n 2 ) så kommer tiden att köra algoritmen att växa kvadratiskt beroende på mängden data algoritmen arbetar med.! Vi kommer att formalisera detta senare under kursen Fält Modell! - Schackbräde! Organisation! - n-dimensionellt fält organiserat som rätblock! - Tillåts innehålla odefinierade elementvärden! Statisk typ "21 "22 Specifikation Gränsyta Måste bestämma i förväg! - Datatypen för elementvärdena! Ingående operationer! - Konstruktorer! - Antal dimensioner fältet! Create, Set-value! - Datatyp för varje koordinataxel - Inspektorer! Inspect-value, Has-value, Low, High "23 "24
Gränsyta till Fält Konstruktion av Fält Array(val,index)! Create (lo,hi:index) -> Array(val,index) Set-value(i:index,v:val,a:Array(val,index)) ->Array(val,index) Low (a:array(val,index)) -> index High (a:array(val,index)) -> index Has-value (i:index,a:array(val,index))-> Bool Inspect-value (i:index,a:array(val,index))-> val Fysisk datatyp i många språk! N-dim Fält som 1-dim Fält! - vecklar ut fältet! - Matriser lagras radvis! N-dim Fält som fält av fält av...! Fält kan konstrueras som Lista! - Inte så effektiv "25 "26 Gles matris Gles matris stort antal element är odefinierade eller har värdet noll! Implementeras som Vektor av tabell! - Sparar utrymme! - Sparar tid Tillämpningar Fält Tekniska beräkningar! - Geometriska transformationer! Rotation, translation, skalning! - Linjära ekvationssystem! - Kantdetektering i bilder! - Spelmatriser "27 "28