Collections och datastrukturer. Kursbokens kapitel 13 och
|
|
- Karolina Abrahamsson
- för 5 år sedan
- Visningar:
Transkript
1 Collections och datastrukturer Kursbokens kapitel 13 och
2 Exempel på några collections Finns i assembly mscorlib, System.Core och System Ingår i namnrymden System.Collections.Generic Listor En lista är en datasamling som innehåller ett godtyckligt antal element. Utmärkande för listor är att elementen är ordnade i en viss följd. List, utnyttjar internt en array för att hålla ordning på sina värden LinkedList, använder en kedja av noder Stack, endast den ena änden av sekvensen av värden är åtkomlig, den änden är stackens topp. Queue, endast i ena änden kommer man åt ett värde, endast i andra änden kan man lägga till värden Mängder Elementen i en mängd ligger inte någon speciell ordning. Ett visst element kan endast förekomma en gång. HashSet, utnyttjar hashvärden för snabbt hitta rätt värde Avbildningstabeller (maps på engelska) Tabeller i vilka man använder söknycklar för att komma åt värdena Dictionary, implementerad med hjälp av en hashtabell SortedDictionary, använder ett binärt sökträd SortedList, uppbyggd med hjälp av en vanlig array
3 Listor Lista; består av en följd med element. Det går att sätta in och ta bort element var som helst i listan. Push Pop Stack; består av en följd med element. Det går endast att sätta in och ta bort element i ena änden. Dequeue Queue; består av en följd med element. Det går endast att sätta in värden i ena änden och komma åt värden i andra änden Enqueue
4 LinkedList, en dubbellänkad lista first last null null 5 2-4
5 Mängder Add 5 Remove 2-4 HashSet; Värdena har ingen speciell ordning Två värden som är lika kan inte förekomma i ett HashSet För värdetyper jämförs elementens värden direkt, men om elementen är av referenstyp så jämförs referenserna
6 Mängder, HashSet class Person : IEquatable<Person> public string Namn get; set; public int Ålder get; set; public override string ToString()return Namn + " är " + Ålder + " år."; public bool Equals(Person enperson)return Namn == enperson.namn && Ålder == enperson.ålder; public override int GetHashCode()return Namn.GetHashCode() ^ Ålder.GetHashCode(); public static void Main() HashSet<Person> laget = new HashSet<Person>(); Person lisa = new Person Namn = "Lisa", Ålder = 43 ; Person nisse1 = new Person Namn = "Nisse", Ålder = 23 ; Person nisse2 = nisse1; Person lasse = new Person Namn = "Lasse", Ålder = 47 ; Person karin1 = new Person Namn = "Karin", Ålder = 39 ; Person karin2 = new Person Namn = "Karin", Ålder = 39 ; exclusive OR laget.add(lisa); laget.add(nisse1); laget.add(nisse2); laget.add(lasse); laget.add(karin1); laget.add(karin2); foreach (Person medlem in laget) Console.WriteLine(medlem); Lisa är 43 år. Nisse är 23 år. Lasse är 47 år. Karin är 39 år.
7 Avbildningstabeller, SortedDictionary root bad 2 ask 12 null far 3 null and null null bar null zoo null SortedDictionary; består av ett binärt sökträd Lägg märke till att söknycklarnas storlek ökar från vänster mot höger i trädet! I det här exempel utgörs söknycklarna av trestaviga ord, och värdena av heltal null dyr 5 null
8 SortedDictionery, ett exempel using System; using System.Collections.Generic; namespace Telefonlistan class Program static void Main(string[] args) SortedDictionary<string, int> telefonlistan = new SortedDictionary<string, int>(stringcomparer.currentcultureignorecase); telefonlistan.add("öbo Nisse", 34512); telefonlistan.add("strand Eva", ); telefonlistan.add("klen Sven", 56855); telefonlistan.add("bong Oskar", ); telefonlistan.add("hurtig Karin", 88860); foreach (KeyValuePair<string, int> abonnent in telefonlistan) Console.WriteLine(abonnent.Key + " har telefonnummer: " + abonnent.value); Bong Oskar har telefonnummer: Hurtig Karin har telefonnummer: Klen Sven har telefonnummer: Strand Eva har telefonnummer: Öbo Nisse har telefonnummer: 34512
9 Datatyp Data bär information genom att representera någonting Datatyp representerar en bestämd typ av data Datatyp = objekt + operationer Enkel datatyp är en datatyp som inte sammansatt av andra datatyper, t ex integer Sammansatt datatyp är en datatyp som är uppbyggd av delar, element, som i sin tur kan bestå av en eller flera datatyper. Elementen är organiserade på ett bestämt sätt Ett element kan beskrivas av dess position eller dess värde Det är inte säkert att ett element alltid har ett värde eller en position, varken distinkt, eller relativt andra elements positioner eller värden 9
10 Abstrakt DataTyp, ADT En ADT är en datatyp som vi inte behöver ta hänsyn till vare sig hur, den är realiserad i ett programspråk eller hårdvara Vi tar inte ställning till hur datastrukturen är uppbyggd, eller hur dess olika operationerna utförs! Fokuset ligger på vad operationerna gör och vilka resultat de ger. 10
11 Abstrakt DataTyp, ADT En ADT är en datatyp som vi inte behöver ta hänsyn till vare sig hur, den är realiserad i ett programspråk eller hårdvara Vi tar inte ställning till hur datastrukturen är uppbyggd, eller hur dess olika operationerna utförs! Fokuset ligger på vad operationerna gör och vilka resultat de ger. 11
12 Abstrakta datatyper, ADT ADT = Abstrakt DataTyp Består av utvalda datastrukturer och operationer implementerade så att de bildar en logisk enhet Jämför med enkla datatyper och deras operationer, plus minus, gånger... Datastrukturerna får ENDAST vara åtkomliga via de operationer som ingår i den abstrakta datatypen! En ADT har en gränsyta utåt bestående av operationer Gränsytan måste vara komplett, någon operation får inte saknas! Endast primitiva operationer ska förekomma. Gränsytan MÅSTE beskrivas av en informell specifikation! Enklast att implementera i ett objektorienterat språk, t ex C++, Java och C# 12
13 En ADT realiseras av datastrukturer Några abstrakta datatyper Stack Kö Prioritetskö Lista en linjärt ordnad mängd med element Mängd, set en oordnad mängd med unika element, kan kombineras med andra mängder Multiset, bag en oordnad mängd som kan innehålla lika element Lexikon, dictionary mängd som har operationer för att söka, lägga till och radera element, men går ej att kombinera med andra mängder Några datastrukturer Linjära strukturer array, enkellänkad lista, dubbellänkad lista, cirkulär lista Grafer Oriktade, enkelriktade, kompletta, täta, glesa, viktade Träd Fri form, rotad, skog, ordnade, binära, binära sökträd, balanserade, flervägssökträd Strukturer med oordnade data Hashtabell 13
14 Gränsytan kan beskrivas med en informell specifikation Gränsytan är synligt Detta döljs av gränsytan För att en ADT ska vara användbar så måste dess gränsyta, 1. Beskrivas så att användaren får tydlig en mental modell 2. Gränsytan måste bestå av alla nödvändiga operationer 3. Gränsytan ska vara minimal, endast primitiva operationer! 4. Varje operation måste beskrivas med hjälp av operationens kontrakt a) Beskrivning av vad operationen utför, OBS! inte hur den utför... b) Villkor som måste vara uppfyllda innan operationen anropas c) Villkor som är uppnådda efter att operationen har exekverat 5. Varje operations prototyp måste anges 14
15 Den abstrakta datatypens namn Beskrivning av ADT Queue Operationer som ingår i ADT Queue En operations prototyp En operations kontrakt ADT Stack Ett exempel på en informell specifikation av gränsytan för en ADT Beskrivning Stack är en abstrakt datatyp som består av värden vars positioner är ordnade i en sammanhållen linjär följd. Den ena änden av de linjärt ordnade positionerna utgör stackens topp. Endast det värde som finns i stackens topp går att komma åt och ta bort, alla andra värden i stacken är oåtkomliga. Det är endast möjligt att sätta in nya värden i stackens topp. Operationer och deras kontrakt void Push(double anumber); Lägger in ett värde på stackens topp. Precondition: Alltid uppfyllt Postkondition: Värdet anumber är inlagt vid stackens topp double Pop(); Tar bort värdet vid stackens topp och returnerar det. Precondition: Stacken får inte vara tom. Postcondition: Värdet vid toppen är borttaget och är returnerat. Här saknas ett antal operationer för att ADT Stack ska bli praktiskt användbar, vilka? 15
16 Ett exempel, gränsytan för en stack /// <summary> /// ADT Stack /// Stack är en abstrakt datatyp som består av värden vars positioner är ordnade i en /// sammanhållen linjär följd. Den ena änden av de linjärt ordnade positionerna utgör /// stackens topp. Endast det värde som finns i stackens topp går att komma åt och ta /// bort, alla andra värden i stacken är oåtkomliga. Det är endast möjligt att sätta /// in nya värden i stackens topp. /// /// Programmerare: Hans-Edy Mårtensson /// Datum: /// </summary> interface IStack /// <summary> /// Lägger in ett värde på stackens topp. /// Precondition: Alltid uppfyllt. /// Postkondition: Värdet anumber är inlagt vid stackens topp. /// </summary> /// <param name="anumber">värdet anumber är inlagt vid stackens topp</param> void Push(double anumber); /// <summary> /// Tar bort värdet vid stackens topp och returnerar det. /// Precondition: Stacken får inte vara tom. /// Postcondition: Värdet vid toppen är borttaget och är returnerat. /// </summary> /// <returns></returns> double Pop(); // och så vidare... 16
17 En datastruktur för ADT Stack public class ArrayStack : IStack private double[] array = null; int size = 0; Detta garanterar att ArrayStack implementerar alla metoder som är deklarerade i interface IStack public ArrayStack() array = new double[2]; public void Push(double anumber) if (size == array.length) grow(); array[size++] = anumber; Den här datastrukturen använder en array. När arrayen blir för liten byts den ut mot en dubbelt så stor. private void grow() double[] newarray = new double[2 * array.length]; int index = 0; foreach(double item in array) newarray[index++] = item; array = newarray; public double Pop() 17
18 Exempel på användning av ADT STack using System; class Program public static void Main() IStack minstack = new ArrayStack(); for (int tal = 1; tal < 10; tal++) minstack.push(tal); Det operationer som är tillgängliga för ADT Stack bestäms av stackens gränsyta, IStack. IStack fungerar som en fasad som avskärmar den datastruktur som implementerar stacken Vilken datastruktur som ska användas kan den som är i behov av stacken själv välja beroende på vilka prestanda som är intressanta för lösningen. //Console.WriteLine("Antal värden i stacken: " + minstack.count()); while (!minstack.isempty()) Console.WriteLine(minStack.Pop()); Console.ReadKey(); Count går inte att anropa via minstack, på grund av att den metoden saknas i gränsytan, IStack. 18
19 Några interfaces för Collections i.net En samling, collection, kan implementera flera olika interfaces, beroende på vilka egenskaper som är intressanta att använda Några vanliga interfaces är, ICollection<T>, har metoder för lägga till och ta bort värden, tömma samlingen, undersöka om samlingen innehåller ett värde, med mera... IEnumerable<T>, har en metod som returnerar en referens av typen IEnumerator. En sådan referens gör det möjligt att iterera över en samling med värden. IList<T>, Gör det möjligt att använda index för att nå objekt i en samling IDictionary<T>, implementeras av samlingar bestående av nyckelvärde par Se
20 Ett exempel med gränsytor mot en samling av objekt using System; using System.Collections.Generic; public class Program public static void Main() Person kalle = new Person("Kalle Anka", 42); Person musse = new Person("Musse Pigg", 35); Person janne = new Person("Jan Långben", 28); Person zeke = new Person("Zeke Varg", 52); ICollection<Person> gränsytan = new List<Person>(); gränsytan.add(kalle); gränsytan.add(janne); gränsytan.add(zeke); // Stöd för index finns inte i ICollection, använd IList //for (int i=0; i<gränsytan.count; i++) // // Console.WriteLine(gränsytan[i]); // // Följande är möjligt på grund av att ICollection ärver av IEnumerable IEnumerable<Person> uppräkningsbara = gränsytan; foreach(person enperson in uppräkningsbara) Console.WriteLine(enPerson); // Interface IEnumerable innehåller inte metoden Add // uppräkningsbara.add(zeke);
21 Tar det längre tid att exekvera en operation om fler värden läggs in? Tidskomplexitet För att beskriva hur tiden för att köra en operation växer med antal värden som ingår i en samling används Ordo-begreppet O(1) betyder att tiden för att köra operationen påverkas inte av antalet värden. O(n) betyder att tiden i värsta fall ökar i proportion med ökningen av antal värden. Om antalet värden, n, ökar till det dubbla, 2n, ökar även tiden för exekveringen av operationen till det dubbla. O(n 2 ) betyder att tiden i värsta fall ökar i kvadrat jämfört mot ökningen av antalet värden, n. Om antalet värden ökar från n till 2n så ökar tiden med kvadraten av 2n det vill säga 4n O(log(n)) betyder att tiden i värsta fall ökar med logaritmen av ökningen av antalet värden, n. Om antalet värden ökar från n till 2n så ökar tiden med logaritmen av 2n det vill säga log(2n) O(f(n)) betyder att tiden i värsta fall ökar med funktionen f(n) jämfört med ökningen av antalet värden, n. Om antalet värden ökar från n till 2n så ökar tiden med f(2n)
22 Hashtabell med öppen hashning Entries Bucket list Buckets Länkad lista Länkad lista Länkad lista Länkad lista Länkad lista Bucket list är en array med referenser till länkade listor, buckets. Antal element i arrayen bör minst vara lika många som antal objekt som får förekomma i hashtabellen Antal element bör vara ett primtal för att man ska få bästa möjliga spridning Rätt entries beräknas med hjälp av objektens hash-kod. En bra hashkod ska ge en slumpmässig spridning och vara snabb att beräkna I C# har alla objekt en färdig metod för att beräkna hash-koden. En bra egenskap! Så länge som fyllnadsgraden är låg, (antal insatta objekt / antal element) < 1 får man extremt snabba sökningar, tiden är proportionell mot O(1), dvs är oberoende av antal insatta värden i hashtabellen! En dålig egenskap! Det går inte att hålla objekten i en hashtabell sorterade i någon önskad ordning. 22
23 Ett exempel på hashtabell, del 1 using System.Collections.Generic; class Hashtabell private LinkedList<Person>[] bucketlist; public Hashtabell(int nrofbuckets) bucketlist = new LinkedList<Person>[nrOfBuckets]; for (int i = 0; i < bucketlist.length; i++) bucketlist[i] = new LinkedList<Person>(); public void Add(Person enperson) int entry = getentry(enperson.gethashcode()); bucketlist[entry].addlast(enperson); private int getentry(int hashcode) int entry = hashcode % bucketlist.length; return (entry < 0)? -entry : entry; public Person Get(string personnumret) int entry = getentry(personnumret.gethashcode()); foreach (Person enperson in bucketlist[entry]) if (enperson.personnr == personnumret) return enperson; return null; public void Remove(string personnumret) Person enperson = Get(personnumret); if (enperson!= null) int entry = getentry(personnumret.gethashcode()); bucketlist[entry].remove(enperson); 23
24 Ett binärt sökträd och dess noder root 24
25 Traversering av ett binärt sökträd public double[] GetSortedArray() List<double> lista = new List<double>(); inorder(root, lista); return lista.toarray(); private void inorder(node subtreeroot, List<double> listan) if (subtreeroot == null) return; inorder(subtreeroot.left, listan); listan.add(subtreeroot.value); inorder(subtreeroot.right, listan); Tiden för att besöka varje värde blir proportionell mot antal noder i trädet. Varje nod innebär två vägval. Balanserat träd: tiden är proportionell mot n Degenerad lista: tiden är proportionell mot n 25
26 Insättning av ett värde i ett binärt using System.Collections.Generic; sökträd public class BinarySearchTree private class Node public double Value; public Node Left; public Node Right; private Node root = null; public void Add(double anitem) add(ref root, anitem); Tiden för insättning av ett nytt värde blir proportionell mot den tid det tar att söka rätt på platsen för det nya värdet. Balanserat träd: tiden är proportionell mot log(n) Degenerad lista: tiden är proportionell mot n Vad händer om antal noder ökat till det dubbla för ett balanserat binärt träd? log 2 (2n) = log 2 (2) + log 2 (n) = 1 + log 2 (n), det vill säga att tiden ökar med en konstant, i det här exemplet med 1. För en degenerad lista fördubblas tiden om antalet noder fördubblas. private void add(ref Node subtreeroot, double anitem) if (subtreeroot == null) subtreeroot = new Node() Value = anitem, Left = null, Right = null ; else if (anitem < subtreeroot.value) add(ref subtreeroot.left, anitem); else add(ref subtreeroot.right, anitem); 26
27 Några för och nackdelar med binära sökträd Fördelar Mycket snabbare sökningar än i linjära strukturer som till exempel arrayer eller länkade listor, tiden är proportionerligt mot O(log(n)) förutsatt att det binära sökträdet är balanserat Nackdelar I värsta fall kan alla noder enbart hamna till vänster eller enbart till höger. Trädet degenererar till en enkellänkad lista. Tider för insättning och sökning blir motsvarande en enkellänkad lista, proportionella mot O(n) En mer komplicerad datastruktur att implementera än en enkel-länkad lista eller självväxande array. 27
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
Föreläsning 3 Datastrukturer (DAT037)
Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-07 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra
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
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
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
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
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
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
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ä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
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
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
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.
Föreläsning 3 Datastrukturer (DAT037)
Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 6 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 1
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
Föreläsning 1 Datastrukturer (DAT037)
Föreläsning 1 Datastrukturer (DAT037) Fredrik Lindblad 1 30 oktober 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
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:
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ösningsförslag till tentamen Datastrukturer, DAT037,
Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-04-05 1. q.dequeue() tar O(1) (eventuellt amorterat) s.contains(x) tar O(1) pq.add(x) tar O(log i) I värsta fall exekveras innehållet i if-satsen.
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
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
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:
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
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
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
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ö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.
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-10-30 Repetition Analys av tidskomplexitet. Kostnadsmodeller. Asymptotisk komplexitet/notation. Dynamiska arrayer. Amorterad tidskomplexitet
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
Föreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 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
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
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ä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
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
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
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
Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34
Programmering i C++ EDAF30 Dynamiska datastrukturer EDAF30 (Föreläsning 11) HT 2014 1 / 34 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd Säkrare minneshantering (shared_ptr och unique_ptr)
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
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
Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31
Programmering i C++ EDA623 Dynamiska datastrukturer EDA623 (Föreläsning 11) HT 2013 1 / 31 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd EDA623 (Föreläsning 11) HT 2013 2 / 31 Länkade
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
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
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
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-05 Repetition Förra gången: Listor, stackar, köer. Länkade listor, pekarjonglering. Idag: Cirkulära arrayer. Dynamiska arrayer. Amorterad
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
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
Tentamen Datastrukturer D DAT 035/INN960
Tentamen Datastrukturer D DAT 035/INN960 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14 Idag Frågor? Är något oklart inför tentan? Sammanfattning Exempel från föreläsning 1 Dåligt val av datastruktur public class Bits {
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
Polymorfi. Objektorienterad och komponentbaserad programmering
Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende
Tentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
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[],
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.
Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)
Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng
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)
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
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
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ö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
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
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:
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
TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (7) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi
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 Evaluate postfix expressions Läsanvisningar
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
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:
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
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
Föreläsning 11. ADT:er och datastrukturer
Föreläsning 11 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
Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande
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
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning
ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack
Stack och Kö -Implementering - Tilllämpningar ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition:
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
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och
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[])
TENTAMEN: Algoritmer och datastrukturer. Läs detta!
1 (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi
Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan
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
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
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?
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
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
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
Föreläsning 4 Datastrukturer (DAT037)
Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra
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
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
Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
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
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
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
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.
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
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
Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Laboration 2 Datastrukturer En liten uppgift Frågor 1 Laboration 2 - Datastrukturer Länkade datastrukturer Stack Kö (En. Queue) Lista
Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö
Datastrukturer och algoritmer Föreläsning 4 Test, Stack och Kö 1 Innehåll Test Datatyperna Stack och kö Specifikation och Gränssnitt Konstruktion Tillämpning 2 Testa VIKTIGT! Test går att göra under många
Facit Tentamen TDDC (7)
Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar
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