Paweł Gawrychowski Wyszukiwanie wzorca października / 31

Podobne dokumenty
Wykład 6. Wyszukiwanie wzorca w tekście

AKD Metody słownikowe

1 abbbaabaaabaa -wzorzec: aaba

Kodowanie informacji

LZ77 LZ78. Kompresja danych. Tomasz Jurdziński. Wykład 5: kodowanie słownikowe

Komiwojażer na płaszczyźnie

Listy z przeskokami jako drzewa wyszukiwań

Temat: Algorytmy wyszukiwania wzorca w tekście

Zadanie 3 Oblicz jeżeli wiadomo, że liczby 8 2,, 1, , tworzą ciąg arytmetyczny. Wyznacz różnicę ciągu. Rozwiązanie:

Algorytmy i struktury danych. wykład 8

Złożoność informacyjna Kołmogorowa. Paweł Parys

Kompresja bezstratna. Entropia. Kod Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Modelowanie motywów łańcuchami Markowa wyższego rzędu

Algorytmika i kombinatoryka tekstów

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

STRATEGIA PRZETWARZANIA DOKUMENTÓW TEKSTOWYCH OPARTA NA HEURYSTYCZNEJ ANALIZIE DANYCH

TEORETYCZNE PODSTAWY INFORMATYKI

Kody Tunstalla. Kodowanie arytmetyczne

FFT i dyskretny splot. Aplikacje w DSP

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2

Kodowanie informacji

Jak matematyka pomaga w wyszukiwanie wzorca

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wyszukiwanie wzorca w skompresowanym tekście

W. Guzicki Zadanie IV z Informatora Maturalnego poziom rozszerzony 1

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Algorytm Grovera. Kwantowe przeszukiwanie zbiorów. Robert Nowotniak

Wykład 5. Kompresja danych

FUNKCJA LINIOWA - WYKRES

Temat: Algorytm kompresji plików metodą Huffmana

Peter W. Shor - Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer. 19 listopada 2004 roku

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

komputery? Andrzej Skowron, Hung Son Nguyen Instytut Matematyki, Wydział MIM, UW

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Algorytmy dynamiczne. Piotr Sankowski. - p. 1/14

FIGURY I PRZEKSZTAŁCENIA GEOMETRYCZNE

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

złożony ze słów zerojedynkowych o długości co najmniej 3, w których druga i trzecia litera od końca sa

RÓWNANIA NIELINIOWE Maciej Patan

Identyfikacja znamion ukrytego plagiatu. Z wykorzystaniem IDEA Caseware

Wstęp do Programowania potok funkcyjny

ANALIZA PORÓWNAWCZA ALGORYTMÓW WYSZUKIWANIA WZORCA W TEKŚCIE

JAO - Wprowadzenie do Gramatyk bezkontekstowych

PROBLEMY NIEROZSTRZYGALNE

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA I GIMNAZJUM Małgorzata Janik

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 7

Programowanie liniowe

Zaawansowane algorytmy i struktury danych

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Algorytmy w teorii liczb

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Transformaty. Kodowanie transformujace

Programowanie celowe #1

Programowanie dynamiczne

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Uliniawianie całych genomów

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

1 Układy równań liniowych

Kodowanie Shannona-Fano

Zasady analizy algorytmów

domykanie relacji, relacja równoważności, rozkłady zbiorów

Uniwersyteckie Koło Matematyczne - Tajemnicza liczba e.

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

Paradygmaty dowodzenia

Algorytmy tekstowe na przykładzie KMP

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

Czy kwadrat da się podzielić na nieparzystą liczbę trójkątów o równych polach? Michał Kieza

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 1 WSTĘP DO INFORMATYKI

Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

Wyszukiwanie binarne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n

Strukturalne własności transformaty Burrowsa-Wheelera dla pewnych klas słów

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

CIĄGI wiadomości podstawowe

Zmienne losowe i ich rozkłady

Kodowanie predykcyjne

Algorytmy i struktury danych

Ćwiczenia z metodyki nauczania rachunku prawdopodobieństwa

3. FUNKCJA LINIOWA. gdzie ; ół,.

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i Struktury Danych.

Granica kompresji Kodowanie Shannona Kodowanie Huffmana Kodowanie ciągów Kodowanie arytmetyczne. Kody. Marek Śmieja. Teoria informacji 1 / 35

