Bilgi Merkezi
Bundan sıkıldım, bana başka bir şey göstersen?

Burrows


The Burrows-Wheeler değiştirir( BWT , hatta blok-sorting sıkıştırmayı çağırdı) , veri sıkıştırması teknikleri meselâ bzip2 'nde kullanan bir algoritmadır. O Michael Burrows tarafından ve David Wheeler icat edildi.

When bir karakter ipi BWT tarafından , karakter değişmesi değerinin hiç birisi değiştirilmez. Değişim karakterlerin düzenini yeniden düzenler. Değiştirilmiş ip eğer sık sık olan orijinal ipin birkaç substringsi vardı tek bir karakterin, bir sırada çoklu zamanları nerede tekrarladığı birkaç yerlere o zaman sahip olacak. Bu sıkıştırma için yararlı ,dir. Bir ipe sıkıştırmak için teknikler meselâ move--ön tarafından tarafından tekrarla karakterlerin, koşuşları var olduğu teknikler meselâ move--ön tarafından tarafından karakterlerin, ve koşuş-uzunluk kodlamanı tekrarlayan kolay olana bakar

For örnek , ip:

SIX. Karıştırılmış. Periler. Eleyin. Altmış. Peri. Toz. BOXES

could dönüştürülmüş bu ip , olur çünkü Onun komprese daha kolay olan karakterleri tekrarlayan çoğu var:

TEXYDST. E. IXIXIXXSSMPPS. B. . E. S. EUSFXDIIOIIIT


değiştirilmiş metinin tüm dönmeleri sınıflama tarafından , o zaman çekici son sütun yapılır. Örneğin , metin" . Muz. " Dönüştürülür mü" BNN. AA. Bir" Bu adımlardan geçerek( Kırmızı@ Karakter 'EOF' işaretçiyi işaret eder) :


Transformation
giriÅŸ All
dönmeler Output
'u gösteren the
'i sınıflar. Muz@
. Muz@ @ . Muz bir@ . BANAN NA@ . BANA ANA@ . Nineyi yasaklayın@ . BA ANANA@ . B muz@ .
ANANA@ . B ANA@ . Biri yasaklayın@ . BANAN muz@ . Nine@ . BA NA@ . BANA. Muz@ @ . BANANA
BNN. AA@ A

The takip eden pseudocode basit bir , fakat etkisiz , yolu aksisi ve BWT'i hesaplamak için verir. Bir özel karakteri 'EOF'ın, metinin son karakteri olan var olduğunu varsayır: , Metinde hiç bir yerde başka olmaz , Ve sortingilizce boyunca önem vermenir

fonksiyon BWT( İp s) Bir genişte bir sıra olan slet her bir dönmenin bütünüyle mümkün dönmelerinin bir listesini yaratır , Masanın kare tablesort sıraları , son bir stringreturn gibi her bir sıra alfabetik olarak davranıyor( Rightmost) Tablefunction inverseBWTin sütunu( İp s) Sıralarla bir boş masa veya columnsrepeat uzunluğu yaradın( S) Timesinsert s bunun, daha fazla-kolayca-sıkıştırılabilir veri niçin yarattığını anlayan 'EOF' character

Toyla biten masa alphabeticallyreturn sıranın tablesort sıralarının sol yanından aşağı yeni bir sütun gibi" , Kelimeyi içeriyor olan uzun bir İngilizce metin değiştirmeni sık sık düşünürüz " . Bu metinin dönmeleri sınıflama başlıyor olan dönmeleri sık sık gruplara ayırır" O" , ve o dönmenin son karakteri beraber( Karakter hatta hangisidir" O" ) Ekseriyetle olacak mı" T" , bu yüzden değiştirilmişin sonucu birtakımı içerecekti" T" Belki daha az-yaygın istisnalarla beraber karakterler( Eğer o içerirse meselâ" Brahe" ) Karıştırdı. Bu yüzden o bu değiştirmenin başarısının, öyle onun, dürüstçe uzun örneklere ihtiyaç duyduğu genel olarak olduğu bir ardışıklık ,dan öncenin, olayın yüksek bir olasılığına sahip olan bir değere güvendiği görülmüş olabilir( Birkaç kilobytes hiç olmazsa) Uygun verinini( Meselâ metin) . BWT hakkında

The dikkate değer şey değildir. onun, yapan tersine çevrilebilir olduğu -- fakat olduğu çıktı -- olağan bir türü kodlayan daha fazla biri kolayca üretir , Orijinal belgeye son sütun verisinden dair-generated olmak için izin veriyor

