Javas inbyggda datastrukturer

Storlek: px
Starta visningen från sidan:

Download "Javas inbyggda datastrukturer"

Transkript

1 Javas inbyggda datastrukturer Java innehåller ett antal inbyggda datastrukturer. De är alla baserade på gränssnitten Collection och Map som finns i java.util. Detta är dokumenterat i Skansholm kapitel 19 ( 15 i gamla upplagan) Collection definierar följande viktigare metoder: add(o) Lägger in objektet o i samlingen. Vissa samlingar kräver unika element och då läggs de bara in en gång. AddAll(s) Lägger in alla element som finns i samlingen s clear() tar bort alla element contains(o) undersöker om objektet o finns i samlingen containsall(s) undersöker om alla objekt i samlingen s finns. equals(s) jämför med samlingen s. Lika om samma antal element och samma element isempty() undersöker om tom iterator() returnerar en Iterator för att genomlöpa samlingen remove(o) tar bort objektet o removeall(s) tar bort alla element som finns i samlingen s retainall(s) tar bort alla element utom de som som finns i samlingen s size() antal element toarray() gör en array med alla element toarray(a) fyll i arrayen a med alla element som har samma typ som elementen i a 1 2 Utgående från detta definierar vi sedan ett antal nya gränssnitt. Detta beror på att vi klassar samlingarna i typerna List och Set. En lista är en ordnad sekvens av element, ett element kan förekomma flera gånger i samlingen. En mängd är en samling som inte behöver vara ordnad och där varje element förekommer högst en gång. Vi har då gränssnitten List och Set. Vidare finns också gränssnittet SortedSet som beskriver sorterade mängder. Det är då byggt på gränssnittet Set. De senare gränssnitten är en utvidgning av de tidigare på så sätt att flera metoder införs. Det finns sedan ett antal implementationer av dessa: Vector, ArrayList, LinkedList, HashSet, TreeSet, en sorts array en lista implementerad i en array en lista med länkade noder en hashtabell ett sorterad träd Vitsen med att ha gränssnitt är av vi själva kan implementera dessa om vi så önskar. Alla dessa har en konstruktor med en Collection som parameter som kan konvertera en existerande samling till en ny sorts samling. Alla implementerar dessutom gränssnittet Serializable vilket betyder att samlingarna kan sparas i en datafil och läsas tillbaka intakt igen. 3 4

2 Förutom gränssnitten finns också en klasscollections med ett antal statiska metoder som kan vara användbara. min(s), minsta värdet i samlingen (om det finns) max(s), största värdet fill(l,o), lägger o i alla element i listan l ncopies(l,o), skapar en lista med n st kopior av o copy(till, från), kopierar en lista till en annan (som måste finnas och vara tillräckligt stor) sort(l), sorterar en lista Förutom de metoder som finns i gränssnittetcollection definierar gränssnittetlist följande metoder: add(k,o), skjut in objektet o på plats k i listan addall(k,s), alla objekten i s läggs in på plats k i listan get(k), hämta objekt på plats k indexof(o), ger index för objekt o i listan lastindexof(o), som ovan, söker från slutet listiterator(), ger en listiterator remove(k), tar bort element på plats k set(k,o), ersätter element på plats k med o sublist(i,j), ger en dellista med element i till j Eftersom Vector är en lista kan vi då göra följande: import java.util.*; public class Vtest public static Vector v = new Vector(); public static void main(string [] args) // testa inläggning for (int i=0; i < 10; i++) v.add(new Integer(i)); // add i Collection // kolla for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + " "); // lägg in först for (int i = 0; i < 10; i++) v.add(0,new Integer(i)); // kolla for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + " "); // skapa en ny vektor Vector v2 = new Vector(v.subList(1,5)); for (int i=0; i < v2.size(); i++) System.out.print(v2.get(i) + " "); // ta bort första elementet v.remove(0); for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + " "); // ta bort element 3-6 v.sublist(3, 7).clear(); for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + " "); // lägg in v2 i v v.addall(1,v2); for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + " "); // Gör en lista av vektorn LinkedList l = new LinkedList(v); for (int i=0; i < l.size(); i++) System.out.print(l.get(i) + " "); // min & max System.out.println(Collections.max(l)); System.out.println(Collections.min(l)); // leta System.out.println(v.indexOf(new Integer(2))); System.out.println(v.lastIndexOf(new Integer(2))); 7 8