PRZYKŁADY ZADAŃ MATURALNYCH Z MATEMATYKI NA POSZCZEGÓLNE STANDARDY DLA WYBRANYCH TREŚCI PROGRAMOWYCH Z POZIOMU PODSTAWOWEGO I ROZSZERZONEGO

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

0 + 0 = 0, = 1, = 1, = 0.

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

OBLICZALNOŚĆ I NIEOBLICZALNOŚĆ

Algorytmy przeszukiwania wzorca

Analiza algorytmów zadania podstawowe

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

Luty 2001 Algorytmy (4) 2000/2001

Transkrypt:

Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 1 / 31

Wyszukiwanie wzorca w skompresowanym tekście Paweł Gawrychowski 25 października 2011 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 1 / 31

Jaki jest najbardziej naturalny problem zwiazany z przetwarzaniem tekstu? Wyszukiwanie wzorca w tekście Czy dany wzorzec p występuje w danym tekście t? Jeśli tak, gdzie jest jego pierwsze wystapienie? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 2 / 31

Znajdź kjfdkasl w rokjfdkjncbvdkojsdlkjsldskjxlkalkjfslakjlkxxcv epofikflskdjflskjvnlmnapodierpereporipojdpdaja kjrtrgdkjfdkaslkdjoretieodflkgjsnlgkjdslgkjldf riudkxdjwoisdoiwlkmssoiwoiosdkjwoixkcjksjdkjws wjnswoislkcxlkqpodskjzlapoqlksdxcmdfepowepofde zirpotdpoitgiouyoewpoiewlkjdklnkjfdkaslldkjgrp oieorisdlkweoidssdlkweoidscxmnosdwoioweiwoiwoi eopripowedkljskljwekljsdldkjsxmcnweioiewdlskjd rotirlekdlsdfdwmcslkcsdpowkdwpodkwpoekwpoporer eporjmkjfdkaslpwiowjsklncxmncsldkwpoeiwpoikwed ojreoijdkmndkjnfekreopreojkslkdjsapowi2poqwiqp Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 3 / 31

Znajdź kjfdkasl w rokjfdkjncbvdkojsdlkjsldskjxlkalkjfslakjlkxxcv epofikflskdjflskjvnlmnapodierpereporipojdpdaja kjrtrgdkjfdkaslkdjoretieodflkgjsnlgkjdslgkjldf riudkxdjwoisdoiwlkmssoiwoiosdkjwoixkcjksjdkjws wjnswoislkcxlkqpodskjzlapoqlksdxcmdfepowepofde zirpotdpoitgiouyoewpoiewlkjdklnkjfdkaslldkjgrp oieorisdlkweoidssdlkweoidscxmnosdwoioweiwoiwoi eopripowedkljskljwekljsdldkjsxmcnweioiewdlskjd rotirlekdlsdfdwmcslkcsdpowkdwpodkwpoekwpoporer eporjmkjfdkaslpwiowjsklncxmncsldkwpoeiwpoikwed ojreoijdkmndkjnfekreopreojkslkdjsapowi2poqwiqp Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 3 / 31

Znajdź kjfdkasl w rokjfdkjncbvdkojsdlkjsldskjxlkalkjfslakjlkxxcv epofikflskdjflskjvnlmnapodierpereporipojdpdaja kjrtrgdkjfdkaslkdjoretieodflkgjsnlgkjdslgkjldf riudkxdjwoisdoiwlkmssoiwoiosdkjwoixkcjksjdkjws wjnswoislkcxlkqpodskjzlapoqlksdxcmdfepowepofde zirpotdpoitgiouyoewpoiewlkjdklnkjfdkaslldkjgrp oieorisdlkweoidssdlkweoidscxmnosdwoioweiwoiwoi eopripowedkljskljwekljsdldkjsxmcnweioiewdlskjd rotirlekdlsdfdwmcslkcsdpowkdwpodkwpoekwpoporer eporjmkjfdkaslpwiowjsklncxmncsldkwpoeiwpoikwed ojreoijdkmndkjnfekreopreojkslkdjsapowi2poqwiqp Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 3 / 31

Wiadomo, że pierwsze wystapienie wzorca w tekście można znaleźć w czasie proporcjonalnym do p + t. Jest wiele różnych algorytmów osiagaj acych taka złożoność, najbardziej znany został podany przez Knutha, Morrisa i Pratta (często nazywa się go algorytmem KMP). D. E. Knuth, J. H. Morris, Jr., and V. R. Pratt. Fast pattern matching in strings. SIAM J. Comput., 6(2):323 350, 1977 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 4 / 31