The aksi anlaşılmış bu yol olabilir. Son masa BWT algoritmayı alın ve Tüm fakat son sütunu silin. Yalnızca bu bilgiyi verdi , Siz ilk sütunu kolayca yeniden yapabilirsiniz. Son sütun metinde siz karakterler , çok sadece tür Bu karakterleri ilk sütunu almak için bütünüyle söyler. , her şey dahil sütunlar belgede karakterlerin siz çiftlerini o zaman beraber bütünüyle verir. Çift esneklikleri ilkin listesi sınıflama ve ikinci sütunlar. Bu tavırdaki devam etme , siz tam listeyi yeniden yapabilirsiniz. , sıra o zaman" Dosya sonu" Sondaki karakter orijinal metindir. Örnek ters çevirme bu gibi yapılır:


aksi Transformation
Input
BNN. AA@ Bir
2 tür 2
B N N'i ilave eden 1 tür 1'i ilave eder. Bir bir@ AA bir bir B N N. @ BA NA NA. B bir bir@ . Bir@ Bir bir bir@ BA NA NA. B@ .
4 tür 4
beyanname NAN NA'i ilave eden 3 tür 3'i ilave eder@ . BA ANA ANA@ . B bir@ . ANA ANA bir@ . NAN NA'i yasaklayın@ . BA@ . BBANA nine NA@ . . ANAN ANA'i yasaklayın@ @ . BA bir@ . BANAN ANA@ Bir@ . B BANA nine NA@ . . Beyanname@ . BA
6 tür 6
BANAN nineyi ilave eden 5 tür 5'i ilave eder@ NA@ . B. BANA ANANA ANA@ . @ . Biri yasaklayın@ . BAANANA ANA@ . Bir@ . BA BANAN nine@ NA@ . B. BANA@ . BANBANANA nine@ . NA@ . BA. BANAN ANANA@ ANA@ . B@ . BANA bir@ . BANANANA@ ANA@ . B bir@ . Muz ninesini yasaklayın@ . NA@ . BA. BANAN@ . BANA
8 tür 8
muzu ilave eden 7 tür 7'i ilave eder@ Nine@ . B NA@ . Beyanname. Muz ANANA@ . ANA@ . BA@ . BANAN bir@ . BANAANANA@ . ANA@ . BA bir@ . BANA muz@ Nine@ . B NA@ . Beyanname. Muz@ . BANANBANANA@ . Nine@ . BA NA@ . BANA. Muz@ ANANA@ . B ANA@ . Beyanname@ . Muz bir@ . BANANANANA@ . B ANA@ . Biri yasaklayın@ . BANAN muz@ . Nine@ . BA NA@ . BANA. Muz@ @ . Muz
Output
. Muz@ Optimizationsun

A numarası çıktı değiştirmesiz daha fazla koşan Bu algoritmaları verimli olarak yapar. BWT 'da , İhtiyaç aslında mağaza masası yok. Masanın her bir sırası iplere tek bir işaretçi tarafından gösterilen olur. Masa saklamak içinmek için aksi BWT ihtiyaçtada veya çoklu türler yapmak içinmek için masa saklamak içinmek için aksi BWT ihtiyaçtada veya çoklu türler yapmak içinmek için yok. O bir ahır türüyle sı sınıflamak için bir defa yeterlidir , Ve her bir karakterin, nerede hareket ettiğini hatırlayın. Bu esneklikler bir tek-devir permütasyon , ki deviri çıktı. Bir" Karakter" Algoritmada bir bayt , veya biraz , veya herhangi bir diğer uygun büyüklük olabilir.

There gerçek bir 'EOF' karaktere sahip olmak için ihtiyaçtır. , bir işaretçi eğer o var olsaydı bir ip 'EOF'da nerede olduğunun, hatırlayan kullanılmış yerine olabilir. Bu yaklaşmada , BWT 'ın çıktısı her ikisi değiştirilmiş ip , ve işaretçinin son değerini içermeli. O girişini genişleten BWT'i biraz kastetir. Aksi orijinal büyüklüğe vazgecen onu büzeni o zaman değiştirir: O bir ipi verilir ve Bir işaretçi , ve sadece bir stringilizceye geri döner: Algoritmaların

A tam tanımlaması verilmiş Burrows ve Wheeler'in kağıdı , veya birtakım çevirimiçi kaynaklarda olabilir.

implementation

Noteyi dener: C 'da yazdı( Orijinal tesis etme: Polonya makale) .