3 Utskrift: Eftersom vi kan använda en Iterator så kan också göra på detta viset (sist i förra programmet): for (Iterator i = l.iterator(); i.hasnext();) System.out.print(i.next() + ); ger Eftersom detta är listor kan vi istället använda en ListIterator. Den är lite duktigare än sin kompis. Innehåller metoderna Kan man testa så här: for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + ); next(), previous(), hasnext(), hasprevious(), nextindex(), previousindex(), add(o), remove(), set(o), ger nästa element ger föregående element kollar om det finns fler element kollar om det finns element framåt ger index för nästa element ger index för föregående element lägg in på aktuell plats ta bort aktuellt elements byt ut aktuellt element ListIterator lt = v.listiterator(); // stega framåt for (int i = 0; i < 5; i++) lt.next(); lt.set(new Integer(-3)); // byt ut // flytta fram 2 steg lt.next(); lt.next(); lt.remove(); // ta bort // backa 3 steg lt.previous(); lt.previous(); lt.previous(); lt.add(new Integer(32)); // lägg in for (int i=0; i < v.size(); i++) System.out.print(v.get(i) + );

4 Som du såg använde vi en LinkedList i exemplet, det är en dubbellänkad lista som implementerar gränssnittet List. Utöver dessa metoder har vi ytterligare ett antal metoder definierade i en sådan lista. Se Skansholm. Ett binärt sökträd är en mängd (ett Set). Det är dessutom sorterat (SortedSet). En sådan har några fler metoder än de som finns i Collection: first(), minsta elementet last(), största elementet headset(toe), en sorterad delmängd med alla element mindre än toe tailset(frome), en sorterad delmängd med alla element större än eller lika med frome subset(frome, toe), delmängd med element i angivet intervall comparator(), get jämföraren (null om den saknas) En sorterad mängd kräver att du kan sortera på något sätt. En del objekt har naturlig ordning som exempelvis String, Integer, Date mfl, men de flesta har ingen naturlig ordning. Då kan man själv implementera Comparable eller alternativt en Comparator. Alla mängder tillåter att man i konstruktorn specificerar en ordnare. En naturlig ordning behöver inte vara en önskvärd ordning. Exempelvis sorteras å, ä och ö fel i klassen String. Det beror på att den sorterar efter amerikanska regler. Vill man ha nån annan ordning så måste man skapa en egen sorterare. Ett exempel på en sorterare är klassen Collator. Den kan sortera strängar efter nationella regler. Den kan också programmeras till att hantera stora/små bokstäver på lite olika sätt. För att få den att sortera efter svenska regler skapar man först ett lokaliseringsobjekt. Sedan skapar man en jämförare med hjälp av detta. Locale l = new Locale( sv, SE ); Collator co = Collator.getInstance(l); Nu kan vi göra TreeSet words = new TreeSet(co); och vi får ett träd som kan sortera strängar efter svenska regler

5 Exempelvis på detta vis: import java.util.*; import java.text.*; import java.io.*; import extra.*; Character.isLetter((char) c)) s = s + (char) r.readchar(); if (s.length() == 0) return null; else return s; public class TextAnalys // detta är ett program. övar lite, testa om ord som // åke, östen och sånt sorteras rätt public static void main(string [] arg) String word; Collator co = Collator.getInstance(new Locale("sv","SE")); co.setstrength(collator.primary); TreeSet words = new TreeSet(co); // ExtendedReader is a Skansholm class // specify sorter ExtendedReader r = ExtendedReader.getFileReader(arg[0]); // read one word at a time add it to the tree while ((word = nextword(r))!= null) words.add(word.touppercase()); // print all words for (Iterator i = words.iterator(); i.hasnext();) Std.out.println(i.next()); public static String nextword(extendedreader r) String s = ""; int c; // skip nonletters while ((c = r.lookahead())!= -1 &&!Character.isLetter((char) c)) c = r.readchar(); // get the letters while ((c = r.lookahead())!= -1 && Detta program läser en fil, tar fram ord och lägger in dem i ett träd, skriver sedan ut dem med en Iterator. Vi kan göra java TextAnalys TextAnalys.java Utskrift: A ADD ALL ARG AT C CHAR CHARACTER CLASS CO COLLATOR DETTA ELSE ETT EXTENDEDREADER EXTRA FOR GET GETFILEREADER GETINSTANCE HASNEXT I IF IMPORT INT IO IS ISLETTER IT ITERATOR JAVA LENGTH LETTERS LITE LOCALE LOOKAHEAD MAIN NEW NEXT NEXTWORD NONLETTERS NULL OCH OM ONE ORD OUT PRIMARY PRINT PRINTLN PROGRAM PUBLIC R READ READCHAR RETURN RÄTT S SE SETSTRENGTH SKANSHOLM SKIP SOM SORTER SORTERAS SPECIFY STATIC STD STRING SV SÅNT TESTA TEXT TEXTANALYS THE TIME TO TOUPPERCASE TREE TREESET UTIL WHILE VOID WORD WORDS ÅKE ÄR ÖSTEN ÖVAR Notera att vi får en korrekt sortering! 19 20

