Metoda de algoritmul LZW, de compresie - implementarea algoritmului de compresie LZW folosind oportunități

- selectat primul caracter din fluxul de intrare;

- selectat arbore binar în dicționar corespunzătoare;

- selectează următorul caracter din fluxul de intrare;

- Mai mult, pentru fiecare nod al unui arbore binar, dacă simbolul coincide cu simbolul din partea de sus pentru a trece la urmatoarele Vertex Communications <равно>; scoate următorul caracter din fluxul de intrare;

în caz contrar du-te la urmatoarele Vertex Communications <не равно>, continua cu același simbol;

Procesul de comprimare este destul de simplu. Algoritmul de compresie este după cum urmează:

· Inițializarea din tabelul de 256 de caractere ASCII.

· Inițializarea liniei curente printr-o linie goală.

· Atâta timp cât intrarea nu este gol se efectuează:

o Citind următorul caracter din fișierul de intrare.

· Dacă tabelul conține o combinație de „linie de curent + simbol (un“ + „se referă la concatenarea string)“ se efectuează:

o Verificarea pentru un tabel al unui lanț mai mare, care începe cu acest lucru, cu toate acestea se atașează la rândul simbolului.

· În caz contrar (dacă simbolul curent + line nu este inclusă în tabel, dar rândul curent în acest tabel.)

· Ia linia de cod curent în tabel.

· Imprimare codul din fișierul de ieșire.

· Adăugarea unei combinații a liniei curente + simbolul în tabel.

· Linia de curent este acum - ultimul caracter citit din fluxul (tot ce a fost citit la el, este deja afișat în fișierul de ieșire).

· După ieșirea din bucla linia de curent nu este gol, este de asemenea necesar să se aducă cod în fișierul de ieșire.

· Imprimare codul din fișierul de ieșire.

Am citit de serie flux de simboluri de intrare și de a verifica dacă există un tabel șir am creat această linie. Dacă șirul este, atunci am citit caracterul următor, iar în cazul în care linia nu este prezent, contorizăm un flux de cod pentru șirul precedent găsit, mini rând la masă și începe din nou căutarea. LZW puse în aplicare în formatele GIF și TIFF.

LZW - această metodă de comprimare a datelor, care extrage avantajele în repetarea datelor lanțuri. Deoarece datele raster conțin de obicei, o mulțime de repetiții, LZW este o metodă bună pentru comprimarea și extinderea acestora.

compresie aritmetică necesită o cunoaștere a probabilităților de apariție în fluxul de intrare de caractere de intrare alfabet. caractere de intrare alfabet sunt aranjate într-o ordine fixă. Intervalul la 0 la 1 este împărțit între simboluri la intervale de valori inițiale în funcție de probabilitățile lor. Lățimea optimă a intervalului inițial pentru probabilitatea simbolului de apariție într-un flux de intrare este egal cu p -log2 p.

Teoretic, ieșirea algoritmului poate fi orice număr, inclus în intervalul de funcționare după ultimul caracter de intrare. În practică, pentru fiecare reducere interval în fluxul de ieșire sunt plasate toți biții de potrivire semnificativi din limita superioară și inferioară a intervalului de lucru. Evident, atunci când un caracter este primit de la o probabilitate mai mare de apariție și un domeniu de lucru interval mai larg inițial micșora biți mai mici și mai mici, se încadrează în fluxul de ieșire. Astfel, caracterele cu o mai mare probabilitate de apariție sunt codificate mai puțini biți. În practică, folosit de multe ori o varietate de algoritm dinamic, atunci când la începutul lucrării sale probabilitatea de intrare caractere ale alfabetului sunt necunoscute, iar acestea sunt evaluate și modifică în mod dinamic ca algoritmul. Diferite strategii pot fi probabilități de calcul dinamic, caracterizată prin creșterea probabilității de a găsi valoarea în simbolul de intrare. Vom numi modelul în care crește în mare măsură de probabilitate, modele cu adaptabilitate ridicată, și modele în care aceasta crește ușor - și modele cu adaptabilitate scăzută. Este evident că, pentru fiecare caz în parte are propria sa valoare optimă de adaptabilitate.

LZW + compresie aritmetică:

La fel ca și în algoritmii și LZH LZARI LZSS flux de ieșire algoritm este comprimat prin metode statistice, se poate încerca să pună algoritmul de codificare flux de ieșire stoarce LZW-aritmetică. Intrare aritmetică alfabet de codificare în acest caz este variabilă, producția va oscila de intrare pentru alimentare alfabetul LZW-algoritmul algoritmului dimensiune-LZW de vocabular.

Metoda de algoritmul LZW, de compresie - implementarea algoritmului de compresie LZW folosind oportunități

În funcție de gradul de comprimare a nivelului de adaptabilitate.

