Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Bartłomiej Romański Nr albumu: 219543 Strukturalne własności transformaty Burrowsa-Wheelera dla pewnych klas słów Praca magisterska na kierunku INFORMATYKA Praca wykonana pod kierunkiem prof. dr. hab. Wojciecha Ryttera Instytut Informatyki UW Wrzesień 2009
Oświadczenie kierującego pracą Potwierdzam, że niniejsza praca została przygotowana pod moim kierunkiem i kwalifikuje się do przedstawienia jej w postępowaniu o nadanie tytułu zawodowego. Data Podpis kierującego pracą Oświadczenie autora (autorów) pracy Świadom odpowiedzialności prawnej oświadczam, że niniejsza praca dyplomowa została napisana przeze mnie samodzielnie i nie zawiera treści uzyskanych w sposób niezgodny z obowiązującymi przepisami. Oświadczam również, że przedstawiona praca nie była wcześniej przedmiotem procedur związanych z uzyskaniem tytułu zawodowego w wyższej uczelni. Oświadczam ponadto, że niniejsza wersja pracy jest identyczna z załączoną wersją elektroniczną. Data Podpis autora (autorów) pracy
Streszczenie W pracy sformułowana została hipoteza na temat stopnia kompresji słów generowanych przez morfizmy uzyskiwanego przy pomocy transformaty Burrowsa-Wheelera. W celu poparcia hipotezy dokładnie opisana została zwarta postać BWT następujących klas słów: Słowa Fibonacciego Słowa Thuego-Morse a Słowa bezkwadratowe Thuego-Morse a Słowa Cantora Słowa Paper Folding O ile w przypadku słów Fibonacciego oraz słów Thuego-Morse a zaprezentowane zostały jedynie alternatywne dowody znanych rezultatów, o tyle w przypadku słów bezkwadratowych Thuego-Morse a, słów Cantora oraz słów Paper Folding są to nowe wyniki. Co więcej, dla większości wykorzystywanych morfizmów przedstawione zostały szczegółowe twierdzenia opisujące, jak zmienia się postać BWT dowolnego słowa po wykonaniu na nim badanych przekształceń. Dodatkowo postawiona w pracy hipoteza została automatycznie przetestowana na szerokiej gamie przykładów. Słowa kluczowe Transformata Burrowsa-Wheelera, morfizmy słów, słowa Fibonacciego, słowa Thuego-Morse a, słowa bezkwadratowe Thuego-Morse a, słowa Cantora, słowa Paper Folding 11.3 Informatyka Dziedzina pracy (kody wg programu Socrates-Erasmus) Klasyfikacja tematyczna G.2.1 Mathematics of Computing : Discrete Mathematics : Combinatorics E.4 Data : Coding And Information Theory Tytuł pracy w języku angielskim Structual properties of Burrows-Wheeler transform for some word classes
Spis treści Wstęp............................................ 5 1. Wprowadzenie..................................... 7 1.1. Terminologia.................................... 7 1.1.1. Podstawowe pojęcia związane ze słowami................ 7 1.1.2. Porządek leksykograficzny słów...................... 8 1.1.3. Morfizmy słów............................... 8 1.2. Wybrane klasy słów................................ 8 1.2.1. Słowa Fibonacciego............................ 8 1.2.2. Słowa Thuego-Morse a........................... 9 1.2.3. Słowa bezkwadratowe Thuego-Morse a.................. 10 1.2.4. Słowa Cantora............................... 10 1.2.5. Słowa Paper Folding............................ 11 1.3. Transformata Burrowsa-Wheelera......................... 12 1.3.1. Definicja................................... 12 1.3.2. Odwracalność................................ 13 1.3.3. Znaczenie praktyczne........................... 13 1.3.4. Efektywne algorytmy kodowania i dekodowania............. 14 1.4. Hipoteza o BWT-regularności dla morfizmów.................. 14 2. Słowa Fibonacciego.................................. 17 2.1. Słowa Sturma.................................... 19 3. Słowa Thuego-Morse a................................ 21 4. Słowa bezkwadratowe Thuego-Morse a...................... 23 5. Słowa Cantora..................................... 27 6. Słowa Paper Folding................................. 31 7. Podsumowanie..................................... 37 7.1. Badane morfizmy.................................. 37 7.2. Morfizmy binarne.................................. 38 7.3. Pozostałe morfizmy................................. 38 Bibliografia......................................... 42 3
Wstęp Transformata Burrowsa-Wheelera (BWT) jest algorytmem powszechnie wykorzystywanym w kompresji bezstratnej. O jej popularności oraz wysokim znaczeniu praktycznym świadczy m. in. fakt, że stanowi ona podstawę działania popularnego narzędzia bzip2. Transformata oraz jej potencjalne zastosowania zostały po raz pierwszy opisane w pracy Michaela Burrowsa i Davida Wheelera stosunkowo niedawno, w 1993 roku. Bazuje ona na nieopublikowanej transformacie odkrytej przez samego Wheelera ponad 10 lat wcześniej, w 1984 roku. Przekształcenie dokonuje jedynie permutacji liter słowa wejściowego w słowie wyjściowym pojawiają się dokładnie te same symbole jednak w zmodyfikowanej kolejności. Co ciekawe, przekształcenie ma tę interesującą własność, że w stosunkowo wielu sytuacjach słowo wyjściowe poddaje się kompresji w dużo większym stopniu niż słowo wejściowe. Dzieje się tak, gdyż w wyniku transformaty litery mają tendencję do układania się w długie bloki złożone z identycznych symboli. Istotny jest przy tym oczywiście fakt, że przy minimalnej dodatkowej informacji, transformatę możemy odwrócić, dzięki czemu możliwa jest dekompresja przetwarzanego tekstu. Transformata Burrowsa-Wheelera poza zastosowaniami praktycznymi związanymi z kompresją danych ma także liczne ciekawe własności czysto teoretyczne. Okazuje się, że bardzo wiele, znanych klas słów, często o skomplikowanej budowie ma stosunkowo prostą postać BWT. Klasycznym, wręcz skrajnym, przykładem są słowa Fibonacciego (lub ogólniej, słowa Sturma), dla których wynikiem transformaty BWT jest zawsze słowo postaci 1 0. Efektywne obliczenie wyniku transformaty Burrowsa-Wheelera nie jest trywialne, może być jednak sprowadzone do obliczenia tablicy sufiksowej, zatem dla ustalonego alfabetu może zostać wykonane w czasie liniowym. Dekodowanie jest znacznie prostsze i również może zostać wykonane w czasie liniowym. Znacznie mniej wiadomo na temat tego, jak dynamicznie aktualizować wynik transformaty, jeśli oryginalny tekst ulegnie modyfikacji (np. dopisana lub usunięta zostanie pojedyncza litera). Niniejsza praca koncentruje się na zbadaniu i opisaniu postaci BWT wybranych klas słów generowanych przez morfizmy. W pierwszych rozdziałach przytoczone są znane wyniki dla słów Fibonacciego, słów Sturma oraz słów Thuego-Morse a. W tej części pracy na uwagę zasługuje wykorzystanie definicji opartych na odpowiednich morfizmach, zamiast na rekurencjach, co prowadzi do nowych, innych niż w przytaczanych pracach, dowodów. Dodatkowym wynikiem, jest dokładne opisanie, jak zmienia się postać BWT dowolnego słowa po wykonaniu na nim odpowiednich morfizmów. W dalszej części pracy szczegółowo omówiona została postać BWT dla słów bezkwadratowych Thuego-Morse a, słów Cantora oraz słów Paper Folding. Są to nowe wyniki, nie opisywane wcześniej w literaturze. Wyniki otrzymane dla poszczególnych klas słów opisanych w pracy pozwoliły sformułować przedstawioną w rozdziale 1.4 hipotezę na temat ogólnej postaci BWT słów generowanych przez morfizmy. Hipoteza została sprawdzona komputerowo na możliwie szerokiej gamie przykładów. 5
Rozdział 1 Wprowadzenie 1.1. Terminologia Większość terminów oraz oznaczeń używanych w pracy jest powszechnie stosowana, więc powinny być one całkowicie zrozumiałe. Jednak dla pełnej jasności poniżej przedstawione zostały wybrane definicje. Szczegółowo wybrane zagadnienia związane ze słowami zostały opisane m. in. w pracach [3, 13, 14, 22]. 1.1.1. Podstawowe pojęcia związane ze słowami Definicja 1.1.1. Słowem nazywamy skończony lub nieskończony ciąg elementów ze skończonego zbioru zbiór ten nazywamy alfabetem. Ponieważ dalsza część pracy koncentruje się na słowach skończonych, więc jeśli nie zostało wyraźnie zaznaczone, że jest inaczej, słowo należy zawsze traktować jako ciąg skończony. Słowa oznaczamy małymi literami alfabetu łacińskiego, alfabet najczęściej symbolem Σ, a jego elementy symbolami 0, 1, 2.... Zbiór wszystkich słów nad alfabetem Σ oznaczamy symbolem Σ. Podstawową operacją na słowach jest ich konkatenacja (zdefiniowana analogicznie jak konkatenacja ciągów). Konkatenację słów u i v zapisujemy po prostu jako uv. Długość słowa u zapisujemy jako u, a liczbę liter i w słowie u jako # i (u). W pracy istotne są także pojęcia prefiksu i sufiksu oraz rotacji cyklicznej słowa: Definicja 1.1.2. Słowo u nazywamy prefiksem słowa v jeśli istnieje takie słowo v, że v = uv. Definicja 1.1.3. Słowo u nazywamy sufiksem słowa v jeśli istnieje takie słowo v, że v = v u. Definicja 1.1.4. i-tą rotacją cykliczną słowa u będziemy nazywali słowo π i (u), gdzie funkcja π : Σ Σ oznacza następujące przekształcenie (u 1, u 2... u n oznaczają kolejne litery słowa u): π(u 1 u 2... u n ) = u 2 u 3... u n u 1 Zauważmy, że przekształcenie π jest odwracalne zatem zapis π i oraz określenie i-ta rotacja ma sens nie tylko dla i 0, ale także dla i < 0. Dodatkowo w pracy użyto następujących oznaczeń: Definicja 1.1.5. Dla dowolnego słowa u Σ słowo składające się z tych samych liter, ale zapisanych w odwrotnej kolejności oznaczamy przez u R. Definicja 1.1.6. Dla dowolnego słowa u {0, 1} słowo składające się z zanegowanych kolejnych liter słowa u, oznaczamy przez ū. 7
1.1.2. Porządek leksykograficzny słów Jeśli dany jest porządek symboli alfabetu (w pracy używamy zawsze naturalnego porządku 0 < 1 < 2... ), możemy określić tzw. porządek leksykograficzny słów: Definicja 1.1.7. Mówimy, że słowo u jest mniejsze leksykograficznie od słowa v wtedy i tylko wtedy, gdy spełniony jest jeden z poniższych warunków: u jest prefiksem właściwym słowa v, istnieje słowo p oraz symbole x, y takie, że słowa px, py są prefiksami odpowiednio słów u i v oraz x < y Łatwo zauważyć, że tak zdefiniowana relacja określa porządek liniowy na zbiorze Σ. 1.1.3. Morfizmy słów Definicja 1.1.8. Morfizmem nazywamy takie przekształcenie φ : Σ Σ, że dla dowolnych słów u, v Σ spełniony jest warunek: φ(uv) = φ(u) φ(v) Wśród morfizmów możemy wyróżnić następujące klasy: Definicja 1.1.9. Mówimy, że morfizm zachowuje porządek, jeśli dla dowolnych słów u, v Σ warunki u < v oraz φ(u) < φ(v) są równoważne. Definicja 1.1.10. Morfizm φ : Σ 1 Σ 2 nazywamy jednorodnym, jeśli dla każdej pary symboli x, y Σ 1 spełniony jest warunek φ(x) = φ(y). W pracy wielokrotnie wykorzystywany jest następujący, bardzo prosty fakt: Fakt 1.1.1. Morfizm jednorodny φ zachowuje porządek wtedy i tylko wtedy, gdy: φ(0) < φ(1) < φ(2)... Warto zauważyć, że niekoniecznie jest to prawda dla morfizmów niejednorodnych. 1.2. Wybrane klasy słów W niniejszym podrozdziale przedstawione oraz krótko omówione zostały wybrane klasy słów wykorzystywane w dalszej części pracy. Kolejne sekcje opisują słowa Fibonacciego, słowa Thuego-Morse a, słowa bezkwadratowe Thuego-Morse a, słowa Cantora oraz słowa Paper Folding. 1.2.1. Słowa Fibonacciego Chyba najczęściej spotkaną w literaturze klasą słów są słowa Fibonacciego. Słowa Fibonacciego możemy definiować na bardzo wiele równoważnych sposobów, ale prawdopodobnie najpopularniejsza jest przedstawiona poniżej definicja rekurencyjna. Definicja 1.2.1. i-tym słowem Fibonacciego nazywamy słowo: 1 dla i = 0, f i = 0 dla i = 1, f i 1 f i 2 dla i 2 8
Dla potrzeb niniejszej pracy warto jednak przyjrzeć się także alternatywnej definicji słów Fibonacciego, wykorzystującej morfizm φ f : Definicja 1.2.2. i-tym słowem Fibonacciego nazywamy słowo: gdzie φ f oznacza następujący morfizm:. φ f : f i = φ f (1), { 0 01 1 0 Bezpośrednio z powyższych definicji wynika następujący, prosty fakt: Fakt 1.2.1. Niech F i oznacza i-tą liczbę Fibonacciego [10]. Wtedy: 1.2.2. Słowa Thuego-Morse a # 0 (f i ) = F i 1, # 1 (f i ) = F i 2, f i = F i Niemalże równie popularną jak słowa Fibonacciego klasą słów są słowa Thuego-Morse a. Mają one liczne ciekawe właściwości i bardzo często pojawiają się różnych, nierzadko niespodziewanych kontekstach. Wiele ich zastosowań zostało opisanych w pracy [2], gdzie zostały one wręcz określone jako wszędobylskie (ang. ubiquitous). Prawdopodobnie najczęściej przytaczanym faktem na temat słów Thuego-Morse a jest to, że są one przykładem słów overlap-free czy też 2+-free, co oznacza po prostu, że nie zawierają podsłów postaci αβαβα (dla pewnych niepustych słów α i β). W literaturze często spotykana jest następująca definicją słów Thugo-Morse a: Definicja 1.2.3. i-tym słowem Thuego-Morse a nazywamy słowo: { 0 dla i = 0, t i = t i 1 t i 1 dla i > 0 Jednak podobnie jak w przypadku poprzedniej klasy słów w dalszej części pracy wygodniej będzie oprzeć się na definicji opartej o morfizmy: Definicja 1.2.4. i-tym słowem Thuego-Morse a nazywamy słowo: gdzie φ t oznacza następujący morfizm: φ t : t i = φ i t(0), { 0 01 1 10 Tak zdefiniowane, kolejne słowa Thuego-Morse a są równe: t 0 = 0 t 1 = 01 t 2 = 0110 t 3 = 01101001 t 4 = 0110100110010110 t 5 = 01101001100101101001011001101001 9
1.2.3. Słowa bezkwadratowe Thuego-Morse a Bezpośrednio powiązana z opisanymi w poprzednim rozdziale słowami Thuego-Morse a jest klasa słów bezkwadratowych Thuego-Morse a. Do potrzeb pracy przyjmiemy następującą definicję (analogiczna została wykorzystana m.in. w pracy [11]): Definicja 1.2.5. i-tym słowem bezkwadratowym Thuego-Morse a nazywamy słowo: s i = φ i s(2), gdzie φ s oznacza następujący morfizm: 0 1 φ s : 1 20 2 210 Tak zdefiniowane, kolejne słowa bezkwadratowe Thuego-Morse a są równe: s 0 = 2 s 1 = 210 s 2 = 210201 s 3 = 210201210120 s 4 = 210201210120210201202101 s 5 = 210201210120210201202101210201210120210121020120 Na pierwszy rzut oka związek słów bezkwadratowych Thuego-Morse a z opisanymi w poprzednim rozdziale słowami Thuego-Morse a wydawać się może niewielki. Warto jednak zauważyć następującą prawidłowość. Niech t oznacza takie nieskończone słowo, że wszystkie słowa z ciągu t i są jego prefiksami. Analogicznie zdefiniujmy s. Okazuje się, że zliczając liczbę jedynek pomiędzy kolejnymi zerami w słowie t i zapisując wyniki w postaci kolejnych symboli otrzymujemy właśnie słowo s. W ten sposób tradycyjnie definiowane jest nieskończone słowo bezkwadratowe Thuego-Morse a. Słowa bezkwadratowe Thuego-Morse a są chyba najczęściej przytaczanym w literaturze przykładem tzw. słów bezkwadratowych [11]. Oznacza to, że nie zawierają żadnego podsłowa postaci αα (dla pewnego niepustego słowa α Σ ). 1.2.4. Słowa Cantora Kolejną klasą słów omówioną w pracy są tzw. słowa Cantora, będące pewnego rodzaju odpowiednikiem, znanego z analizy, zbioru Cantora. Mówiąc nieco nieformalnie, i-te słowo Cantora powstaje w następujący sposób: rozpoczynamy od słowa długości 3 i złożonego z samych jedynek, a następnie wycinamy w nim dziury dzielimy całe słowo na 3 równe części i środkową część zamieniamy na zera. Następnie bierzemy każdą z pozostałych części i postępujemy analogicznie dopóki nie otrzymamy pojedynczych jedynek. Przykładowo, trzecie słowo Cantora powstaje w następujący sposób: 111111111111111111111111111 111111111000000000111111111 111000111000000000111000111 101000101000000000101000101 10
Bardziej formalnie słowa Cantora możemy zdefiniować następująco: Definicja 1.2.6. i-tym słowem Cantora będziemy nazywali słowo: c i = φ i c(1), gdzie φ c oznacza następujący morfizm: { 0 000 φ c : 1 101 1.2.5. Słowa Paper Folding Ostatnią klasą słów, które zostały wykorzystane w pracy są tzw. słowa Paper Folding (omówione dokładniej m. in. w pozycji [3]). Nazwa tej klasy słów wzięła się od pewnego, oryginalnego sposobu ich konstrukcji. Weźmy długi pasek papieru, który wybraną liczbę razy składamy na pół dokładnie tak jak na rysunku poniżej 1, zawsze w tę samą stronę (w prawo). Po rozłożeniu papieru, na pasku otrzymamy pewien ciąg zgięć, które mogą być skierowanych w lewo bądź w prawo. Jeśli zgięcia w lewo oznaczymy symbolem 0, a zgięcia w prawo symbolem 1, otrzymamy pewne słowo nad alfabetem binarnym. Oczywiście, im więcej zgięć wykonamy tym większa będzie długość otrzymanego słowa (dokładnie 2 i 1, gdzie i to liczba zgięć). Okazuje się jednak, że wszystkie słowa, które możemy w ten sposób otrzymać, są prefiksami pewnego nieskończonego słowa p tzw. regular paper folding sequence bądź dragon curve sequence (nazwa wywodzie się od kształtu krzywej, którą otrzymujemy po rozłożeniu, poskładanego uprzednio, paska). Dla potrzeb niniejszej pracy skoncentrujemy się jednak na nieco innej, opartej na morfizmach, definicji: Definicja 1.2.7. i-tym słowem Paper Folding nazywamy słowo: p i = φ p φ i p(3), gdzie φ p oraz φ p oznaczają następujące morfizmy: 0 20 1 21 φ p : 2 30 3 31 1 Rysunek został zaczerpnięty z artykułu [25]. 0 00 φ 1 01 p : 2 10 3 11 11
Tak zdefiniowane słowa Paper Folding również są prefiksami nieskończonego słowa p, mają jednak nieco inne długości ( p i = 2 i ). Początkowe słowa Paper Folding wyglądają następująco: p 0 = 11 p 1 = 1101 p 2 = 11011001 p 3 = 1101100111001001 p 4 = 11011001110010011101100011001001 1.3. Transformata Burrowsa-Wheelera 1.3.1. Definicja Podstawowym zagadnieniem, wokół którego koncentruje się niniejsza praca, jest transformata Burrowsa-Wheelera przekształcenie powszechnie wykorzystywane w kompresji bezstratnej. Definicja 1.3.1. Transformatą Burrowsa-Wheelera [1, 6] nazywamy przekształcenie słowa s w słowo BW T (s) będące konkatenacją ostatnich liter wszystkich rotacji cyklicznych słowa s posortowanych leksykograficznie. Powyższą definicję prawdopodobnie najłatwiej zrozumieć, analizując działanie transformaty na przykładowym słowie. Niech s = 31213021. Wtedy kolejne rotacje cykliczne umieszczone w macierzy wyglądają następująco: 3 1 2 1 3 0 2 1 1 2 1 3 0 2 1 3 2 1 3 0 2 1 3 1 1 3 0 2 1 3 1 2 3 0 2 1 3 1 2 1 0 2 1 3 1 2 1 3 2 1 3 1 2 1 3 0 1 3 1 2 1 3 0 2 Co po posortowaniu leksykograficznym wierszy daje następujący układ: 0 2 1 3 1 2 1 3 1 2 1 3 0 2 1 3 1 3 0 2 1 3 1 2 1 3 1 2 1 3 0 2 2 1 3 0 2 1 3 1 2 1 3 1 2 1 3 0 3 0 2 1 3 1 2 1 3 1 2 1 3 0 2 1 Łącząc kolejne litery z ostatniej kolumny, otrzymujemy słowo BW T (s) = 33221011. Definicja 1.3.2. Macierz, w której w kolejnych wierszach znajdują się kolejne posortowane leksykograficznie rotacje cykliczne słowa s, nazywamy macierzą BWT tego słowa. 12
1.3.2. Odwracalność Łatwo zauważyć, że tak zdefiniowane przekształcenie nie jest odwracalne. Jeśli słowa s 1 i s 2 są cyklicznie równoważne, to zbiory ich rotacji są identyczne, więc BW T (s 1 ) i BW T (s 2 ) również są identyczne. Jednak, co ciekawe, analogiczny fakt zachodzi również w drugą stronę. Twierdzenie 1.3.1. Jeśli BW T (s 1 ) = BW T (s 2 ) to słowa s 1 i s 2 są cyklicznie równoważne. Dowód. Wystarczy pokazać, że na podstawie BW T (s), czyli ostatniej kolumny macierzy BWT słowa s można w sposób jednoznaczny odtworzyć całą macierz. Zauważmy, że znając ostatnią kolumnę znamy też pierwszą znajdują się tam dokładnie te same litery, tyle, że posortowane:...3 0...3...3 1...3...2 1...2...2 1...2...1 2...1...0 2...0...1 3...1...1 3...1 Ponieważ w kolejnych wierszach umieszczone są kolejne rotacje, możemy zawsze ostatnią kolumnę przenieść na początek i dalej ta własność zostanie zachowana. Jeśli teraz posortujemy kolejne wiersze, otrzymamy ponownie macierz BWT słowa s. Znamy już dwie pierwsze kolumny: 0...3 30... 02... 1...3 31... 12... 1...2 21... 13... 1...2 21... 13... 2...1 12... 21... 2...0 02... 21... 3...1 13... 30... 3...1 13... 31... Postępując ponownie w ten sam sposób możemy odtwarzać kolejne kolumny aż do otrzymania pełnej macierzy: 02...3 302... 021... 12...3 312... 121... 13...2 213... 130... 13...2 213... 131... 21...1 121... 213... 21...0 021... 213... 30...1 130... 302... 31...1 131... 312... 1.3.3. Znaczenie praktyczne Transformata Burrowsa-Wheelera jest algorytmem powszechnie wykorzystywanym w kompresji bezstratnej. W połączeniu z transformatą Move To Front [5] oraz kodowaniem Huffmana [4] jest podstawą popularnego narzędzia bzip2. Pomimo, że stosunkowo ciężko jest teoretycznie wykazać skuteczność kompresorów opartych na BWT (pewne wyniki zostały przedstawione m. in. w pracach [9, 18, 19]) to jednak dość łatwo jest intuicyjnie zrozumieć zasadę działania tych algorytmów. 13
Zauważmy, że w typowych tekstach pewne fragmenty występują znacznie częściej niż inne. Przykładowo w języku angielskim stosunkowo popularny jest wyraz not. Jeśli weźmiemy wszystkie rotacje cykliczne badanego tekstu to duża część tych rozpoczynających się od ot będzie kończyła się właśnie literą n. Dzięki temu w ostatniej kolumnie macierzy BWT mamy dużą szansę otrzymać stosunkowo długie bloki złożone z identycznych liter. Poniżej przedstawiony został fragment macierzy BWT dla tekstu zaczerpniętego z Hamleta Szekspira 2. ot look upon his like again.... ot look upon me; Lest with th... ot love on the wing, -- As I p... ot love your father; But that... ot made them well, they imita... ot madness That I have utter... ot me? Ros. To think, my lor... ot me; no, nor woman neither,... ot me? Ham. No, by the rood,... ot mend his pace with beating... ot mine own. Besides, to be d... ot mine. Ham. No, nor mine no... ot mock me, fellow-student. I... ot monstrous that this player... ot more like. Ham. But where... ot more native to the heart,... ot more ugly to the thing tha... ot more, my lord. Ham. Is not... ot move thus. Oph. You must s... ot much approve me. -- Well, si... n n h n n n n n g n n n n n n n n j n n Poza praktycznymi zastosowaniami w kompresji BWT może być także przydatne w teoretycznych rozważaniach. Postać wielu słów znacznie się upraszcza po wykonaniu transformaty BWT, co czasem ułatwia odkrycie pewnych własności. Przykład pracy [20] pokazuje też, że czasem ten sam problem (w tym wypadku znalezienie algorytmu obliczania n-tej litery) okazuje się prostszy dla postaci BWT niż dla oryginalnego słowa. 1.3.4. Efektywne algorytmy kodowania i dekodowania Należy zauważyć, że kodowanie słowa u możemy sprowadzić do obliczania tablicy sufiksowej słowa uu. Zatem dla stałego rozmiaru alfabetu może ono zostać wykonane w czasie liniowym [12, 15]. Proces odkodowywania jest znacznie prostszy i również może zostać wykonany w czasie liniowym [6]. Zdecydowanie trudniejszy natomiast okazuje się problem dynamicznej aktualizacji wyniku BWT podczas modyfikacji oryginalnego tekstu (pewne wyniki przedstawiono m. in. w pracy [23]). Warto także zwrócić uwagę na fakt, że nie zawsze niezbędna jest pełna dekompresja przetwarzanego tekstu. Wybrane algorytmy działające na skompresowanych (nie tylko przy pomocy BWT) danych zostały przedstawione w pozycjach [1, 21]. 1.4. Hipoteza o BWT-regularności dla morfizmów Transformata Burrowsa-Wheelera pomimo licznych publikacji na swój temat nadal nie została do końca zbadana. Przykładowo, stosunkowo niewiele wiadomo na temat uzyskiwanego dla różnych klas słów stopnia kompresji. Podstawowym, bardzo ogólnym pytaniem, jakie można 2 Przykład pochodzi z pracy [1]. 14
postawić, jest pytanie o to, które klasy słów możemy przy użyciu BWT zapisywać używając niewielkiej (np. logarytmicznej względem długości słowa) liczby symboli. W pracy przeanalizowane zostały wybrane, klasyczne słowa generowane przez morfizmy. Co ciekawe, we wszystkich badanych przypadkach okazało się, że postać BWT jest w pewien sposób regularna. Przede wszystkim, warto zauważyć, że wykorzystując BWT każde omawiane słowo możemy reprezentować używając zapisu o logarytmicznej długości. Na podstawie tych kilku wybranych klas możemy zatem wysunąć nieco ogólniejszą hipotezę mówiącą, że dowolne słowo otrzymane poprzez iterację morfizmu zostanie silnie skompresowane przy pomocy transformaty Burrowsa-Wheelera. Ściślej możemy ją sformułować następująco: Hipoteza 1.4.1. Dla dowolnego morfizmu φ : Σ Σ oraz dowolnego symbolu początkowego s Σ liczba bloków w słowie φ n (s) jest rzędu 3 O(n). Dokładniej powyższa hipoteza została omówiona w ostatnim rozdziale, gdzie zaprezentowane zostały wyniki jej automatycznego testowania. 3 Notacja asymptotyczna została dokładnie omówiona m. in. w pracach [8] i [10]. 15
Rozdział 2 Słowa Fibonacciego Pierwszą klasą słów, których postać BWT przeanalizowana została w pracy są słowa Fibonacciego. Pomimo, że jest to znany rezultat, przedstawiony m. in. w pozycji [7] to jednak warto spojrzeć na to zagadnienie także z punktu widzenia definicji wykorzystującej morfizmy. Pozwala to otrzymać mniej złożony, bardziej intuicyjny dowód, który dodatkowo w prosty sposób rozszerza się na słowa Sturma. Kluczem do dowodu zwartej postaci BWT słów Fibonacciego będzie, ciekawe samo w sobie, twierdzenie opisujące, jak zmienia się postać BWT dowolnego słowa po wykonaniu na nim morfizmu φ f. Dla przypomnienia, definicja, na której oprzemy dalszą część pracy wygląda następująco: Definicja 2.0.1. i-tym słowem Fibonacciego nazywamy słowo: gdzie φ f oznacza następujący morfizm: f i = φ f (1),. { 0 01 φ f : 1 0 Postać BWT kilku wybranych słów Fibonacciego okazuje się być zaskakująco prosta: BW T (t 5 ) = 11100000 BW T (t 6 ) = 1111100000000 BW T (t 7 ) = 111111110000000000000 W powyższych przykładach wszystkie symbole 1 występują przed symbolami 0. Bazując na tej obserwacji, można wysunąć hipotezę na temat ogólnej postaci BWT słów Fibonacciego: Twierdzenie 2.0.1. Dla dowolnej liczby naturalnej i: BW T (f i ) = 1 F 2 0 F i 1 Fakt ten został już przedstawiony w pracy [7]. Dowód opierał się na klasycznej definicji słów Fibonacciego (przez konkatenację) oraz wykorzystywał pewne teorioliczbowe własności liczb Fibonacciego. Warto jednak spojrzeć na ten problem także z punktu widzenia alternatywnej definicji (przez morfizm). Takie podejście pozwala w prosty sposób sformułować oraz udowodnić nieco ogólniejsze twierdzenie opisujące, jak zmienia się postać BWT dowolnego słowa nad alfabetem binarnym, jeśli wykonamy na nim morfizm φ f. 17
Lemat 2.0.1. Dla słów równej długości warunki u < v oraz φ(v) < φ(u) są równoważne. Dowód. Wystarczy udowodnić, że jeśli u < v to φ(v) < φ(u). Jeśli warunek u < v jest spełniony oraz u = v to istnieją takie słowa s, u, v, że: u = s 0 u, v = s 1 v. Możliwe są trzy przypadki. Jeśli u = v = 0 to: Jeśli v = 0v dla pewnego słowa v to: Jeśli v = 1v dla pewnego słowa v to: φ f (v) = φ f (s) 0 < φ f (s) 01 = φ f (u). φ f (v) = φ f (s) 0 01 φ f (v ) < φ f (s) 01 φ f (u ) = φ f (u). φ f (v) = φ f (s) 0 0 φ f (v ) < φ f (s) 01 φ f (u ) = φ f (u). We wszystkich trzech przypadkach teza jest prawdziwa. Twierdzenie 2.0.2. Dla dowolnego słowa s {0, 1}, jeśli BW T (s) = v to: BW T (φ f (s)) = v R 0 #1(v) Dowód. Przyjrzyjmy się dokładnie temu, co dzieje się z macierzą BWT słowa s podczas wykonywania morfizmu. Przykładowo dla s = 01001001 wygląda ona następująco: 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 Jeżeli dokonamy podstawienia poszczególnych liter zgodnie z morfizmem φ f bezpośrednio w tej macierzy, otrzymamy następujący układ: 01 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 01 0 01 0 01 01 0 01 0 01 01 0 01 01 Zauważmy, że wiersze powstałej macierzy nie muszą być posortowane oraz nie są to wszystkie rotacje słowa φ f (s). Nie jest to zatem macierz BWT dla tego słowa. Okazuje się jednak, że stosunkowo łatwo możemy ją do niej przekształcić. Dla uproszczenia w dalszej części pracy będziemy korzystać z następującej terminologii: 18
Definicja 2.0.2. Starą rotacją słowa φ f (s) będziemy nazywać każdą rotację, która powstaje przez wykonanie morfizmu φ f na pewnej rotacji słowa s. Pozostałe rotacje będziemy nazywać nowymi rotacjami. Łatwo zauważyć, że otrzymana przez nas macierz zawiera wszystkie stare rotacje, nie zawiera natomiast żadnej nowej rotacji. Co więcej, z lematu 2.0.1 wynika, że jeśli w macierzy BWT słowa s rotacje były w kolejności leksykograficznej, to w nowej macierzy odpowiadające im rotacje są w dokładnie odwrotnej kolejności. Możemy je zatem uporządkować: 0 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 0 01 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 0 Z postaci morfizmu φ f wynika, że jeśli ostatnią literą dowolnej rotacji r słowa f i było 0 to ostatnią literą φ f (r) jest 1. Analogicznie, jeśli ostatnią literą r było 0 to ostatnią φ f (r) jest 1. Z tego wynika, że ostatnia kolumna macierzy BWT słowa φ f (s) z pomiętymi nowymi rotacjami jest równa v R. Pozostaje zbadać, co dzieje się z nowymi rotacjami. Zauważmy, że w przypadku morfizmu φ f nowe rotacje to są dokładnie te, które zaczynają się w połowie fragmentu 01 otrzymanego w trakcie przekształcenia z litery 0. Wszystkie takie rotacje zaczynają się od 1, a kończą na 0. Ponieważ wszystkie stare rotacje zaczynają się od 0, więc nowe rotacje znajdą się w macierzy BWT za starymi: 0 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 0 01 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 01 0 01 0 01 01 0 01 01 0 01 01 0 01 0 1 0 01 0 01 01 0 01 0 1 0 01 01 0 01 0 01 0 1 0 01 01 0 01 01 0 0 1 01 0 01 0 01 01 0 0 1 01 0 01 01 0 01 0 0 Zatem postać BWT słowa φ f (s) to v R 0 #1(v). Stare rotacje Nowe rotacje Warto również zauważyć, że opierając się na tym twierdzeniu, do udowodnienia postaci BWT słów Fibonacciego wystarcza teraz zastosowanie prostej indukcji matematycznej. Otrzymujemy zatem inny, nieco bardziej bezpośredni niż w pracy [7] dowód twierdzenia 2.0.1. 2.1. Słowa Sturma Ciekawym uogólnieniem słów Fibonacciego są słowa standardowe Sturma. Ich klasyczna definicja oraz liczne własności zostały omówione m. in. w pracy [13]. Podobnie jak w przypadku słów Fibonacciego warto jednak spojrzeć na, nieco mniej popularną, definicję wykorzystującą morfizmy. 19
Definicja 2.1.1. Słowo nazywamy słowem standardowym Sturma (lub po prostu słowem standardowym) wtedy i tylko wtedy, gdy istnieje ciąg liczb naturalnych a 1, a 2... a n taki, że: gdzie φ i oznacza następujący morfizm: s = φ a1 φ a1... φ an (1), a 1 0, a 2 > 0, a 3 > 0,... a n > 0, φ i : { 0 0 i 1 1 0 Łatwo zauważyć, że jeśli a 1 = a 2 = = a n = 1 to powyższa definicja generuje n-te słowo Fibonacciego. Postać BWT słów standardowych Sturma została już dokładnie opisana w pracy [17]. Ponieważ jest to znany rezultat, a dowód byłby jedynie prostym rozszerzeniem przypadku dla słów Fibonacciego, więc poniżej przytaczam jedynie treść twierdzenia, będącego głównym wynikiem tej pracy: Twierdzenie 2.1.1. Słowo BW T (u) jest postaci 1 0 wtedy i tylko wtedy, gdy u jest potęgą pewnego słowa standardowego Sturma. 20
Rozdział 3 Słowa Thuego-Morse a Zwarta postać BWT słów Thuego-Morse a została już opisana w pracy [16]. Poniżej przedstawiony zostanie autorski dowód wykorzystujący morfizmy. Idea będzie podobna do tej wykorzystanej w poprzednim rozdziale dla słów Fibonacciego. Najpierw opisane zostanie, jak zmienia się postać BWT dowolnego słowa po wykonaniu morfizmu φ t, a następnie na tej podstawie wywnioskowana zostanie ogólna postać BWT słów Thuego-Morse a. Dla przypomnienia, słowa Thuego-Morse a będziemy definiować następująco: Definicja 3.0.2. i-tym słowem Thuego-Morse a nazywamy słowo: gdzie φ t oznacza następujący morfizm: φ t : t i = φ i t(0), { 0 01 1 10 Poniższe twierdzenie opisuje, jak zmienia się postać BWT słowa s, po wykonaniu na nim morfizmu φ t. Twierdzenie 3.0.2. Dla dowolnego słowa s {0, 1} jeśli BW T (s) = v to: BW T (φ t (s)) = 1 #0(v) v 0 #1(v) Dowód. Podobnie jak poprzednio przyjrzyjmy się dokładnie temu, co dzieje się z macierzą BWT słowa u podczas morfizmu. Przykładowo macierz BWT słowa u = 110101 wygląda następująco: 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 0 Dokonując podstawienia pojedynczych liter bezpośrednio w tej macierzy, otrzymujemy: 01 10 01 10 10 10 01 10 10 10 01 10 10 01 10 01 10 10 10 01 10 10 10 01 10 10 01 10 01 10 10 10 10 01 10 01 21
Ponieważ morfizm φ t zachowuje porządek leksykograficzny, więc tak otrzymana macierz zawiera wszystkie stare rotacje od razu we właściwej kolejności. Jeśli ostatnią literą rotacji r słowa u jest 0 to ostatnią literą słowa φ t (r) jest 1. Analogicznie w przeciwnym przypadku. Zatem ostatnia kolumna tak otrzymanej macierzy jest równa v. Nowe rotacje możemy podzielić na 2 kategorie. Pierwszą grupę stanowią rotacje zaczynające się dokładnie w połowie fragmentów 01 powstałych podczas morfizmu z liter 0. Zaczynają się one na 1 i kończą na 0. Okazuje się, że te rotacje trafią na koniec macierzy BWT, za starymi rotacjami. Faktycznie wszystkie stare rotacje są nie większe od słowa (10) i, natomiast wszystkie nowe rotacje tej postaci są nie mniejsze od słowa 1(01) i 1 0. Tych rotacji jest tyle, co liter 0 w słowie v. Drugą grupę stanowią rotacje zaczynające się w połowie fragmentów 10 powstałych podczas morfizmu z liter 1. Jest ich tyle, co liter 1 w słowie v, kończą się literą 1 i trafią na początek macierzy BWT. Uzasadnienie jest analogiczne jak w poprzednim przypadku. Zatem macierz BWT słowa φ t (u) ma następującą postać: 0 01 10 01 10 10 1 0 01 10 10 10 01 1 0 10 01 10 01 10 1 0 10 10 01 10 01 1 01 10 01 10 10 10 01 10 10 10 01 10 10 01 10 01 10 10 10 01 10 10 10 01 10 10 01 10 01 10 10 10 10 01 10 01 1 10 01 10 10 10 0 1 10 10 10 01 10 0 Nowe rotacje Stare rotacje } Nowe rotacje Na początku znajduje się # 0 (v) nowych rotacji kończących się na 1, następnie jest słowo BW T (v) z zanegowanymi symbolami, a następnie # 1 (v) nowych rotacji kończących się literą 0. Z tego wynika, że BW T (φ t (u)) = 1 #0(v) v 0 #1(v). Wykorzystując powyższe twierdzenie możemy w prosty sposób określić zwartą postać BWT słów Thuego-Morse a. Dla kilku wybranych przykładów wygląda ona następująco: BW T (t 5 ) = 1 8 0 4 1 2 0 1 1 1 0 1 1 1 0 2 1 4 0 8 BW T (t 6 ) = 1 16 0 8 1 4 0 2 1 1 0 1 1 1 0 1 1 2 0 4 1 8 0 16 BW T (t 7 ) = 16 32 0 16 1 8 0 4 1 2 0 1 1 1 0 1 1 1 0 2 1 4 0 8 1 16 0 32 Powyższe przykłady możemy uogólnić do następującego twierdzenia: Twierdzenie 3.0.3. Dla dowolnego i 1: BW T (t i ) = gdzie α i oznacza następujący człon: α i = { αi 01 α R i dla i parzystych, α i 10 α R i dla i nieparzystych, { 1 2 i 2 0 2i 3... 1 20 dla i parzystych, 1 2i 2 0 2i 3... 0 20 dla i nieparzystych. Dowód. Dowód jest prostą konsekwencją twierdzenia 3.0.2. 22
Rozdział 4 Słowa bezkwadratowe Thuego-Morse a Postać BWT bezkwadratowych słów Thuego-Morse a nie doczekała się jeszcze opisu w literaturze. Poniżej sformułuję i udowodnię dwa twierdzenia z tymi związane: pierwsze, ogólniejsze, opisujące zależność pomiędzy BW T (φ s (u)) a BW T (u) oraz drugie, bardziej szczegółowe, pokazujące wprost postać BWT słów bezkwadratowych Thuego-Morse a. Dla przypomnienia poniżej przedstawiona została definicja, na której oparto dalszą część pracy: Definicja 4.0.3. i-tym słowem bezkwadratowym Thuego-Morse a nazywamy słowo: s i = φ i s(2), gdzie φ s oznacza następujący morfizm: 0 1 φ s : 1 20 2 210 Poniższe twierdzenie opisuje, jak na postać BWT dowolnego słowa wpływa wykonanie na nim morfizmu φ c. Idea dowodu jest podobna jak w przypadku słów Fibonacciego oraz Thuego-Morse a, dowód jest jednak nieco bardziej skomplikowany. Twierdzenie 4.0.4. Dla dowolnego słowa u {0, 1, 2} jeśli BW T (u) = v to: BW T (φ s (u)) = φ 1 (v) 2 #2(v) φ 2 (v), gdzie φ 1 oraz φ 2 oznaczają następujące morfizmy: 0 ɛ 0 1 φ 1 : 1 2 φ 2 : 1 0 2 1 2 0 Dowód. Przyjrzyjmy się dokładnie macierzy BWT słowa u. Przykładowo dla słowa u = 122010 wygląda ona następująco: 0 1 0 1 2 2 0 1 2 2 0 1 1 0 1 2 2 0 1 2 2 0 1 0 2 0 1 0 1 2 2 2 0 1 0 1 23
Dokonując podstawienia zgodnie z morfizmem φ s bezpośrednio w tej macierzy otrzymujemy następujący układ zawierający wszystkie stare rotacje: 1 20 1 20 210 210 1 20 210 210 1 20 20 1 20 210 210 1 20 210 210 1 20 1 210 1 20 1 20 210 210 210 1 21 1 20 Ponieważ morfizm φ s zachowuje porządek, więc stare rotacje znajdują się od razu we właściwej kolejności. Co więcej, jeśli ostatnią literą rotacji r było x, to ostatnią literą φ s (r) jest φ 2 (x). Zatem ostatnia kolumna tak powstałej macierzy jest równa φ 2 (v). Pozostaje zbadać, co dzieje się z nowymi rotacjami. Wszystkie nowe rotacje zaczynające się 10 rozpoczynają się po pierwszym znaku fragmentu 210 powstałego przez morfizm litery 2, zatem kończą się na 2. Jest ich tyle co symboli 2 w słowie BW T (u) = v. Ponieważ stare rotacje mogą zaczynać się jedynie od 11, 12, 20 lub 21, więc wszystkie takie rotacje występują przed starymi rotacjami. 10 1 20 1 20 210 2 10 210 1 21 1 20 2 1 20 1 20 210 210 1 20 210 210 1 20 20 1 20 210 210 1 20 210 210 1 20 1 210 1 20 1 20 210 210 210 1 21 1 20 } Nowe rotacje Stare rotacje Ostatnia kolumna tak otrzymanej macierzy jest równa: 2 #2(v) φ 2 (v). Do uzyskania pełnej macierzy BWT słowa φ s (u) pozostaje jedynie uwzględnić nowe rotacje zaczynające się od symbolu 0. Zauważmy, że mogą one powstać na dwa różne sposoby. Mogą się zaczynać po pierwszym znaku fragmentu 20 powstałego z morfizmu litery 1 (taka rotacja kończy się wtedy na 2) lub po drugim znaku fragmentu 210 powstałego z morfizmu litery 2 (taka rotacja kończy się wtedy na 1). Aby ustalić porządek tych dwóch typów rotacji między sobą przyjrzyjmy się tym wierszom macierzy BWT słowa u, które kończą się na 1 lub 2. 0 1 0 1 2 2 0 1 2 2 0 1 2 0 1 0 1 2 2 2 0 1 0 1 Aby otrzymać interesujące nas rotacje należy dokonać na nich morfizmu φ s oraz przesunąć ostatnią kolumnę (złożoną z samych zer) na początek. 1 20 1 20 210 210 0 1 20 1 20 210 21 1 20 210 210 1 20 0 1 20 210 210 1 2 210 1 20 1 20 210 0 210 1 20 1 20 21 210 210 1 21 1 20 0 210 210 1 21 1 2 Zauważmy, że w ten sposób otrzymamy wszystkie nowe rotacje zaczynające się od 0 posortowane od razu w kolejności leksykograficznej. Co więcej, jeśli ostatnią literą pewnej rotacji słowa u było 1, to ostatnią literą odpowiadającej mu rotacji zaczynającej się od 0 jest 2. Podobnie, jeśli ostatnią literą pewnej rotacji słowa u było 2, to ostatnią literą odpowiadającej mu rotacji zaczynającej się od 0 jest 1. Zatem ostania kolumna pierwszego fragmentu 24
macierzy BWT słowa φ s (u) jest równa φ 1 (v). Cała macierz BWT słowa φ(u) wygląda zatem następująco: 0 1 20 1 20 210 21 0 1 20 210 210 1 2 Nowe rotacje 0 210 1 20 1 20 21 0 210 210 1 21 1 2 10 1 20 1 20 210 2 10 210 1 21 1 20 2 1 20 1 20 210 210 1 20 210 210 1 20 20 1 20 210 210 1 20 210 210 1 20 1 210 1 20 1 20 210 210 210 1 21 1 20 } Nowe rotacje Stare rotacje Ostatnia kolumna tak powstałej macierzy jest równa BW T (u) = φ 1 (v) 2 #2(v) φ 2 (v). Wykorzystując powyższe twierdzenie, zajmiemy się teraz opisem postaci BWT słów bezkwadratowych Thuego-Morse a. Jak pokazują pierwsze przykłady, jest ona w pewien sposób regularna: BW T (s 0 ) = 2 1 BW T (s 1 ) = 1 1 2 1 0 1 BW T (s 2 ) = 2 1 1 1 2 1 0 2 1 1 BW T (s 3 ) = 1 1 2 1 1 1 2 3 0 3 1 2 0 1 BW T (s 4 ) = 2 1 1 1 2 1 1 3 2 6 0 6 1 3 0 2 1 1 BW T (s 5 ) = 1 1 2 1 1 1 2 3 1 6 2 12 0 12 1 6 0 3 1 2 0 1 Faktycznie, powyższe obserwacje możemy uogólnić do następującego twierdzenia: Twierdzenie 4.0.5. Dla dowolnego i 2: BW T (s i ) = gdzie α i oraz β i oznaczają następujące człony: β i = α i = { 212 αi β i 001 dla i parzystych, 121 α i β i 110 dla i nieparzystych, { 1 3 2 0 2 3 21 1 3 22... 2 3 2(i 3) dla i parzystych, 2 3 20 1 3 21 2 3 22... 2 3 2(i 3) dla i nieparzystych, { 0 3 2 (i 3) 1 3 2(i 4) 0 3 2(i 5)... 1 3 20 dla i parzystych, 0 3 2(i 3) 1 3 2(i 4) 0 3 2(i 5)... 0 3 20 dla i nieparzystych, Dowód. Dla i = 2 równość jest spełniona. Załóżmy, że równość jest spełniona dla pewnego i N. Rozpatrzmy jako pierwszy przypadek parzystego i. Wtedy: BW T (s i ) = 212 α i β i 001, gdzie α i = 1 3 20 2 3 21 1 3 22... 2 3 2(i 3), β i = 0 3 2(i 3) 1 3 2(i 4) 0 3 2(i 5)... 1 3 20. 25
Oznaczmy BW T (s i ) przez v. Wtedy na mocy twierdzenia 4.0.4 spełniona jest równość: BW T (s i+1 ) = φ 1 (v) 2 #2(v) φ 2 (v) Przyjrzyjmy się jak wyglądają kolejne człony prawej strony. Pierwszy człon: Drugi człon: φ 1 (v) = φ 1 (212 α i β i 001) = φ 1 (212) φ 1 (α i ) φ 1 (β i ) φ 1 (001) = 121 φ 1 (α i ) φ 1 (β i ) 2 = 121 φ 1 (α i ) 2 #1(β i) 2 = 121 φ 1 (α i ) 2 #1(β i) + 1 2 # 2(v) = 2 #2(212) + #2(α i) + # 2(β i ) + # 2(001) = 2 2 + #2(α i) Trzeci człon: φ 2 (v) = φ 2 (212 α i β i 001) = φ 2 (212) φ 2 (α i ) φ 2 (β i ) φ 2 (001) = 000 φ 2 (α i ) φ 2 (β i ) 110 = 000 0 αi φ 2 (β i ) 110 = 0 α i + 3 φ 2 (β i ) 110 Łącząc kolejne człony otrzymujemy słowo: BW T (s i+1 ) = 121 φ 1 (α i ) 2 #1(β i) + 1 2 2 + #2(α i) 0 α i + 3 φ 2 (β i ) 110 = 121 φ 1 (α i ) 2 #1(β i) + # 2 (α i ) + 3 0 α i + 3 φ 2 (β i ) 110 Zauważmy, że: Zatem: # 1 (β i ) = 3 2 i 4 + 3 2 i 6 +... 3 2 0 # 2 (α i ) = 3 2 1 + 3 2 3 +... 3 2 i 3 α i = 3 2 0 + 3 2 1 +... 3 2 i 3 # 1 (β i ) + # 2 (α i ) + 3 = α i + 3 = 3 2 i 2 Podstawiając: BW T (s i+1 ) = 121 φ 1 (α i ) 2 3 2i 2 0 3 2i 2 φ 2 (β i ) 110 Ponieważ: φ 1 (α i ) 2 3 2i 2 = α i+1 0 3 2i 2 φ 2 (β i ) = β i+1 więc: BW T (s i+1 ) = 121 α i+1 β i+1 110 Dowód dla i nieparzystego jest analogiczny. 26
Rozdział 5 Słowa Cantora Kolejną klasą słów, które zostały zbadane w ramach pracy są tzw. słowa Cantora. W przypadku tej klasy technika dowodu zwartej postaci BWT będzie istotnie inna. Zamiast badać, jak zmienia się postać BWT w kolejnych iteracjach, przeanalizujemy strukturę całego słowa oraz układ jego rotacji. Słowa Cantora są ciekawym przypadkiem, gdyż, jak łatwo można zauważyć w trakcie dowodu, stare i nowe rotacji mieszają się w nich w bardzo wielu miejscach (w przypadku pozostałych klas słów liczba ta był najczęściej stała). Dla przypomnienia słowa Cantora możemy zdefiniować np. w następujący sposób: Definicja 5.0.4. i-tym słowem Cantora będziemy nazywali słowo: gdzie φ c oznacza następujący morfizm: φ c : c i = φ i c(1), { 0 000 1 101 Postać BWT słów Cantora jest stosunkowo skomplikowana, zwłaszcza w porównaniu do ich dość prostej budowy. Niemniej jednak przy odrobinie wysiłku także w przypadku tej klasy słów możemy opisać ją zwartym wzorem. Twierdzenie 5.0.6. Dla dowolnego i 0: gdzie α i,j oznacza następujący człon: α i,j = BW T (c i ) = α i,1 α i,2... α i,i 0 2i i 1 10 i { 1 2 j 1 1 0 2j 1 1 10 (2j 1) (3 i j 3 i j 1 1) dla j < i, 1 2j 1 1 0 2j 1 1 1 dla j = i, Dowód. Zauważmy, że macierz BWT słowa c i możemy podzielić na dwie części: rotacje rozpoczynające się od symbolu 0 oraz rotacje rozpoczynające się od symbolu 1. Wystarczy pokazać, że ostatnią kolumną pierwszej części jest α i,1 α i,2... α i,i, a ostatnią kolumną drugiej części jest 0 2i i 1 10 i. Zajmijmy się w pierwszej kolejności rotacjami rozpoczynającymi się od symbolu 0. Każda rotacja rozpoczynająca się od symbolu 0 rozpoczyna się od prefiksu postaci 0 n 1 dla pewnego n N w takiej sytuacji będziemy mówić, że rotacja rozpoczyna się od bloku n zer. Zauważmy, że w macierzy BWT rotacje rozpoczynające się od dłuższego bloku zer występują 27
przed tymi, które zaczynają się od krótszego bloku zer. Podzielmy zatem wszystkie rotacje rozpoczynające się od symbolu 0 na i części (o numerach od 1 do i). Niech j-ta część zawiera rotacje rozpoczynające się od bloku zer o długościach z przedziału (3 i j 1, 3 i j. Wystarczy pokazać, że ostatnią kolumną tak zdefiniowanej j-tej części jest α i,j. Poniżej przedstawiona jest macierz BWT dla przykładowego słowa c 3. Pojedyncze linie oddzielają poszczególne części (zgodnie z powyższą definicją), natomiast podwójna oddziela fragment zawierający rotacje rozpoczynające się od symbolu 1. 000000000101000101101000101 000000001010001011010001010 000000010100010110100010100 000000101000101101000101000 000001010001011010001010000 000010100010110100010100000 000101000000000101000101101 000101000101101000101000000 000101101000101000000000101 001010000000001010001011010 001010001011010001010000000 001011010001010000000001010 010000000001010001011010001 010001010000000001010001011 010001011010001010000000001 010100000000010100010110100 010100010110100010100000000 010110100010100000000010100 011010001010000000001010001 100000000010100010110100010 100010100000000010100010110 100010110100010100000000010 101000000000101000101101000 101000101000000000101000101 101000101101000101000000000 101101000101000000000101000 110100010100000000010100010 α 3,1 = 1 21 1 1 0 21 1 1 10 (21 1) (3 3 1 3 3 1 1 1) α 3,2 = 1 22 1 1 0 22 1 1 10 (22 1) (3 3 2 3 3 2 1 1) α 3,3 = 1 23 1 1 0 23 1 1 1 0 23 3 1 10 3 Na początku j-tej części znajdują się rotacje zaczynające się od bloku 3 i j zer. Zauważmy, że dokładnie 2 j 1 z tych rotacji rozpoczyna się na początku bloku dokładnie tej długości takie rotacje kończą się symbolem 1, a dokładnie 2 j 1 1 rozpoczyna się wewnątrz bloku większej długości takie rotacje kończą się symbolem 0. Pozostaje ustalić, w jaki sposób te dwa rodzaje rotacji przeplatają się w macierzy BWT. Zauważmy, że jeżeli rotacja rozpoczyna się od bloku zer o długości podzielnej przez 3 to jest to stara rotacja. Zatem dla każdej z nich możemy znaleźć rotację poprzedniego słowa Cantora, z której ona powstała. Ponieważ morfizm φ c zachowuje porządek, więc operacja ta nie zmienia kolejności badanych rotacji. Postępując w ten sposób i j razy dojdziemy do rotacji rozpoczynających się jednym z następujących prefiksów: 0100, 0101, 011. Przykładowo dla początkowych rotacji z drugiej części macierzy BWT słowa c 3 otrzymujemy: 000101000000000101000101101 010001011 000101000101101000101000000 010110100 000101101000101000000000101 011010001 Zauważmy, że z postaci morfizmu φ c wynika, że rotacje rozpoczynające się od 0100 lub 011 muszą kończyć się symbolem 1, natomiast rotacje rozpoczynające się od 0101 muszą kończyć się symbolem 0. Zauważmy też, że dokładnie jedna rotacja może zaczynać się od prefiksu 011, 28
gdyż fragment 11 może powstać jedynie na skutek złączenia pierwszej i ostatniej litery słowa Cantora. Wynika z tego, że ostatnia kolumna badanego fragmentu macierzy BWT ma postać 1 0 1 tylko jedna rotacja kończąca się na 1 może trafić za rotacje kończące się na 0. Zatem ostatnia kolumna j-tej części macierzy BWT rozpoczyna się od słowa 1 2j 1 1 0 2j 1 1 1. Zaraz za rotacjami rozpoczynającymi się od bloku 3 i j zer w j-tej części znajdują się rotacje rozpoczynające się do bloków zer o długościach z przedziału (3 i j 1, 3 i j ). Ponieważ wszystkie bloki zer w słowie Cantora mają długość będącą potęgą trójki, więc wszystkie takie rotacje kończą się symbolem 0. Takich rotacji jest dokładnie (2 i 1) (3 i j 3 i j 1 1) dla j < i lub 0 dla j = i. Zatem ostatnia kolumna j-tej części macierzy BWT jest faktycznie równa α i,j. Pozostaje zbadać, jak wygląda fragment macierzy BWT zawierający rotacje rozpoczynające się od symbolu 1. Zauważmy, że takich rotacji jest dokładnie 2 i, a spośród nich dokładnie jedna (ta równa oryginalnemu słowu c i ) kończy się symbolem 1. Pokażemy, że w macierzy BWT słowa c i znajduje się ona na pozycji i + 1 od końca. Dla i = 0 oraz i = 1 teza jest prawdziwa. Załóżmy, że jest tak dla pewnego i N. Zauważmy, że podczas dokonywania morfizmu φ c stare rotacje nie zmieniają kolejności, natomiast prawie wszystkie nowe rotacje, które rozpoczynają się do 1 rozpoczynają od prefiksu 1000, a dokładnie jedna od prefiksu 1101 jest tak, gdyż dokładnie jedna rotacja słowa c i może rozpoczynać się od prefiksu 11. Ponieważ słowo c i+1 zawsze rozpoczyna się od 101, więc tylko ta jedna rotacja trafi za słowo c i+1. Zatem znajdzie się on na pozycji i + 2 od końca. Na mocy zasady indukcji teza jest prawdziwa dla dowolnego n N, czyli ostatnia kolumna tego fragmentu macierzy BWT jest równa 0 2i i 1 10 i, co kończy dowód całego twierdzenia. 29
Rozdział 6 Słowa Paper Folding Ostatnią klasą słów przeanalizowaną w pracy są tzw. słowa Paper Folding. Krótka charakterystyka tych słów została już przedstawiona w rozdziale 1.2.5. Dla przypomnienia, w pracy wykorzystamy następującą definicję: Definicja 6.0.5. i-tym słowem Paper Folding nazywamy słowo: p i = φ p φ i p(3), gdzie φ p oraz φ p oznaczają następujące morfizmy: 0 20 1 21 φ p : 2 30 3 31 0 00 φ 1 01 p : 2 10 3 11 Łatwo zauważyć, że postać definicji słów Paper Folding jest nieco inna niż pozostałych omawianych klas. Powstają one również poprzez iterację pewnego morfizmu (w tym przypadku φ p ), jednak po zakończeniu tego procesu jednorazowo aplikowany jest inny morfizm, φ p. Jak się okazuje w trakcie dowodu istotnie komplikuje on postać BWT. Pełny dowód przebiega w trzech częściach. Najpierw opisane zostało, w jaki sposób morfizm φ p wpływa na postać BWT dowolnego słowa. Następnie na tej podstawie określona oraz udowodniona została zwarta postać BWT słów p i = φi p(3), a dopiero na sam koniec zwarta postać BWT właściwych słów Paper Folding. Twierdzenie 6.0.7. Dla dowolnego słowa u {0, 1, 2, 3} jeśli BW T (u) = v to: BW T (φ p (u)) = φ 1 (v) φ 2 (v) φ 3 (v), gdzie φ 1, φ 2, φ 3 oznaczają następujące morfizmy: 0 2 0 ɛ 1 ɛ 1 2 φ 1 : φ 2 : 2 3 2 ɛ 3 ɛ 3 3 0 0 1 1 φ 3 : 2 0 3 1 31
Dowód. Przeanalizujmy zachowanie macierzy BWT słowa u podczas wykonywania morfizmu φ p. Dla przykładowego słowa u = 21023301 wygląda ona następująco: 0 1 2 1 0 2 3 3 0 2 3 3 0 1 2 1 1 0 2 3 3 0 1 2 1 2 1 0 2 3 3 0 2 1 0 2 3 3 0 1 2 3 3 0 1 2 1 0 3 0 1 2 1 0 2 3 3 3 0 1 2 1 0 2 Jeśli dokonamy morfizmu φ p na kolejnych wierszach tej macierzy otrzymamy następujący układ, zawierający wszystkie stare rotacje: 20 21 30 21 20 30 31 31 20 30 31 31 20 21 30 21 21 20 30 31 31 20 21 30 21 30 21 20 30 31 31 20 30 21 20 30 31 31 20 21 30 31 31 20 21 30 21 20 31 20 21 30 21 20 30 31 31 31 20 21 30 21 20 30 Ponieważ morfizm φ p zachowuje porządek, więc są one umieszczone we właściwej kolejności. Co więcej, jeśli ostatnia kolumna wyjściowej macierzy była równa v, to ostatnia kolumna macierzy po przekształceniu jest równa φ 3 (v). Zauważmy, że nowe rotacje mogą zaczynać się jedynie od symboli 0 lub 1 podczas, gdy stare rotacje jedynie od symboli 2 lub 3. Zatem wszystkie stare rotacje znajdą się w macierzy BWT za nowymi. Aby otrzymać wszystkie nowe rotacje rozpoczynające się od symbolu 0 wystarczy z ostatniej macierzy wybrać wiersze kończące się na 30 lub 20 i ostatnią kolumnę przenieść na początek. 21 20 30 31 31 20 21 30 0 21 20 30 31 31 20 21 3 21 30 21 20 30 31 31 20 0 21 30 21 20 30 31 31 2 30 31 31 20 21 30 21 20 0 30 31 31 20 21 30 21 2 31 31 20 21 30 21 20 30 0 31 31 20 21 30 21 20 3 Zauważmy, że ostatnia kolumna tak otrzymanej macierzy jest równa φ 1 (v). Podobnie możemy postąpić, aby otrzymać wszystkie nowe rotacje rozpoczynające się od symbolu 1. 20 21 30 21 20 30 31 31 1 20 21 30 21 20 30 31 3 20 30 31 31 20 21 30 21 1 20 30 31 31 20 21 30 2 30 21 20 30 31 31 20 21 1 30 21 20 30 31 31 20 2 31 20 21 30 21 20 30 31 1 31 20 21 30 21 20 30 3 Ostatnia kolumna tak otrzymanej macierzy jest równa φ 2 (v). Łącząc otrzymane trzy części, otrzymujemy macierz BWT słowa φ p (u): 32