6 Ett HashSet bygger på en hashtabell och är till skillnad från ett TreeSet osorterad. En hashtabell bygger på att vi för varje objekt beräknar en hashnyckel. Den ska helst vara unik för varje objekt som vi vill lägga in i tabellen, men det uppnår vi oftast inte helt. Tanken med detta är att vi har en tabell med exempelvis 100 platser. Då beräknar vi för varje objekt en hashnyckel, ett tal i intervallet 0-99, och lagrar objektet på den plats nyckeln anvisar. Om vi får samma hashnyckel för olika objekt får vi en kollision, det kan t. ex. hanteras så att varje element i tabellen är en länkad lista som innehåller alla element med samma hashnyckel. tabell med kollisioner Detta arrangemang betyder att det blir mycket effektivt att söka i denna tabell eftersom vi idealt bara behöver leta på ett ställe och direkt hittar rätt. För att undvika alltför många kollisioner bör tabellen inte fyllas till mer än 75-80%, dvs man gör den något för stor Ett exelipempel kan se ut på detta vis, där hashnyckeln räknas ut attematiskt av java. import java.util.*; import java.text.*; import java.io.*; import extra.*; public class HashAnalys // detta är ett program. övar lite, testa om ord som // åke, östen och sånt sorteras rätt public static void main(string [] arg) String word; HashSet words = new HashSet(); // ExtendedReader is a Skansholm class ExtendedReader r = ExtendedReader.getFileReader(arg[0]); // read one word at a time add it to the tree while ((word = nextword(r))!= null) words.add(word.touppercase()); // print all words for (Iterator i = words.iterator(); i.hasnext();) Std.out.println(i.next()); public static String nextword(extendedreader r) String s = ""; int c; // skip nonletters while ((c = r.lookahead())!= -1 &&!Character.isLetter((char) c)) c = r.readchar(); // get the letters while ((c = r.lookahead())!= -1 && Character.isLetter((char) c)) s = s + (char) r.readchar(); if (s.length() == 0) return null; else return s; Ger följande utskrift: SETSTRENGTH AT EXTRA TIME TREE ISLETTER NEXTWORD READ SV TOUPPERCASE GET WORD NEXT GETINSTANCE SOM SE GETFILEREADER ALL ITERATOR OCH ÅKE ARG OUT SPECIFY NONLETTERS TEXT THE UTIL DETTA CHARACTER PRINTLN TESTA STD TREESET CLASS COLLATOR EXTENDEDREADER WHILE ONE CHAR SKIP FOR 23 24

7 SKANSHOLM S VOID ADD RETURN PUBLIC R ELSE ÖSTEN JAVA INT LENGTH I WORDS NULL C LETTERS A PRINT IMPORT LITE LOOKAHEAD CO IT TEXTANALYS MAIN IS IO ETT ÄR OM IF SORTERAS HASNEXT ORD READCHAR SÅNT NEW STRING SORTER RÄTT ÖVAR PRIMARY PROGRAM LOCALE TO STATIC Avbildningstabeller En avbildningstabell är en struktur där vi har ett par, nyckel och värde, där vi kommer åt värdet med hjälp av en nyckel. Varje nyckel avbildas på exakt ett värdeobjekt och kan bara förekomma en gång i tabellen. Flera olika nycklar kan avbildas till samma objekt Java implementerar detta genom gränssnittet Map. Det innehåller metoderna: put(nyckel, värde), lägger in en avbildning av tabellen, Om den finns tidigare så ersätts den. putall(tab), lägger in tabellen tab i aktuell tabell remove(nyckel), tar bort avbildningen för nyckeln clear(), tar bort allt i tabellen get(nyckel), returnerar värde motsvarande nyckeln containskey(n), undersöker om n finns i tabellen containsvalue(v), undersöker om någon nyckel avbildas på v isempty(), kollar om tom size(), ger antalet avbildningar equals(tab), undersöker om tab och aktuell tab är lika keyset(), ger en mängd med alla nycklar values(), ger en samling (Collection) med alla värden entryset(), ger en mängd med alla avbildningar, med element av typ Map.Entry med metoderna getkey, getvalue och setvalue Avbildningar implementeras med klassen HashMap. Den fungerar som HashSet men med explicita nyckelvärdepar. För sorterade avbildningar används klassen TreeMap som implementerar gränssnittet SortedMap vilket är en subgränssnitt till Map. Vi kan exempelvis skapa en avbildning från ord till frekvens i en text, vi tar fram orden och räknar hur många gånger de finns. Det kan se ut så här: 27 28

