För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

2D1311 Programmeringsteknik med PBL
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
Fortsättningskurs i Programmering lektion 6
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Binära Sökträd, kapitel 19
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Programmeringsteknik för K och Media
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
Träd och tillämpningar Data Structures & Problem Solving using Java -- Kapitel 19, 12.
Algoritm analys och rekursiva metoder kap 5,7
i olika programmeringsspråk
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Datasamlingar och generiska enheter
Föreläsning 5 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.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Algoritmer och datastrukturer
Programmeringsteknik för Media1 & K1
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Logikprogrammering 21/10 Binära träd
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Datastrukturer och algoritmer
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
Graph och graph-algoritmer. Några enkla graph teorier Hur IP trafik hittar destinationen i Internät ? GPS-system ? Sociala nätverk. Vanligaste frågeställningar:
Länkade listor Binära träd
Träd -Allmänt om träd -Binärt träd -Filkomprimering med Huffman träd
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sorterings algoritmer.
TILLÄMPAD DATALOGI (TILDA) Övning 4
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
1 Objektorienterad programmering för ingenjörer, VT04 Kort repetition av C-programmering och nyttiga verktyg. Tomas Larsson B439.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
DA7351 Programmering 1 Fält och objekt Tvådimensionella fält Sortera fält Föreläsning 13.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd

För utveckling av verksamhet, produkter och livskvalitet. 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 sorterad I symbol tabeller, där objekt lagras i par ( key och value ) Binära Sökträd Hash tabeller Binära heap och prioritets köer

För utveckling av verksamhet, produkter och livskvalitet. Symbol tabeller- med arrayer eller länkade struktur För komplexa objekt som Customer, Person, mm….och för att kunna uppnå effektiv sökning är det bäst att man associerar en nyckel med ett värde ( objekt ) (id_nummer, Customer ) Key Value key1key2 key3keyN value1value2value3valueN keyArray valueArray

För utveckling av verksamhet, produkter och livskvalitet. Operationer i en Symbol Tabell -klass public class ST, Value> { ST() // create a symbol table void put(Key key, Value v) // put key-value pair into the table Value get(Key key) // return value paired with key boolean contains(Key key) // is there a value paired with key? }

För utveckling av verksamhet, produkter och livskvalitet. Binär sökträd Binära träd Maxim två barn för varje node Left / Right barn Har ordnade element Mindre värde till vänster Högre värde till höger

För utveckling av verksamhet, produkter och livskvalitet. Träd- operationer (metoder) Oftast Rekursiva ! Mycket effektiva, enkla att förstå Vanliga metoder Beräkna antalet noder i trädet, size() Lägg till ny nod i träd, insert(), put() Ta bort nod ur träd, remove(), get() Lista ut innehållet i trädet, print() Pre-Order In-Order Post-Order 1 2 3

För utveckling av verksamhet, produkter och livskvalitet. classen – Node ”3” class BinaryNode { AnyType element; Binary Node left; Binary Node right; Binary Node( AnyType data) { element=data; left=right=null; }

För utveckling av verksamhet, produkter och livskvalitet....och BinarySearchTree public class BinarySearchTree < AnyType extends Comparable > { BinaryNode root; public BinarySearchTree() { root= null; } -public void insert -public nbrOfNodes -public remove -public find andra }

För utveckling av verksamhet, produkter och livskvalitet. Insert ()

För utveckling av verksamhet, produkter och livskvalitet. Insert ()

För utveckling av verksamhet, produkter och livskvalitet. Insert ()

För utveckling av verksamhet, produkter och livskvalitet. insert(), består av 2 delar public void insert( AnyType x ) { root = findAndInsert( x, root ); } protected BinaryNode findAndInsert( AnyType x, BinaryNode t ) { if( t == null ) t = new BinaryNode ( x ); else if( x.compareTo( t.element ) 0 ) t.right = findAndInsert( x, t.right ); else throw new DuplicateItemException( x. toString( ) ); // Dubblett ej ok return t; } anrop av findAndInsert

För utveckling av verksamhet, produkter och livskvalitet. Remove () a) Om noden är löv

För utveckling av verksamhet, produkter och livskvalitet. Remove () b) Om noden har ett barn

För utveckling av verksamhet, produkter och livskvalitet. Remove () c) Om noden har två barn 3 Ersätt värdet i noden med den minsta värdet i i det högra delträdet och sedan ta bort den noden

