För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.

Slides:



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

Sökning och sortering Linda Mannila
Fortsättningskurs i Programmering lektion 6
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Binära Sökträd, kapitel 19
Polymorfism.
Programmeringsteknik för K och Media
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
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
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
© 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.
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
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 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
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
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
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.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
INTRODUKTION TILL PROGRAMMERING
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:
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Länkade listor Binära träd
Träd -Allmänt om träd -Binärt träd -Filkomprimering med Huffman träd
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
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.
7. Delegerare och notifierare
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
TILLÄMPAD DATALOGI (TILDA) Övning 4
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
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
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.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
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. 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 8: Exempel och problemlösning
Presentationens avskrift:

För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel 19, 20. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel 19, 20.

För utveckling av verksamhet, produkter och livskvalitet. Speciella träd -Binära Sökträd Har ordnade element Mindre värde till vänster Högre värde till höger

För utveckling av verksamhet, produkter och livskvalitet. Är det ett sökträd?

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

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

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 ()

För utveckling av verksamhet, produkter och livskvalitet. BinarySearchTree-insert (Comparable x) public void insert ( Comparable x) { root = isert(x, root); } public BinaryNode insert( Comparable x, BinaryNode t){ if(t==null) t= new BinaryNode(x); else if ( x.compareTo(t.element) 0) t.right=findPlaceAndLink(x, t.right); else throw new DuplicateException(" No dublicates"); return t; }

För utveckling av verksamhet, produkter och livskvalitet. Binära Sökträd – metoden find()- mycket kort söktid

För utveckling av verksamhet, produkter och livskvalitet. Binära Sökträd – metoden findMax()-mycket kort söktid

För utveckling av verksamhet, produkter och livskvalitet. BinarySearchTree-find( ) public String find ( Comparable x) { BinaryNode n= findNode( x, root); if(n==null) return null; else return n.element; } public BinaryNode findNode( Compare x, BinaryNode t) { while( t!=null) { if(x.compareTo(t.element) 0) t=t.right; else return t ; // hittat!! } return null; // inte hittat !! }

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. Farliga specialfall! Trädet blir en länkad lista

För utveckling av verksamhet, produkter och livskvalitet. Lösningen? Balancerade 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

För utveckling av verksamhet, produkter och livskvalitet. Balancerad Search Trees – AVL 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. Balanced Search Trees – AVL HL=1 HL– HR = 1 – 0 = 1 HR=0 Ett träd är balancerad 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 – Balanced? 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 – Rotate right 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. AA – Träd  En ny nod skapas alltid som löv och har nivå 1.  En horizontal länk är en förbindelase med en nod med samma nivå..  Två horisontala länkar är inte tilllåtna. Split!

För utveckling av verksamhet, produkter och livskvalitet.  Vänster länk är inte tilllåten  I det fallat gör – screw! AA – Träd 4545

För utveckling av verksamhet, produkter och livskvalitet. AA – Träd : Operation split() A B 2010 AB

För utveckling av verksamhet, produkter och livskvalitet. AA – Träd : Operation skew() A 1015 Bc 10 ABc

För utveckling av verksamhet, produkter och livskvalitet. Hash Tabeller? Varför en annan datastruktur? 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 functioner använder associerade “key” ( som kan vara data i sig ). Hash funktionerna är olika för olika sorts data. Integers Images Strings Etc…

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

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 den? hashfunc(”Daniel”) → 589 hashfunc(”leinaD”) → 589 Bättre lösning men….! hashfunc(”TestValue”) → Wrapp värdet till ett visst intervall Vilken? Arraystorleken…

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å For example: ”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. Hur löser man kollision? Oavsett hur unika keys en hash- funktionen tar fram, kommer kollisioner alltid att inträffa. Terminology Load factor

För utveckling av verksamhet, produkter och livskvalitet. Lösningar Linear probing ( undersökning ??) Quadratic probing Double hashing Separate chaining

För utveckling av verksamhet, produkter och livskvalitet. Linear probing 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. Linear probing Fenomen kallat: Primary clusters

För utveckling av verksamhet, produkter och livskvalitet. Linear probing Bygger upp kluster Påverkar exekveringstiden för insert () och find()!

För utveckling av verksamhet, produkter och livskvalitet. Quadratic probing Försök undvika“primary clusters “ Snabbare än linjär probing Kvadratisk inkrementation av undersöknings-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. Quadratic probing Garantera att hitta fria platser om de finns 1 2 = 12 2 = 43 2 = 9

För utveckling av verksamhet, produkter och livskvalitet. Double hashing Använder ytterligare en till hash funktion för att hitta fri plats. X = hash(obj); X2 = hash2(obj); X=18, X2=7X+1*X2,X+2*X2,X+3*X2,X+4*X2,... X=18, X2=718+1*7,18+2*7,17+3*7,18+4*7,...

För utveckling av verksamhet, produkter och livskvalitet. Separate chaining Varje hash-position har en länkad lista. Påverkar inte andra värdet, 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 primtal för array storleken Separate chaining LF < 1 Ingen dubblering, länkade listor är dynamiska ! Kan leda till linjär sökning men i verklighetet ganska kort Double hash probing Eliminerar kluster

För utveckling av verksamhet, produkter och livskvalitet. Hash tabeller i java I klassen java.util finns klassen HashMap som implementerar interfacet Map. public int hashCode() och public boolean equals(Object x) så att man får identisk hashkod för objekt som är lika enligt metoden equals. Anm: För flera av Javas egna klasser är detta redan gjort. T ex klassen String.

För utveckling av verksamhet, produkter och livskvalitet. Använding av HashMap Antag vi vill vill sätta in Person-objekt i en hashtabell, med nyckel = personens namn: class Person { String name; // namn long pNbr; // personnummer public Person(String n, long pnbr) {...} public boolean equals(Object rhs) { return name.equals(((Person) rhs).name); } // andra metoder i klassen Person }

För utveckling av verksamhet, produkter och livskvalitet. Använding av HashMap HashMap reg = new HashMap (); Person p = new Person("Kalle", ); reg.put(p.name, p);... Person q = reg.get("Kalle"); if (q != null) {... } Observera att vi här inte själva behöver omdefiniera hashCode eftersom nycklarna är av typen String, och i denna klass är redan hashCode omdefinierad ( så att strängar för vilka equals ger true också får samma hashkod).

För utveckling av verksamhet, produkter och livskvalitet. Användning av HashSet Om vi vill sätta in Person-objekt i en samling av typen HashSet och gör så här: HashSet reg = new HashSet (); Person p = new Person("Kalle", ); reg.add(p);... if (reg.contains(new Person("Kalle",0)) System.out.println("found"); else System.out.println("not found"); så blir utskriften ”not found”

För utveckling av verksamhet, produkter och livskvalitet. Anledningen är att när Kalle sätts in beräknas hashkoden för objektet som p refererar till och placeringen i tabellen beror på denna. När vi sedan söker efter Kalle baseras sökningen på hashkoden av det objekt som är parameter till contains-metoden och detta är ett annat objekt (med samma namn). 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 Kalle sattes in. Användning av HashSet

För utveckling av verksamhet, produkter och livskvalitet. hashCode-metod Vi kan se till att alla Person-objekt som har samma namn också får samma hashkod genom att omdefiniera metoden hashCode i klassen Person: class Person { String name; // namn long pNbr; // personnummer public Person(String n, long pnbr) {...} public boolean equals(Object rhs) {som förut} public int hashCode() { return name.hashCode(); } // övriga metoder i klassen Person }