8 import java.util.*; import java.text.*; import java.io.*; import extra.*; public class TextAnalys2 // detta är ett program. övar lite, testa om ord som // åke, östen och sånt sorteras rätt public static void main(string [] arg) String word; Collator co = Collator.getInstance(new Locale("sv","SE")); co.setstrength(collator.primary); TreeMap words = new TreeMap(co); // specify sorter // ExtendedReader is a Skansholm class ExtendedReader r = ExtendedReader.getFileReader(arg[0]); // read one word at a time add it to the tree while ((word = nextword(r))!= null) word = word.touppercase(); Integer number = (Integer) words.get(word); if (number == null) number = new Integer(0); words.put(word, new Integer(number.intValue() + 1)); Set mapping = words.entryset(); // print all words for (Iterator i = mapping.iterator(); i.hasnext();) Map.Entry e = (Map.Entry) i.next(); Std.out.println(e.getKey() + " " + e.getvalue()); public static String nextword(extendedreader r) String s = ""; int c; // skip nonletters while ((c = r.lookahead())!= -1 &&!Character.isLetter((char) c)) c = r.readchar(); // get the letters while ((c = r.lookahead())!= -1 && Character.isLetter((char) c)) s = s + (char) r.readchar(); if (s.length() == 0) return null; else return s; java TextAnalys2 TextAnalys.java A 2 ADD 2 ALL 1 ARG 2 AT 1 C 6 CHAR 3 CHARACTER 2 CLASS 2 CO 3 COLLATOR 3 DETTA 1 ELSE 1 ETT 1 EXTENDEDREADER 4 EXTRA 1 FOR 1 GET 1 GETFILEREADER 1 GETINSTANCE 1 HASNEXT 1 I 3 IF 1 IMPORT 4 INT 1 IO 1 IS 1 ISLETTER 2 IT 1 ITERATOR 2 JAVA 3 LENGTH 1 LETTERS 1 LITE 1 LOCALE 1 LOOKAHEAD MAIN 1 NEW 2 NEXT 1 NEXTWORD 2 NONLETTERS 1 NULL 2 OCH 1 OM 1 ONE 1 ORD 1 OUT 1 PRIMARY 1 PRINT 1 PRINTLN 1 PROGRAM 1 PUBLIC 3 R 7 READ 1 READCHAR 2 RETURN 2 RÄTT 1 S 5 SE 1 SETSTRENGTH 1 SKANSHOLM 1 SKIP 1 SOM 1 SORTER 1 SORTERAS 1 SPECIFY 1 STATIC 2 STD 1 STRING 4 SV 1 SÅNT 1 TESTA 1 TEXT 1 TEXTANALYS 1 THE 2 TIME 1 TO 1 TOUPPERCASE 1 TREE 1 TREESET 2 UTIL 1 WHILE 3 VOID 1 WORD 4 WORDS 4 ÅKE 1 ÄR 1 ÖSTEN 1 ÖVAR

9 Sortering & Sökning Sortering och sökning är två viktiga tillämpningar av programmering. Vi ska begrunda några olika metoder för detta. Sortering kan göras på flera olika sätt. Vi talar om sortering in-situ vilket betyder att en osorterad datamängd skall förvandlas till en sorterad i samma utrymme. Typiska algoritmer för detta är urval, instick, bubbel och quicksort. Dessa metoder kan lätt användas till att producera en ny sorterad mängd från en osorterad mängd. En tredje variant är att slå samman två eller flera sorterade mängder (lagrade i minnet eller i filer) till en ny sorterad mängd. Detta kallar vi samsortering (merge sort) Det viktiga med sorteringsmetoder är deras effektivitet. Enkla metoder som t. ex. urvalssortering går igenom en datamängd med n element n gånger. Det leder till algoritmer som är n*n proportionella. Det tar mycket tid att sortera stora datamängder. Det finns bättre metoder som istället är n*log(n) proportionella. För stora datamängder blir detta viktigt. Om vi har element så får vi ~ operationer med bubble ~ operationer för quicksort 35 36

10 Grunder för bubbelsortering är att låta tal bubbla upp till sin position. Detta gör man genom att gå igenom data och swappa två intilligande värden som är felsorterade. Efter ett sådant pass har ett värde hamnat på rätt plats. Efter att ha repeterat detta n gånger blir mängden sorterad. En bubbelsorteringsfunktion som sorterar en array kan se ut så här: // // function: swap // public void swap( int [] data, int i, int j) // swap the values at positions i and j Det går att detektera om vi blir klara tidigare. Bubbelsortering är bra om vi har nästan sorterade mängder. int temp = data[i]; data[i] = data[j]; data[j] = temp; // //function: bubblesort // public void bubblesort(int[] data) // sort the argument vektor in // ascending order for (int top = data.length - 1; top > 0; top--) // find the largest element in position // 0..top, place in data[top] for (int i = 0; i < top; i++) if (data[i+1] < data[i]) swap(data, i+1, i); Det viktiga i urvalssortering är att leta upp det största elementet i mängden och lägga det på rätt plats. Detta repeteras sedan för återstående data tills vi gått igenom mängden n gånger. Detta påverkas inte på något sätt av ordningen i datamängden. Kod för urvalssortering kan se ut som: public void selectionsort(int[] data) // sort, in place. the argument vektor // into ascending order for (int top = data.length-1; top > 0; top--) // find the position of the largest element int largeposition = 0; for (int j = 1; j <= top; j++) // data[largeposition] is // largest element in 0..j-1 if (data[largeposition] < data[j]) largeposition = j; // data[largeposition] is largest // element in 0..j if (top!= largeposition) swap(data, top, largeposition); 39 40

11 Instickssortering baseras på iden att mängden är uppdelad i en sorterad del och en osorterad del. Från början är den sorterade delen tom. Vi överför sedan ett värde i taget från den osorterade mängden till den sorterade mängden i rätt position. Koden för detta: public void insertionsort(int [] data) // sort, in place. the argument // vektor into ascending order int n = data.length; for (int top = 1; top < n; top++) // data[0..top-1] is ordered // goal: place element data[top] // in the proper position for (int j=top-1; j>=0 && data[j+1]<data[j]; j--) swap(data, j, j+1); Problemet med alla dessa metoder är att de är n*n proportionella. Bra sorteringsmetoder är n*log(n) proportionella istället. Exempel på en sådan metod är quicksort. quicksort bygger på valet av ett Pivotelement och sedan på partitionering kring detta pivotelement. Antag att vi har elementen Antag att vi väljer talet 37 som pivotelement. Vi börjar sedan med att swappa det första element (2) med talet (37). Sedan har vi två pekare, low och high, low initieras till 1 (andra elementet) och high till 10 (sista elementet). Sedan stegas low uppåt ett steg i taget tills ett tal större än pivotelementet hittas och high ned ett steg nedåt i taget, tills ett tal mindre än pivotelementet hittas. Värdena vid low och high swappas då och stegningen fortsätter till high passerar low