För utveckling av verksamhet, produkter och livskvalitet. Remove består av 2 delar public void remove( AnyType x ) { root = findAndRemove( x, root ); }

För utveckling av verksamhet, produkter och livskvalitet. protected BinaryNode findAndRemove( AnyType x, BinaryNode t ) { if( t == null ) throw new ItemNotFoundException( x.toString( ) ); if( x.compareTo( t.element ) 0 ) t.right = findAndRemove( x, t.right ); else if( t.left != null && t.right != null ) // Two children { t.element = findMin( t.right ).element; t.right = findAndRemoveMin( t.right ); } else{ if( t.left != null ) t=t.left; // only left child else t=t.right; ( only right child } return t; }

För utveckling av verksamhet, produkter och livskvalitet. Mycket korta sökningstider!

För utveckling av verksamhet, produkter och livskvalitet. Farliga “worst cases”

För utveckling av verksamhet, produkter och livskvalitet. Lösningen? Balanserade träd Hur ? Försök hålla djupet av trädet så lågt som möjligt.

För utveckling av verksamhet, produkter och livskvalitet. Hur? Olika tekniker att balancera AVL Träd Red Black Träd AA Träd Andra ….

För utveckling av verksamhet, produkter och livskvalitet. Balanserad SökTräd Ett träd är balancerad om höjdskillnaden mellan den vänstra delträdet och den högra delträdet är maximum 1. HR=1 HL=2 HL– HR = 2 – 1 = 1

För utveckling av verksamhet, produkter och livskvalitet. Balanserad Sök Träd – AVL HL=1 HL– HR = 1 – 0 = 1 HR=0 Ett träd är balanserad om höjdskillnaden mellan den vänstra delträdet och den högra delträdet är maximum 1.

För utveckling av verksamhet, produkter och livskvalitet. BST: AVL – Balanserad? insert

För utveckling av verksamhet, produkter och livskvalitet. BST: AVL – Rotation höger A k1 B C k2 ABC k1 k2

För utveckling av verksamhet, produkter och livskvalitet. BST: AVL – Höger rotation k k1

För utveckling av verksamhet, produkter och livskvalitet. BST: AVL – Rotation vänster A k1 B C k2 A B C k1 k2

För utveckling av verksamhet, produkter och livskvalitet. private class Node { private Key key; // sorted by key private Value val; // associated data private Node left, Node right; // left and right subtrees private int N; // number of nodes in subtree public Node(Key key, Value val, int N) { this.key = key; this.val = val; this.N = N; } Sök träd som Symbol tabell

För utveckling av verksamhet, produkter och livskvalitet. public class BST, Value> { private Node root; // root of BST public void put(Key key, Value val) { root = put (root, key, val); } private Node put(Node x, Key key, Value val) { if (x == null) return new Node(key, val, 1); int cmp = key.compareTo(x.key); if (cmp < 0) x.left = put(x.left, key, val); else if ( cmp > 0) x.right = put(x.right, key, val); else x.val = val; // if equals, change value in node x.N = 1 + size(x.left) + size(x.right); return x; }

För utveckling av verksamhet, produkter och livskvalitet. java.util.* Innehåller klassen TreeSet och TreeMap som garanterar O(logN) i värsta fall för sökning, insettning och borttagning TreeSet- En klass som följer Set-interface ( add, contains, remove) TreeMap- En klass som följer Map-interface ( get, put, remove) Båda är implementerade med ett slags balanserad träd ( Red-black) Objekten som sätts in TreeSet och nycklarna i TreeMap måste implementera interfacen Comparable eller ha en Comparator-objekt.

För utveckling av verksamhet, produkter och livskvalitet. Hashing / Hash tabeller

För utveckling av verksamhet, produkter och livskvalitet. Hash Tabell Fråga: Varför en annan datastruktur? Svar: Konstant tid för både insert () - och find() - operationer

För utveckling av verksamhet, produkter och livskvalitet. Hash? Insert ”Daniel” =18 Find

För utveckling av verksamhet, produkter och livskvalitet. Hashfunktioner! Hash funktionerna är olika för olika sorts data. String Integers Images Person Etc…

För utveckling av verksamhet, produkter och livskvalitet. Hashing integers? Tänk 16bit int => 0 – Skapa int[] arr = new int[65536]; Add i => arr[i]++; Sök value j => Is arr[j] > 0? Ta bort value k => arr[k]--; Men för en... Java int : 32bit 4 miljoner platser => opraktisk!

För utveckling av verksamhet, produkter och livskvalitet. Exempel av hash funktion D D a a n n i i e e l l ”Daniel” = 589

För utveckling av verksamhet, produkter och livskvalitet. Men... Hur unik är hash fuktionen? hashfunc(”Daniel”) → 589 hashfunc(”leinaD”) → 589 Bättre lösning bättre hashfunc som skapar mer unika värde hash(”Daniel”) → Wrapp värdet till ett visst intervall % array.lenght ( tebellens storlek)

För utveckling av verksamhet, produkter och livskvalitet. En bättre hash funktion Ett bättre sätt att beräkna hash värdet Om vi har en text sträng av längd n+1 och alla tecken har index A n, A n-1,...,A 0 gör s = A n X n + A n-1 X n A 0 X 0 = = ((A n )X + A n-1 )X A 0 Använd hashValue = s % array.length

För utveckling av verksamhet, produkter och livskvalitet. Och då Till exempel: ”Danne” (((’D’)128 + ’a’)128 + ’n’)128 + ’n’)128 + ’e’ = (((68) ) ) ) = hashValue = % array.length om length = 7919 (prim nummer) => hashValue = % 7919 = 2690

För utveckling av verksamhet, produkter och livskvalitet. En hash function för String public static int hash ( String key, int tableSize) { int hashVal=0; for (int i=0;i<key.length(); i++) hasVal=hashVal*128+key.charAt(i)) % tableSize; return hashVal; }

