Algoritmer och datastrukturer, förel. 1

Slides:



Advertisements
Liknande presentationer
Algoritmer och data strukturer -Länkade listor
Advertisements

Fortsättningskurs i Programmering lektion 6
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Programmeringsteknik för K och Media
Att programmera i språket Java
1 Föreläsning 3 Datalogi för E1 / 2D1343 Repetition List List operationer Stränghantering For-slingor.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
i olika programmeringsspråk
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
Arv, abstrakta klasser och gränssnitt
Namn på tillfället (kan skrivas på flera rader) Namn på den som presenterar Datum xx.xx.2016.
De mest använda knapparna Excel Start Ångra Gör om Fler knappar Vanligaste talformaten Klistra in Hämta format Inställningar tex För att placera.
Gruppövning Applikationsprogramering Klassuppdelning Loose Coupling Model View Controller Inversion of Control Layout med Swing JSplitPane Mouse-over Events.
En hållbar organisation
Målvaktsutbildning grund del 1 - Målgrupp grön och blå nivå
Detaljer i exception-hantering
Föreläsning 2 Programmeringsteknik DD1310
RMI Av: Josefina & Sarah DS04.
Excel En introduktion.
Ekonomi och samhälle Introduktion
Lathund-Ladok-95-Studiedeltagande
Föreläsning 3: Booleans, if, switch
Föreläsning 6: Metoder och fält (arrays)
Föreläsning 4: for, while, do-while
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Innehåll: Arrays Arraylists For loops For-each loops
Föreläsning 2: Typer, klasser, tilldelning
Föreläsning 9: Arv och UML
IT verksamhetens satsning utifrån IKT.
Föreläsning 5: Att använda klasser & objekt
Algoritmer och datastrukturer
Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några.
Typiska kännetecken för instruktioner
Snåla algoritmer Backtracking
Mobiltelefonins utveckling
Kan du begreppen? Para ihop rätt begrepp med rätt beskrivning. Algoritm Precis Program Är ett annat ord för exakt, tydlig eller noggrant. Är klara och.
Algoritmer och datastrukturer,förel. 10
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Ersättningskollen.
En genomsnittlig svensks utsläpp – 11 ton CO2/år
Instruktioner för tävlingsledare
Presentationens avskrift:

Algoritmer och datastrukturer, förel. 1 Algoritmer och datastrukturer Introduktion Föreläsning 1 (Weiss kap. 1-4) Introduktion till kursen Exempel: Datastrukturen ”mängd” Generiska<klasser> De flesta datastrukturerna i kursen definieras som generiska klasser ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Många begrepp blir det … Algoritmer och datastrukturer, förel. 1 Algoritmanalys Tidskomplexitet Datastruktur O(N log N) Generisk klass Hashtabell Divide & Conquer Prioritetskö Worst case Begreppskultur Viktigt i sig! ADT ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