12 På detta sätt får vi två grupper av värden, en med värden större än pivotelementet och en med värden mindre än pivotelementen. Till sist läggs pivotelementet tillbaka mellan dessa grupper. Repetera sedan detta för de två delarna med två nya pivotelement. I vårt fall får vi: Först läggs elementet 37 i första positionen. Sedan jämförs 97 med 37 och 39 med 37. Båda är större än 37. Stega ned high, byt ut 39 mot 42. Fortsätt och stega high tills vi hittar 10. Swappa 10 och 97. Stega low till 17. Stega vidare till 2 sedan vidare till 12, vidare till 46. High stegas sedan till 46 och vidare till 12 Eftersom high nu passerat low är vi klara och swappar 12 (pekas ut av high) med 37. Ger oss Vi gör sedan om detta med talen 12-2 och med talen Om dessa två delmängder är n/2 stora så behövs det log(n) delningar. Varje delning kräver n operationer, totalt n*log(n). Beror dock mycket på valet av pivotelement. Vi kan få n*n operationer om vi har ett dåligt val av pivotelement. Koden för quicksort ser ut som: // // partition and quicksort // public int partition(int [] v, int low, int high, int pivotindex) // move the pivot value to the bottom // of the vektor if (pivotindex!= low) swap(v, low, pivotindex); pivotindex = low; low++; // v[i] for i less than low are less than // or equal to pivot v[i] for i greater than // high are greater than pivot // move elements into place while (low <= high) if (v[low] <= v[pivotindex]) low++; else if (v[high] > v[pivotindex]) high--; else swap(v, low, high); // put pivot back between two groups if (high!= pivotindex) swap(v, pivotindex, high); return high; // return the border between high and low 47 48

13 public void quicksort(int [] v, int low, int high) // no need to sort a vektor // of zero or one elements if (low >= high) return; // select the pivot value int pivotindex = (low + high) / 2; // partition the vektor pivotindex = partition(v, low, high, pivotindex); // sort the two sub arrays if (low < pivotindex) quicksort(v, low, pivotindex - 1); if (pivotindex < high) quicksort(v, pivotindex + 1, high); En liten test av olika sorteringsmetoder gav detta Tider i millisekunder, spalterna anger 100, 1000 resp slumpmässigt valda reella tal. Tiderna för 100 tal är mycket oexakta eftersom klockan inte pålitligt kan mäta så korta tider. Quick < Urval ~ Instick ~ Bubbel ~ Jag testade även tal men efter 2 timmar tröttnade jag på att vänta. public void quicksort(int [] v) quicksort(v, 0, v.length - 1); Samsortering görs ofta i samband med register då man vill åstadkomma ett nytt register som också är sorterat. Vi kan inte utan svårighet sortera en fil. En fil kan inte byggas ut mitt i utan bara i slutet. Samsortering kan vi dock göra från två eller flera filer till en ny fil. Det är principiellt ganska enkelt, Sökning kan göras i en osorterad mängd eller i en sorterad mängd. I en osorterad mängd kan vi inte hitta ett visst element med mindre än n/2 sökningar i genomsnitt. Den enklaste metoden kallar vi linjärsökning och den går ut på att jämföra elementen ett i taget tills vi hittar det rätta Hämta ett element från varje datakälla, Undersök vilket av dessa som skall läggas i resultatfilen. Gör detta och hämta ett nytt värde från denna källa. Repetera detta tills det är klart. Svårigheten är att filerna är olika långa och man måste reducera antalet datakällor vartefter de tar slut. Inte principiellt svårt men kan leda till en hel del kod

14 En bättre metod är då binärsökning som bygger på att datamängden är sorterad. Vi jämför då vår nyckel med det mittersta elementet. Om detta stämmer är vi klara, annars kan vi kasta bort hälften av talen och göra om sökningen i den del som blev kvar. Blir ju beroende av log(n). Å andra sidan tar n*log(n) att sortera värdena. Det hela blir en avvägning mellan antalet sökningar och sorteringstider. Om vi antar att vi gör k st sökningar kan man ganska lätt beräkna lönsamheten i sortering genom n*log(n) + k*log(n) < k*n/2 Ger k>40 med 10 tal men k>1 för 1000 tal. Binärsökning ser ut på detta sätt: // // function: binarysearch // public boolean binarysearch(int [] data, int ele) // perform binary search on a vektor int low = 0; int high = data.length-1; while (low < high) // data[0..low-1] are all less than ele // data[high..max] are all // greater than ele int mid = (low + high) / 2; if (data[mid] == ele) return true; else if (data[mid] < ele) low = mid + 1; else high = mid; return false; 53 54

Samlingar Collection classes

Samlingar Collection classes Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 mars 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections Olika slag av samlingar i Java Arrayer (Till exempel: int[])

Läs mer

Samlingar Collection classes

Samlingar Collection classes Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 juni 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections 1 Motivation: Vill samla olika datastrukturer för att representera

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer

Interfacen Set och Map, hashtabeller

