Cum să comprimați datele utilizând codarea huffman
Algoritmul lui Huffman este folosit pentru a comprima sau a codifica datele. În mod normal, fiecare caracter dintr-un fișier text este stocat ca opt biți (cifre, fie 0 sau 1) care hartă la acel caracter folosind o codificare numită ASCII. Un fișier codificat Huffman descompune structura rigidă pe 8 biți, astfel încât cele mai frecvent utilizate caractere sunt stocate în doar câțiva biți ("a" ar putea fi "10" sau "1000" mai degrabă decât ASCII, care este "01100001"). Caracterele cele mai puțin frecvente, atunci vor lua adesea mult mai mult de 8 biți ("Z" ar putea fi "00100011010"), dar pentru că acestea apar atât de rar, Hffman codifică, în ansamblu, creează un fișier mult mai mic decât originalul.
Pași
Partea 1 din 2:
Codificarea1. Numărați frecvența fiecărui caracter din fișier care urmează să fie codificat. Includeți un caracter fals pentru a marca sfârșitul fișierului - acest lucru va fi important mai târziu. Deocamdată, numiți EOF (sfârșitul fișierului) și marcați-l ca având o frecvență de 1.
- De exemplu, dacă doriți să codificați o citire a fișierelor text "AB AB CAB," Ați avea "A" cu frecvență 3, "B" cu frecvență 3, "(spațiu) cu frecvență 2," C "cu frecvența 1 și EOF cu frecvența 1.
2. Stocați caracterele ca noduri de copaci și le puneți într-o coadă prioritară. Veți construi un copac binar mare cu fiecare caracter ca o frunză, deci ar trebui să stocați personajele într-un format astfel încât să poată deveni noduri ale copacului. Plasați aceste noduri într-o coadă prioritară cu frecvența fiecărui caracter ca prioritatea nodului său.
3. Începeți să vă construiți copacul. Eliminați (sau Dequeue) cele două lucruri cele mai urgente din coada de prioritate. Creați un nou nod de copac pentru a fi părintele acestor două noduri, stocând primul nod ca și copilul stâng și al doilea ca și copilul drept. Prioritatea noului nod ar trebui să fie suma priorităților copilului său. Apoi enqueue acest nou nod în coada de prioritate.
4. Finalizați construirea copacului: Repetați pasul de mai sus până când există un singur nod în coadă. Rețineți că, în plus față de nodurile pe care le-ați creat pentru personaje și frecvențele lor, veți fi defectat, transformați în copaci și reintroduceți nodurile părinte, nodurile care sunt deja copaci.
5. Creaza un Harta codificatoare. Umblați prin copac pentru a ajunge la fiecare caracter. De fiecare dată când vizitați copilul stâng al unui nod, acesta este un "0". De fiecare dată când vizitați un copil drept al unui nod, acesta este un "1". Când ajungeți la un personaj, depozitați caracterul cu secvența de 0s și 1 pe care a luat-o pentru a ajunge acolo. Această secvență este ceea ce caracterul va fi codificat ca în fișierul comprimat. Stocați caracterele și secvențele lor într-o hartă.
6. În fișierul de ieșire, includeți harta de codare ca antet. Acest lucru va permite ca fișierul să fie decodificat.
7. Codificați dosarul. Pentru fiecare personaj din fișier care urmează să fie codificat, scrieți secvența binară pe care ați stocat-o pe hartă. Odată ce ați terminat codificarea fișierului, asigurați-vă că adăugați EOF la sfârșit.
Partea 2 din 2:
Decodare1. Citiți într-un fișier codificat Huffman. În primul rând, citiți antetul, care ar trebui să fie harta codificatoare. Utilizați acest lucru pentru a construi un copac de decodare în același mod în care ați construit copacul pe care l-ați folosit pentru a codifica fișierul. Cei doi copaci ar trebui să fie identici.
2. Citiți în prima cifră binară la un moment dat. Traversați copacul pe măsură ce citiți: Dacă citiți într-un "0", mergeți la copilul stâng al nodului pe care îl aveți și dacă citiți într-un "1", mergeți la copilul potrivit. Când ajungeți la o frunză (un nod fără copii), ați ajuns la un personaj. Scrieți caracterul în fișierul decodat.
3. Repetați până când ajungeți la EOF. Felicitări! Ați decodificat fișierul.
sfaturi
Partajați pe rețeaua socială: