tom000.info - Logo
  • Aktualności
  • O mnie
  • Twoje konto
  • English/Angielski
  • Kontakt
Menu
  • Aktualności
  • Portfolio
  • Publikacje
  • jMPD
  • Galeria
  • Kontakt
  • Linki
Nowe artykuły
  • Przepisy prawa dotyczące programów komputerowych
  • Transformata Burrowsa-Wheelera
  • Windows pod Linuksem - wirtualizacja
  • Xfce i klawiatura multimedialna
  • Obsługa MIDI w Linuksie
Online
Odwiedzających: 4
Transformata Burrowsa-Wheelera

Autor: Tomasz Chudyk
Data: 2008-03-16 18:56:20

Transformata Burrowsa-Wheelera wykorzystywana jest przy bezstratnej kompresji danych. Przetworzone w ten sposób dane ulegają zazwyczaj znacznie lepszej kompresji, niż w przypadku samodzielnych algorytmów. Została opracowany przez Michaela Burrowsa i Davida Wheelera w 1994 roku.


Bazuje na wcześniej, nigdzie nie publikowanej transformacie Wheelera z 1983 roku. Na wejście algorytmu podaje się dane (ciąg znaków) w kodzie ASCII. Rezultatem transformaty jest posortowany blokowo ciąg znaków.


Algorytm

Algorytm operuje na blokach. Im bloki są większe (więcej danych), tym algorytm jest skuteczniejszy. Na wejście algorytmu wprowadzamy ciąg bitów, które są przetwarzane przez algorytm według schematu:


Obrazek


Schemat blokowy algorytmu Burrowsa-Wheelera.


W pierwszej kolejności generowane są wszystkie rotacje kompresowanego bloku. Kolejnym krokiem jest posortowanie leksykograficzne wygenerowanych łańcuchów. Aby otrzymać ciąg wyjściowy zapamiętujemy ostatni bajt każdej rotacji po sortowaniu. Aby umożliwić rozkodowanie takiego ciągu znaków należy w wyniku przekazać pozycję z posortowanej tablicy rotacji, na której znajduje się kodowana informacja.


Funkcje wewnętrzne

Przedstawiony wyżej algorytm posiada dwie funkcje wewnętrzne odpowiadające za generowanie rotacji, oraz ich sortowanie. Poniżej zaprezentowana jest struktura wewnętrzna funkcji realizująca te zadania.


Obrazek


Funkcja generująca - GenerateRotations


Obrazek


Funkcja sortująca - SortRotations


W wyniku wywołania funkcji generującej otrzymamy tablicę wielowymiarową przechowującą wszystkie rotacje bloku o rozmiarach {n} x {n}, gdzie n jest długością (length) kompresowanego bloku. Funkcja sortująca realizuje prosty algorytm sortowania leksykograficznego (ciągi znaków są sortowane rosnąco, gdzie A < Z < a < z).


Algorytm transformaty odwrotnej


Obrazek


Algorytm transformaty odwrotnej pozwala na odkodowanie przekształconej informacji, w taki sposób, aby otrzymać dane wejściowe. Do tego celu wymagane są zaszyfrowane dane, oraz uzyskana podczas szyfrowania pozycja na której znajduje się prawidłowe trafienie. W czasie dekodowania danych odtwarzane są wszystkie wygenerowane rotacje. Przebiega to w kilku krokach, w zależności od długości danych wejściowych. W każdym kroku dodawana jest najpierw kolumna z zakodowanym ciągiem (po znaku dla każdej rotacji), a następnie dane są sortowane leksykograficznie podobnie jak w przypadku kodowania.


Obrazek


Funkcja dodająca kolumnę dla bloku rotacji – AddColumn.


Na koniec wybierany jest ostateczny rezultat na podstawie przekazanego do algorytmu numeru wiersza N.


Zastosowanie


Transformata Burrowsa-Wheelera sama w sobie nie jest metodą kompresji. Wygenerowany w ten sposób ciąg bitów ma taki sam rozmiar, jak dane wejściowe. Jest on jednak często podstawą przy kompresji bezstratnej. Aby dodatkowo obniżyć poziom entropii wygenerowanych danych używa się innego algorytmu transformacji – Move To Front. Następnie kompresuje się to wszystko wybraną metodą kompresji bezstratnej. Przykładem takiej kompresji jest algorytm Huffmana, który połączony z wymienionymi transformacjami w takiej kolejności tworzy algorytm BZIP2.

Pliki do artukułu
  • burrows.png
  • column.png
  • decrypt.png
  • gen.png
  • sprt.png

Komentarze

~ababa

12008-10-28 09:33:03
SUPER

~PRZEMEK

22008-10-28 09:34:09
zenada

Dodaj komentarz

Login :
Strona WWW :
Komentarz :
Tekst z obrazka :
Popularne tagi

algorytmy alsa amsn bash calumma dell fbi framebuffer freebase hosting innodb internet kernel kompresja konsola laptop metaweb microsoft midi mplayer multimedia mysql opinie osd prawo prompt qemu regexp rozrywka software sortowanie spca5xx svn task timidity todo transakcje usb vesa virtualbox vmware webcam wikipedia wine wirtualizacja x11 xev xfce xosd

Inne

Valid XHTML 1.1

Some Rights Reserved logo

statystyki www stat.pl

Copyleft (C) tom000.info 2004-2008. Some rights reserved