Yuav Nyuaj Li Cas Cov Ntaub Ntawv Siv Huffman Encoding: 10 Kauj Ruam

Cov txheej txheem:

Yuav Nyuaj Li Cas Cov Ntaub Ntawv Siv Huffman Encoding: 10 Kauj Ruam
Yuav Nyuaj Li Cas Cov Ntaub Ntawv Siv Huffman Encoding: 10 Kauj Ruam

Video: Yuav Nyuaj Li Cas Cov Ntaub Ntawv Siv Huffman Encoding: 10 Kauj Ruam

Video: Yuav Nyuaj Li Cas Cov Ntaub Ntawv Siv Huffman Encoding: 10 Kauj Ruam
Video: Koj Hais Dab Tsi?/Suabci Kwm & Ab Meej Ham/Official MV 2023 2024, Plaub Hlis Ntuj
Anonim

Huffman's algorithm yog siv los ntsaws lossis nkag cov ntaub ntawv. Feem ntau, txhua tus cim hauv cov ntawv sau tau muab khaws cia ua yim qhov (tus lej, ib qho 0 lossis 1) uas daim ntawv qhia rau tus xeeb ceem ntawd siv tus lej hu ua ASCII. Huffman-encoded cov ntaub ntawv tawg qhov nruj 8-ntsis qauv kom cov cim siv feem ntau khaws cia hauv ob peb qho me me ('a' tuaj yeem yog "10" lossis "1000" ntau dua li ASCII, uas yog "01100001"). Qhov tsawg tshaj plaws cov cim, tom qab ntawd, feem ntau yuav siv ntau dua 8 cov khoom ('z' yuav yog "00100011010"), tab sis vim tias lawv tshwm sim tsawg heev, Huffman encoding, ntawm tag nrho, tsim cov ntawv me me ntau dua li qhov qub.

Cov kauj ruam

Ntu 1 ntawm 2: Encoding

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 1
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 1

Kauj Ruam 1. Suav qhov zaus ntawm txhua tus cim hauv cov ntawv yuav tsum tau nkag los

Suav nrog tus cim dummy kom cim qhov kawg ntawm cov ntawv - qhov no yuav yog qhov tseem ceeb tom qab. Txog tam sim no, hu nws EOF (qhov kawg ntawm cov ntaub ntawv) thiab kos nws li muaj zaus ntawm 1.

Piv txwv li, yog tias koj xav kom sau cov ntawv nyeem "ab ab cab," koj yuav muaj 'a' nrog zaus 3, 'b' nrog zaus 3, '' (qhov chaw) nrog zaus 2, 'c' nrog zaus 1, thiab EOF nrog zaus 1

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 2
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 2

Kauj Ruam 2. Khaws cov cim ua tsob ntoo thiab muab tso rau hauv qhov muaj feem thib

Koj yuav tau tsim tsob ntoo loj loj nrog txhua tus cim ua nplooj, yog li koj yuav tsum khaws cov cim ua hom ntawv uas lawv tuaj yeem dhau los ua cov ntoo. Muab cov nodes no tso rau hauv kab ua ntej nrog txhua tus cim zaus raws li nws qhov tseem ceeb tshaj.

  • Ib tsob ntoo binary yog cov ntaub ntawv cov ntaub ntawv uas txhua daim ntawm cov ntaub ntawv yog kab ntawv uas tuaj yeem muaj txog ib tus niam txiv thiab ob tug menyuam. Nws yog feem ntau kos raws li cov ceg ntoo, yog li lub npe.
  • Ib kab ntawv yog qhov tsim nyog muaj npe sau cov ntaub ntawv uas thawj qhov uas nkag mus rau hauv kab ntawv kuj yog thawj qhov uas yuav tawm los (zoo li tos hauv kab). Hauv qhov muaj nuj nqis ua ntej, cov ntaub ntawv tau khaws cia raws li lawv qhov muaj feem thib, yog li thawj qhov uas yuav tawm los yog qhov tseem ceeb tshaj plaws, yam uas muaj qhov muaj feem thib me tshaj plaws, tsis yog thawj yam uas xav tau.
  • Hauv qhov piv txwv "ab ab cab", koj qhov muaj feem thib yuav zoo li no: {'c': 1, EOF: 1, '': 2, 'a': 3, 'b': 3}
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 3
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 3

Kauj Ruam 3. Pib tsim koj tsob ntoo

Tshem tawm (lossis dequeue) ob yam tseem ceeb tshaj plaws los ntawm qhov ua ntej. Tsim tsob ntoo tshiab los ua niam txiv ntawm ob lub hauv paus no, khaws thawj qhov ntawm nws tus menyuam sab laug thiab qhov thib ob yog nws tus menyuam raug. Qhov muaj feem thib ntawm lub node tshiab yuav tsum yog qhov suav ua ntej ntawm nws tus menyuam. Tom qab ntawv sau qhov tshiab ntawm no hauv kab ntawv ua ntej.

Qhov muaj feem thib tam sim no zoo li qhov no: {'': 2, node tshiab: 2, 'a': 3, 'b': 3}

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 4
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 4

Kauj Ruam 4. Ua kom tiav koj tsob ntoo:

