1 00:00:00,000 --> 00:00:02,210 [Powered by Google Translate] [Kiirtutvustus - Ülesanded 6] 2 00:00:02,210 --> 00:00:04,810 [Zamyla Chan - Harvardi Ülikool] 3 00:00:04,810 --> 00:00:07,240 [See on CS50. - CS50.TV] 4 00:00:07,240 --> 00:00:12,180 >> Tere kõigile ja tere tulemast kiirtutvustus 6: Huff'n Puff. 5 00:00:12,180 --> 00:00:17,440 Aastal Huff'n Puff mida me teeme läheb tegelevad Huffman tihendatud fail 6 00:00:17,440 --> 00:00:20,740 ja siis puhitamine seda uuesti üles, nii mahalaadimine see, 7 00:00:20,740 --> 00:00:25,810 nii et saame tõlkida 0. ja 1s et kasutaja saadab meile 8 00:00:25,810 --> 00:00:30,660 ja teisendada see tagasi esialgse teksti. 9 00:00:30,660 --> 00:00:34,360 Pset 6 kavatse olla päris lahe, sest sa lähed näha mõned tööriistad 10 00:00:34,360 --> 00:00:41,730 , mida kasutasid pset 4 ja pset 5 ja omamoodi ühendab neid arvesse 1 päris kena mõiste 11 00:00:41,730 --> 00:00:43,830 kui sa tuled mõelda. 12 00:00:43,830 --> 00:00:50,110 >> Samuti väidetavalt pset 4 ja 5 olid kõige keerulisem psets et meil oli pakkuda. 13 00:00:50,110 --> 00:00:53,950 Nii et nüüd on meil see veel 1 pset C, 14 00:00:53,950 --> 00:00:56,480 ja siis pärast, et me oleme veebi programmeerimine. 15 00:00:56,480 --> 00:01:02,310 Nii et õnnitleda ise saada üle raskeimates küür sisse CS50. 16 00:01:03,630 --> 00:01:09,760 >> Liikumine edasi Huff'n Puff, meie tööriistakasti selle pset saab olema Huffman puud, 17 00:01:09,760 --> 00:01:14,700 nii mõista mitte ainult kuidas kahendpuuks töö, vaid ka konkreetselt Huffman puud, 18 00:01:14,700 --> 00:01:16,240 kuidas nad ehitatud. 19 00:01:16,240 --> 00:01:20,210 Ja siis me lähed on palju jaotus kood selles pset, 20 00:01:20,210 --> 00:01:22,480 ja me tuleme näha, et tegelikult mõned koodi 21 00:01:22,480 --> 00:01:24,670 me ei pruugi täielikult mõista veel, 22 00:01:24,670 --> 00:01:30,080 ja nii need on. c faili, kuid siis nende juurde. h failid 23 00:01:30,080 --> 00:01:34,300 annab meile piisavalt teadmisi, et me vajame nii et me teame, kuidas need funktsioonid töötavad 24 00:01:34,300 --> 00:01:38,100 või vähemalt see, mida nad peaksid tegema - nende sisendid ja väljundid - 25 00:01:38,100 --> 00:01:40,760 isegi kui me ei tea, mis toimub musta kasti 26 00:01:40,760 --> 00:01:44,090 või ei saa aru, mis toimub musta kasti sees. 27 00:01:44,090 --> 00:01:49,400 Ja siis lõpuks, nagu ikka, on tegemist uue andmestruktuure 28 00:01:49,400 --> 00:01:51,840 teatud liiki sõlmed, mis viitavad teatud asju, 29 00:01:51,840 --> 00:01:56,080 ja nii siin, millel on pliiats ja paber mitte ainult projekteerimise käigus 30 00:01:56,080 --> 00:01:58,470 ja kui sa üritad välja selgitada, kuidas oma pset peaks töötama 31 00:01:58,470 --> 00:02:00,520 kuid ka ajal silumine. 32 00:02:00,520 --> 00:02:06,140 Sul võib olla GDB kõrval oma pliiatsi ja paberi kui te võtate ette, missugune väärtused, 33 00:02:06,140 --> 00:02:09,320 kus oma nooltega näidatud ja asjad niimoodi. 34 00:02:09,320 --> 00:02:13,720 >> Esiteks vaatame Huffman puud. 35 00:02:13,720 --> 00:02:19,600 Huffman puud on kahendpuuks, mis tähendab, et iga sõlm on ainult 2 last. 36 00:02:19,600 --> 00:02:24,870 Aastal Huffman puud eripära on see kõige sagedasem väärtused 37 00:02:24,870 --> 00:02:27,140 on esindatud kõige vähem bitti. 38 00:02:27,140 --> 00:02:32,690 Nägime loengu näited Morse kood, mis liiki konsolideeritud mõned tähed. 39 00:02:32,690 --> 00:02:38,030 Kui üritad tõlkida või E, näiteks 40 00:02:38,030 --> 00:02:43,940 sa tõlkimise et sageli, nii et selle asemel, et kasutada täiskomplekt bitti 41 00:02:43,940 --> 00:02:48,640 eraldatud, et tavapäraste andmete tüüp, siis suruma seda alla vähem, 42 00:02:48,640 --> 00:02:53,730 ja siis need tähed, kes on esindatud harvem on esindatud enam bitti 43 00:02:53,730 --> 00:02:59,840 sest sa ei saa endale lubada, et kui te kaalute välja sagedustel, et need tähed ilmuvad. 44 00:02:59,840 --> 00:03:03,020 Meil on sama mõte siin Huffman puud 45 00:03:03,020 --> 00:03:12,360 kus teeme kett, mingi tee, et saada teatud märke. 46 00:03:12,360 --> 00:03:14,470 Ja siis karaktereid, kes on kõige sagedus 47 00:03:14,470 --> 00:03:17,940 hakkavad olema esindatud võimalikult väheste bitti. 48 00:03:17,940 --> 00:03:22,020 >> Nii, et sa ehitada Huffman puu 49 00:03:22,020 --> 00:03:27,430 on, pannes kõik märgid, mis esinevad tekstis 50 00:03:27,430 --> 00:03:30,630 ja arvutamise sagedus, kui tihti nad ilmuvad. 51 00:03:30,630 --> 00:03:33,880 See võib olla kas arv on mitu korda suuremad tähed ilmuvad 52 00:03:33,880 --> 00:03:40,270 või ehk protsent välja kõik märgid, kui palju igaüks näib. 53 00:03:40,270 --> 00:03:44,270 Ja mis sa teed on, kui sul on kõik see kaardistada, 54 00:03:44,270 --> 00:03:49,060 siis sa ootad 2 Madalaim sagedused ja siis nendega liituda kui õed-vennad 55 00:03:49,060 --> 00:03:55,660 kus siis vanem sõlme on sagedus, mis on summa tema 2 last. 56 00:03:55,660 --> 00:04:00,870 Ja siis kokkuleppeliselt öelda, et vasak sõlme, 57 00:04:00,870 --> 00:04:03,770 te järgite, et pärast 0 filiaal, 58 00:04:03,770 --> 00:04:08,140 ja siis parempoolsem sõlm on 1 filiaali. 59 00:04:08,140 --> 00:04:16,040 Nagu nägime morset, üks gotcha oli see, et kui sul oleks lihtsalt piiks ja piiks 60 00:04:16,040 --> 00:04:18,120 see oli ebamäärane. 61 00:04:18,120 --> 00:04:22,430 See võiks olla kas 1 täht või see võiks olla järjekord 2 tähte. 62 00:04:22,430 --> 00:04:27,790 Ja mis Huffman puud ei ole, sest iseloomust tähemärki 63 00:04:27,790 --> 00:04:34,140 või meie lõplik tegelik tähemärki on viimane sõlmede filiaal - 64 00:04:34,140 --> 00:04:39,300 me nimetame neid kui lehed - tänu sellele ei saa olla mis tahes kahemõttelisust 65 00:04:39,300 --> 00:04:45,160 poolest, mis kirja sa üritad kodeerida mitu bitti 66 00:04:45,160 --> 00:04:50,670 sest kusagil mööda bitti, mis esindavad 1 täht 67 00:04:50,670 --> 00:04:55,960 siis sul tekib teise kogu kirjast ja seal ei ole segadust seal. 68 00:04:55,960 --> 00:04:58,430 Aga me astume näited, et te võib tegelikult näha, et 69 00:04:58,430 --> 00:05:02,120 asemel meile lihtsalt ütleb, et see on tõsi. 70 00:05:02,120 --> 00:05:06,390 >> Vaatame lihtsat näidet Huffman puu. 71 00:05:06,390 --> 00:05:09,380 Mul on string, mis käib 12 tähemärki pikk. 72 00:05:09,380 --> 00:05:14,010 Mul on 4 Nagu, 6 Bs, ja 2 Cs. 73 00:05:14,010 --> 00:05:17,270 Minu esimene samm oleks loota. 74 00:05:17,270 --> 00:05:20,760 Mitu korda ei ilmu? Tundub 4 korda stringi. 75 00:05:20,760 --> 00:05:25,060 B ilmub 6 korda, ja C ilmub 2 korda. 76 00:05:25,060 --> 00:05:28,970 Loomulikult ma lähen ütlen ma kasutan B kõige sagedamini 77 00:05:28,970 --> 00:05:35,970 nii et ma tahan esindada B võimalikult väheste bittide arv, kõige vähem 0. ja 1s. 78 00:05:35,970 --> 00:05:42,600 Ja siis ma lähen samuti oodata C nõuda kõige summa 0. ja 1s samuti. 79 00:05:42,600 --> 00:05:48,550 Esimene mida ma tegin siin ma panid need kasvavas järjekorras sageduse. 80 00:05:48,550 --> 00:05:52,710 Me näeme, et C ja need on meie 2 madalaim sagedustel. 81 00:05:52,710 --> 00:06:00,290 Loome vanem sõlme, ja et vanem sõlme ei ole kirjas sellega seotud, 82 00:06:00,290 --> 00:06:05,070 kuid see on sagedus, mis on summa. 83 00:06:05,070 --> 00:06:08,780 Summa muutub 2 + 4, mis on 6. 84 00:06:08,780 --> 00:06:10,800 Siis me järgime vasak haru. 85 00:06:10,800 --> 00:06:14,970 Kui olime, et 6 sõlme, siis me käiks 0 C-ni jõuda 86 00:06:14,970 --> 00:06:17,450 ja siis 1 pääseda A. 87 00:06:17,450 --> 00:06:20,300 Nii et nüüd on meil 2 sõlmed. 88 00:06:20,300 --> 00:06:23,920 Meil on väärtus 6 ja siis meil on ka teine ​​sõlm väärtus 6. 89 00:06:23,920 --> 00:06:28,550 Ja nii need 2 ei ole ainult 2 Madalaim vaid ka lihtsalt 2, mis on jäänud, 90 00:06:28,550 --> 00:06:33,820 nii me liituda need teise vanemaga, koos summa on 12. 91 00:06:33,820 --> 00:06:36,300 Nii et siin on meil Huffman puu 92 00:06:36,300 --> 00:06:40,020 kust saada B, et oleks lihtsalt bitt 1 93 00:06:40,020 --> 00:06:45,430 ja siis saada meil oleks 01 ja siis K võttes 00. 94 00:06:45,430 --> 00:06:51,300 Nii et siin me näeme, et põhimõtteliselt me ​​neid esindavate tähemärki koos 1 või 2 bitti 95 00:06:51,300 --> 00:06:55,160 kus B, nagu ennustatud, on vähemalt. 96 00:06:55,160 --> 00:07:01,730 Ja siis me ootasime C on kõige, kuid kuna see on nii väike Huffman puu, 97 00:07:01,730 --> 00:07:06,020 siis on esindatud ka 2 bitti mitte kusagil keskel. 98 00:07:07,820 --> 00:07:11,070 >> Lihtsalt minna üle teise lihtsa näite Huffman puu, 99 00:07:11,070 --> 00:07:19,570 et teil on string "Tere." 100 00:07:19,570 --> 00:07:25,360 Mida teha, on kõigepealt pead ütleks mitu korda ei H ilmub selles? 101 00:07:25,360 --> 00:07:34,200 H ilmub üks kord ja seejärel e ilmub üks kord ja siis on meil l ilmumist kaks korda 102 00:07:34,200 --> 00:07:36,580 ja o ilmuvad kord. 103 00:07:36,580 --> 00:07:44,310 Ja nii siis ootame mis kirja esindab vähemalt bittide arvuga? 104 00:07:44,310 --> 00:07:47,450 [Üliõpilane] l. >> L. Jah. l on õigus. 105 00:07:47,450 --> 00:07:50,730 Ootame l olla esindatud vähemalt bittide arv 106 00:07:50,730 --> 00:07:55,890 sest ma kasutatakse kõige string "Tere." 107 00:07:55,890 --> 00:08:04,280 Mida ma teen nüüd venitama need sõlmed. 108 00:08:04,280 --> 00:08:15,580 Mul on 1, mis on H, ja siis veel 1, mis on e ja seejärel 1, mis on o - 109 00:08:15,580 --> 00:08:23,410 praegu ma kordategemine - ja siis 2, mis on l. 110 00:08:23,410 --> 00:08:32,799 Siis ma ütlen, et ma ehitada Huffman puu on leida 2 tippu koos vähemalt sagedused 111 00:08:32,799 --> 00:08:38,010 ja need õed-vennad, luues vanem sõlme. 112 00:08:38,010 --> 00:08:41,850 Siin on 3 sõlmed, millel on madalaim sagedus. Nad kõik 1. 113 00:08:41,850 --> 00:08:50,620 Nii et siin me valida, milline neist me ei kavatse siduda esimene. 114 00:08:50,620 --> 00:08:54,850 Oletame, et ma valin H ja e. 115 00:08:54,850 --> 00:09:01,150 Summa 1 + 1 on 2, kuid see sõlm ei ole kirjas sellega seotud. 116 00:09:01,150 --> 00:09:04,440 See lihtsalt hoiab raha. 117 00:09:04,440 --> 00:09:10,950 Nüüd me vaatame järgmise 2 madalaim sagedustel. 118 00:09:10,950 --> 00:09:15,590 See on 2 ja 1. See võiks olla üks nendest 2, kuid ma lähen valima selle ühe. 119 00:09:15,590 --> 00:09:18,800 Summa on 3. 120 00:09:18,800 --> 00:09:26,410 Ja siis lõpuks, ma ainult 2 vasakule, nii siis mis saab 5. 121 00:09:26,410 --> 00:09:32,010 Siis siin, nagu oodati, kui ma täita kodeering, et 122 00:09:32,010 --> 00:09:37,480 1s on alati õigus filiaal ja 0. on vasakuga. 123 00:09:37,480 --> 00:09:45,880 Siis on meil l esindatud vaid 1 natuke ja siis o 2 124 00:09:45,880 --> 00:09:52,360 ja siis e 2 ja siis H kukub 3 bitti. 125 00:09:52,360 --> 00:09:59,750 Nii saate edastada selle sõnumi "Tere" asemel tegelikult kasutatavate märkide 126 00:09:59,750 --> 00:10:02,760 mida just 0. ja 1s. 127 00:10:02,760 --> 00:10:07,910 Kuid pidage meeles, et mitmel juhul oli meil sidemed meie sagedust. 128 00:10:07,910 --> 00:10:11,900 Oleksime võinud kas liitus H ja Ö esimeses võibolla. 129 00:10:11,900 --> 00:10:15,730 Või siis hiljem, kui meil oli l esindatud 2 130 00:10:15,730 --> 00:10:19,410 samuti liitus üks esindas 2, oleksime seotud kas ühe. 131 00:10:19,410 --> 00:10:23,630 >> Ja nii kui saadate 0. ja 1s, et tegelikult ei taga 132 00:10:23,630 --> 00:10:27,090 et teenuse kasutaja saaks täielikult lugeda oma sõnum õigus ära nahkhiir 133 00:10:27,090 --> 00:10:30,490 sest nad ei pruugi teada, mis otsuse sa tegid. 134 00:10:30,490 --> 00:10:34,920 Nii et kui me tegeleme Huffman kokkusurumine, 135 00:10:34,920 --> 00:10:40,090 kuidagi peame rääkima saaja meie sõnum, kuidas me otsustasime - 136 00:10:40,090 --> 00:10:43,470 Nad peavad teadma, mingi pildi info 137 00:10:43,470 --> 00:10:46,580 lisaks kokkusurutud sõnum. 138 00:10:46,580 --> 00:10:51,490 Nad peavad aru, mida puu tegelikult välja näeb, 139 00:10:51,490 --> 00:10:55,450 kuidas me tegelikult tehtud neid otsuseid. 140 00:10:55,450 --> 00:10:59,100 >> Siin me lihtsalt teeme näiteid aluseks tegelik arv, 141 00:10:59,100 --> 00:11:01,550 kuid mõnikord võib olla ka Huffman puu 142 00:11:01,550 --> 00:11:05,760 põhineb sagedus, mille tähed ilmuvad, ja see on täpselt sama protsess. 143 00:11:05,760 --> 00:11:09,090 Siin ma olen väljendades seda nii protsente või fraktsioon, 144 00:11:09,090 --> 00:11:11,290 ja nii siin täpselt sama asi. 145 00:11:11,290 --> 00:11:15,300 Ma leian, 2 madalaim, need kokku liita, järgmise 2 madalaim, need kokku liita, 146 00:11:15,300 --> 00:11:19,390 kuni mul on täielik puusse. 147 00:11:19,390 --> 00:11:23,610 Kuigi me võiksime seda teha kas nii, kui me tegeleme protsendid, 148 00:11:23,610 --> 00:11:27,760 see tähendab, et me jagame asju ja tegelevad kümnendkohtade või pigem hõljub 149 00:11:27,760 --> 00:11:30,900 kui me mõtleme andmestruktuuridega pea. 150 00:11:30,900 --> 00:11:32,540 Mida me teame ujukite? 151 00:11:32,540 --> 00:11:35,180 Mis on üldine probleem, kui me tegeleme ujukite? 152 00:11:35,180 --> 00:11:38,600 [Üliõpilane] Ebatäpsed aritmeetika. >> Jah. Ebatäpsusega. 153 00:11:38,600 --> 00:11:43,760 Kuna ujukoma ebatäpsus, selle pset nii et me veenduge, 154 00:11:43,760 --> 00:11:49,450 et me ei kaota väärtust, siis me tegelikult läheb tegelema loota. 155 00:11:49,450 --> 00:11:54,880 Nii et kui sa olid mõelda Huffman sõlme, kui te vaatate tagasi struktuuris siin, 156 00:11:54,880 --> 00:12:01,740 kui te vaatate roheline ones see on sagedus sellega seotud 157 00:12:01,740 --> 00:12:08,760 samuti osutab ta sõlme oma vasakule samuti sõlm tema õigust. 158 00:12:08,760 --> 00:12:13,970 Ja siis punased seal on ka märk nendega. 159 00:12:13,970 --> 00:12:18,900 Me ei kavatse teha eraldi välja need vanemad ja siis lõplik tippu, 160 00:12:18,900 --> 00:12:23,680 mida me nimetame lehed, vaid need peavad lihtsalt NULL väärtusi. 161 00:12:23,680 --> 00:12:31,050 Iga sõlme me peame iseloomu, sümbol, et tipp esindab, 162 00:12:31,050 --> 00:12:40,490 siis sagedus samuti viit selle vasak laps samuti oma õigust last. 163 00:12:40,490 --> 00:12:45,680 Lehed, mis on väga põhjas, oleks ka sõlme viiteid 164 00:12:45,680 --> 00:12:49,550 oma vasakule ja õigust, kuid kuna need väärtused ei ole osutab tegelik tippu, 165 00:12:49,550 --> 00:12:53,970 milline oleks nende väärtus olla? >> [Üliõpilane] NULL. >> NULL. Täpselt. 166 00:12:53,970 --> 00:12:58,430 Siin on näide, kuidas võiks esindada sagedus ujukite, 167 00:12:58,430 --> 00:13:02,130 kuid me ei kavatse tegelema seda täisarvud, 168 00:13:02,130 --> 00:13:06,780 nii ma tegin, on muuta andmete tüüp seal. 169 00:13:06,780 --> 00:13:09,700 >> Lähme edasi natuke rohkem keeruline näide. 170 00:13:09,700 --> 00:13:13,360 Aga nüüd, et me oleme teinud lihtsaid, see on lihtsalt sama protsessi. 171 00:13:13,360 --> 00:13:20,290 Leiad 2 Madalaim sagedusi, kokku sagedused 172 00:13:20,290 --> 00:13:22,450 ja ongi uus sagedus teie vanem sõlme, 173 00:13:22,450 --> 00:13:29,310 mis siis osutab oma vasaku koos 0 filiaali ja paremale 1 filiaali. 174 00:13:29,310 --> 00:13:34,200 Kui meil on string "See on cs50", siis me kokku, mitu korda on T mainitud, 175 00:13:34,200 --> 00:13:38,420 h mainitud, I, S, C, 5, 0. 176 00:13:38,420 --> 00:13:42,010 Siis mida ma tegin siin on punase sõlmede ma lihtsalt istutada, 177 00:13:42,010 --> 00:13:48,530 Ma ütlesin, et ma lähen on need märgid lõpuks allosas minu puu. 178 00:13:48,530 --> 00:13:51,740 Need hakkavad olema kõik lehed. 179 00:13:51,740 --> 00:13:58,200 Siis mida ma tegin on mul järjestatud nende esinemissageduse järgi kahanevas järjekorras, 180 00:13:58,200 --> 00:14:02,950 ja see on tegelikult nii, et pset koodi see 181 00:14:02,950 --> 00:14:07,550 on see jõuaks seda sagedust ja siis tähestikulises järjekorras. 182 00:14:07,550 --> 00:14:13,870 Seega on numbrid ja alles seejärel tähestiku sageduse järgi. 183 00:14:13,870 --> 00:14:18,520 Siis mida ma teen on minu leiaks 2 madalaim. See on 0 ja 5. 184 00:14:18,520 --> 00:14:22,390 Ma liidaks neid, ja see on 2. Siis ma jätkata, leida järgmise 2 madalaim. 185 00:14:22,390 --> 00:14:26,100 Need on kaks 1s ja siis need muutuvad 2 samuti. 186 00:14:26,100 --> 00:14:31,570 Nüüd ma tean, et minu järgmine samm saab olema liitumist väiksem number, 187 00:14:31,570 --> 00:14:41,380 mis on T-1 ja seejärel valida üks tippe, mis on 2 kuna sagedust. 188 00:14:41,380 --> 00:14:44,560 Nii et siin on meil 3 võimalust. 189 00:14:44,560 --> 00:14:47,980 Mida ma teha slaidi lihtsalt visuaalselt ümber neid teile 190 00:14:47,980 --> 00:14:51,790 nii et saate näha, kuidas ma praegu luuakse. 191 00:14:51,790 --> 00:14:59,040 Mis koodi ja levitamine kood kavatseb teha oleks liituda T ühe 192 00:14:59,040 --> 00:15:01,410 koos 0 ja 5 sõlme. 193 00:15:01,410 --> 00:15:05,060 Nii siis, et summad 3, ja siis me protsessi jätkata. 194 00:15:05,060 --> 00:15:08,660 2 ja 2 nüüd on madalaim, nii siis need summa kuni 4. 195 00:15:08,660 --> 00:15:12,560 Igaüks pärast nii palju? Okei. 196 00:15:12,560 --> 00:15:16,410 Siis pärast, et meil on 3 ja 3, et tuleb kokku liita, 197 00:15:16,410 --> 00:15:21,650 nii et jälle ma lihtsalt sisselülitamist nii, et sa näed visuaalselt nii et see ei saa liiga räpane. 198 00:15:21,650 --> 00:15:25,740 Siis on meil 6 ja seejärel meie viimane samm on nüüd, et meil on ainult 2 tippu 199 00:15:25,740 --> 00:15:30,440 me Kokkuvõttes need teha just meie puu, mis on 10. 200 00:15:30,440 --> 00:15:34,100 Ja number 10 on mõistlik, sest iga sõlm esindab, 201 00:15:34,100 --> 00:15:40,750 nende väärtus, sagedus arv oli mitu korda nad ilmusid stringi, 202 00:15:40,750 --> 00:15:46,350 ja siis meil on 5 tähemärki meie string, nii et on mõtet. 203 00:15:48,060 --> 00:15:52,320 Kui me vaatame üles, kuidas me tegelikult kodeerida seda, 204 00:15:52,320 --> 00:15:56,580 ootuspäraselt, i ja s, mis tunduvad kõige sagedamini 205 00:15:56,580 --> 00:16:01,350 on esindatud kõige vähem bitti. 206 00:16:03,660 --> 00:16:05,660 >> Olge siin. 207 00:16:05,660 --> 00:16:09,780 Aastal Huffman puud juhul tegelikult oluline on. 208 00:16:09,780 --> 00:16:13,670 Suur-S on teistsugune kui väiketähti s. 209 00:16:13,670 --> 00:16:21,260 Kui meil oleks "See on CS50" suurte tähtedega, siis väiketähti s, mis ilmnevad alles kaks korda, 210 00:16:21,260 --> 00:16:27,120 oleks sõlme 2 kui selle väärtus, ja siis suur-S oleks ainult üks kord. 211 00:16:27,120 --> 00:16:33,440 Nii et siis oma puu muudaks struktuurid sest sa tegelikult pildi leht siin. 212 00:16:33,440 --> 00:16:36,900 Aga summa ikkagi 10. 213 00:16:36,900 --> 00:16:39,570 See, mida me tegelikult hakatakse kutsudes kontrollsumma, 214 00:16:39,570 --> 00:16:44,060 Lisaks kõigi loeb. 215 00:16:46,010 --> 00:16:50,990 >> Nüüd, kui oleme kaetud Huffman puud, saame sukelduda Huff'n Puff, pset. 216 00:16:50,990 --> 00:16:52,900 Me läheme alustada osas küsimusi, 217 00:16:52,900 --> 00:16:57,990 ja see läheb sulle harjunud koos kahendpuuks ja kuidas tegutseda umbes, et: 218 00:16:57,990 --> 00:17:03,230 joonistus tippu, luues oma typedef struktuure jaoks sõlme, 219 00:17:03,230 --> 00:17:07,230 ja näha, kuidas sa võiksid lisada kahendpuu, üks, mis on sorteeritud, 220 00:17:07,230 --> 00:17:09,050 liiklevad, ja asjad niimoodi. 221 00:17:09,050 --> 00:17:14,560 See teadmine on kindlasti kavatse sind aidata, kui sa sukelduda Huff'n Puff osa 222 00:17:14,560 --> 00:17:17,089 Euroopa pset. 223 00:17:19,150 --> 00:17:26,329 In standard väljaanne pset, teie ülesanne on rakendada Puff, 224 00:17:26,329 --> 00:17:30,240 ja häkker versioon teie ülesanne on rakendada Huff. 225 00:17:30,240 --> 00:17:38,490 Mis Huff ei ole see võtab teksti ja siis see tõlgib see 0. ja 1s, 226 00:17:38,490 --> 00:17:41,990 nii protsess, mis me tegime eespool, kus me lugeda sagedused 227 00:17:41,990 --> 00:17:50,970 ja siis tehakse puust ja siis ütles: "Kuidas ma saan T?" 228 00:17:50,970 --> 00:17:54,840 T on esindatud 100, asju, 229 00:17:54,840 --> 00:17:58,860 ja siis Huff võtaks teksti ja siis väljund, et binaarne. 230 00:17:58,860 --> 00:18:04,920 Aga ka sellepärast, et me teame, et me tahame, et meie saaja sõnum 231 00:18:04,920 --> 00:18:11,790 taasluua täpselt sama puu, see sisaldab ka teavet sagedus loeb. 232 00:18:11,790 --> 00:18:17,980 Siis Puff oleme andnud binaarne fail 0. ja 1s 233 00:18:17,980 --> 00:18:21,740 ja antud ka infot sagedustel. 234 00:18:21,740 --> 00:18:26,740 Tõlgime kõiki neid 0. ja 1s tagasi algse sõnumi, mis oli, 235 00:18:26,740 --> 00:18:29,350 nii et me oleme mahalaadimine et. 236 00:18:29,350 --> 00:18:36,450 Kui sa teed Standard Edition, sa ei pea rakendama Huff, 237 00:18:36,450 --> 00:18:39,290 nii siis võid lihtsalt kasutada töötajate rakendamist Huff. 238 00:18:39,290 --> 00:18:42,080 On juhiseid spec, kuidas seda teha. 239 00:18:42,080 --> 00:18:48,780 Võite käivitada töötajate rakendamist Huff peale teatud tekstifaili 240 00:18:48,780 --> 00:18:53,270 ja siis kasutada, et väljund oma panuse Puff. 241 00:18:53,270 --> 00:18:59,330 >> Nagu ütlesin, on meil palju jaotus kood see üks. 242 00:18:59,330 --> 00:19:01,810 Ma lähen alustada läbimas seda. 243 00:19:01,810 --> 00:19:04,400 Ma veedan suurema osa ajast. H failid 244 00:19:04,400 --> 00:19:07,660 sest. c faili, sest meil on. h 245 00:19:07,660 --> 00:19:11,650 ja mis annab meile prototüübid funktsioone, 246 00:19:11,650 --> 00:19:15,520 me täielikult ei pea täpselt teadma - 247 00:19:15,520 --> 00:19:20,280 Kui te ei saa aru, mis siin toimub. C faili, siis ärge muretsege liiga palju, 248 00:19:20,280 --> 00:19:23,600 kuid kindlasti proovida heita, sest see võib anda mõned vihjed 249 00:19:23,600 --> 00:19:29,220 ja see on kasulik harjuda lugemine teiste inimeste koodi. 250 00:19:38,940 --> 00:19:48,270 >> Vaadates huffile.h, oma kommentaarides ta deklareerib kiht võtmiseks jaoks Huffman kodeeritud faile. 251 00:19:48,270 --> 00:20:01,660 Kui me läheme, näeme, et seal on kuni 256 sümbolid, et me võib-olla koodid. 252 00:20:01,660 --> 00:20:05,480 See hõlmab kõiki tähestiku tähti - suuri ja väikeseid - 253 00:20:05,480 --> 00:20:08,250 ja siis sümbolid ja numbrid jne 254 00:20:08,250 --> 00:20:11,930 Siis on meil siin magic number Huffman kodeeritud faili. 255 00:20:11,930 --> 00:20:15,890 Jooksul Huffman kood nad lähed on teatud maagiline number 256 00:20:15,890 --> 00:20:18,560 seotud päises. 257 00:20:18,560 --> 00:20:21,110 See võib tunduda just juhuslikult maagiline number, 258 00:20:21,110 --> 00:20:27,160 aga kui sa tegelikult seda tõlkida ASCII, siis tegelikult sõnastab Huff. 259 00:20:27,160 --> 00:20:34,290 Siin on meil struct jaoks Huffman kodeeritud faili. 260 00:20:34,290 --> 00:20:39,670 Seal on kõik need omadused, mis on seotud Huff faili. 261 00:20:39,670 --> 00:20:47,080 Siis siin all on meil päises Huff faili, nii et me nimetame seda Huffeader 262 00:20:47,080 --> 00:20:50,810 lisamise asemel pildi h sest see kõlab sama niikuinii. 263 00:20:50,810 --> 00:20:52,720 Armas. 264 00:20:52,720 --> 00:20:57,790 Meil on maagiline number on seostatud sellega. 265 00:20:57,790 --> 00:21:09,040 Kui see on tegelik Huff faili, see saab olema number kuni eespool, see maagiline üks. 266 00:21:09,040 --> 00:21:14,720 Ja siis see on massiiv. 267 00:21:14,720 --> 00:21:18,750 Nii et iga sümbol, mida on 256, 268 00:21:18,750 --> 00:21:24,760 see läheb nimekirja, mida sagedus need sümbolid kuuluvad Huff faili. 269 00:21:24,760 --> 00:21:28,090 Ja siis lõpuks, meil on kontrollsumma sagedused, 270 00:21:28,090 --> 00:21:32,160 mis peaks olema summa nende sagedustel. 271 00:21:32,160 --> 00:21:36,520 Nii see on, mida Huffeader on. 272 00:21:36,520 --> 00:21:44,600 Siis meil on mõned funktsioonid, mis tagastavad kõrval natuke Huff fail 273 00:21:44,600 --> 00:21:52,580 samuti kirjutab natuke Huff faili ja siis see funktsioon siin, hfclose, 274 00:21:52,580 --> 00:21:54,650 et tegelikult sulgeb Huff faili. 275 00:21:54,650 --> 00:21:57,290 Enne olime tegelevad otse lihtsalt kirjutamisel, 276 00:21:57,290 --> 00:22:01,190 aga kui sul on Huff faili asemel fclosing see 277 00:22:01,190 --> 00:22:06,080 mida sa tegelikult tegema hakkad on hfclose ja hfopen ta. 278 00:22:06,080 --> 00:22:13,220 Need on konkreetsed ülesanded Huff faile, me ei kavatse tegelema. 279 00:22:13,220 --> 00:22:19,230 Siis siin loeme päises ja siis kirjutage päises. 280 00:22:19,230 --> 00:22:25,700 >> Lihtsalt lugedes. H fail saame omamoodi saada tunnet, mida Huff fail võib olla, 281 00:22:25,700 --> 00:22:32,480 millised omadused tal on, ilma päriselt sinna huffile.c, 282 00:22:32,480 --> 00:22:36,750 mis, kui me sukelduda, saab olema natuke keerulisem. 283 00:22:36,750 --> 00:22:41,270 See on kõik faili I / O siin tegemist suunanäitajaks. 284 00:22:41,270 --> 00:22:48,010 Siin näeme, et kui me kutsume hfread, näiteks, see on ikka tegelevad fread. 285 00:22:48,010 --> 00:22:53,050 Me ei vabaneda neid ülesandeid täielikult, kuid me saadame need tuleb hoolitseda 286 00:22:53,050 --> 00:22:59,760 sees Huff faili asemel teeb see kõik ise. 287 00:22:59,760 --> 00:23:02,300 Võite julgelt skaneerimise abil seda, kui sa oled uudishimulik 288 00:23:02,300 --> 00:23:08,410 ja minna ja koor kiht veidi tagasi. 289 00:23:20,650 --> 00:23:24,060 >> Järgnevat pilti, et me ei kavatse pilk on tree.h. 290 00:23:24,060 --> 00:23:30,210 Enne sisse kiirtutvustus libiseb me ütlesime me ootame Huffman sõlme 291 00:23:30,210 --> 00:23:32,960 ja tegime typedef struktuure sõlme. 292 00:23:32,960 --> 00:23:38,360 Me ootame, et on sümbol, sagedus, ja siis 2 sõlme tähte. 293 00:23:38,360 --> 00:23:41,870 Sel juhul, mida me teeme on see sisuliselt sama 294 00:23:41,870 --> 00:23:46,880 välja arvatud asemel sõlme me ei kavatse nimetada neid puid. 295 00:23:48,790 --> 00:23:56,760 Meil on funktsioon, et kui helistate teha puu see naasete puu pointer. 296 00:23:56,760 --> 00:24:03,450 Tagasi Speller, kui sa tegid uue tipu 297 00:24:03,450 --> 00:24:11,410 sa ütlesid sõlme * uus sõna = malloc (sizeof) ja asjad niimoodi. 298 00:24:11,410 --> 00:24:17,510 Põhimõtteliselt mktree läheb tegeleb selle sulle. 299 00:24:17,510 --> 00:24:20,990 Samamoodi, kui soovite eemaldada puud, 300 00:24:20,990 --> 00:24:24,810 Nii et sisuliselt vabastades puu, kui oled hakkama saanud, 301 00:24:24,810 --> 00:24:33,790 asemel selgesõnaliselt helistades tasuta, et sa oled tegelikult lihtsalt kavatse kasutada funktsiooni rmtree 302 00:24:33,790 --> 00:24:40,360 kuhu viiakse kursor selle puu ja siis tree.c hoolitseme, et teie jaoks. 303 00:24:40,360 --> 00:24:42,490 >> Me vaatame tree.c. 304 00:24:42,490 --> 00:24:47,240 Ootame samad funktsioonid, välja arvatud näha rakendamise samuti. 305 00:24:47,240 --> 00:24:57,720 Nagu me ootasime, millal sa helistada mktree see mallocs suurus puu sisse pointer, 306 00:24:57,720 --> 00:25:03,190 algväärtustab kõik väärtused väärtus NULL, nii 0s või NULLS, 307 00:25:03,190 --> 00:25:08,280 ning tagastab viida, et puud, mis sa oled malloc'd teile. 308 00:25:08,280 --> 00:25:13,340 Siin, kui helistate eemaldada puu see esimene tagab, et te ei ole topelt vabastamine. 309 00:25:13,340 --> 00:25:18,320 See tagab, et te tegelikult on puu, mida soovite eemaldada. 310 00:25:18,320 --> 00:25:23,330 Siin sest puu on ka oma lapsed, 311 00:25:23,330 --> 00:25:29,560 Mis see on see rekursiivselt kutsutakse eemaldada puud vasakul sõlme puu 312 00:25:29,560 --> 00:25:31,650 samuti õigus sõlme. 313 00:25:31,650 --> 00:25:37,790 Enne see vabastab vanem, ta vajab, et vabastada lapsed samuti. 314 00:25:37,790 --> 00:25:42,770 Vanem on ka vahetatavad juur. 315 00:25:42,770 --> 00:25:46,500 Esimene vanem, nii nagu vana-vana-vana-vana-vanaisa 316 00:25:46,500 --> 00:25:52,130 või vanaema puu, esiteks, me peame tasuta alla tasanditel esiteks. 317 00:25:52,130 --> 00:25:58,490 Nii risti põhja, tasuta need, ja siis tagasi tulla üles, vabasta need, jne 318 00:26:00,400 --> 00:26:02,210 Nii et see puu. 319 00:26:02,210 --> 00:26:04,240 >> Nüüd vaatame metsa. 320 00:26:04,240 --> 00:26:09,860 Mets on kui paned kõik oma Huffman puud. 321 00:26:09,860 --> 00:26:12,910 See on selge, et me ei kavatse on midagi, mida nimetatakse krunt 322 00:26:12,910 --> 00:26:22,320 , mis sisaldab viit puud samuti kursor krunt kutsus järgmise. 323 00:26:22,320 --> 00:26:28,480 Mida struktuur teeb selliseid välja näeb? 324 00:26:29,870 --> 00:26:32,490 See liik ütleb, et see on seal. 325 00:26:34,640 --> 00:26:36,700 Siinsamas. 326 00:26:37,340 --> 00:26:39,170 Seotud nimekirja. 327 00:26:39,170 --> 00:26:44,590 Me näeme, et kui meil on krunt see on nagu seotud nimekirja krundid. 328 00:26:44,590 --> 00:26:53,020 Mets on määratletud seotud nimekirja krundid, 329 00:26:53,020 --> 00:26:58,100 ja nii struktuuri mets on me lihtsalt läheb on kursor meie esimene krunt 330 00:26:58,100 --> 00:27:02,740 ja et krunt on puu sees või pigem viitab puu 331 00:27:02,740 --> 00:27:06,190 ja siis punkti järgmisele krunt, nii edasi ja nii edasi. 332 00:27:06,190 --> 00:27:11,100 Selleks, et metsa kutsume mkforest. 333 00:27:11,100 --> 00:27:14,930 Siis on meil päris kasulikud funktsioonid siin. 334 00:27:14,930 --> 00:27:23,240 Meil on valida, kuhu viiakse metsa ja siis tagastatav väärtus on Tree * 335 00:27:23,240 --> 00:27:25,210 kursor puu. 336 00:27:25,210 --> 00:27:29,370 Mis pick teeb on see läheb metsa, et sa osutades 337 00:27:29,370 --> 00:27:35,240 Seejärel eemaldage puu madalaima sagedusega, et metsa 338 00:27:35,240 --> 00:27:38,330 ja siis annan teile kursor selle puu. 339 00:27:38,330 --> 00:27:43,030 Kui te helistate valida, puu ei eksisteeri metsas enam 340 00:27:43,030 --> 00:27:48,550 kuid tagastatav väärtus on kursor, et puu. 341 00:27:48,550 --> 00:27:50,730 Siis on taim. 342 00:27:50,730 --> 00:27:57,420 Eeldusel, et sa läbima viit puu, mis on mitte-0 sagedus, 343 00:27:57,420 --> 00:28:04,040 Mis taim teeb on see võtab metsa võtma puust ja taim, mis puu sees metsa. 344 00:28:04,040 --> 00:28:06,370 Siin on meil rmforest. 345 00:28:06,370 --> 00:28:11,480 Sarnased eemaldada puud, mis põhimõtteliselt vabastada kõik meie puud meie jaoks, 346 00:28:11,480 --> 00:28:16,600 eemaldada mets tasuta kõike sisalduv et metsa. 347 00:28:16,600 --> 00:28:24,890 >> Kui me vaatame forest.c, me oodata vähemalt 1 rmtree käsk sinna, 348 00:28:24,890 --> 00:28:30,090 sest vaba mälu metsas kui metsas on puud see, 349 00:28:30,090 --> 00:28:32,930 siis lõpuks sa lähed on eemaldada need puud ka. 350 00:28:32,930 --> 00:28:41,020 Kui me vaatame forest.c on meil mkforest, mis on nagu me ootame. 351 00:28:41,020 --> 00:28:42,890 Me malloc asju. 352 00:28:42,890 --> 00:28:51,740 Me initsialiseerida esimene krundile metsa NULL, sest see on tühi alustada, 353 00:28:51,740 --> 00:29:05,940 siis näeme pick, mis tagastab puu madalaima kaalu, mis on madalaim sagedus, 354 00:29:05,940 --> 00:29:13,560 ja siis läheb lahti, et eelkõige sõlme, mis osutab, et puude ja järgmise, 355 00:29:13,560 --> 00:29:16,760 nii et see võtab, et välja on seotud nimekirja metsas. 356 00:29:16,760 --> 00:29:24,510 Ja siis on meil siin taim, mis lisab puult seotud nimekirja. 357 00:29:24,510 --> 00:29:29,960 Mis metsas ei ole see kenasti hoiab ta järjestatud meile. 358 00:29:29,960 --> 00:29:37,910 Ja siis lõpuks, meil on rmforest ja ootuspäraselt meil rmtree hüüdis seal. 359 00:29:46,650 --> 00:29:55,440 >> Vaadates jaotust koodi seni, huffile.c oli ilmselt kõige raskem mõista, 360 00:29:55,440 --> 00:29:59,990 arvestades, et muid faile ise olid üsna lihtne järgida. 361 00:29:59,990 --> 00:30:03,090 Meie teadmised viiteid ja lingitud nimekirjad ja need, 362 00:30:03,090 --> 00:30:04,860 suutsime järgida päris hästi. 363 00:30:04,860 --> 00:30:10,500 Aga kõik me peame tõesti veenduda, et me mõistame on. H failid 364 00:30:10,500 --> 00:30:15,840 sest sa pead olema kutsudes neid ülesandeid, tegeledes nendega, kes tagastab väärtuste, 365 00:30:15,840 --> 00:30:20,590 nii et veenduge, et Te saate täielikult aru, missuguseid meetmeid on plaanis teha 366 00:30:20,590 --> 00:30:24,290 kui sa nimetad üks neist funktsioone. 367 00:30:24,290 --> 00:30:33,020 Aga tegelikult mõista sees see ei ole päris vajalik, sest meil on need. H faile. 368 00:30:35,170 --> 00:30:39,490 Meil on veel 2 faili lahkus meie jaotus kood. 369 00:30:39,490 --> 00:30:41,640 >> Vaatame prügimäele. 370 00:30:41,640 --> 00:30:47,230 Dump oma kommentaar siia võtab Huffman-tihendatud fail 371 00:30:47,230 --> 00:30:55,580 ja siis tõlgib ja puistab kõik selle sisu välja. 372 00:31:01,010 --> 00:31:04,260 Siin näeme, et see helistab hfopen. 373 00:31:04,260 --> 00:31:10,770 See on omamoodi peegeldamine FILE * sisse = fopen, 374 00:31:10,770 --> 00:31:13,500 ja siis te kaotate teabes. 375 00:31:13,500 --> 00:31:18,240 See on peaaegu identsed, välja arvatud asemel faili * sa läbides Huffile; 376 00:31:18,240 --> 00:31:22,030 asemel fopen sa läbides hfopen. 377 00:31:22,030 --> 00:31:29,280 Siin me loeme päises esimene, mis on omamoodi sarnane sellele, kuidas me loeme päises 378 00:31:29,280 --> 00:31:33,580 jaoks bitmap faili. 379 00:31:33,580 --> 00:31:38,000 Mis me teeme siin on kontrollides, et näha, kas päiseteavet 380 00:31:38,000 --> 00:31:44,330 sisaldab õigust maagiline number, mis näitab, et see on tegelik Huff faili 381 00:31:44,330 --> 00:31:53,610 siis kõik need kontrollid veendumaks, et fail, mida me avatud on tegelik puhises fail või mitte. 382 00:31:53,610 --> 00:32:05,330 Mis see on see väljundid sagedused kõik sümbolid, mis me näeme 383 00:32:05,330 --> 00:32:09,790 jooksul terminal graafiline tabel. 384 00:32:09,790 --> 00:32:15,240 See osa saab olema kasulik. 385 00:32:15,240 --> 00:32:24,680 See on natuke ja loeb vähehaaval arvesse muutuva natuke ja siis trükib selle välja. 386 00:32:28,220 --> 00:32:35,430 Nii et kui ma kutsun prügila kohta hth.bin, mis on tingitud huffing fail 387 00:32:35,430 --> 00:32:39,490 kasutades personal lahendus, ma saaksin seda. 388 00:32:39,490 --> 00:32:46,000 See kirjutamine kõiki neid tähti ja siis paneb sagedus, mille juures nad ilmuvad. 389 00:32:46,000 --> 00:32:51,180 Kui me vaatame, enamik neist on 0. väljaarvatud selle: H, mis ilmub kaks korda, 390 00:32:51,180 --> 00:32:54,820 ja siis T, mis ilmub kord. 391 00:32:54,820 --> 00:33:07,860 Ja siis on meil siin tegelik sõnum 0. ja 1s. 392 00:33:07,860 --> 00:33:15,450 Kui me vaatame hth.txt, mis on arvatavasti algne sõnum, mis oli puhises, 393 00:33:15,450 --> 00:33:22,490 ootame mõned Hs ja Ts seal. 394 00:33:22,490 --> 00:33:28,720 Nimelt ootame vaid 1 T ja 2 HS. 395 00:33:32,510 --> 00:33:37,440 Siin me oleme hth.txt. See tõepoolest on HTH. 396 00:33:37,440 --> 00:33:41,270 Kuulub sinna, kuigi me seda ei näe, on reavahetus sümbol. 397 00:33:41,270 --> 00:33:53,190 Huff faili hth.bin ka kodeeriva reavahetus sümbol samuti. 398 00:33:55,680 --> 00:34:01,330 Siin sest me teame, et selleks on HTH ja siis reavahetus, 399 00:34:01,330 --> 00:34:07,340 näeme, et tõenäoliselt H on esindatud ainult üks 1 400 00:34:07,340 --> 00:34:17,120 ja siis T on ilmselt 01 ja siis järgmine H 1 ning 401 00:34:17,120 --> 00:34:21,139 ja siis on meil reavahetus näitavad kaks 0.. 402 00:34:22,420 --> 00:34:24,280 Lahe. 403 00:34:26,530 --> 00:34:31,600 >> Ja siis lõpuks, sest me tegeleme mitu. C ja. H failid, 404 00:34:31,600 --> 00:34:36,350 me lähed on päris keeruline argument kompilaator, 405 00:34:36,350 --> 00:34:40,460 ja nii on meil siin Makefile, mis muudab prügila teile. 406 00:34:40,460 --> 00:34:47,070 Aga tegelikult, sa pead minema umbes tehes oma puff.c faili. 407 00:34:47,070 --> 00:34:54,330 Makefile tegelikult ei tegele tegemise puff.c teile. 408 00:34:54,330 --> 00:34:59,310 Me lahkume, et kuni redigeerida Makefile. 409 00:34:59,310 --> 00:35:05,930 Kui sisestad käsu nagu teevad kõik, näiteks, see teeb neile kõigile teile. 410 00:35:05,930 --> 00:35:10,760 Julgelt vaadata näiteid Makefile minevikust pset 411 00:35:10,760 --> 00:35:17,400 samuti läheb maha selle ühe näha, kuidas sa võiksid teha oma Puff fail 412 00:35:17,400 --> 00:35:20,260 muutes selle Makefile. 413 00:35:20,260 --> 00:35:22,730 Ja ongi meie jaotus kood. 414 00:35:22,730 --> 00:35:28,380 >> Kui oleme saanud läbi, et siis siin on lihtsalt üks meeldetuletus 415 00:35:28,380 --> 00:35:30,980 kuidas me kavatseme tegelema Huffman sõlmed. 416 00:35:30,980 --> 00:35:35,400 Me ei kavatse olla kutsudes neid tippe enam, me ei kavatse olla kutsudes neid puid 417 00:35:35,400 --> 00:35:39,260 kuhu me läheme, mida esindavad nende sümbol char, 418 00:35:39,260 --> 00:35:43,340 nende sagedus, esinemiste arv, kus täisarv. 419 00:35:43,340 --> 00:35:47,370 Me kasutame seda, sest see on täpsem kui sularahaga. 420 00:35:47,370 --> 00:35:52,980 Ja siis on meil veel üks osuti vasakule laps samuti õigus laps. 421 00:35:52,980 --> 00:35:59,630 Metsa, nagu nägime, on lihtsalt seotud nimekirja puud. 422 00:35:59,630 --> 00:36:04,670 Lõppkokkuvõttes, kui me ehitame üles meie Huff faili 423 00:36:04,670 --> 00:36:07,580 me tahame, et meie metsa sisaldada vaid 1 puu - 424 00:36:07,580 --> 00:36:12,420 1 puu, 1 root mitme lastele. 425 00:36:12,420 --> 00:36:20,840 Varem, kui me just muutes meie Huffman puud, 426 00:36:20,840 --> 00:36:25,360 alustasime paigutades kõik sõlmed peale meie ekraanil 427 00:36:25,360 --> 00:36:27,790 ja ütle, et me lähed on need sõlmed, 428 00:36:27,790 --> 00:36:32,920 lõpuks nad ei kavatse olla lehed, ja see on nende sümbol, see on nende sagedus. 429 00:36:32,920 --> 00:36:42,070 Meie metsa kui me lihtsalt 3 tähte, mis on metsa 3 puud. 430 00:36:42,070 --> 00:36:45,150 Ja siis kui me minna, kui me lisame esimesel vanem, 431 00:36:45,150 --> 00:36:48,080 tegime metsa 2 puud. 432 00:36:48,080 --> 00:36:54,930 Me eemaldada 2 neist lastest meie metsade ja seejärel asendas selle vanem sõlme 433 00:36:54,930 --> 00:36:58,820 et oli neid 2 sõlmed nagu lapsed. 434 00:36:58,820 --> 00:37:05,600 Ja siis lõpuks, meie viimane samm, et meie näiteks Nagu, BS ja Tingimused 435 00:37:05,600 --> 00:37:08,030 oleks teha lõplik vanem, 436 00:37:08,030 --> 00:37:13,190 ja nii siis mis tooks meie koguarvule puud metsas 1. 437 00:37:13,190 --> 00:37:18,140 Kas igaüks vaadata, kuidas hakkate läbi mitu puud oma metsast 438 00:37:18,140 --> 00:37:22,520 ja lõpuks 1? Okei. Lahe. 439 00:37:25,530 --> 00:37:28,110 >> Mida me vajame, et teha Puff? 440 00:37:28,110 --> 00:37:37,110 Mida me peame tegema, on tagada, et alati, nad annavad meile õiget tüüpi sisend 441 00:37:37,110 --> 00:37:39,090 nii et me saame tegelikult käivitada programmi. 442 00:37:39,090 --> 00:37:43,130 Sel juhul nad ei kavatse anda meile pärast oma esimese käsurea argument 443 00:37:43,130 --> 00:37:53,440 2 rohkem: fail, mida tahame lahti ja väljund hõrendatakse faili. 444 00:37:53,440 --> 00:38:00,410 Aga kui me veenduge, et nad on läbinud meid õiges summas väärtused, 445 00:38:00,410 --> 00:38:05,820 me soovime tagada, et sisend on Huff fail või mitte. 446 00:38:05,820 --> 00:38:10,420 Ja siis kui me garanteerida, et see on Huff faili, siis me tahame ehitada meie puu, 447 00:38:10,420 --> 00:38:20,940 ehitada puu nii, et see sobib puu, et inimene, kes saatis sõnumi ehitatud. 448 00:38:20,940 --> 00:38:25,840 Siis pärast me ehitada puu, siis saame tegeleda 0. ja 1s et nad sooritanud, 449 00:38:25,840 --> 00:38:29,590 järgige neid mööda meie puu, sest see on identsed, 450 00:38:29,590 --> 00:38:33,510 ja siis kirjutada, et sõnum välja, tõlgendada bitti tagasi tähemärki. 451 00:38:33,510 --> 00:38:35,880 Ja siis lõpus, sest me tegeleme vihjeid siin, 452 00:38:35,880 --> 00:38:38,110 tahame veenduda, et me ei ole mingit mälu lekked 453 00:38:38,110 --> 00:38:41,330 ja et me tasuta kõike. 454 00:38:42,820 --> 00:38:46,430 >> Tagada nõuetekohane kasutamine on vana müts meiega nüüd. 455 00:38:46,430 --> 00:38:51,980 Me võtame ka sisend, mis saab olema faili nimi pahv, 456 00:38:51,980 --> 00:38:56,010 ja siis me täpsustada väljund, 457 00:38:56,010 --> 00:39:01,580 nii faili nime jaoks paisutatud väljund, mis on tekstifaili. 458 00:39:03,680 --> 00:39:08,820 See on kasutamist. Ja nüüd me tahame tagada, et sisend on puhises või mitte. 459 00:39:08,820 --> 00:39:16,420 Mõeldes tagasi, oli seal midagi jaotus kood, mis aitaks meil 460 00:39:16,420 --> 00:39:21,570 arusaamisega, kas fail on puhises või mitte? 461 00:39:21,570 --> 00:39:26,910 Oli teavet huffile.c umbes Huffeader. 462 00:39:26,910 --> 00:39:33,430 Me teame, et iga Huff fail on Huffeader seotud see maagiline number 463 00:39:33,430 --> 00:39:37,240 samuti hulgaliselt sagedused iga sümbol 464 00:39:37,240 --> 00:39:39,570 samuti kontrollsumma. 465 00:39:39,570 --> 00:39:43,180 Me teame seda, kuid me võtsid ka piiluda dump.c, 466 00:39:43,180 --> 00:39:49,120 kus ta luges sisse Huff faili. 467 00:39:49,120 --> 00:39:53,990 Ja nii teha, et ta pidi kontrollima, kas see tõesti oli puhises või mitte. 468 00:39:53,990 --> 00:40:03,380 Nii et ehk me võiksime kasutada dump.c nagu struktuuri meie puff.c. 469 00:40:03,380 --> 00:40:12,680 Tagasi pset 4, kui meil oli faili copy.c et kopeeritud RGB kolmikute 470 00:40:12,680 --> 00:40:14,860 ja me tõlgendada, et Dekkari ja suuruse muutmine, 471 00:40:14,860 --> 00:40:20,390 Samamoodi mida sa võiksid teha, on lihtsalt käivitada käsk nagu cp dump.c puff.c 472 00:40:20,390 --> 00:40:23,600 ja kasutada mõningaid kood seal. 473 00:40:23,600 --> 00:40:28,210 Kuid ta ei kavatse olla nii lihtne protsessi 474 00:40:28,210 --> 00:40:33,010 tõlkimisega dump.c arvesse puff.c, 475 00:40:33,010 --> 00:40:36,160 kuid vähemalt see annab teile kuskil alustada 476 00:40:36,160 --> 00:40:40,540 kuidas tagada, et sisend on tegelikult puhises või mitte 477 00:40:40,540 --> 00:40:43,240 samuti mõned muud asjad. 478 00:40:45,930 --> 00:40:50,250 Meil on taganud nõuetekohast kasutamist ja tagatakse, et sisend on puhises. 479 00:40:50,250 --> 00:40:53,570 Iga kord, kui me oleme teinud, et me oleme teinud oma õige veatuvastuse, 480 00:40:53,570 --> 00:41:01,520 nii tagasi ja suitsetamisest funktsiooni kui mõned tõrge, kui seal on probleem. 481 00:41:01,520 --> 00:41:07,170 >> Nüüd, mida me tahame teha, on luua tegelik puu. 482 00:41:08,840 --> 00:41:12,640 Kui me vaatame Forest on 2 põhiülesanded 483 00:41:12,640 --> 00:41:15,800 et me ei kavatse tahad saada väga tuttav. 484 00:41:15,800 --> 00:41:23,870 Seal on Boole'i ​​funktsioon taime taimed mitte-0 sagedus puu sees meie metsa. 485 00:41:23,870 --> 00:41:29,250 Ja nii sa läbima kursor metsa ja viit puud. 486 00:41:32,530 --> 00:41:40,340 Kiire küsimus: Kui palju metsi teil on, kui sa oled hoone Huffman puu? 487 00:41:44,210 --> 00:41:46,650 Meie metsas on nagu meie lõuend, eks? 488 00:41:46,650 --> 00:41:50,800 Nii et me ainult kavatse olla 1 metsa, kuid me ei kavatse olla mitu puud. 489 00:41:50,800 --> 00:41:57,590 Nii et enne helistamist taim, sa oled ilmselt läheb tahad teha oma metsast. 490 00:41:57,590 --> 00:42:04,430 On käsk, et kui sa vaatad forest.h kohta kuidas saate teha metsa. 491 00:42:04,430 --> 00:42:09,270 Te saate taime puu. Me teame, kuidas seda teha. 492 00:42:09,270 --> 00:42:11,590 Ja siis võite valida ka metsast, 493 00:42:11,590 --> 00:42:17,540 eemaldades puu madalaima kaalu ja annab teile kursor sellele. 494 00:42:17,540 --> 00:42:23,090 Mõeldes tagasi ajale, mil me tegime näited ise, 495 00:42:23,090 --> 00:42:27,980 kui olime joonistus välja, me lihtsalt lihtsalt lisada linke. 496 00:42:27,980 --> 00:42:31,680 Aga siin mitte lihtsalt lisades lingid, 497 00:42:31,680 --> 00:42:40,630 ma arvan et rohkem kui sa eemaldades 2 nende sõlmede ja seejärel asendada see teine. 498 00:42:40,630 --> 00:42:44,200 Väljendada, et nii korjamine ja istutusmaterjali, 499 00:42:44,200 --> 00:42:48,840 olete korjamine 2 puud ja seejärel istutada uue puu 500 00:42:48,840 --> 00:42:54,060 millel on need 2 puud, mida korjatakse nagu lapsed. 501 00:42:57,950 --> 00:43:05,280 Et ehitada Huffman on puu, saate lugeda sümbolid ja sageduste 502 00:43:05,280 --> 00:43:10,790 sest Huffeader annab selle sulle, 503 00:43:10,790 --> 00:43:14,250 annab teile array sagedustel. 504 00:43:14,250 --> 00:43:19,660 Nii saate edasi minna ja lihtsalt ignoreerida midagi 0 see 505 00:43:19,660 --> 00:43:23,760 sest me ei taha 256 lehed lõpus ta. 506 00:43:23,760 --> 00:43:27,960 Me tahame ainult mõned lehed, mis on märki 507 00:43:27,960 --> 00:43:31,600 mis on tegelikult kasutatud faili. 508 00:43:31,600 --> 00:43:37,590 Te saate lugeda ka need sümbolid ja kõik need sümbolid, mis on mitte-0 sagedused, 509 00:43:37,590 --> 00:43:40,440 need hakkavad olema puud. 510 00:43:40,440 --> 00:43:45,990 Mida saab teha, on iga kord, kui lugeda mitte-0 sagedus sümbol, 511 00:43:45,990 --> 00:43:50,660 saate taime puu metsas. 512 00:43:50,660 --> 00:43:56,620 Kui sa taime puud metsas, võite liituda need puud nagu õed-vennad, 513 00:43:56,620 --> 00:44:01,130 nii läheb tagasi istutamine ja korjamine kus on võimalik valida 2 ja siis taim 1 514 00:44:01,130 --> 00:44:05,820 kui see 1, et te taime on vanem 2 last, et valisite. 515 00:44:05,820 --> 00:44:11,160 Nii siis teie lõpptulemus saab olema ühe puu oma metsas. 516 00:44:16,180 --> 00:44:18,170 See, kuidas teil ehitada oma puu. 517 00:44:18,170 --> 00:44:21,850 >> On mitmeid asju, mis võiks valesti minna siin 518 00:44:21,850 --> 00:44:26,580 sest me tegeleme teha uusi puid ja tegelevad viiteid ja asjad niimoodi. 519 00:44:26,580 --> 00:44:30,450 Enne kui me tegelesime suunanäitajaks, 520 00:44:30,450 --> 00:44:36,580 kui me malloc'd tahtsime veenduda, et see ei andnud meile nullviida väärtus. 521 00:44:36,580 --> 00:44:42,770 Nii et mitu sammu selles protsessis seal saab olema mitmeid juhtumeid 522 00:44:42,770 --> 00:44:45,920 kus teie programm võiks ebaõnnestuda. 523 00:44:45,920 --> 00:44:51,310 Mida sa tahad teha, on sa tahad teha kindel, et sa hakkama neid vigu, 524 00:44:51,310 --> 00:44:54,580 ja spec ta ütleb neid lahendab nõtkelt, 525 00:44:54,580 --> 00:45:00,280 Nii nagu välja printida sõnumi kasutaja neile öelnud, miks programm on loobuda 526 00:45:00,280 --> 00:45:03,050 ja siis kohe lahkud. 527 00:45:03,050 --> 00:45:09,490 Selleks veakäsitlust, pea meeles, et sa tahad seda kontrollida 528 00:45:09,490 --> 00:45:12,160 iga kord, et võib esineda rike. 529 00:45:12,160 --> 00:45:14,660 Iga kord, et te teete uue pointer 530 00:45:14,660 --> 00:45:17,040 sa tahad teha kindel, et see on edukas. 531 00:45:17,040 --> 00:45:20,320 Enne mida olime harjunud tegema, on teha uus osuti ja malloc see, 532 00:45:20,320 --> 00:45:22,380 ja siis me kontrollida, kas see pointer on NULL. 533 00:45:22,380 --> 00:45:25,670 Nii et ei kavatse olla mõned juhtumid, kus saab lihtsalt teha, et 534 00:45:25,670 --> 00:45:28,610 kuid mõnikord sa tegelikult kutsutakse funktsioon 535 00:45:28,610 --> 00:45:33,100 ja selles funktsioon, see on üks, mis teeb mallocing. 536 00:45:33,100 --> 00:45:39,110 Sellisel juhul, kui me vaatame tagasi teatud funktsioone jooksul koodi, 537 00:45:39,110 --> 00:45:42,260 mõned neist on Boole'i ​​funktsioonid. 538 00:45:42,260 --> 00:45:48,480 Teoreetiliselt juhul kui meil on Boole'i ​​funktsioon nimega foo, 539 00:45:48,480 --> 00:45:54,580 Põhimõtteliselt võime eeldada, et lisaks teha kõik foo teeb, 540 00:45:54,580 --> 00:45:57,210 kuna see on Boole'i ​​funktsioon, siis tagastab true või false - 541 00:45:57,210 --> 00:46:01,300 tõsi kui see õnnestub, vale, kui mitte. 542 00:46:01,300 --> 00:46:06,270 Nii et me tahame kontrollida, kas tagastatav väärtus foo on õige või vale. 543 00:46:06,270 --> 00:46:10,400 Kui see on vale, see tähendab, et me ei kavatse soovite printida mingi sõnum 544 00:46:10,400 --> 00:46:14,390 ja seejärel sulgege programm. 545 00:46:14,390 --> 00:46:18,530 Mida me tahame teha, on kontrollida tagastatav väärtus suva. 546 00:46:18,530 --> 00:46:23,310 Kui foo tagastab false, siis me teame, et me tekkinud mingi viga 547 00:46:23,310 --> 00:46:25,110 ja me peame loobuma meie programm. 548 00:46:25,110 --> 00:46:35,600 Viis seda teha on on seisund, kus tegelik funktsioon ise on oma tingimus. 549 00:46:35,600 --> 00:46:39,320 Ütle suva võtab X. 550 00:46:39,320 --> 00:46:43,390 Meil võib olla tingimusena if (foo (x)). 551 00:46:43,390 --> 00:46:50,900 Põhimõtteliselt tähendab see, et kui lõpus täidesaatva suva see tagastab tõsi, 552 00:46:50,900 --> 00:46:57,390 siis saame seda teha, sest funktsioon peab hindama foo 553 00:46:57,390 --> 00:47:00,500 et hinnata kogu seisukorras. 554 00:47:00,500 --> 00:47:06,500 Nii siis, et kuidas saab midagi teha, kui funktsioon tagastab tõese ja on edukas. 555 00:47:06,500 --> 00:47:11,800 Aga kui sa oled veatuvastuse, siis ainult taha loobuda, kui teie funktsioon tagastab false. 556 00:47:11,800 --> 00:47:16,090 Mida võiks teha, on lihtsalt lisada == false või lihtsalt lisada paugu ta ees 557 00:47:16,090 --> 00:47:21,010 ja siis on teil if (! suva). 558 00:47:21,010 --> 00:47:29,540 Jooksul, et keha selle tingimuse siis oleks kõik veakäsitlust 559 00:47:29,540 --> 00:47:36,940 nii meeldib, "Ei saa luua seda puud" ja siis tagasi 1 või midagi sellist. 560 00:47:36,940 --> 00:47:43,340 Mida see teeb, kuigi see, et kuigi foo tagasi vale - 561 00:47:43,340 --> 00:47:46,980 Ütle suva tagastab tõsi. 562 00:47:46,980 --> 00:47:51,060 Siis sa ei pea helistada suva uuesti. See on levinud eksiarvamus. 563 00:47:51,060 --> 00:47:54,730 Sest see oli sinu seisund, see on juba hinnatud, 564 00:47:54,730 --> 00:47:59,430 nii sul on juba tulemus, kui te kasutate teha puu või midagi sellist 565 00:47:59,430 --> 00:48:01,840 või taime või pick või midagi. 566 00:48:01,840 --> 00:48:07,460 See on juba selline väärtus. See on juba täidetud. 567 00:48:07,460 --> 00:48:10,730 Nii et see on kasulik kasutada Boole'i ​​funktsioonid, kui tingimus 568 00:48:10,730 --> 00:48:13,890 sest kas te tegelikult täidab keha silmus, 569 00:48:13,890 --> 00:48:18,030 ta täidab funktsiooni niikuinii. 570 00:48:22,070 --> 00:48:27,330 >> Meie poolt teine ​​samm on kirjutame sõnum faili. 571 00:48:27,330 --> 00:48:33,070 Kui me ehitame Huffman puu, siis kirjutame sõnum fail on üsna lihtne. 572 00:48:33,070 --> 00:48:39,260 See on päris lihtne nüüd lihtsalt järgige 0. ja 1s. 573 00:48:39,260 --> 00:48:45,480 Ja nii kokkuleppeliselt me ​​teame, et Huffman puu 0s näitavad vasakule 574 00:48:45,480 --> 00:48:48,360 ja 1s näitavad õigus. 575 00:48:48,360 --> 00:48:53,540 Siis kui sa lugeda vähehaaval, iga kord, kui sa saad 0 576 00:48:53,540 --> 00:48:59,100 saate jälgida vasak haru ja siis iga kord, kui lugeda 1 577 00:48:59,100 --> 00:49:02,100 sa lähed järgima õiguse filiaal. 578 00:49:02,100 --> 00:49:07,570 Ja siis sa lähed seni, kuni te tabanud lehed 579 00:49:07,570 --> 00:49:11,550 sest lehed hakkavad olema lõpus filiaalid. 580 00:49:11,550 --> 00:49:16,870 Kuidas me saame öelda, kas oleme tabanud lehtedega või mitte? 581 00:49:19,800 --> 00:49:21,690 Me ütlesime seda varem. 582 00:49:21,690 --> 00:49:24,040 [Üliõpilane] Kui osuti on NULL. >> Jah. 583 00:49:24,040 --> 00:49:32,220 Me ei saa öelda, kui oleme tabanud lehed kui viiteid nii vasakule ja paremale puud on NULL. 584 00:49:32,220 --> 00:49:34,110 Perfect. 585 00:49:34,110 --> 00:49:40,320 Me teame, mida me tahame lugeda vähehaaval meie Huff faili. 586 00:49:43,870 --> 00:49:51,220 Nagu nägime varem dump.c, mida nad tegid on nad lugeda vähehaaval sisse Huff fail 587 00:49:51,220 --> 00:49:54,560 ja lihtsalt välja printida, millised need jupid. 588 00:49:54,560 --> 00:49:58,430 Me ei kavatse seda teha. Me hakkame tegema midagi, mis on natuke keerulisem. 589 00:49:58,430 --> 00:50:03,620 Aga mida me teha saame, on meil võimalik võtta, et natuke koodi, mis loeb sisse natuke. 590 00:50:03,620 --> 00:50:10,250 Siin on meil täisarv natuke kujutavad praegust natuke, et me oleme. 591 00:50:10,250 --> 00:50:15,520 See hoolitseb itereerimise kõik bittide fail kuni vajutad faili lõppu. 592 00:50:15,520 --> 00:50:21,270 Tuginedes sellele, siis sa lähed, et tahad olla mingi iteraatori 593 00:50:21,270 --> 00:50:26,760 läbida oma puu. 594 00:50:26,760 --> 00:50:31,460 Ja siis selle põhjal, kas natuke on 0 või 1, 595 00:50:31,460 --> 00:50:36,920 sa lähed tahan kas liikuda, et iteraatori vasakule või liigutada paremale 596 00:50:36,920 --> 00:50:44,080 kogu tee kuni jõuate lehed, nii et kõik viis kuni selle sõlme, et sa oled 597 00:50:44,080 --> 00:50:48,260 ei viita veel sõlmed. 598 00:50:48,260 --> 00:50:54,300 Miks me saame seda teha koos Huffman faili, kuid ei Morse kood? 599 00:50:54,300 --> 00:50:56,610 Sest morsetähestik seal natuke ebaselgeks. 600 00:50:56,610 --> 00:51:04,440 Meil võiks olla nagu, oh oota, oleme tabanud kirja teel, et äkki see on meie kirjale 601 00:51:04,440 --> 00:51:08,150 arvestades, et kui me jätkame lihtsalt veidi kauem, siis me oleks tabanud veel ühe kirja. 602 00:51:08,150 --> 00:51:13,110 Aga see ei juhtu ka Huffman kodeerimine, 603 00:51:13,110 --> 00:51:17,540 nii saame olla kindlad, et ainus viis, et me ei kavatse tabanud iseloomuga 604 00:51:17,540 --> 00:51:23,480 on kui see sõlm vasakule ja paremale lapsed on NULL. 605 00:51:28,280 --> 00:51:32,350 >> Lõpuks tahame vabastada kõik meie mälu. 606 00:51:32,350 --> 00:51:37,420 Me tahame nii lähedale Huff faili, et oleme arutanud 607 00:51:37,420 --> 00:51:41,940 samuti eemaldada kõik puud meie metsas. 608 00:51:41,940 --> 00:51:46,470 Tuginedes oma rakendamise, sa oled ilmselt läheb soovite helistada eemaldada metsa 609 00:51:46,470 --> 00:51:49,780 asemel tegelikult läbimas kõik puud ise. 610 00:51:49,780 --> 00:51:53,430 Aga kui te olete teinud ajutise puud, tahad, et vabastada seda. 611 00:51:53,430 --> 00:51:59,060 Sa tead oma koodi parim, et sa tead, kuhu eraldatakse mälu. 612 00:51:59,060 --> 00:52:04,330 Ja kui te lähete, alusta isegi kontrolli F'ing jaoks malloc, 613 00:52:04,330 --> 00:52:08,330 nähes kui sa malloc ja veenduge, et teil vabastama kõik selle 614 00:52:08,330 --> 00:52:10,190 aga siis lihtsalt läbimas oma koodi, 615 00:52:10,190 --> 00:52:14,260 mõista, kus sa võisid eraldatud mälu. 616 00:52:14,260 --> 00:52:21,340 Tavaliselt võid lihtsalt öelda: "Lõpus fail Ma lihtsalt eemaldada metsa minu metsa" 617 00:52:21,340 --> 00:52:23,850 nii et põhimõtteliselt on selge, et mälu, vaba, et 618 00:52:23,850 --> 00:52:28,310 "Ja siis ma lähen samuti toimiku sulgemise ja siis minu programm läheb loobuda." 619 00:52:28,310 --> 00:52:33,810 Aga see, et ainus kord, kui teie programm sulgub? 620 00:52:33,810 --> 00:52:37,880 Ei, sest mõnikord on võinud olla viga, mis juhtus. 621 00:52:37,880 --> 00:52:42,080 Võib-olla me ei suutnud avada faili või me ei saaks teha teise puu 622 00:52:42,080 --> 00:52:49,340 või mingi viga juhtus mälu eraldamise protsessi ja nii see tagastatakse NULL. 623 00:52:49,340 --> 00:52:56,710 Viga juhtus ja siis tagasi ja lõpetan. 624 00:52:56,710 --> 00:53:02,040 Nii siis tahan veenduda, et iga võimaliku aja jooksul, et teie programm võib loobuda, 625 00:53:02,040 --> 00:53:06,980 soovite vabastada kõik oma mälu seal. 626 00:53:06,980 --> 00:53:13,370 See ei ole lihtsalt saab olema päris lõpus peamine funktsioon, et sa loobud oma kood. 627 00:53:13,370 --> 00:53:20,780 Sa tahad vaadata tagasi igal juhul, et kood potentsiaalselt võib naasta enneaegselt 628 00:53:20,780 --> 00:53:25,070 ja siis vaba iganes mälu mõtet. 629 00:53:25,070 --> 00:53:30,830 Ütle, et kutsus tegema metsa ja mis tagastatakse vale. 630 00:53:30,830 --> 00:53:34,230 Siis sa ilmselt ei vaja eemaldada oma metsa 631 00:53:34,230 --> 00:53:37,080 sest sa ei pea metsa veel. 632 00:53:37,080 --> 00:53:42,130 Ent igal hetkel kood, kus te võite naasta enneaegselt 633 00:53:42,130 --> 00:53:46,160 sa tahad teha kindel, et sa vabastada võimalikest mälu. 634 00:53:46,160 --> 00:53:50,020 >> Nii et kui me tegeleme vabastades mälu ja millel on potentsiaal lekkeid, 635 00:53:50,020 --> 00:53:55,440 me tahame mitte ainult kasutada meie otsus ja meie loogika 636 00:53:55,440 --> 00:54:01,850 vaid ka kasutada Valgrind kas me oleme vabanenud kõik meie mälu korralikult või mitte. 637 00:54:01,850 --> 00:54:09,460 Võite käivitada Valgrind kohta Puff ja siis sa pead ka andke seda 638 00:54:09,460 --> 00:54:14,020 õige mitu käsurea argumente Valgrind. 639 00:54:14,020 --> 00:54:18,100 Võite käivitada, kuid toodang on veidi segasena. 640 00:54:18,100 --> 00:54:21,630 Me oleme saanud natuke kasutatakse seda Speller, kuid peame siiski veidi rohkem abi, 641 00:54:21,630 --> 00:54:26,450 nii siis töötab ta veel mõned lipud nagu lekke-check = täis, 642 00:54:26,450 --> 00:54:32,040 et tõenäoliselt annab meile rohkem abiks toodangut Valgrind. 643 00:54:32,040 --> 00:54:39,040 >> Siis veel üks kasulik näpunäide, kui olete silumine on käsu diff. 644 00:54:39,040 --> 00:54:48,520 Võite kasutada töötajate rakendamist Huff, joosta, et tekstifaili 645 00:54:48,520 --> 00:54:55,400 ja siis tulemuse selle binaarfaili, binaarne Huff faili, eripäraseks. 646 00:54:55,400 --> 00:54:59,440 Siis kui sa jooksed oma pahv, et binaarfaili 647 00:54:59,440 --> 00:55:03,950 siis ideaalis oma Väljundfailid tekstifaili saab olema identne 648 00:55:03,950 --> 00:55:08,200 esialgse üks, et olete sooritanud sisse 649 00:55:08,200 --> 00:55:15,150 Siin ma kasutan hth.txt nagu näiteks, ja see on üks rääkis oma spec. 650 00:55:15,150 --> 00:55:21,040 See on sõna otseses mõttes lihtsalt HTH ja siis reavahetus. 651 00:55:21,040 --> 00:55:30,970 Aga kindlasti tunda vaba ja olete kindlasti julgustada kasutama enam näiteid 652 00:55:30,970 --> 00:55:32,620 oma teksti faili. 653 00:55:32,620 --> 00:55:38,110 >> Saate ka tulistas võibolla pakkimist ja siis mahalaadimine 654 00:55:38,110 --> 00:55:41,600 mõned failid, mida kasutatakse Speller nagu Sõda ja rahu 655 00:55:41,600 --> 00:55:46,710 või Jane Austeni või midagi sellist - et oleks selline lahe - või Austin Powers, 656 00:55:46,710 --> 00:55:51,880 selline tegelevad suuremate failide sest me ei tulnud maha see 657 00:55:51,880 --> 00:55:55,590 kui me kasutada järgmise tööriista siin, ls-l. 658 00:55:55,590 --> 00:56:01,150 Me oleme harjunud ls, mis põhimõtteliselt on loetletud kõik sisu meie praeguses kataloogis. 659 00:56:01,150 --> 00:56:07,860 Läbivad lipu-l tegelikult kuvab suurus need failid. 660 00:56:07,860 --> 00:56:12,690 Kui te lähete kaudu pset spec, siis tegelikult te loeksite luua binaarfaili 661 00:56:12,690 --> 00:56:16,590 kohta huffing see, ja te näete, et väga väikeste failide 662 00:56:16,590 --> 00:56:23,910 ruumi maksumus pakkimata ja tõlkides kõik, et teave 663 00:56:23,910 --> 00:56:26,980 kõik sagedused ja asjad, mis kaalub üles tegelik kasu 664 00:56:26,980 --> 00:56:30,000 kokkusurumise fail esiteks. 665 00:56:30,000 --> 00:56:37,450 Aga kui sa jooksed selle mõned pikemat teksti faili, siis võite näha, et hakkate saada teatud kasu 666 00:56:37,450 --> 00:56:40,930 aastal kokkusurumise neid faile. 667 00:56:40,930 --> 00:56:46,210 >> Ja siis lõpuks oleme meie vana semu GDB, mis on kindlasti kavatse tulla mugav ka. 668 00:56:48,360 --> 00:56:55,320 >> Kas meil on lisaküsimusi Huff puud või protsessi ehk tegemise puud 669 00:56:55,320 --> 00:56:58,590 või lisaküsimusi Huff'n Puff? 670 00:57:00,680 --> 00:57:02,570 Okei. Ma jään umbes natuke. 671 00:57:02,570 --> 00:57:06,570 >> Tänu kõigile. See oli kiirtutvustus 6. Ja õnne. 672 00:57:08,660 --> 00:57:10,000 >> [CS50.TV]