Algoritmer och datastrukturer Hash Tabeller och Graf 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 Find ”Daniel” =18 För utveckling av verksamhet, produkter och livskvalitet. Hashfunktioner! • • Hash functioner använder associerade “key” ( som kan vara data i sig ) för att få fram datan. 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 – 65 535 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 miljoner platser => opraktisk! För utveckling av verksamhet, produkter och livskvalitet. Exempel av hash funktion ”Daniel” D a n i e l 68 + 97 + 110 + 105+ 101 + 108 = 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”) → 129310392 • Wrapp värdet till ett visst intervall 129310392 % 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 An, An-1,...,A0 gör s = AnXn + An-1Xn-1 +...+ A0X0 = = ((An)X + An-1)X +...+ A0 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)128 + 97)128 + 110)128 + 110)128 + 101 = 18 458 851 173 hashValue = 18 458 851 173 % array.length om length = 7919 (prim nummer) => hashValue = 18 458 851 173 % 7919 = 2690 För utveckling av verksamhet, produkter och livskvalitet. Hur löser man kollision? • • Oavsett hur unika nyckel en hash- funktionen räknar fram, kollision alltid inträffas. Terminology • Load factor • # used positions LF # total avaliable positions För utveckling av verksamhet, produkter och livskvalitet. Lösningar • • • Linear probing ( linjer undersöknings teknik) Quadratic probing (kvadratisk undersöknings teknik Separate chaining ( öppna tabeller) För utveckling av verksamhet, produkter och livskvalitet. Linjär undersöknings teknik • Sök fram till näst lediga platsen. hashfunc( ) 10 18 X=18 X+1, X+2, X+3, X+4, För utveckling av verksamhet, produkter och livskvalitet. X+5, ... Linear probing • 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() ! • Måste använda “lazy deletion” vid remove (). Dvs, elementen i tabbelen måste vara “activ or deleted” För utveckling av verksamhet, produkter och livskvalitet. Quadratic probing • • • Försök undvika “primary clusters “ Snabare en linjär Kvadratisk inkrementation av undersökning avståndet X=18 X+12, X+22, X+32, X+42, För utveckling av verksamhet, produkter och livskvalitet. X+52, ... Quadratic probing 32 = 9 1 2 1 4 • Garantera att hitta fria platser om de finns 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 Insert H H H H H H H För utveckling av verksamhet, produkter och livskvalitet. H H 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 För utveckling av verksamhet, produkter och livskvalitet. Graph och graph-algoritmer För utveckling av verksamhet, produkter och livskvalitet. Några enkla graf teorier • Hur IP trafik hittar destinationen i Internät ? GPSsystem ? • Sociala nätverk . • Vanligaste frågeställningar: Hur hittar man • från A->B? Hur man beräknar den kortaste vägen mellan dator A och B ? För utveckling av verksamhet, produkter och livskvalitet. Terminology • • • Vertices & edges ( Noder och förbindelse) Paths (väg) • Viktad • Oviktad Göteborg Borås Jönköping Riktad graph 70 är enbart envägs • Visa förbindelse • Vikten för en förbindelse behövs inte vara dessama i Varberg 120 båda riktningarna ( om båda finns) 70 Växjö Halmstad För utveckling av verksamhet, produkter och livskvalitet. Mer terminology Path length • Oviktad path length – antalet förbindelse mellan två nod • Viktad path lengthsumman av vikter mellan två nod Göteborg Borås Jönköping 70 Varberg 120 70 Växjö Halmstad För utveckling av verksamhet, produkter och livskvalitet. Mer terminology • Simple paths ( Enkla vägar) • Innehåller en nod enbart en gång • Cyclic paths ( cykliska vägar) • Startar och slutar i samma nod. Göteborg Borås Jönköping 70 Varberg 120 70 Växjö Halmstad För utveckling av verksamhet, produkter och livskvalitet. Ännu mer terminology • Graph täthet • Refererar till antalet förbindelse i grafen • gles graph • tät graph ( ~~ N2 förbindelse ) Node 1 Node 2 Node 6 Node 1 Node 3 Node 5 Node 2 Node 6 Node 4 För utveckling av verksamhet, produkter och livskvalitet. Node 3 Node 5 Node 4 Graph representation • Adjacent list • Varje node håller en länkad lista som innehåller information om grann- noder och vikt. 2 Node 1 1 4 Node 3 Node 2 2 3 Node 4 8 5 2 2 5 (10) 3 1 (4) 6 (5) 4 5 (2) 7 (4) 5 7 (6) Node 5 6 Node 7 1 2 (2) 4 (1) 4 (3) 10 4 Node 6 1 6 7 6 (1) För utveckling av verksamhet, produkter och livskvalitet. 6 (8) 3 (2) Graph representation • Adjacent matrix • En kvadratisk matris där raderna och kolumnerna är representerade av noder och elementen i matrisen av förbindelser. För viktad graph innehåller elemnenten i matrisen just vikten 1 2 3 10 3 2 Node 4 8 5 2 6 4 Node 6 Node 7 1 Node 5 5 6 7 3 10 4 4 Node 3 4 1 2 Node 2 1 4 3 2 1 Node 1 2 5 2 2 8 5 6 6 7 För utveckling av verksamhet, produkter och livskvalitet. 4 1 Vad är en förbindelse? public class Edge { public Vertex dest; public double cost; public Edge( Vertex d, double c) { dest=d; cost=c; } } För utveckling av verksamhet, produkter och livskvalitet. Vad är en nod (vertex) ? protected class Vertex { String name; List adjacents; } Vertex (String n) { name = n; adjacents = new LinkedList(); } För utveckling av verksamhet, produkter och livskvalitet. Viktiga frågor … • Den kortaste vägen mellan node A och B • BreadthFirst Algorithm, oviktad graph • Dijkstra’s Algorithm, viktad graph För utveckling av verksamhet, produkter och livskvalitet. Breadth First Algorithm • För oviktade grafer 1 2 Node 1 Node 2 2 0 Node 3 3 Node 5 Node 4 1 Node 6 3 Node 7 För utveckling av verksamhet, produkter och livskvalitet. 0 Node 3 1 Node 1 1 Node 6 2 Node 2 2 Node 4 3 Node 5 3 Node 7 Dijkstra’s Algorithm For viktade grafer • Node 1 Node 2 1 4 Node 3 Distance From 2 2 3 Node 4 8 5 1 3 1 4 Node 6 Node 5 Node 7 1 För utveckling av verksamhet, produkter och livskvalitet. Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Dijkstra’s Algorithm För viktade grfer • 2 Node 1 1 4 Node 3 Node 2 2 3 Node 4 8 5 1 3 Node 5 1 4 Node 6 Node 1 (4) Node 4 6 (5) 2 (6) Node 7 1 För utveckling av verksamhet, produkter och livskvalitet. Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Distance From INF 4 3 INF 1 6 0 INF 1 5 INF INF 3 5 INF Dijkstra’s Algorithm For viktade grapher! • 2 Node 1 1 4 Node 3 Node 2 2 3 Node 4 8 5 1 3 1 4 Node 6 Node 5 Node 6 (5) Node 5 4 (8) (5) Node 7 2 (9) (6) Node 7 1 För utveckling av verksamhet, produkter och livskvalitet. Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Distance From 4 3 1 6 0 1 5 INF 4 8 3 5 INF 4 9 Dijkstra’s Algorithm För viktade grapher! • 2 Node 1 1 4 Node 3 Node 2 2 3 Node 4 8 5 1 3 1 4 Node 6 Node 5 Node 5 2 (7) (6) Node 5 (8) Node 7 (9) Node 7 1 För utveckling av verksamhet, produkter och livskvalitet. Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Distance From 4 3 1 6 0 1 5 2 4 7 8 3 5 5 4 8 9 Dijkstra’s Algorithm För viktade grapher! • 2 Node 1 Node 3 2 3 Node 4 8 5 3 Node 6 Node 7 1 Node 2 1 1 Node 4 1 Node 5 Node 5 2 Node 6 3 Node 7 5 1 4 3 Node 3 Node 2 1 4 Node 1 För utveckling av verksamhet, produkter och livskvalitet. 3 Node 1 3 Node 2 Node 3 1 Node 34 Node 5 Node 6 2 Node 17 Distance From 4 3 1 6 0 1 5 2 7 3 5 5 38 Dijkstra’s algorithm in Java int[][] table = new int[locations.length][2]; for(int i = 0; i < table.length; i++) { table[i][0] = Integer.MAX_VALUE; table[i][1] = -1; } table[fromIndex][0] = 0; // start node PriorityQueue queue = new PriorityQueue(); queue.enqueue(new Distance(fromIndex, 0)); while(!queue.isEmpty()) { Distance d = (Distance)queue.dequeue(); int currentNode = d.getNode(); int currentDistance = d.getDistance(); for(int toNode = 0; toNode < distanceTable.length; toNode++) { int distance = distanceTable[currentNode][toNode]; if(distance > 0) { if((currentDistance + distance) < table[toNode][0]) { table[toNode][0] = currentDistance + distance; table[toNode][1] = currentNode; queue.enqueue(new Distance(toNode, currentDistance + distance)); }}}} System.out.println("Distance: " + table[toIndex][0]); För utveckling av verksamhet, produkter och livskvalitet.