[Powered by Google Translate] [Walkthrough - Problēma Set 6]
[Zamyla Chan - Hārvarda]
[Tas ir CS50. - CS50.TV]
>> Sveiki, visiem, un laipni 6 Walkthrough: Huff'n Puff.
Jo Huff'n Puff, ko mēs darām, ir būs darīšana ar Huffman saspiestu failu
un tad kūpinot to atpakaļ uz augšu, tāpēc decompressing tā,
lai mēs varētu tulkot no 0s un 1s ka lietotājs sūta mums
un pārvērst to atpakaļ sākotnējā teksta.
PSET 6 būs diezgan vēss, jo jūs gatavojas redzēt dažus no instrumentiem
ka tu lieto 4 PSET un PSET 5 un veida apvienojot tos 1 diezgan veikls koncepciju
kad jūs domāt par to.
>> Arī varbūt, 4 PSET un 5 bija vislielākās grūtības psets ka mums bija piedāvāt.
Tātad no šī brīža, mums ir šis vēl 1 PSET C,
un tad pēc tam mēs esam uz web programmēšanu.
Tātad apsveicu sevi, lai iegūtu pār toughest kupris in CS50.
>> Pārvietojas on Huff'n dvesma, mūsu Toolbox šo PSET gribam būt Huffman koki,
lai izprastu ne tikai kā binārā koki darbu, bet arī īpaši Huffman kokus,
kā viņi uzbūvēti.
Un tad mēs ejam, lai ir daudz sadales kodu šajā PSET,
un mēs būsim redzēt, ka faktiski daži kodu
mēs varētu nebūt spējīgs pilnībā saprast vēl,
un tāpēc tie būs. c failus, bet tad to pavadošajiem. h faili
dos mums ir pietiekami daudz izpratnes, ka mums ir nepieciešams, lai mēs zinām, kā šīs funkcijas darbojas
vai vismaz to, ko viņi ir paredzēts darīt - viņu ieejas un izejas -
pat ja mēs nezinām, kas notiek melnajā kastē
vai nesaprot to, kas notiek melnajā kastē laikā.
Un tad beidzot, kā ierasts, mums ir darīšana ar jauniem datu struktūras,
īpašu veidu mezglu, kas norāda uz dažām lietām,
un tāpēc šeit kam pildspalvu un papīru ne tikai projektēšanas procesā
un, kad jūs mēģināt izdomāt, kā jūsu PSET vajadzētu strādāt
bet arī laikā debugging.
Jūs varat būt GDB līdzās savu pildspalvu un papīru, kamēr jūs ņemtu nosaka kādi vērtības ir,
kur jūsu bultas ir norādot, un lietas, piemēram, ka.
>> Vispirms pieņemsim apskatīt Huffman kokiem.
Huffman koki ir binārā koki, kas nozīmē, ka katrs mezgls ir tikai 2 bērni.
Jo Huffman kokiem īpašība ir, ka biežākie vērtības
pārstāv vismazāk bitiem.
Mēs redzējām lekciju piemēri Morzes kodu, kas veida konsolidētā dažus burtus.
Ja jūs mēģināt tulkot A vai E, piemēram,
Jūs esat tulkojot ka bieži, tāpēc tā vietā, lai izmantotu pilnu komplektu bitiem
piešķirams šajā parasto datu tipu, jūs saspiest to uz leju līdz mazāk,
un tad šie burti, kas ir pārstāvētas retāk tiek pārstāvētas ar garākiem bitiem
jo jūs varat atļauties, ka tad, kad jūs nosver frekvences, kas šiem burtiem.
Mums ir tāda pati ideja šeit Huffman kokiem
kur mēs veidojam ķēdi, veida ceļu, lai nokļūtu noteiktu simbolu.
Un tad rakstzīmes, kas ir visvairāk biežumu
gatavojas pārstāv pēc iespējas mazākiem bitiem.
>> Tā, ka jums izveidot Huffman koku
ir, ievietojot visas rakstzīmes, kas parādās tekstā
un aprēķinot to biežumu, cik bieži tie parādās.
Tas varētu būt vai nu skaits, cik reizes šie burti parādīsies
vai varbūt procents no visiem personāžiem, cik daudz katrs parādās.
Un tā, ko jūs darāt, ir, kad jums ir visas šīs nosprauda,
tad jūs meklēt par 2 zemāko frekvenču un pēc tam pievienoties tos kā vecvecākus
kur tad mātes mezglā ir frekvenci, kas ir summa ir 2 bērni.
Un tad tu pēc vienošanās teikt, ka kreisais mezglā,
Jums seko, ka, sekojot 0 filiāli,
un tad rightmost mezgls ir 1 filiāle.
Kā mēs redzējām Morzes kodu, viens gotcha bija, ka, ja jums bija tikai pīkstienu un pīkstiens
tas bija neskaidrs.
Tas varētu būt vai nu 1 burts vai tas varētu būt secība 2 burtiem.
Un tā, kādi Huffman koki dara, ir tāpēc, ka pēc būtības rakstzīmes
vai mūsu galīgās faktiskās rakstzīmes ir pēdējais mezgli par filiāles -
mēs uz tām, lapas - pamatojoties uz, ka nevar būt jebkura neskaidrība
Runājot par kuru vēstulē jūs mēģināt kodēt ar virkni bitu
jo nekur gar biti, kas pārstāv 1 burts
Jūs sastopas citu veselu vēstuli, un tur nebūs neskaidrības tur.
Bet mēs iedziļināties piemēriem, ka jūs guys faktiski var redzēt, ka
vietā mums tikai stāsta, ka tā ir taisnība.
>> Apskatīsim vienkāršu piemēru Huffman koku.
Man ir virkne šeit, ka ir 12 rakstzīmes.
Man ir 4 Kā, 6 BS, un CS 2.
Mans pirmais solis būtu rēķināties.
Cik reizes nav parādās? Šķiet 4 reizes virknē.
B šķiet 6 reizes, un C šķiet 2 reizes.
Protams, es esmu gatavojas teikt, es esmu, izmantojot B visbiežāk,
tāpēc es gribu, lai pārstāvētu B ar vismazāko skaitu biti, vismazāk skaits 0s un 1s.
Un tad es esmu arī gatavojas sagaidīt C pieprasīt lielāko summu 0s un 1s, kā arī.
Pirmais, ko es darīju šeit es novieto tos augošā secībā pēc biežuma.
Mēs redzam, ka C un, tie ir mūsu 2 zemākās frekvences.
Mēs izveidot mātes mezglā, un ka mātes mezglā nav vēstuli saistīts ar to,
bet tas ir frekvence, kas ir summa.
Summa kļūst 2 +4, kas ir 6.
Tad mēs sekojam kreiso filiāli.
Ja mums bija, ka 6 mezglā, tad mēs varētu sekot 0 nokļūt līdz C
un tad 1, lai saņemtu A.
Tāpēc tagad mums ir 2 punktiem.
Mums ir vērtība 6 un tad mums ir arī citu mezglu ar vērtību 6.
Un tā tie 2 ir ne tikai par 2 zemākā, bet arī tikai 2, kas ir pa kreisi,
tāpēc mēs pievienoties tiem cita vecākiem, ar summu par 12.
Tātad šeit mums ir mūsu Huffman koks
kur iegūt uz B, kas būtu tikai būt bit 1
un tad nokļūt līdz mums būtu 01 un tad C kam 00.
Tātad šeit mēs redzam, ka būtībā mēs esam pārstāv šos chars ar 1 vai 2 bitiem
kur B, kā tika gaidīts, ir vismazāk.
Un tad mums bija gaidāms C ir visvairāk, bet jo tas ir tik mazs Huffman koks,
tad ir pārstāvēta arī ar 2 bitu, nevis kaut kur pa vidu.
>> Tikai, lai iet pa citu vienkāršu piemēru no Huffman koku,
saka jums ir virkne "Sveiki".
Kas jums ir vispirms jums teiktu, cik reizes tas H parādās šo?
H parādās vienreiz un pēc tam e parādās vienreiz un tad mums ir l parādās divreiz
un o parādās vienreiz.
Un tad mēs sagaidām, ko vēstule pārstāv vismaz bitu skaitu?
[Students] l. >> L. Yeah. l ir taisnība.
Mēs sagaidām l pārstāv vismaz bitu skaits
jo l izmanto visvairāk virknē "Sveiki".
Ko es esmu gatavojas darīt tagad, ir izdarīt šos mezglus.
Man ir 1, kas ir H, un pēc tam vēl 1, kas ir E, un tad 1, kas o -
šobrīd es esmu savešanu kārtībā - un tad 2, kas ir l.
Tad es saku tā, ka es veidot Huffman koks ir atrast 2 punktiem ar mazāko frekvencēm
un padarīt tos vecvecākus, izveidojot mātes mezglā.
Te mums ir 3 mezgli ar zemāko frekvenci. Viņi visi 1.
Tātad šeit mēs izvēlēties vienu mēs ejam, lai savienotu pirmās.
Pieņemsim, ka es izvēlētos H un e.
Summa 1 + 1 ir 2, bet tas mezgls nav vēstuli saistīti ar to.
Tas tikai tur vērtību.
Tagad mēs skatāmies nākamo 2 zemāko frekvences.
Tas ir 2 un 1. Tas varētu būt vai nu no 2 tiem, bet es esmu gatavojas izvēlēties šo vienu.
Summa ir 3.
Un tad beidzot, man ir tikai 2 Kreisais, lai tad kļūst 5.
Tad šeit, kā gaidīts, ja es aizpildīt kodējumu, ka,
1s vienmēr labi filiāle un 0s ir atstāj vienu.
Tad mums ir l pārstāv tikai 1 bitu un tad o ar 2
un tad ar 2 e tad H krīt līdz 3 bitiem.
Tātad jūs varat nosūtīt šo ziņojumu "Hello", nevis faktiski izmantojot rakstzīmes
, tikai 0s un 1s.
Tomēr atcerieties, ka vairākos gadījumos mums bija attiecības ar mūsu frekvenci.
Mēs varētu būt vai nu pievienojies H un o 1. varbūt.
Vai tad vēlāk, kad mums bija l pārstāv 2
kā arī pievienojās vienu, veido ar 2, mēs varētu būt saistīti vai nu vienu.
>> Un tad, kad jūs sūtīt 0s un 1s, kas faktiski negarantē
ka saņēmējs var pilnībā lasīt jūsu ziņu labi pie nūja
jo viņi varētu nezināt, ko lēmums jums veikts.
Tātad, ja mums ir darīšana ar Huffman kompresiju,
kaut mums ir pateikt saņēmējs mūsu vēstījumu, kā mēs nolēmām -
Viņiem jāzina sava veida papildu informāciju
papildus saspiestā ziņu.
Viņiem ir nepieciešams saprast, ko koks patiesībā izskatās,
kā mēs faktiski veica šos lēmumus.
>> Šeit mēs tikai dara piemērus, pamatojoties uz faktisko skaitu,
bet reizēm jūs varat arī ir Huffman koks
pamatojoties uz frekvenci, kur burti parādās, un tas ir tieši tas pats process.
Šeit es esmu izsakot to ziņā procentos vai frakciju,
un tāpēc šeit tieši tas pats.
Es uzskatu par 2 zemākais, Apkopojot tos, nākamo 2 zemākais, Apkopojot tos,
kamēr man ir pilna koku.
Pat ja mēs varētu darīt vai nu veidā, kad mums ir darīšana ar procentiem,
tas nozīmē, ka mēs esam dalot lietas un nodarbojas ar decimāldaļām vai drīzāk pludiņi
ja mēs esam domājot par datu struktūrām ar galvu.
Ko mēs zinām par pludiņiem?
Kas izplatīta problēma, kad mums ir darīšana ar pludiņiem?
[Students] neprecīzs aritmētika. >> Jā. Neprecizitāte.
Sakarā ar peldošo komatu neprecizitātes, par šo PSET lai mēs pārliecinātos
ka mums nav zaudēt jebkādu vērtības, tad mēs tiešām gribam būt darīšana ar skaitu.
Tātad, ja Jums bija domāt par Huffman mezglā, ja paskatās atpakaļ uz struktūru šeit,
ja paskatās zaļos tas ir frekvenci saistīti ar to
kā arī tas norāda uz mezglu tā pa kreisi, kā arī mezglu savas tiesības.
Un tad sarkanā tiem tur arī ir raksturs saistītas ar tiem.
Mēs nebrauksim, lai veiktu atsevišķus tiem par vecākiem un tad gala mezgliem,
ko mēs saucam par lapām, bet gan tie, vienkārši ir NULL vērtības.
Par katru mezglu mums būs raksturs, simbols, ka mezgls ir,
tad biežumu, kā arī rādītāju uz kreisajiem bērnam, kā arī tās labās bērnu.
Lapas, kas ir pašā apakšā, būtu arī mezglu norādes
to pa kreisi un tiesības, bet kopš šīs vērtības nav norādot uz faktiskajiem mezgliem,
kāds būtu to vērtība var būt? >> [Students] NULL. >> NULL. Tieši tā.
Lūk, kā jūs varētu pārstāvēt frekvenci pludiņiem piemērs,
bet mēs gribam būt darīšana ar to ar veseliem skaitļiem,
tāpēc viss, ko es darīju, ir mainīt datu tipu tur.
>> Iesim uz mazliet vairāk no sarežģītas piemērs.
Bet tagad, ka mēs esam darījuši vienkāršām, tas ir tikai pats process.
Jūs atradīsiet arī 2 zemākās frekvences, Apkopojot frekvences
un tas ir jauns biežums jūsu mātes mezglā,
kas tad norāda uz to kreisi ar 0 filiāli un tiesības ar 1 filiāle.
Ja mums ir virkne "Tas ir CS50", tad mēs saskaitītu, cik reižu ir T minēts,
h minēts, i, s, c, 5, 0.
Tad ko es darīju šeit ir ar sarkanu mezglu es tikko iestādīti,
Es teicu, es esmu nāksies šīs zīmes beidzot apakšā manu koku.
Tiem ir būs visas lapām.
Tad ko es darīju, ir man sakārtoti tos pēc biežuma augošā secībā,
un tas ir faktiski tā, ka PSET kods to dara
ir tā veidu to ar frekvenci un pēc tam alfabēta.
Tātad tas ir skaitļus vispirms un pēc tam alfabētiski pēc biežuma.
Tad ko es varētu darīt, ir, es varētu atrast par 2 viszemākais. Tas ir 0 un 5.
Es jāsummē tos, un tas ir 2. Tad es varētu turpināt, atrast nākamo 2 viszemākais.
Tie ir divi 1s, un tad tie kļūst par 2, kā arī.
Tagad es zinu, ka mans nākamais solis būs pievienosies vismazākais skaits,
kas ir T, 1, un pēc tam izvēloties vienu no mezgliem, kas ir 2 kā biežumu.
Tātad šeit mums ir 3 iespējas.
Ko es esmu gatavojas darīt, lai slaidā ir tikai vizuāli pārkārtot tos jums
lai jūs varētu redzēt, kā es esmu celtniecības to.
Ko kods un jūsu izplatīšanas kods ir gatavojas darīt būtu pievienoties T 1
ar 0 un 5 mezglu.
Lai tad summas līdz 3, un tad mēs turpinātu šo procesu.
Ar 2 un 2 tagad ir viszemākais, lai tad tie, summa līdz 4.
Ikvienam pēc līdz šim? Labi.
Tad pēc tam mums ir 3 un 3, kas nepieciešams, ir jāsummē,
tāpēc atkal es esmu tikai pārejot tā, lai jūs varētu redzēt vizuāli tā, ka tas nav pārāk netīrs.
Tad mums ir 6, un tad mūsu pēdējais solis ir tagad, ka mums ir tikai 2 punktiem
Mēs summa tiem darīt saknes mūsu koks, kas ir par 10.
Un numurs 10 ir jēga, jo katrs mezgls pārstāvētas,
to vērtību, to biežums skaits, bija, cik reizes viņi parādījās virknē,
un tad mums ir 5 rakstzīmes mūsu virknes, lai jēga.
Ja mēs skatāmies uz augšu pie kā mēs varētu reāli kodēt to,
kā gaidīts, i un i, kas parādās visbiežāk
pārstāv vismazāko bitu skaits.
>> Esi uzmanīgs šeit.
Jo Huffman kokiem lieta faktiski jautājumiem.
Lielais S ir savādāka nekā mazo s.
Ja mums bija: "Tas ir CS50" ar lielajiem burtiem, tad mazie s parādīsies tikai divreiz,
būtu mezglu ar 2, jo tā vērtība, un tad lielais S būtu tikai vienu reizi.
Tātad tad jūsu koks varētu mainīt struktūru, jo jums tiešām ir papildu lapu šeit.
Bet summa joprojām būtu 10.
Ka tas, ko mēs patiesībā gribam būt zvanot kontrolsummu,
pievienojot visu skaita.
>> Tagad, ka mēs esam uz Huffman koki, mēs varam nodoties Huff'n Puff, tad PSET.
Mēs esam gatavojas sākt ar daļu no jautājumiem,
un tas ir gatavojas iegūt jums pieradis ar bināriem kokiem un kā darboties aptuveni ka:
zīmēšanas mezglus, izveidojot savu typedef struktūrai par mezglu,
un redzēt, kā jūs varētu ievietot bināro koku, viens, kas ir sakārtoti,
šķērso to, un lietas, piemēram, ka.
Ka zināšanas ir noteikti gatavojas palīdzēt jums, kad jūs pikējošais Huff'n Puff daļu
no PSET.
Ar standarta izdevumā PSET, jūsu uzdevums ir ieviest Puff,
un hakeru versiju jūsu uzdevums ir īstenot pukoties.
Kas Huff tas ir tas aizņem tekstu un pēc tam tas pārveido to par 0s un 1s,
lai process, ko mēs darījām iepriekš, kad mēs skaitīti frekvences
un tad veic koku un tad teica: "Kā es varu iegūt T?"
T pārstāv 100, lietām, piemēram, ka,
un tad Huff varētu veikt tekstu un tad izejas, ka bināro.
Bet arī tāpēc, ka mēs zinām, ka mēs vēlamies, lai mūsu adresātu sarakstā
atjaunot tieši tādu pašu koku, tā ietver arī informāciju par frekvenču skaitu.
Tad ar Puff mums ir dota bināro failu 0s un 1s
un ņemot vērā arī informāciju par frekvencēm.
Mēs tulkojam visas šīs 0s un 1s atpakaļ oriģinālā ziņojuma, kas bija,
tāpēc mēs esam decompressing ka.
Ja jūs darāt standarta versiju, jums nav nepieciešams, lai īstenotu pukoties,
tā, tad jūs varat izmantot personāla ieviešanu Huff.
Ir instrukcijas spec par to, kā to izdarīt.
Jūs varat palaist personāla ieviešanu Huff uz noteiktu teksta failu
un pēc tam izmantot šo produkciju kā savu ieguldījumu, lai dvesma.
>> Kā jau minēju iepriekš, mums ir daudz sadales kodu par šo vienu.
Es esmu gatavojas sākt iet caur to.
Es esmu gatavojas pavadīt lielāko daļu laika par. H faili
jo kas. c failiem, jo ​​mums ir. h
un kas nodrošina mūs ar funkciju prototipu,
mums nav pilnīgi nepieciešams, lai saprastu tieši -
Ja jūs nesaprotat, kas notiek ar. C failus, tad nav jāuztraucas pārāk daudz,
bet noteikti mēģināt paskatīties, jo tas varētu dot dažus padomus
un tas ir noderīgi, lai pierastu pie lasīšanas citu cilvēku kodu.
>> Aplūkojot huffile.h, jo komentārus tā deklarē slānis abstrakcijas par Huffman kodēta failus.
Ja mēs ejam uz leju, mēs redzam, ka ir no 256 simboliem maksimālais ka mums varētu būt nepieciešams kodus.
Tas ietver visus burtus alfabēta - lielie un mazie -
un tad simboli un skaitļi utt
Tad šeit mums ir burvju skaitu identificē Huffman kodējumu failu.
Ietvaros Huffman kodu viņi gatavojas ir zināma burvju numuru
saistīti ar galveni.
Tas varētu izskatīties tikai izlases burvju numuru,
bet, ja jūs tiešām to pārtulkot ASCII, tad tas tiešām ir skaidri noteikts pukoties.
Šeit mums ir struct par Huffman-kodētu failu.
Tur visas šīs īpašības saistītas ar Huff failu.
Tad noteikti šeit mums ir galveni Huff failu, tāpēc mēs to saucam Huffeader
nevis pievienojot papildu h, jo tas izklausās pats vienalga.
Gudrs.
Mums ir burvju skaitu saistīti ar to.
Ja tas ir faktiskā Huff failu, tas būs skaits augšas, šī burvju vienu.
Un tad tas būs masīvs.
Tātad par katru simbolu, kas ir 256,
tas notiek uzskaitīt kādām šīm simbolu frekvence ir robežās Huff failu.
Un tad beidzot, mums ir kontrolsummu attiecībā uz frekvencēm,
kas būtu summa šajās frekvencēs.
Tātad, tas ko Huffeader ir.
Tad mums ir dažas funkcijas, kas atgriež nākamo bitu, Huff failā
kā arī raksta mazliet uz Huff failu, un tad šī funkcija šeit, hfclose,
kas faktiski aizver Huff failu.
Pirms tam mums bija darīšana ar taisni tikai fclose,
bet, ja jums ir Huff fails, nevis fclosing to
ko jūs tiešām gatavojas darīt, ir hfclose un hfopen to.
Tie ir īpašas funkcijas uz Huff failiem ka mēs ejam, lai būtu darīšana ar.
Tad šeit mēs lasām galvenē un tad uzrakstiet galveni.
>> Tikai izlasot. H failu mēs varam veida nokļūt sajūtu, ko Huff fails varētu būt,
kādas īpašības tā, bet faktiski iet uz huffile.c,
kas, ja mēs ienirt, būs nedaudz sarežģītāka.
Tā ir visas failu I / O šeit nodarbojas ar norādes.
Šeit mēs redzam, ka tad, kad mēs saucam hfread, piemēram, tas joprojām nodarbojas ar fread.
Mēs esam ne atbrīvojoties no šīm funkcijām pilnībā, bet mēs nosūtām tiem jāņem aprūpi
iekšpusē Huff failu nevis dara visu par to paši.
Jūs varat justies brīvi, lai skenētu ar to, ja jūs esat ieinteresēti
un iet un mizas slānis muguras mazliet.
>> Nākamais fails, mēs ejam, lai apskatīt ir tree.h.
Agrāk Walkthrough slaidi mēs teicām, mēs sagaidām Huffman mezglu
un mēs, typedef struktūrai mezglā.
Mēs sagaidām, ka tas ir simbols, ar biežumu un tad 2 mezglu zvaigznēm.
Šajā gadījumā tas, ko mēs darām, ir tas būtībā tas pats
izņemot vietā mezgla mēs ejam, lai viņiem piezvanīt kokiem.
Mums ir funkcija, kas, ja jūs zvanīt veikt koku to atgriež jums koku rādītāju.
Atpakaļ uz Speller, kad Jums bija padarīt jaunu mezglu
jūs teicāt mezglu * jaunais vārds = malloc (sizeof) un lietas, piemēram, ka.
Būtībā, mktree tiek būs darīšana ar to jums.
Tāpat, ja jūs vēlaties, lai novērstu koku,
tā ka ir būtiski atbrīvojot koku, kad esat pabeidzis ar to,
instead of skaidri aicinot bezmaksas ka jūs faktiski tikai gatavojas izmantot šo funkciju rmtree
kur jūs iet uz rādītāju uz tā koka, un tad tree.c būs rūpēties par to, lai jums.
>> Mēs izpētīt tree.c.
Mēs sagaidām tās pašas funkcijas, izņemot redzēt īstenošanu, kā arī.
Kā mēs gaidīts, kad jūs zvanu mktree to mallocs lielumu kokā rādītājs,
initializes visas vērtības uz nulles vērtībā, tādēļ 0s vai nulls,
un pēc tam atgriež rādītāju uz šo koku, kas jūs esat tikko malloc'd jums.
Šeit, kad jūs zvanu noņemt koku vispirms pārliecinās, ka jūs esat ne dubultā atbrīvojot.
Tas nodrošina, ka jums tiešām ir koks, kuru vēlaties noņemt.
Šeit, jo koks ir arī savus bērnus,
Kas tas ir tas rekursīvi aicina likvidēt koks kreisajā mezgla koka
kā arī labo mezglu.
Pirms tā atbrīvo no vecākiem, tai atbrīvotu bērnus, kā arī.
Vecāki ir arī aizstājamas ar sakni.
Pirmais vecāks, tāpēc tāpat kā liels-liels-liels-vecvectēvs
vai vecmāmiņa koks, vispirms mums ir bezmaksas leju līmeni pirmās.
Tāpēc traversa uz leju, bez tiem, un pēc tam nāk atpakaļ uz augšu, bez tiem, uc
Tātad tas ir koks.
>> Tagad mēs apskatīt mežu.
Mežs ir, ja jūs vieta visiem jūsu Huffman kokiem.
Tas ir saprotams, ka mēs ejam, lai būtu kaut ko sauc gabals
kas satur rādītāju uz koku, kā arī rādītāju uz zemes gabala sauc nākamo.
Kāda struktūra dara šāda veida izskatās?
Tā veida saka tā tur.
Tiesības pār šeit.
Saistīts saraksts.
Mēs redzam, ka tad, kad mums ir gabals tas ir kā saistīts sarakstu gabaliem.
Mežs ir definēta kā saistīts sarakstu gabalu,
un tāpēc meža struktūra mēs esam tikai nāksies rādītāju uz mūsu pirmo gabals
un ka gabals ir koks tajā, vai drīzāk norāda uz koku
un tad norāda uz nākamo gabals, tā tālāk un tā tālāk.
Lai veiktu meža mēs saucam mkforest.
Tad mums ir daži diezgan noderīgas funkcijas šeit.
Mums ir uzņemt kur jūs iet mežā un tad atgriešanās vērtība ir koks *,
pointers uz koku.
Ko pick būs jādara, ir tas iet uz mežu, ka jūs esat norādot uz
Tad noņemiet koks ar zemāko frekvenci no šī meža
un tad jums rādītāju uz šo koku.
Kad jūs zvanu izvēlēties, koks nepastāv mežā vairs,
bet atgriešanās vērtība ir rādītājs uz šo koku.
Tad jums ir iekārta.
Ja jums iet ar rādītāju uz koku, kas ir ne-0 frekvenci,
ko iekārta būs jādara, ir tas prasīs mežā, veikt koku un augu ka koks iekšpusē mežā.
Šeit mums ir rmforest.
Līdzīgi kā novērst koku, kas pamatā atbrīvojušies visas mūsu koku mums,
noņemt mežā bez viss ietverts šajā mežā.
>> Ja mēs skatāmies uz forest.c, mēs sagaidām, lai redzētu vismaz 1 rmtree komandu tur,
jo, lai atbrīvotu atmiņu mežā ja mežs ir koki tajā,
tad beidzot jūs nāksies novērst šos kokus pārāk.
Ja mēs skatāmies uz forest.c, mums ir mūsu mkforest, kas, kā mēs sagaidām.
Mēs malloc lietas.
Mēs inicializēt pirmo gabals mežā par spēkā, jo tas ir tukšs, lai sāktu ar,
Tad mēs redzētu pick, kas atgriež koks ar zemāko svaru, zemākās frekvences,
un tad izpaužas atbrīvoties no konkrētā mezglā, kas norāda uz tā koka, un nākamo,
lai tā veic, ka no saistītā saraksta mežā.
Un tad šeit mums ir rūpnīcas, kas ievieto kokā saistītajā sarakstā.
Kas mežs tas ir tas labi saglabā tā sakārtoti, lai mums.
Un tad beidzot, mums ir rmforest un, kā plānots, mums ir rmtree sauc tur.
>> Raugoties uz sadales kodu šim, huffile.c bija iespējams līdz šim visgrūtāk saprast,
tā kā citi faili paši bija diezgan vienkārši sekot.
Ar mūsu zināšanas par norādes un saistīto saraksti un tādiem,
mums bija iespēja sekot diezgan labi.
Bet viss, kas mums nepieciešams, lai tiešām pārliecinātos, ka mēs pilnībā saprotam ir. H faili
jo jums ir nepieciešams būt aicinot tās funkcijas, kas nodarbojas ar šiem atgriešanās vērtībām,
tāpēc pārliecinieties, ka jūs pilnībā saprast, kādi pasākumi būs jāveic
kad tu sauc vienu no šīm funkcijām.
Bet patiesībā izpratne iekšpusē tā nav gluži nepieciešams, jo mums ir tiem. H failus.
Mums ir vēl 2 failus, kas palikuši mūsu izplatīšanas kodu.
>> Apskatīsim izgāztuves.
Dump ar savu komentāru šeit notiek Huffman-saspiestu failu
un tad pārvērš un izgāztuves visu tā saturu uzmanību.
Šeit mēs redzam, ka tas zvana hfopen.
Tas ir sava veida sasaucoties iesniegt * Ieejas = fopen,
un tad jums iet ar informāciju.
Tas ir gandrīz identiski, izņemot vietā failu * jūs iet ar Huffile;
vietā fopen jūs iet uz hfopen.
Šeit mēs lasām galvenē pirmais, kas ir veida līdzīga kā mēs lasīt galvenē
uz bitkartes failu.
Ko mēs darām šeit ir pārbaudīt, lai redzētu, vai galvenes informāciju
satur pareizo burvju numuru, kas norāda, ka tā ir faktiskā Huff fails,
tad visi šie pārbaudes, lai pārliecinātos, ka fails, ka mēs atveram ir faktiskā huffed failu vai ne.
Kas tas ir tas izejas frekvences visu simbolu, ka mēs varam redzēt
laikā termināla uz grafisko tabulā.
Šī daļa būs noderīga.
Tas ir mazliet un skan pamazām stājas mainīgo bitu un tad drukā to ārā.
Tātad, ja es būtu aicināt dump uz hth.bin, kas izriet no huffing failu
izmantojot personāla risinājumu, es varētu saņemt šo.
Tas outputting visiem šiem burtiem un tad liekot biežumu, kurā tie parādās.
Ja mēs skatāmies, vairums no tiem ir 0s izņemot šo: H, kas parādās divas reizes,
un tad T, kas parādās reizi.
Un tad šeit mums ir faktisko ziņu 0s un 1s.
Ja mēs skatāmies hth.txt, kas ir iespējams, sākotnējais ziņojums, kas tika huffed,
Mēs sagaidām, lai redzētu kādu HS un TS tur.
Konkrēti, mēs sagaidām, lai redzētu tikai T 1 un 2 HS.
Šeit mēs esam hth.txt. Tā patiešām ir HTH.
Iekļautas tur, gan mēs nevaram redzēt, ir newline raksturs.
The Huff fails hth.bin arī kodē newline raksturs, kā arī.
Šeit, jo mēs zinām, ka pasūtījums ir HTH un tad newline,
mēs varam redzēt, ka, iespējams H pārstāv tikai vienu 1
un tad T ir iespējams 01 un tad nākamo H 1, kā arī
un tad mums ir newline norāda ar diviem 0S.
Atdzist.
>> Un tad beidzot, jo mums ir darīšana ar vairākiem. C un. H failus,
mēs esam nāksies diezgan sarežģīts argumentu uz kompilators,
un tāpēc šeit mums ir Makefile kas padara dump jums.
Bet patiesībā, jums ir iet par padarot savu puff.c failu.
Makefaila faktiski nenodarbojas ar padarot puff.c jums.
Mēs esam atstājot, ka līdz jums, lai rediģētu Makefile.
Kad jūs ievadiet komandu, piemēram, darīt visu, piemēram, tas dos viņiem visiem jums.
Jūtieties brīvi apskatīt Makefile piemēriem no pagātnes PSET
kā arī dodas pie šo vienu, lai redzētu, kā jūs varētu veikt savu Puff failu
, rediģējot šo Makefile.
Tas ir par to, lai mūsu izplatīšanas kodu.
>> Kad esam tikuši cauri, ka tad šeit ir tikai citu atgādinājums
par to, kā mēs gribam būt darīšana ar Huffman mezgliem.
Mēs nebrauksim aicinās viņus mezgliem vairs, mēs gribam būt aicinot tos kokus
kur mēs ejam, lai būtu pārstāv savu simbolu ar palija,
biežumu, atkārtojumu skaitu, ar veselam skaitlim.
Mēs izmantojam, jo ​​tas ir precīzāka nekā apgrozāmos līdzekļus.
Un tad mums ir citu rādītāju pa kreisi bērnu, kā arī tiesības bērns.
Mežs, kā mēs redzējām, ir tikai saistīts saraksts koku.
Galu galā, ja mēs esam veidojot mūsu Huff failu,
Mēs vēlamies, lai mūsu meži, satur tikai 1 koks -
1 koks, 1 sakne ar vairākiem bērniem.
Agrāk, kad mēs bijām tikai padarīt mūsu Huffman kokus,
mēs sākām, novietojot visas mezglu uz mūsu ekrāna
un sakot mēs esam nāksies šos mezglus,
beidzot viņi būs lapas, un tas ir viņu simbols, tas ir viņu frekvence.
Mūsu mežā, ja mēs vienkārši ir 3 burti, kas ir mežs 3 kokiem.
Un tad, kā mēs iet tālāk, kad mēs pievienot pirmais mātes,
mēs, mežs 2 kokiem.
Mēs noņemt 2 no tiem bērniem no mūsu mežu un pēc tam aizstāt to ar mātes mezglā
kas bija tās 2 punktiem, kā bērniem.
Un tad beidzot, mūsu pēdējais solis, lai mūsu piemērs ar AS, BS, un Cs
būtu veikt galīgo vecāks,
un tā tad kas varētu sniegt mūsu kopējo skaitu koku mežā ar 1.
Vai visi redzētu, kā jūs sākt ar vairākiem kokiem savā mežā
un galu galā ar 1? Labi. Atdzist.
>> Kas mums jādara, lai Puff?
Kas mums jādara, ir nodrošināt, ka vienmēr, tie dod mums pareizo veidu ieejas
lai mēs faktiski var palaist programmu.
Šajā gadījumā viņi būs dodot mums pēc pirmā komandrindas argumentu
2 vairāk: fails, ko mēs vēlamies, lai atspiest un tās atspiests failu izeja.
Bet tad, kad mēs pārliecināmies, ka viņi iet mūs pareizajā apmērā vērtībām,
Mēs vēlamies nodrošināt, ka ieguldījums ir Huff failu vai ne.
Un tad, kad mēs garantējam, ka tas Huff failu, tad mēs vēlamies veidot mūsu koku,
veidot koku tā, lai tas atbilst koku ka persona, kas nosūtīja vēstījumu būvēts.
Tad, kad mēs veidot koku, tad mēs varam tikt galā ar 0s un 1s ka tie pieņemti,
sekot tiem līdzi mūsu koku, jo tas ir identisks,
un tad rakstīt, ka ziņu, kas, interpretēt biti atpakaļ simboli.
Un tad beigās, jo mums ir darīšana ar norādes šeit,
Mēs vēlamies, lai pārliecinātos, ka mums nav nekādas atmiņas noplūde
un ka mēs bez maksas viss.
>> Nodrošinot pareizu lietošanu ir vecs cepuru mums līdz šim.
Mēs uztveram ieejas, kas gatavojas būt vārds faila dvesma,
un tad mēs norādiet produkciju,
tāpēc faila nosaukums par miltu produkcijas, kas būs teksta failu.
Tas ir izmantošana. Un tagad mēs vēlamies nodrošināt, lai ievade huffed vai ne.
Atceroties, bija tur kaut kas ar sadales kodu, kas varētu palīdzēt mums
ar sapratni vai fails huffed vai ne?
Tur bija informācija huffile.c par Huffeader.
Mēs zinām, ka katrs Huff fails ir Huffeader saistīti ar to ar burvju numuru
kā arī masīvs par katru simbolu frekvencēm
kā arī kontrolsummu.
Mēs zinām, ka, bet mēs arī ņēma palūrēt dump.c,
kurā tas bija lasījumā par Huff failā.
Un tāpēc, lai izdarītu, bija jāpārbauda, ​​vai tas tiešām bija huffed vai ne.
Tāpēc varbūt mēs varētu izmantot dump.c kā struktūra mūsu puff.c.
Atpakaļ uz 4 PSET kad mums bija failu copy.c ka kopēts RGB trīskāršojas
un mēs interpretē ka detektīvromāns un mainīt,
Tāpat, ko jūs varētu darīt, ir vienkārši palaist komandu, piemēram, cp dump.c puff.c
un izmantot dažas no koda tur.
Tomēr, tas nav būs tik vienkārši no procesa
tulkošanai savu dump.c vērā puff.c,
bet vismaz tas dod jums kaut kur, lai sāktu
par to, kā nodrošināt, ka ieeja ir faktiski huffed vai ne
kā arī dažas citas lietas.
Mums ir jānodrošina, pareizu izmantošanu un nodrošināja, ka ieeja ir huffed.
Katru reizi, kad mēs esam darījuši, mēs esam darījuši pareizi kļūdu pārbaudi,
tāpēc atgriešanās un atmest šo funkciju, ja kāds sabojājas, ja tur ir problēma.
>> Tagad to, ko mēs vēlamies darīt, ir veidot faktisko koku.
Ja mēs skatāmies Forest, ir 2 galvenās funkcijas
ka mēs esam gatavojas vēlaties kļūt ļoti labi pārzina.
Tur Būla funkcija augs ka augi nav-0 frekvence koku iekšā mūsu mežā.
Un tā tur jums iet ar rādītāju uz mežu un rādītāju uz koku.
Ātrs jautājums: Cik meži būs jums, kad jūs esat celtniecības Huffman koku?
Mūsu mežu ir kā mūsu audekls, labi?
Tātad, mēs esam tikai gatavojas būt 1 mežs, bet mēs esam nāksies vairākus kokus.
Tātad, pirms jūs aicinu augu, jūs, iespējams, gatavojas vēlaties, lai jūsu mežu.
Ir komanda, kas, ja jūs apskatīt forest.h par to, kā jūs varat veikt mežu.
Jūs varat augu koku. Mēs zinām, kā to izdarīt.
Un tad jūs varat arī izvēlēties koku no meža,
noņemot koku ar mazāko svaru un sniedzot jums rādītāju uz to.
Domāšanas atpakaļ, kad mēs darām piemēri sevi,
kad mēs bijām zīmēšanas to ārā, mēs vienkārši vienkārši pievienot saites.
Bet šeit, nevis tikai pievienojot saites,
domā par to vairāk, kā jūs likvidējot 2 no šiem punktiem un tad aizstājot to ar vienu citu.
Paust, ka attiecībā uz picking un stādīšanas,
jūs pacelt 2 koki un tad stādīt citu koku
kas ir tās 2 kokus, kas jums ir palielinājies par bērniem.
Lai izveidotu Huffman ir koks, jūs varat lasīt simbolu un frekvences, lai
jo Huffeader dod, ka jums,
sniedz jums masīvs frekvences.
Tātad jūs varat iet uz priekšu un vienkārši ignorēt kaut ar 0 tajā
jo mēs nevēlamies 256 lapiņas beigās tā.
Mēs tikai vēlamies skaitu lapām, kas ir rakstzīmes
kas ir faktiski izmantoti failā.
Jūs varat lasīt šādu simbolu, un katrs no šiem simboliem, kas ir ārpus 0 frekvences,
tie ir būs koki.
Ko jūs varat darīt, ir katru reizi, kad jūs lasīt bez 0 frekvenču simbolu,
Jūs varat augu, kas koku mežā.
Tiklīdz jūs stādīt kokus mežā, jūs varat pievienoties šos kokus kā vecvecākus,
lai iet atpakaļ uz stādīšanas un pacelt, kur jums izvēlēties 2 un tad augu 1,
ja, ka 1 kas jums augs ir vecāks par 2 bērni, kas jums noplūktiem.
Tātad, tad jūsu gala rezultāts būs viens koks savā mežā.
Tas ir, kā jūs veidot savu koku.
>> Ir vairākas lietas, kas varētu noiet greizi šeit
jo mums ir darīšana ar padarot jaunus kokus un nodarbojas ar norādes un lietām, piemēram, ka.
Pirms kad mēs būtu darīšana ar norādes,
kad mēs malloc'd mēs vēlējāmies, lai pārliecinātos, ka tā nav atgriešanās mums NULL rādītājs vērtību.
Tāpēc vairākos posmos procesa ietvaros ir būs būt vairāki gadījumi
kur jūsu programma varētu neizdoties.
Ko jūs vēlaties darīt, ir jūs vēlaties, lai pārliecinātos, ka jūs rīkoties šīs kļūdas,
un spec saka rīkoties ar tām graciozi,
tāpēc gribētu izdrukāt ziņu lietotājam stāstīt viņiem, kāpēc programma ir atmest
un tad nekavējoties atmest to.
Lai veiktu šo kļūdu apstrādi, atcerieties, ka jūs vēlaties, lai pārbaudītu to
katru reizi, ka tur varētu būt neveiksme.
Katru reizi, kad jūs gūstat jaunu rādītāju
Jūs vēlaties, lai pārliecinātos, ka tas ir veiksmīgs.
Pirms ko mēs izmantojām darīt, ir veikt jaunu rādītāju un malloc to,
un tad mēs varētu pārbaudīt, vai šis rādītājs ir NULL.
Tātad ir būs daži gadījumi, kad jūs varat vienkārši darīt, ka,
bet reizēm jūs faktiski aicinot funkciju
un šajā funkciju, tas ir viens, kas dara šo mallocing.
Šajā gadījumā, ja mēs atskatāmies uz kādu no funkcijām kodā,
daži no tiem ir Būla funkcijas.
Jo abstraktu gadījumā, ja mums ir Būla funkciju sauc foo,
Būtībā, mēs varam pieņemt, ka papildus dara visu foo dara,
jo tas ir Būla funkcija, tā atgriež patiess vai nepatiess -
taisnība, ja veiksmīga, false, ja nav.
Tāpēc mēs vēlamies, lai pārbaudītu, vai atgriešanās vērtību foo ir patiess vai nepatiess.
Ja tas ir nepatiess, tas nozīmē, ka mēs spēsim vēlaties izdrukāt kādu ziņu
un tad atmest programmu.
Ko mēs vēlamies darīt, ir pārbaudīt atgriezto vērtību foo.
Ja foo atgriež nepatiess, tad mēs zinām, ka mums radās sava veida kļūda
un mums vajag atmest mūsu programmu.
Veids, kā to izdarīt, ir ir slimība, kad faktiskā funkcija pati ir Jūsu stāvoklis.
Say foo uzņem x.
Mēs varam būt par nosacījumu, ja (foo (x)).
Būtībā, tas nozīmē, ka, ja gada beigās izpildes foo tas atgriež taisnība,
tad mēs varam darīt, jo funkcija ir izvērtēt foo
lai novērtētu visu stāvokli.
Tātad, tad tas, kā jūs varat kaut ko darīt, ja funkcija atgriež patiess un ir veiksmīga.
Bet, kad tu esi kļūdu pārbaude, jūs tikai vēlas atmest, ja jūsu funkcija atgriež nepatiess.
Ko jūs varētu darīt, ir vienkārši pievienot == nepatiess vai vienkārši pievienot sprādziena tā priekšā
un tad jums ir, ja (! foo).
Šajā institūcijā šī nosacījuma jūs būtu visu kļūdu apstrādi,
tā patīk, "Nevar izveidot šo koku" un pēc tam atgriezties 1 vai kaut kas tamlīdzīgs.
Ko tas dara, lai gan, ir tas, ka pat ja foo atgriezās nepatiess -
Say foo atgriež taisnība.
Tad jums nav, lai izsauktu foo vēlreiz. Tas ir kopīgs nepareizs.
Jo tas bija jūsu stāvoklī, tas jau jāizvērtē,
tāpēc jums jau ir rezultāts, ja jūs izmantojat veikt koku vai kaut kas tamlīdzīgs
vai augu vai pick vai kaut.
Tas jau ir šo vērtību. Tas jau izpildīts.
Tātad, tas ir lietderīgi izmantot Būla funkcijas kā nosacījumu
jo vai jūs faktiski izpildīt ķermeņa cilpas,
tā izpilda funkciju vienalga.
>> Mūsu otrais pēdējais solis ir rakstīt ziņu uz failu.
Kad mēs veidojam Huffman koku, tad rakstot ziņu uz failu, ir diezgan vienkārši.
Tas ir diezgan vienkārši, tagad vienkārši sekot 0s un 1s.
Un tā pēc vienošanās mēs zinām, ka ir Huffman Tree 0s norāda uz kreisās
un 1s norāda tiesības.
Tātad tad, ja jūs lasīt pamazām, katru reizi, jums ir 0
jūs sekot kreiso filiāli, un tad katru reizi, kad jūs lasīt ir 1
jūs gatavojas sekot pareizo filiāli.
Un tad jūs gatavojas turpināt līdz jūs hit lapu
jo lapas ir būs beigās filiālēm.
Kā mēs varam pateikt, vai mēs esam hit lapu vai ne?
Mēs teicām agrāk.
[Students] Ja norādes ir NULL. >> Jā.
Mēs varam pateikt, ja mēs esam hit lapu, ja norādes gan uz kreiso un labo koki ir NULL.
Perfekta.
Mēs zinām, ka mēs vēlamies lasīt pamazām mūsu Huff failā.
Kā mēs redzējām agrāk dump.c, ko viņi darīja, ir viņi lasa pamazām uz Huff failā
un vienkārši izdrukāt, kādi ir šie biti bija.
Mēs neesam gatavojas darīt to. Mēs ejam, lai darīt kaut ko, kas ir nedaudz sarežģītāka.
Bet tas, ko mēs varam darīt, ir, mēs varam pieņemt, ka mazliet kodu, kas skan uz biti.
Šeit mums ir veselu mazliet raksturo kārtējo mazliet, ka mēs esam par.
Tas rūpējas par atkārtojot visu lietas materiālos bitu līdz jūs hit beigām failu.
Balstoties uz to, tad jūs gatavojas vēlaties, lai būtu sava veida iterator
traversa savu koku.
Un tad, pamatojoties uz to, vai bits ir 0 vai 1,
jūs gatavojas vēlaties, lai nu pārvietot, ka iterator pa kreisi vai pārvietot to uz pareizā
galam, līdz jūs hit lapiņu, tāpēc visu ceļu līdz šim mezglam, ka jūs par
nenorāda uz kādu vairāk mezglu.
Kāpēc mēs varam izdarīt ar Huffman failu, bet ne Morzes kodu?
Jo Morzes kodu tur mazliet neskaidrības.
Mēs varētu būt, piemēram, ak jāgaida, mēs esam hit vēstuli pa ceļu, tāpēc varbūt tas ir mūsu vēstule,
tā kā, ja mēs turpinājās tikai mazliet ilgāk, tad mēs būtu hit citu vēstuli.
Bet tas nav gatavojas notikt Huffman kodēšanas,
lai mēs varētu būt droši, ka vienīgais veids, ka mēs ejam, lai hit raksturs
ir tad, ja šis mezgls ir pa kreisi un pa labi bērni ir NULL.
>> Visbeidzot, mēs gribam, lai atbrīvotu visas mūsu atmiņas.
Mēs vēlamies, lai gan gandrīz Huff failu, ka mēs esam bijuši saistīti ar
kā arī noņemt visus mūsu meža kokiem.
Pamatojoties uz jūsu īstenošanu, jūs, iespējams, gatavojas vēlaties, lai izsauktu noņemt mežs
nevis faktiski iet cauri visiem kokiem pats.
Bet, ja jūs veicāt kādas pagaidu koki, jūs vēlaties, lai atbrīvotu to.
Jūs zināt savu kodu vislabāk, lai jūs zināt, kur tu esi piešķirot atmiņu.
Un tā, ja jūs iet, jāsāk ar pat kontroles F'ing par malloc,
redzot, kad jūs malloc un pārliecinoties, ka jūs bez visiem, kas
bet tad tikai iet caur savu kodu,
sapratni kur jūs varētu būt piešķirti atmiņu.
Parasti jūs varētu vienkārši pateikt: "Pēc faila es esmu tikai gatavojas likvidēt mežu manā mežā,"
tāpēc būtībā skaidrs, ka atmiņas, bezmaksas ka,
", Un tad es esmu arī gatavojas slēgt lietu, un tad mana programma gatavojas pamest."
Bet ir tā, ka tikai laiks, ka jūsu programma aizveras?
Nē, jo dažreiz tur varētu būt kļūda, kas noticis.
Varbūt mēs nevarējām atvērt failu vai mēs nevarētu veikt citu koku
vai kādu kļūdu veida noticis atmiņas sadales procesu un tā tas atgriezās NULL.
Kļūda notika, un tad mēs atgriezāmies un atmest.
Tātad, tad jūs vēlaties, lai pārliecinātos, ka jebkurš iespējamais laiks, ka jūsu programma var atmest,
Jūs vēlaties, lai atbrīvotu visu savu atmiņu tur.
Tas nav tikai būs pašās beigās no galvenā funkcija, kas jūs atmest savu kodu.
Jūs vēlaties, lai atskatītos uz katru piemēram, ka kods potenciāli varētu atgriezties priekšlaicīgi
un tad bez jebkāda atmiņas jēga.
Say jums bija aicinājis veikt mežu un atgriezās nepatiess.
Tad jūs, iespējams, nebūs nepieciešams, lai novērstu jūsu mežs
jo jums nav mežs vēl.
Bet katrā brīdī kodu, kur jūs varētu atgriezties priekšlaicīgi
Jūs vēlaties pārliecināties, ka jūs bez jebkādas iespējamās atmiņu.
>> Tātad, ja mums ir darīšana ar atbrīvojot atmiņu un kam iespējamos noplūdes,
Mēs vēlamies ne tikai izmantot savu spriedumu un mūsu loģika
bet arī izmantot Valgrind lai noteiktu, vai mēs esam atbrīvojušies visas mūsu atmiņas pareizi vai ne.
Jūs varat vai nu palaist Valgrind par Puff un tad jums ir, lai arī nodot to
Tiesības skaits komandrindas argumentus Valgrind.
Jūs varat palaist to, bet rezultāts ir mazliet noslēpumains.
Mēs esam gotten mazliet izmanto, lai to ar Speller, bet mums vēl mazliet vairāk palīdzēt,
tā tad rādīt to ar vēl pāris karogiem piemēram noplūdes pārbaudīt = pilns,
kas, iespējams, dotu mums kādu vairāk noderīgi produkciju Valgrind.
>> Tad vēl viens noderīgs padoms, ja jūs atkļūdošana ir diff komandu.
Jūs varat piekļūt personāla ieviešanu Huff, palaist, ka uz teksta failu,
un tad izejas to uz bināro failu, binārā Huff failu, ir īpaša.
Tad, ja jūs vadāt savu dvesma par šo bināro failu,
tad ideāli, jūsu izvadīt teksta fails būs identiski
ar sākotnējo vienu, ka jūs pagājis collas
Šeit es esmu, izmantojot hth.txt kā piemērs, un tas ir viens runāja par jūsu spec.
Tas ir burtiski tikai HTH un tad newline.
Bet noteikti justies brīvi un jūs noteikti aicināti izmantot garākus piemērus
Jūsu teksta failu.
>> Jūs pat varat veikt nošauta pie varbūt saspiežot un tad decompressing
dažas lietas, kas jums izmanto Speller piemēram Karš un miers
vai Džeinas Ostinas vai kaut kas tamlīdzīgs - tas būtu veida atdzist - vai Austin Powers,
veida nodarbojas ar lielākiem failiem, jo ​​mēs nebūtu nonākuši pie tā
ja mēs izmantojām nākamo rīku šeit, Ls-l.
Mēs esam izmanto ls, kas būtībā ir uzskaitītas visas saturu mūsu pašreizējā direktorijā.
Aizrit karoga-l faktiski parāda lielumu šiem failiem.
Ja jūs iet cauri PSET spec, tas tiešām iet jums pa izveidojot bināro failu,
gada huffing to, un jūs redzēsiet, ka ļoti maziem failiem
telpa izmaksas saspiežot to un tulkojot visu šo informāciju
visu frekvenču un lietām, piemēram, ka atsver faktiskais ieguvums
saspiežot failu pirmajā vietā.
Bet, ja jūs palaist to uz dažām ilgāka teksta failus, tad jūs varētu redzēt, ka jūs sākat, lai saņemtu kādu labumu
saspiežot šos failus.
>> Un tad beidzot, mums ir mūsu vecā draugs GDB, kas ir noteikti gatavojas noderēs pārāk.
>> Vai mums ir kādi jautājumi par Huff kokiem vai process varbūt padarīt kokus
vai kādi citi jautājumi par Huff'n Puff?
Labi. Es palikšu apkārt mazliet.
>> Paldies, visiem. Tas bija Walkthrough 6. Un labu veiksmi.
>> [CS50.TV]