Algoritmul poate fi modificat ca probabilitatea atribuită noilor elemente ale dicționarului, și codul de creștere probabil pentru a satisface fluxul de ieșire LZW-algoritm. Rezultatul este aproximativ aceeași pentru diferite tipuri de seturi de date de intrare și diferă numai în nivelul general de compresie.

În acest moment, considerăm codificarea și decodificarea normală folosind LZW-algoritm. GIF folosește o variantă a acestui algoritm.

Primul lucru pe care îl face cu LZW-compresie este inițializa șirul nostru de simboluri. Pentru a face acest lucru, trebuie să selectați dimensiunea codului (numărul de biți), și să știu cât de multe valori posibile pot lua de caractere noastre. Să punem dimensiunea codul de 12 biți, ceea ce înseamnă posibilitatea de a stoca 0FFF, sau 4096, elemente în lanțurile noastre de masă. Să presupunem, de asemenea, că avem un posibil 32 de simboluri diferite. (Aceasta corespunde, de exemplu, o imagine cu 32 de culori posibile pentru fiecare pixel.) Pentru a inițializa masa, vom stabili un cod de corespondență simbol # 0 # 0, # 1 cod simbol # 1, etc. până la codul # 31 și # 31. De fapt, am spus că fiecare cod de 0-31, este rădăcina. Mai multe în tabel nu vor fi alte coduri, care au această proprietate.

caracteristică LZW este că decompresie nu avem nevoie pentru a stoca rândurile din tabel în fișierul pentru decompresie. Algoritmul este construit în așa fel încât să putem restabili masa șir folosind doar fluxul de cod.

Știm că pentru fiecare cod ar trebui să fie adăugate la masa un șir de deja prezente acolo linii și caractere, de la care începe următoarea linie în flux.

Trebuie remarcat faptul că, în scopul de a salva tabelul șir de memorie de calculator poate fi prezent în mod eficient, având în vedere caracterul său următoarea: dacă, de exemplu, șir ASDFK în tabelul de sir sau asdf este, de asemenea, inclusă în ea. Acest fapt sugerează că, în loc de a stoca întregul lanț în tabel, amintiți-vă doar codul pentru asdf au, urmat de un simbol K. Trailing

Pentru a mări gradul de comprimare a imaginii prin această metodă este adesea folosit un „truc“ punerea în aplicare a acestui algoritm. Unele imagini sunt comprimate folosind LZW, au un lanț comun de valori identice, cum ar fi 12 12 12 sau 32 32 ... 32 ... și așa mai departe. P. comprimarea directă lor va genera un cod de ieșire 258 și 12 decembrie, etc.

Codificarea acestor lanțuri vor fi efectuate după cum urmează. Prima culoare 12 înregistrări cu propriul său cod de la masa 12. următoarea culoare este, de asemenea, 12, apoi se adaugă o linie la masa 12, 12 cu codul 258 și fluxul de ieșire troienele imediat acest cod, și anume, 258. Uită-te la fluxul de intrare. Dacă intrarea culorii vine din spate 12, este în tabel, uita-te la următoarele - 12, 12, 12 secvență are de asemenea, o masă, în căutarea pe - 12 12 12 12 secvență de cod assign 259, și îl împinge în fluxul de ieșire. Ca urmare, producția este secvența 12258259 ..., care este mult mai scurtă decât metoda de codificare standard de LZW directă.

Se poate demonstra că o astfel de secvență va fi corect restaurat. Decodor Mai întâi, citește primul cod - este de 12, care corespunde culorii 12. Apoi citi codul 258, dar acest cod nu este în tabelul. Acest lucru este posibil numai în cazul în care caracterul adăugat este primul caracter al secvenței nou citit, adică, 12. Prin urmare, se va adăuga la masa lor șir de caractere 12, 12 cu codul 258, iar fluxul de ieșire va pune 12 12. Și astfel că poate fi de a decoda codurile de lanț întreg.

Codificarea regula descrisă mai sus poate fi aplicat, în general, nu numai la punctele consecutive de culoare identice, dar, de asemenea, la secvențe care au caracter următor se adaugă la primul șir de caractere.

Metoda de algoritmul LZW, de compresie - implementarea algoritmului de compresie LZW folosind oportunități

Munca decodare LZW.

Caracteristici algoritm LZW:

Raport de compresie: Aproximativ 1000 de 4, 5/7 (cele mai bune, în medie, cel mai rău rapoarte). Compresia de 1000 de ori se realizează numai într-o singură imagine color dimensiune multiplu de aproximativ 7 MB.

Image Class: se concentrează pe imaginile de 8 biți LZW, construit pe calculator. Comprimare subchains identice datorate în flux.

Simetria: aproape simetrice, cu operațiunea de căutare optimă șir de rezervă de punere în aplicare în tabel.

Caracteristici speciale: O situație în care algoritmul mărește imaginea, este extrem de rară. LZW este universală - este variantele sale sunt folosite în logger convenționale.