20170426 Graphen IV, Strings I

Werbung
Departement Mathematik und Informatik
Algorithmen und Datenstrukturen, FS17
Prof Dr Christian Tschudin
26. April 2017
Graphenalgorithmen IV
Strings I
Algorithmen und Datenstrukturen, FS17
Wiederholung
I
Was leistet der Floyd-Warshall Algorithmus?
I
Was ist der “Fluss” in einem Graphen?
26. April 2017 — 2 / 25
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 3 / 25
Uebersicht 2017-04-26
I
Zweites Beispiel Ford-Fulkerson
I
Zentralität:
– Degree Centrality, Betweenness Centrality
I
Symboltabelle für Strings:
Trie
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 4 / 25
Ford-Fulkerson: 2. Beispiel (1/4)
I
(s,t)-Cut: Teilt Knoten in zwei Partitionen S und T auf.
Cut-Kapazität: Summe der Gewichte der gerichteten
Kanten von Partition S nach Partition T
I
Minimaler Cut: Cut mit der kleinsten Kapazität
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 5 / 25
Ford-Fulkerson: 2. Beispiel (2/4)
Zusammenhang “minimaler Cut” und “maximaler Fluss”:
I
Max. Fluss hat genau Kapazität des minimalen Cuts.
(Beweis 1956 durch Ford und Fulkerson, sowie
unabhängig durch Elias, Feinstein and Shannon)
I
Recap Ford-Fulkerson-Konstruktion:
a) Starte mit (irgend einem erlaubten) Fluss:
b) solange es einen Restfluss gibt
c) addiere ihn zum bisherigen Fluss
Initialer Fluss habe Kapazität 10
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 6 / 25
Ford-Fulkerson: 2. Beispiel (3/4)
I
Abgeleiteter Graph (um einen Restfluss zu finden):
Pfad gefunden, Weite ist 5
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 7 / 25
Ford-Fulkerson: 2. Beispiel (4/4)
I
Residual (Weite des Restpfads, 5) entlang dem Restpfad
auf bisherigen Fluss anwenden:
Fluss nun 15
I
In diesem Beispiel:
kein Restfluss mehr zu finden, ist maximaler Fluss.
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 8 / 25
Centrality (1/3)
I
In einem Graphen sind nicht alle Knoten gleich “wichtig”:
Wie graduelles Mass definieren für “Zentralität”?
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 9 / 25
Degree Centrality (2/3)
I
Degree Centrality:
misst Anzahl Nachbarn
I
Normierung:
Division durch N − 1
I
Idee: 3 Nachbarn in
einem 10er-Netz ist
zentraler als 3 Nachbarn
in einem 1000er-Netz
I
Erfasst “Transit-Rolle”
nicht.
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 10 / 25
Betweenness Centrality (3/3)
Wieviel “Transit-Verkehr” geht durch einen Knoten?
Zähle Anzahl Paare, zwischen denen ein Knote sitzt.
Beispiel Knote B → 3 (A-C, A-D, A-E)
Als Formel:
I
djk = Anzahl kürzeste Wege zw Knoten j und k
djk (i) = Anzahl kürzeste Wege durch Knoten i
I
Normierung: Division durch (N − 1)(N − 2)/2
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 11 / 25
Symbol-Tabelle für Stringschlüssel
I
Bisher gesehen:
– Sortieren von beliebigen Schlüsseln
– Quicksort, oder Radix-Sort wenn feste Länge
I
Sortierte Ablage wird zur einer Symboltabelle
– erlaubt Suche
– z.B. mit binary search
(Alternative: Hash-Tabelle)
I
Neues Ziel: Symboltabellen für String-Schlüssel
– Suchzeit proportional zur (Abfrage-)Stringlänge
– Existenzabfrage mit nur wenigen Buchstaben
Algorithmen und Datenstrukturen, FS17
Symboltabelle für Strings (Forts.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class StringST<Value> {
void put(String key, Value val)
// put key-value pair into the table
Value get(String key)
// (null if key is absent)
void delete(String key)
// remove key (and its value)
boolean contains(String key)
// is there a value paired with key?
boolean isEmpty()
// is the table empty?
String longestPrefixOf(String s)
// the longest key that is a prefix of s
Iter keysWithPrefix(String s)
// all the keys having s as a prefix
Iter keysThatMatch(String s)
// all the keys that match s
int size()
// number of key-value pairs
Iter keys()
// all the keys in the table
}
26. April 2017 — 12 / 25
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 13 / 25
“Trie”-Datenstruktur
. . . zur Implementierung von String-Symboltabellen.
Trie ist ein Kunstwort:
I
Wortspiel von E. Fredkin 1960 eingeführt:
– wegen einer Datenstruktur für Retrieval
I
Phonetische Verwechslungsgefahr mit “tree”
– deshalb oft Aussprache als “try”
I
Andere Namen für Trie:
– digital tree
– prefix tree (vergleiche Baum für Morse-Code)
I
Varianten:
bitwise trie, compact prefix trie, radix trie u.m.
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 14 / 25
Edward Fredkin (1934 – )
I
Verlässt Caltech Uni mit 19, wird USAF-Pilot
I
Nach Armeedienst bei Bolt Beranek & Newman angestellt
– sieht PDP-1 Prototyp, überzeugt BBN zu Kauf
I
Es gibt noch keine Software für die PDP-1:
– erster Assembler, gründet DECUS (DEC user soc)
– schlägt PDP-1 Umbau vor, führt zum “Interrupt”-Konzept
I
1968 Professur MIT, Boston
– Zusammenarbeit mit Feynman (Physik)
I
Beiträge:
– Fredkin Gate, reversible computing
– zelluläre Automaten, KI
– Digital Philosophy, Reduktionskette :
– Biologie → Chemie → Physik → Informatitionsberechnung
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 15 / 25
Trie-”Anatomie”
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 16 / 25
Suche und Einfügen im Trie
Zu vorangehendem Beispiel:
I
Buchstabenweise den Links in die Tiefe folgen
I
Bei Suchbegriffende:
– Knoten muss Wert haben
– sonst ein “miss”
Laufzeit: proportional zur Länge Suchbegriff
I
Einfügen im Trie:
– zuerst Suche
Dort wo Suche endet:
entweder Wert setzen, oder neuer Kindknoten
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 17 / 25
Trie – Darstellung im Speicher
Bei 26 Buchstaben (A-Z): Jeder Knoten hat Feld mit 26 Zeiger!
I
Bemerkung: Die Schlüssel sind implizit dargestellt.
Wie einen Iterator bauen, der alle Schlüssel ausgibt?
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 18 / 25
Iteratoren für Trie (1/2)
Iterator für alle Prefixe: Preorder-Traversierung (plus Testen auf
Vorhandensein eines Werts)
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 19 / 25
Iteratoren für Trie (2/2)
Iterator bei Vorgabe eines Prefixes:
→ nur dessen Unterbaum traversieren
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 20 / 25
Trie Eigenschaften
I
Es gilt: Anzahl Links ist zwischen O(RN) und O(RNw).
(N = Anzahl Einträge, R = Alphabetumfang, w = durchschn.
Schlüssellänge), d.h. recht gross!
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 21 / 25
Kompaktierung (wg. one-way branching)
I
I
I
Folge von internen
“one-way branches”
wird zusammengefasst,
ebenso “external
one-way branches”
(zu Blättern)
(Kann auch mit
nachfolgender
TST-Darstellung
kombiniert werden)
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 22 / 25
Ternary Search Tries (TST): 1/3
Alternative, um Trie-Speicherbedarf zu reduzieren: TST
I
TST: Jeder Knoten hat
genau drei Links
I
Mittlerer Link:
wie bisher für Prefix
I
Links-/Rechts-Link: für
Unterbäume mit
“kleiner/grösser” als
Knoten-Buchstaben
I
Beachte sells und
shells
(virtueller Link s-->e)
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 23 / 25
Ternary Search Tries (TST): 2/3
1
2
3
4
5
6
7
8
9
Node get(Node x, String key, int d)
// d ist aktuelle Prefix-Länge
{
if (x == null) return null;
char c = key.charAt(d);
if
(c < x.c)
return get(x.left, key, d);
else if (c > x.c)
return get(x.right, key, d);
else if (d < key.length() - 1) return get(x.mid, key, d+1);
else return x;
}
Vergleich Speicherbedarf eines Feldes von R Zeigern vs TST:
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 24 / 25
TST Eigenschaft, Vergleich: 3/3
I
Für TST gilt:
Anzahl Links ist zwischen O(3N) und O(3Nw)
(N = Anzahl Stringschlüssel, w = durschn. Schlüssellänge)
Algorithmen und Datenstrukturen, FS17
26. April 2017 — 25 / 25
Ausblick
I
Strings II: Suchen in Strings
(= substring finden)
I
Nächste Woche: Hackaton zu “auto-completion”
Herunterladen