W sytuacji, gdy tekst jest bardzo długi, konieczne jest przechowywanie go w skompresowanej postaci. Pytanie Co jeśli potrzebujemy wyszukać wystapienie wzorca w tekście, który jest składowany w skompresowanej postaci? Oczywiście zawsze można go po prostu zdekompresować i użyć dowolnego algorytmu wyszukiwania wzorca, ale czy nie wydaje się to marnotrawstwem? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 5 / 31

Jaki jest najbardziej naturalny problem zwiazany z przetwarzaniem tekstu? Wyszukiwanie wzorca w tekście Czy dany wzorzec p występuje w danym tekście t? Jeśli tak, gdzie jest jego pierwsze wystapienie? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 6 / 31

Jaki jest najbardziej naturalny problem zwiazany z przetwarzaniem tekstu? Wyszukiwanie wzorca w skompresowanym tekście Czy dany wzorzec p występuje w danym skompresowanym tekście t? Jeśli tak, gdzie jest jego pierwsze wystapienie? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 6 / 31

A skoro zadaliśmy już takie pytanie, nie sposób nie zauważyć jego naturalnego uogólnienia: Wyszukiwanie skompresowanego wzorca w skompresowanym tekście Czy dany skompresowany wzorzec p występuje w danym skompresowanym tekście t? Jeśli tak, gdzie jest jego pierwsze wystapienie? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 6 / 31

Oczywiście wszystko zależy od użytej metody kompresji. 1 kodowanie Huffmana, 2 metody oparte na algorytmie Lempela-Ziva, 3 transformata Burrowsa-Wheelera. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 7 / 31

Oczywiście wszystko zależy od użytej metody kompresji. 1 kodowanie Huffmana, 2 metody oparte na algorytmie Lempela-Ziva, 3 transformata Burrowsa-Wheelera. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 7 / 31

Metody kompresji oparte na algorytmie Lempela-Ziva Tekst t[1..n] jest dzielony na rozłaczne bloki b 1 b 2... b n. Każdy kolejny blok jest definiowany na podstawie bloków występujacych na lewo od niego. To co dokładnie rozumiemy przez definiowany zależy od konkretnego wariantu. Najczęściej używane sa następujace dwa: LZ77, LZ nowy blok b i jest podsłowem już przetworzonego prefiksu z doklejonym dokładnie jednym znakiem, zip,gzip,png LZ78, LZW nowy blok b i powstaje przez doklejenie jednego znaku do wcześniejszego bloku. compress,gif,tiff,pdf Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 8 / 31

Przykład kompresji LZW: ababbababababababababaabbbaa Co prawda n Ω( N), ale możliwa jest bardzo szybka kompresja/dekompresja. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 9 / 31

Przykład kompresji LZW: ababbababababababababaabbbaa Co prawda n Ω( N), ale możliwa jest bardzo szybka kompresja/dekompresja. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 9 / 31

Przykład kompresji LZW: ababbababababababababaabbbaa Co prawda n Ω( N), ale możliwa jest bardzo szybka kompresja/dekompresja. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 9 / 31

Przykład kompresji LZ: ababbababaaabbababaabaabbbaa Łatwo wyobrazić sobie przykład, w którym n = O(log N). Co prawda taka sytuacja raczej nie wystapi w praktyce, ale mamy z nia do czynienia w przypadku słów Fibonacciego, które często sa wykorzystywane jako trudny przykład dla różnego rodzaju algorytmów tekstowych. Możliwy jest też wariant, w którym nowo definiowany blok odwołuje się do samego siebie (self-referential LZ). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 10 / 31

Przykład kompresji LZ: ababbababaaabbababaabaabbbaa Łatwo wyobrazić sobie przykład, w którym n = O(log N). Co prawda taka sytuacja raczej nie wystapi w praktyce, ale mamy z nia do czynienia w przypadku słów Fibonacciego, które często sa wykorzystywane jako trudny przykład dla różnego rodzaju algorytmów tekstowych. Możliwy jest też wariant, w którym nowo definiowany blok odwołuje się do samego siebie (self-referential LZ). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 10 / 31

