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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 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 Frågestunder på fredagluncher För föreläsningarna: använd gärna grumligtlådan i Moodle Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map ijava Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT 017 / 58 Diskutera Hashtabeller Tidigare har vi sett att man kan använda binära sökträd för att lagra data som man snabbt ska kunna söka i. Tidskomplexiteten för att sätta in, söka och ta bort element i ett balanserat binärt sökträd är O(logn). Antag att vi har fått i uppdrag att skriva ett program som hanterar medlemmar i en förening. Antalet medlemmar är max 1000 st. Varje medlem har ett unikt medlemsnummer mellan 0 och 999. Detta nummer används som nyckel för att identifiera och söka efter en medlem. Finns det något bättre (snabbare, enklare) sätt än binärt sökträd för att lagra medlemmarna i just detta specialfall? Antag att de nycklar som ska användas vid sökningen är heltal i intervallet 0..n. En vektor med n + 1 platser kan användas. Elementet med nyckel k placeras på plats k i vektorn. Sökning, insättning och borttagning av k blir en direkt access till plats k. Alla dessa operationer har tidskomplexitet O(1). Idéen kan generaliseras till alla slags objekt: Nycklarna översätts till ett heltal i intervallet 0..n. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

2 Hashfunktion Idé: översätt nycklar till heltal som kan användas som index i en vektor. nyckel hashfunktion hashkod (ett heltal) Hashfunktionen avbildar nyckeln på heltal (hashkod). hashkod % table.length kan användas som index i en vektor table. Kollisioner (olika nycklar får samma index) är oundvikliga och måste hanteras. En bra hashfunktion bör påverkas av alla delar av nyckeln. ger litet förväntat antal kollisioner, sprider elementen över hela tabellen. Datavetenskap (LTH) Föreläsning 11 HT / 58 Hashfunktion för heltal Om nyckeln är ett heltal k kan hashkoden vara talet självt. Index i vektorn räknas ut så här: int index = k % table.length; if (index < 0 ) { index = index + table.length; Math.abs kan ge ett negativt resultat och används därför inte här. (Math.abs(Integer.MIN_VALUE) blir negativt pga. overflow.) Det går att använda Math.abs ändå om man tänker sig för: int index = Math.abs(k % table.length); int index = Math.abs(k) % table.length; // fungerar // fungerar INTE Datavetenskap (LTH) Föreläsning 11 HT 017 / 58 Hashfunktion för strängar Metoden hashcode För en sträng s 0 s 1 s s n 1 är en lämplig hashfunktion s[0] 31 n 1 + s[1] 31 n + + s[n 1] Ger ett stort heltal (som får anpassas till tabellens storlek genom % table.length). Tecken i olika positioner multipliceras med olika potenser av 31. Permutationer av samma tecken ger därför olika hashkod. 31 är ett primtal och det kan visas att man därför får relativt få kollisioner. I klassen Object finns en metod hashcode som översätter ett objekt till ett heltal. Den är implementerad så att olika objekt om möjligt avbildas på olika heltal. Metoden hashcode är skuggad i Javas klasser (String, Integer ) så att lika objekt avbildas på samma heltal. Heltalet som returneras från hashcode får sedan anpassas till tabellens storlek med % table.length. Man måste skugga hashcode (och equals) i den klass vars objekt ska fungera som nyckel i en hashtabell. Objekt för vilka equals ger true ska få samma hashkod. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

3 Diskutera Hashtabeller olika alternativ Försök sätta in element med nycklarna 1, 8, 7, 4, ska sättas in i en tabell med 7 platser. Elementets index = x % Hur hanterar man kollisioner (dvs. att olika nycklar får samma index)? Det finns olika sätt att implementera hashtabeller. Sluten hashtabell (eng: open addressing) en vektor används för att lagra elementen Det finns sedan olika sätt att hantera kollisioner t ex linjär teknik kvadratisk teknik Öppen hashtabell (eng: separate chaining) en vektor av listor Kolliderande objekt placeras i samma lista. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Sluten hashtabell med linjär kollisionsteknik Borttagning i sluten hashtabell med linjär kollisionsteknik Vid linjär teknik sätter man in ett element som kolliderar med ett annat på första lediga plats efter den där det skulle ha hamnat om ingen kollision inträffat. Tabellen betraktas som cirkulär, d.v.s. index 0 anses komma efter tablesize Sökning efter visst element börjar på den plats elementets hashkod anger och fortsätter eventuellt framåt. Om det inte påträffas före en ledig plats finns det inte i tabellen. Om vi vid borttagning bara gör platsen tom, leder det till fel vid sökning. Ex: Tag bort 1 ur tabellen på föregående bild: Om vi nu söker efter 8 vars hashkod % 7 är 1 börjar vi pröva plats 1. Eftersom denna plats är tom sluter vi oss felaktigt till att det sökta elementet inte finns i tabellen. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

4 Borttagning i sluten hashtabell med linjär kollisionsteknik Forts Tidskomplexitet, linjär teknik Om vi i stället markerar platsen icke-aktiv vid borttagning (i fig. nedan markerat med ett d): d så kan vi utföra sökningen med början på den plats hashkod % 7 anger och framåt över alla upptagna och icke-aktiva platser. Först när vi stöter på en riktigt tom plats är det misslyckad sökning. Sökning (och därmed insättning och borttagning) i en hashtabell innebär beräkning av index sökning bland kolliderande element Värstafallet för operationerna sökning, insättning och borttagning är O(n), där n är antalet element som finns insatta i tabellen. Inträffar om alla element hamnar i en följd och vi t ex vid sökning måste pröva alla platserna i denna följd. Är dock ytterst osannolikt. Under förutsättning att tabellen inte fylls till mer än hälften får man O(1)-komplexitet i medeltal. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Problem med linjär teknik Sluten hashtabell, kvadratisk kollisionsteknik Linjär teknik ger upphov till primär klustring i tabellen. Om flera objekt kolliderar (får samma index pos) kommer de att ligga i ett kluster kring platsen pos. Även objekt vars hashkoder är nära pos kommer att drabbas av kollisioner och bygga ut klustret. Stora kluster gör sökning långsam. Ex: Sätt in element med nycklarna 3, 13, 3, 33, 5, 15. Alternativ, bättre teknik för hantering av kollisioner. Först prövas nästa plats, sedan platsen 4 steg fram, sedan 9 steg fram, alltså pos, pos + 1, pos +, pos + 3,,pos + i, där pos är elementets hashkod. Tabellen används fortfarande cirkulärt Undviker primär klustring av element. Kan modifieras till andra sekvenser av steg. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

5 Sluten hashtabell, kvadratisk kollisionsteknik Exempel Sluten hashtabell, kvadratisk kollisionsteknik Sätt in element med nycklarna 89, 18, 49, 58, 9 i en tabell med 10 platser. 89 % 10 = 9 18 % 10 = 8 49 % 10 = 9 58 % 10 = 8 9%10= Problem: Inte alltid säkert att man hittar ledig plats även om det finns. Om t ex tabellens storlek är 1 och man använder hashfunktionen x % 1 och sätter in element med nycklarna 0, 1, 3 och 4 så kan man inte därefter hitta någon ledig plats för element som hashas till plats 0. De enda platser som kommer att prövas i serien pos + i när pos = 0 blir de upptagna platserna 0, 1, 4 och 9. Om tabellens storlek är ett primtal kan ett nytt element alltid sättas in om tabellens fyllnadsgrad är mindre än 0.5. Tidskomplexitet: Ännu ej fullständigt utredd. Värsta fallet är O(n). I praktiken mindre klustring än den linjära tekniken. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Öppen hashtabell (separate chaining) Öppen hashtabell (separate chaining) Exempel Elementen i tabellen är listor. I lista nummer k ligger alla element vars nyckel har hashkod % table.length = k. Sätt in element med nycklarna 1, 8, 7, 4, i en öppen tabell med 7 listor. 0 1 table.length- table.length Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

6 Nycklar och hashkod Blanda inte ihop begreppen Öppen hashtabell Nycklarna är unika. Hashkoden beräknas med en hashfunktion som avbildar nycklarna på heltal. Som index i vektorn används hashkod % table.length I Java: key.hashcode() % table.length Olika nycklar kan få samma index (kollision) Unika nycklar: 4, 8, 1 samma index: 1 Unika nycklar:, 7 samma index: Obeservera att borttagning i öppen tabell är enklare än i sluten. Elementet tas helt enkelt bort ur den lista där det befinner sig. Vi får inga problem med luckor som i den slutna tabellen. I Javas klassbibliotek används öppna tabeller i klasserna HashSet och HashMap. På laboration får du implementera en öppen hashtabell med enkellänkade listor. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT 017 / 58 Diskutera Tidskomplexitet, öppen tabell Vilka faktorer påverkar antal kollisioner i en hashtabell? Vilka konsekvenser får ett högt antal kollisioner i en (öppen) hashtabell? Hur kan risken för kollisioner minskas? Värstafallet för operationerna sökning, insättning och borttagning är O(n), där n är antalet element som finns insatta i tabellen. Inträffar om alla element hamnat i samma lista. Medelfall Tidskomplexiteten är O(1) i medelfall (och i praktiken med en bra hashfunktionen och med en tillräckligt stor tabell). Fyllnadsgrad (eng. load factor) = antal insatta element/antal platser itabellen. Valet av fyllnadsgrad är en kompromiss mellan minnesåtgång och tidsåtgång. Ett lämpligt val av fyllnadsgrad är Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

7 Rehashing ADT Mängd Om fyllnadsgraden blir för stor måste man bygga om tabellen: Skapa en dubbelt så stor tabell. Sätt in alla element i den nya tabellen Definition En mängd (eng. Set) är en en samling element där dubbletter är förbjudna. Operationer: sätta in ett element ta bort ett element undersöka om ett element finns i mängden Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT 017 / 58 Använda binärt sökträd för att implementera ADT mängd Använda hashtabell för att implementera ADT mängd Ett balanserat binärt sökträd passar bra att använda för att representera en mängd: Ett binärt sökträd innehåller inte dubbletter. Det är effektivt att sätta in ett element ta bort ett element undersöka om ett element finns i trädet. Tidskomplexiteten för dessa operationer är O( log n) iettbalanserat binärt sökträd. En hashtabell passar bra att använda för att representera en mängd: Ett hashtabell innehåller inte dubbletter. Det är effektivt att sätta in ett element. ta bort ett element. undersöka om ett element finns i hashtabellen. Tidskomplexiteten för dessa operationer är O(1) imedelfall(ochi praktiken vid bra val av hashfunktion och tabellstorlek). Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

8 ADT Lexikon ADT lexikon (Map) Definition Ett lexikon (eng. Map) är en en samling element där varje element har en en nyckel och ett värde. Nycklarna är unika. Operationer: sätta in ett nyckel-värde-par ta bort ett nyckel-värde-par söka värdet som hör till en nyckel I ett lexikon (Map) betraktas element som tvådelade en nyckel och tillhörande värde. Nyckeln avbildas (eng. maps) på sitt värde. Nycklar är unika, men inte värden. Man använder nyckeln för att söka tillhörande värde. Exempel: nyckel = månad, värde = antal dagar i månaden. nyckel = personnummer, värde = Person-objekt med namn, adress. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 ADT lexikon (Map) Exempel Diskutera nycklar (unika) mars april maj värden (dubbletter ok) Hur kan vi använda ett binärt sökträd eller en hashtabell för att implementera en Map? Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

9 Använda binärt sökträd för att implementera ADT lexikon Använda hashtabell för att implementera ADT lexikon I ett binärt sökträd kan vi sätta in element, inte par (nyckel, värde). Men vi kan ändå använda ett binärt sökträd. Vi deklarerar en nästlad klass som representerar par (nyckel,värde) och sätter in objekt av denna typ i trädet. Vid jämförelser (i metoden compareto) är det nycklarnas värden som ska jämföras. data left right key value Man kan deklarera en nästlad klass som representerar par (nyckel,värde) och sätta in sådana objekt i hashtabellen. Hashkoden beräknas på nyckeln null null null null null key value next key value null next key value next null Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Interfacen Set och Map i java.util Interfacet Set Iterable Collection En mängd (Set) är en samling element som inte innehåller dubbletter. Metoderna i interfacet Set finns även i interfacet Collection. De har dock olika kontrakt genom att Set inför restriktionen att inga dubbletter får förekomma. Queue List Set Map Enligt specifikationen i Java får en mängd (Set) innehålla null-element. Men bara ett null-element, p.g.a. dubblettförbudet. Vissa konkreta implementeringar av interfacet Set i java.util förbjuder dock insättning av null. SortedSet SortedMap Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

10 Interfacet SortedSet Klasser som implementerar Set Förutsätter att elementen som sätts in går att jämföra med varandra. Elementen ska antingen implementera interfacet Comparable eller genom att man (via konstruktorn) anger ett Comparator-objekt som kan användas för jämförelser. Vi återkommer till detta. TreeSet implementerar det utvidgade interfacet SortedSet. Använder ett slags balanserat träd, inte AVL-träd utan röd-svarta träd (eng. Red-Black trees), som också garanterar att höjden är O( log n). HashSet Använder hashtabell. Set Garanterar att operationen iterator() returnerar en iterator som går igenom mängden i växande ordning. Utvidgar Set-interfacet med några operationer som återspeglar att elementen går att ordna. Exempel: returnera minsta element, returnera största... HashSet SortedSet TreeSet Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Interfacet Set Abstrakta klasser AbstractCollection AbstractSet Collection Set SortedSet betyder ärver från ("extends") betyder implementerar ("implements") Interfacet Set Abstrakta klasser Kommentarer till hierarkin på föregående bild: Interface fick t.o.m. Java 7 inte innehålla implementeringar. Ibland kan man implementera vissa operationer med hjälp av andra operationer i samma interface. Ex: isempty () size() == 0 För att underlätta för den som ska implementera ett (stort) interface kan man implementera en abstrakt klass som innehåller implementeringar av vissa metoder enligt detta mönster. Ex: klasserna AbstractCollection och AbstractSet Implementatören av en konkret klass kan då ärva den abstrakta klassen och behöver sedan bara implementera återstående operationer iinterfacet. Ex: klasserna TreeSet och HashSet. HashSet TreeSet Datavetenskap (LTH) Föreläsning 11 HT / 58 Fr.o.m Java 8 får man ha default-metoder i interface. Det innebär att man nu hade kunnat lägga de metoder som implementeras i Abstractklasserna direkt i interfacen istället. Datavetenskap (LTH) Föreläsning 11 HT / 58

11 Klassen TreeSet Exempel på användning av klassen TreeSet Comparable<E> Implementerar interfacet SortedSet. Det finns flera konstruktorer i klassen, bl.a: 1 public TreeSet(); public TreeSet(Comparator<? super E> c); Används den första konstruktorn, förutsätts elementen implementera Comparable annars genereras ClassCastException. Den andra konstruktorn har en parameter som är ett objekt av en klass som implementerar interfacet Comparator. Används denna kommer jämförelser att utföras med hjälp av komparatorn. // Denna mängd kommer att ordnas efter personnummer Set<Person> nbrset = new TreeSet<Person>(); nbrset.add(new Person("Kalle", " ")); nbrset.add(new Person("Kajsa", " ")); // undersök om personen med personnummer // finns i mängden boolean found = nbrset.contains(new Person(null, " ")); Klassen Person måste implementera Comparable<Person>. I metoden compareto jämförs personernas personnummer. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Exempel på användning av klassen TreeSet Komparator // Denna mängd kommer att ordnas efter namn Set<Person> nameset = new TreeSet<Person>(new NameComparator()); nameset.add(new Person("Kalle", " ")); nameset.add(new Person("Kajsa", " ")); Klassen NameComparator måste implementeras. I metoden compare jämförs personernas namn. public class NameComparator implements Comparator<Person> { public int compare(person p1, Person p) { return p1.getname().compareto(p.getname()); Istället för en comparatorklass kan man använda lambdauttryck: Set<Person> nameset = new TreeSet<Person>((p1, p) -> p1.getname().compareto(p.getname())); Datavetenskap (LTH) Föreläsning 11 HT / 58 Exempel på användning av klassen HashSet Antag vi vill vill sätta in Person-objekt i en mängd av typen HashSet. HashSet<Person> set = new HashSet<Person>(); Person p = new Person("Kajsa", " "); set.add(p); boolean found = set.contains(new Person(null, " ")); Nu måste equals och hashcode skuggas i klassen Person. I equals ska personnumren jämföras. I hashcode ska en hashkod för personnumret beräknas. Datavetenskap (LTH) Föreläsning 11 HT / 58

12 Skugga metoderna equals och hashcode Om man glömmer skugga hashcode Inuti klasserna HashSet och HashMap används metoderna hashcode() och equals(object) för att hitta ett element: Först beräknas index för elementet med nyckel key med Math.abs(key.hashCode() % table.length). Sedan söks key i listan på denna plats. I samband med denna sökning används equals. Om vi glömmer att skugga hashcode i Person hittar vi troligen inte personen: När personen p sätts in beräknas hashkoden för objektet som p refererar till. När vi söker efter personen baseras sökningen på hashkoden av det objekt som är parameter till contains-metoden. Detta är ett annat objekt (men med samma personnummer). Sökningen utgår från den plats denna senare hashkod anger och med största sannolikhet är det i en helt annan del av tabellen än den där personen sattes in. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Klass som skuggar equals och hashcode Klassen Person Interfacet Map i java.util public class Person { private String name; private String pnbr; Map // konstruktor och övriga metoder public boolean equals(object other) { if (other instanceof Person) { return pnbr.equals(((person) other).pnbr); else { return false; public int hashcode() { return pnbr.hashcode(); Datavetenskap (LTH) Föreläsning 11 HT / 58 AbstractMap HashMap SortedMap TreeMap Datavetenskap (LTH) Föreläsning 11 HT / 58

13 Interfacet Map -ett urval av metoderna public interface Map<K,V> { V get(object key); boolean isempty(); V put(k key, V value); V remove(object key); int size(); Set<K> keyset(); Collection<V> values(); Set<Map.Entry<K,V>> entryset(); public interface Entry<K,V> { K getkey(); V getvalue(); V setvalue(v); Interfacet Map ärver inte interfacet Collection eller Iterable. Det går alltså inte att iterera direkt över mappen. Däremot kan man iterera över nycklarna, värdena och nyckel-värdeparen. Datavetenskap (LTH) Föreläsning 11 HT / 58 Klasser som implementerar Map TreeMap implementerar interfacet SortedMap. Använder balanserat binärt sökträd (röd-svart träd) keyset().iterator() ger en iterator som går igenom nycklarna i växande ordning. Ytterligare operationer som bygger på ordning mellan nycklarna finns. HashMap Använder öppen hashtabell. HashMap Map SortedMap TreeMap Datavetenskap (LTH) Föreläsning 11 HT / 58 Exempel på användning av klassen TreeMap Exempel på användning av klassen TreeMap, forts Map<String, Integer> map = new TreeMap<String, Integer>(); map.put("januari", 31); map.put("februari", 8); map.put("mars", 31); map.put("april", 30); map.put("maj", 31); System.out.println("Antal dagar i mars: " + map.get("mars")); I en TreeMap är det nyckelklassen som ska implementera Comparable eller vars attribut ska jämföras i en komparatorklass. I exemplet har nycklarna typen String. Klassen String implementerar Comparable<String>. En Map används normalt för att med nyckeln hitta motsvarande värde. Ibland behöver man göra tvärtom: System.out.println("Månader med 31 dagar:"); for (Map.Entry<String, Integer> e : map.entryset()) { if (e.getvalue() == 31) { System.out.println(e.getKey()); Metoden entryset returnerar en mängd med alla nyckel-värde-par. Genom att traversera denna mängd kan vi ta reda på vilka nyckel-värde-par som har värdet 31 och skriva ut motsvarande nyckel. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

14 Interfacet Map.Entry Exempel på användning av klassen HashMap Exempel 1 Map.Entry är ett inre interface som är nästlat i interfacet Map. /* Representerar ett nyckel-värdepar */ public interface Entry<K,V> { K getkey(); V getvalue(); V setvalue(v); // ändrar värdet till V och // returnerar det gamla värdet Operationen entryset returnerar en mängd (Set) av Entry-objekt. d.v.s. objekt av en klass som implementerar interfacet Map.Entry Map<String, Integer> map = new HashMap<String, Integer>(); map.put("januari", 31); map.put("februari", 8); map.put("mars", 31); map.put("april", 30); map.put("maj", 31); System.out.println("Antal dagar i mars: " + map.get("mars")); I en HashMap måste nyckelklassen skugga equals och hashcode. I exemplet har nycklarna typen String. Klassen String skuggar equals och hashcode. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58 Exempel på användning av klassen HashMap Exempel Antag vi vill vill sätta in Person-objekt i en hashtabell (HashMap). Personens personnummer ska vara nyckel. Map<String, Person> map = new HashMap<String, Person>(); map.put(" ", new Person("Kajsa", " ")); Person p = map.get(" "); if (p!= null) { Här har nycklarna typen String, och i denna klass är redan equals och hashcode skuggade. Exempel på vad du ska kunna Förklara begreppen hashtabell och hashfunktion. Definiera vad som menas med sluten och öppen hashtabell och hur kollisioner hanteras i sådana tabeller. Förklara vad som menas med fyllnadsgraden (eng: load factor) för en hashtabell. Förklara hur sökning, insättning och borttagning går till i slutna respektive öppna hashtabeller. Implementera öppna hashtabeller (görs på laboration ). Ange tidskomplexiteten för operationer på hashtabell. Förklara vad de abstrakta datatyperna set och map är och vilka operationer man förväntas kunna utföra på dem. Använda interfacen Set och Map och deras implementerande klasser i Java Collections Framework. Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

15 Datorlaboration 5 Binära sökträd Datorlaboration 5, forts Insättning i binära sökträd Implementera en egen generisk klass för binära sökträd Tips: I flera fall blir det en (kort) publik metod som anropar en privat rekursiv metod. I en av metoderna ska ett nytt träd byggas upp från värden i en vektor. Hämta inspiration från den rekursiva algoritmen för binärsökning. Rita för att förstå vad som händer i programmet! Innehåll: binära sökträd, rekursion, länkad struktur. Nycklarna i vänster subträd < roten < nycklarna i höger subträd Dubbletter är ej tillåtna. Nya noder sätts alltid in som löv. Insättning börjar med en (förhoppningsvis) misslyckad sökning. Exempel: Sätt in 3. Börja här: 4 5 Misslyckad sökning! Sätt in 3 här. 9 8 Datavetenskap (LTH) Föreläsning 11 HT / 58 Datavetenskap (LTH) Föreläsning 11 HT / 58

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

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

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

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

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

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

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition Föreläsning Innehåll Diskutera 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 Jämföra objekt interfacet Comparable Interfacet

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

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 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 Jämföra objekt interfacet Comparable Interfacet

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

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd Föreläsning Innehåll Diskutera 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 Jämföra objekt interfacet Comparable Interfacet

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

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

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

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

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

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

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna Föreläsning Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Implementering med lista ar Implementering av prioritetskö med heap Sortering

Läs mer

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar Föreläsning 1 Innehåll ADT Prioritetskö Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util ar Implementering av prioritetskö med heap Sortering med hjälp

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

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

Seminarium 13 Innehåll

Seminarium 13 Innehåll Seminarium 13 Innehåll Prioritetsköer och heapar Prioritetsköer ADTn Klassen PriorityQueue i java.util Implementering med lista Heapar ADTn För implementering av prioritetskö För sortering Efter seminariet

Läs mer

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap

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

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell Innehåll Föreläsning Mängd, lexikon och hashtabell Mängd Lexikon Hashtabell Mängd Specifikation Modell: En påse, men den är inte riktigt bra eftersom man tex kan ha mängder med gemensamma element. Organisation:

Läs mer

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd Föreläsning Innehåll inära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, VL-träd Jämföra objekt interfacet omparable Interfacet omparator

Läs mer

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition Föreläsning Innehåll inära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet alanserade binära sökträd VL-träd Datastrukturer som passar för sökning ntag att vi i ett

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

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

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 och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon. Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden

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

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

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

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

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet

Läs mer

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037) Föreläsning 5 Datastrukturer (DAT037) Nils Anders Danielsson, Fredrik Lindblad 2016-11-14 Förra gången: Cirkulära arrayer Prioritetskö Binära heapar Leftistheapar merge Det verkar inte gå att slå ihop

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

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Heapar Implementering av prioritetskö med heap Klassen PriorityQueue i java.util Programexempel LPT-algoritmen

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2015 01 12, 14.00 19.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

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

Läs mer

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna Seminarium inära sökträd Innehåll inära sökträd inära sökträd Definition Implementering lgoritmer Sökning Insättning orttagning Effektivitet alanserade binära sökträd Eempel på vad du ska kunna Förklara

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

13 Prioritetsköer, heapar

13 Prioritetsköer, heapar Prioritetsköer, heapar 31 13 Prioritetsköer, heapar U 101. En prioritetskö är en samling element där varje element har en prioritet (som används för att jämföra elementen med). Elementen plockas ut i prioritetsordning

Läs mer

Algoritmer och datastrukturer 2012, fo rela sning 8

Algoritmer och datastrukturer 2012, fo rela sning 8 lgoritmer och datastrukturer 01, fo rela sning 8 Komplexitet för binära sökträd De viktigaste operationerna på binära sökträd är insert, find och remove Tiden det tar att utföra en operation bestäms till

Läs mer

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:

Läs mer

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2 Repetition -

Läs mer

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

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Det är extra mycket

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering Föreläsning 12 Innehåll Sortering Sortering O(n 2 )-algoritmer: urvalsering insättningsering O(n log n)-algoritmer: Merge Quick Varför era? För att göra sökning effektivare. För att förenkla vissa algoritmer.

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2012 12 20, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

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

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad F5: Debriefing OU2, repetition av listor, träd och hashtabeller Carl Nettelblad 2017-04-24 Frågor Kommer nog inte att täcka 2 timmar Har ni frågor på OU3, något annat vi har tagit hittills på kursen, listor

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

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

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

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning ADT Map/Dictionary, hashtabeller TDDC9,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 7 september 208 Magnus Nielsen, IDA, Linköpings universitet. ADT Map/Dictionary.

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

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Läs mer

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

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

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper

Läs mer

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund Föreläsning 2 Innehåll Generiska klasser Javas samlingsklasser är generiska. Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element metoden equals En generisk

Läs mer

Hashtabeller. TDA416, lp3 2016

Hashtabeller. TDA416, lp3 2016 Hashtabeller TDA416, lp3 2016 Mängder och avbildningar (Sets and Maps) I den abstrakta datatypen avbildning/uppslagstabell (Map) lagras nyckelvärde-par. Grundläggande operationerna är insättning, borttagning

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

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 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll

Läs mer

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon. Innehåll F7: Tabell, hashtabell, relation & lexikon Niclas Börlin 5DV49 Datastrukturer och algoritmer Tabell Hashtabell Relation Lexikon Tabell Gränsyta till Tabell Modell Uppslagsbok Organisation Ändlig

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

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

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 10 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037) Föreläsning 10 Datastrukturer (DAT037) Fredrik Lindblad 1 29 november 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

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2012 12 20, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

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

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering Föreläsning 11 Innehåll Sortering O(n 2 )-algoritmer: urvalsering insättningsering O(n log n)-algoritmer: Merge Quick Heap behandlades i samband med prioritetsköer. Undervisningsmoment: föreläsning 11,

Läs mer

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9 Listor Koffman & Wolfgang kapitel 2, avsnitt 2.1 2.3, 2.5 2.6 och 2.9 Figur 2.1, sid 63 java.util.list, med dess implementeringar 2 List och primitiva typer En array kan innehålla primitiva typer: int[],

Läs mer

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 10. Maps 1 Datastrukturer föreläsning 10 Maps 1 Minsta uppspännande träd Maps 2 Minsta uppspännande träd Uppspännande träd till graf fritt delträd innehåller alla noderna Minsta uppspännande träd (MST) är det uppspännande

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

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer

Läs mer

Föreläsning 5 Innehåll

Föreläsning 5 Innehåll Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur

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

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 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och

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

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

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Arv, abstrakta klasser och metoder (repetition) Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map,

Läs mer

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd Innehåll Föreläsning 12 Sökträd Sökning Sökning och Sökträd 383 384 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation:

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

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Föreläsning En introduktion till projektmodellen LIPS Hashtabeller Att läsa: Dessa bilder + kapitel. Projekt definition Projekt En grupp av projektdeltagare utför under ledning av en projektledare

Läs mer

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Abstrakta datatyper och delar av Javas klassbibliotek Arv, abstrakta klasser och metoder (repetition)

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 kl Uppgift 4. Uppgift 5

Tentamen kl Uppgift 4. Uppgift 5 2D344 Grundläggande Datalogi för F Tentamen 2003-03-0 kl 4.00 9.00 Inga hjälpmedel. Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ

Läs mer