”Den som bara har en hammare tror att alla problem är spikar” Algoritmer och datastrukturer, förel. 1 ”Den som bara har en hammare tror att alla problem är spikar” Repertoaren avgör vilka problem man kan lösa Det räcker inte att kunna syntaxen för ett programmeringsspråk © Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Vilken loop är snabbast? Algoritmer och datastrukturer, förel. 1 Vilken loop är snabbast? for ( i = 0; i < n; i++ ) { for ( j = 0; j < n; j++ ) { // massa jobb ... } for ( j = i; j < n; j++ ) { 1 2 TAVLAN Den andra är dubbelt så snabb, men ... Låt T(N) = antalet gånger som ”massa job” startar T1(10) = 100 T1(20) = 400 T1(100) = 10.000 T2(10) = 55 = 10+9+…+1 = sum_1^N(k) = N(N+1)/2 T2(20) = 210 T2(100) = 5050 ”kvalitativt” är de lika detaljoptimering t.ex. flytta arbete ur inre loopen T(N) är proportionellt mot N2 i båda fallen! Inblickar: Komplexitetsanalys, tillämpn. RSA ... VS datorprestanda ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Vad kan man ha en datastruktur till? Algoritmer och datastrukturer, förel. 1 Vad kan man ha en datastruktur till? Problem: Skriv ut en serie inlästa tal utan duplikat Ex. indata 4 1 3 1 2 1 4 3 skall ge utskriften 4 1 3 2 Informell algoritm: Så länge det finns mer indata Läs N Om N ej ”är utskrivet tidigare” Skriv ut N ”Kom ihåg” N … det behövs någon form av minne ... … enklast möjliga Abstraktionsnivåer Med rätt DS får algoritmen hög abstraktionsnivå blir algoritmen effektiv ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Datastrukturen mängd (eng. Set) Algoritmer och datastrukturer, förel. 1 Datastrukturen mängd (eng. Set) En mängd är en ”oordnad struktur utan duplikat” Operationer add(x) lägg till x till mängden contains(x) finns x i mängden? Axiom: Om x  S så S = S  {x} Alt. Om S.contains(x) så S == S.add(x) att lägga till ett element flera gånger ger samma resultat som att bara lägga till det en gång String är oxå en datastruktur Repetera matten från åk1 + boolesk algebra Det finns multimängder, påsar, bag Sådana axiom är typiska när man specificerar en datastruktur användarorienterat! Tjänster (”nytta”) vs underliggande teknik ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Exempel på användning av en mängd Algoritmer och datastrukturer, förel. 1 Exempel på användning av en mängd Exempel: Skriv ut en serie inlästa tal utan duplikat m.h.a. en mängd Ex. indata 4 1 3 1 2 1 4 3 skall ge utskriften 4 1 3 2 Informell ”matematisk” algoritm: Utskrivna =  Så länge det finns mer indata Läs N Om N  Utskrivna Skriv ut N Utskrivna = Utskrivna  { N } Är detta samma sak? TAVLAN Om N  Utskrivna Skriv ut N Utskrivna = Utskrivna  { N } ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Ett Java-gränssnitt för mängder Algoritmer och datastrukturer, förel. 1 Ett Java-gränssnitt för mängder public interface Set { void add(int x); // add an element boolean contains(int x); // is x in the set? } OBS, gränsnittet bevaras i de följande generaliserade versionerna Hur kan man använda klassen utan att veta hur data representeras? ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Exemplet i Java (1) Exempel: Skriv ut en serie inlästa tal utan duplikat m.h.a. en mängd Ex. indata 4 1 3 1 2 1 4 3 skall ge utskriften 4 1 3 2 public static void main(String[] args) { Set printed = new SomeImplementingClass(); int n; System.out.print("Skriv in tal:”); while ( more data ) { read an int into n if ( ! ( printed.contains( n ) ) ) { System.out.println( n ); printed.add( n ); } } } Det gick ju bra! Växelspel mellan datastruktur och algoritm: Operationerna (tjänsterna) avgör på vilken abstraktionsnivå algoritmen blir. Hur blir det om man bara känner till fält? Kan man använda String, mja inte generellt ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Mängder av små ickenegativa heltal Algoritmer och datastrukturer, förel. 1 Mängder av små ickenegativa heltal public class SimpleSet implements Set { private // data representation public SimpleSet(int maxNum) {…} // constructor public void add(int x) {…} // add an element public boolean contains(int x) {…} // is x in the set? } OBS, gränsnittet bevaras i de följande generaliserade versionerna Hur kan man använda klassen utan att veta hur data representeras? ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Exemplet i Java (2) public static void main(String[] args) { Set printed = new SimpleSet(99); int n; System.out.print("Skriv in POSITIVA TAL < 100:”); while ( more data ) { read an int into n if ( ! ( printed.contains( n ) ) ) { System.out.println( n ); printed.add( n ); } } } Det gick ju bra! Växelspel mellan datastruktur och algoritm: Operationerna (tjänsterna) avgör på vilken abstraktionsnivå algoritmen blir. Hur blir det om man bara känner till fält? Kan man använda String, mja inte generellt ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Datarepresentation x  [0, maxNum] ... 4 3 2 1 5 6 7 8 maxNum F T 1 T 3 T 7 T 8 T 5 array Fördelar: lätt att addera nya element lätt att testa medlemskap Jobba på två plan: Anv. ----------------------------- Impl. Animera! array[x] == true omm x finns i mängden ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Mängder av små ickenegativa heltal Algoritmer och datastrukturer, förel. 1 Mängder av små ickenegativa heltal public class SimpleSet implements Set { private boolean[] array; // reference to array private int maxNum; // max size of stored number public SimpleSet(int maxNum) {…} // constructor public void add(int x) {…} // add an element public boolean contains(int x) {…} // is x in the set? } ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Implementering // constructor public SimpleSet( int maxNum ) { assert ( maxNum > 0 ); array = new boolean[ maxNum + 1 ]; // allocate array this.maxNum = maxNum; for ( int i = 0; i <= maxNum; i++ ) array[ i ] = false; // initialize the array } Man indexerar med elementen assert - exception ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 ... add och member public void add( int x ) { assert ( x >= 0 && x <= maxNum ); array[ x ] = true; } public boolean contains( int x ) { return array[ x ]; ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Begränsningar Elementen kan ej längre vara index i fältet Hur hanterar vi mängder av godtyckliga heltal? flyttal? andra typer? Ny datarepresentation ... 4 3 2 1 Inga duplikat 3 1 8 7 Vad händer om maxNum=109 Man kan inte indexera med flyttal ”position 3.7” ej meningsfullt! Spelar det någon roll om vi lagrar duplikat? Spelar det någon roll vad som lagras i fältet - så länge elementen har samma typ? Varje representation har sina fördelar beroende på tillämpningen Men samma gränssnitt! 5 ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Generalisering i tre steg Algoritmer och datastrukturer, förel. 1 Generalisering i tre steg Klarar små positiva heltal SimpleSet Ny data- representation Klarar godtyckliga heltal Klarar ej flyttal, strängar, ... SetOfInt Klarar alla elementtyper som är jämförbara Generalisera till fler typer Gör klassen generisk! Typiskt ”trade-off”-problem: Metod 1: Snabb, men slösar med minne Metod 2: Sökning behövs vid båda operationerna. Mer minnesekonomisk. 1 <-> 2, typiskt ”trade off”-problem Metod 3: Som 2, men mer generell Samma ADT (gränssnitt) men olika datastrukturer (representation) GenericSet (of anything) ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Mängder av godtyckliga heltal Algoritmer och datastrukturer, förel. 1 Mängder av godtyckliga heltal public class SetOfInt implements Set { private static final int DEFAULT_CAPACITY = 256; private static final int SIZE_INCREMENT = 128; private int capacity = DEFAULT_CAPACITY; // Array capacity private int size = 0; // Number of distinct elements private int[] array = new int[ capacity ]; public void add( int x ) { ... } public boolean contains( int x ) { ... } } Ny datarepresentation (se bild -2) Samma operationer som förut I nästa steg frigör vi oss från begränsningen av elementtypen ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Fältallokering i SetOfInt.add Algoritmer och datastrukturer, förel. 1 Fältallokering i SetOfInt.add 1. fullt! x 3. kopiera elementen 4. addera nya elementet 2. allokera ett större fält Kommentera INTE fältdublering nu, det kommer nästa vecka! ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 SetOfInt.add Algoritmer och datastrukturer, förel. 1 public void add( int x ) { if ( this.contains(x) ) return; if ( size == capacity ) { // buffer full? int[] old = array; // handle to old array // allocate a bigger array capacity += SIZE_INCREMENT; array = new int[ capacity ]; // copy elements for( int i = 0; i < size; i++ ) array[ i ] = old[ i ]; } // add the new element array[ size++ ] = x; OBS användningen av contains för att testa om elementet redan finns i mängden kan vi tillåta duplikat? Enklare tillägg, men kan kräva mycket minne: tid <-> minne Vi måste kunna jämföra element, annars spelar typen ingen roll ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 SetOfInt.contains public boolean contains( int x ) { for ( int i = 0; i < size; i++ ) if ( array[ i ] == x ) return true; return false; } Här behövs sökning linjär om fältet är oordnat ordning kräver arbete Vi måste kunna jämföra element med likhet (==), annars spelar typen ingen roll Ordning kräver arbete Förra metoden var just en sorteringsmetod. ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 Generiska klasser En generisk klass är en klassmall där vissa typnamn ersätts med typvariabler Typvariablerna specificeras i en typparameterlista i början av klassdefinitionen En generisk klass instansieras explicit med konkreta typer i samband med objektdeklarationer. De konkreta typerna ersätter typvariablerna i klassen. … mer nästa gång ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Det generiska gränssnittet GenericSet Algoritmer och datastrukturer, förel. 1 Det generiska gränssnittet GenericSet public interface GenericSet<T> { void add( T x ); boolean contains( T x ); } T är en typvariabel för mängdens element Generalisera mängdklassen. Första ”naiva” försöket ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Klassen GenericArraySet Algoritmer och datastrukturer, förel. 1 Klassen GenericArraySet public class GenericArraySet<T> implements GenericSet<T> { void add( T x ) { ... } boolean contains( T x ) { ... } } En klass som implementerar gränssnittet ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Klassen GenericArraySet Algoritmer och datastrukturer, förel. 1 Klassen GenericArraySet public boolean contains(T x ) { for ( int i = 0; i < setSize; i++ ) if ( array[ i ] == x ) return true; return false; } Duger likhetsoperatorn för Jämförelse av objekt? Skall vi bygga in likhetsoperationen i klassen? implementera Comparable… … eller skicka den operationen som parameter? kan ej skicka metoder men väl objekt Svar: Nä! ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Exempel: Tag bort duplikat ur en ordföljd Algoritmer och datastrukturer, förel. 1 Exempel: Tag bort duplikat ur en ordföljd public static void main(...) { GenericSet<String> printed = new GenericArraySet<String>(); String word; while ( more words ) { read a word if ( ! printed.contains(word)) { System.out.println(word); printed.add( word ); } Vid instansiering av generisk klass måste man ange typen (behövs ej för funktioner) Här instansierar vi en klass (Set) med en annan (String) ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Den generiska klassen GenericArraySet Algoritmer och datastrukturer, förel. 1 Den generiska klassen GenericArraySet public class GenericArraySet<T> implements GenericSet<T> { private static final int DEFAULT_CAPACITY = 256; private static final int SIZE_INCREMENT = 128; private int capacity = DEFAULT_CAPACITY; // Array capacity private int size = 0; // Number of distinct elements *) private T[] array = (T[])new Object[capacity]; public GenericArraySet() { ... } public void add(T x) { ... } public boolean contains(T x) { ... } } *) typvariabler får ej användas för att deklarera fält - använd Objekt och typomvandla ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

GenericArraySet.contains Algoritmer och datastrukturer, förel. 1 GenericArraySet.contains public boolean contains(T x) { for ( int i = 0; i < size; i++ ) if ( x.equals(array[i]) ) return true; return false; } ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4

Algoritmer och datastrukturer, förel. 1 GenericArraySet.add public void add( T x ) { if ( this.contains(x) ) return; if ( size == capacity ) { // buffer full? T[] old = array; // handle to old array // allocate a bigger array capacity += SIZE_INCREMENT; array = (T[])new Object[capacity]; // copy elements for( int i = 0; i < size; i++ ) array[ i ] = old[ i ]; } // add the new element array[size++] = x; ©Uno Holmer, Chalmers, 2019-02-17 03:42 www.cse.chalmers.se/~holmer/ LET375, DAI2+I2, 17/18, lp 4