Przykład kompresji LZ: ababbababaaabbababaabaabbbaa Łatwo wyobrazić sobie przykład, w którym n = O(log N). Co prawda taka sytuacja raczej nie wystapi w praktyce, ale mamy z nia do czynienia w przypadku słów Fibonacciego, które często sa wykorzystywane jako trudny przykład dla różnego rodzaju algorytmów tekstowych. Możliwy jest też wariant, w którym nowo definiowany blok odwołuje się do samego siebie (self-referential LZ). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 10 / 31

Przykład kompresji LZ: ababbababaaabbababaabaabbbaa Łatwo wyobrazić sobie przykład, w którym n = O(log N). Co prawda taka sytuacja raczej nie wystapi w praktyce, ale mamy z nia do czynienia w przypadku słów Fibonacciego, które często sa wykorzystywane jako trudny przykład dla różnego rodzaju algorytmów tekstowych. Możliwy jest też wariant, w którym nowo definiowany blok odwołuje się do samego siebie (self-referential LZ). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 10 / 31

Kolejne bloki sa opisane przez pary (w LZW) lub trójki (w LZ):...ababbababaaabbababaabaabbbaaa......,a,b,(1,2,b),(1,4,a),(1,1,a),(4,8,b),(11,4,b),(10,2,a),... p=aaab Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 11 / 31

Kolejne bloki sa opisane przez pary (w LZW) lub trójki (w LZ):...ababbababaaabbababaabaabbbaaa......,a,b,(1,2,b),(1,4,a),(1,1,a),(4,8,b),(11,4,b),(10,2,a),... p=aaab Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 11 / 31

Kolejne bloki sa opisane przez pary (w LZW) lub trójki (w LZ):...ababbababaaabbababaabaabbbaaa......,a,b,(1,2,b),(1,4,a),(1,1,a),(4,8,b),(11,4,b),(10,2,a),... p=aaab Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 11 / 31

Oznaczenia t[1..n] tekst, który po skompresowaniu składa się z n bloków p[1..m] wzorzec, który po skompresowaniu składa się z m bloków Wyszukiwanie wzorca w skompresowanym tekście Wejście: p[1..m] i ciag n bloków definiujacych tekst t[1..n] Wyjście: czy p występuje w t? Model obliczeń? Pracujemy w modelu RAM ze słowami rozmiaru log N. Można myśleć, że piszemy program w imperatywnym języku typu C, Java,... Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 12 / 31

Oznaczenia t[1..n] tekst, który po skompresowaniu składa się z n bloków p[1..m] wzorzec, który po skompresowaniu składa się z m bloków Wyszukiwanie wzorca w skompresowanym tekście Wejście: p[1..m] i ciag n bloków definiujacych tekst t[1..n] Wyjście: czy p występuje w t? Model obliczeń? Pracujemy w modelu RAM ze słowami rozmiaru log N. Można myśleć, że piszemy program w imperatywnym języku typu C, Java,... Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 12 / 31

Pierwszy nietrywialny algorytm wyszukiwania wzorca w LZW-skompresowanym tekście został podany w roku 1994 przez Amira, Bensona i Faracha. A tak naprawdę podali oni dwa algorytmy działajace w czasie O(n log M + M) i O(n + M 2 ). A. Amir, G. Benson, and M. Farach. Let sleeping files lie: pattern matching in Z-compressed files. In SODA 94: Proceedings of the fifth annual ACM-SIAM symposium on Discrete algorithms, pages 705 714, Philadelphia, PA, USA, 1994. Society for Industrial and Applied Mathematics Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 13 / 31

Rok później ten drugi algorytm został poprawiony przez Kosaraju, który podał rozwiazanie działajace w czasie O(n + M 1+ɛ ). S. R. Kosaraju. Pattern matching in compressed texts. In Proceedings of the 15th Conference on Foundations of Software Technology and Theoretical Computer Science, pages 349 362, London, UK, 1995. Springer-Verlag Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 14 / 31

Nasuwa się dość oczywiste pytanie: czy istnieje dla tego problemu algorytm działajacy w czasie O(n + M)? Tak! Problem wyszukiwania wzorca w LZW-skompresowanym tekście może być rozwiazany w optymalnym czasie O(n + M). P. Gawrychowski. Optimal pattern matching in LZW compressed strings. In D. Randall, editor, SODA, pages 362 372. SIAM, 2011 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 15 / 31

Nasuwa się dość oczywiste pytanie: czy istnieje dla tego problemu algorytm działajacy w czasie O(n + M)? Tak! Problem wyszukiwania wzorca w LZW-skompresowanym tekście może być rozwiazany w optymalnym czasie O(n + M). P. Gawrychowski. Optimal pattern matching in LZW compressed strings. In D. Randall, editor, SODA, pages 362 372. SIAM, 2011 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 15 / 31