För utveckling av verksamhet, produkter och livskvalitet...hashCode för egna object public class Employee { int employeeId; String name; Department public int hashCode() { int hash = 1; hash = hash * 17 + employeeId; hash = hash * 31 + name.hashCode(); hash = hash * 13 + (dept == null ? 0 : dept.hashCode()); return hash; }

För utveckling av verksamhet, produkter och livskvalitet. Hur löser man kollision? Oavsätt hur unika nyckel en hash- funktionen räknar, kollision alltid inträffas. Terminology Load factor

För utveckling av verksamhet, produkter och livskvalitet. Lösningar Slutna tabeller Linjär undersöknings teknik Kvadratisk undersöknings teknik Öppna tabeller Länkade listor ( separate chaining)

För utveckling av verksamhet, produkter och livskvalitet. Linjär undersöknings teknik Sök fram till näst lediga platsen. hashfunc ( ) X=18X+1,X+2,X+3,X+4,X+5,...

För utveckling av verksamhet, produkter och livskvalitet. Linjär teknik Fenomen kallat: Primary clusters ( primär kluster)

För utveckling av verksamhet, produkter och livskvalitet. Linjär undersöknings teknik Bygger upp kluster Påverkar exekveringstiden för insert () och find() !

För utveckling av verksamhet, produkter och livskvalitet. Kvadratisk teknik (Quadratic probing) Försök undvika “primary clusters “ Snabare en linjär Kvadratisk inkrementation av undersökning avståndet X=18X+1 2,X+2 2,X+3 2,X+4 2,X+5 2,...

För utveckling av verksamhet, produkter och livskvalitet. Kvadratisk teknik Garantera att hitta fria platser om de finns 1 2 = 12 2 = 43 2 = 9

För utveckling av verksamhet, produkter och livskvalitet. Separate chaining (separat länkning ) Varje hash position har en länkad lista. Påverkar inte andra värde, probing görs bara i listan. Varje element I tabellen är en länkad lista.

För utveckling av verksamhet, produkter och livskvalitet. Separate chaining H H H H H H H H H H H H H H H H H H Insert

För utveckling av verksamhet, produkter och livskvalitet. Jämförelse Linear probing Enkel Kan resultera i linjär söktid Quadratic probing Kräver Load factor < 0.5 annars rehashing ?? Kräver prim tal för array storleken Separate chaining LF < 1 Ingen dubblering, länkade listor är dinamiska ! Kan leda till linjär sökning men I verklighetet ganska kort Double hash probing Eliminerar kluster