8 Digitalbäume, Tries, Tries, Suffixbäume 8.0 Anwendungen Internet-Router Gegeben Zieladresse, finde Nachbarknoten, an den Paket zu senden ist ("Routing-Tabelle") 31 0 network addr Map Host id 1010 0000 0010 1101 0110 1110 0000 0011 jefe.inf.fu.berlin.de Suchmaschine Finden aller Web-Seiten mit bestimmte Suche in Texten Stichworte enthalten Bio-Informatik Finde Positionen in einem Gen, dass die Sequenz AGCTAAGTACCTTCT enthält hs / fub – alp3-28-Digitalbaum 1 Siehe z.B. Tamassia: Data Structures... 8.1 Digitalbäume Theo A E B Artur Bodo B R Abel Arndt Egon D Edgar R Erwin M Mögliche Einfügereihenfolge: 1. Theo 2. Artur 3. Bodo 4. Arndt 5. Egon 6. Edgar 7. Erwin 8. Edmund 9. Abel Edmund Suchbaum mit Schlüsseln über Alphabet {x1,...,xm} Verzweigung in Knoten der Tiefe k: k-tes Zeichen des Suchschlüssels s0,s1,...,sn-1 Schlüsselwerte in den Knoten (wie binärer SB) Baum abhängig von Einfügefolge 1 Suchen Theo A B Artur Bodo B class Node{ String key; Node nachfolger[] = new Node[alphasize]; } E Egon R R D Abel Arndt Edgar Erwin M Für jedes Zeichen des Alphabets ein Nachfolger Edmund private boolean search2 (String key, int pos, Node n){ if (node.key == key) return true; if (node.nachfolger[pos] == null)return false; else return search2(key,pos+1,n.nachfolger[pos]); } Fast wie binärer Suchbaum.... hs / fub – alp3-28-Digitalbaum 3 Einfügen Theo A E B Artur Bodo B R Abel Arndt N Nora Egon D Einfügen: Nora Elise Edmiranda R L Erwin Edgar Elise M Edmund I Wie binärer Suchbaum: Edmiranda - suchen des Schlüssel - wenn gefunden, "duplicate key" sonst einfügen als Blatt gemäß sk+1 , wenn Suchpfad die Länge k hatte. Nachteile: -Im Gegensatz zu binärem Suchbaum keine Ordnung! - großes Alphabet => großer Speicheraufwand für Knoten. hs / fub – alp3-28-Digitalbaum 4 2 Digitalbäume mit binärem Alphabet Theo 0 Artur 0 0 1 0 Tanja Nora Rosi Bodo 1 Arndt 1 1 Egon 0 Abel Edgar 1 0 Erwin Edmund Mögliche Einfügereihenfolge: 1. Theo 2. Artur 3. Bodo 4. Arndt 5. Edgar 6. Edgar 7. Erwin 8. Edmund 9. Abel 10. Nora 11. Tanja A=00001 B=00010 D=00100 E=00101 G=00111 L=01100 M=01101 N=01110 Q=10001 R=10010 T=10100 U=10101 Codierung der Zeichen: 5-Bit Binärwert der Position im Alphabet, A=1 hs / fub – alp3-28-Digitalbaum 5 Eigenschaften Schlüssel binär, eindeutig, feste Schlüssellänge und N << 2k Schlüssel dann maximal k Vergleiche ( im Vergleich zu N bei binären Suchbäumen). Zufällige Verteilung der Schlüssel-Bits: log N Vergleiche im Durchschnitt, 2* log N im schlechtesten Fall. Sortierte Verarbeitung? hs / fub – alp3-28-Digitalbaum 6 3 Frequenzsortierter Digitalbaum Position im Baum durch Schlüsselposition und Einfügereihenfolge bestimmt Idee: häufigster Schlüssel als Wurzel seines Unterbaums Arndt Theo,10 A A E B Artur Bodo Edgar Artur,3 Bodo Egon, 4 B 5 R D Abel Arndt, 11 2 T E B B Edgar, 9 Abel Theo G Egon Minimieren: Σ freq(k)* hight(k) k hs / fub – alp3-28-Digitalbaum 7 Beispiel Symboltabelle, Wörterbuch (z.B. Rechtschreibprüfung) u.a. Sorted frequency tree THE 15568 OF 9767 AND 7638 TO 5739 A 5074 IN 4312 THAT 3017 IS 2509 FOR 1869 AS 1853 zitiert nach Bayer, TUM, 2000 - einfügen nach absteigender Häufigkeit - Knoten-Inhalt bestimmt Such- und Einfügepfad hs / fub – alp3-28-Digitalbaum 8 4 Beispiel: Frequenzsortierter Digitalbaum 0 0 1 1 0 1 Die 31 häufigsten Wörter des Englischen, eingefügt nach Häufigkeit. (Beachte: andere Kodierung der Zeichen als oben!) nach Bayer, TUM, 2000 hs / fub – alp3-28-Digitalbaum 9 8.2 Tries Knotensortierung in digitalem Suchbaum? Idee: Schlüsselwerte nur in Blattknoten, innere Knoten haben nur Wegweiserfunktion. (hohler Baum, siehe B+-Bäume) Theo A E B Artur Bodo B R Abel Arndt T A Egon D B Bodo R B Edgar M Theo E Erwin D R Abel N Arndt R T G G Egon Erwin M Edgar Artur Edmund Edmund Trie: abgeleitet von "Retrieval", Aussprache wie "try" hs / fub – alp3-28-Digitalbaum 10 5 Trie: Trie: Definition Ein Trie T ist ein Positionsbaum über einem Alphabet A (binärer Trie, wenn A = {0,1} ) Wenn T N Schlüssel enthält, besitzt T N Blätter. Jedes Blatt enthält einen Schlüssel. Der Pfad von der Wurzel bis zum Blatt für den Schlüssel s1s2...sn hat die Länge k <= n. Die Kanten des Pfades sind implizit mit s1, s2,...,sk markiert. (Implizit, weil Markierung bereits durch PositionsbaumEigenschaft). Für alle Schlüssel s, s' gilt: es gibt ein 1<= k <= m mit si = s'i und sk != s'k Kein Schlüssel ist Präfix eines anderen (wenn Schlüssel variabel lang) Eigenschaft: Die zu den Schlüsseln führenden Wurzelpfade sind geordnet (per Konstruktion). hs / fub – alp3-28-Digitalbaum 11 Einfügen T A B R Bodo B N R D G M G Abel Egon Erwin H Edgar N T Arndt Theo E Artur Edmund Erhard W Erwin V Arved public void insert(String k){ node n = searchKey(k); int d = n.depth(); if (isLeaf(n)) splitNodeAndInsert(d,n.key, k) else n.insert(d,k); //"null leaf" } hs / fub – alp3-28-Digitalbaum 12 6 Trie: Trie: Eigenschaften Ein Trie ist nach Schlüsseln sortiert. Ein Trie ist unabhängig von Einfügereihenfolge der Schlüssel: Oder: Ein Trie ist eindeutig durch die Menge der einzufügenden Schlüssel bestimmt. Suche und Einfügen in einen binären Trie mit N zufälligen Schlüsseln der Länge m benötigt im Mittel O(log N) Vergleiche. Im schlechtesten Fall werden m Vergleiche benötigt. Folgerung: Wegen N <= 2m , also m <= log N , gilt: Suche von Schlüssel s linear in der Länge von s hs / fub – alp3-28-Digitalbaum 13 PräfixPräfix-Suche Neben Standardoperationen von Mengen Präfixsuche offenbar sehr einfach. public Set hasPrefix (String pref); //pre: true //res: {s| s ∈ self & pref is prefix of s} T A B R Bodo B N R D G M G Abel Egon H Edgar N T Arndt Theo E Artur Edmund Erhard W Erwin V Arved hs / fub – alp3-28-Digitalbaum 14 7 Alternative Definition Wurzelpfade haben jeweils Schlüssellänge auch hier Pfade mit je einem Nachfolger sind redundant, und lassen sich verkürzen. Voraussetzung: Schlüssel in Blättern vorhanden. length = 4 +1 BIGGER$ Grafik von David Breton, David Huynh & Denis Ricard, McGill Univ. hs / fub – alp3-28-Digitalbaum 15 8.3 Patricia – Bäume Pfadkompression $ BI G L GO O S ..... Aber wie markiert man die Kanten mit variabel langen Zeichenketten?? BIGGER$ "Practical Algorithm To Retrieve Information Coded In Alphanumeric", Morrison, 1968 hs / fub – alp3-28-Digitalbaum 16 8 Implementierung der Pfadkomprimierung Komprimierte Pfadstücke sind redundant, search(key k) muss nur jeweils 1. Zeichen prüfen. [1] $ BI GGE L GO O BILL R S BIGGER [3] S .... BIGGEST [6] BIGGER [3] BILL $ .... BIGGEST search("BIGGEST" )muss drei Zeichen prüfen: BIGGEST" [1 3 6 ] hs / fub – alp3-28-Digitalbaum 17 PatriciaPatricia-Tries Ein Patricia-Trie (compressedTrie) ist ein pfadkomprimierter Trie Eigenschaften Ein Baum mit N Schlüsseln hat N Blätter Jeder Knoten hat - mindestens 2 Nachfolger - höchstens m Nachfolger bei Alphabet der Größe m Gesamtspeicheraufwand Suche O(N) eines Schlüssels s in O(s.length()) hs / fub – alp3-28-Digitalbaum 18 9 PatricialPatricial-Trie und Zeichenketten [1] B G [3] G R S $ .... [27,7] [20,6], AMERICA ...BIGGER 1 [3] M [35,4] [6] $ 7..20 BIGGEST 25 27 BILL ... ZERO 33 35 38 72 76 hs / fub – alp3-28-Digitalbaum 19 PatricialPatricial-Trie und Zeichenketten [1] [3] [6] [20,6], [40,45] [3] [35,4] $ .... [27,7] AMERICA ...BIGGER 1 Im allgemeinen kein vollständiger Schlüsselvergleich, wenn Blatt erreicht (Überspringen von von Schlüsselpositionen) Deshalb Schlüssel (oder Präfix) im Blatt unerlässlich, evtl. als Verweis (wie in Abb.). 7..20 BIGGEST 25 27 BILL ... BIGGER 33 35 38 40 45 ZERO 72 76 Bei Verzicht auf Eindeutigkeit der „Schlüssel" problemlos: Mehrere Verweise in Blatt hs / fub – alp3-28-Digitalbaum 20 10 "IP Präfix Lookup" Lookup" [1] Adresspräfix Nachbarknoten 0 1 [3] [3] 0 $ 0 1 n3 [4] 1 0 1 n4 ....n5 4 001 n3 0001 n4 111 n4 1100 n5 ... n4 n3 Gesucht: nächster Netzknoten auf dem Weg zur Zieladresse 11011011011...01 Finde Eintrag (adr, nachbar) so, dass adr Präfix der Zieladresse mit maximaler Länge. 2. Beispiel: 01011011011...01 Suche endet in innerem Knoten, wähle eines der Blätter des Unterbaums. Einfügen, Ändern? hs / fub – alp3-28-Digitalbaum 21 Änderungsoperationen [1] [1] [3] [6] [20,6], [3] [35,4] [3] $ [4] .... [35,4] $ .... [38,6] [6] [27,7] [20,6], AMERICA ...BIGGER 1 [3] 7..20 [27,7] BIGGEST BIGMAC BILL ... 25 2733 35 38 ZERO 72 76 Einfügen: Pfad suchen, in den eingefügt wird. Fehlstelle zwischen einzufügendem Wert und in Blatt gefundenen Wert bestimmen, übersprungenen Teilpfad auftrennen. hs / fub – alp3-28-Digitalbaum 22 11 Alternative Darstellung [20,21] Kanten mit Position des ersten / letzten Zeichen der Teilzeichenkette markiert. [1,1] [1,2] [22,24] [35,4] [25,25] [32,32] .... [27,7] [20,6], AMERICA ...BIGGER 1 $ [37,38] 7..20 BIGGEST 25 27 BILL ... 33 35 38 ZERO 72 76 hs / fub – alp3-28-Digitalbaum 23 PatriciaPatricia-Tries: Tries: Alternative für Binäre Suchbäume ? Empirische Untersuchung (nach Sedgewick) Einfügen Suche N RB Trie Pat RB Trie Pat 5000 4 7 7 1 2 1 25000 40 44 41 20 20 17 100000 176 269 242 103 101 92 200000 411 544 448 228 211 182 Zufällig erzeugte 32-Bit-Zahlen als Schlüssel hs / fub – alp3-28-Digitalbaum 24 12