W przypadku (bardziej ogólnej) kompresji LZ nie jest oczywiste, że jesteśmy w stanie skonstruować algorytm o czasie działania zależnym od n, a nie N. Okazuje się, że jest to jednak możliwe, co pokazali w roku 1995 Farach i Thorup. Ich algorytm wyszukiwania wzorca w LZ-skompresowanym tekście działa w (oczekiwanym) czasie O(n log 2 N n + M). M. Farach and M. Thorup. String matching in Lempel-Ziv compressed strings. In Proceedings of the twenty-seventh annual ACM symposium on Theory of computing, STOC 95, pages 703 712, New York, NY, USA, 1995. ACM Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 16 / 31

W roku 2010 Iacono i Özkan udowodnili, że jedna z części tego algorytmu może zostać przyśpieszony do O(n log N n ), jednak nie umieli osiagn ać lepszej złożoności dla całego problemu. Czy możliwe jest osiagnięcie lepszego czasu działania? Tak! Problem wyszukiwania wzorca w LZ-skompresowanym tekście może być rozwiazany w czasie O(n log N n + M). P. Gawrychowski. Pattern matching in Lempel-Ziv compressed strings: fast, simple, and deterministic. In C. Demetrescu and M. M. Halldórsson, editors, ESA, volume 6942 of Lecture Notes in Computer Science, pages 421 432. Springer, 2011 Co prawda powyższa złożoność nie jest liniowa, ale udowodniłem też, że w odrobinę bardziej restrykcyjnym modelu obliczeń niemożliwe jest zejście poniżej Θ(n log N + M). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 17 / 31

W roku 2010 Iacono i Özkan udowodnili, że jedna z części tego algorytmu może zostać przyśpieszony do O(n log N n ), jednak nie umieli osiagn ać lepszej złożoności dla całego problemu. Czy możliwe jest osiagnięcie lepszego czasu działania? Tak! Problem wyszukiwania wzorca w LZ-skompresowanym tekście może być rozwiazany w czasie O(n log N n + M). P. Gawrychowski. Pattern matching in Lempel-Ziv compressed strings: fast, simple, and deterministic. In C. Demetrescu and M. M. Halldórsson, editors, ESA, volume 6942 of Lecture Notes in Computer Science, pages 421 432. Springer, 2011 Co prawda powyższa złożoność nie jest liniowa, ale udowodniłem też, że w odrobinę bardziej restrykcyjnym modelu obliczeń niemożliwe jest zejście poniżej Θ(n log N + M). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 17 / 31

W obydwu algorytmach (wyszukiwania wzorca w LZW- i LZ-skompresowanym tekście) kluczowe jest szybkie operowanie na długich blokach tekstu. W szczególności, konieczne jest skonstruowanie procedury, która majac dane dwa podsłowa wzorca znajdzie wystapienie w ich konkatenacji. Lemat 4.1 Majac dane dwa podsłowa wzorca można sprawdzić czy wzorzec występuje w ich konkatenacji w stałym czasie. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 18 / 31

W obydwu algorytmach (wyszukiwania wzorca w LZW- i LZ-skompresowanym tekście) kluczowe jest szybkie operowanie na długich blokach tekstu. W szczególności, konieczne jest skonstruowanie procedury, która majac dane dwa podsłowa wzorca znajdzie wystapienie w ich konkatenacji. Lemat 4.1 Majac dane dwa podsłowa wzorca można sprawdzić czy wzorzec występuje w ich konkatenacji w stałym czasie. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 18 / 31

p[i 1..j 1 ] p[i 2..j 2 ] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] p[1..x] p[x + 1..M] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] p[1..x] p[m y + 1..M] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] p[1..x] p[m y + 1..M] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] p[1..x] p[m y + 1..M] x + y = M Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

p[1..i] p[j..m] p[1..x] p[m y + 1..M] x + y = M b jest borderem słowa w iff w[1..b] = w[ w b + 1.. w ] Szukamy takich x border(p[1..i]) i y border(p[j..m]), że x + y = M. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 19 / 31