#include & lt; Unistd. H & gt; #include & lt; Stdlib. H & gt; #include & lt; Stringilizce: H & gt; #include & lt; Öne sürün. H & gt; #include & lt; Stdio. H & gt; Typedef işaretlenmemiş gündelik hizmet baytı; Bayt * rotlexcmp _ buf = geçersiz; İnt rottexcmp _ bufsize = 0; İnt rotlexcmp( Const boş * l , const boş * r) { int li = *( Const int *) L , ri = *( Const int *) R , Alternatif Akım = rottexcmp _ bufsize; İken( Rotlexcmp _ buf[ Li] = = rotlexcmp _ buf[ Ri] ) Eğer {( ++li = = rottexcmp _ bufsize) Li = 0; Eğer( ++ri = = rottexcmp _ bufsize) Ri = 0; Eğer( ! --ac) 0'e geri dönün; Eğer }( Rotlexcmp _ buf[ Li] & gt; Rotlexcmp _ buf[ Ri] ) 1'e geri dönün; -1'e başka geri dönün; }void bwt _ kodlar( Bayt * buf _ , bayt * buf _ dış , int büyüklük , int * ilk _ indeks) { int Hindistan'a aitler[ Büyüklük] ; İnt ben; ( Ben = 0; Ben & lt; Büyüklük; İ++) Hindistan'a aitler[ Ben] = ben; Rotlexcmp _ buf = buf _; Rottexcmp _ bufsize = büyüklük; Qsort( Hindistan'a aitler , büyüklük , sizeof( İnt) , rotlexcmp) ; ( Ben = 0; Ben & lt; Büyüklük; İ++) Buf _ dış[ Ben] = buf _[ ( Hindistan'a aitler[ Ben] +size-1) %size] ; ( Ben = 0; Ben & lt; Büyüklük; İ++) Eğer {( Hindistan'a aitler[ Ben] = = 1) { * ilk _ indeks = ben; Dönüş; } } öne sürer( 0) ; }void bwt _ şifre çözer( Bayt * buf _ , bayt * buf _ dış , int büyüklük , int ilk _ indeks) { bayt F[ Büyüklük] ; İnt taşır[ 256] ; İnt ben , j , k; İnt Hindistan'a aitler[ Büyüklük] ; ( Ben = 0; Ben & lt; 256; İ++) Kovalar[ Ben] = 0; ( Ben = 0; Ben & lt; Büyüklük; İ++) Kovalar[ Buf _[ Ben] ] ++; ( Ben = 0 , k = 0; Ben & lt; 256; İ++) ( J = 0; J & lt; Kovalar[ Ben] ; J++) F[ K++] = ben; Öne sürün( K = = büyüklük) ; ( Ben = 0 , j = 0; Ben & lt; 256; İ++) {( Ben & gt; F[ J] & amper; & amper; J & lt; Büyüklük) J++; Kovalar[ Ben] = j; Eğer F 'da ben , fakat // bize herhangi bir problemler }ı getirmeyecek olmayan yok // o uydurma değerleri alacak( Ben = 0; Ben & lt; Büyüklük; İ++) Hindistan'a aitler[ Kovalar[ Buf _[ Ben] ] ++] = ben; ( Ben = 0 , j = ilk _ indeks; Ben & lt; Büyüklük; İ++) { buf _ dış[ Ben] = buf _[ J] ; J = Hindistan'a aitler[ J] ; } }int ana( ) { bayt buf1[ ] =" Polska" ; İnt büyüklük = strlen( Buf1) ; Bayt buf2[ Büyüklük] ; Bayt buf3[ Büyüklük] ; İnt ilk _ indeks; Bwt _ kodlar( Buf1 , buf2 , büyüklük , & amper; İlk _ indeks) ; Bwt _ şifre çözer( Buf2 , buf3 , büyüklük , ilk _ indeks) ; Öne sürün( ! Memcmp( Buf1 , buf3 , büyüklük) ) ; Printf( " Sonuç giriş , gibi aynıdır: & lt; %. * s & gt; \ n" , büyüklük , buf3) ; // baskı dış encode/decode sonuçlanır: Printf( " Giriş: & lt; %. * s & gt; \ n" , büyüklük , buf1) ; Printf( " Çıktı: & lt; %. * s & gt; \ n" , büyüklük , buf2) ; 0'e geri dönün; }

References

dış links

ağırladı
bwt ile ilgili Anahtar Kelimeler :this and characters for the can size i++ int that column last string character BANANA@ BWT Add text Sort The
Bu makale Wikipedia' dan çarpma olup GNU FDL lisansı altındadır. Bu yazıyı yazan arkadaşlar buradadır.
Bir Şey Öğren bir Ferruh Mavituna aksiyonudur ve aktivist bir Wiki forkudur.

Wußten Sie das? - Lernet was