suffix arrays - ls11- filesuffix arrays • datenstruktur für stringalgorithmen • aufbauzeit o(n)...
TRANSCRIPT
![Page 1: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/1.jpg)
Suffix Arrays
Eine kleine Wiederholung
![Page 2: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/2.jpg)
Suffix Arrays
• Datenstruktur für Stringalgorithmen
• Aufbauzeit O(n) Stringlänge n
• Platzbedarf O(n), 4n in Praxis
• Suchzeit O(m + logn) für Suchwort der Länge m
![Page 3: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/3.jpg)
• Aufbaualgorithmus: D&C
• Dreiteilung durch modulo Operation
• Zwei Sortiermengen SC und S0
• „Geschicktes“ Sortieren
• Einfaches Mergen
AufbauSuffix Arrays
![Page 4: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/4.jpg)
• O(m logn) naiv - Binärsuche
• O(m + logn) mit Preprocessing:
Longest common Prefix Llcp(M), Rlcp(M)
Übereinstimmung der Mitte mit den Rändern
SucheSuffix Arrays
![Page 5: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/5.jpg)
Beschleunigung IISuche
……
L R
++++<?
+++>??
M
lcp(p, SSA[M])?
l→←r
Llcp(M)Rlcp(M)
??????
Suche links oder rechts von M?
![Page 6: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/6.jpg)
Beschleunigung IISuche
Statische Vorberechnung der Llcp/Rlcp-Werte
Wie berechnet man Llcp, Rlcp?
n verschiedene M, dabei L,R fix
![Page 7: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/7.jpg)
Beschleunigung IISuche
lcp(i,j) = min{lcp(k-1, k) : k ∈ [i+1,j]}
lcp lcp lcp lcpmin
M1L1/M2 R1/R2
lcp = lcp(i, i+1)
L2 M3
minmin
Berechnung von Llcp, Rlcp
![Page 8: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/8.jpg)
Beschleunigung IISuche
… RM´…M
Rlcp(M) = min{Llcp(M´), Rlcp(M´)}
� Vorberechnung in Linearzeit wenn lcp(i-1, i) bekannt
Bottom-up traversal der lcp-Werte
Llcp analog
![Page 9: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/9.jpg)
LCP-Tabelle
Berechnung der speziellen lcp-Tabelle LL[i] = lcp (i-1, i) für i ∈ [1..n]
a
a
R[i]-1
R[i]
lcp
R[i+1]-1
R[i+1]
lcp
Si
SSA[R[i]-1]
Si+1
SSA[R[i+1]-1]
![Page 10: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/10.jpg)
3647910125811SA
Vgl. ab k
Gleichheit
max. -1
i++Unterschied: lcp = k
k++
i-1 i
![Page 11: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/11.jpg)
LCP-Tabelle
lcp(R[i+1], R[i+1] - 1) ≥ lcp(R[i], R[i] - 1) - 1
k = 0;
for i = 1 .. n
if R[i] > 0
j = SA[R[i] – 1]; //Sj lex. direkt vor Si
while (ti+k = tj+k) k++; //Übereinstimmung
L[R[i]] = k;
k = max(0, k-1); //Formel
Vorgängerbeziehung:
![Page 12: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/12.jpg)
Beschleunigung IISuche
Fazit: Preprocessing mit Berechnung von
• lcp-Wert Array L
• Llcp- und Rlcp-Werten
ist in Linearzeit möglich!!
�Suche in O(m + logn) mit linearem Aufbau
![Page 13: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/13.jpg)
Suffix ArraysWir haben:
• Aufbau in Linearzeit• Suche in Linearzeit
Wir brauchen:• Praktische Anwendung
Problem:• Viele gute Algorithmen baumbasiert,
z.B. mit bottom-up, top-down traversal
![Page 14: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/14.jpg)
Enhanced Suffix Arrays
• Idee: Baumverfahren wie bottom-up-traversal in Suffix Arrays abbilden
• Speichern lcp-Tabelle L mit
• Immer noch Platzvorteil
![Page 15: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/15.jpg)
pi
ipp
piip
ppsii
iipssp
spiiisp
i
spspsiii
iispisssp
ssiipiissp
ssssppmiiii
253689014710SA
lcp-IntervalleSuffix Tree ohne Blätter!
![Page 16: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/16.jpg)
Bausteine
• Suffix Array SA
• Lcp Tabelle L
• Lcp Intervall Baum IB (konzeptuell)
• Traversal des IB ohne Aufbau
Enhanced Array
![Page 17: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/17.jpg)
ii
iiss
ssiiss
ssssppmiiii
253689014710SA
(0, 0, ⊥, [])
L
Stack für lcp-IntervalleTupel (lcp,lb,rb, children)
31201004110
↓
push(L[i], i-1,⊥,[])
(1, 0, ⊥, [])
![Page 18: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/18.jpg)
ii
iiss
ssiiss
ssssppmiiii
253689014710SA
(0, 0, ⊥, [])
L 31201004110
↓
(1, 0, ⊥, [])
(4, 2, ⊥, [])pop lastintervalprocess lastinterval
top.children.add(lastinterval)
top.rb = i-1
![Page 19: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/19.jpg)
LCP Tabelle
• Problem: Verdopplung des Speicherplatzbedarfs
• Idee: In Praxis lcp << maxInt
255
23
255
94
17
L
(4, 455)
(2, 328)
L+
n + k bytes
Zugriff in log(|L+|)für random access,sonst konstant
![Page 20: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/20.jpg)
Fallstudie: Repeat Analyse
• Repeats: Musterwiederholung
dfgddsaardwien emschersaar prims
• Genomanalyse: ~ 50% Repeats bei Mensch
• Nötig für Genomvergleich, Alignment
• Vermutungen über funkt. oder evol. Rolle
![Page 21: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/21.jpg)
Grundlagen
• Repeat: (i1,j1) ≠ (i2,j2), aber S(i1..j1) = S(i2..j2)(i1,j1) , (i2,j2) repeated pair
• Maximal Repeat: Kein Teil eines größeren Repeat
Repeat Analyse
dfgd saar wie mschersaar primsd nd e
![Page 22: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/22.jpg)
Repeat Analyse
Grundlagen
Berechnung maximal repeat pairs:
• Algorithmus von Gusfield
• Laufzeit O(kn+z), k = |Σ|, z Anzahl Repeats
• Laufzeit optimal!
• Erste Implementierung in REPuter (Suffix Trees)
![Page 23: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/23.jpg)
Bausteine für Verbesserung
• Suffix Array SA
• Lcp Array L
• Burrows and Wheeler Transformation Array BW
• Lcp Intervall Baum-Konzept
• Nicht Inputstring!!
Idee: Sequentieller Arraydurchlauf
� Laufzeitverbesserung trotz Platzersparnis
Repeat Analyse
![Page 24: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/24.jpg)
Burrows and Wheeler transformation array:
• BW[i] = T[SA[i]-1], falls SA[i] ≠ 0
• Speicherung in n bytes (Character)
• Aufbau in O(n) mit Lauf über SA
[i..j] l-Intervall, u zugehöriger lcp-String der Länge l
P[i..j] = {SA[r] | i ≤ r ≤ j} Anfangspos. mit Präfix u
P[i..j](a) = {p∈ P[i..j] | T[p-1] = a}, a ∈ Σ (disjunkt)
Basisfall i=j: P[i..j](a) = p mit T[p-1] = a
Bausteine für VerbesserungRepeat Analyse
![Page 25: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/25.jpg)
ii
iiss
ssiiss
ssssppmiiii
253689014710SA
L 31201004110
IISSIP0MSSPBW
Stack: lcp-Info + Positionsmengen P[i..j]
![Page 26: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/26.jpg)
Repeat Analyse
Schema
process-Funktion:
• Alle Kind-Positionsmengen bekannt!�Durchlauf
• Sei Pk[i..j](a) Teilmenge nach k Kindern
• k+1tes Kind [i´..j´]:
1. Maximal Repeated Pairs ausgeben
2. Pk+1[i..j](a) für alle a berechnen
![Page 27: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/27.jpg)
• Maximal Repeated Pairs ausgeben:Kombiniere Pos. p = Pk
[i..j](a) mit p´ = P[i´..j´](b) für a ≠ b
�u kommt an p und p´ vor (Def.)Davor steht a ≠ bDahinter Unterscheidung, da aus versch. Kindern
• Pk+1[i..j](a) berechnen:
Pk+1[i..j](a) = Pk
[i..j](a) ∪ P[i´..j´](a)
• k Unions pro Intervall, O(n) Intervalle,O(z) Kombinationen � O(kn+z)
Repeat Analyse
Schema
![Page 28: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/28.jpg)
Vorteile
• Speicherung in Secondary Memory – Kein Random Access nötig!!
• Verbesserung der Laufzeit (Cache- Verhalten!)
• Verbesserung des Platzbedarfs
• Vereinfachung der Implementierung
Repeat Analyse
![Page 29: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/29.jpg)
LaufzeitRepeat Analyse
0.793.2960750
0.793.2984040
SA
31 Mb
0.803.30273030
0.793.31356927
0.783.28520623
REP
61 Mb
0.793.28779920
PlatzSAREP#repsl
Escherichia coli, DNA-Länge 4.639.221, α = 4
![Page 30: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/30.jpg)
Lempel-Ziv
• Gruppe verlustfreier Kompressionmethoden
• Substituierende Kompression:Ersetze Repeats durch Verweis auf voriges Vorkommen
• Dekomposition zur Erkennung von Repeats
Kompression
![Page 31: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/31.jpg)
• Sei li Länge des längsten Präfix von Si,der schon vorkommt
• Position si: Erstes solches Vorkommen
• Dekomposition: Erzeuge solche Präfixe durchBlockdekomposition
• Folge von Anfangsindizes i1,..,ikInduktiv: i1 = 0, iB+1= iB + max{1, liB}
• T[iB..iB+1-1] heisst B-ter Block der Ziv-LempelDekomposition
Lempel-Ziv
![Page 32: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/32.jpg)
• Dekomposition durch bottom-up traversal des lcp-Intervall Baums
• Neuer Stackwert: min• process-Funktion für l-Intervall [i..j]:
Seien min1, .., mink Werte für schon bearbeitete KinderM= {min1,..,mink} ∪
{SA[q]| q ∈ [i..j] und nicht in Intervallen 1..k}min = minM∀q∈M, ≠ min: sq = min, lq = lAn Wurzel [0..n]: ∀q∈M sq = 0, lq = 0
Lempel-Ziv
![Page 33: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/33.jpg)
Lempel-Ziv
01201232100li
07600102000si
109876543210i
$tatacaaacaT
$attcaaaacaBlock
108753210iB
87654321B
![Page 34: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/34.jpg)
Hauptpunkte
• Suffix Array ist lexikographisch geordneter Array der Suffixe eines Strings
• Aufbau in Linearzeit
• Platzeffiziente Datenstruktur (~ 4Byte)
• Anwendung: Stringvergleiche, Suche
• Suche in Zeit O(m + logn))
• Amortisierung des Aufbaus über viele Suchen (Indexierung)
![Page 35: Suffix Arrays - ls11- fileSuffix Arrays • Datenstruktur für Stringalgorithmen • Aufbauzeit O(n) Stringlänge n • Platzbedarf O(n), 4n in Praxis • Suchzeit O(m + logn) für](https://reader031.vdokument.com/reader031/viewer/2022031507/5c9cce3388c99388348ba449/html5/thumbnails/35.jpg)
Ende!