Interfacen Set och Map, hashtabeller Föreläsning 0 Innehåll Hashtabeller implementering, effektivitet Interfacen Set och Map ijava Interfacet Comparator Undervisningsmoment: föreläsning 0, övningsuppgifter 0-, lab 5 och 6 Avsnitt i läroboken:

Läs mer

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs Tentamen 2006-05-06 Objekt-orienterad programmering i Java, 5p distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof Nyström May 2, 2007

Läs mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016 Objektorienterad Programkonstruktion Föreläsning 9 30 nov 2016 Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd,

Läs mer

Collection classes. Interface, första exempel. Interface (forts) Men först

Collection classes. Interface, första exempel. Interface (forts) Men först Collection Classes Koppling mellan abstraktioner på hög nivå och praktiska och effektiva implementationer av datastrukturer abstraktionerna: naturliga matematiska begrepp mängder, sekvenser avbildningar

Läs mer

Collection Classes. bjectorienterad programmering Sida 1

Collection Classes. bjectorienterad programmering Sida 1 Collection Classes Koppling mellan abstraktioner på hög nivå och praktiska och effektiva implementationer av datastrukturer abstraktionerna: naturliga matematiska begrepp mängder, sekvenser avbildningar

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som

Läs mer

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 11 Datastrukturer (DAT037) Föreläsning 11 Datastrukturer (DAT037) Fredrik Lindblad 1 4 december 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

17.9 Funktioner för avbildningstabeller

17.9 Funktioner för avbildningstabeller 17. Containerklasser l.setopaque(true); // ogenomskinlig bakgrund String fname = p.getproperty("fontname", "Serif"); String fstyle = p.getproperty("fontstyle", "PLAIN"); // översätt stilen till en heltalskonstant

Läs mer

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Undervisningsmoment:

Läs mer

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs Tentamen 2006-0823 Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof

Läs mer

Diskutera. Hashfunktion

Diskutera. Hashfunktion Föreläsning 1 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Tidigare har

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll

Läs mer

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal) Föreläsning 0 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map ijava Undervisningsmoment:

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Kort om javadoc Abstrakta datatyper Ordböcker/Mappar Listor Stackar

Läs mer

Föreläsning 11 Innehåll

Föreläsning 11 Innehåll Föreläsning 11 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Datavetenskap (LTH)

Läs mer

Inlämningsuppgift och handledning

Inlämningsuppgift och handledning Inlämningsuppgift och handledning Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder på fredagluncher

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0.. Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller Inlämningsuppgift och handledning Föreläsning 11 Innehåll Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning XII: Interfaces, Enums, Generics, Collections Links for: interfaces, enums, generics, collections Ahmed Rezine IDA, Linköpings Universitet Hösttermin

Läs mer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering

Läs mer

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

Föreläsning 10. ADT:er och datastrukturer Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Objektorienterad Programkonstruktion

Objektorienterad Programkonstruktion Objektorienterad Programkonstruktion Föreläsning 9 Projektuppgift Collection, Iterator, Composite Christian Smith ccs@kth.se 1 Projektuppgift IM, skickar meddelanden mellan datorer En lite större labbuppgift,

Läs mer

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2017 08 14, 8.00 13.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING Föreläsning 11 12 ALGORITMER: SÖKNING, REGISTRERING, SORTERING Seminarier: Fredagsklubben för dig som tycker att programmering är svårt (0 eller möjligen 1 poäng på delmålskontrollen) inte avsedda för

Läs mer

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina

Läs mer

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2 Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek

Läs mer

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine Objektorienterad Programmering (TDDC77) Föreläsning XII: Interfaces, Enums,, Collections Links for: interfaces, enums, generics, collections Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Abstrakta

Läs mer

Stackar, köer, iteratorer och paket

Stackar, köer, iteratorer och paket Stackar, köer, iteratorer och paket Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Paket Stackar och köer Array resp länkad struktur Iteratorer Javadoc Kommentarer lab 1 Bra att de flesta

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper. Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

Föreläsning 14 Innehåll

Föreläsning 14 Innehåll Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade

Läs mer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Arrayer. results

Arrayer. results Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1

Läs mer

Föreläsning 12 Innehåll

Föreläsning 12 Innehåll Föreläsning 12 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Datavetenskap (LTH) Föreläsning 12 HT 2017 1 / 38 Sortering Varför

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar Vi kommer att behöva hantera samlingar av objekt - Har oftast använd Array (fält) - Bra om