border(w) może mieć bardzo dużo (liniowo) różnych elementów, które na pierwszy rzut oka wydaja się nie mieć wiele wspólnego. Jeśli jednak popatrzymy się na: w border(w) {,..., w 1, w } 2 można zauważyć, że ta część tworzy ciag arytmetyczny. A dokładniej, jeżeli d jest okresem w, sa one postaci w αd. Nazywamy je długimi borderami. Teraz można zauważyć, że x lub y musi być długim borderem. Ze względu na symetrię wystarczy poradzić sobie z tym pierwszym przypadkiem. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 20 / 31

border(w) może mieć bardzo dużo (liniowo) różnych elementów, które na pierwszy rzut oka wydaja się nie mieć wiele wspólnego. Jeśli jednak popatrzymy się na: w border(w) {,..., w 1, w } 2 można zauważyć, że ta część tworzy ciag arytmetyczny. A dokładniej, jeżeli d jest okresem w, sa one postaci w αd. Nazywamy je długimi borderami. Teraz można zauważyć, że x lub y musi być długim borderem. Ze względu na symetrię wystarczy poradzić sobie z tym pierwszym przypadkiem. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 20 / 31

Wybieramy przesunięcie postaci αd, które zaczyna się w p[1..i], ale jest tak daleko na prawo jak to tylko możliwe. Wyznaczamy pierwsza niezgodność tego przesunięcia. p[1..i] przeszkoda p[j..m] d p[1..m] koniec okresu Okazuje się, że na podstawie pozycji przeszkody można wyznaczyć prosty arytmetyczny warunek, który pozwala nam na wyeliminowanie wszystkich przesunięć poza jednym. Sprawdzamy to jedyne potencjalne przesunięcie za pomoca kilku pytań o równość fragmentów wzorca. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 21 / 31

Wybieramy przesunięcie postaci αd, które zaczyna się w p[1..i], ale jest tak daleko na prawo jak to tylko możliwe. Wyznaczamy pierwsza niezgodność tego przesunięcia. przeszkoda abcdefg abcdefg abcdefg abcd efg abcdefg abx d abcdefg abcdefg abcdefg abcdefgabx koniec okresu Okazuje się, że na podstawie pozycji przeszkody można wyznaczyć prosty arytmetyczny warunek, który pozwala nam na wyeliminowanie wszystkich przesunięć poza jednym. Sprawdzamy to jedyne potencjalne przesunięcie za pomoca kilku pytań o równość fragmentów wzorca. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 21 / 31

Wybieramy przesunięcie postaci αd, które zaczyna się w p[1..i], ale jest tak daleko na prawo jak to tylko możliwe. Wyznaczamy pierwsza niezgodność tego przesunięcia. przeszkoda abcdefg abcdefg abcdefg abcd efg abcdefg abx d abcdefg abcdefg abcdefg abcdefg abx koniec okresu Okazuje się, że na podstawie pozycji przeszkody można wyznaczyć prosty arytmetyczny warunek, który pozwala nam na wyeliminowanie wszystkich przesunięć poza jednym. Sprawdzamy to jedyne potencjalne przesunięcie za pomoca kilku pytań o równość fragmentów wzorca. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 21 / 31

Wybieramy przesunięcie postaci αd, które zaczyna się w p[1..i], ale jest tak daleko na prawo jak to tylko możliwe. Wyznaczamy pierwsza niezgodność tego przesunięcia. przeszkoda abcdefg abcdefg abcdefg abcd efg abcdefg abx d abcdefg abcdefg abcdefg abcdefg abx koniec okresu Okazuje się, że na podstawie pozycji przeszkody można wyznaczyć prosty arytmetyczny warunek, który pozwala nam na wyeliminowanie wszystkich przesunięć poza jednym. Sprawdzamy to jedyne potencjalne przesunięcie za pomoca kilku pytań o równość fragmentów wzorca. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 21 / 31

Podobny pomysł daje: (rozszerzony) Lemat 4.2 Majac dane dwa podsłowa wzorca można wyznaczyć najdłuższy sufiks ich konkatenacji, który jest prefiksem całego wzorca w czasie O(log M). Bazujac na tych dwóch lematach (i dodajac kilka innych pomysłów) uzyskujemy żadane złożoności dla obydwu problemów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 22 / 31

Podobny pomysł daje: (rozszerzony) Lemat 4.2 Majac dane dwa podsłowa wzorca można wyznaczyć najdłuższy sufiks ich konkatenacji, który jest prefiksem całego wzorca w czasie O(log M). Bazujac na tych dwóch lematach (i dodajac kilka innych pomysłów) uzyskujemy żadane złożoności dla obydwu problemów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 22 / 31

