[Powered by Google Translate] [Walkthrough - Tatizo Set 6]
[Zamyla Chan - Chuo Kikuu cha Harvard]
[Hii ni CS50. - CS50.TV]
>> Hello, kila mtu, na kuwakaribisha kwa walkthrough 6: Huff'n Puff.
Katika Puff Huff'n tunafanya nini ni kwenda kushughulika na faili Huffman USITUMIE
na kisha mitweto nyuma juu, hivyo decompressing yake,
ili tuweze kutafsiri kutoka sekunde 0 na 1s kwamba mtumiaji zituma sisi
na kubadili nyuma katika maandishi ya awali.
Pset 6 ni kwenda kuwa pretty cool kwa sababu wewe utaenda kuona baadhi ya zana
kwamba kutumika katika pset 4 na 5 pset na aina ya kuchanganya yao ndani ya dhana 1 pretty nadhifu
wakati wewe kuja kufikiria kuhusu hilo.
>> Pia, arguably, pset 4 na 5 walikuwa wengi changamoto psets kwamba alikuwa na kutoa.
Basi, tangu sasa, sisi tuna hii pset 1 zaidi katika C,
na kisha baada ya kuwa tuko juu ya programu ya mtandao.
Hivyo kumpongeza wenyewe kwa ajili ya kupata zaidi ya hump toughest katika CS50.
>> Kuhamia kwenye kwa Puff Huff'n, toolbox yetu kwa pset hii itakuwa ni ya Huffman miti,
hivyo si tu kuelewa jinsi miti binary kazi lakini pia hasa miti Huffman,
jinsi re yalijengwa.
Na kisha tunakwenda kuwa na mengi ya maadili ya usambazaji katika pset hii,
na tutaweza kuja kuona kwamba kweli baadhi ya maadili ya
tupate kuwa na uwezo wa kuelewa kikamilifu bado,
na hivyo wale itakuwa c. files, lakini basi. yao kuandamana h files
atatupa kutosha kuelewa kwamba tunahitaji ili tujue jinsi wale utendaji kazi
au angalau kile tunachopaswa kufanya - pembejeo zao na matokeo -
hata kama hatujui nini kinatokea katika sanduku nyeusi
au hawajui nini kinatokea katika sanduku nyeusi ndani.
Na kisha hatimaye, kama kawaida, sisi ni kushughulika na miundo mpya data,
aina maalum ya nodes kwamba kumweka kwa mambo fulani,
na hivyo hapa kuwa kalamu na karatasi si tu kwa ajili ya mchakato wa kubuni
na wakati wewe ni kujaribu kufikiri ni jinsi gani pset yako lazima kazi
lakini pia wakati wa debugging.
Unaweza kuwa GDB sambamba kalamu yako na karatasi wakati wewe kuchukua chini nini maadili ni,
ambapo mishale yako ni akizungumzia, na mambo kama hayo.
>> Kwanza hebu angalia miti Huffman.
Huffman miti ni binary miti, kwa maana kwamba kila node tu ana watoto 2.
Katika miti Huffman tabia ni kwamba maadili ya mara kwa mara
huwakilishwa na bits fewest.
Tuliona katika mifano hotuba ya Morse code, ambayo aina ya kuimarishwa baadhi barua.
Kama wewe ni kujaribu kutafsiri A au E, kwa mfano,
wewe ni kutafsiri kwamba mara nyingi, hivyo badala ya kuwa na matumizi ya seti kamili ya bits
zilizotengwa kwa ajili ya aina ya kwamba kwa kawaida data, wewe compress ni chini ya wachache,
na kisha barua wale kuwakilishwa chini mara nyingi ni kuwakilishwa na bits tena
kwa sababu unaweza kumudu kwamba wakati wewe kupima nje frekvenser kwamba wale barua kuonekana.
Sisi kuwa na wazo sawa hapa katika miti Huffman
ambapo sisi ni maamuzi ya mnyororo, aina ya njia ya kupata baadhi ya wahusika.
Na kisha wahusika ambao wana frequency wengi
itakuwa ni ya kuwakilishwa na bits fewest.
>> njia ambayo wewe kujenga mti Huffman
ni kwa kuweka yote ya wahusika kuwa itaonekana katika maandishi
na kuhesabu frequency wao, jinsi mara nyingi wao kuonekana.
Hii inaweza ama kuwa kuhesabu ya mara ngapi wale barua itaonekana
au labda asilimia ya nje ya wahusika wote ngapi kila mmoja inaonekana.
Na hivyo nini kufanya ni mara moja una yote ya nje kwamba mapped,
basi ukiangalia kwa frekvenser 2 chini na kisha kujiunga nao kama ndugu
ambapo kisha nodi mzazi ana frequency ambayo ni jumla ya watoto wake 2.
Na kisha kwa kusema kwamba mkataba nodi wa kushoto,
wewe kufuata kwamba kwa kufuata tawi 0,
na kisha nodi rightmost ni tawi 1.
Kama tulivyoona katika Morse code, gotcha moja ilikuwa kwamba kama alikuwa tu beep beep na
ilikuwa na utata.
Ni inaweza ama kuwa 1 barua au inaweza kuwa mlolongo wa barua 2.
Na hivyo kile Huffman miti gani ni kwa sababu kwa asili ya wahusika
au mwisho wetu halisi wahusika kuwa nodes mwisho juu ya tawi -
sisi rejea wale kama majani - kwa mujibu wa kwamba kuna hawezi kuwa yeyote ambiguity
katika suala la barua ambayo wewe ni kujaribu encode na mfululizo wa bits
kwa sababu hakuna mahali popote pamoja bits kwamba kuwakilisha 1 barua
itakuwa kukutana barua nyingine kwa ujumla, na hakutakuwa na fujo yoyote pale.
Lakini tutaweza kwenda katika mifano kwamba wewe guys unaweza kweli kuona kwamba
badala ya sisi tu nawaambia kwamba kwamba ni kweli.
>> Hebu tuangalie mfano rahisi ya mti Huffman.
Nina string hapa kwamba ni 12 wahusika mrefu.
Nina 4 Kama, 6 Bs, na 2 Cs.
Hatua yangu ya kwanza itakuwa kuhesabu.
Je, ni mara nyingi inaonekana? Inaonekana mara 4 katika kamba.
B inaonekana mara 6, na C inaonekana mara 2.
Kikawaida, mimi naenda kusema mimi nina kutumia B mara nyingi,
hivyo nataka kuwakilisha B na idadi fewest ya bits, idadi fewest ya sekunde 0 na 1s.
Na kisha Mimi pia kwenda kutarajia C kuhitaji kiasi zaidi ya sekunde 0 na 1s pia.
Kwanza nini mimi hapa ni mimi kuwekwa yao katika wakipanda ili katika suala la mzunguko.
Tunaona kuwa C na A, wale ni wetu 2 chini frekvenser.
Sisi kujenga nodi mzazi, na kwamba nodi mzazi hana barua yanayohusiana na hayo,
lakini ni gani frequency, ambayo ni jumla.
Jumla inakuwa 2 + 4, ambayo ni 6.
Kisha sisi kufuata tawi kushoto.
Kama tulikuwa kwamba nodi 6, basi sisi kufuata 0 kupata C
na kisha 1 kupata A.
Hivyo basi, tuna nodes 2.
Tuna thamani 6 na kisha sisi pia kuwa na mwingine nodi thamani 6.
Na hivyo wale 2 si tu 2 chini lakini pia tu 2 waliobaki,
hivyo sisi kujiunga wale na mzazi mwingine, kwa kuwa jumla 12.
Hivyo hapa tuna wetu Huffman mti
ambapo kupata B, kwamba ingekuwa tu kuwa kidogo 1
na kisha kupata tunataka kuwa 01 na kisha C kuwa 00.
Hivyo hapa tunaona kwamba kimsingi sisi ni anayewakilisha chars hizi na ama bits 1 au 2
ambapo B, kama ilivyotabiriwa, ana angalau.
Na kisha sisi alikuwa anatarajiwa C kuwa wengi, lakini kwa vile ni ndogo vile Huffman mti,
kisha pia kuwakilishwa na bits 2 kinyume na mahali fulani katikati.
>> Tu kwenda juu ya mfano mwingine rahisi ya mti Huffman,
kusema kuwa string "Hello."
Unachofanya ni kwanza wewe kusema mara ngapi haina H itaonekana katika hili?
H inaonekana mara moja na kisha e inaonekana mara moja na kisha tuna l kuonekana mara mbili
na o kuonekana mara moja.
Na hivyo basi tunatarajia ambayo barua kuwakilishwa na idadi ya angalau bits?
[Mwanafunzi] l. >> L. Yeah. l ni haki.
Tunatarajia l kuwakilishwa na idadi ya angalau bits
kwa sababu l hutumika zaidi katika string "Hello."
Nini mimi kwenda kufanya sasa ni kuteka nodi hiyo.
Nina 1, ambayo ni H, na kisha mwingine 1, ambayo ni e, na kisha 1, ambayo ni o -
hivi sasa mimi nina kuweka yao katika utaratibu - na kisha 2, ambayo ni l.
Kisha mimi kusema kwamba mimi kujenga njia mti Huffman ni kupata nodes 2 na frekvenser angalau
na kuwafanya ndugu kwa kujenga nodi mzazi.
Hapa tuna 3 nodes na frequency chini. Wao ni wote 1.
Hivyo hapa sisi kuchagua moja tunakwenda zilizounganishwa kwanza.
Hebu sema mimi kuchagua H na e.
Jumla ya 1 + 1 ni 2, lakini nodi hii haina barua yanayohusiana na hayo.
Ni tu ana thamani.
Sasa tunaangalia ijayo frekvenser 2 chini.
Hiyo ni 2 na 1. Hiyo inaweza kuwa ama ya wale 2, lakini mimi nina kwenda kuchagua hii moja.
Jumla ni 3.
Na kisha hatimaye, mimi tu 2 wa kushoto, ili basi inakuwa 5.
Ndipo hapa, kama ilivyotarajiwa, ikiwa mimi kujaza encoding kwa kuwa,
1s ni daima tawi haki na sekunde 0 ni moja wa kushoto.
Basi tuna l kuwakilishwa na kidogo tu 1 na kisha o na 2
na kisha e na 2 na kisha H iko chini kwa vipande 3.
Hivyo unaweza kupeleka ujumbe huu "Hello" badala ya kweli kwa kutumia herufi
na tu sekunde 0 na 1s.
Hata hivyo, kumbuka kwamba katika matukio kadhaa tulikuwa mahusiano na frequency yetu.
Tunaweza aidha alijiunga na H o kwanza labda.
Au na baadaye wakati tulikuwa l kuwakilishwa na 2
kama vile alijiunga moja kuwakilishwa na 2, sisi inaweza kuwa wanaohusishwa aidha moja.
>> Na hivyo wakati wewe kutuma sekunde 0 na 1s, kwamba kwa kweli haina dhamana ya
kuwa mpokeaji anaweza kikamilifu kusoma ujumbe wako wa kulia mbali bat
kwa sababu wao wanaweza kujua ambayo uamuzi uliofanya.
Hivyo wakati sisi ni kushughulika na compression Huffman,
namna fulani tuna kuwaambia mpokeaji wa ujumbe wetu jinsi tuliamua -
Wanahitaji kujua aina fulani ya habari ya ziada
kwa kuongeza katika ujumbe Komprimerade.
Wanahitaji kuelewa nini mti kweli inaonekana kama,
jinsi sisi kweli alifanya maamuzi hayo.
>> Hapa tulikuwa tu kufanya mifano msingi kuhesabu halisi,
lakini wakati mwingine unaweza pia kuwa mti Huffman
msingi frequency ambayo barua kuonekana, na ni exact mchakato.
Hapa nina akielezea ni katika suala la asilimia au sehemu,
na hivyo hapa exact kitu.
Mimi sioni 2 chini, jumla yao, 2 ijayo chini, jumla yao,
mpaka nina mti kamili.
Hata ingawa tunaweza kufanya hivyo aidha njia, wakati sisi ni kushughulika na asilimia,
hiyo ina maana sisi ni kugawa vitu na kushughulika na decimals au tuseme ikifungwa
kama sisi ni kufikiri kuhusu miundo ya data ya kichwa.
Ni nini tunachojua kuhusu ikifungwa?
Nini tatizo la kawaida wakati sisi ni kushughulika na ikifungwa?
[Mwanafunzi] imprecise hesabu. >> Yeah. Kutokuwa sahihi.
Kwa sababu ya kutokuwa sahihi floating uhakika, kwa pset hii ili tuweze kuhakikisha
kwamba hatuwezi kupoteza maadili yoyote, basi sisi ni kweli kwenda kushughulika na kuhesabu.
Hivyo kama ungekuwa kufikiria nodi Huffman, kama wewe kuangalia nyuma na muundo hapa,
kama ukiangalia wale kijani ina frequency yanayohusiana na hayo
kama vile inaelekeza katika nodi ili kushoto wake kama vile nodi ili haki yake.
Na kisha ndio nyekundu kuna pia kuwa na tabia zinazohusiana nao.
Sisi siyo kwenda kufanya ndio tofauti kwa ajili ya wazazi na kisha nodes ya mwisho,
ambayo sisi rejea kama majani, lakini badala ya wale tu kuwa na maadili null.
Kwa kila nodi tutaweza kuwa na tabia, alama nodi kwamba inawakilisha,
kisha frequency kama vile pointer mtoto wake wa kushoto kama vile mtoto wake wa kulia.
majani, ambayo ni chini sana, ingekuwa pia kuwa kuyatumia nodi
kwa wao wa kushoto na wa haki zao, lakini tangu wale maadili si akizungumzia nodes halisi,
gani thamani yao kuwa? >> [Mwanafunzi] null. >> Null. Hasa.
Hapa ni mfano wa jinsi ya unavyoweza kuwakilisha frequency katika ikifungwa,
lakini sisi ni kwenda kuwa kushughulika na kwa integers,
hivyo wote mimi ni kubadilisha data aina huko.
>> Hebu kwenda kidogo zaidi ya mfano tata.
Lakini sasa tumekuwa kufanyika ndio rahisi, ni tu mchakato huo.
Unakuta 2 frekvenser chini, jumla frekvenser
na kwamba ni frequency mpya wa nodi mzazi wako,
ambayo kisha anasema kwa upande wa kushoto wake na tawi 0 na haki na tawi 1.
Kama tuna string "Hii ni cs50," basi, sisi kuhesabu ni mara ngapi ni T zilizotajwa,
h zilizotajwa, i, s, c, 5, 0.
Kisha nini mimi hapa ni pamoja na nodes nyekundu mimi tu kupandwa,
Mimi alisema mimi naenda kuwa wahusika hawa hatimaye chini ya mti wangu.
Wale ni kwenda kuwa yote ya majani.
Kisha nini mimi ni mimi sorted yao na frequency katika wakipanda ili,
na hii ni kweli njia kwamba code pset gani
ni aina hiyo kwa frequency na kisha alphabetically.
Hivyo ina idadi ya kwanza na kisha alphabetically kwa mzunguko.
Kisha nini napenda kufanya ni Ningependa kujua chini 2. Hiyo 0 na 5.
Napenda jumla yao, na kwamba ni 2. Kisha napenda kuendelea, kupata ijayo 2 chini.
Wale ni 1s mbili, kisha wale kuwa 2 vilevile.
Sasa najua kwamba hatua yangu ya pili ni kwenda kujiunga na idadi ya chini,
ambayo ni T, 1, na kisha kuchagua moja ya nodes kwamba ana 2 kama mzunguko.
Hivyo hapa sisi kuwa chaguzi 3.
Nini mimi kwenda kufanya kwa slide ni tu kuibua upya yao kwa ajili yenu
hivyo kwamba unaweza kuona jinsi mimi nina kujenga it up.
Nini code na usambazaji yako code ni kwenda kufanya itakuwa kujiunga moja T
na node 0 na 5.
Hivyo basi, kwamba kiasi kwa 3, na kisha tunaendelea mchakato.
2 na 2 sasa ni ya chini, hivyo basi wale Jumla ya 4.
Kila mtu kufuatia hadi sasa? Sawa.
Kisha baada ya kuwa tuna 3 na 3 ambayo yanahitaji kuongezwa juu,
hivyo tena Mimi tu byte hivyo kwamba unaweza kuona kuibua hivyo kwamba hana kupata pia messy.
Kisha sisi kuwa 6, na kisha hatua yetu ya mwisho ni kwamba sasa sisi tu nodes 2
sisi jumla wale kufanya mizizi ya mti yetu, ambayo ni 10.
Na namba 10 mantiki kwa sababu kila node kuwakilishwa,
thamani yao, frequency yao idadi, ilikuwa ni mara ngapi alionekana katika kamba,
na kisha tuna wahusika 5 katika kamba yetu, hivyo kwamba hufanya akili.
Kama sisi kuangalia hadi saa jinsi sisi ingekuwa kweli encode yake,
kama ilivyotarajiwa, i na s, ambayo kuonekana mara nyingi
ni kuwakilishwa na idadi fewest ya bits.
>> Kuwa makini hapa.
Katika miti Huffman kesi kweli mambo.
S uppercase ni tofauti kuliko s lowercase.
Kama tulikuwa na "Hii ni CS50" kwa herufi kubwa, basi s lowercase ingekuwa tu kuonekana mara mbili,
itakuwa ya nodi 2 kama thamani yake, na kisha uppercase S itakuwa na mara moja.
Hivyo basi mti yako ingekuwa kubadilisha miundo kwa sababu wewe kweli kuwa jani ziada hapa.
Lakini Jumla bado ingekuwa 10.
Hiyo tulichokuwa kwenda kuwa wito checksum,
Aidha wote wa makosa.
>> Sasa kwa kuwa tumekuwa kufunikwa miti Huffman, tunaweza kupiga mbizi katika Huff'n Puff, pset.
Sisi ni kwenda kuanza na sehemu ya maswali,
na hii ni kwenda kupata Wanahudhuria na miti binary na jinsi ya kufanya kazi ya kuzunguka kwamba:
kuchora nodes, kujenga typedef yako mwenyewe struct kwa nodi,
na kuona jinsi ya unavyoweza kuingiza ndani ya mti binary, moja hiyo Iliyopangwa,
traversing yake, na vitu kama hivyo.
Kwamba elimu ni dhahiri kwenda kukusaidia wakati wewe kupiga mbizi katika sehemu Puff Huff'n
ya pset.
Katika toleo la kiwango cha pset, kazi yako ni kutekeleza Puff,
na katika toleo hacker kazi yako ni kutekeleza Huff.
Nini Huff gani ni inachukua asilia na basi hutafsiriwa kwenye sekunde 0 na 1s,
hivyo mchakato kwamba sisi tulikuwa juu ambapo sisi kuhesabiwa frekvenser
na kisha alifanya mti na kisha akasema, "Je, mimi kupata T?"
T ni kuwakilishwa na 100, mambo kama hayo,
na kisha Huff bila kuchukua asilia na kisha pato kwamba binary.
Lakini pia kwa sababu tunajua kwamba tunataka kuruhusu mpokeaji wa ujumbe wetu
recreate exact mti, pia pamoja na taarifa kuhusu makosa frequency.
Kisha kwa Puff tumepewa faili binary ya sekunde 0 na 1s
na kupewa pia taarifa kuhusu masafa.
Sisi kutafsiri yote ya nyuma wale sekunde 0 na 1s katika ujumbe wa awali kwamba alikuwa,
hivyo sisi ni decompressing kwamba.
Kama wewe ni kufanya toleo la kawaida, huna haja ya kutekeleza Huff,
hivyo basi unaweza kutumia tu utekelezaji wafanyakazi wa Huff.
Kuna katika spec maelekezo ya jinsi ya kufanya hivyo.
Unaweza kukimbia utekelezaji wafanyakazi wa Huff juu ya faili fulani Nakala
na kisha kutumia pato kama mchango wako kwa Puff.
>> Kama nilivyoeleza hapo awali, tuna mengi ya maadili ya usambazaji kwa hii moja.
Mimi naenda kuanza kwenda kwa njia hiyo.
Mimi naenda kutumia zaidi ya muda juu ya h files.
kwa sababu katika c. files, kwa sababu tuna h.
na kwamba hutoa sisi na prototypes ya utendaji,
hatuwezi kikamilifu haja ya kuelewa hasa -
Kama huelewi nini kinaendelea katika files. C, basi si wasiwasi sana,
lakini dhahiri kujaribu kuangalia kwa sababu inaweza kutoa mwanga baadhi
na ni muhimu kupata kutumika kusoma code ya watu wengine.
>> Kuangalia huffile.h, katika maoni inatangaza safu ya uchukuaji kwa files Huffman-coded.
Kama sisi kwenda chini, tunaona kwamba kuna upeo wa ishara 256 tupate haja codes kwa.
Hii ni pamoja na barua zote za alfabeti - kubwa na ndogo -
na kisha alama na namba, nk
Basi hapa tuna idadi uchawi kutambua faili Huffman-coded.
Ndani ya code Huffman wao wanaenda kuwa baadhi ya uchawi idadi
kuhusishwa na header.
Hii inaweza kuangalia kama idadi tu random uchawi,
lakini kama kweli kutafsiri katika ASCII, basi ni kweli inayoyataja Huff.
Hapa tuna struct kwa faili Huffman-encoded.
Kuna sifa zote hizi zinazohusiana na faili Huff.
Kisha chini hapa tuna header kwa faili Huff, hivyo tunasema Huffeader
badala ya kuongeza h ziada kwa sababu inaonekana sawa anyway.
Cute.
Tuna idadi uchawi yanayohusiana na hayo.
Kama ni halisi Huff faili, itakuja kuwa idadi up hapo juu, hii moja uchawi.
Na kisha itakuwa na safu.
Hivyo kwa mfano kila, ambapo kuna 256,
itakavyo waorodheshe kile frequency ya alama hizo ni ndani ya faili Huff.
Na kisha hatimaye, tuna checksum kwa masafa,
ambayo inapaswa kuwa Jumla ya masafa hayo.
Hivyo kwamba ni nini Huffeader ni.
Kisha sisi kuwa baadhi ya majukumu ya kuwa kurudi kidogo ijayo katika faili Huff
kama vile anaandika kidogo na faili Huff, na kisha hii kazi hapa, hfclose,
kwamba kweli kufunga faili Huff.
Kabla ya hapo, tulikuwa kushughulika na moja kwa moja tu fclose,
lakini wakati una faili Huff, badala ya fclosing ni
kile wewe ni kweli kwenda kufanya ni hfclose na hfopen yake.
Wale ni maalum kwa kazi files Huff kwamba sisi ni kwenda kuwa kushughulika na.
Ndipo hapa tunasoma katika header na kisha kuandika header.
>> Tu kwa kusoma h. Faili tunaweza aina ya kupata hisia ya kile faili Huff ili kuwa,
nini sifa ina, bila ya kweli kwenda katika huffile.c,
ambayo, kama sisi kupiga mbizi katika, kinaenda kuwa kidogo ngumu zaidi.
Ina wote wa faili I / O hapa kushughulika na kuyatumia.
Hapa tunaona kwamba wakati sisi kuwaita hfread, kwa mfano, ni bado kushughulika na fread.
Sisi siyo ya kuepuka kupata kazi hizo kabisa, lakini sisi ni kutuma wale kuchukuliwa huduma ya
ndani ya faili Huff badala ya kufanya yote ya wenyewe.
Unaweza kujisikia huru kwa Scan kupitia hii kama wewe ni curious
na kwenda na peel safu nyuma kidogo.
>> faili ijayo kwamba sisi ni kwenda kuangalia ni tree.h.
Kabla katika walkthrough slides sisi alisema tunatarajia nodi Huffman
na sisi alifanya typedef struct nodi.
Tunatarajia kuwa na alama, frequency, na kisha nyota 2 nodi.
Katika kesi hii ni nini sisi ni kufanya ni hii kimsingi ni sawa
isipokuwa badala ya nodi tunakwenda kuwaita miti.
Tuna kazi kwamba wakati wewe piga kufanya mti kuirudisha wewe pointer mti.
Nyuma kwa Speller, wakati walikuwa maamuzi nodi mpya
wewe alisema nodi * mpya neno = malloc (sizeof) na vitu kama hivyo.
Kimsingi, mktree ni kwenda kukabiliana na kwamba kwa ajili yenu.
Vile vile, wakati unataka kuondoa mti,
hivyo hiyo kimsingi kumkomboa mti wakati wewe ni kosa na hilo,
badala ya kupanga wito bure juu ya kwamba, wewe ni kweli tu kwenda kutumia kazi rmtree
ambapo unaweza kupita katika pointer mti na kisha tree.c itachukua huduma ya kwamba kwa ajili yenu.
>> Sisi kuangalia katika tree.c.
Tunatarajia kazi sawa isipokuwa kuona utekelezaji pia.
Kama sisi ilivyotarajiwa, wakati wewe piga mktree ni mallocs ukubwa wa mti katika pointer,
initializes wote wa maadili na thamani null, hivyo sekunde 0 au NULLs,
na kisha anarudi pointer mti kwamba ve tu malloc'd na wewe.
Hapa wakati wewe piga kuondoa mti ni ya kwanza hufanya uhakika kwamba wewe si mara mbili kumkomboa.
Ni hufanya kuhakikisha kwamba kwa kweli kuwa na mti kwamba unataka kuondoa.
Hapa kwa sababu mti pia ni pamoja na watoto wake,
nini hii haina ni recursively wito kuondoa mti juu ya nodi ya kushoto ya mti
kama vile nodi haki.
Kabla frees mzazi, inahitaji huru watoto pia.
Mzazi ni pia interchangeable na mizizi.
kwanza milele mzazi, hivyo kama kubwa-kubwa-kubwa-kubwa-babu
au bibi mti, kwanza tuna huru chini ngazi ya kwanza.
Hivyo tembeeni hadi chini, bure hizo, na kisha kuja nyuma juu, bure hizo, nk
Basi hiyo ni mti.
>> Sasa tunaangalia msitu.
Msitu ni mahali ambapo yote ya miti yako Huffman.
Ni kusema kwamba sisi itawabidi kitu kinachoitwa njama
kwamba ina pointer mti kama vile pointer njama iitwayo ijayo.
Nini muundo gani hii aina ya kuangalia kama?
Ni aina ya anasema ni zaidi ya hapo.
Haki zaidi ya hapa.
orodha zinazoungwa.
Tunaona kwamba wakati tuna njama ni kama orodha ya viwanja wanaohusishwa.
msitu hufafanuliwa kama orodha ya viwanja wanaohusishwa,
na hivyo muundo wa misitu ni sisi ni kwenda tu kuwa pointer njama wetu wa kwanza
na njama kwamba ina mti ndani yake au tuseme pointi kwa mti
na kisha anasema kwa njama ijayo, kadhalika na kadhalika.
Kufanya msitu tunaita mkforest.
Kisha sisi kuwa baadhi ya majukumu muhimu pretty hapa.
Tuna pick ambapo unaweza kupita katika msitu na kisha kurudi thamani ni * Tree,
pointer mti.
Nini pick kufanya itakuwa ni kwenda msituni kwamba wewe ni akizungumzia
kisha kuondoa mti na frequency chini kutoka msitu kwamba
na kisha kukupa pointer mti.
Mara baada ya kuwaita pick, mti haipo katika msitu tena,
lakini thamani ya kurudi ni pointer mti.
Kisha una kupanda.
Isipokuwa kwamba wewe kupita katika pointer mti ambao frequency zisizo 0,
nini kupanda kufanya ni itachukua msitu, kuchukua mti, na kupanda mti huo ndani ya msitu.
Hapa tuna rmforest.
Sawa na kuondoa mti, ambayo kimsingi huru yote ya miti yetu kwa ajili yetu,
kuondoa msitu mapenzi bure kila kitu zilizomo katika msitu huo.
>> Kama sisi kuangalia ndani forest.c, tutaweza wanatarajia kuona angalau 1 rmtree amri huko,
kwa sababu kwa kumbukumbu bure katika msitu kama misitu ina miti katika hilo,
kisha hatimaye utaenda kuwa na kuondoa miti wale pia.
Kama sisi kuangalia ndani forest.c, tuna mkforest yetu, ambayo ni kama sisi kutarajia.
Sisi malloc mambo.
Sisi initialize njama kwanza katika msitu kama null sababu ni tupu kwa kuanzia,
kisha sisi kuona pick, ambayo anarudi mti na uzito chini, frequency ya chini,
na kisha anapata kuondoa nodi fulani kwamba pointi kwa mti huo, na moja ijayo,
hivyo inachukua kwamba nje ya orodha wanaohusishwa ya msitu.
Na kisha hapa tuna mmea ambao kuwekeza katika orodha mti zinazoungwa.
Nini msitu gani ni nicely anaendelea kuwa sorted kwa ajili yetu.
Na kisha hatimaye, tuna rmforest na, kama ilivyotarajiwa, tuna rmtree kuitwa huko.
>> Kuangalia code usambazaji hadi sasa, huffile.c labda kwa mbali gumu kuelewa,
ambapo files nyingine wenyewe walikuwa pretty rahisi kufuata.
Pamoja na elimu yetu ya kuyatumia na orodha zilizounganishwa na vile,
tulikuwa na uwezo wa kufuata pretty vizuri.
Lakini yote tunahitaji kweli kuhakikisha kwamba sisi kuelewa ni h. Files
kwa sababu unahitaji kuwa wito kazi hizo, kukabiliana na maadili hayo ya kurudi,
ili kuhakikisha kwamba wewe kuelewa nini action anaenda kuwa walifanya
wakati wowote wewe piga moja ya kazi hizo.
Lakini kwa kweli kuelewa ndani yake si muhimu kabisa kwa sababu tuna wale h files..
Tuna files 2 zaidi kushoto katika usambazaji code yetu.
>> Hebu tuangalie dampo.
Dampo kwa maoni yake hapa inachukua faili Huffman-USITUMIE
na kisha hutafsiriwa na madampo wote wa maudhui yake nje.
Hapa tunaona kuwa ni wito hfopen.
Hii ni aina ya mirroring na faili * pembejeo = fopen,
na kisha kupita katika taarifa.
Ni karibu kufanana isipokuwa badala ya * faili wewe ni kupita katika Huffile;
badala ya fopen wewe ni kupita katika hfopen.
Hapa tunasoma katika header ya kwanza, ambayo ni aina ya sawa na jinsi sisi kusoma katika header
kwa ajili ya faili bitmap.
Nini sisi ni kufanya hapa ni kuangalia ili kuona kama taarifa header
ina haki ya uchawi idadi ambayo inaonyesha kuwa ni halisi Huff faili,
basi wote wa hundi hizo kuhakikisha kwamba faili kwamba sisi ni wazi halisi huffed faili au la.
Nini hii ni matokeo ya masafa ya wote wa ishara kwamba tunaweza kuona
ndani ya terminal katika meza graphical.
Sehemu hii ni kwenda kuwa na manufaa.
Ina kidogo na wasomaji kidogo kidogo katika kidogo kutofautiana na kisha Prints nje.
Hivyo kama mimi walikuwa kuwaita dampo kwenye hth.bin, ambayo ni matokeo ya huffing faili
kutumia ufumbuzi wafanyakazi, napenda kupata hii.
Ni outputting yote ya wahusika hawa na kisha kuweka frequency ambayo wao kuonekana.
Tukiangalia, wengi wao ni sekunde 0 ila kwa hili: H, ambayo inaonekana mara mbili,
na kisha T, ambayo inaonekana mara moja.
Na kisha hapa tuna ujumbe halisi katika sekunde 0 na 1s.
Tukiangalia hth.txt, ambayo ni huenda ikatengeneza ujumbe wa awali kwamba alikuwa huffed,
tunatarajia kuona baadhi HS na Ts huko.
Hasa, tunatarajia kuona T 1 tu na 2 HS.
Hapa sisi ni katika hth.txt. Ni kweli ana HTH.
Pamoja katika huko, ingawa hatuwezi kuona hivyo, ni tabia newline.
Faili Huff hth.bin pia usimbaji tabia newline pia.
Hapa kwa sababu tunajua kwamba ili ni HTH na kisha newline,
tunaweza kuona kwamba pengine H ni kuwakilishwa na tu 1 moja
na kisha T pengine ni 01 na kisha H ijayo ni kama 1 vizuri
na kisha tuna newline unahitajika kwa sekunde 0 mbili.
Cool.
>> Na kisha hatimaye, kwa sababu sisi ni kushughulika na mbalimbali c. Na. H files,
sisi itawabidi pretty tata hoja compiler,
na hivyo hapa tuna Makefile kwamba inafanya dampo kwa ajili yenu.
Lakini kwa kweli, una kwenda juu ya kufanya puff.c yako mwenyewe faili.
Makefile kweli haina kukabiliana na maamuzi puff.c kwa ajili yenu.
Sisi ni kuacha kuwa hadi wewe hariri Makefile.
Unapoingia amri kama kufanya yote, kwa mfano, itafanya wote kwa ajili yenu.
Jisikie huru kuangalia mifano ya Makefile kutoka pset zamani
kama vile kwenda mbali ya hii moja kuona jinsi unaweza kuwa na uwezo wa kufanya Puff faili yako
kwa kuhariri hii Makefile.
Hiyo ni kuhusu hilo kwa ajili ya usambazaji code yetu.
>> Mara tumekuwa Gotten kupitia njia hiyo, basi hapa tu mwingine ukumbusho
ya jinsi sisi ni kwenda kuwa kushughulika na nodes Huffman.
Sisi siyo kwenda kuwa kuwaita nodes tena; tunakwenda kuwa kuwaita miti
ambapo sisi mtaenda anayewakilisha alama yao na Char,
frequency yao, idadi ya matukio, na integer.
Sisi ni kutumia kwamba kwa sababu ni sahihi zaidi kuliko kuelea.
Na kisha sisi kuwa na mwingine pointer mtoto wa kushoto kama vile mtoto wa kulia.
msitu, kama tulivyoona, ni tu orodha zilizounganishwa ya miti.
Hatimaye, wakati sisi ni kujenga wetu Huff faili,
tunataka msitu wetu na vyenye tu 1 mti -
1 mti, 1 mizizi na watoto mbalimbali.
Mapema tulipokuwa tu maamuzi yetu miti Huffman,
sisi ilianza nje kwa kuweka yote ya nodi kwenye screen zetu
na kusema sisi itawabidi nodi hiyo,
hatimaye wao wanaenda kuwa majani, na hii ni alama yao, hii ni ya mzunguko yao.
Katika msitu wetu ikiwa sisi tu barua 3, hiyo ni msitu wa miti 3.
Na kisha kama sisi kwenda juu, wakati sisi aliongeza mzazi wa kwanza,
sisi alifanya msitu wa miti 2.
Sisi kuondolewa 2 ya watoto wale kutoka msitu wetu na kisha nafasi yake kuchukuliwa na nodi mzazi
kwamba alikuwa nodes wale 2 kama watoto.
Na kisha hatimaye, hatua yetu ya mwisho na kufanya mfano wetu na Kama, Bs, na Cs
itakuwa kufanya mzazi wa mwisho,
na hivyo basi ambayo kuleta kuhesabu wetu jumla ya miti katika msitu wa 1.
Je, kila mtu kuona jinsi gani kuanza nje na miti mbalimbali katika msitu yako
na kuishia na 1? Sawa. Cool.
>> Nini tunahitaji kufanya kwa Puff?
Tunachohitaji kufanya ni kuhakikisha kwamba, kama siku zote, wao kutupatia haki ya aina ya pembejeo
ili tuweze kweli kuendesha programu.
Katika kesi hiyo wao wanaenda kuwa anatupa baada ya hoja yao ya kwanza ya mstari amri
2 zaidi: faili kwamba tunataka decompress na pato la faili decompressed.
Lakini mara sisi kuhakikisha kwamba kupita kwetu katika kiasi cha haki ya maadili,
tunataka kuhakikisha kwamba pembejeo ni faili Huff au la.
Na kisha mara moja sisi kuhakikisha kwamba ni faili Huff, basi tunataka kujenga mti wetu,
kujenga mti vile kwamba mechi mti kwamba mtu ambaye alimtuma ujumbe kujengwa.
Kisha baada ya sisi kujenga mti, basi tunaweza kukabiliana na, sekunde 0 na 1s kwamba wao kupita katika
kufuata wale pamoja mti wetu kwa sababu ni sawa,
na kisha kuandika kwamba ujumbe nje, kutafsiri bits nyuma katika chars.
Na kisha mwishoni kwa sababu sisi ni kushughulika na kuyatumia hapa,
tunataka kuhakikisha kwamba hatuna uvujaji yoyote kumbukumbu
na kwamba sisi bure kila kitu.
>> Kuhakikisha matumizi sahihi ni mzee kofia kwa ajili yetu kwa sasa.
Sisi kuchukua katika pembejeo, ambayo ni kwenda kuwa jina la faili puff,
na kisha sisi taja pato,
hivyo jina la faili kwa ajili ya pato majivuno, ambayo itakuwa faili asilia.
Hiyo ni matumizi. Na sasa tunataka kuhakikisha kwamba pembejeo ni huffed au la.
Kufikiri nyuma, kulikuwa na chochote katika usambazaji code ambayo yanaweza kutusaidia
na kuelewa kama faili ni huffed au la?
Kulikuwa na taarifa katika huffile.c kuhusu Huffeader.
Tunajua kwamba kila faili Huff ina Huffeader yanayohusiana na hayo na idadi uchawi
kama vile array ya masafa kwa alama ya kila
kama vile checksum.
Tunajua kwamba, lakini sisi pia alichukua Peek saa dump.c,
ambayo ilitolewa kusoma ndani ya faili Huff.
Na hivyo kufanya kuwa, alikuwa na kuangalia kama ni kweli alikuwa huffed au la.
Hivyo labda tunaweza kutumia dump.c kama muundo kwa puff.c. wetu
Rudi pset 4 wakati tulikuwa copy.c faili kwamba kunakiliwa katika triples RGB
na sisi kufasiriwa kuwa kwa Whodunit na resize,
vile vile, nini unaweza kufanya ni kukimbia tu amri kama linganisha dump.c puff.c
na kutumia baadhi ya maadili ya huko.
Hata hivyo, si kwenda kuwa kama moja kwa moja ya mchakato
kwa kutafsiri dump.c yako katika puff.c,
lakini angalau ni inakupa mahali fulani kuanza
juu ya jinsi ya kuhakikisha kuwa pembejeo ni kweli au si huffed
kama vile wachache na mambo mengine.
Sisi kuhakikisha matumizi sahihi na kuhakikisha kwamba pembejeo ni huffed.
Kila wakati kwamba tumefanya kwamba tumefanya makosa yetu sahihi kuangalia,
hivyo kurudi na kuacha kazi kama kushindwa baadhi hutokea, kama kuna tatizo.
>> Sasa nini tunataka kufanya ni kujenga mti halisi.
Tukiangalia katika Msitu, kuna kazi kuu 2
kwamba sisi ni kwenda wanataka kuwa familiar sana na.
Kuna Boolean kazi kupanda kwamba mimea yasiyo 0 frequency mti ndani ya msitu wetu.
Na hivyo kuna kupita katika pointer msitu na pointer mti.
Quick swali: Jinsi wengi misitu una wakati wewe ni kujenga mti Huffman?
Msitu yetu ni kama canvas yetu, haki?
Hivyo sisi ni kwenda tu kuwa 1 msitu, lakini sisi itawabidi miti mbalimbali.
Basi, kabla ya kuwaita kupanda, wewe labda anaenda kutaka kufanya msitu yako.
Kuna amri kwa kuwa kama ukiangalia katika forest.h juu ya jinsi gani unaweza kufanya msitu.
Unaweza kupanda miti. Tunajua jinsi ya kufanya hivyo.
Na kisha unaweza pia kuchukua mti kutokana na msitu,
kuondoa mti na uzito chini na kutoa pointer kwamba.
Kufikiri nyuma tulipokuwa kufanya mifano wenyewe,
tulipokuwa kuchora ni nje, sisi tu tu aliongeza viungo.
Lakini hapa badala ya kuongeza tu viungo,
kufikiria zaidi kama wewe ni kuondoa 2 ya nodes hizo na kisha kuondoa na mwingine mmoja.
Kueleza kwamba katika suala la kuokota na kupanda,
wewe ni kuokota miti 2 na kisha kupanda mti mwingine
ambayo ina miti wale 2 kwamba wewe ilichukua kama watoto.
Kujenga mti Huffman, unaweza kusoma katika alama na frekvenser ili
kwa sababu Huffeader anatoa kwamba na wewe,
inakupa safu ya masafa.
Hivyo unaweza kwenda mbele na kupuuzia tu na chochote 0 ndani yake
kwa sababu hatutaki majani 256 katika mwisho wake.
Sisi tu wanataka idadi ya majani ambayo ni herufi
kwamba ni kweli kutumika katika faili.
Unaweza kusoma katika ishara hizo, na kila moja ya alama za wale ambao frekvenser zisizo 0,
wale ni kwenda kuwa miti.
Nini unaweza kufanya ni kila wakati kusoma katika ishara zisizo 0 frequency,
unaweza kupanda mti huo katika msitu.
Mara baada ya kupanda miti katika msitu, unaweza kujiunga miti wale kama ndugu,
hivyo kurejea kupanda na kuokota ambapo unaweza kuchukua 2 na kisha kupanda 1,
ambapo kwamba 1 kwamba kupanda ni mzazi wa watoto 2 kwamba wewe ilichukua.
Hivyo basi mwisho wako matokeo ni kwenda kuwa mti mmoja katika msitu yako.
Hiyo ni jinsi ya kujenga mti yako.
>> Kuna mambo kadhaa ambayo inaweza kwenda vibaya hapa
kwa sababu sisi ni kushughulika na kufanya miti mipya na kushughulika na kuyatumia na mambo kama hayo.
Kabla tulipokuwa kushughulika na kuyatumia,
wakati sisi malloc'd sisi alitaka kuhakikisha kwamba hawakuwa turudisha null pointer thamani.
Hivyo katika hatua kadhaa ndani ya mchakato huu, kutakuwa na kuwa kadhaa kesi
ambapo programu yako inaweza kushindwa.
Nini unataka kufanya ni wewe unataka kuhakikisha kwamba wewe kushughulikia makosa hayo,
na katika spec inasema kushughulikia yao gracefully,
hivyo kama magazeti ujumbe kwa mtumiaji kuwaambia nini mpango ina kuacha
na kisha mara moja kuacha yake.
Ili kufanya hivi utunzaji makosa, kumbuka kwamba unataka kuangalia ni
kila wakati kwamba kuna inaweza kuwa kushindwa.
Kila wakati kwamba wewe ni kufanya pointer mpya
wewe unataka kuhakikisha kwamba hiyo ni mafanikio.
Kabla ya kile sisi kutumika kufanya ni kufanya pointer mpya na malloc yake,
na kisha tunataka kuangalia kama pointer kwamba ni null.
Hivyo kuna ni kwenda kuwa baadhi ya mifano ambapo unaweza tu kufanya hivyo,
lakini wakati mwingine wewe ni kweli wito kazi
na ndani ya kazi kwamba, hiyo ni moja kwamba anafanya mallocing.
Katika kesi hiyo, kama sisi kuangalia nyuma kwa baadhi ya kazi ndani ya kificho,
baadhi yao ni Boolean kazi.
Katika kesi ya kufikirika kama tuna kazi Boolean kuitwa foo,
kimsingi, tunaweza kudhani kwamba kwa kuongeza katika kufanya chochote foo gani,
tangu ni kazi Boolean, kuirudisha kweli au uongo -
kweli kama mafanikio, ya uongo kama si.
Hivyo tunataka kuangalia kama thamani ya kurudi kwa foo ni kweli au uongo.
Kama ni ya uongo, hiyo ina maana kwamba sisi ni kwenda kutaka magazeti baadhi ya aina ya ujumbe
na kisha kuacha mpango.
Nini tunataka kufanya ni kuangalia thamani ya kurudi kwa foo.
Kama foo anarudi uongo, basi tunajua kwamba sisi wamekutana baadhi ya aina ya kosa
na sisi haja ya kujiondoa programu yetu.
njia ya kufanya hili ni kuwa na hali ambapo kazi halisi yenyewe ni hali yako.
Sema foo inachukua katika x.
Tunaweza kuwa kama hali kama (foo (x)).
Kimsingi, hiyo ina maana kama katika mwisho wa utekelezaji foo kuirudisha kweli,
basi tunaweza kufanya kazi hii kwa sababu ina kutathmini foo
ili kutathmini hali nzima.
Hivyo basi, kwamba ni jinsi gani wanaweza kufanya kitu kama kazi anarudi kweli na ni mafanikio.
Lakini wakati uko makosa ya kuangalia, wewe tu unataka kuacha kazi yako kama anarudi uongo.
Nini unaweza kufanya ni kuongeza tu == uongo au kuongeza tu bang mbele yake
na kisha una ikiwa (! foo).
Ndani ya kwamba mwili wa hali ya kuwa bila kuwa na aina ya utunzaji makosa,
hivyo kama, "Haikuweza kuunda mti huu" na kisha kurudi 1 au kitu kama hicho.
Nini kwamba gani, ingawa, ni kwamba hata ingawa foo akarudi uongo -
Sema foo anarudi kweli.
Kisha huna kuwaita foo tena. Hiyo ni kawaida mbaya.
Kwa sababu ilikuwa katika hali yako, ni tayari tathmini,
hivyo tayari kuwa na matokeo kama unatumia kufanya mti au kitu kama hicho
au mmea au pick au kitu.
Ni kwamba tayari ina thamani. Ni tayari kunyongwa.
Hivyo ni muhimu kwa kutumia kazi Boolean kama hali
kwa sababu kama au wewe kweli nitafanya mwili wa kitanzi,
ni executes kazi anyway.
>> Pili yetu hadi hatua ya mwisho ni kuandika ujumbe kwa faili.
Mara sisi kujenga mti Huffman, kisha kuandika ujumbe kwa faili ni pretty moja kwa moja.
Ni pretty moja kwa moja sasa ili tu kufuata sekunde 0 na 1s.
Na hivyo kwa mkataba tunajua kwamba katika mti Huffman sekunde 0 zinaonyesha kushoto
na 1s zinaonyesha haki.
Hivyo basi kama wewe kusoma katika kidogo kidogo, kila wakati kwamba kupata 0
utasikia kufuata tawi kushoto, na kisha kila wakati wewe kusoma katika 1
utaenda kufuata tawi haki.
Na kisha utaenda kuendelea mpaka hit jani
kwa sababu majani ni kwenda kuwa katika mwisho wa matawi.
Tunawezaje kujua kama tumekuwa hit jani au la?
Sisi alisema ni kabla.
[Mwanafunzi] Kama ni kuyatumia null. >> Yeah.
Tunaweza kusema kama tumekuwa hit jani kama kuyatumia kwa miti yote ya kushoto na kulia ni null.
Perfect.
Tunajua kwamba sisi unataka kusoma katika kidogo kidogo ndani ya faili wetu Huff.
Kama tulivyoona mbele katika dump.c, walichofanya ni wao kusoma katika kidogo kidogo ndani ya faili Huff
na tu kuchapishwa nini wale bits walikuwa.
Sisi siyo kwenda kufanya hiyo. Sisi ni kwenda kufanya kitu ambacho ni kidogo ngumu zaidi.
Lakini nini tunaweza kufanya ni kwamba tunaweza kuchukua kidogo ya kificho kwamba anasoma katika kidogo.
Hapa tuna kidogo integer anayewakilisha kidogo sasa kwamba sisi ni juu.
Hii inachukua huduma ya iterating wote wa bits katika faili mpaka hit mwisho wa faili.
Kulingana na kwamba, basi wewe ni kwenda kutaka kuwa na aina fulani ya iterator
kwa traverse mti yako.
Na kisha kuzingatia kama ni kidogo 0 au 1,
wewe ni kwenda kutaka ama hoja kwamba iterator wa kushoto au hoja hiyo kwa haki
njia yote mpaka hit jani, hivyo njia yote hadi kuwa nodi kwamba wewe ni juu ya
haina uhakika na nodes yoyote zaidi.
Kwa nini tunaweza kufanya pamoja na faili Huffman lakini si Morse code?
Kwa sababu katika code Morse kuna utata kidogo.
Sisi inaweza kuwa kama, oh kusubiri, tumekuwa hit barua njiani, hivyo labda hii ni barua yetu,
lakini kama sisi iliendelea tu kidogo tena, basi sisi ingekuwa hit barua nyingine.
Lakini si kwamba kitatokea katika encoding Huffman,
hivyo tunaweza mapumziko uhakika kwamba njia pekee ya kwamba sisi ni kwenda hit tabia
ni kama kwamba nodi ya kushoto na kulia ni watoto null.
>> Hatimaye, tunataka huru yote ya kumbukumbu zetu.
Tunataka wote karibu faili Huff kwamba sisi tumekuwa kushughulika na
kama vile kuondoa yote ya miti katika msitu wetu.
Kulingana na utekelezaji wako, wewe pengine anaenda kutaka kuwaita kuondoa msitu
badala ya kweli kwenda njia zote za miti mwenyewe.
Lakini kama wewe alifanya miti yoyote ya muda, utasikia wanataka huru kwamba.
Unajua code yako bora, hivyo unajua ambapo wewe ni kugawa kumbukumbu.
Na hivyo kama wewe kwenda katika, kuanza kwa hata Document F'ing kwa malloc,
kuona wakati wewe malloc na kuhakikisha kuwa ninyi huru yote ya kwamba
lakini basi tu kwenda kwa code yako,
kuelewa ambapo unaweza kuwa zilizotengwa kumbukumbu.
Kawaida unaweza kusema tu, "Wakati wa mwisho wa faili Mimi tu kwenda kuondoa misitu katika msitu yangu,"
hivyo kimsingi wazi kwamba kumbukumbu, bure kwamba,
"Na kisha Mimi pia naenda kuifunga faili na kisha mpango wangu ni kwenda kuacha."
Lakini ni kwamba wakati tu kwamba mpango wako quits?
Hapana, kwa sababu wakati mwingine huenda kuna wamekuwa makosa yaliyotokea.
Labda tunaweza kufungua faili au hatukuweza kufanya mwingine mti
au aina fulani ya makosa yaliyotokea katika mchakato mgao kumbukumbu na hivyo wakarudi null.
makosa yaliyotokea na kisha sisi akarudi na kuacha.
Hivyo basi wewe unataka kuhakikisha kwamba wakati wowote inawezekana kwamba mpango wako wanaweza kujiondoa,
unataka kumwondolea yote ya kumbukumbu yako huko.
Siyo tu kwenda kuwa katika mwisho sana ya kazi kuu ya kuwa wewe kujiondoa code yako.
Unataka kuangalia nyuma kwa mfano kila kwamba code yako uwezekano ili kurudi mapema
na kisha bure chochote kumbukumbu hufanya akili.
Sema ametuita kufanya msitu na kwamba alirudi uongo.
Basi pengine si haja ya kuondoa msitu yako
kwa sababu wewe huna msitu bado.
Lakini katika kila hatua katika code ambapo unaweza kurudi mapema
unataka kuhakikisha kuwa wewe huru yoyote kumbukumbu iwezekanavyo.
>> Hivyo wakati sisi ni kushughulika na kumkomboa kumbukumbu na kuwa na uvujaji uwezo,
tunataka si tu kutumia hukumu yetu na mantiki zetu
lakini pia kutumia Valgrind kuamua kama tumekuwa huru yote ya kumbukumbu zetu vizuri au la.
Unaweza ama kukimbia Valgrind juu Puff na kisha una pia kupita
idadi ya haki ya hoja amri ya mstari Valgrind.
Unaweza kukimbia, lakini pato ni kidogo cryptic.
Tumekuwa Gotten kidogo kutumika kwa Speller, lakini bado tunahitaji msaada zaidi kidogo,
hivyo basi mbio na bendera chache zaidi kama leak-kuangalia = kamili,
kwamba pengine kutupa baadhi ya pato zaidi ya kuwasaidia kwenye Valgrind.
>> Kisha mwingine ncha muhimu wakati wewe ni debugging ni amri tofauti.
Unaweza kufikia utekelezaji wafanyakazi wa Huff, kukimbia kwamba faili maandishi,
na kisha pato kwa faili binary, binary Huff SVG, kuwa maalum.
Kisha kama wewe kukimbia Puff yako mwenyewe kwenye faili kwamba binary,
basi walau, maandishi yako ya faili outputted ni kwenda kuwa kufanana
kwa moja ya awali kwamba wewe kupita in
Hapa mimi nina kutumia hth.txt kama mfano, na hiyo ni moja kuongelea katika spec yako.
Hiyo ni literally tu HTH na kisha newline.
Lakini dhahiri kujisikia huru na wewe ni dhahiri wanahimizwa kutumia mifano tena
Nakala kwa faili yako.
>> Unaweza hata kuchukua risasi saa labda compressing na kisha decompressing
baadhi ya files kwamba unaweza kutumika katika Speller kama Vita na Amani
au Jane Austen au kitu kama hicho - kwamba itakuwa aina ya baridi - au Powers Austin,
aina ya kushughulika na faili kubwa kwa sababu sisi bila kuja chini kwa hiyo
kama sisi kutumika chombo ijayo hapa, ls-l.
Tuliyoizoea ls, ambayo kimsingi unaorodhesha yaliyomo yote katika saraka wetu wa sasa.
Kupita katika l flag-kweli maonyesho ukubwa wa mafaili ya wale.
Kama kwenda kwa njia spec pset, ni kweli anatembea wewe kwa njia ya kuunda faili binary,
ya huffing, na unaweza kuona kwamba kwa files ndogo sana
gharama nafasi ya compressing yake na kutafsiri taarifa zote kwamba
ya yote frekvenser na mambo kama hayo outweighs faida halisi
ya compressing faili katika nafasi ya kwanza.
Lakini kama wewe kukimbia juu ya baadhi ya faili maandishi marefu, basi unaweza kuona kwamba kuanza kupata baadhi ya faida
katika compressing files wale.
>> Na kisha hatimaye, tuna pal wetu wa kale GDB, ambayo ni dhahiri kwenda kuja katika Handy pia.
>> Je, tuna maswali yoyote juu ya miti Huff au mchakato labda ya kufanya miti
au maswali yoyote juu ya nyingine Puff Huff'n?
Sawa. Mimi itabidi kukaa kote kwa kidogo.
>> Shukrani, kila mtu. Hii ilikuwa walkthrough 6. Na bahati nzuri.
>> [CS50.TV]