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.