www.wikidata.de-de.nina.az
Ein Suffixarray ist in der Informatik ein Array das die Suffixe einer Zeichenkette in lexikographischer Reihenfolge angibt Inhaltsverzeichnis 1 Beispiel 2 Algorithmen 2 1 Iterative Teilsortierung 2 2 Rekursive Algorithmen 2 3 Induzierte Sortierung 3 Anwendungen 3 1 Exakte Suchanfragen String Matching 3 2 Konstruktion eines Suffixbaums 3 3 Kompression 4 Geschichte 5 Literatur 6 Weblinks 7 EinzelnachweiseBeispiel BearbeitenBetrachte den String S displaystyle S nbsp abracadabra der Lange 11 Da auch der leere String ein gultiges Suffix ist fugen wir an das Ende von S displaystyle S nbsp den Endmarker hinzu um den leeren String bzw das Ende von S displaystyle S nbsp ausdrucken zu konnen Der String mit den zugehorigen Positionen seiner Zeichen lautet also i 1 2 3 4 5 6 7 8 9 10 11 12S i displaystyle S i nbsp a b r a c a d a b r a Dieser String hat zwolf Suffixe die auch durch ihre Startposition i in S displaystyle S nbsp beschrieben werden konnen Suffix iabracadabra 1bracadabra 2racadabra 3acadabra 4cadabra 5adabra 6dabra 7abra 8bra 9ra 10a 11 12Der leere String ist lexikografisch kleiner als jedes Suffix von S displaystyle S nbsp Daher ist der Endmarker per Konvention ebenfalls lexikografisch kleiner als jedes andere Zeichen im String Somit konnen alle Suffixe lexikografisch sortiert werden Suffix i 12a 11abra 8abracadabra 1acadabra 4adabra 6bra 9bracadabra 2cadabra 5dabra 7ra 10racadabra 3Als Array dargestellt ergibt sich a abra Wenn der Originalstring bekannt ist kann jedes Suffix platzsparend durch den Index seines ersten Zeichens spezifiziert werden Das Suffixarray ist ein Array dieser Indizes in lexikographischer Reihenfolge Fur den String abracadabra lautet das Suffixarray somit A displaystyle A nbsp 12 11 8 1 4 6 9 2 5 7 10 3 Das Suffix a bzw a beginnt am elften Zeichen abra beim achten und so weiter Der Endmarker ist nutzlich wenn mehrere Strings kombiniert werden Beispielsweise ist in S displaystyle S nbsp abracadabra mississippi sofort klar dass der Text aus den beiden Strings abracadabra und mississippi besteht Wenn nur ein String betrachtet wird kann dieses Suffix ubergangen werden Da der leere String lexikographisch immer vor allen anderen sortiert wird geht in diesem Fall keine Information verloren Algorithmen BearbeitenEs gibt eine Vielzahl an Algorithmen um aus einem gegebenen Text der Lange n ein Suffixarray zu konstruieren Die dabei verwendeten Methoden zur Suffix Sortierung lassen sich grob in drei Klassen einteilen Iterative Rekursive und Induzierte Sortierung Iterative Teilsortierung Bearbeiten Der einfachste Weg besteht darin einen effizienten vergleichsbasierten Sortieralgorithmus zu verwenden der hochstens O n log n displaystyle O n log n nbsp Vergleiche benotigt Da der Vergleich zweier Suffixe O n displaystyle O n nbsp Zeit benotigt betragt die komplette Laufzeit dieses Verfahrens O n 2 log n displaystyle O n 2 log n nbsp Weiter entwickelte Algorithmen verbessern dies auf O n log n displaystyle O n log n nbsp indem sie die Ergebnisse von Teilvergleichen ausnutzen und somit redundante Vergleiche vermeiden Dazu wird zunachst nur der erste Buchstabe jedes Suffixes betrachtet und daraus ein vorlaufiger Suffixarray aufgebaut der Suffixe mit gleichem Anfangsbuchstaben noch nicht untereinander sortiert hat Suffixe mit unterschiedlichen Anfangsbuchstaben sind aber bereits in der richtigen Reihenfolge enthalten In einem zweiten Schritt wird jede Gruppe von Suffixen mit gleichem Anfangsbuchstaben so sortiert dass sie bezuglich der ersten beiden Anfangsbuchstaben korrekt sortiert sind Der dritte Schritt sortiert alle Suffixgruppen mit zwei gleichen Anfangsbuchstaben so dass sie bezuglich der ersten vier richtig sortiert sind der vierte Schritt so dass sie bezuglich der ersten acht richtig sortiert sind und so weiter Nach log 2 n displaystyle log 2 n nbsp Schritten ist jedes Suffix vollstandig richtig sortiert und der Suffixarray fertig aufgebaut Jeder Teilschritt ist in Zeit O n displaystyle O n nbsp moglich so dass sich die Gesamtlaufzeit O n log n displaystyle O n log n nbsp ergibt 1 Zu dieser Klasse gehoren der klassische Suffixarray Algorithmus von Manber und Myers 2 sowie der in der Praxis deutlich effizientere Algorithmus von Larsson und Sadakane 3 Rekursive Algorithmen Bearbeiten Diese Algorithmenklasse wird erst seit 2003 erforscht Der Zeichen des Strings S displaystyle S nbsp werden dazu in zwei Zeichenketten x und y aufgeteilt Anschliessend wird der Algorithmus rekursiv auf x aufgerufen Mit dem dadurch berechneten Suffixarray von x kann der Suffixarray von y effizient berechnet induziert werden Da die Aufteilung in x und y bekannt ist kann daraus der Suffixarray von S displaystyle S nbsp abgelesen werden Durch geschickte Wahl von x und y haben die meisten dieser Algorithmen eine Laufzeit von O n displaystyle O n nbsp Da Rekursion in der Praxis teuer ist sind sie jedoch nicht immer zu bevorzugen 1 Induzierte Sortierung Bearbeiten Auch hier wird mit einem bereits berechneten Suffixarray einer Zeichenkette x der Suffixarray einer Zeichenkette y effizient berechnet induziert Anstelle einer rekursiven Arbeitsweise kann beispielsweise der String S displaystyle S nbsp mehrfach in verschiedenen Richtungen durchlaufen werden Dabei werden die Zeichen in x bzw y klassifiziert teilweise sortiert und in einem spateren Schritt auf Basis anderer Teilergebnisse weitersortiert Die Algorithmen dieser Klasse sind sehr divers Fast alle haben jedoch gemeinsam dass sie trotz einer haufig schlechten Worst Case Laufzeit von O n 2 log n displaystyle O n 2 log n nbsp in der Praxis meist schneller als rekursive Algorithmen sind Auch benotigen sie im Allgemeinen deutlich weniger Speicherplatz als andere Algorithmen 1 Der derzeit schnellste Algorithmus dieser Klasse ist der Suffix Array Induced Sorting Algorithmus kurz SAIS von Nong Zhang und Chan 4 Er benotigt lediglich eine Laufzeit in O n displaystyle O n nbsp Der SAIS Algorithmus erweist sich auch in der Praxis als sehr schnell wenn bei der Implementierung verschiedene Effekte wie z B Cache Misses berucksichtigt werden 5 Anwendungen BearbeitenNach der Konstruktion kann das Suffixarray als Index des Texts verwendet werden um nachfolgende Operationen effizient durchzufuhren Zu diesen Operationen zahlen unter anderem Suchanfragen und Kompressionsverfahren Exakte Suchanfragen String Matching Bearbeiten Siehe auch String Matching Eine exakte Suchanfrage besteht aus einem Suchmuster P displaystyle P nbsp das in einem Text T displaystyle T nbsp gesucht werden soll Eine Textstelle zahlt nur dann als exaktes Vorkommen von P displaystyle P nbsp wenn jedes Zeichen der Textstelle mit P displaystyle P nbsp ubereinstimmt Damit unterscheiden sich diese Anfragen von den nicht exakten Anfragen bei denen eine festgelegte Anzahl an abweichenden Zeichen erlaubt ist Es wird bei den exakten Suchanfragen zwischen Entscheidungsanfragen Kommt P displaystyle P nbsp in T displaystyle T nbsp vor Anzahlanfragen Wie oft kommt P displaystyle P nbsp in T displaystyle T nbsp vor und Aufzahlungsanfragen An welchen Stellen kommt P displaystyle P nbsp in T displaystyle T nbsp vor unterschieden wobei Entscheidungsanfragen ggf mithilfe von Anzahlanfragen und Anzahlanfragen mit Aufzahlungsanfragen beantwortet werden konnen 6 Um die Anzahl der exakten Vorkommen von P displaystyle P nbsp zu bestimmen mussen im Suffixarray zu T displaystyle T nbsp alle Suffixe gesucht werden die mit P displaystyle P nbsp beginnen Da das Suffixarray sortiert ist liegen diese Suffixe alle direkt hintereinander und bilden einen Block Daher reicht es aus den lexikographisch kleinsten und den lexikographisch grossten Suffix zu bestimmen die mit P displaystyle P nbsp beginnen Mithilfe der binaren Suche konnen diese jeweils in O m log n displaystyle O m cdot log n nbsp gefunden werden wobei m displaystyle m nbsp im Folgenden fur die Lange von P displaystyle P nbsp und n displaystyle n nbsp fur die Lange von T displaystyle T nbsp steht Die Anzahl der Vorkommen von P displaystyle P nbsp ist dann gleich der Anzahl der Suffixe die in diesem Block liegen Damit kann die Anzahl der Vorkommen insgesamt in O m log n displaystyle O m cdot log n nbsp bestimmt werden Wenn zusatzlich die Ausgabe der Anfangspositionen aller exakten Vorkommen gefordert ist mussen stattdessen die Werte des Suffixarrays in dem Block zuruckgegeben werden Die Laufzeit hierfur betragt O m log n O P displaystyle O m cdot log n vert O P vert nbsp wobei O P displaystyle vert O P vert nbsp fur die Anzahl der Vorkommen von P displaystyle P nbsp in T displaystyle T nbsp steht 7 Verfeinerte Verfahren konnen unter Zuhilfenahme von weiteren Datenstrukturen bessere Laufzeiten erzielen Wenn das sogenannte LCP Array englisch longest common prefix zu T displaystyle T nbsp bestimmt und eine geeignete RMQ Datenstruktur englisch range minimum query zu dem LCP Array konstruiert wurde konnen Entscheidungs sowie Anzahlanfragen in O m displaystyle O m nbsp und Aufzahlungsanfragen in O m O P displaystyle O m vert O P vert nbsp beantwortet werden 8 Konstruktion eines Suffixbaums Bearbeiten Das Suffixarray eines Texts T displaystyle T nbsp wird haufig als Zwischenschritt benutzt um den zugehorigen Suffixbaum in Linearzeit zu konstruieren 9 Der Suffixbaum kann anschliessend ebenfalls als Index genutzt werden um Suchanfragen zu beantworten Kompression Bearbeiten Verschiedene Kompressionsverfahren konnen unter Einsatz des Suffixarrays effizient umgesetzt werden So kann die Faktorisierung der LZ77 Komprimierung in Linearzeit implementiert werden 10 Daruber hinaus kann man aus einem bestehenden Suffixarray mit sehr geringem Aufwand die Burrows Wheeler Transformation des Textes errechnen Dazu wird nacheinander fur jedes Suffix des Suffixarrays das Zeichen bestimmt das im Text genau eine Position vor dem Suffix steht und in einem Array abgelegt 11 Das resultierende Array ist dann identisch zur Burrows Wheeler Transformation des Textes und kann beispielsweise fur das bzip2 Kompressionsverfahren verwendet werden Geschichte BearbeitenSuffixarrays wurden ursprunglich 1990 von Gene Myers und Udi Manber entwickelt um den Speicherverbrauch im Vergleich zu Suffixbaumen zu reduzieren 2 Nachdem einige Jahre keine signifikanten Erkenntnisse auftraten sind Suffixarrays seit ca 2000 ein beliebtes Forschungsthema Seitdem wurde eine Vielzahl von Konstruktionsalgorithmen entwickelt die zahlreiche wunschenswerte Eigenschaften aufweisen Seit 1999 existieren Algorithmen die in den meisten Anwendungsfallen schneller als die existierenden Linearzeitalgorithmen sind schlimmstenfalls jedoch einen Zeitbedarf im Bereich O n log n displaystyle O n log n nbsp bis O n 2 log n displaystyle O n 2 log n nbsp haben 3 12 Die ersten garantierten Linearzeit Algorithmen d h solche mit Worst Case Laufzeit O n displaystyle O n nbsp sind erst seit 2003 bekannt 13 14 Seit 2004 ist bekannt dass Suffixarrays jedes Problem mit der gleichen Zeitkomplexitat wie Suffixbaume losen konnen 15 Spatestens seit diesem Zeitpunkt sind Suffixarrays daher fur fast alle Suffix und Stringsortierungsaufgaben das Mittel der Wahl Ab 2005 wurde neben der Konstruktion auch die effiziente Speicherung von Suffixarrays betrachtet Neben reinen Suffixarrays konnen nun auch komprimierte Suffixarrays effizient konstruiert und verwendet werden 16 17 Auch fur auf der Burrows Wheeler Transformation basierende komprimierte Volltext Indizes sind sie nutzlich Literatur BearbeitenUdi Manber Gene Myers Suffix arrays a new method for on line string searches In SIAM Journal on Computing Volume 22 Issue 5 Oktober 1993 S 935 948 Pang Ko Srinivas Aluru Space efficient linear time construction of suffix arrays In Combinatorial Pattern Matching CPM 03 LNCS 2676 Springer 2003 S 203 210 Juha Karkkainen Peter Sanders Simple linear work suffix array construction PDF 193 kB In Proc 30th International Colloquium on Automata Languages and Programming ICALP 03 LNCS 2719 Springer 2003 S 943 955 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Bremen 2013 uni ulm de Klaus Bernd Schurmann Jens Stoye An incomplex algorithm for fast suffix array construction PDF 204 kB In Proceedings of ALENEX 2005 Weblinks Bearbeiten nbsp Commons Suffix array Sammlung von Bildern Videos und Audiodateien Beispiel zur Verwendung von Suffixarrays fur die Suche von Wortern in einem WorterbuchEinzelnachweise Bearbeiten a b c Simon J Puglisi W F Smyth Andrew H Turpin A Taxonomy of Suffix Array Construction Algorithms In ACM Computing Surveys CSUR 39 2 2007 a b U Manber G W Myers Suffix arrays A new method for on line string searches In Proceedings of the 1st ACM SIAM Symposium on Discrete Algorithms 1990 a b J N Larsson K Sadakane Faster suffix sorting In Tech rep LU CS TR 99 214 Dep of Computer Science Lund University Schweden 1999 Nong Ge Sen Zhang Wai Hong Chan Two Efficient Algorithms for Linear Time Suffix Array Construction In IEEE Transactions on Computers 60 no 10 October 2011 S 1471 1484 Nataliya Timoshevskaya Wu chun Feng SAIS OPT On the characterization and optimization of the SA IS algorithm for suffix array construction In 2014 IEEE 4th International Conference on Computational Advances in Bio and Medical Sciences ICCABS 2014 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Verlag Bremen 2013 ISBN 978 3 00 041316 2 S 116 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Verlag Bremen 2013 ISBN 978 3 00 041316 2 S 120 125 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Verlag Bremen 2013 ISBN 978 3 00 041316 2 S 117 118 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Verlag Bremen 2013 ISBN 978 3 00 041316 2 S 113 114 Enno Ohlebusch Bioinformatics Algorithms Sequence Analysis Genome Rearrangements and Phylogenetic Reconstruction Oldenbusch Verlag Bremen 2013 ISBN 978 3 00 041316 2 S 130 Juha Karkkainen Fast BWT in small space by blockwise suffix sorting In Theoretical Computer Science Band 387 Nr 3 2007 S 251 PDF 227KB S Burkhardt J Karkkainen Fast lightweight suffix array construction and checking In Proceedings of the 14th Annual Symposium CPM 2003 P Ko S Aluru Space efficient linear time construction of suffix arrays In Proceedings of the 14th Annual Symposium CPM 2003 Juha Karkkainen Peter Sanders Simple linear work suffix array construction PDF 193 kB In Proc 30th International Colloquium on Automata Languages and Programming ICALP 03 LNCS 2719 Springer 2003 S 943 955 M I Abouelhoda S Kurtz E Ohlebusch Replacing suffix trees with suffix arrays In J Disc Algor 2 1 2004 S 53 86 R Grossi J Vitter Compressed suffix arrays and suffix trees with applications to text indexing and string matching In SIAM J Comput 35 2 2005 S 378 407 G Navarro V Makinen Compressed full text indexes In ACM Comput Serv 39 1 2 2007 Abgerufen von https de wikipedia org w index php title Suffixarray amp oldid 208284535