1 / 37

Data Compression using Antidictionaries

Data Compression using Antidictionaries. Seminarium: Kompresja danych Marta Cylkowska. Plan seminarium. Przedstawienie metody Dane: tekst T o o długości N Wynik: < M, b 1 b 2 …b n , N > Wyszukiwanie wzorca Dane: wzorzec P o długości m ; wynik kompresji

Download Presentation

Data Compression using Antidictionaries

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

E N D

Presentation Transcript


  1. Data Compression using Antidictionaries Seminarium: Kompresja danych Marta Cylkowska

  2. Plan seminarium • Przedstawienie metody • Dane: tekst To o długości N • Wynik: <M, b1b2…bn, N> • Wyszukiwanie wzorca • Dane: wzorzec P o długości m; wynik kompresji • Wynik: wszystkie wystąpienia wzorca P w To

  3. Założenia • Alfabet 2-literowy Σ = {0, 1} • Antysłownik – zbiór słów, których nie ma w To • Przykład • Antysłownik: {0101, 111, 1100} • Zakodowana postać: 1110 1 1 011 0 1

  4. Antysłownik • Definicja Słowo zabronione – nie występuje w To Minimalne słowo zabronione – nie zawiera zabronionego podsłowa Antysłownik – zbiór minimalnych słów zabronionych • ||M|| - suma długości wszystkich słów z M

  5. Przykłady antysłowników • Tekst To: 11010001 • M = {0000, 111, 011, 0101, 1100} brak 1001 • M = {111} • Negatywne przykłady: • M = {1110} • M = {001, 000}

  6. Kolejny przykład dekodowania • Co jest potrzebne do dekodowania? • M = {00, 010, 111} • T = 10 (tekst zakodowany) 1 0 110110110… Jaki jest tekst oryginalny?? • Potrzebna jest długość To

  7. Kodowanie • Wyznaczenie antysłownika • Czas O(||M||) • ||M|| < 2N – 1 • Budowa automatu skończonego • Czas O(||M||) • Przejście przez automat • Czas O(N) • Wynik: <M, b1b2…bn,N>

  8. 0,1 0 4 0,1 1 7 0,1 1 8 0,1 0 12 1 0,1 13 Automat • M = {0000, 111, 011, 0101, 1100} 0 0 0 2 0 1 3 1 1 1 0 5 6 0 0 1 1 11 9 1 10 0

  9. Budowa automatu (ogólnie) • Umieść kolejno słowa z M w automacie • Ustal funkcję przejścia • δ(u, a) = najdłuższy sufiks ua, który jest prefiksem słowa z M (gdy u nie jest z M) • Automat jako drzewo. • ~ Przechodząc wszerz ustalamy funkcję przejścia na podstawie obliczonych już funkcji dla przodków • Ustal typ wierzchołków: Q0, Q1,Q2 • Czas: O||M|| • Rozmiar automatu: O||M||

  10. Przejście przez automat • Niech a będzie kolejną literą tekstu • u – aktualny stan automatu • M = {0000, 111, 011, 0101, 1100} • Przykład: To = 1 1 0 1 0 0 0 1 1 1 εεεε0 ε = 110

  11. Dekodowanie • Korzysta z tego samego automatu • Gdy stan Q1 to wykonujemy ε-ruchy • Oznaczenia: • Terminal(p) – stan po wykonaniu wszystkich ε-ruchów • Sequence(p) – słowo powstałe na ścieżce od p do Terminal(p) • Gdy automat ma pętle: • Terminal(p) = ┴ • Sequence(p) nieskończone

  12. 0/0 1/100 0/0100 1/100 0/0 0/0 1/1 1/10100 Automat bez ε-ruchów • Reprezentacja bez ε-ruchów: • δG(u, a) = Terminal(δ(u, a)) (przejście) • λG(u, a) = a∙Sequence(δ(u, a)) (słowo) 0 2 1 9

  13. Słowa nieskończone • Definicja automatu • δG(u, a) = Terminal(p) = ┴ • λG(u, a) = a∙Sequence(p) = a∙uvvv…= a∙uv* • Gdy dekoder jest w takim stanie, to… • Znaczy, że przeczytał wszystko co miał na wejściu • Teraz doczyta tyle liter z Sequence(p), aby tekst miał długośćN

  14. 0 0 0 2 0 1 3 1 1 1 0 5 6 0 0 1 1 11 9 1 10 0 0/0 1/100 0/0100 1/100 0 0/0 2 1 0/0 1/1 1/10100 9 Automat oryginalny A(M) Automat zmodyfikowany G(M)

  15. Dekodowanie – algorytm • Dane: <M, b1b2…bn, N> • Algorytm: • l := 0 długość odkodowanego już tekstu • q := ε aktualny stan • for i:=1 to n – 1 czytamy do przedostatniej litery! • u := λG(q, bi) odczytanie słowa • wypisz u • q := δG(u, bi) przejście do kolejnego stanu • l := l + |u| aktualizacja długości • u := λG(q, bn) odczytanie słowa dla ostatniej litery • wypisz prefiks u o długości N – l

  16. Wyszukiwanie wzorca

  17. Definicja problemu • Dane: • <M, b1b2…bn, N> - skompresowana postać To • P – wzorzec nieskompresowany, |P| = m • Wynik • Occurences(P, To) – zbiór wystąpień (pozycji końcowych)

  18. Możliwe rozwiązania i złożoność • Przypomnienie oznaczeń: • N – długość tekstu przed kompresją • C – długość skompresowanego tekstu, całości • m – długość wzorca, postać jawna • Odkodować tekst i wyszukać w nim wzorzec • Złożoność: • O(N) Algorytm efektywny • O(C∙logm+m) Algorytm prawie optymalny • O(C+m) Algorytm optymalny

  19. Algorytm wyszukiwania wzorca • Preprocessing: O(||M||+m2) • Skanowanie tekstu O(n) • Tekst po kompresji C = ||M||+n+logN • Czas algorytmu: O(C+m2)

  20. Pomocniczy automat • Automat KMP dla wzorca P • Dla słowa u wyznacza najdłuższy jego sufiks będący prefiksem wzorca P • Trochę inny automat, można przerobić do zwykłego niedopasowanie 0 1 1 0 0 1 2 3 4 niedopasowanie niedopasowanie niedopasowanie Σ

  21. P u j 1 w Pomocniczy zbiór AKMP = Occurences(P, w)

  22. Skanowanie tekstu • l := 0 długość skanowanego tekstu gdyby był odkodowany • q := εaktualny stan • state := 0 stan w automacie KMP • for i:=1 to n – 1 czytamy do przedostatniej litery! • u := λG(q, bi) odczytanie słowa • q := δG(u, bi) przejście do kolejnego stanu • dla każdego p z AKMP(state, u) jest wystąpienie na pozycji l + p • q := δKMP(state, u) przejście do kolejnego stanu w automacie KMP • l := l + |u| aktualizacja długości • u := λG(q, bn) odczytanie słowa dla ostatniej litery • dla każdego p z AKMP(state, u) że l + p < N + 1 jest wystąpienie na pozycji l + p • Skanowanie ma zająć czas O(n + r) • Wszystkie funkcje muszą być obliczane w czasie stałym (preprocessing)

  23. Preprocessing • Czas: O(||M||+m2) • λG(q, bi) O(||M||) • δG(u, bi) O(||M||) • δKMP(state, u) O(||M||+m2) • AKMP(state, u) O(||M||+m2) • Suffix TRIE dla P, PR O(m2) • Automat KMP dla P, PR O(m) • Automat A(M) O(||M||) • Graf ścieżek predykcyjnych O(||M||)

  24. 0 1 1 0 0 0/0 1/100 0/0100 1/100 0 0/0 2 1 1 0/0 1/1 1/10100 1 0 9 Automaty przypomnienie Automat zmodyfikowany G(M) Funkcja przejścia: δG(u, b) Słowa na krawędziach: λG(q, b) 0 0 0 2 1 3 Automat oryginalny A(M) Funkcja przejścia: δ(u, b) 1 5 6 0 1 11 9 10

  25. Graf ścieżek predykcyjnych • Zawiera krawędzie wychodzące z wierzchołków z Q1 • Wierzchołki pomocnicze <u;b>, takie że δG(u, b) jest w Q1 2;1 1 0 2;0 10 1 0 1 0 1 0 10 5 9;1 11 6 2 1 1;1

  26. Wyznaczanie automatu G(M) • Obliczenie fukcji δG(u,b) na podstawie δ(u,b) • δG(u,b) = δ(u,b), gdy • dla pozostałych wierzchołków (pomocnicze tylko) obliczymy przechodząc drzewo • wierzchołek q – korzeń • δG(u,b) =q • Co gdy nie ma korzenia?

  27. k P u j 1 1 n P Wyznaczanie δKMP(j, u) • N1(j, u) – maksymalne k, że P[j – k + 1 … j]∙u jest prefiksem P • N1(j, u) = null gdy nie istnieje takie k

  28. Wyznaczanie δKMP(0, u) • Gdy |u| = 1 to nie ma problemu • Wpp należy przejść graf ścieżek predykcyjnych od końca • δKMP(0, u)=max sufiksu, będący prefiksemP • δKMP(0, u)=max prefiksuR, będący sufiksemP • Przejść drzewo sufiksowe wg słowa uR

  29. Wyznaczanie λG(q, b) = u • Wynik – wierzchołek TRIE dla P • Warunek: λG(q, b) jest podsłowem P • Jak poprzednio przejść graf otrzymując uR • W TRIE dla PR sprawdzić czy uR jest podsłowem PR (u jest podsłowem P) • Znaleźć odpowiedniość między TRIE dla P a PR • Wystarczy naiwnie w czasie O(m2)

  30. Wyznaczanie N1(j, u) • Ma sens gdy u jest podsłowem P • Gdy u jest dane jako wierzchołek w TRIE, to można wyznaczyć N1(j, u) w czasie O(||M||+m2) • Wyznaczane na podstawie poprzedniej funkcji

  31. Co osiągnęliśmy już? • Umiemy obliczać δKMP(j, u) • λG(q, b) • δG(u, b) • Brakuje tylko preprocessingu dla zbioru

  32. Wyznaczanie zbioru AKMP(j, u) • Zawiera nowe wystąpienia wzorca po przeczytaniu nowego słowa u • Podzielmy wystąpienia na 2 rozłączne zbiory: • X(u) – wystąpienia zawarte w u (|P|..|u|) • Y(j, u) – wystąpienia nie zawarte w u (1..|P-1|)

  33. 0 0 0 0 0 0 Wyznaczanie zbioru X(u) • Przechodzimy graf ścieżek predykcyjnych • Automat KMP dla PRwyznaczy wystąpienia PR w uR • Wystąpienia jako pozycje początkowe w u • Zaznacz wierzchołki na ścieżce predykcji, gdzie były wystąpienia • Dla każdego zaznaczonego wierzchołka utwórz wskaźnik do najbliższego zaznaczonego poprzednika • Czas preprocessingu: O(||M|| + m) • Czas wyznaczenia zbioru X(u) dla danego u – O(|X(u)|)

  34. Wyznaczanie zbioru Y(j, u) • Y(j, u) = Y(j, u*) • u* - najdłuższy prefiks u, bedący właściwym sufiksem P • Y(j, u*) = wystąpienia P w słowie P[1 … j] ∙ P[m–|u*|+1 … m] • Y(j, k) można wyznaczyć w czasie O(||M||+m2) • Y(j, k) można reprezentować w stałej pamięci

  35. Wyznaczanie u* • u* - największy prefiks u, bedący właściwym sufiksem P • u* - największy sufiks uR, bedący właściwym prefiksem PR • Automat KMP dla PR • Jeszcze przypadek nieskończonego słowa • (xv*)R≈(vR)*x • Przeczytać k razy, k min, że k∙|v| > P

  36. Algorytm • Preprocessing • l := 0; q := ε; state := 0 • for i:=1 to n – 1 • u := λG(q, bi) • q := δG(u, bi) • dla każdego p z AKMP(state, u) jest wystąpienie na pozycji l + p • q := δKMP(state, u) • l := l + |u| • u := λG(q, bn) • foreach p z AKMP(state, u) takiego że l + p < N + 1 jest wystąpienie na pozycji l + p

  37. Koniec

More Related