Wyszukiwanie skompresowanego wzorca w skompresowanym tekście Wejście: ciag m bloków definiujacych wzorzec p[1..m] i ciag n bloków definiujacych tekst t[1..n] Wyjście: czy p występuje w t? W tym przypadku problem wydaje się istotnie trudniejszy: wszystkie liniowe algorytmy wyszukiwania wzorca bazuja na mniej lub bardziej skomplikowanym przetworzeniu wszystkich prefiksów/sufiksów/... wzorca. Jeśli wzorzec jest skompresowany, nie wiadomo czy mamy na to czas. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 23 / 31

Okazuje się jednak, że tak zdefiniowany problem wyszukiwania LZW-skompresowanego wzorca w LZW-skompresowanym tekście może być rozwiazany w czasie O((n + m) log(n + m)), co udowodnili w roku 1999 Gasieniec i Rytter. L. Gasieniec and W. Rytter. Almost optimal fully LZW-compressed pattern matching. In Data Compression Conference, pages 316 325, 1999 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 24 / 31

Nasuwa się oczywiste pytanie: czy można osiagn ać złożoność O(n + m)? Tak! Problem wyszukiwania LZW-skompresowanego wzorca w LZW-skompresowanym tekście może być rozwiazany w optymalnym czasie O(n + m). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 25 / 31

Nasuwa się oczywiste pytanie: czy można osiagn ać złożoność O(n + m)? Tak! Problem wyszukiwania LZW-skompresowanego wzorca w LZW-skompresowanym tekście może być rozwiazany w optymalnym czasie O(n + m). Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 25 / 31

Idea Jeżeli wzorzec jest ma krótki okres, na przykład p = (abbab) 1000, wystarczyłoby znaleźć wystapienia abbab i na ich podstawie znaleźć całe p. Ale.. wszystkich wystapień może być BARDZO dużo. No dobrze, ale przecież wzorzec wcale nie musi mieć krótkiego okresu. Kernel Kernelem wzorca nazywamy nieokresowe podsłowo długości n + m. Lemat Jeśli okres wzorca jest większy niż n + m, można znaleźć w nim kernel. Łatwo pokazać, że kernel nie może występować więcej niż n + m razy w tekście. A więc możemy pozwolić sobie na wygenerowanie tych wszystkich wystapień! Następnie trzeba tylko sprawdzić, które z tych wystapień daja się rozszerzyć do wystapień całego p. Wymaga to użycia kilku dodatkowych pomysłów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 26 / 31

Idea Jeżeli wzorzec jest ma krótki okres, na przykład p = (abbab) 1000, wystarczyłoby znaleźć wystapienia abbab i na ich podstawie znaleźć całe p. Ale.. wszystkich wystapień może być BARDZO dużo. No dobrze, ale przecież wzorzec wcale nie musi mieć krótkiego okresu. Kernel Kernelem wzorca nazywamy nieokresowe podsłowo długości n + m. Lemat Jeśli okres wzorca jest większy niż n + m, można znaleźć w nim kernel. Łatwo pokazać, że kernel nie może występować więcej niż n + m razy w tekście. A więc możemy pozwolić sobie na wygenerowanie tych wszystkich wystapień! Następnie trzeba tylko sprawdzić, które z tych wystapień daja się rozszerzyć do wystapień całego p. Wymaga to użycia kilku dodatkowych pomysłów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 26 / 31

Idea Jeżeli wzorzec jest ma krótki okres, na przykład p = (abbab) 1000, wystarczyłoby znaleźć wystapienia abbab i na ich podstawie znaleźć całe p. Ale.. wszystkich wystapień może być BARDZO dużo. No dobrze, ale przecież wzorzec wcale nie musi mieć krótkiego okresu. Kernel Kernelem wzorca nazywamy nieokresowe podsłowo długości n + m. Lemat Jeśli okres wzorca jest większy niż n + m, można znaleźć w nim kernel. Łatwo pokazać, że kernel nie może występować więcej niż n + m razy w tekście. A więc możemy pozwolić sobie na wygenerowanie tych wszystkich wystapień! Następnie trzeba tylko sprawdzić, które z tych wystapień daja się rozszerzyć do wystapień całego p. Wymaga to użycia kilku dodatkowych pomysłów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 26 / 31

Idea Jeżeli wzorzec jest ma krótki okres, na przykład p = (abbab) 1000, wystarczyłoby znaleźć wystapienia abbab i na ich podstawie znaleźć całe p. Ale.. wszystkich wystapień może być BARDZO dużo. No dobrze, ale przecież wzorzec wcale nie musi mieć krótkiego okresu. Kernel Kernelem wzorca nazywamy nieokresowe podsłowo długości n + m. Lemat Jeśli okres wzorca jest większy niż n + m, można znaleźć w nim kernel. Łatwo pokazać, że kernel nie może występować więcej niż n + m razy w tekście. A więc możemy pozwolić sobie na wygenerowanie tych wszystkich wystapień! Następnie trzeba tylko sprawdzić, które z tych wystapień daja się rozszerzyć do wystapień całego p. Wymaga to użycia kilku dodatkowych pomysłów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 26 / 31

Idea Jeżeli wzorzec jest ma krótki okres, na przykład p = (abbab) 1000, wystarczyłoby znaleźć wystapienia abbab i na ich podstawie znaleźć całe p. Ale.. wszystkich wystapień może być BARDZO dużo. No dobrze, ale przecież wzorzec wcale nie musi mieć krótkiego okresu. Kernel Kernelem wzorca nazywamy nieokresowe podsłowo długości n + m. Lemat Jeśli okres wzorca jest większy niż n + m, można znaleźć w nim kernel. Łatwo pokazać, że kernel nie może występować więcej niż n + m razy w tekście. A więc możemy pozwolić sobie na wygenerowanie tych wszystkich wystapień! Następnie trzeba tylko sprawdzić, które z tych wystapień daja się rozszerzyć do wystapień całego p. Wymaga to użycia kilku dodatkowych pomysłów. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 26 / 31

Kolejnym naturalnym uogólnieniem wyszukiwania wzorca w skompresowanym tekście jest dopuszczenie podawania więcej niż jednego wzorca. Wyszukiwanie wielu wzorców w skompresowanym tekście Wejście: wzorce p 1, p 2,..., p k o sumarycznej długości M i ciag n bloków definiujacych tekst t[1..n] Wyjście: czy któryś z p i występuje w t? Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 27 / 31

Oczywiście można szukać każdego p i osobno, ale jeśli będzie ich kilkaset tysięcy, wydaje się to nierozsadne. Okazuje się, że dla wyszukiwania wielu wzorców w LZW-skompresowanym tekście można osiagn ać złożoność O(n + M 2 ), co pokazali w roku 1998 Kida, Takeda, Shinohara, Miyazaki i Arikawa. T. Kida, M. Takeda, A. Shinohara, M. Miyazaki, and S. Arikawa. Multiple pattern matching in LZW compressed text. In Data Compression Conference, pages 103 112, 1998 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 28 / 31

Czy możliwa jest lepsza złożoność? Tak! Problem wyszukiwania wielu wzorców w LZW-skompresowanym tekście może być rozwiazany w czasie O(n + M 1+ɛ ) lub O(n log M + M). Kluczowe dla rozwiazania jest zredukowanie oryginalnego problemu do zbudowania struktury danych umożliwiajacej szybkie odpowiadanie na pytania dotyczace punktów/odcinków/prostokatów na płaszczyźnie Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 29 / 31

Czy możliwa jest lepsza złożoność? Tak! Problem wyszukiwania wielu wzorców w LZW-skompresowanym tekście może być rozwiazany w czasie O(n + M 1+ɛ ) lub O(n log M + M). Kluczowe dla rozwiazania jest zredukowanie oryginalnego problemu do zbudowania struktury danych umożliwiajacej szybkie odpowiadanie na pytania dotyczace punktów/odcinków/prostokatów na płaszczyźnie Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 29 / 31

Na przykład, dla zbioru prostokatów o bokach równoległych do osi OX/OY chcemy zbudować strukturę danych, która po podaniu punktu szybko znajdzie prostokat, do którego ten punkt należy. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 30 / 31

Na przykład, dla zbioru prostokatów o bokach równoległych do osi OX/OY chcemy zbudować strukturę danych, która po podaniu punktu szybko znajdzie prostokat, do którego ten punkt należy. Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 30 / 31

Pytania? O(n + M) SODA 2011 O(n + m) w pełni skompresowane LZW O(n + M 1+ɛ ) wiele wzorców O(n log M + M) LZ O(n log N n + M) ESA 2011 Paweł Gawrychowski Wyszukiwanie wzorca... 25 października 2011 31 / 31