[Powered by Google Translate] [Walkthrough - Set Problem 6]
[Zamyla Chan - Università ta 'Harvard]
[Dan huwa CS50. - CS50.TV]
>> Hello, kulħadd, u jilqgħu għall Walkthrough 6: Puff Huff'n.
Fil Puff Huff'n dak li qed nagħmlu se tkun jittrattaw ma 'fajl kompressata Huffman
u mbagħad puffing lura up, hekk decompressing dan,
sabiex inkunu nistgħu jittraduċu mill-0s u 1s li l-utent jibgħat magħna
u jikkonvertu lura fit-test oriġinali.
Pset 6 se tkun pjuttost jibred għaliex int ser tara xi wħud mill-għodod
li inti użati fil pset 4 u pset 5 u tip ta 'jingħaqdu fis-1 kunċett pjuttost pulita
meta inti tidħol għall taħseb dwarha.
>> Ukoll, forsi, pset 4 u 5 kienu l-aktar ta 'sfida psets li aħna kellhom joffru.
Allura minn issa, aħna għandna dan pset 1 aktar fis-C,
u mbagħad wara li aħna qed dwar l-ipprogrammar tal-web.
Allura nifirħu infuskom għall jkollna fuq il-hump aktar ħorox fid CS50.
>> Nimxu fuq għal Puff Huff'n, għodda tagħna għal dan pset ser ikunu siġar Huffman,
hekk fehim mhux biss kif binarja siġar xogħol iżda wkoll speċifikament siġar Huffman,
kif dawn qed jinbnew.
U allura aħna qed tmur biex ikollhom ħafna ta 'kodiċi ta' distribuzzjoni f'dan pset,
u aħna ser jaslu biex tara li fil-fatt xi wħud mill-kodiċi
aħna ma jista 'jkun kapaċi li jifhem bis-sħiħ għadu,
u għalhekk dawn se jkunu l-fajls c., iżda mbagħad jakkumpanjawhom. tagħhom h fajls
se tagħtina biżżejjed għarfien li għandna bżonn biex inkunu nafu kif dawk il-funzjonijiet tax-xogħol
jew għall-inqas dak li suppost tagħmel - inputs u l-outputs tagħhom -
anke jekk ma nafux x'inhu jiġri fil-kaxxa s-sewda
jew ma jifhmux dak li qed jiġri fil-kaxxa s-sewda ġewwa.
U mbagħad finalment, bħas-soltu, aħna qed jittrattaw ma 'strutturi ta' dejta ġodda,
tipi speċifiċi ta 'għoqiedi li jindikaw ċerti affarijiet,
u għalhekk hawn li jkollhom pinna u karta mhux biss għall-proċess tad-disinn
u meta inti qed tipprova figura kif pset tiegħek għandha taħdem
iżda wkoll matul debugging.
Inti jista 'jkollhom GDB flimkien pinna tiegħek u l-karta waqt li tkun tieħu r liema l-valuri huma,
fejn vleġeġ tiegħek huma tipponta, u affarijiet bħal dik.
>> L-ewwel ejja nħarsu lejn siġar Huffman.
Siġar Huffman huma siġar binarju, li jfisser li kull node għandha biss 2 tfal.
Fl-siġar Huffman il-karatteristika hija li l-valuri l-aktar frekwenti
huma rappreżentati mill-bits inqas.
Rajna fl-eżempji lecture tal Morse code, li tip ta 'kkonsolidata xi ittri.
Jekk inti qed tipprova biex tittraduċi xi A jew E, per eżempju,
int traduzzjoni li ta 'spiss, u għalhekk minflok li jużaw is-sett sħiħ ta' bits
allokat għal dak it-tip tad-data tas-soltu, inti kkompressat l-isfel għal inqas,
u mbagħad dawn l-ittri li huma rappreżentati inqas ta 'spiss huma rappreżentati bil bits itwal
għaliex inti tistax taffordja li meta inti iżen il-frekwenzi li dawn l-ittri jidhru.
Għandna l-istess idea hawn siġar Huffman
fejn aħna qed jagħmlu katina, tip ta 'triq biex jiksbu l-karattri ċerti.
U allura l-karattri li jkollhom l-frekwenza aktar
ser ikunu rappreżentati bl-bits inqas.
>> Il-mod li inti tibni siġra Huffman
huwa billi tpoġġi kollha tal-karattri li jidhru fit-test
u l-kalkolu frekwenza tagħhom, kemm-il darba jidhru.
Dan jista 'jkun jew għadd ta' kif ħafna drabi dawn l-ittri jidhru
jew forsi persentaġġ ta 'barra ta' l-karattri kemm kull wieħed jidher.
U hekk dak li għandek tagħmel hu li ladarba inti għandek kollha ta 'dak l fassal,
allura inti tfittex l-frekwenzi 2 aktar baxx u mbagħad għaqqadhom bħala aħwa
fejn allura l-node ġenitur għandu frekwenza li hija s-somma ta '2-tfal tagħha.
U allura inti permezz tal-konvenzjoni tgħid li l-xellug node,
inti ssegwi dan billi ssegwi l-fergħa 0,
u allura l-node lemini hija l-fergħa 1.
Kif rajna fil Morse code, il-gotcha wieħed kien li jekk kellek biss ħoss u l-ħoss
kien ambigwu.
Dan jista 'jkun jew 1 ittra jew jista' jkun sekwenza ta '2 ittri.
U hekk dak Huffman siġar ma huwa minħabba fin-natura tal-karattri
jew tagħna karattri attwali finali huma l-lymph aħħar fuq il-fergħa -
nirreferu għal dawk kif weraq - bis-saħħa ta 'dak ma jistax ikun hemm xi ambigwità
f'termini ta 'liema ittra qed tipprova encode mas-serje ta' bits
għaliex imkien tul il-bits li jirrappreżentaw 1 ittra
ser tiltaqa 'ma' ittra oħra kollha, u mhux se jkun hemm xi konfużjoni hemmhekk.
Iżda aħna ser imorru fis eżempji li inti guys tista 'attwalment tara li
minflok minna biss tghidlek li dan huwa veru.
>> Ejja nħarsu lejn eżempju sempliċi ta 'siġra Huffman.
I jkollhom string hawnhekk li huwa ta '12 karattri fit-tul.
Għandi 4 Kif, 6 Bs, u 2 Cs.
Ewwel pass tiegħi jkun li għadd.
Kemm-il darba ma jidhirx A? Jidher 4 darbiet fis-sekwenza.
B jidher 6 darbiet, u C jidher 2 darbiet.
Naturalment, jien ser ngħid jien jużaw B-aktar spiss,
hekk nixtieq li jirrappreżentaw B bl-inqas numru ta 'bits, l-inqas numru ta' 0s u 1s.
U allura jien ukoll ser jistennew C li jeħtieġu l-aktar ammont ta '0s u 1s ukoll.
L-ewwel dak li għamilt hawnhekk hija I mqiegħda f'ordni axxendenti f'termini ta 'frekwenza.
Naraw li l-Ċ u l-A, dawn huma 2-frekwenzi tagħna aktar baxx.
Aħna joħolqu node ġenitur, u li node ġenitur ma jkollu ittra assoċjat miegħu,
iżda ma jkollu frekwenza, li hija s-somma.
Is-somma isir 2 + 4, li hija 6.
Imbagħad aħna isegwu l-fergħa tax-xellug.
Jekk konna f'dak node 6, allura aħna isegwu 0 biex jiksbu C
u mbagħad 1 sabiex insir A.
Allura issa għandna 2 lymph.
Għandna l-valur 6 u mbagħad aħna wkoll ieħor node mal-valur 6.
U għalhekk dawn 2 huma mhux biss l-2 aktar baxx, iżda wkoll biss il-2 li jitħallew,
hekk aħna jissieħbu dawk minn ieħor ġenitur, mas-somma li jkunu 12.
Allura hawnhekk għandna siġra Huffman tagħna
fejn tikseb sa B, li jkun biss il-bit 1
u mbagħad sabiex insir A rridu naraw 01 u mbagħad C li jkollhom 00.
Allura hawn naraw li bażikament aħna qed jirrappreżentaw dawn Chars ma '1 jew 2 bits
fejn il-B, kif previst, għandha l-inqas.
U allura kellna mistenni C li jkollhom l-aktar, iżda peress li huwa tali siġra Huffman żgħir,
allura l-A hija wkoll rappreżentata minn 2 bits għall-kuntrarju x'imkien fin-nofs.
>> Just jmorru fuq eżempju ieħor sempliċi tas-siġra Huffman,
jiġifieri għandek l-sekwenza "Hello."
Dak li għandek tagħmel huwa l-ewwel inti ngħid kif ħafna drabi ma H jidher f'dan?
H tidher tidher e darba u mbagħad darba u mbagħad għandna l jidhru darbtejn
u o jidhru darba.
U hekk allura aħna nistennew li l-ittra li tkun rappreżentata mill-inqas numru ta 'bits?
[Student] l. L >>. Yeah. l huwa dritt.
Aħna nistennew l li tkun rappreżentata mill-inqas numru ta 'bits
minħabba l tiġi użata l-aktar fil-sekwenza "Hello."
Dak li jien ser tagħmel hu issa jiġbed out dawn in-nodi.
Għandi 1, li hija H, u mbagħad ieħor 1, li huwa e, u mbagħad 1, li hija o -
dritt issa jien tqegħid f'ordni tagħha - u mbagħad 2, li huwa l.
Imbagħad I jiġifieri l-mod li jien jibnu siġra Huffman huwa li jinstabu l-lymph 2 mal-frekwenzi inqas
u jagħmluhom aħwa billi toħloq node ġenitur.
Hawnhekk għandna 3 lymph bl-inqas frekwenza. Huma qed kollha 1.
Allura hawnhekk għandna jagħżlu liema waħda aħna qed tmur biex tagħmel link ewwel.
Ejja ngħidu I jagħżlu l-H u l-e.
Is-somma ta 1 + 1 huwa 2, iżda dan node ma jkollu ittra assoċjati magħha.
Hija biss għandha l-valur.
Issa aħna nħarsu lejn il-li jmiss 2 frekwenzi aktar baxxi.
Dak 2 u 1. Dan jista 'jkun jew ta' dawk 2, iżda jien ser jagħżlu dan wieħed.
Is-somma hija ta '3.
U mbagħad finalment, I biss 2 xellug, hekk allura li ssir 5.
Imbagħad hawn, kif mistenni, jekk I imla l-kodifikazzjoni għal dan,
1s huma dejjem l-fergħa dritt u 0s l-waħda xellug.
Imbagħad għandna l rappreżentata mill biss 1 daqsxejn u mbagħad lo bi 2
u allura l-e minn 2 u allura l-H taqa isfel sa 3 bits.
Allura inti tista 'tittrasmetti dan il-messaġġ "Hello" minflok attwalment jużaw il-karattri
bi ftit 0s u 1s.
Madankollu, ftakar li f'diversi każi kellna rabtiet ma 'frekwenzi tagħna.
Aħna jista 'jkollhom jew ingħaqdu mal-H u lo 1 forsi.
Jew imbagħad aktar tard meta kellna l-l rappreżentat minn 2
kif ukoll l-magħquda 1 rappreżentata minn 2, jista 'jkollna konnessi jew wieħed.
>> U hekk meta inti tibgħat l-0s u 1s, li attwalment ma tiggarantix
li r-riċevitur tista 'kollox taqra messaġġ tiegħek dritt off BAT
minħabba li dawn jistgħu ma jkunux jafu liema deċiżjoni tkun għamilt.
Allura meta aħna qed jittrattaw ma 'kompressjoni Huffman,
b'xi mod għandna biex tgħid min jirċievi l-messaġġ tagħna kif aħna iddeċieda -
Dawn jeħtieġ li jkunu jafu xi tip ta 'informazzjoni addizzjonali
minbarra l-messaġġ kompressata.
Dawn jeħtieġ li jifhmu dak li l-siġra attwalment tidher qiesha,
kif aħna attwalment magħmula dawn id-deċiżjonijiet.
>> Hawnhekk konna biss tagħmel eżempji bbażati fuq l-għadd attwali,
imma xi kultant tista 'wkoll ikollhom siġra Huffman
ibbażata fuq il-frekwenza li fiha l-ittri jidhru, u huwa l-istess proċess eżatt.
Hawnhekk jien jesprimuhom f'termini ta 'perċentwali jew frazzjoni,
u għalhekk hawn l-istess ħaġa eżatt.
I isibu l-2 aktar baxx, is-somma tagħhom, il-2 li jmiss l-aktar baxx, is-somma tagħhom,
sakemm I jkollhom siġra sħiħa.
Anki jekk aħna tista 'tagħmel dan jew mod, meta aħna qed jittrattaw ma' perċentwali,
dan ifisser li aħna qed jiġi diviż l-affarijiet u jittrattaw deċimi jew aktar flowts
jekk aħna qed jaħsbu dwar strutturi ta 'dejta ta' ras.
Dak li nafu dwar flowts?
X'hemm problema komuni meta aħna qed jittrattaw ma 'flowts?
[Student] impreċiżi aritmetika. >> Yeah. Nuqqas ta 'preċiżjoni.
Minħabba nuqqas ta 'preċiżjoni punt f'wiċċ l-ilma, għal dan pset sabiex nagħmlu ċert
li aħna ma jitilfu ebda valur, allura aħna qed fil-fatt se jkunu jittrattaw l-għadd.
Mela jekk ġejt biex jaħsbu ta 'node Huffman, jekk inti tħares lura lejn l-istruttura hawn,
jekk inti tħares lejn dawk aħdar għandu frekwenza assoċjati miegħu
kif ukoll li jindika node fuq ix-xellug tagħha kif ukoll node għad-dritt tiegħu.
U allura dawk aħmar hemm ukoll karattru assoċjati magħhom.
Aħna mhux se tagħmel dawk separati għall-ġenituri u allura l-lymph finali,
li nirreferu għalih bħala weraq, iżda dawn se biss għandhom valuri NULL.
Għal kull node aħna ser ikollhom karattru, is-simbolu li din node jirrappreżenta,
imbagħad frekwenza kif ukoll pointer għat-tarbija xellug tiegħu kif ukoll wild dritt tiegħu.
Il-weraq, li huma fil-qiegħ nett, ikollu wkoll indikazzjonijiet node
għax-xellug u għal-lemin tagħhom, iżda peress li dawn il-valuri ma jkunux tipponta lejn lymph attwali,
dak li l-valur tagħhom ikun? >> [Student] NULL. NULL. >> Eżattament.
Hawn eżempju ta 'kif inti tista' tirrappreżenta l-frekwenza fil sufruni,
imma aħna qed tmur biex tkun jittrattaw ma 'interi,
għalhekk kull I ma hija l-bidla tat-tip tad-data hemmhekk.
>> Ejja jmorru fuq għal ftit aktar ta 'eżempju kumpless.
Imma issa li aħna ghamilt dawk sempliċi, huwa biss l-istess proċess.
Inti issib il-frekwenzi 2-aktar baxx, is-somma tal-frekwenzi
u dak l-ġdid għall-frekwenzi tar node ġenitur tiegħek,
li mbagħad jindika xellug tagħha mal-fergħa 0 u d-dritt mal-fergħa 1.
Jekk għandna l-sekwenza "Dan huwa cs50," allura aħna jgħoddu kif ħafna drabi huwa T msemmi,
h imsemmi, i, i, c, 5, 0.
Imbagħad dak li għamilt hawnhekk huwa l-lymph aħmar I biss mħawla,
I said jien ser ikollhom dawn il-karattri eventwalment fil-qiegħ ta 'siġra tiegħi.
Dawk ser ikunu kollha tal-weraq.
Imbagħad dak li għamilt huwa I magħżula minnhom skont il-frekwenza f'ordni axxendenti,
u dan huwa effettivament il-mod li l-kodiċi pset tagħmlu
huwa dan xorta huwa skond il-frekwenza u mbagħad alfabetikament.
Għalhekk hija għandha n-numri ewwel u mbagħad alfabetikament mill-frekwenza.
Imbagħad dak li nixtieq nagħmel huwa I se ssib l-aktar baxx 2. Dak 0 u 5.
Nixtieq qosor minnhom, u li 2. Imbagħad I se tkompli, isibu l-jmiss 2 aktar baxx.
Dawk huma l-1s tnejn, u mbagħad dawk isir 2 kif ukoll.
Issa naf dak il-pass li jmiss tiegħi se tkun li tgħaqqad in-numru aktar baxx,
li huwa l-T, il-1, u mbagħad jagħżlu waħda mill-lymph li għandha 2 bħala l-frekwenza.
Allura hawnhekk għandna 3 għażliet.
What jien ser tagħmel għall-slide hija biss viżwalment rranġati lilhom għalik
sabiex inti tista 'tara kif jien tibniha.
X'inhu l-kodiċi u l-kodiċi ta 'distribuzzjoni tiegħek se tagħmel huwa jkun jissieħbu fl-1 T
ma 'l-node 0 u 5.
Mela allura dak somom sa 3, u mbagħad aħna tkompli l-proċess.
Il-2 u l-2 issa huma l-aktar baxx, u għalhekk allura dawk is-somma sa 4.
Kulħadd wara s'issa? Okay.
Imbagħad wara li għandna l-3 u l-3 li jeħtieġu li jiġu miżjuda,
hekk darb'oħra jien biss switching hekk li inti tista 'tara viżwalment hekk li ma tikseb wisq messy.
Imbagħad għandna 6, u mbagħad pass finali tagħna issa hija li aħna biss 2 nodi
aħna somma dawk li jagħmlu l-għerq tal-siġra tagħna, li huwa 10.
U n-numru 10 jagħmel sens għaliex kull node rappreżentati,
il-valur tagħhom, in-numru frekwenza tagħhom, kien kif ħafna drabi dawn dehru fis-sekwenza,
u allura għandna 5 karattri string tagħna, hekk li jagħmel sens.
Jekk inħarsu lejn kif aħna up fil-fatt jikkodifikaw dan,
kif mistenni, l-i u l-i, li jidhru l-aktar spiss
huma rappreżentati mill-inqas numru ta 'bits.
>> Oqgħod attent hawnhekk.
Fl-siġar Huffman-każ attwalment kwistjonijiet.
An S uppercase huwa differenti minn i zghar.
Jekk kellna "Dan huwa CS50" ma 'ittri kapitali, allura l-i zghar biss tidher darbtejn,
ikun node mal 2 bħala valur tagħha, u mbagħad uppercase S ikun biss darba.
Mela allura siġra tiegħek se tinbidel strutturi għax inti fil-fatt ikollhom weraq żejda hawn.
Iżda s-somma xorta jkun 10.
Dak hu li aħna qed fil-fatt se tkun sejħa tal-checksum,
iż-żieda ta 'kollha tal-għadd.
>> Issa li konna koperti siġar Huffman, nistgħu adsa fis Puff Huff'n, il pset.
Aħna ser tibda bil sezzjoni ta 'mistoqsijiet,
u dan se tikseb inti mdorri bis-siġar binarji u kif joperaw madwar li:
lymph tpinġija, ħolqien Struct typedef tiegħek stess għal node,
u tara kif inti tista 'daħħal fis-siġra binarju, wieħed thats magħżula,
traversat, u affarijiet bħal dik.
Dan l-għarfien huwa definittivament se jgħinuk meta inti adsa fis-porzjon Puff Huff'n
tal-pset.
Fl-edizzjoni standard tal-pset, ix-xogħol tiegħek huwa li timplimenta Puff,
u fil-verżjoni Hacker kompitu tiegħek huwa li jiġu implimentati Huff.
X'inhu Huff ma huwa li jieħu test u mbagħad jittraduċi hija fil-0s u 1s,
sabiex il-proċess li għamilna hawn fejn aħna magħduda l-frekwenzi
u mbagħad isiru l-siġra u mbagħad qal, "Kif nista 'nikseb T?"
T hija rappreżentata minn 100, affarijiet bħal dik,
u mbagħad Huff kienet ser tieħu t-test u mbagħad output li binarja.
Iżda wkoll għaliex aħna nafu li aħna rridu li jippermettu riċevitur tagħna tal-messaġġ
jirrikreaw-siġra istess eżatt, din tinkludi wkoll informazzjoni dwar l-għadd ta 'frekwenzi.
Imbagħad ma 'Puff aħna jingħataw fajl binarju ta 0s u 1s
u minħabba wkoll l-informazzjoni dwar il-frekwenzi.
Aħna tittraduċi dawk kollha lura 0s u 1s fil-messaġġ oriġinali li kien,
hekk aħna qed decompressing dan.
Jekk inti qed tagħmel l-edizzjoni standard, inti m'għandekx bżonn biex jimplimentaw Huff,
iva allura inti tista 'biss tuża l-implimentazzjoni tal-persunal ta' Huff.
Hemm struzzjonijiet fil-spec dwar kif jagħmlu dan.
Inti tista 'taħdem l-implimentazzjoni tal-persunal ta Huff fuq fajl test ċerta
u mbagħad jużaw dak l-output bħala input tiegħek biex Puff.
>> Kif semmejt qabel, għandna ħafna ta 'kodiċi ta' distribuzzjoni għal dan wieħed.
Jien ser tibda għaddejja minn ġo fih.
Jien ser jonfqu l-aktar tal-ħin fuq il-. Fajls h
minħabba li fil-fajls c., għaliex għandna l-h.
u li tagħtina l-prototipi tal-funzjonijiet,
aħna ma kollox jeħtieġ li jifhmu eżattament -
Jekk ma tifhimx x'inhu għaddej fil-fajls c., Allura ma jinkwetaw wisq,
iżda definittivament tipprova tagħti ħarsa għaliex din tista 'tagħti xi ideat
u huwa utli li jidraw qari kodiċi nies oħrajn.
>> Ħarsa lejn huffile.h, fil-kummenti li tiddikjara saff ta 'estrazzjoni għall Huffman-coded fajls.
Jekk aħna jinżlu, naraw li hemm massimu ta '256 simboli li għandna jistgħu jeħtieġu kodiċi għall.
Dan jinkludi l-ittri tal-alfabett - uppercase u zghar -
u mbagħad simboli u numri, eċċ
Imbagħad hawnhekk għandna numru magic tidentifika fajl Huffman-coded.
Fi ħdan kodiċi Huffman dawn qed tmur biex ikollhom numru magic ċertu
assoċjati mal-header.
Dan jista 'dehra biss numru magic każwali,
imma jekk inti fil-fatt din tissarraf f'azzjoni ASCII, allura fil-fatt tispjega l Huff.
Hawnhekk għandna Struct għal fajl Huffman-encoded.
Hemm kollha ta 'dawn il-karatteristiċi assoċjati ma' fajl Huff.
Imbagħad stabbiliti hawn għandna l-header għal fajl Huff, hekk aħna sejħa hija Huffeader
minflok ma żżid il-h żejda għaliex ħsejjes l-istess xorta waħda.
Ħelu.
Għandna numru magic assoċjati magħha.
Jekk huwa fajl Huff attwali, li għaddej biex jkun in-numru ta 'hawn fuq, dan wieħed magic.
U allura se jkollhom firxa.
Allura għal kull simbolu, li minnhom hemm 256,
li għaddej biex lista dak l-frekwenza ta 'dawn is-simboli huma fil-fajl Huff.
U mbagħad finalment, aħna għandna checksum għall-frekwenzi,
li għandu jkun is-somma ta 'dawk il-frekwenzi.
Allura dak hu li l-Huffeader hu.
Imbagħad għandna xi funzjonijiet li jirritornaw il-ftit li jmiss fil-fajl Huff
kif ukoll jikteb daqsxejn għall-fajl Huff, u mbagħad din il-funzjoni hawn, hfclose,
li attwalment jarkivja l-fajl Huff.
Qabel, konna jittrattaw dritta biss fclose,
imma meta jkollok fajl Huff, minflok fclosing dan
dak li int fil-fatt se tagħmel hu hfclose u hfopen dan.
Dawk huma funzjonijiet speċifiċi għall-fajls Huff li aħna qed tmur biex tkun jittrattaw.
Imbagħad hawn naqraw fil-header u mbagħad jiktbu l-header.
>> Biss mill-qari tal-fajl h. Nistgħu tip ta tikseb sens ta 'dak fajl Huff jista' jkun,
liema karatteristiċi għandu, mingħajr ma attwalment għaddejjin fil-huffile.c,
li, jekk aħna adsa fi, se tkun daqsxejn aktar kumplessa.
Dan għandu l-fajl I / O hawn jittrattaw pointers.
Hawnhekk naraw li meta nagħmlu sejħa hfread, per eżempju, huwa għadu jittrattaw fread.
Aħna ma jwarrbu dawk il-funzjonijiet kollox, iżda aħna qed jibgħat dawk li għandhom jittieħdu kura ta '
ġewwa l-fajl Huff minflok tagħmel kollha ta 'dan nfusna.
Tista 'tħossok liberu li scan permezz ta' dan jekk int kurjuż
u mur u titqaxxar il-saff lura ftit.
>> Il-fajl li jmiss li aħna qed tmur biex tħares lejn huwa tree.h.
Qabel fil-Walkthrough pjastri għidna aħna nistennew node Huffman
u għamilna node Struct typedef.
Aħna nistennew li jkollhom simbolu, frekwenza, u mbagħad istilel node 2.
F'dan il-każ dak li aħna qed tagħmel huwa dan huwa essenzjalment l-istess
ħlief minflok node aħna qed tmur li jsejħu lilhom siġar.
Għandna funzjoni li meta inti sejħa tagħmel siġra dan jirritorna inti pointer siġra.
Back li speller, meta inti kienu qed jagħmlu node ġdid
inti qal node * kelma ġdida = malloc (sizeof) u affarijiet bħal dik.
Bażikament, mktree se jkunu jittrattaw dan għalik.
Bl-istess mod, meta inti tixtieq li tneħħi siġra,
b'tali mod li s essenzjalment tillibera l-siġra meta qed isir ma 'dan,
minflok espliċitament sejħa b'xejn fuq dan, int fil-fatt biss ser tuża l-funzjoni rmtree
fejn inti tgħaddi fil-pointer għal dak siġra u mbagħad tree.c se jieħdu ħsieb ta 'dak għalik.
>> Aħna nħarsu fis tree.c.
Aħna nistennew l-istess funzjonijiet, ħlief biex tara d-implimentazzjoni kif ukoll.
Kif aħna mistennija, meta inti sejħa mktree hija mallocs-daqs ta 'siġra fi pointer,
initializes kollha tal-valuri tal-valur NULL, hekk 0s jew NULLs,
u mbagħad jirritorna l-pointer għal dak siġra li inti stajt biss malloc'd lilek.
Hawnhekk meta inti sejħa tneħħi siġra l-ewwel jagħmel żgur li int mhux doppja ħelsien.
Hija tagħmel ċert li inti fil-fatt ikollhom siġra li inti tixtieq li tneħħi.
Hawnhekk għaliex siġra jinkludi wkoll it-tfal tiegħu,
dak li dan ma huwa recursively jitlob tneħħi siġra fuq il-node xellug tal-siġra
kif ukoll il-node dritt.
Qabel ma jillibera l-ġenitur, jeħtieġ li tilliberalizza t-tfal ukoll.
Parent hija wkoll interskambjabbli ma għerq.
Il-ġenitur qatt ewwel, hekk bħall-kbira-kbira-kbira-great-grandfather
jew siġra nanna, l-ewwel għandna biex ħielsa l-livelli l-ewwel.
Allura travers il-qiegħ, ħielsa dawk, u mbagħad jiġu lura up, free dawk, eċċ
Allura dak siġra.
>> Issa nħarsu lejn foresti.
Foresti huwa fejn inti post kollha ta 'siġar Huffman tiegħek.
Huwa qal li aħna qed tmur biex ikollhom xi ħaġa imsejħa plott
li fih pointer għal siġra kif ukoll pointer ma 'plot imsejjaħ jmiss.
Liema istruttura ma dan it-tip ta look like?
Huwa tip ta 'jgħid li hemmhekk.
Dritt hawn fuq.
A marbut lista.
Naraw li meta għandna plott huwa simili lista marbuta ta 'plottijiet.
A foresti hija definita bħala lista marbuta ta 'plottijiet,
u għalhekk l-istruttura tal-foresti hija li aħna qed biss se jkollhom pointer biex plot ewwel tagħna
u li plot għandha siġra fih jew jindika pjuttost il siġra
u mbagħad jindika l-plott li jmiss, hekk u ibqa 'sejjer hekk.
Biex tagħmel foresta nitolbu mkforest.
Imbagħad għandna xi funzjonijiet pretty utli hawn.
Aħna pick fejn inti tgħaddi fil-foresti u allura l-valur tar-ritorn hija * Tree,
pointer ma 'siġra.
Liema pick se tagħmel huwa se jmorru fil-foresti li int tipponta lejn
imbagħad neħħi siġra bl-inqas frekwenza minn dak tal-foresti
u mbagħad jagħtuk l-pointer għal dak siġra.
Ladarba inti sejħa pick, is-siġra ma tkunx teżisti fil-foresti aktar,
iżda l-valur tar-ritorn hija l-pointer għal dak siġra.
Imbagħad għandek pjanti.
Iżda inti tgħaddi fil-pointer ma 'siġra li għandu frekwenza mhux-0,
liema impjant se tagħmel huwa se tieħu l-foresti, jieħdu l-siġra, u pjanti li ġewwa siġra tal-foresta.
Hawnhekk għandna rmforest.
Simili biex jitneħħew siġra, li bażikament meħlusa kollha ta 'siġar tagħna għalina,
neħħi foresti se kollox ħielsa li tinsab f'dak l-foresti.
>> Jekk nagħtu ħarsa lejn forest.c, aħna ser nistennew li naraw mill-inqas 1 kmand rmtree fil hemm,
minħabba li memorja ħielsa fil-foresta jekk foresta għandha siġar fiha,
imbagħad eventwalment int ser ikollhom biex jitneħħew dawk is-siġar wisq.
Jekk nagħtu ħarsa lejn forest.c, għandna mkforest tagħna, li huwa kif aħna nistennew.
Aħna malloc affarijiet.
Aħna initialize-plott ewwel fil-foresta bħala NULL, għaliex dan huwa vojt biex jibdew,
allura naraw pick, li jirritorna l-siġra bil-piż aktar baxx, il-frekwenza baxxa,
u mbagħad gets rid ta 'dak node partikolari li jindika li l-siġra u l-1 li jmiss,
hekk li tieħu l barra mill-lista marbuta tal-foresta.
U allura hawnhekk għandna impjant, li tintroduċi siġra fil-lista marbuta.
X'inhu foresti ma huwa nicely jżommu magħżula għalina.
U mbagħad finalment, għandna rmforest u, kif mistenni, għandna rmtree imsejħa hemmhekk.
>> Ħarsa lejn il-kodiċi tad-distribuzzjoni s'issa huffile.c kien probabbilment bil-bosta l-aktar diffiċli li wieħed jifhem,
billi l-fajls l-oħra nfushom kienu pjuttost sempliċi biex isegwu.
Bl-għarfien tagħna ta 'pointers u listi marbuta u bħal dawn,
konna kapaċi jsegwu pretty ukoll.
Imma kollha għandna bżonn li verament tagħmel ċert li aħna jifhmu bis-sħiħ huwa l-. H fajls
għaliex inti jeħtieġ li tkun sejħa dawk il-funzjonijiet, li jittrattaw ma 'dawk il-valuri ta' ritorn,
sabiex tagħmel ċert li inti tifhem kompletament liema azzjoni tkun se ssir
kull meta inti sejħa waħda minn dawk il-funzjonijiet.
Imma fil-fatt fehim ġewwa ta 'dan huwa pjuttost mhux meħtieġ għaliex għandna dawn. Fajls h.
We have 2 aktar fajls jitħalla fil-kodiċi ta 'distribuzzjoni tagħna.
>> Ejja nħarsu lejn dump.
Dump mill-kumment tagħha hawn tieħu fajl Huffman-kompressata
u mbagħad jittraduċi u tarmi l-kontenut tagħha barra.
Hawnhekk naraw li l-sejħa hfopen.
Dan huwa tip ta 'mera ghal-fajl * input = fopen,
u allura inti jgħaddu fl-informazzjoni.
Huwa kważi identiċi minbarra minflok * fajl int tgħaddi fil-Huffile;
minflok fopen int tgħaddi fil hfopen.
Hawnhekk naqraw fl-intestatura 1, li huwa tip ta simili għal kif naqraw fil-header
għal fajl Bitmap.
Dak li aħna qed tagħmel hawn qed jiċċekkja biex tara jekk l-informazzjoni header
fih in-numru magic dritt li jindika li huwa ta 'fajl Huff attwali,
allura kollha ta 'dawn il-kontrolli biex tiżgura li l-fajl li aħna miftuħa huwa fajl huffed attwali jew le.
X'inhu dan ma huwa outputs il-frekwenzi kollha ta 'l-simboli li nistgħu naraw
fi terminal fis-tabella grafika.
Din il-parti se tkun utli.
Hija għandha ftit u jaqra ftit ftit fil-ftit varjabbli u mbagħad stampi dan jitwettaq.
Mela jekk jien kellhom sejħa dump fuq hth.bin, li hija r-riżultat ta huffing 'fajl
tuża s-soluzzjoni tal-persunal, nixtieq nikseb dan.
Huwa outputting kollha ta 'dawn il-karattri u mbagħad tqegħid l-frekwenza li fiha għandhom jidhru.
Jekk nagħtu ħarsa, ħafna minnhom huma 0s ħlief għal dan: H, li jidher darbtejn,
u mbagħad T, li tidher darba.
U allura hawnhekk għandna l-messaġġ attwali fil 0s u 1s.
Jekk inħarsu lejn hth.txt, li huwa preżumibbilment l-messaġġ oriġinali li kien huffed,
aħna nistennew li naraw xi Hs u Ts fil hemmhekk.
Speċifikament, aħna nistennew li naraw biss 1 T u 2 Hs.
Hawnhekk aħna fil hth.txt. Hija fil-fatt għandha HTH.
Inklużi fil hemm, għalkemm aħna ma tistax tara dan, huwa karattru newline.
Il hth.bin fajl Huff hija wkoll kodifikazzjoni-karattru newline ukoll.
Hawnhekk għaliex aħna nafu li l-ordni hija HTH u mbagħad newline,
nistgħu naraw li probabbilment l-H huwa rappreżentat minn biss 1 wieħed
u allura l-T hija probabbilment 01 u allura l-H jmiss huwa 1 kif ukoll
u allura għandna newline indikat minn żewġ 0s.
Kessaħ.
>> U allura finalment, għaliex aħna qed jittrattaw ma multipli. Cu. Fajls h,
aħna qed tmur biex ikollhom argument kumpless pretty mal-kompilatur,
u hekk hawn għandna Makefile li tagħmel dump għalik.
Imma fil-fatt, ikollok tmur dwar teħid fajl puff.c tiegħek stess.
Il Makefile attwalment ma jittrattax tagħmel puff.c għalik.
Aħna qed tħalli li sa inti biex jeditjaw il-Makefile.
Meta inti tidħol kmand bħal tagħmel kollox, per eżempju, hija ser tagħmel kull wieħed minnhom għalik.
Ħossok liberu li tħares lejn l-eżempji ta Makefile mill-pset passat
kif ukoll tmur off ta 'dan wieħed biex tara kif inti tista' tkun kapaċi tagħmel fajl Puff tiegħek
mill-editjar dan Makefile.
Li dwar dan għal kodiċi tad-distribuzzjoni tagħna.
>> Ladarba aħna ħadthom gotten permezz ta 'dan, allura hawnhekk biss ieħor tifkira
ta 'kif aħna qed tmur biex tkun jittrattaw ma' punti strateġiċi Huffman.
Aħna mhux se tkun titlob minnhom lymph aktar; aħna qed tmur biex tkun titlob minnhom siġar
fejn aħna qed tmur biex tkun tirrappreżenta simbolu tagħhom ma 'char,
frekwenza tagħhom, in-numru ta 'okkorrenzi, ma integer.
Aħna qed jużaw dan għaliex dan huwa aktar preċiż minn float.
U allura għandna ieħor pointer lill-wild xellug kif ukoll il-wild dritt.
A foresti, kif rajna, hija biss lista linked ta 'siġar.
Fl-aħħarnett, meta aħna qed tibni fajl Huff tagħna,
irridu foresti tagħna li fihom biss 1 siġra -
1 siġar, 1 għerq mat-tfal multipli.
Preċedenti dwar meta konna biss tagħmel siġar Huffman tagħna,
bdejna mill-tqegħid kollha ta 'l-għoqiedi fuq l-iskrin tagħna
u qal aħna qed tmur biex ikollhom dawn in-nodi,
eventwalment dawn qed tmur biex tkun il-weraq, u dan huwa simbolu tagħhom, dan huwa l-frekwenza tagħhom.
Fil-foresti tagħna jekk aħna biss għandhom 3 ittri, li l-foresti ta 'siġar 3.
U allura kif aħna jmorru fuq, meta aħna miżjud l-ġenitur l-ewwel,
għamilna foresti ta 'siġar 2.
Aħna imneħħija 2 ta 'dawk it-tfal mill-foresti tagħna u mbagħad jinbidel ma node ġenitur
li kellhom dawn l-lymph 2 huma t-tfal.
U mbagħad finalment, l-aħħar pass tagħna ma jagħmlu eżempju tagħna ma 'l-As, Bs, u Cs
jkun li jagħmel il-ġenitur finali,
u hekk allura li ġġib magħha għadd totali tagħna ta 'siġar fil-foresti għal 1.
Ma kulħadd tara kif tista 'tibda bl-siġar multipli fil-foresti tiegħek
u tispiċċa bil 1? Okay. Kessaħ.
>> What do we bżonn tagħmel biex Puff?
Dak li għandna bżonn tagħmel hu li jiżgura li, bħal dejjem, dawn jagħtu lilna t-tip korrett ta 'input
sabiex inkunu nistgħu effettivament imexxu l-programm.
F'dan il-każ dawn qed tmur biex tkun tagħti us wara l-ewwel kmand tal-linja tagħhom argument
2 aktar: il-fajl li aħna rridu li decompress u l-produzzjoni tal-fajl decompressed.
Imma ladarba irridu niżguraw li dawn jgħaddu lilna fil-ammont korrett ta 'valuri,
irridu niżguraw li l-input il-fajl huwa Huff jew le.
U allura ladarba aħna garanzija li din hija fajl Huff, allura rridu nibnu siġra tagħna,
jibnu l-siġra tali li jaqbel mal-siġra li l-persuna li bagħtet l-messaġġ mibnija.
Imbagħad wara nibnu l-siġra, allura nistgħu jittrattaw l-0s u 1s li għadda fil-
isegwu dawk max siġra tagħna għaliex dan huwa identiku,
u mbagħad jiktbu dak il-messaġġ out, tinterpreta l-bits lura fis Chars.
U mbagħad fl-aħħar għaliex aħna qed jittrattaw ma 'pointers hawn,
irridu niżguraw li aħna ma jkollhomx xi tnixxijiet memorja
u li aħna kollox ħielsa.
>> L-iżgurar użu xieraq huwa hat qodma għalina minn issa.
Nieħdu fi input, li se tkun l-isem tal-fajl lill puff,
u allura aħna jispeċifikaw l-output,
hekk l-isem tal-fajl għall-produzzjoni minfuħ, li se jkun il-fajl test.
Dak użu. U issa aħna tixtieq li tiżgura li l-input huwa huffed jew le.
Thinking lura, kien hemm xejn fil-kodiċi ta 'distribuzzjoni li tista' tgħinna
bil-fehim jekk fajl huffed jew le?
Kien hemm informazzjoni fil huffile.c dwar il-Huffeader.
Aħna nafu li kull fajl Huff għandha Huffeader assoċjati magħha ma 'numru magic
kif ukoll firxa tal-frekwenzi għal kull simbolu
kif ukoll checksum.
Aħna nafu li, iżda aħna wkoll ħa Peek fuq dump.c,
fejn kien qari fis-fajl Huff.
U hekk li tagħmel dan, hija kellha tivverifika jekk verament kien huffed jew le.
Allura forsi nistgħu jużaw dump.c bħala struttura għall puff.c. tagħna
Lura għall pset 4 meta kellna l-copy.c fajl li kkupjati fil triples RGB
u aħna interpretat li għal whodunit u Resize,
bl-istess mod, dak li inti tista 'tagħmel huwa biss run-kmand bħal cp dump.c puff.c
u l-użu xi wħud mill-kodiċi hemmhekk.
Madankollu, mhuwiex ser ikunu kif sempliċi ta 'proċess
biex jittraduċi dump.c tiegħek fis puff.c,
iżda mill-inqas inti tagħti x'imkien biex tibda
dwar kif jiġi żgurat li l-input huwa attwalment huffed jew le
kif ukoll affarijiet oħra ftit.
Aħna żgurat l-użu xieraq u l żgurat li l-input huwa huffed.
Kull darba li aħna ghamilt li għamilna verifika tagħna żball xierqa,
hekk jirritornaw u jaqtagħhom l-funzjoni jekk xi falliment jiġri, jekk ikun hemm problema.
>> Issa dak li rridu nagħmlu huwa tinbena l-siġra attwali.
Jekk nagħtu ħarsa fil-Foresti, hemm 2 funzjonijiet prinċipali
li aħna qed tmur jridu jsiru familjari ħafna ma.
Hemm l-impjant funzjoni Boolean li l-pjanti siġra frekwenza mhux-0 ġewwa foresti tagħna.
U hekk hemm inti tgħaddi fil-pointer lejn foresti u werrej ma 'siġra.
Mistoqsija Quick: Kemm foresti ser ikollok meta int bini ta 'siġra Huffman?
Foresti tagħna huwa bħal kanvas tagħna, id-dritt?
Allura aħna qed biss ser ikollha 1 foresti, imma aħna qed tmur biex ikollhom siġar multipli.
Allura qabel ma inti sejħa tal-pjanti, int preżumibbilment tmur jixtiequ jagħmlu foresti tiegħek.
Hemm kmand għal dak jekk inti tħares lejn forest.h dwar kif inti tista 'tagħmel foresti.
Tista 'pjanti siġra. Nafu kif għandek tagħmel dan.
U allura inti tista 'wkoll pick siġra mill-foresti,
tneħħija siġra bil-piż aktar baxx u jagħtik l-pointer għal dan.
Thinking lura għal meta konna qed jagħmlu l-eżempji nfusna,
meta konna tfassil it out, aħna sempliċiment biss miżjud il-links.
Imma hawn minflok sempliċiment żżid il-links,
x'taħseb dwar dan aktar kif int tneħħi 2 ta 'dawk lymph u mbagħad jbiddlu ieħor.
Li jesprimu li f'termini ta 'picking u żrigħ,
int picking 2 siġar u mbagħad tħawwil siġra oħra
li għandha dawk is-siġar 2 li inti qabad bħala tfal.
Biex tibni siġra Huffman, inti tista 'taqra fil-simboli u l-frekwenzi sabiex
minħabba li l-Huffeader jagħtik li lilek,
jagħtik firxa tal-frekwenzi.
Allura inti tista 'tmur quddiem u biss jinjora xi ħaġa ma' 0 fiha
għaliex aħna ma rridux 256 weraq fl-aħħar ta 'dan.
Aħna biss trid li l-għadd ta 'weraq li huma karattri
li huma attwalment użati fil-fajl.
Tista 'taqra f'dawk simboli, u kull wieħed minn dawn is-simboli li għandhom mhux 0 frekwenzi,
dawk ser ikunu siġar.
X'tista 'tagħmel huwa kull darba li inti taqra fil simbolu frekwenza mhux-0,
inti tista 'pjanti li siġra fil-foresti.
Ladarba inti pjanti l-siġar fil-foresti, tista 'tingħaqad dawk is-siġar kif aħwa,
hekk tmur lura għall tħawwil u picking fejn inti pick 2 u mbagħad pjanti 1,
fejn dik 1 li inti pjanti huwa l-ġenitur tat-tfal 2 li inti qabad.
Mela allura riżultat aħħari tiegħek se tkun siġra waħda fil-foresti tiegħek.
Li kif inti tibni siġra tiegħek.
>> Hemm diversi affarijiet li tista 'tmur ħażin hawn
għaliex aħna qed jittrattaw ma jagħmlu siġar ġodda u jittrattaw pointers u affarijiet bħal dik.
Qabel meta konna jittrattaw pointers,
kull meta aħna malloc'd ridna biex tiżgura li ma jerġax lura lilna valur pointer NULL.
Allura fil diversi passi fi ħdan dan il-proċess hemm ser ikunu diversi kawżi
fejn programm tiegħek jista 'jfalli.
Dak li trid tagħmel huwa li inti tixtieq li tagħmel ċert li inti tagħmel handling dawn l-iżbalji,
u fil-spec jgħid li jħaddmuhom gracefully,
hekk tixtieq jistampa messaġġ lill-utent tgħidilhom għaliex il-programm għandu nieqaf
u mbagħad minnufih nieqaf dan.
Biex tagħmel dan tqandil żball, ftakar li inti tixtieq li jiċċekkjaha
kull wieħed ħin li jista 'jkun hemm falliment.
Kull darba waħda li int tagħmel pointer ġdida
inti tixtieq li tagħmel ċert li dan huwa ta 'suċċess.
Qabel dak li aħna użati biex tagħmel hu li tagħmel pointer ġdid u malloc dan,
u allura aħna se tiċċekkja jekk dik pointer huwa NULL.
Allura hemm ser jkun hemm xi każijiet fejn inti biss tista 'tagħmel dan,
imma xi kultant int attwalment sejħa funzjoni
u fi ħdan dik il-funzjoni, li l-waħda li qed jagħmel l-mallocing.
F'dak il-każ, jekk inħarsu lura lejn uħud mill-funzjonijiet fi ħdan il-kodiċi,
xi wħud minnhom huma funzjonijiet Boolean.
Fil-każ astratt jekk ikollna funzjoni Boolean imsejjaħ foo,
bażikament, nistgħu nassumu li minbarra li jagħmlu kwalunkwe foo ma,
peress li l-funzjoni Boolean, dan jirritorna vera jew falza -
minnu jekk tirnexxi, falza jekk le.
Allura aħna tixtieq li jivverifika jekk il-valur tar-ritorn ta 'foo hija vera jew falza.
Jekk huwa falz, li jfisser li aħna qed tmur jridu li jistampaw xi tip ta 'messaġġ
u mbagħad nieqaf-programm.
Dak li rridu nagħmlu huwa li jiċċekkja l-valur tar-ritorn ta 'foo.
Jekk foo prospetti falz, allura nafu li aħna jiltaqgħu magħhom xi tip ta 'żball
u għandna bżonn li nieqaf-programm tagħna.
A mod biex isir dan huwa minn kundizzjoni fejn il-funzjoni innifisha hija kundizzjoni tiegħek.
Say foo jieħu fil x.
Jista 'jkollna bħala kundizzjoni jekk (foo (x)).
Bażikament, li jfisser li jekk fl-aħħar ta 'eżekuzzjoni foo huwa u jirritorna veru,
allura nistgħu nagħmlu dan minħabba l-funzjoni għandha tevalwa foo
sabiex tevalwa l-kundizzjoni kollha.
Allura mbagħad thats kif inti tista 'tagħmel xi ħaġa jekk il-funzjoni lura vera u huwa ta' suċċess.
Imma meta int iċċekkjar żball, inti biss tixtieq li nieqaf jekk il-funzjoni tiegħek jirritorna falza.
What inti tista 'tagħmel huwa biss żid == falz jew sempliċiment żid bang quddiem ta' dan
u allura inti għandek jekk (! foo).
Fi ħdan dak il-korp ta 'din il-kundizzjoni inti għandek kollha ta' l-immaniġġjar żball,
hekk simili, "Ma kellekx joħolqu din is-siġra" u mbagħad jirritornaw 1 jew xi ħaġa bħal dik.
Dak li ma, għalkemm, hi li, anki jekk foo lura foloz -
Say foo prospetti vera.
Imbagħad inti ma għandekx sejħa foo mill-ġdid. Li l-kunċett żbaljat komuni.
Minħabba li kien fil-kundizzjoni tiegħek, huwa diġà evalwati,
sabiex inti diġà għandhom ir-riżultat jekk inti qed tuża tagħmel siġra jew xi ħaġa bħal dik
jew impjant jew pick jew xi ħaġa.
Hija diġà għandha dik valur. Huwa diġà eżegwit.
Allura huwa utli li tintuża l-funzjonijiet Boolean bħala l-kondizzjoni
għaliex jekk jew le inti fil-fatt tesegwixxi l-korp tal-linja,
tesegwixxi l-funzjoni xorta waħda.
>> 2 tagħna għall-aħħar pass huwa miktub l-messaġġ għall-fajl.
Ladarba aħna nibnu l-siġra Huffman, allura bil-miktub il-messaġġ għall-fajl huwa pjuttost sempliċi.
Huwa pjuttost sempliċi issa biex kemm issegwi l-0s u 1s.
U hekk permezz tal-konvenzjoni aħna nafu li fil-siġra Huffman l 0s jindikaw xellug
u l-1s jindikaw id-dritt.
Mela allura jekk inti jinqara ftit ftit, kull darba li inti tikseb 0
inti ser issegwi l-fergħa tax-xellug, u mbagħad kull darba li inti taqra fil-1
int ser isegwu l-fergħa dritt.
U allura int ser tkompli sakemm inti hit werqa
minħabba li l-weraq ser ikunu fl-aħħar tal-fergħat.
Kif nistgħu tgħid jekk konna hit werqa jew le?
Aħna qal li qabel.
[Student] Jekk il-pointers huma NULL. >> Yeah.
Aħna jista 'jgħidlek jekk konna hit werqa jekk il-pointers għall-siġar kemm il-xellug u lemin huma NULL.
Perfect.
Aħna nafu li aħna rridu li jinqara ftit ftit fil-fajl Huff tagħna.
Kif rajna qabel fl dump.c, x'għamlu huwa li jinqara ftit ftit fil-fajl Huff
u biss stampata x'inhuma dawn bits kienu.
Aħna mhux se tkun qed twettaq dan. Aħna ser tkun tagħmel xi ħaġa li l-daqsxejn aktar kumplessa.
Imma dak li nistgħu nagħmlu huwa li nistgħu nieħdu li ftit tal-kodiċi li jaqra fil lill-bit.
Hawnhekk għandna l-daqsxejn eqreb numru sħiħ li tirrappreżenta l-ftit attwali li aħna qed dwar.
Dan jieħu ħsieb ta 'iterazzjoni kollha tal-bits fil-fajl sakemm inti hit-aħħar tal-fajl.
Ibbażat fuq dan, allura int ser jridu li jkollhom xi tip ta 'iterator
travers siġra tiegħek.
U mbagħad ibbażata fuq jekk il-bit hija 0 jew 1,
int tmur jridu jew jiċċaqalqu li iterator lejn ix-xellug jew jġorrhom lejn il-lemin
it-triq kollha sakemm inti hit weraq, hekk it-triq kollha sa dak node li int fuq
ma punt għal punti strateġiċi f'kull aktar.
Għaliex nistgħu nagħmlu dan bil-fajl Huffman iżda mhux il-kodiċi Morse?
Minħabba fil-kodiċi Morse hemm daqsxejn ta 'ambigwità.
Aħna jista 'jkun simili, oh stenna, konna hit ittra tul it-triq, hekk forsi din hija ittra tagħna,
billi jekk aħna nkomplu biss ftit itwal, allura aħna laħqu ittra oħra.
Iżda li mhux se jiġri fil-kodifikazzjoni Huffman,
sabiex inkunu tista 'mistrieħ assigurat li l-uniku mod li aħna qed tmur biex hit karattru
huwa jekk it-tfal tax-xellug u lemin li l-glandoli huma NULL.
>> Fl-aħħarnett, irridu biex ħielsa kollha ta 'memorja tagħna.
Aħna rridu li kemm mill-qrib il-fajl Huff li aħna kont qed jittrattaw ma '
kif ukoll neħħi kollha tal-siġar fil-foresti tagħna.
Ibbażat fuq l-implimentazzjoni tiegħek, int probabilment tmur jridu sejħa jitneħħew foresti
minflok attwalment għaddejjin kollha tas-siġar yourself.
Imma jekk inti ssir xi siġar temporanji, tixtieq tkun taf biex ħielsa li.
Inti taf kodiċi tiegħek aħjar, sabiex inti tkun taf fejn int allokazzjoni memorja.
U hekk jekk inti tmur fi, tibda billi anke Kontroll F'ing għall malloc,
jaraw kull meta inti malloc u jagħmlu ċert li inti liberu kollha ta 'dak
iżda mbagħad biss jmorru permezz ta 'kodiċi tiegħek,
ftehim fejn inti jista 'jkollok allokati memorja.
Normalment inti tista 'biss jgħidu, "Fl-aħħar ta' fajl jien biss se tneħħi foresti fuq foresti tiegħi,"
hekk bażikament ċar li l-memorja, b'xejn li,
"U mbagħad jien ukoll ser tagħlaq il-fajl u mbagħad programm tiegħi se nieqaf."
Iżda huwa li l-unika darba li l-programm tiegħek quits?
Le, għaliex kultant jista 'jkun hemm żball li ġara.
Forsi aħna ma setgħetx tiftaħ fajl jew aħna ma setgħux jagħmlu siġra oħra
jew xi tip ta 'żball ġara fil-proċess ta' allokazzjoni memorja u għalhekk lura NULL.
Żball ġara u mbagħad aħna lura u nieqaf.
Mela allura inti tixtieq li tagħmel ċert li kull ħin possibbli dak il-programm tiegħek jista nieqaf,
inti tixtieq biex ħielsa kollha ta 'memorja tiegħek hemmhekk.
Huwa mhux biss se tkun fl-aħħar nett tal-funzjoni prinċipali li inti nieqaf kodiċi tiegħek.
Inti trid tfittex lura għal kull każ li l-kodiċi tiegħek potenzjalment jistgħu jirritornaw qabel iż-żmien
u mbagħad ħielsa tkun xi tkun memorja jagħmel sens.
Tgħid li inti kien talab tagħmel foresta u li lura falza.
Imbagħad inti probabilment mhux se jkollhom bżonn li jitneħħew foresti tiegħek
għaliex inti ma għandekx foresti s'issa.
Iżda f'kull punt fil-kodiċi fejn inti tista 'tirritorna qabel iż-żmien
inti tixtieq li tagħmel ċert li inti liberu kwalunkwe memorja possibbli.
>> Allura meta aħna qed jittrattaw ma 'ħelsien memorja u li jkollhom tnixxijiet potenzjali,
irridu mhux biss jużaw il-ġudizzju tagħna u l-loġika tagħna
iżda wkoll jużaw Valgrind biex jiddeterminaw jekk konna meħlusa kollha tal-memorja tagħna b'mod korrett jew le.
Inti tista 'jew taħdem Valgrind fuq Puff u imbagħad inti għandek ukoll tgħaddih
in-numru dritt ta 'kmand tal-linja argumenti għall Valgrind.
Inti tista 'taħdem, iżda l-output huwa daqsxejn cryptic.
Imxejna gotten daqsxejn użati biex dan ma speller, iżda għad għandna bżonn l-għajnuna ftit aktar,
hekk allura running bil-bnadar ftit aktar bħall-tnixxija check = sħiħa,
li probabbilment se tagħtina xi output aktar utli dwar Valgrind.
>> Imbagħad ieħor ponta utli meta int debugging huwa l-kmand diff.
Tista 'aċċess implimentazzjoni tal-persunal ta' Huff, run li fuq fajl test,
u mbagħad output li fajl binarju, fajl Huff binarju, li jkunu speċifiċi.
Imbagħad jekk inti tmexxi puff tiegħek dwar dan il-fajl binarju,
allura idealment, fajl tiegħek test outputted se tkun identika
għal dak oriġinali li inti għadda pulzieri
Hawnhekk jien jużaw hth.txt bħala l-eżempju, u li l-waħda tkellem dwar fl spec tiegħek.
Li litteralment biss HTH u mbagħad newline.
Iżda żgur li tħossok liberu u inti definittivament mħeġġa biex jużaw eżempji itwal
għall-fajl test tiegħek.
>> Tista 'anki tieħu xi sparatura fil forsi kompressjoni u mbagħad decompressing
xi wħud mill-fajls li inti użati fil speller bħall Gwerra u l-Paċi
jew Jane Austen jew xi ħaġa bħal dik - li jkun tip ta 'kessaħ - jew Poteri Austin,
tip ta 'tittratta fajls akbar għaliex aħna mhux se tinżel għal dan
jekk aħna użata l-għodda li jmiss hawn, Ls-l.
Aħna użati biex ls, li bażikament jelenka l-kontenuti fl-direttorju attwali tagħna.
Tgħaddi fil-bandiera l-fatt juri d-daqs ta 'dawk il-fajls.
Jekk inti tmur permezz tal-spec pset, attwalment mixjiet inti permezz tal-ħolqien tal-fajl binarju,
ta huffing, u tara li għall-fajls żgħar ħafna
l-ispiża ispazju ta 'kompressjoni dan u tittraduċi kollha ta' dik l-informazzjoni
ta 'l-frekwenzi u affarijiet bħal dik jegħleb l-benefiċċju attwali
tal kompressjoni-fajl fl-ewwel post.
Imma jekk inti tmexxi fuq xi fajls test itwal, allura inti tista 'tara li inti tibda tikseb xi benefiċċju
fil jikkompressaw dawn il-fajls.
>> U mbagħad finalment, aħna għandna GDB qodma tagħna PAL, li huwa definittivament se jidħol fil handy wisq.
>> Do we xi mistoqsijiet dwar is-siġar Huff jew il-proċess ta 'teħid forsi l-siġar
jew xi mistoqsijiet oħra dwar Puff Huff'n?
Okay. I ser jibqgħu madwar għal bit.
>> Grazzi, kulħadd. Dan kien Walkthrough 6. U Xorti tajba.
>> [CS50.TV]