[Powered by Google Translate] [Walkthrough - problemą, 6] [Zamyla Chan - Harvardo universiteto] [Tai CS50. - CS50.TV] Sveiki, visi, ir sveiki atvykę į Walkthrough 6: Huff'n Puff. Huff'n Puff tai, ką mes darome, yra ketiname būti susijusios su Hafmano suspaustą failą ir tada skleisdamas jį atgal į viršų, todėl dekompresowania jį, , kad galėtume versti iš 0s ir 1s, kad vartotojas siunčia mums ir konvertuoti jį atgal į originalo tekstą. Pset 6 bus gana kietas, nes jūs ketinate pamatyti kai kurias iš priemonių, , kuriuos naudojote 4 pset ir pset 5 ir rūšis, sujungti juos į 1 gana tvarkingas koncepcija kai tu atėjai, galvoti apie tai. Taip pat, be abejo, pset 4 ir 5 buvo labiausiai sudėtinga psets, kad mes siūlome. Taigi nuo šiol, mes turime šį 1 Daugiau pset C, ir po, kad mes interneto programavimo. Taigi sveikinu save gauti per sunkiausias kupra CS50. Permainos Huff'n Puff mūsų Įrankiai šio pset bus Huffman medžiai, todėl suprasti ne tik kaip dvejetainiai medžiai darbą, bet taip pat specialiai Huffman medžius, kaip jie pastatyti. Ir tada mes ketiname turėti platinimo kodo šiame pset daug, ir mes atėjo pamatyti, kad iš tikrųjų kai kurie kodų sistemai gali būti neįmanoma iki galo suprasti dar, ir taip bus c failai, bet tada lydintys h failai duos mums pakankamai supratimo, kad mums reikia, kad mes žinome, kaip šios funkcijos veikia arba bent jau tai, ką jie turėtų daryti - jų įėjimai ir išėjimai - net jei mes nežinome, kas vyksta juodojoje dėžėje arba nesuprantate, kas vyksta "black box", per. Ir galiausiai, kaip įprasta, mes susiduriame su naujais duomenų struktūras, konkrečių rūšių mazgų, atkreipti dėmesį į tam tikrus dalykus, ir todėl čia ne tik projektavimo procesą, rašiklį ir popieriaus ir kai jūs bandote išsiaiškinti, kaip jūsų pset turėtų dirbti bet taip pat derinimo metu. Jūs galite turėti gdb šalia rašiklį ir popieriaus, o jūs imtis žemyn, kokios vertybės, kur yra jūsų rodyklės nukreipta, ir dalykų, pavyzdžiui, kad. Pirmiausia leiskite pažvelgti Huffman medžių. Huffman medžiai yra dvejetainiai medžiai, tai reiškia, kad kiekvienas mazgas turi tik 2 vaikus. Huffman medžių charakteristika yra ta, kad dažniausios reikšmės atstovauja Mažiausiai bitų. Matėme paskaitų pavyzdžių Morzės abėcėle, kokios konsoliduotų kai kurių raidžių. Jei jūs bandote versti A arba E, pavyzdžiui, jūs versti, kad dažnai, todėl vietoj to, kad naudoti pilną bitais skirta mums įprasto duomenų tipą, galite suspausti jį žemyn, kad mažiau ir tada tie laiškai, kurie atstovauja rečiau yra atstovaujama su ilgiau bitų , nes galite sau leisti, kad, kai jūs pasveriama dažnius, kad tokiomis raidėmis. Mes turime tą pačią idėją čia Huffman medžių kur mes darome grandinę, keliu natūra gauti tam tikrų ženklų. Ir tada simbolius, kurie turi didžiausią dažnį bus atstovaujama su mažiausiai bitų. Taip, kad jūs statyti Huffman medis pateikiant visų ženklų, kad tekste ir skaičiuojant jų dažnumą, kaip dažnai jie atrodo. Tai gali būti arba skaičius, kiek kartų tos raidės yra arba galbūt iš procentas visų simbolių, kiek kiekvienas iš jų atrodo. Ir taip, ką jūs darote yra, kai jūs turite visus to apibudino, tada jums atrodo 2 žemiausių dažnių ir tada prisijungti prie jų broliai ir seserys, kur tada patronuojanti mazgas turi dažnį, kuris yra jos 2 vaikais suma. Ir tada jūs pagal susitarimą sako, kad kairė mazgas, jums sekti, kad po 0 filialą, ir tada dešinė mazgas 1 filialas. Kaip matėme Morzės abėcėle, vienas kabliuko, kad jei turėjo tik pyptelėjimą ir Beep tai buvo dviprasmiškas. Jis gali būti arba 1 raidė arba ji gali būti iš 2 raidžių seka. Ir kas Huffman medžiai, nes pagal savo pobūdį iš simbolių ar mūsų galutiniai faktiniai ženklai yra paskutinis ant šakos mazgai - mes vadiname kaip lapai - remiantis tuo, kad negali būti jokių dviprasmybių laiškas, kurį bandote koduoti bitų serijos nes niekur kartu bitai, kurie atstovauja 1 raidė jūs susitinkate kitą visą laišką ir nebus bet kokios painiavos. Bet mes eiti į pavyzdžių, kad jus vaikinai iš tikrųjų galite pamatyti, kad vietoj mums tik sakau, kad tai tiesa. Pažvelkime Hafmano medžio paprastas pavyzdys. Turiu eilutę čia, kad yra 12 simbolių. Turiu 4 Kadangi 6 BS, ir 2 CS. Mano pirmas žingsnis būtų suskaičiuoti. Kiek kartų atrodo? Atrodo, 4 kartus į eilutę. B atrodo 6 kartus, o C atrodo 2 kartus. Žinoma, aš ruošiuosi pasakyti, aš naudoju B dažniausiai, todėl aš noriu atstovauti B su mažiausiai bitų skaičius, kuo mažiau 0s ir 1s. Ir tada aš taip pat ketina tikėtis C, taip pat reikalauti, kad labiausiai suma 0s ir 1s. Pirma, ką aš čia, aš pasidėjau jas didėjančia tvarka pagal dažnumą. Mes matome, kad C ir, jie yra mūsų 2 mažiausios dažniai. Mes sukursime patronuojanti mazgas, ir ta patronuojanti mazgas neturi laišką, su juo susijusios, tačiau ji turi dažnį, kuris yra suma. Suma tampa 2 + 4, kuris yra 6. Sekame paskui kairįjį filialą. Jeigu mes buvo, kad 6 mazgo, tada mes paseks 0 patekti į C ir tada gauti 1 A. Taigi dabar mes turime 2 mazgų. Mes turime vertė Vertė 6 ir tada mes taip pat turime kitos mazgas vertės 6. Ir taip 2 yra ne tik 2 mažiausios, o tik 2, kurie liko, todėl mes prisijungti prie kito iš tėvų, su suma yra 12. Taigi čia mes turime Huffman medis kur gauti B, kad būtų tiesiog bit 1 ir tada gauti mes norėtume turėti 01 ir tada C, turintys 00. Taigi čia matome, kad iš esmės mes atstovaujame šiuos simbolius su 1 arba 2 bitai kur B, kaip prognozuojama, mažiausiai. Ir tada mes tikėjomės C turi labiausiai, bet kadangi ji tokia maža Huffman medis, tada taip pat atstovauja 2 bitai, o ne kažkur per vidurį. Tiesiog eiti per kitą paprastą pavyzdį Hafmano medžio, tarkime, jūs turite eilutę "Hello". Ką jūs darote, yra pirmasis galėtumėte pasakyti, kiek kartų H rodomi? H vieną kartą ir tada e atrodo vieną kartą ir tada mes turime l nesimatytų du kartus o pasirodo tik vieną kartą. Ir taip, tada mes tikimės, kad laiškas būti atstovaujamos mažiausiai bitų skaičius? [Studentas] l. >> L. Taip. l yra teisinga. Mes tikimės, l, kad jam būtų atstovaujama mažiausių bitų skaičius nes l į eilutę "Hello". Ką aš ruošiuosi padaryti dabar atkreipti dėmesį į šiuos mazgus. Turiu 1, kuris yra H, o tada dar 1, kuris yra e, tada A 1, kuris O dabar aš jų išleidimą, kad ir po to 2, kuris yra l. Tada aš sakau, taip, kad aš sukurti Huffman medį rasti 2 mazgų su mažiausiai dažnių ir padaryti juos broliai ir seserys, patronuojanti mazgas. Čia mes turime 3 mazgus su žemiausio dažnio. Jie visi 1. Taigi čia mes pasirinkti, kurį vieną mes ketiname susieti 1.. Tarkime, aš pasirinksiu H ir e. Suma 1 + 1 yra 2, bet šis mazgas neturi laišką, su juo susijusios. Jis tiesiog turi vertę. Dabar pažvelgsime artimiausius 2 žemiausių dažnių. Štai 2 ir 1. Tai gali būti arba iš tų 2, bet aš ruošiuosi pasirinkti šį vieną. Suma yra 3. Ir galiausiai, aš tik 2 left, kad tada, kuris tampa 5. Tai čia, kaip ir tikėtasi, jei man užpildyti, kad kodavimo, 1s visada teisę filialas ir 0s yra kairė. Tada mes turime l, sudaro tik 1 bit ir tada THE O 2 ir tada iš 2, E ir H nukrenta iki 3 bitai. Todėl jūs galite perduoti šį pranešimą "Labas", o ne faktiškai naudojant simbolius tik 0s ir 1s. Tačiau atminkite, kad kai kuriais atvejais mes turėjome ryšius su mūsų dažnumą. Galėjo arba prisijungė prie H ir pirmąjį THE O gal. Arba vėliau, kai mes turėjome 2 atstovaujama l taip pat prisijungė prie vienos atstovaujama 2, mes galime sieja vieną. Ir todėl, kai jūs siunčiate 0s ir 1s, kad iš tiesų negarantuoja kad paslaugų gavėjas galėtų visiškai skaityti jūsų pranešimą Iškart nes jie gali nežinoti, kuris sprendimas, kurį padarė. Taigi, kai mes susiduriame su Hafmano suspaudimo, kažkaip mes turime pasakyti, kad mūsų žinios gavėją, kaip mes nusprendėme - Jie turi žinoti, kažkokia papildoma informacija be suspausto pranešimo. Jie turi suprasti, kas iš tikrųjų atrodo kaip medis, kaip mes iš tikrųjų šiuos sprendimus. Šiuo atveju buvo tik tai, apie faktinį kiekį pagal pavyzdžius, bet kartais jums taip pat gali turėti Huffman medis pagal nurodytą dažnumą raidės yra, ir jis yra lygiai toks pats procesas. Čia aš išreikšti procentais arba mažiau, ir todėl čia lygiai toks pats dalykas. Manau, kad 2 iš mažiausių, apibendrinti juos, kitas 2 žemiausias, apibendrinti juos, kol aš visą medį. Net jei mes ir galėjome tai padaryti bet kuriuo atveju, kai mes susiduriame su procentais, tai reiškia, kad mes dalijant dalykų ir, susijusius su po kablelio, arba, o plūdės jei mes galvojame apie duomenų struktūrų galvos. Ką mes žinome apie plūdės? Kas yra dažna problema, kai mes susiduriame su plūdžių? [Studentas] Netiksliai aritmetika. >> Taip. Netikslumas. Dėl slankiojo kablelio netikslumo, šį pset, kad, kad mes pasirūpinsime, kad kad mes neturime prarasti bet kokią vertę, tada mes iš tikrųjų ketiname būti susijusios su skaičiavimo. Taigi, jei jūs galvoti apie Hafmano mazgas, jei pažvelgti atgal struktūros čia, jei peržvelgsite žaliųjų dažnį su juo susijusios taip pat atkreipia dėmesį į savo kairę mazgas, taip pat jos teisės mazgas. Ir tada raudona jų ten taip pat turi simbolį, susiję su jais. Mes neketiname pateikti atskirus tie, tėvų ir tada galutinių mazgų, mes vadiname kaip lapai, o tik tos, turės tik NULL verčių. Kiekvienam mazgas mes turime simbolį, simbolis, kad mazgas reiškia, tada dažnis taip pat rodyklė, kairėje vaikui, taip pat jo dešinėje vaikui. Lapai, kurie yra pačioje apačioje, taip pat turėtų mazgas patarimų jų kairėje, o dešinėje, bet ir nuo tos vertės nėra nukreipta į faktinius mazgų, koks būtų jų vertė? >> [Studentas] NULL. >> NULL. Tiksliai. Štai pavyzdys, kaip galima atstovauti dažnį plaustai, bet mes ketiname būti susijusios su sveikaisiais skaičiais, kad viskas, ką aš padariau, tai pakeisti duomenų tipą. Eikime šiek tiek daugiau sudėtingos pavyzdyje. Bet dabar, kad mes padarėme paprastų, tai tik tą patį procesą. Jums susirasti 2 žemiausias dažnius, apibendrinti dažnius ir kad savo patronuojančiai mazgas naują dažnių, kuris nurodo kairėje su 0 filialas ir teisė 1 filialas. Jei mes turime eilutę "Tai yra CS50," tada mes suskaičiuoti, kiek kartų yra t paminėta, h minėta, i, S, C, 5, 0. Tada, ką aš čia su raudona mazgų, aš ką tik pasodinti, Man sakė, kad aš ruošiuosi šiuos simbolius galiausiai mano medžio apačioje. Tie, kurie bus visi lapų. Tada, ką aš padariau, aš juos surūšiuoti pagal dažnį didėjančia tvarka, ir iš tikrųjų tai yra būdas, kad ji pset kodas ji rūšiuoja ją dažnį ir tada abėcėlę. Taigi ji turi numerius ir tada abėcėlės tvarka pagal dažnumo. Tada, ką daryčiau, norėčiau rasti 2 žemiausias. Štai 0 iki 5. Norėčiau apibendrinti juos, ir kad 2. Tada aš norėčiau tęsti, rasti kitą 2 žemiausias. Tai yra du 1s, ir tada tie tampa 2, taip pat. Dabar aš žinau, kad mano kitas žingsnis bus prisijungti prie mažiausią skaičių, T, 1 ir tada pasirinkti vieną iš mazgų, kad turi 2 periodiškumą. Taigi čia mes turime 3 variantų. Ką aš ruošiuosi daryti skaidrę tik vizualiai pertvarkyti juos už jus , kad jūs galite pamatyti, kaip aš ji yra kuriama. Kas kodą ir savo platinimo kodas ketina daryti būtų prisijungti prie T 0 ir 5 mazgas. Taip, tada, kad sumos iki 3, ir tada mes tęsti šį procesą. 2 ir 2 dabar yra žemiausias, taigi tada tie suma iki 4. Kiekvienas po kiek? Gerai. Tada po to mes turime 3 ir 3, kuri turi būti pridėta, todėl vėl aš funkcija gali naudotis tik taip, kad jūs galite pamatyti vizualiai, kad jis neturi gauti pernelyg nepatogus. Tada mes turime 6 ir tada mūsų galutinis žingsnis yra dabar, kad turime tik 2 mazgų mes apibendrinti, kad mūsų medžio šaknies, kuris yra 10. Ir skaičius 10 turi prasmę, nes kiekvienas mazgas atstovaujama jų vertė, jų dažnumą, kiek kartų jie pasirodė į eilutę, ir tada mes turime mūsų eilutę 5 simbolius, kad tai turi prasmę. Jei pažvelgsime, kaip mes iš tikrųjų užkoduoti tai, kaip ir tikėtasi, i ir s, kuri pasireiškia dažniausiai atstovauja mažiausiai bitų skaičius. Būkite atsargus čia. Huffman medžių atveju tiesų svarbu. Didžiąsias S kitoks nei mažosiomis s. Jei mes turėjome "Tai CS50" didžiosiomis raidėmis, tada mažosiomis ai rodomi tik du kartus, būtų mazgas su 2 kaip jos vertę, ir tada didžiąsias S būtų tik vieną kartą. Taip, tada medis pasikeistų struktūros, nes jūs iš tikrųjų turite papildomų lapų čia. Tačiau suma vis tiek būtų 10. Kad tai, ką mes iš tikrųjų bus paskambinus kontrolinė, visų grafų papildymas. Dabar, kad mes, kuriems Huffman medžius, mes galime pasinerti į Huff'n Puff, pset. Mes ketiname pradėti nuo klausimų skyriuje, ir tai vyksta jums pripratę su dvejetainiai medžiai ir kaip veikia aplink, kad: braižybos mazgai, kurti savo Typedef struct mazgas, ir pamatysite, kaip jūs galite įterpti į dvejetainis medis, vienas, kad yra rūšiuojami, važiuoja, ir dalykų, pavyzdžiui, kad. Kad žinios yra tikrai ketina padėti jums, kai jums pasinerti į Huff'n Puff dalis pset. Standartinis leidimas į pset, jūsų užduotis yra įgyvendinti Puff, hacker versija jūsų užduotis yra įgyvendinti Huff. Tai, ką daro Huff jis užima tekstą, o tada jis paverčia jį į 0s ir 1s, taigi procesas, kad mes padarėme anksčiau, kur mes skaičiuojami dažniai ir tada padarė medį ir sakė: "Kaip aš galiu gauti T?" T atstovaujamos 100, dalykai kaip, kad ir tada Huff tekstą, o tada išėjimo, kad dvejetainis. , Bet taip pat dėl ​​to, kad mes žinome, kad norite leisti mūsų Pranešimo gavėjas atkurti tą patį medį, ji taip pat apima informaciją apie dažnių skaičiaus. Tada su Puff mes dvejetainis failas 0s ir 1s ir atsižvelgiant į apie dažnių informaciją. Verčiame visų tų 0s ir 1s atgal į pirminį pranešimą, kuris, todėl mes dekompresowania kad. Jei jūs darote Standard Edition, jums nereikės įgyvendinti Huff taip, tada galite tiesiog naudokite personalo įgyvendinimą Huff. Čia rasite instrukcijas apie tai, kaip padaryti, kad spec. Galite paleisti personalo įgyvendinimą Huff tam tikru tekstinį failą ir tada naudoti tą srovę, kaip jūsų indėlį į Puff. Kaip jau minėjau anksčiau, mes turime daug platinimo kodo šį vieną. Aš ruošiuosi pradėti vyksta per ją. Aš ruošiuosi išleisti didžiąją laiko dalį h failai nes C failus, nes mes turime h ir kad suteikia mums funkcijų prototipų, mes ne iki galo reikia tiksliai suprasti - Jei jūs nesuprantate, kas vyksta į C failus, tada nereikia nerimauti per daug, bet tikrai pabandyti pažvelgti, nes jis gali duoti keletą patarimų ir tai naudinga priprasti skaityti kitų žmonių kodą. Žiūri huffile.h, ji pareiškia pastabas, abstrakcijos sluoksnis Huffman-koduotų failų. Jei mes einame, mes matome, kad yra ne daugiau kaip 256 simbolių, kad mums gali prireikti kodus. Tai apima visus abėcėlės raides - didžiąsias ir mažąsias - ir tada, simboliai ir skaičiai, ir tt Tada čia mes turime Magiškas skaičius, kuriose Huffman koduotą failą. Per Hafmano kodą jie ketina turėti tam tikrą magišką skaičių susijęs su antraštę. Tai gali atrodyti tik atsitiktinai Magiškas skaičius, tačiau, jei jūs iš tikrųjų jį išversti į ASCII, tada ji iš tikrųjų yra išsamiai išdėstytos Huff. Čia mes turime Hafmano užkoduotą failą struct. Yra visų šių savybių, susijusių su Huff failą. Tada žemyn čia mes turime už Huff failo antraštę, todėl mes jį vadiname Huffeader , o ne pridedant papildomų h, nes skamba tas pats vistiek. Mielas. Mes turime Magiškas skaičius, su juo susijusios. Jei tai tikrasis Huff failas, tai bus skaičius iki pirmiau, ši stebuklinga. Ir tada jis turės masyvą. Taigi, kiekvieno simbolio, kurių yra 256, tai važiuoju į sąrašą, ką iš šių simbolių dažnis yra per Huff failą. Ir galiausiai, turime už dažnių kontrolinė, kuris turėtų būti šiais dažniais suma. , Kad Huffeader. Tada mes turime tam tikras funkcijas, kad grįžti kitą tiek į Huff failą rašo, taip pat šiek tiek į Huff failą, ir tada ši funkcija čia, hfclose, kad iš tikrųjų uždaro Huff failą. Anksčiau, mes buvo susijusios su tiesiu tik fclose tačiau, kai jūs turite Huff failą, o ne jį fclosing tai, ką jūs iš tikrųjų ketinate daryti yra hfclose ir hfopen jį. Tie, kurie specifines funkcijas, kurios Huff failus, kad mes ketiname būti susijusios su. Tada čia mes skaitome į antraštę ir tada rašyti antraštę. Tiesiog skaitant failą h mes galime natūra gauti, ką Huff failas gali būti jausmą, kokie bruožai ji, be faktiškai vyksta į huffile.c , jei mes pasinerti bus šiek tiek sudėtingesnis. Jis turi visas bylos, I / O čia, susijusius su rodykles. Čia mes matome, kad, kai mes vadiname hfread, pavyzdžiui, jis vis dar susiduriame su fread. Mes ne gauti atsikratyti šių funkcijų visiškai, bet mes siunčiame būti pasirūpinta viduje Huff failą, o tai visi jos patikimumo. Galite jaustis laisvai nuskaityti per, jei esate smalsus ir išeina, ir žievelės sluoksnio atgal šiek tiek. Kitas failas, kad mes ketiname pažvelgti į tree.h. Prieš Walkthrough skaidres sakėme tikėtis Huffman mazgas Typedef struct mazgas. Mes tikimės, kad ji turi simbolį, dažnį ir tada 2 mazgas žvaigždes. Šiuo atveju tai, ką mes darome, yra tai iš esmės tas pats išskyrus vietoj mazgo mes ketiname juos vadinti medžiai. Mes turime funkciją, kuri, kai skambinate, kad medis ji grąžina jums medis žymeklį. Atgal, kad Speller, kai buvo padaryti naują mazgas jūs sakėte mazgas * naujas žodis = malloc (sizeof) ir dalykų, pavyzdžiui, kad. Iš esmės, mktree ketina būti susijusios su, kad už jus. Be to, kai norite pašalinti medį, kad iš esmės atlaisvinus medį, kai baigsite su juo, vietoj aiškiai paskambinus nemokamai, jūs iš tikrųjų tik ketinate naudoti šią funkciją rmtree kur jums perduoti žymiklį į tą medį, ir tada tree.c rūpinsis tai už jus. Mes žvelgiame į tree.c. Mes tikimės, kad tas pačias funkcijas išskyrus pamatyti įgyvendinimą, taip pat. Kaip ir tikėjomės, kai skambinate mktree mallocs medžio dydį į rodykle, inicijuoja visas reikšmes į nulinę vertę, todėl 0S ar nulls, ir tada grąžina žymiklį į tą medį, kad jūs tiesiog malloc'd jums. Čia, kai skambinate pašalinti medį ji pirmą kartą, įsitikinkite, kad jūs ne dvigubai atlaisvinti. Ji užtikrina, kad jūs iš tikrųjų turi medį, kurį norite pašalinti. Čia, nes medis taip pat savo vaikus, Kas tai yra rekursyviai ragina pašalinti medį kairėje medžio mazgo taip pat teisinga mazgas. Prieš tai išlaisvina tėvų, ji turi išlaisvinti vaikus, taip pat. Patronuojanti įmonė yra sukeičiami su šaknies. Pirmasis iš tėvų, todėl, pavyzdžiui, puikiai puikiai puikiai puikiai senelis ar močiutė medis, pirmiausia mes turime išlaisvinti lygiai pirmą kartą. Taigi feed į apačią, nemokamai tiems, ir tada grįžti, nemokama tiems, ir tt Taigi, kad medis. Dabar mes ieškome miške. Miškas yra, kur jūs įdėti savo Huffman medžių. Jis sako, kad mes ketiname turėti kažką vadinama sklypas kad yra žymiklį į medį, taip pat žymiklį į sklypo vadinamas kitą. Kokią struktūra daro tokią atrodyti? Tai tipo sako, kad ji ten. Teisė čia. Susijęs sąrašas. Mes matome, kad kai mes turime sklypą, kaip susijęs sklypų sąrašą. Miškas yra apibrėžiamas kaip susietą sklypų sąrašą, ir todėl miško struktūra, mes tiesiog teks rodyklę į mūsų pirmojo sklypo ir kad sklypas per medį ar veikiau nurodo į medį ir tada nurodo į kitą sklypą, taip toliau ir taip toliau. Į mišką mes vadiname mkforest. Tada mes turime keletą gana naudingų funkcijų. Mes turime pasirinkti, kai pereisite į mišką ir tada grąžina vertė yra medis *, rodyklė į medį. Ką pasiimti darys, tai bus eiti į mišką, kad Jūs nurodote, tada pašalinti medį su žemiausio dažnio ir nuo tos miško ir tada duoti jums žymiklį į tą medį. Kai skambinate pasiimti, medis nėra miške nebėra, bet grąžina vertė yra rodyklė į tą medį. Tada jūs turite gamyklą. Su sąlyga, kad jums perduoti žymiklį į medį, kuris turi ne-0 dažnį, kokia elektrinė bus padaryti tai užtruks mišką, medį, ir augalų, kad viduje miško medžių. Čia mes turime rmforest. Panašus pašalinti medį, kuris iš esmės nepanaudota visų mūsų medžių, mums, pašalinti mišką nemokamai viskas, esančius tame miške. Jei pažvelgsime į forest.c, mes tikimės pamatyti bent 1 rmtree komandą ten, nes, kad atlaisvintumėte atminties, tarp miškų, jei miško medžius, tada galiausiai jūs ketinate per pašalinti tuos medžius. Jei pažvelgsime į forest.c, mes turime mkforest, o tai, kaip mes tikimės. Mes malloc dalykų. Mes inicijuoti pirmąjį pripažinimo netekusiais miško sklypas, nes jis tuščias pradėti, tada mes matome pasirinkti, kuri grąžina į medį su mažiausiu svoriu, žemiausio dažnio, ir tada gauna atsikratyti tos konkrečios mazgo, kad atkreipia dėmesį į tą medį, o kitą, todėl reikia, kad iš miško susietą sąrašą. Ir tada čia mes turime augalas, kuris įterpia į susietą sąrašą medis. , Ką miškas tai gražiai saugo ją surūšiuoti mums. Ir galiausiai, turime rmforest ir, kaip tikimasi, turime rmtree pakvietė ten. Žiūri paskirstymo kodas iki šiol, huffile.c tikriausiai buvo bene sunkiausia suprasti, kadangi kitų failų patys buvo gana paprasta laikytis. Su mūsų žinias apie nurodymus ir susijusių sąrašų ir tokių, mes galėjome sekti gana gerai. Bet visi mes turime tikrai įsitikinti, kad mes visiškai suprantame, yra H failai nes jums reikia paskambinus šias funkcijas, susijusius su šiais grąžinti reikšmes, todėl įsitikinkite, kad jūs visiškai suprasti, kokių veiksmų bus atliekamas kai skambinate vieną iš šių funkcijų. Bet iš tikrųjų suprasti viduje ji yra ne visai būtina, nes mes turime tuos val failai. Mes turime 2 daugiau failų į kairę mūsų platinimo kode. Leiskite pažvelgti į sąvartyną. Sąvartynas savo komentarą čia trunka Huffman-suspaustą failą ir tada verčia ir išverčia visas jo turinys. Čia mes matome, kad jis skambina hfopen. Tai rūšies atvaizdį į failą * Įvesties = fopen, ir tada jums perduoti informacijos. Tai beveik identiški, išskyrus vietoj failą * jūs, einančios į Huffile; vietoj fopen jūs artimųjų hfopen. Čia mes skaitome, kurios antraštėje yra pirmasis, kuris panašus į, kaip mes skaitome, kurios antraštėje yra natūra rastrinio formato failą. Ką mes darome čia tikrina, siekdama išsiaiškinti, ar antraštės informaciją turi teisę Magiškas skaičius, kuris rodo, kad tai tikrasis Huff failą, tada visi iš tų patikrinimų, siekiant užtikrinti, kad byla, kad mes atidaryti yra tikrasis huffed failą, ar ne. Kas tai yra, ji išveda visų simbolių, kad mes galime pamatyti dažnius per terminalo į grafinę lentelėje. Ši dalis bus naudinga. Ji turi šiek tiek ir skamba šiek tiek šiek tiek į Variable Bit ir išspausdina jį. Taigi, jei aš skambinti į hth.bin sąvartynas, kuris yra huffing failą naudojant personalo tirpalas, aš norėčiau gauti. Jis išvedė iš šių simbolių ir tada pradėti dažnį, kuriuo jie pateikiami. Jei pažvelgsime, dauguma jų yra 0s išskyrus: H, pasirodo du kartus, ir tada T, kuris pasirodo kartą. Ir tada čia mes turime faktinį pranešimą, 0s ir 1s. Jei pažvelgsime į hth.txt, kuris yra turbūt originalus pranešimas, kad buvo huffed mes tikimės pamatyti kai SS ir TS ten. Konkrečiai, mes tikimės pamatyti tik 1 T ir 2 hs. Čia mes esame hth.txt. Jis iš tiesų yra HTH. Įtraukti į ten, nors mes negalime matyti, yra naujos eilutės simboliai. Huff failas hth.bin taip pat koduojamas naujos eilutės simboliai taip pat. Čia, nes mes žinome, kad pavedimas yra HTH, ir tada naują eilutę, matome, kad turbūt H atstovauja tik vieną 1 ir tada T tikriausiai 01 ir tada kitas H 1, taip pat ir tada mes turime naujos eilutės nurodė du 0s. Cool. Ir galiausiai, nes mes susiduriame su išsėtine c ir h failus, mes ketiname turėti gana sudėtingą argumentą kompiliatorių, ir todėl čia mes turime Makefile, kuri leidžia jums sąvartynas. Bet iš tikrųjų, jūs turite eiti apie tai savo puff.c bylą. Faktiškai neturi Makefile spręsti su priėmimo puff.c jums. Mes palikti, kad iki jums redaguoti Makefile. Kai įvedate komandą, kaip kad visi, pavyzdžiui, kad visi jie už jus. Nesivaržykite pažvelgti į Makefile pavyzdžių iš praeities pset taip pat vyksta ne šį vieną, kad pamatytumėte, kaip jums gali būti suteikta, kad jūsų Puff failą redaguodami šį Makefile. Štai apie tai mūsų platinimo kodas. , Kai mes Dotarłeś per tą, tai čia tik dar vienas priminimas apie tai, kaip mes ketiname būti susijusios su Huffman mazgų. Mes neketiname būti vadindamas juos mazgai nebėra, mes ketiname būti vadindami juos "medžiai kur mes einame atstovaus savo char simbolį, jų dažnumas, įvykių skaičius, su sveikojo skaičiaus. Mes naudojame, nes tai tiksliau nei plūdės. Ir tada mes turime kitą žymeklį į kairę vaikui, taip pat teisinga vaiko. Miško, kaip matėme, yra tik susieta sąrašas medžių. Galiausiai, kai mes sukurti mūsų Huff failą mes norime, kad mūsų miškas yra tik 1 medis - 1 medis, 1 root su keliais vaikų. Anksčiau, kai mes buvome tik kad mūsų Huffman medžius, mes pradėjome pateikdamas visus mazgų ant mūsų ekrane ir sako: mes ketiname turėti šiuos mazgus, galiausiai jie bus lapai, ir tai yra jų simbolis, tai yra jų dažnis. Mūsų miškų, jei mes tiesiog turime 3 raides, kad 3 medžių miško. Ir tada kaip mes einame, kai mes pridėjome pirmąjį tėvų, mes padarėme 2 medžių mišką. Mes pašalinome 2 iš šių vaikų iš mūsų miškų ir tuomet jį pakeitė su patronuojančia mazgas , kurie turėjo tuos 2 mazgų kaip vaikai. Ir galiausiai, mūsų paskutinis žingsnis, kad mūsų pavyzdys su AS, BS, ir Cs būtų galima atlikti galutinį tėvų, ir taip, tada, kad būtų pasiekti mūsų bendrą skaičių medžių miške iki 1. Ar visi pamatysite, kaip jums pradėti su keliais savo miško medžių ir galų gale su 1? Gerai. Cool. Ką mes turime daryti Puff? Tai, ką mes turime padaryti, yra užtikrinti, kad, kaip visada, jie suteikia mums teisę tipo įėjimo taip, kad mes iš tikrųjų gali paleisti programą. Šiuo atveju jie bus mums duoda po pirmojo komandų eilutės argumento 2 daugiau: failas, kad mes norime išskleisti ir Išspausti Failo produkcija. Bet kai mes įsitikinkite, kad jie pereina mums reikiamu kiekiu vertybių, mes norime užtikrinti, kad įvesties Huff byla, ar ne. Ir tada, kai mes garantuojame, kad tai Huff failą, tada mes norime sukurti mūsų medelį, sukurti medį taip, kad jis atitinka medį, kad asmuo, kuris nusiuntė pranešimą pastatytas. Tada, kai mes sukurti medį, tada mes galime spręsti 0s ir 1s, kad jie išlaikė, sekti palei mūsų medžio, nes jis identiškas, ir tada parašyti šį pranešimą, interpretuoti bitai atgal į simbolių. Ir tada pabaigoje, nes mes susiduriame su rodyklės čia, mes norime įsitikinti,, kad mes neturime jokių Atminties nutekėjimas ir kad mes nemokamai viskas. Užtikrinti tinkamą naudojimą yra sena skrybėlę mums iki šiol. Mes priimti vieną iš įvesties duomenų, kurie bus Bylos pavadinimas sluoksniuotos, ir tada mes nurodyti produkciją, todėl pūsto produkcija, kuri bus tekstinis failas, failo pavadinimas. Štai naudojimas. Ir dabar mes norime užtikrinti,, kad įvesties huffed arba ne. Mintys atgal, ten buvo nieko platinimo kodą, kuri galėtų padėti mums suprasti, ar failas yra huffed, ar ne? Ten buvo informacija huffile.c apie Huffeader. Mes žinome, kad kiekvienas Huff failas turi Huffeader su juo susijusios su Magiškas skaičius taip pat kiekvieno simbolio dažnių masyvas taip pat kontrolinė. Mes žinome, kad, bet mes taip pat atkreipė žvilgtelėti dump.c , kurioje jis buvo skaityti į Huff failą. Ir taip padaryti, kad ji turėjo patikrinti, ar jis tikrai buvo huffed ar ne. Taigi, galbūt galėtume naudoti dump.c kaip struktūra mūsų puff.c. Grįžti į pset 4, kai mes turėjome, kad nukopijuotą RGB triviečiai failo copy.c ir mes aiškinama, kad Detektīvromāns ir dydį, panašiai, ką galite padaryti tiesiog paleisti kaip cp dump.c puff.c komandą naudotis kai kodo ten. Tačiau, tai nebus taip paprasta, proceso už vertimą savo dump.c į puff.c bet bent jau suteikia jums kažkur pradėti apie tai, kaip užtikrinti, kad įėjimas yra iš tikrųjų huffed ar ne taip pat keletą kitų dalykų. Mes turime užtikrinti, tinkamą naudojimą ir užtikrinti, kad įvesties huffed. Kiekvieną kartą, kai mes padarėme, kad mes padarėme mūsų tinkamą klaidų tikrinimas, taip grąžinimo ir mesti funkciją, jei kai gedimas atsiranda, jei yra problema. Dabar tai, ką mes norime padaryti, tai sukurti tikrą medį. Jei pažvelgsime miške, yra 2 pagrindinės funkcijos kad mes ketiname norite tapti labai gerai susipažinęs su. Būlio funkcija augalų, kad augalai ne-0 dažnis viduje mūsų miškų medžių. Ir todėl jums perduoti žymiklį į mišką ir rodyklė į medį. Greitas klausimas: Kiek miškai Jūs turėsite, kai kuriate Huffman medį? Mūsų miškas yra kaip mūsų drobės, tiesa? Taigi mes tik ketina turėti 1 mišką, bet mes ketiname turėti keletą medžių. Taigi prieš jus paraginti gamyklą, jūs tikriausiai ketinate norite, kad jūsų mišką. Yra komandos, kad jei pažvelgti į forest.h, kaip jūs galite padaryti su mišku. Galite pasodinti medį. Mes žinome, kaip tai padaryti. Ir tada taip pat galite pasirinkti medį iš miško, pašalinti medį su mažiausiu svoriu ir duoti jums žymeklį. Mintys atgal, kai mes darome pateiktuose pavyzdžiuose save, kai mes buvome piešimo jį, mes tiesiog nuorodas. Bet čia, o ne tiesiog pridedant ryšius, galvoti apie tai, kaip jūs pašalinti 2 šių mazgų ir tada pakeisti jį kitu. Pareikšti, kad skynimas ir sodinamosios jūs perkate 2 medžius ir tada sodinti kitą medį , kad turi tuos 2 medžius, pasirinktą kaip vaikai. Sukurti Huffman medį, galite perskaityti simbolių ir dažnius, kad būtų , nes Huffeader suteikia, kad jums, suteikia jums dažnių masyvas. Todėl jūs galite eiti į priekį ir tiesiog ignoruoti, nieko 0 nes mes nenorime, 256 lapų ne jo pabaigoje. Mes tik norime lapai, kurie yra simbolių skaičių kad yra iš tikrųjų naudojami prie bylos medžiagos. Galite perskaityti šių simbolių, ir kiekviena iš šių simbolių, kurie ne-0 dažnius, kurie bus medžiai. , Ką galite padaryti, tai kiekvieną kartą, kai jūs skaitote ne-0 dažnių simboliu, galite pasodinti medį, kad miške. Kai jūs sodinti medžių miške, galite prisijungti prie šių medžių kaip broliai ir seserys, todėl grįžta sodinti ir skinti, kur jums pasirinkti 2 ir tada įmonės 1 kur, kad 1, kad augalas yra iš 2 vaikus, pasirinktą patronuojanti. Taip, tada jūsų galutinis rezultatas bus vienas medis savo miško. Štai, kaip jums sukurti savo medį. Yra keletas dalykų, kurie gali suklysti čia nes mes susiduriame su naujus medžius ir sprendžiant su nurodymus ir panašių dalykų. Anksčiau, kai mes buvo susijusios su rodyklės, kai mes malloc'd mes norėjome įsitikinti, kad ji negrįžo mums NULL rodyklė vertę. Taigi, keliais etapais, šio proceso metu bus keletas atvejų kur yra jūsų programa gali žlugti. Ką jūs norite daryti yra jūs norite įsitikinti, kad jums tvarkyti šias klaidas, ir spec sako, elgtis su jais grakščiai, Taigi, kaip atsispausdinti žinutę vartotojui, pasakoja jiems, kodėl ši programa turi mesti ir skubiai mesti jį. Norėdami tai padaryti klaidų, nepamirškite, kad jūs norite check it kiekvieną kartą, kad galėtų būti gedimas. Kiekvieną kartą, kad jūs kuriate naują žymeklį jūs norite įsitikinti,, kad būtų sėkmingai. Prieš ką mes naudojamas padaryti, tai naują žymeklį ir malloc jį, ir tada mes patikrinti, ar, kad žymeklis yra NULL. Taigi, ten bus keletas atvejų, kai jūs galite tiesiog padaryti, kad, bet kartais jūs iš tikrųjų raginama funkciją ir per tą funkciją, kad vienas, kad daro mallocing. Tuo atveju, jei mes žiūrime atgal į kai kurias funkcijas, per kodą, kai kurie iš jų yra Būlio funkcijų. Abstrakčios atveju, jei mes turime Bulio funkcija vadinama foo iš esmės, mes galime manyti, kad to daryti visa, kas foo nėra , nes tai Būlio funkcijos, ji grąžina true arba false - tiesa, jei jis bus sėkmingas, false, jei ne. Taigi, mes norime patikrinti, ar gražinama reikšmė foo yra true arba false. Jei klaidingai, tai reiškia, kad mes ketiname norite spausdinti kažkokį pranešimą ir tada uždarykite programą. Ką mes norime padaryti, tai patikrinti grąžinimo vertę foo. Jei foo grąžina neteisingas, tada mes žinome, kad mes susidūrėme su tam tikrą klaidų ir mes turime mesti mūsų programą. Būdas tai padaryti yra būklė, kai faktinė pati funkcija yra Jūsų būklė. Pasakykite foo imasi x. Mes galime turėti kaip sąlyga, jei (foo (x)). Iš esmės, tai reiškia, kad jei ne vykdyti foo pabaigoje jis grąžina true, tada mes galime tai daryti, nes funkcija turi įvertinti foo siekiant įvertinti visą sąlygą. Taip, tada tai, kaip jūs galite padaryti kažką, jei ši funkcija grąžina true ir yra sėkmingas. Bet kai esate klaidų tikrinimas, jūs tik norite išeiti, jei jūsų funkcija grąžina neteisingas. Ką galite padaryti tiesiog pridėkite == FALSE arba tiesiog pridėti sprogimo priešais jį ir tada jūs turite if (! foo). Per tą šios sąlygos kūną, jums reikės visų klaidų, taip patinka, "Nepavyko sukurti šį medį", o tada 1 ar kažką panašaus, kad grįžti. Kas, kad nėra, nors, yra tai, kad nors foo grįžo klaidingas - Pasakykite foo grąžina true. Tada jūs neturite skambinti foo vėl. Tai yra paplitusi klaidinga nuomonė. , Nes ji buvo savo būklę, tai jau įvertino, , kad jūs jau turite rezultatą, jei jūs naudojate medį ar kažką panašaus, kad ar augalų ar pasiimti ar kažką. Ji jau turi šią vertę. Tai jau įvykdytas. Todėl naudinga pasinaudoti Būlio funkcijas, su sąlyga, nes, ar jūs iš tikrųjų vykdyti kilpos kūną, ji vykdo šią funkciją vistiek. Mūsų antrasis paskutiniame žingsnyje Rašydami pranešimą į failą. Kai mes sukurti Huffman medį, tada raštu pranešimą į failą yra gana paprasta. Tai gana paprasta, dabar tiesiog atlikite 0s ir 1s. Ir taip mes žinome, kad pagal susitarimą Hafmano medžio 0s nurodyti paliko 1s rodo į dešinę. Taigi tada, jei jūs skaityti po truputį, kiekvieną kartą, kad jūs gaunate 0 , jums kairįjį filialą, ir tada kiekvieną kartą, kai jūs skaitote santykiu 1 jūs ketinate laikytis tinkamą filialas. Ir tada jūs ketinate ir toliau, kol paspausite lapą nes lapai bus ne filialų pabaigoje. Kaip mes galime pasakyti, ar mes nukentėjo lapą, ar ne? Mes sakėme anksčiau. [Studentas] Jei rodykles yra NULL. >> Taip. Mes galime pasakyti, jei mes nukentėjo, jei rodykles į kairę ir į dešinę medžių lapų yra NULL. Tobula. Mes žinome, kad mes norime skaityti po truputį į mūsų Huff failą. Kaip matėme prieš dump.c, ką jie padarė, jie skaityti po truputį į Huff failą ir tiesiog atspausdinti, ką tie bitai buvo. Mes neketiname daryti, kad. Mes ketinate daryti kažką, kad šiek tiek sudėtingesnis. Bet tai, ką mes galime padaryti, mes galime imtis šiek rašoma, kad kodo fragmentą, kuris. Čia mes turime sveikuoju skaičiumi, kuris išreiškia dabartines tiek, kad mes šiek tiek. Iteravimu visi bylos bitų rūpinasi, kol paspausite failo pabaigoje. Remiantis, kad tada jūs ketinate nori turėti tam tikrą Iterator natūra feed savo medį. Ir tada ar bitas yra 0 arba 1, jūs ketinate norite, arba judėti, kad Iterator į kairę arba perkelti jį į dešinę visą kelią, kol paspausite lapų, todėl visą kelią iki to mazgo, kad esate nenurodo, bet daugiau mazgų. Kodėl mes galime tai padaryti su Hafmano failas, o ne Morzės abėcėlė? Nes Morzės kodas yra šiek tiek neaiškumų. Gali būti, pavyzdžiui, O laukti, mes nukentėjo laišką pakeliui, tai gal tai yra mūsų laiškas, o jei mes ir toliau tik šiek tiek ilgiau, tada mes būtume nukentėjo kitą laišką. Bet, kad nesiruošia atsitikti Hafmano kodavimas, todėl mes galime būti tikri, kad vienintelis būdas, kad mes ketiname, kad pasiektų simbolį Šis mazgas kairę ir dešinę vaikai yra NULL. Galiausiai, mes norime išlaisvinti mūsų atmintyje. Mes norime, kad artimas Huff failo, kad mes buvo susijusios su , taip pat pašalinti iš mūsų miškų medžių. Remiantis savo įgyvendinimo, jūs tikriausiai ketinate norite skambinti pašalinti mišką o ne iš tikrųjų vyksta per visus medžių sau. Tačiau, jei jūs padarėte kokius nors laikinus medžius, jūs norite nemokamai, kad. Jūs žinote geriausiai savo kodą, kad jūs žinote, kur jūs skiriant atmintį. Ir todėl, jei jūs einate į, pradėti net kontroliuoti F'ing už malloc matyti, kai jūs malloc ir įsitikinkite, kad jums atlaisvinti visa tai bet tada tiesiog išgyvena savo kodą, suprasti, kur jūs galite skyrė atmintis. Paprastai galite tiesiog pasakyti "failo pabaigoje aš tiesiog ketinate pašalinti mišką savo miško," todėl iš esmės aišku, kad atmintis, nemokama, kad "Ir tada aš taip pat ketina uždaryti failą ir tada mano programa ketina mesti". Bet tai, kad tik laiko, kad jūsų programa baigia darbą? Ne, nes kartais gali buvo klaida, kad atsitiko. Gal mes negalėjo atidaryti failą arba mes negalėjome padaryti kitą medį arba įvyko kažkoks klaidų atminties paskirstymo procese ir todėl jis grįžo NULL. Įvyko klaida, ir tada mes sugrįžo ir mesti. Taip, tada jūs norite įsitikinti, kad bet koks galimas laikas, kad jūsų programa gali mesti, norite išlaisvinti visus jūsų atminties. Tai ne tik bus ne galo pagrindinės funkcijos, kad jūs mesti savo kodą. Norite atrodyti, kad kiekvienu atveju, kad jūsų kodas potencialiai gali grįžti anksti ir tada kokia atminties prasmę. Pasakykite, vadino mišką ir grįžo klaidinga. Tada jums tikriausiai nereikia ištrinti savo mišką nes jūs neturite mišką. Tačiau kiekviename kode taško, kur jūs galite grįžti anksti jūs norite įsitikinti, kad jums nemokamai bet kokį galimą atmintį. Taigi, kai mes susiduriame su atlaisvinti atmintį ir galimiems nutekėjimams, mes norime ne tik naudoti savo sprendimą ir mūsų logika bet taip pat naudoti Valgrind nustatyti, ar mes išlaisvino visus mūsų atmintyje tinkamai, ar ne. Jūs galite paleisti Valgrind ant Puff ir tada taip pat turite perduoti jį teisę komandinės eilutės argumentai Valgrind. Galite paleisti, tačiau produkcija yra šiek tiek paslaptingas. Mes Dotarłeś šiek tiek priprasti prie jo su Speller, bet mes vis dar reikia šiek tiek daugiau pagalbos, taip, tada paleisti jį su keletą vėliavomis, pavyzdžiui, nuotėkio patikrinti = visas, kad tikriausiai duoti mums šiek tiek daugiau naudingos Valgrind išvesties. Tada dar vienas naudingas patarimas, kai jūs derinti skirt komanda. Galite prieiti prie darbuotojų įgyvendinimą Huff, paleisti, kad tekstiniame faile, ir tada išvesti jį į dvejetainis failas, dvejetainis Huff failo, turi būti konkretus. Tada, jei jūs naudojate savo inhaliacijas tą dvejetainis failas, tada idealiai, jūsų sklidusiam tekstinis failas bus identiškas į pradinį vienas, kad jūs išlaikėte. Čia aš naudojant hth.txt kaip, pavyzdžiui, ir tai yra vienas kalbėjo apie savo spec. Kad pažodžiui tik HTH, ir tada naują eilutę. Bet tikrai jaustis laisvi ir jūs tikrai skatinami naudoti ilgesnius pavyzdžius jūsų tekstinį failą. Jūs netgi galite imtis ne gal suspaudžiant fotografiją ir tada dekompresowania kai kurių failų, kuriuos, pavyzdžiui, "Karas ir taika naudojamų Speller arba Jane Austen ar kažkas panašaus - kad būtų tipo kietas - Austin Powers, natūra, susijusius su didesniais failus, nes mes ne ateiti į ją jei mes naudojome kitą įrankį, ls-l. Esame įpratę prie LS, kuris iš esmės nurodytos visos mūsų einamojo katalogo turinį. Einančios vėliavos-l, iš tikrųjų rodo šių failų dydį. Jeigu jūs einate per pset spec, ji iš tikrųjų walks jus per sukurti dvejetainis failas, huffing jį, ir pamatysite, kad labai mažų failų vietos išlaidos suspaudimą, ir versti visus šios informacijos visų dažnių ir dalykų, pavyzdžiui, kad didesnė faktinė nauda suspaudžiant failą į pirmąją vietą. Bet jei jūs naudojate jį vienur ilgiau tekstinius failus, tada jūs galite pamatyti, kad jūs pradėtumėte gauti tam tikros naudos, suspaudžiant tuos failus. Ir pagaliau, mes turime senas drauguži gdb, kuris yra tikrai ketina praversti. Ar mes turime klausimų Huff medžių arba procesas, galbūt priimant medžius arba bet kokius kitus klausimus apie Huff'n Puff? Gerai. Zatrzymam aplink šiek tiek. Ačiū visiems. Tai buvo Walkthrough 6. Ir geros kloties. [CS50.TV]