Läs mer

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Metoden clone() Skapa kopior av existerande objekt. Interface Cloneable Deep vs.

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

Datastrukturer. föreläsning 6. Maps 1

Datastrukturer. föreläsning 6. Maps 1 Datastrukturer föreläsning 6 Maps 1 Avbildningar och lexika Maps 2 Vad är ett lexikon? Namn Telefonnummer Peter 031-405937 Peter 0736-341482 Paul 031-405937 Paul 0737-305459 Hannah 031-405937 Hannah 0730-732100

Läs mer

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1

Läs mer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser. (16 februari 2016 F5.1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (16 februari 2016 F5.2 ) Pokertärningar

Läs mer

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2 Övning vecka 6. TDA550 - Objektorienterad programvaruutveckling IT, fk Denna vecka ska vi titta på undantag, testning, generiska enheter, samlingar och designmönstret Iterator. Uppgift 1 Exceptions a)

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Symboliska konstanter const

Symboliska konstanter const (5 oktober 2010 T11.1 ) Symboliska konstanter const Tre sätt som en preprocessormacro med const-deklaration med enum-deklaration (endast heltalskonstanter) Exempel: #define SIZE 100 const int ANSWER =

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

Föreläsning 11 Innehåll

Föreläsning 11 Innehåll Föreläsning 11 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Heapsort behandlades i samband med prioritetsköer. Undervisningsmoment:

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 4 ADT Map/Dictionary, hashtabeller, skip-listor TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 9 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 4.1

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public

Läs mer

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser. (1 oktober 2017 F5 1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (1 oktober 2017 F5 2 ) Pokertärningar

Läs mer

Algoritmer och datastrukturer

Algoritmer och datastrukturer Algoritmer och datastrukturer Binära sökträd Hash Tabeller Sökning Många datastukturer försöker uppnå den effektivaste sökningen I arrayer - linjer sökning, och binärt sökning när arrayen kan vara sörterad

Läs mer

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Implementering Mängd En mängd är en samling som inte innehåller

Läs mer

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation

Läs mer

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 3 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Java Collections Framework interface och klasser för samlingar av element interfacen Iterator och Iterable och foreach-sats

Läs mer

Lösningsförslag till exempeltenta 1

Lösningsförslag till exempeltenta 1 Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i

Läs mer

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator. Övning vecka 5. TDA550 - Objektorienterad programvaruutveckling IT, fk Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator. Uppgift 1 Kom ihåg att samlingar

Läs mer

Algoritmer. Två gränssnitt

Algoritmer. Två gränssnitt Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037, Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-01-10 1. Båda looparna upprepas n gånger. s.pop() tar O(1), eventuellt amorterat. t.add() tar O(log i) för i:te iterationen av första loopen.

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer. föreläsning 3. Stacks 1 Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer

Läs mer

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine. Outline Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Undantag Design Hösttermin 2017 En frukt har ett namn Man kan lägga en frukt i

Läs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Effektivitet och minneskrav Implementering Läsanvisning och uppgifter

Läs mer

Den som bara har en hammare tror att alla problem är spikar

Den som bara har en hammare tror att alla problem är spikar Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska Den som bara har en hammare tror att alla problem är spikar Vilken

Läs mer

Programmering fortsättningskurs

Programmering fortsättningskurs Programmering fortsättningskurs Philip Larsson 2013 03 09 Innehåll 1 Träd 1 1.1 Binära träd........................................ 1 1.2 Strikt binärt träd..................................... 1 1.3 Binärt

Läs mer

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ Organisation En array Šr en ordnad lista av všrden Varje všrde har ett numeriskt index - deklaration & anvšndning som parametrar flerdimensionella fšlt N element indexeras med 0 till N-1 0 1 2 3 4 5 6

Läs mer

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

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer

Läs mer

17.7 Funktioner för listor och köer

17.7 Funktioner för listor och köer 17. Containerklasser 17.7 Funktioner för listor och köer I avsnitt 17.6 såg vi hur man kunde använda iteratorer för att löpa igenom datasamlingar. Vi såg att man kunde använda iteratorer för alla datasamlingar

Läs mer

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 2 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Generik används för att få typsäkra datastrukturer Java Collections Framework Standardbibliotek med datastrukturer i

Läs mer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt

Läs mer

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-03-19 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Varför väljer man ofta synligheten private hellre än public för medlemsvariabler i en klass?

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer