1 / 97

Referat zum Bau von Suffix Baeumen

Referat zum Bau von Suffix Baeumen. Autoren: Hanna Kraeusel Axel Block Magnus Brockschmidt. Prozeduraler Algorithmus. Konstruiere T1; for (i=1; i<m; i++) {. /*Beginn von Phase i+1 */. Prozeduraler Algorithmus. Konstruiere T1; for (i=1; i<m; i++) { /*Beginn von Phase i+1 */

aletta
Download Presentation

Referat zum Bau von Suffix Baeumen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Referat zum Bau von Suffix Baeumen Autoren: Hanna Kraeusel Axel Block Magnus Brockschmidt

  2. Prozeduraler Algorithmus Konstruiere T1; for (i=1; i<m; i++) { /*Beginn von Phase i+1 */

  3. Prozeduraler Algorithmus Konstruiere T1; for (i=1; i<m; i++) { /*Beginn von Phase i+1 */ for (j=1; j<=j+1;j++) { /*Beginn von der j-ten Erweiterung*/

  4. Prozeduraler Algorithmus Konstruiere T1; for (i=1; i<m; i++) { /*Beginn von Phase i+1 */ for (j=1; j<=i+1;j++) { /*Beginn von der j-ten Erweiterung*/ Finde das Ende des Pfades mit Label S[j..i]; Falls noetig, erweitere den Pfad durch S[i+1]; } }

  5. Erweiterungsregeln • ß endet in einem Blatt. Dann füge [i+1]zum Kantenlabel hinzu.

  6. Erweiterungsregeln • ß endet in einem Blatt. Dann füge [i+1]zum Kantenlabel hinzu. • Es gibt keinen Pfad am Ende von ß, der mit S[i+1] weitergeht, aber mindestens ein anderer Pfad geht weiter. Dann füge eine neue Kante mit Label S[i+1] ein. Dazu muß ein neuer Knoten erzeugt werden, wenn ß mitten in einer Kante endet. Gib dem neuen Blatt Nummer j.

  7. Erweiterungsregeln • ß endet in einem Blatt. Dann füge [i+1]zum Kantenlabel hinzu. • Es gibt keinen Pfad am Ende von ß, der mit S[i+1] weitergeht, aber mindestens ein anderer Pfad geht weiter. Dann füge eine neue Kante mit Label S[i+1] ein. Dazu muß ein neuer Knoten erzeugt werden, wenn ß mitten in einer Kante endet. Gib dem neuen Blatt Nummer j. • Es gibt einen Pfad am Ende von ß, der mit S[i+1] weitergeht. In diesem Fall ist ßS[i+1] schon im Baum und wir tun nichts.

  8. Beispiel: Wir wollen den Suffix Baum des Strings abcabcabacdba erzeugen. Um den Baum zu bilden, muss in der Phase i der Baum Bi in den BaumBi+1 umgewandelt werden. Wir beschreiben jede Phase und zeichnen den Baum immer, wenn die Phase beendet ist.

  9. Einfügen von aGesamter String: a Es ist nur a Einzufügen! (Regel 2) a

  10. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. (Regel 1) a b

  11. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. (Regel 1) Die zweite Erweiterung konstruiert einen neuen Ast mit der Bezeichnung b. (Regel 2) a b b

  12. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. (Regel 1) Die zweite Erweiterung konstruiert einen neuen Ast mit der Bezeichnung b. (Regel 2) a b b Jetzt stehen alle Suffixe des Strings ab im Baum.

  13. Einfügen von cGesamter String: abc In den ersten beiden Erweiterungen fügen wir ein c an die vorhandenen Blätter an. Die dritte Erweiterung konstruiert einen neuen Ast mit der Bezeichnung c. Jetzt sind alle Suffixe von abc im Baum enthalten. a b c b c c

  14. Einfügen von aGesamter String: abca In den ersten drei Erweiterungen fügen wir ein a an die vorhandenen Blätter an. Die vierte Erweiterung muss keinen neuen Ast kreieren, da a bereits Als Präfix von abca vorhanden ist. (Regel 3) Jetzt sind alle Suffixe von abca im Baum enthalten. a b c b c a c a a

  15. Einfügen von bGesamter String: abcab Diese Phase ist synchron zur vorherigen Phase. a b c b c a c a b a b b

  16. Einfügen von cGesamter String: abcabc Auch hier ist nichts anderes zu tun. Man erkennt, dass der Suffix Baum keine weiteren Äste hinzufügt, wenn die neuen Character nur Teilstrings des gesamten Strings bilden. a b c b c a c a b a b c b c c

  17. Einfügen von aGesamter String: abcabca Nur anhängen von a an die vorhandenen Äste nötig! a b c b c a c a b a b c b c a c a a

  18. Einfügen von bGesamter String: abcabcab Jetzt wird noch b an die vorhandenen Äste angefügt! a b c b c a c a b a b c b c a c a b a b b

  19. Einfügen von aGesamter String: abcabcaba a b c b c a c a b a b c b c a c a b a b a b a a Erweiterung 1 bis 3: Wie zuvor auch fuegen wir ein a an alle Aeste an.

  20. Einfügen von aGesamter String: abcabcaba a b c b c a c a b a b c b c a c a a b a b a b a a Erweiterung 4: Jetzt muss der String abcaba gefunden werden. Von der Wurzel laufen wir abcab runter und fuegen ein a an.

  21. Einfügen von aGesamter String: abcabcaba a b c b c a c a b a b c b c a c a a b a b a b a a Erweiterung 4: Jetzt muss der String abcaba gefunden werden. Von der Wurzel laufen wir abcab runter und fuegen ein a an.

  22. Einfügen von aGesamter String: abcabcaba a b c b c a a c a a b a b c a b c a a c a a b a b a b a a

  23. Einfügen von cGesamter String: abcabcabac a b c b c c a a c a a c b a c b c a b c a a c c a a c b a c b a b a c a c c

  24. Einfügen von dGesamter String: abcabcabacd a b c d b c c a a d c a d a c b a c b d c a b d c a a c c a a c b d a c b d a b d a c a c d c d d

  25. Einfügen von bGesamter String: abcabcabacdb a b c d b c c a a d b c a d a c b b a c b b d c a b d c a b a c c a b a c b d a c b d a b b d a b c a b c d c d b d b b

  26. Einfügen von aGesamter String: abcabcabacdba a b c d b c c a a d b c a d a c b b a a c b b d c a a b d a c a b a c c a b a c a b d a c a b d a b b d a b c a a b c a d c a d b d b a b a a

  27. Definition von Suffix Links • Knoten v hat die Beschriftung x (wobei x ein einzelner Character sei).  ist möglicherweise leer.

  28. Definition von Suffix Links • Knoten v hat die Beschriftung x (wobei x ein einzelner Character sei).  ist möglicherweise leer. • Knoten s(v) hat die Beschriftung 

  29. Definition von Suffix Links • Knoten v hat die Beschriftung x (wobei x ein einzelner Character sei).  ist möglicherweise leer. • Knoten s(v) hat die Beschriftung  • Jetzt heißt die Kante v  s(v) ein Suffix-Link.

  30. Gibt es für jeden Knoten v ein Suffix Link zu s(v)?

  31. Beobachtung Wenn der Knoten v als neuer innerer Knoten während der Verarbeitung von Erweiterung j in Phase i durch den bisherigen Algorithmus eingesetzt wird, und wenn v die Markierung x trägt, dann gilt eine der beiden Aussagen: • Der Weg mit Beschriftung  endet in einem bereits vorhandenen inneren Knoten w = s(v). • Ein neuer Knoten s(v) wird bei der Verarbeitung von Extension j+1 in Phase i angelegt und s(v) hat  als Beschriftung.

  32. Beweis • Das Hinzufügen eines Knoten v kann nur in der Erweiterungsregel 2 passiert sein. • Dann gibt es, neben der Verbindung zum neuen Blatt, auch einen weiteren von v ausgehenden Weg, der den Buchstaben y als ersten besitzen möge.

  33. Es treten zwei Fälle auf Fall1:Der gegenwärtige Baum besitzt neben xy einen weiteren Weg von der Wurzel beginnend mit der Beschriftung xz, wobei z ein beliebiger String aus dem Suffix sei, und z  y. • Jetzt gibt es Suffixe mit den Präfixen xy und xz, also auch mit y und z. Deswegen besitzt der Baum einen Knoten s(v) mit der Beschriftung . • Fall2: Der gegenwärtige Baum besitzt keinen weiteren Weg wie in Fall1, dann wird in der Verarbeitung von S(j+1..i) ein neuer innerer Knoten s(v) angelegt, der die Beschriftung  hat, weil es Suffixe mit den Präfixen y und S(i+1) gibt.

  34. Lemma • Bei Ukkonens Algorithmus hat jeder implizite Suffix Baum für jeden neuen inneren Knoten einen Suffix Link nach dem Ende der nächsten Erweiterung.

  35. Beweis • Der Beweis dieses Lemmas ist induktiv. • Sie ist wahr für B1, weil B1 noch keine Knoten besitzt. • Da in der letzten Erweiterung einer Phase keine neuen Knoten eingefügt werden, denn in dieser Phase ist der zu behandelnde String nur ein einzelner Character, sind am Ende der Phase i alle Knoten mit Suffix Links belegt und zu Beginn der Phase i+1 gilt ebenfalls die Aussage.

  36. Single extension algorithm (SEA) Begin • Finde Knoten v über dem Ende von S[j-1..i]. Laufe eine Kante vom Ende von S[j-1..i] hoch. Sei nun y der String zwischen dem Ende von S[j-1..i] und v.

  37. Single extension algorithm (SEA) Begin • Finde Knoten v über dem Ende von S[j-1..i]. Laufe eine Kante vom Ende von S[j-1..i] hoch. Sei nun y der String zwischen dem Ende von S[j-1..i] und v. • Wenn v nicht die Wurzel ist, gehe den Suffix Link entlang nach s(v). Klettere den Baum herunter an dem Ast des Strings y. Wenn v die Wurzel ist, folge S[j..i] von der Wurzel.

  38. Single extension algorithm (SEA) Begin • Finde Knoten v über dem Ende von S[j-1..i]. Laufe eine Kante vom Ende von S[j-1..i] hoch. Sei nun y der String zwischen dem Ende von S[j-1..i] und v. • Wenn v nicht die Wurzel ist, gehe den Suffix Link entlang nach s(v). Klettere den Baum herunter an dem Ast des Strings y. Wenn v die Wurzel ist, folge S[j..i] von der Wurzel. • Sorge gemäss den Erweiterungsregeln dafür, dass der String S[j..i]S(i+1) im Baum enthalten ist.

  39. Single extension algorithm (SEA) Begin • Finde Knoten v über dem Ende von S[j-1..i]. Laufe eine Kante vom Ende von S[j-1..i] hoch. Sei nun y der String zwischen dem Ende von S[j-1..i] und v. • Wenn v nicht die Wurzel ist, gehe den Suffix Link entlang nach s(v). Klettere den Baum herunter an dem Ast des Strings y. Wenn v die Wurzel ist, folge S[j..i] von der Wurzel. • Sorge gemäss den Erweiterungsregeln dafür, dass der String S[j..i]S(i+1) im Baum enthalten ist. • Wenn in Erweiterung j-1 ( nach Erweiterungsregel 2) ein Knoten w erzeugt wurde, dann muss der String  das Ende des Suffix Links s(w) sein. Erzeuge einen Link (w,s(w)) von w nach s(w). End.

  40. Beispiel: Wir wollen den Suffix Baum des Strings abcabcabacdb mit Hilfe von Suffixlinks erzeugen. Um den Baum zu bilden, muss in der Phase i der Baum Bi in den BaumBi+1 umgewandelt werden.

  41. Einfügen von aGesamter String: a Es ist nur a Einzufügen! In den ersten Phasen sind die Suffix Links noch nicht wichtig, da noch keine Knoten vorhanden Sind. a

  42. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. a b

  43. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. Die zweite Erweiterung konstruiert einen neuen Ast mit der Bezeichnung b. a b b

  44. Einfügen von bGesamter String: ab In der ersten Erweiterung fügen wir ein b an das vorhandene Blatt an. Die zweite Erweiterung konstruiert einen neuen Ast mit der Bezeichnung b. a b b Jetzt stehen alle Suffixe des Strings ab im Baum.

  45. Einfügen von cGesamter String: abc In den ersten beiden Erweiterungen fügen wir ein c an die vorhandenen Blätter an. Die dritte Erweiterung konstruiert einen neuen Ast mit der Bezeichnung c. Jetzt sind alle Suffixe von abc im Baum enthalten. a b c b c c

  46. Einfügen von aGesamter String: abca In den ersten drei Erweiterungen fügen wir ein a an die vorhandenen Blätter an. Die vierte Erweiterung muss keinen neuen Ast kreieren, da a bereits Als Präfix von abca vorhanden ist. Jetzt sind alle Suffixe von abca im Baum enthalten. a b c b c a c a a

  47. Einfügen von bGesamter String: abcab Diese Phase ist synchron zur vorherigen Phase. a b c b c a c a b a b b

  48. Einfügen von cGesamter String: abcabc Auch hier ist nichts anderes zu tun. Man erkennt, dass der Suffix Baum keine weiteren Äste hinzufügt, wenn die neuen Character nur Teilstrings des gesamten Strings bilden. a b c b c a c a b a b c b c c

  49. Einfügen von aGesamter String: abcabca Nur anhängen von a an die vorhandenen Äste nötig! a b c b c a c a b a b c b c a c a a

  50. Einfügen von bGesamter String: abcabcab Jetzt wird noch b an die vorhandenen Äste angefügt! a b c b c a c a b a b c b c a c a b a b b

More Related