rov ua cov kauj ruam saum toj no kom txog thaum tsuas muaj ib qho ntawm kab. Nco ntsoov tias ntxiv rau cov nodes koj tau tsim rau cov cim thiab lawv cov zaus, koj kuj tseem yuav dequeuing, tig mus rau hauv cov ntoo, thiab rov sau cov niam txiv ntawm cov nodes, uas yog lawv tus kheej yog tsob ntoo.

  • Thaum koj ua tiav, qhov kawg ntawm kab hauv kab yuav yog lub hauv paus ntawm tsob ntoo sib sau ua ke, nrog rau tag nrho lwm cov kab sib cais los ntawm nws.
  • Cov cim uas nquag siv feem ntau yuav yog cov nplooj ze rau saum tsob ntoo, thaum cov cim tsis tshua muaj neeg siv yuav nyob rau hauv qab ntawm tsob ntoo, nyob deb ntawm lub hauv paus.
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 5
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 5

Kauj Ruam 5. Tsim daim duab qhia chaw. Taug kev hla tsob ntoo kom mus txog txhua tus yam ntxwv. Txhua lub sijhawm koj mus ntsib tus menyuam ntawm sab laug, qhov ntawd yog '0'. Txhua lub sijhawm koj mus ntsib tus menyuam txoj cai, uas yog '1'. Thaum koj mus txog tus cim, khaws tus ua cim nrog ntu ntawm 0s thiab 1s uas nws coj mus rau qhov ntawd. Cov ntu no yog dab tsi tus yam ntxwv yuav raug cim raws li hauv cov ntaub ntawv compressed. Khaws cov cim thiab lawv ua ntu zus hauv daim duab qhia chaw.

  • Piv txwv li, pib ntawm lub hauv paus. Mus ntsib lub hauv paus tus menyuam sab laug, thiab tom qab ntawd mus ntsib qhov ntawm tus menyuam sab laug. Txij li lub node koj nyob tam sim no tsis muaj menyuam, koj tau mus txog tus yam ntxwv. Qhov no yog ''. Txij li thaum koj taug kev sab laug ob zaug kom tau txais ntawm no, kev nkag mus rau '' yog "00".
  • Rau tsob ntoo no, daim ntawv qhia yuav zoo li no: {'': "00", 'a': "10", 'b': "11", 'c': "010", EOF: "011"}.
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 6
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 6

Kauj Ruam 6. Hauv cov ntawv tso tawm, suav nrog daim duab qhia chaw ua lub hauv paus

Qhov no yuav tso cai rau cov ntawv txiav txim siab.

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 7
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 7

Kauj ruam 7. Nkag mus rau cov ntaub ntawv

Rau txhua tus cim hauv cov ntawv yuav tsum tau muab sau ua ke, sau kab ntawv binary uas koj tau khaws cia hauv daim duab qhia chaw. Thaum koj tau ua tiav cov ntaub ntawv, nco ntsoov ntxiv EOF mus rau qhov kawg.

  • Rau cov ntaub ntawv "ab ab cab", cov ntaub ntawv sib qhia yuav zoo li no: "1011001011000101011011".
  • Cov ntaub ntawv raug khaws cia ua bytes (8 khoom, lossis 8 tus lej binary). Vim tias Huffman Encoding algorithm tsis siv hom ntawv 8-ntsis, cov ntaub ntawv nkag los feem ntau yuav tsis muaj qhov ntev uas yog zauv ntawm 8. Cov lej ntxiv yuav raug sau nrog 0s. Hauv qhov no, ob 0s yuav raug ntxiv tom kawg ntawm cov ntawv, uas zoo li lwm qhov chaw. Qhov no tuaj yeem yog teeb meem: tus decoder yuav paub thaum twg kom tsis txhob nyeem ntawv? Txawm li cas los xij, vim tias peb suav nrog qhov kawg ntawm cov ntawv ua cim, tus txiav txim siab yuav mus txog qhov no thiab tom qab ntawd nres, tsis quav ntsej lwm yam uas tau ntxiv rau tom qab.

Ntu 2 ntawm 2: Kev txiav txim siab

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 8
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 8

Kauj Ruam 1. Nyeem hauv Huffman-encoded file

Ua ntej, nyeem lub taub hau, uas yuav tsum yog daim duab qhia chaw. Siv qhov no los tsim tsob ntoo txiav txim ib yam li koj tau tsim tsob ntoo uas koj siv los ua cov ntawv. Ob tsob ntoo yuav tsum zoo ib yam.

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 9
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 9

Kauj Ruam 2. Nyeem hauv binary tus lej ib zaug

Hla tsob ntoo thaum koj nyeem: yog koj nyeem hauv '0', mus rau tus menyuam sab laug ntawm qhov koj nyob, thiab yog koj nyeem hauv '1', mus rau tus menyuam raug. Thaum koj mus txog nplooj (nplooj tsis muaj menyuam), koj tau los txog ntawm tus yam ntxwv. Sau tus ua cim rau hauv cov ntawv txiav txim siab.

Vim tias txoj hauv kev khaws cov ntoo nyob hauv tsob ntoo, cov lej rau txhua tus ua cim muaj cov khoom ua ntej, yog li tsis muaj tus cim binary encoding tuaj yeem tshwm sim thaum pib ntawm lwm tus ua cim. Cov cim rau txhua tus cim yog qhov tshwj xeeb. Qhov no ua rau kev txiav txim siab yooj yim dua

Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 10
Hlais Cov Ntaub Ntawv Siv Huffman Encoding Kauj Ruam 10

Kauj Ruam 3. Rov ua dua kom txog thaum koj mus txog EOF

Nrog koj zoo siab! Koj tau txiav txim siab cov ntaub ntawv.

Pom zoo: