1 00:00:00,000 --> 00:00:02,210 [Powered by Google Translate] [Bisita gidatua - Arazoa Set 6] 2 00:00:02,210 --> 00:00:04,810 [Zamyla Chan - Harvard Unibertsitatea] 3 00:00:04,810 --> 00:00:07,240 [Hau CS50 da. - CS50.TV] 4 00:00:07,240 --> 00:00:12,180 >> Kaixo, guztioi, eta gidatua 6 ongi etorria: Huff'n Puff. 5 00:00:12,180 --> 00:00:17,440 Huff'n Puff zer egiten ari garen Huffman Konprimitutako fitxategia aurre 6 00:00:17,440 --> 00:00:20,740 eta, ondoren, puffing back up, beraz, deskonprimitzerakoan 7 00:00:20,740 --> 00:00:25,810 beraz, 0 s eta 1s erabiltzaileak bidaltzen dizkigun itzuli ahal izango dugu. 8 00:00:25,810 --> 00:00:30,660 eta berriz jatorrizko testua sartu bihurtzeko. 9 00:00:30,660 --> 00:00:34,360 Pset 6 pretty cool izango zaren tresna batzuk ikus delako 10 00:00:34,360 --> 00:00:41,730 4 eta pset pset 5 eta mota erabili konbinatuz 1 kontzeptua pretty neat 11 00:00:41,730 --> 00:00:43,830 pentsatu zatoz. 12 00:00:43,830 --> 00:00:50,110 >> Era berean, dudarik gabe, 4 eta 5 pset gehien Challenging psets izan dugun eskaintzen ziren. 13 00:00:50,110 --> 00:00:53,950 Beraz, hemendik aurrera, C pset 1 gehiago dugu, 14 00:00:53,950 --> 00:00:56,480 eta, ondoren, horren ondoren web programazio Oraindik dugu. 15 00:00:56,480 --> 00:01:02,310 Beraz, zorionak zuei CS50 konkorraren gogorrenak baino gehiago lortzeko. 16 00:01:03,630 --> 00:01:09,760 >> Moving Huff'n Puff, gure pset honetan laukitik Huffman zuhaitz izango dira, 17 00:01:09,760 --> 00:01:14,700 beraz, ez bakarrik nola zuhaitz bitar lana, baina, halaber, zehazki Huffman zuhaitz ulertzeko, 18 00:01:14,700 --> 00:01:16,240 nola eraikitzen ari dira. 19 00:01:16,240 --> 00:01:20,210 Eta gero, banaketa kodea pset honetan asko izan dugu, 20 00:01:20,210 --> 00:01:22,480 etorri eta benetan ikusteko kodea dugu 21 00:01:22,480 --> 00:01:24,670 ahal izango agian ez dugu oraindik guztiz ulertzen. 22 00:01:24,670 --> 00:01:30,080 eta, beraz, c fitxategiak izango da, baina, ondoren, bere erantsitako h fitxategiak 23 00:01:30,080 --> 00:01:34,300 nahikoa emango digu ulertzeko behar ditugu, beraz, funtzio horiek nola lan egiten badakigu 24 00:01:34,300 --> 00:01:38,100 edo, gutxienez, zer egin behar dira beraien sarrera eta irteera 25 00:01:38,100 --> 00:01:40,760 nahiz eta ez dakigu zer kutxa beltza gertatzen ari 26 00:01:40,760 --> 00:01:44,090 edo ez dute ulertzen zer kutxa beltza barruan gertatzen ari dena. 27 00:01:44,090 --> 00:01:49,400 Eta gero, azkenik, ohikoa den bezala, datu-egitura berriak ari gara aurre, 28 00:01:49,400 --> 00:01:51,840 nodo horren mota espezifikoak zenbait gauza, 29 00:01:51,840 --> 00:01:56,080 eta, beraz, hemen luma bat eta paper ez da soilik diseinu-prozesua 30 00:01:56,080 --> 00:01:58,470 eta nola zure pset behar lan irudikatu saiatzen ari zaren 31 00:01:58,470 --> 00:02:00,520 baina arazketa zehar ere. 32 00:02:00,520 --> 00:02:06,140 GDB izan dezakezu zure luma eta paper batera hartzen behera balioak dira, 33 00:02:06,140 --> 00:02:09,320 zure geziak non apuntatzen dira, eta horrelako gauzak. 34 00:02:09,320 --> 00:02:13,720 >> Lehenik eta behin dezagun Huffman zuhaitz begiratu. 35 00:02:13,720 --> 00:02:19,600 Huffman zuhaitz bitar zuhaitzak dira, zentzua nodo bakoitzak 2 seme-alaba ditu. 36 00:02:19,600 --> 00:02:24,870 Huffman zuhaitz ezaugarri ohikoena balioak 37 00:02:24,870 --> 00:02:27,140 bit gutxien irudikatzen dira. 38 00:02:27,140 --> 00:02:32,690 Morse kodea hitzaldia adibide, finkatutako mota letrak batzuk ikusi ditugu. 39 00:02:32,690 --> 00:02:38,030 Ari zaren, adibidez, A edo E bat itzultzeko saiatzen bada, 40 00:02:38,030 --> 00:02:43,940 sarritan itzultzen ari zara, eta, beraz, ordez bit multzo osoa erabili beharrik 41 00:02:43,940 --> 00:02:48,640 ohiko datu mota esleitu, konprimitu behera gutxiago, 42 00:02:48,640 --> 00:02:53,730 eta, ondoren, letrak direnek irudikatzen gutxiago sarritan bit longer irudikatzen dira 43 00:02:53,730 --> 00:02:59,840 duzula ordaindu daitekeelako pisatzen duzu letrak agertzen diren maiztasunak. 44 00:02:59,840 --> 00:03:03,020 Ideia bera daukagu ​​hemen Huffman zuhaitzak 45 00:03:03,020 --> 00:03:12,360 non, bide mota zenbait karaktere kate bat egiten ari gara. 46 00:03:12,360 --> 00:03:14,470 Eta gero maiztasuna gehien duten pertsonaiak 47 00:03:14,470 --> 00:03:17,940 bit gutxien irudikatzen joan. 48 00:03:17,940 --> 00:03:22,020 >> Huffman zuhaitz bat eraikitzeko duzula 49 00:03:22,020 --> 00:03:27,430 testuan agertzen diren karaktereak guztiak jartzea da 50 00:03:27,430 --> 00:03:30,630 eta haien maiztasuna kalkulatzeko, nola askotan agertzen dira. 51 00:03:30,630 --> 00:03:33,880 Hori bai letrak horiek zenbat aldiz agertzen Aldaketa 52 00:03:33,880 --> 00:03:40,270 edo, agian, bat ehuneko zenbat bakoitzak agertzen karaktere guztiak. 53 00:03:40,270 --> 00:03:44,270 Eta beraz, zer egin nahi duzu behin hori mapatzen out of duzu 54 00:03:44,270 --> 00:03:49,060 ondoren, 2 maiztasun txikiena eta gero sartu anai-arreba gisa 55 00:03:49,060 --> 00:03:55,660 non gero guraso nodo frekuentzia bat horrek bere 2 haur batura da. 56 00:03:55,660 --> 00:04:00,870 Eta gero, hitzarmen by diotenez, ezker nodo 57 00:04:00,870 --> 00:04:03,770 0 adarra jarraituz jarraitzen duzu, 58 00:04:03,770 --> 00:04:08,140 eta, ondoren, eskuinekoa nodoaren 1 adarrean. 59 00:04:08,140 --> 00:04:16,040 Morse kodea ikusi bezala, bat Gotcha izan zen soinua eta beep bada 60 00:04:16,040 --> 00:04:18,120 anbiguoa izan da. 61 00:04:18,120 --> 00:04:22,430 Bai, gutun-1 edo 2 letren segida bat izan da. 62 00:04:22,430 --> 00:04:27,790 Eta beraz, zer Huffman zuhaitzak ez da pertsonaien izaera duelako 63 00:04:27,790 --> 00:04:34,140 edo gure benetako pertsonaiak adarrean nodo azken final - 64 00:04:34,140 --> 00:04:39,300 erreferentzia hosto gisa dugu horren arabera ezin da anbiguotasuna edozein izan 65 00:04:39,300 --> 00:04:45,160 terminoak zein letra kodetzeko bit serie saiatzen ari zaren 66 00:04:45,160 --> 00:04:50,670 1 letra ordezkatzen duten bit zehar inon ez delako 67 00:04:50,670 --> 00:04:55,960 egingo beste gutun osoa aurkituko duzu, eta ez da nahasmena edozein dago. 68 00:04:55,960 --> 00:04:58,430 Baina adibide dugu you guys benetan ikusi 69 00:04:58,430 --> 00:05:02,120 ordez, besterik gabe gurekin kontatzea, hori egia da. 70 00:05:02,120 --> 00:05:06,390 >> Dezagun begiratu Huffman zuhaitz baten adibide erraz bat. 71 00:05:06,390 --> 00:05:09,380 Kate bat da, 12 karakterekoa izan behar dut. 72 00:05:09,380 --> 00:05:14,010 4 daukat, Bs As 6 eta 2 Cs. 73 00:05:14,010 --> 00:05:17,270 Nire lehen urratsa, zenbatu izango litzateke. 74 00:05:17,270 --> 00:05:20,760 Zenbat aldiz agertzen ez A? 4 aldiz agertzen da katea. 75 00:05:20,760 --> 00:05:25,060 B agertzen da 6 aldiz, eta C 2 aldiz agertzen da. 76 00:05:25,060 --> 00:05:28,970 Jakina, B erabiltzen dut gehienetan esan nahi dut, 77 00:05:28,970 --> 00:05:35,970 beraz bit kopurua, gutxien 0 s eta 1s kopurua gutxien B irudikatu nahi dut. 78 00:05:35,970 --> 00:05:42,600 Eta gero, C 0 s eta 1s zenbatekoa gehien behar baita espero dut. 79 00:05:42,600 --> 00:05:48,550 Lehenik eta behin hemen zer egin nuen jarri dut Orden Gorakorra maiztasun dagokionez. 80 00:05:48,550 --> 00:05:52,710 C eta A, horiek dira gure 2 maiztasun txikiena ikusten dugu. 81 00:05:52,710 --> 00:06:00,290 Guraso nodo bat sortzen dugu, eta guraso nodo horrek ez du lotutako eskutitz bat izan, 82 00:06:00,290 --> 00:06:05,070 maiztasuna, batura da baina ez da. 83 00:06:05,070 --> 00:06:08,780 Batura 2 + 4 bihurtzen da, hau da, 6. 84 00:06:08,780 --> 00:06:10,800 Ondoren, ezkerreko adarraren jarraituko dugu. 85 00:06:10,800 --> 00:06:14,970 6 nodo hartan ginen bada, eta 0 jarraituko genuke C lortu 86 00:06:14,970 --> 00:06:17,450 eta, ondoren, 1 A. 87 00:06:17,450 --> 00:06:20,300 Beraz, gaur egun, 2 nodo dugu. 88 00:06:20,300 --> 00:06:23,920 6 balioa izan dugu, eta, ondoren, izan ere, 6 balioa nodo beste. 89 00:06:23,920 --> 00:06:28,550 Eta, beraz, 2 ez bakarrik 2 txikienak baina, aldi berean, besterik gabe, 2 geratzen dira, 90 00:06:28,550 --> 00:06:33,820 beraz, guraso beste ere sartu dugu, batura 12 da. 91 00:06:33,820 --> 00:06:36,300 Hortaz, hona hemen gure Huffman zuhaitz dugu 92 00:06:36,300 --> 00:06:40,020 non B, pixka 1 93 00:06:40,020 --> 00:06:45,430 eta, ondoren, A 01 izango litzateke dugu, eta, ondoren, C 00 izatea. 94 00:06:45,430 --> 00:06:51,300 Beraz, hemen, funtsean, karakteretan ordezkari horiek ari gara 1 edo 2 bit ikusiko dugu 95 00:06:51,300 --> 00:06:55,160 non B, aurreikusten du, gutxienez. 96 00:06:55,160 --> 00:07:01,730 Eta gero, espero genuen C gehien izan, baina txiki bat da Huffman, hala nola, zuhaitz geroztik, 97 00:07:01,730 --> 00:07:06,020 ondoren, A ere nonbait aurka erdian 2 biteko irudikatzen da. 98 00:07:07,820 --> 00:07:11,070 >> Just Huffman zuhaitz simple beste adibide bat baino gehiago joan dira, 99 00:07:11,070 --> 00:07:19,570 esan katea behar duzu "Kaixo". 100 00:07:19,570 --> 00:07:25,360 Zer egin nahi duzu lehen esan zenbat aldiz ez H honetan agertzen nahi duzun? 101 00:07:25,360 --> 00:07:34,200 H agertzen da behin eta, ondoren, e agertzen da behin eta, ondoren, l birritan agertzen dugu 102 00:07:34,200 --> 00:07:36,580 eta o behin agertzen. 103 00:07:36,580 --> 00:07:44,310 Eta, beraz, ondoren, gutun bit kopurua gutxienez irudikatzen espero dugu? 104 00:07:44,310 --> 00:07:47,450 [Ikasleen] l. >> L. Bai. l eskubidea da. 105 00:07:47,450 --> 00:07:50,730 L bit kopurua gutxienez irudikatzen espero dugu 106 00:07:50,730 --> 00:07:55,890 l erabiltzen da gehien katea "Hello. delako" 107 00:07:55,890 --> 00:08:04,280 Orain zer egin behar dut, marrazteko nodo horiek. 108 00:08:04,280 --> 00:08:15,580 1 daukat, hau da, H, eta, ondoren, beste 1, hau da, e, eta, ondoren, 1, hau da, o 109 00:08:15,580 --> 00:08:23,410 oraintxe ari naiz ordena jarriz, eta ondoren, 2, hau da, l. 110 00:08:23,410 --> 00:08:32,799 Ondoren, I Huffman zuhaitz bat eraikitzeko, gutxienez maiztasun nodo 2 diot 111 00:08:32,799 --> 00:08:38,010 anai-arrebak, eta guraso nodo bat sortuz. 112 00:08:38,010 --> 00:08:41,850 Hemen, 3 maiztasun txikiena nodo dugu. 1 Oraindik dute. 113 00:08:41,850 --> 00:08:50,620 Hortaz, hona hemen zein lehena lotzeko goaz aukeratu dugu. 114 00:08:50,620 --> 00:08:54,850 Demagun H eta e aukeratu dut. 115 00:08:54,850 --> 00:09:01,150 Batura 1 + 1, 2, baina nodo horrek ez du lotutako eskutitz bat izan. 116 00:09:01,150 --> 00:09:04,440 Dauka besterik ez du balio. 117 00:09:04,440 --> 00:09:10,950 Orain 2 hurrengoa maiztasun txikiena at ikusi dugu. 118 00:09:10,950 --> 00:09:15,590 2 eta 1. Hori bai horiek 2 izan daiteke, baina hau aukeratu dut. 119 00:09:15,590 --> 00:09:18,800 Batura 3 da. 120 00:09:18,800 --> 00:09:26,410 Eta gero, azkenik, besterik ez dut 2 Ezkerraldean, eta, beraz, orduan bihurtzen da 5. 121 00:09:26,410 --> 00:09:32,010 Gero, hemen, espero bezala, horretarako kodeketa bete bada, 122 00:09:32,010 --> 00:09:37,480 1s dira beti eskuineko adarraren eta 0 s ezkerreko dira. 123 00:09:37,480 --> 00:09:45,880 Ondoren, 2 l 1 bit eta gero o irudikatzen dugu 124 00:09:45,880 --> 00:09:52,360 eta, ondoren, e 2, eta, ondoren, H 3 bit jaitsierak behera. 125 00:09:52,360 --> 00:09:59,750 Beraz, mezu hau transmititu dezakezu, "Hello" ordez benetan pertsonaiak erabiliz 126 00:09:59,750 --> 00:10:02,760 0 s eta 1s, besterik gabe. 127 00:10:02,760 --> 00:10:07,910 Hala eta guztiz ere, ez ahaztu askotan gure maiztasuna lotura izan genuen. 128 00:10:07,910 --> 00:10:11,900 Izan bai genezake elkartu H o lehen agian. 129 00:10:11,900 --> 00:10:15,730 Edo gero 2 irudikatzen l izan dugu 130 00:10:15,730 --> 00:10:19,410 , baita 2 irudikatzen fitxatu du, lotuta izan dugu, bai bat. 131 00:10:19,410 --> 00:10:23,630 >> Eta beraz, bidal 0 s eta 1s, benetan ez da bermatzen 132 00:10:23,630 --> 00:10:27,090 hartzaileak guztiz bat eskuinera off zure mezua irakurri 133 00:10:27,090 --> 00:10:30,490 agian ez direlako ezagutzen den erabaki egin. 134 00:10:30,490 --> 00:10:34,920 Beraz, Huffman konpresio aurre ari gara, 135 00:10:34,920 --> 00:10:40,090 nolabait, nola erabaki dugu, gure mezua hartzailearen esan behar dugu 136 00:10:40,090 --> 00:10:43,470 Informazio gehigarria mota batzuk ezagutu behar dute 137 00:10:43,470 --> 00:10:46,580 Konprimitutako mezua gain. 138 00:10:46,580 --> 00:10:51,490 Zuhaitz benetan itxura ulertu behar dute, 139 00:10:51,490 --> 00:10:55,450 nola egin dugu erabaki horiek. 140 00:10:55,450 --> 00:10:59,100 >> Hemen besterik ez genuen egiten benetako Aldaketa oinarritutako adibide, 141 00:10:59,100 --> 00:11:01,550 baina batzuetan ere izan dezakezu Huffman zuhaitz bat 142 00:11:01,550 --> 00:11:05,760 maiztasuna oinarritzen gutunak agertzen dira, eta prozesu bera zehatza da. 143 00:11:05,760 --> 00:11:09,090 Hemen nago adierazteko, ehunekoak edo zati bat dagokionez, 144 00:11:09,090 --> 00:11:11,290 eta, beraz, hemen zehatza gauza bera. 145 00:11:11,290 --> 00:11:15,300 2 txikiena, Laburbilduz, hurrengo 2 txikiena, laburbildu aurkitu dut, 146 00:11:15,300 --> 00:11:19,390 dut zuhaitz bat osoa izan arte. 147 00:11:19,390 --> 00:11:23,610 Nahiz eta egin genezake bai, ehunekoak aurre ari gara, 148 00:11:23,610 --> 00:11:27,760 horrek esan nahi du gauzak ari gara zatituz eta hamarren aurre, edo, hobeto esanda, flotatzen 149 00:11:27,760 --> 00:11:30,900 ari gara buru baten egitura buruzko datuak pentsatzen bada. 150 00:11:30,900 --> 00:11:32,540 Zer jakin karroza gara? 151 00:11:32,540 --> 00:11:35,180 Zer arazo komun bat karroza ari gara aurre? 152 00:11:35,180 --> 00:11:38,600 [Ikasleak] Imprecise aritmetika. >> Bai. Imprecision. 153 00:11:38,600 --> 00:11:43,760 Delako koma mugikorreko imprecision, pset hau da, beraz, ziurtatu dugu 154 00:11:43,760 --> 00:11:49,450 balio edozein ez dugu galtzen, eta, ondoren, benetan ari gara Aldaketa duen aurre. 155 00:11:49,450 --> 00:11:54,880 Beraz, bada Huffman nodo bat pentsatu, begiratu itzuliz gero egitura hemen zinen, 156 00:11:54,880 --> 00:12:01,740 berdea dira begiratzen baduzu lotutako maiztasuna du 157 00:12:01,740 --> 00:12:08,760 baita puntu haren ezkerreko nodo, baita bere eskubidea nodo bat. 158 00:12:08,760 --> 00:12:13,970 Eta gero, gorria dira bertan ere haiekin lotutako pertsonaia bat. 159 00:12:13,970 --> 00:12:18,900 Ez da aparteko batzu egiten ari gara guraso eta gero, azken nodoak, 160 00:12:18,900 --> 00:12:23,680 erreferentzia hosto gisa, baizik ere NULL balio izan. 161 00:12:23,680 --> 00:12:31,050 Nodo bakoitzean, pertsonaia bat, nodo hori adierazten duen ikurra izan dugu, 162 00:12:31,050 --> 00:12:40,490 maiztasuna, baita haren ezkerreko seme-alaba, baita haren eskuinaldean seme erakuslea. 163 00:12:40,490 --> 00:12:45,680 Hostoak, oso behean daude, izan ere nodo erakusleak 164 00:12:45,680 --> 00:12:49,550 ezkerreko eta beren eskubidea, baina balio horiek ez dira benetako nodo seinalatuz geroztik, 165 00:12:49,550 --> 00:12:53,970 zer egingo zenuke beren balio izan? >> [Ikasleak] NULL. >> NULL. Hain zuzen ere. 166 00:12:53,970 --> 00:12:58,430 Hona hemen nola irudikatu maiztasuna dezakezu karroza en adibide bat, 167 00:12:58,430 --> 00:13:02,130 baina harekin zenbaki osoen aurre goaz, 168 00:13:02,130 --> 00:13:06,780 beraz, egin nuen han, datu mota aldatu. 169 00:13:06,780 --> 00:13:09,700 >> Dezagun adibide konplexu apur bat gehiago joan. 170 00:13:09,700 --> 00:13:13,360 Baina orain egin ditudan sinpleak dira, besterik ez da prozesua bera. 171 00:13:13,360 --> 00:13:20,290 2 maiztasun txikiena aurkituko duzu, laburbildu maiztasunak 172 00:13:20,290 --> 00:13:22,450 eta hori zure guraso nodoaren maiztasun berria da, 173 00:13:22,450 --> 00:13:29,310 gero bere ezkerretara puntu 0 adar eta eskuineko 1 adarrean. 174 00:13:29,310 --> 00:13:34,200 Dugu katea "Hau da cs50," bada, orduan, zenbat aldiz T aipatu zenbatu ditugu, 175 00:13:34,200 --> 00:13:38,420 h aipatu, i, s, c, 5, 0. 176 00:13:38,420 --> 00:13:42,010 Ondoren, hemen zer egin nuen landatu dut nodo gorria da, 177 00:13:42,010 --> 00:13:48,530 Karaktere horiek, azkenean, nire zuhaitzaren beheko noa esan dut. 178 00:13:48,530 --> 00:13:51,740 Dutenek hostoak guztiak izango dira. 179 00:13:51,740 --> 00:13:58,200 Orduan, zer egin nuen horrela antolatu I maiztasunaren arabera ordena gorakorrean, 180 00:13:58,200 --> 00:14:02,950 eta hori da, benetan kodea pset du 181 00:14:02,950 --> 00:14:07,550 da maiztasunaren arabera ordenatzen da eta, ondoren, alfabetikoki. 182 00:14:07,550 --> 00:14:13,870 Beraz, zenbakiak du lehenik eta, ondoren, alfabetikoki maiztasuna. 183 00:14:13,870 --> 00:14:18,520 Orduan, zer egin nahi dut 2 txikiena aurkituko nuke. 0 eta 5. 184 00:14:18,520 --> 00:14:22,390 Laburbildu nuke, eta hori 2. Gero jarraituko nuke, hurrengo 2 txikiena aurkitu. 185 00:14:22,390 --> 00:14:26,100 Dutenek bi 1s dira, eta, ondoren, horiek bihurtu 2 baita. 186 00:14:26,100 --> 00:14:31,570 Orain nire hurrengo urratsa hori sartu kopurua txikiena ezagutzen dut, 187 00:14:31,570 --> 00:14:41,380 T da, 1, eta, ondoren, duela 2 maiztasuna nodo bat aukeratzerakoan. 188 00:14:41,380 --> 00:14:44,560 Hortaz, hona hemen 3 aukera ditugu. 189 00:14:44,560 --> 00:14:47,980 Zer diapositiba egin dut besterik ez da ikusmen berrantolatzeko dituzu 190 00:14:47,980 --> 00:14:51,790 beraz, nola eraikitzen ari naiz ... ikusi ahal izango duzu. 191 00:14:51,790 --> 00:14:59,040 Zer kodea eta zure kodea banaketa egingo da sartu T bat izango litzateke 192 00:14:59,040 --> 00:15:01,410 0 eta 5 nodo. 193 00:15:01,410 --> 00:15:05,060 Orduan, 3 batuketa, eta, ondoren, prozesua jarraituko dugu. 194 00:15:05,060 --> 00:15:08,660 2 eta 2 baxuenak dira, eta, beraz, ondoren, 4 batura horiek. 195 00:15:08,660 --> 00:15:12,560 Pertsona orok du, beraz, orain arte jarraituz? Ongi da. 196 00:15:12,560 --> 00:15:16,410 Gero, ondoren, 3 eta 3 gehitu behar zaizkio sortu behar duten dugu, 197 00:15:16,410 --> 00:15:21,650 , beraz, berriro besterik ez dut, beraz, kommutazio ikusi ikusmen dezakezu ez dela gehiegi messy. 198 00:15:21,650 --> 00:15:25,740 Ondoren, 6 dugu, eta gero, gure azken urratsa da gaur egun bakarrik dugun 2 nodo 199 00:15:25,740 --> 00:15:30,440 horiek laburbildu dugu gure zuhaitza, hau da, 10 root egiteko. 200 00:15:30,440 --> 00:15:34,100 Eta 10 zenbakia zentzua irudikatzen nodo bakoitzean delako, 201 00:15:34,100 --> 00:15:40,750 beren balioa, haien maiztasuna zenbakia, zenbat aldiz agertu katea, 202 00:15:40,750 --> 00:15:46,350 eta, ondoren, 5 karaktere izan gure katea, eta, beraz, zentzua, beraz. 203 00:15:48,060 --> 00:15:52,320 Begiratzen dugu, bada, nola benetan genuke kodetuko da, 204 00:15:52,320 --> 00:15:56,580 Espero zen bezala, i eta s, gehienetan agertzen 205 00:15:56,580 --> 00:16:01,350 bit kopurua gutxien irudikatzen dira. 206 00:16:03,660 --> 00:16:05,660 >> Kontuz ibili hemen. 207 00:16:05,660 --> 00:16:09,780 Huffman zuhaitz Kasu benetan axola. 208 00:16:09,780 --> 00:16:13,670 Maiuskulaz S bat minuskulaz s baino desberdina da. 209 00:16:13,670 --> 00:16:21,260 Izan badugu "Hau CS50 da" maiuskulaz eta, ondoren, minuskulaz s soilik bi aldiz agertuko da, 210 00:16:21,260 --> 00:16:27,120 bere balioa 2 nodo bat izango litzateke, eta, ondoren, maiuskulaz S behin bakarrik izango litzateke. 211 00:16:27,120 --> 00:16:33,440 Orduan, zure zuhaitz egitura aldatuko luketen benetan duzu delako extra hosto bat hemen. 212 00:16:33,440 --> 00:16:36,900 Baina batura izango litzateke, oraindik 10 izango da. 213 00:16:36,900 --> 00:16:39,570 Hori da benetan ari gara checksum dira deituz, 214 00:16:39,570 --> 00:16:44,060 zenbatzen, guztien gain. 215 00:16:46,010 --> 00:16:50,990 >> Orain estalita ditudan Huffman zuhaitzak, Huff'n Puff, pset murgiltze sartu ahal izango dugu. 216 00:16:50,990 --> 00:16:52,900 Galdera atal bat hasi gara, 217 00:16:52,900 --> 00:16:57,990 eta hori ohituta zuhaitz bitarra eta nola inguruan jarduteko: 218 00:16:57,990 --> 00:17:03,230 marrazketa nodo, zure typedef struct nodo bat sortzea, 219 00:17:03,230 --> 00:17:07,230 eta nola sartu zuhaitz bitar bat, hori horrela antolatu dezakezu ikusita, 220 00:17:07,230 --> 00:17:09,050 da, eta horrelako gauzak traversing. 221 00:17:09,050 --> 00:17:14,560 Ezagutza da behin betiko laguntzeko dive Huff'n Puff zati duzun joan 222 00:17:14,560 --> 00:17:17,089 pset da. 223 00:17:19,150 --> 00:17:26,329 Pset, estandar edizioan, zeregin Puff ezartzeko, 224 00:17:26,329 --> 00:17:30,240 eta hacker bertsioa zure zeregina da Huff ezartzeko. 225 00:17:30,240 --> 00:17:38,490 Zer Huff ez da testua hartzen du, eta, ondoren, itzultzen 0 s eta 1s, 226 00:17:38,490 --> 00:17:41,990 prozesua egin dugun non maiztasunak zenbatuko dugu, beraz 227 00:17:41,990 --> 00:17:50,970 eta, ondoren, zuhaitza egin eta gero, esan zuen: "Nola T lortzeko I?" 228 00:17:50,970 --> 00:17:54,840 T 100 irudikatzen da, horrelako gauzak, 229 00:17:54,840 --> 00:17:58,860 eta, ondoren, Huff testua, eta, ondoren, irteera bitarra dela hartuko luke. 230 00:17:58,860 --> 00:18:04,920 Baina badakigu, halaber, nahi dugu, gure mezuaren hartzaileak ahal izateko delako 231 00:18:04,920 --> 00:18:11,790 Zuhaitz berean zehatza birsortzeko, maiztasuna zenbatzen buruzko informazioa ere. 232 00:18:11,790 --> 00:18:17,980 Ondoren Puff gaude 0 s eta 1s fitxategi bitarra 233 00:18:17,980 --> 00:18:21,740 eta maiztasunak buruzko informazioa eman ere. 234 00:18:21,740 --> 00:18:26,740 0 s eta 1s horiek atzera itzultzea izan zen, jatorrizko mezua sartu, 235 00:18:26,740 --> 00:18:29,350 horrela ari gara deskonprimitzerakoan. 236 00:18:29,350 --> 00:18:36,450 Ari zaren estandarrak edizioa egiten ari bada, ez duzu behar Huff ezartzeko, 237 00:18:36,450 --> 00:18:39,290 beraz, ondoren, bakarrik erabili ahal izango duzu Huff langileek ezartzeko. 238 00:18:39,290 --> 00:18:42,080 Zehaztutako nola egiten den buruzko argibideak daude. 239 00:18:42,080 --> 00:18:48,780 Huff langileek ezartzea zenbait testu fitxategi gainean exekuta dezakezu 240 00:18:48,780 --> 00:18:53,270 eta, ondoren, irteera hori erabili zure sarrera gisa Puff. 241 00:18:53,270 --> 00:18:59,330 >> Aipatu dudan bezala lehenago, banaketa kode asko dugu hau. 242 00:18:59,330 --> 00:19:01,810 Bidez hasten naiz. 243 00:19:01,810 --> 00:19:04,400 Denbora pasatzera noa. H fitxategiak 244 00:19:04,400 --> 00:19:07,660 c fitxategiak delako, izan ere, h dugu 245 00:19:07,660 --> 00:19:11,650 eta hori eskaintzen digu funtzioen prototipoak, 246 00:19:11,650 --> 00:19:15,520 ez dugu guztiz zehatz-mehatz ulertu behar 247 00:19:15,520 --> 00:19:20,280 Ez baduzu ulertzen zer ari den gertatzen. C fitxategiak, eta gero ez kezkatu gehiegi, 248 00:19:20,280 --> 00:19:23,600 baina behin betiko saiatu begirada bat hartu eta zenbait aholku eman leza 249 00:19:23,600 --> 00:19:29,220 eta erabilgarria beste pertsona kodea irakurtzeko erabiliko da. 250 00:19:38,940 --> 00:19:48,270 >> Iruzkinak, huffile.h begira, abstrakzio geruza Huffman-kodetuak fitxategiak adierazten du. 251 00:19:48,270 --> 00:20:01,660 Joaten gara behera bada, gehienez 256 sinbolo bat da kodeak behar izatea ez dagoela ikusiko dugu. 252 00:20:01,660 --> 00:20:05,480 Alfabetoaren letra guztiak maiuskulaz eta minuskulaz 253 00:20:05,480 --> 00:20:08,250 eta, ondoren, sinboloak eta zenbakiak, etab. 254 00:20:08,250 --> 00:20:11,930 Ondoren, hemen Huffman-kodetuak fitxategi bat identifikatzeko magia zenbaki bat behar dugu. 255 00:20:11,930 --> 00:20:15,890 Huffman kode bat barruan, magia-zenbaki jakin bat izan dute 256 00:20:15,890 --> 00:20:18,560 goiburua lotutako. 257 00:20:18,560 --> 00:20:21,110 Magiko bat ausazko zenbaki hori itxura, 258 00:20:21,110 --> 00:20:27,160 baina itzuli bada, ASCII sartu eta, ondoren, askatzea da benetan izarrekin Huff. 259 00:20:27,160 --> 00:20:34,290 Hemen Huffman-kodeketako fitxategi bat eta egitura bat behar dugu. 260 00:20:34,290 --> 00:20:39,670 Huff fitxategia lotutako ezaugarri hauek guztiak. 261 00:20:39,670 --> 00:20:47,080 Ondoren, behera hemen Huff fitxategi bat goiburua dugu, beraz, Huffeader deitzen dugun 262 00:20:47,080 --> 00:20:50,810 ordez extra h gehituz soinuak bera delako hala ere. 263 00:20:50,810 --> 00:20:52,720 Cute. 264 00:20:52,720 --> 00:20:57,790 Lotutako magia zenbaki bat behar dugu. 265 00:20:57,790 --> 00:21:09,040 Da oraingo Huff fitxategia bada, zenbaki izan arte, batez ere, magiko bat egingo da. 266 00:21:09,040 --> 00:21:14,720 Eta, ondoren, array bat izango da. 267 00:21:14,720 --> 00:21:18,750 Beraz, ikur bakoitzaren, eta horietatik 256, 268 00:21:18,750 --> 00:21:24,760 sinbolo horien maiztasuna Huff fitxategia barruan dira zerrendara. 269 00:21:24,760 --> 00:21:28,090 Eta gero, azkenik, maiztasun checksum bat dugu, 270 00:21:28,090 --> 00:21:32,160 maiztasunak horien batura izan behar du. 271 00:21:32,160 --> 00:21:36,520 Beraz, zer Huffeader bat da. 272 00:21:36,520 --> 00:21:44,600 Ondoren, hurrengo bit Huff fitxategia funtzio batzuetara itzultzeko dugu 273 00:21:44,600 --> 00:21:52,580 , baita pixka bat idazten Huff fitxategia, eta, ondoren, funtzio hau hemen, hfclose, 274 00:21:52,580 --> 00:21:54,650 benetan Huff fitxategia ixten. 275 00:21:54,650 --> 00:21:57,290 Aurretik, zuzenean besterik ez fclose ginen aurre, 276 00:21:57,290 --> 00:22:01,190 baina Huff fitxategi bat behar duzu, ordez fclosing 277 00:22:01,190 --> 00:22:06,080 benetan ari zaren egingo da hfclose eta hfopen. 278 00:22:06,080 --> 00:22:13,220 Huff fitxategiak dutenek jakin funtzioak ari dira eta aurre egingo dira. 279 00:22:13,220 --> 00:22:19,230 Ondoren, hemen goiburua irakurri dugu eta, ondoren, idatzi goiburua. 280 00:22:19,230 --> 00:22:25,700 >> Just h fitxategia irakurtzean Huff fitxategi bat izan liteke zentzu mota egin ahal izango dugu, 281 00:22:25,700 --> 00:22:32,480 zer ezaugarri ditu, benetan huffile.c sartzen joan gabe, 282 00:22:32,480 --> 00:22:36,750 Izan ere, badugu artelan, eta pixka bat konplexuagoa izango da. 283 00:22:36,750 --> 00:22:41,270 I / O hemen erakusleak aurre fitxategi guztiak ditu. 284 00:22:41,270 --> 00:22:48,010 Hemen denean hfread deitzen dugu, esate baterako, oraindik ari da fread aurre ikusiko dugu. 285 00:22:48,010 --> 00:22:53,050 Ez dugu funtzio horiek deusezten oso-osorik, baina ari gara bidaltzeko hartu beharreko arreta 286 00:22:53,050 --> 00:22:59,760 fitxategia ez da geure buruari egiten Huff barruan. 287 00:22:59,760 --> 00:23:02,300 Honen bidez eskaneatzeko free sentitzen duzu Oraindik bitxia bada 288 00:23:02,300 --> 00:23:08,410 eta joan eta geruza apur bat zuritu. 289 00:23:20,650 --> 00:23:24,060 >> Hurrengo fitxategia begiratzen ari gara tree.h. 290 00:23:24,060 --> 00:23:30,210 Aurretik Bisita gidatua slides Huffman nodoa espero dugu esan genuen 291 00:23:30,210 --> 00:23:32,960 typedef struct nodo bat egin dugu. 292 00:23:32,960 --> 00:23:38,360 Sinbolo bat, maiztasuna, eta ondoren, 2 nodo ko izatea espero dugu. 293 00:23:38,360 --> 00:23:41,870 Kasu honetan, zer egiten ari gara, hau da, funtsean, gauza bera 294 00:23:41,870 --> 00:23:46,880 nodoaren ordez izan ezik, horiek zuhaitz deitu dugu. 295 00:23:48,790 --> 00:23:56,760 Funtzio bat daukagu ​​egiteko zuhaitz deitu zuhaitz erakuslea itzultzen du. 296 00:23:56,760 --> 00:24:03,450 Speller atzera, nodo berria zinen 297 00:24:03,450 --> 00:24:11,410 esan nodo * hitz berri = malloc (sizeof) eta horrelako gauzak. 298 00:24:11,410 --> 00:24:17,510 Funtsean, mktree behar duten aurre. 299 00:24:17,510 --> 00:24:20,990 Era berean, zuhaitz bat kendu nahi duzula? 300 00:24:20,990 --> 00:24:24,810 beraz, hori funtsean egiten duzunean zuhaitz uzten, 301 00:24:24,810 --> 00:24:33,790 horretan esplizituki free deituz ordez, benetan ari zaren funtzioa erabiltzeko rmtree joan 302 00:24:33,790 --> 00:24:40,360 erakuslea non pasatzen duzu zuhaitz hori, eta, ondoren, modulua zuretzat hori zaintzeko hartuko dute parte. 303 00:24:40,360 --> 00:24:42,490 >> Tree.c. ditugu 304 00:24:42,490 --> 00:24:47,240 Funtzio berberak espero dugu ezartzeko ere ikusi izan ezik. 305 00:24:47,240 --> 00:24:57,720 Espero dugu, mktree deitu zuhaitz baten tamaina mallocs erakuslea, 306 00:24:57,720 --> 00:25:03,190 initializes balioak NULL balioa, eta, beraz, 0 s edo nuluak 307 00:25:03,190 --> 00:25:08,280 eta, ondoren, erakuslea itzultzen du zuhaitz hori duzula besterik ez duzu malloc'd. 308 00:25:08,280 --> 00:25:13,340 Kendu zuhaitz deitu egiten du lehen ziur ez zarela bikoitza libre uzten. 309 00:25:13,340 --> 00:25:18,320 Ziur benetan duzula nahi duzun kentzeko zuhaitz bat egiten du. 310 00:25:18,320 --> 00:25:23,330 Hemen, zuhaitz bat ere biltzen ditu bere seme-alabak, 311 00:25:23,330 --> 00:25:29,560 zer ez da deiak errekurtsiboki kendu zuhaitza zuhaitzaren ezker nodo 312 00:25:29,560 --> 00:25:31,650 baita eskuineko nodoa. 313 00:25:31,650 --> 00:25:37,790 Askatzen aurretik guraso, seme-alabak, baita libre behar du. 314 00:25:37,790 --> 00:25:42,770 Guraso ere root truka. 315 00:25:42,770 --> 00:25:46,500 Lehen gurasoa, eta, beraz, handi-handi-handi-handi-aitona atsegin dute 316 00:25:46,500 --> 00:25:52,130 edo amonaren zuhaitza, lehen mailak behera askatzea lehen egin behar dugu. 317 00:25:52,130 --> 00:25:58,490 Beraz, beheraino zeharkatuko du, doan dira, eta, ondoren, itzuli, free dira, eta abar. 318 00:26:00,400 --> 00:26:02,210 Beraz, zuhaitz. 319 00:26:02,210 --> 00:26:04,240 >> Orain begiratu baso dugu. 320 00:26:04,240 --> 00:26:09,860 Forest da non zure Huffman zuhaitz guztiak jartzen. 321 00:26:09,860 --> 00:26:12,910 Ari gara zerbait esaten izeneko lursail batean 322 00:26:12,910 --> 00:26:22,320 zuhaitz baten erakuslea, baita izeneko lursailean hurrengo erakuslea dauka. 323 00:26:22,320 --> 00:26:28,480 Zer itxura bezalako egitura mota hau? 324 00:26:29,870 --> 00:26:32,490 Dio mota baino gehiago dago. 325 00:26:34,640 --> 00:26:36,700 Eskuin hemen. 326 00:26:37,340 --> 00:26:39,170 Lotuta zerrenda. 327 00:26:39,170 --> 00:26:44,590 Partzela bat dugu lursailen zerrenda bat lotuta bezala ikusten dugu. 328 00:26:44,590 --> 00:26:53,020 Baso lursailen zerrenda bat lotuta gisa definitzen da, 329 00:26:53,020 --> 00:26:58,100 eta, beraz, baso-egitura besterik ez da ari gara erakuslea izan da gure lehen lursailean 330 00:26:58,100 --> 00:27:02,740 eta lursail hori barruan zuhaitz bat edo zuhaitz bat baizik eta puntu 331 00:27:02,740 --> 00:27:06,190 eta, ondoren, hurrengo argumentua adierazi du, eta, beraz, eta abar. 332 00:27:06,190 --> 00:27:11,100 Basoan bat egiteko mkforest deitzen diogu. 333 00:27:11,100 --> 00:27:14,930 Gero, nahiko erabilgarria zenbait funtzio dugu hemen. 334 00:27:14,930 --> 00:27:23,240 Jaso ditugu non pasatzen baso batean, eta gero itzulitako balioan Zuhaitza * 335 00:27:23,240 --> 00:27:25,210 zuhaitz baten erakuslea. 336 00:27:25,210 --> 00:27:29,370 Zer pick egingo da basoan sartuko da ari zarela seinalatuz 337 00:27:29,370 --> 00:27:35,240 ondoren, zuhaitz bat kendu maiztasun txikiena duen baso 338 00:27:35,240 --> 00:27:38,330 eta, ondoren, emango dizu erakuslea zuhaitz hori. 339 00:27:38,330 --> 00:27:43,030 Behin jaso deitzen duzunean, zuhaitza basoan ez da existitzen jada, 340 00:27:43,030 --> 00:27:48,550 Itzultzen den balioa zuhaitz hori erakuslea da. 341 00:27:48,550 --> 00:27:50,730 Ondoren, landare behar duzu. 342 00:27:50,730 --> 00:27:57,420 Provided erakuslea pasatzen duten zuhaitz-0 maiztasuna ez du, 343 00:27:57,420 --> 00:28:04,040 zer planta egingo da basoan hartu du, hartu zuhaitz eta landare zuhaitza basoaren barruan. 344 00:28:04,040 --> 00:28:06,370 Hemen rmforest dugu. 345 00:28:06,370 --> 00:28:11,480 Similar zuhaitza, funtsean askatu Gurekin gure zuhaitz guztiak kendu, 346 00:28:11,480 --> 00:28:16,600 kendu baso free baso horretan jasotako guztia. 347 00:28:16,600 --> 00:28:24,890 >> Forest.c erreparatzen badiogu, gutxienez 1 rmtree komando espero bertan ikusi dugu, 348 00:28:24,890 --> 00:28:30,090 basoko memoria free zuhaitz baso bat bada delako, 349 00:28:30,090 --> 00:28:32,930 ondoren, azkenean zuhaitz horiek kentzeko ere izan duzu. 350 00:28:32,930 --> 00:28:41,020 Erreparatzen badiogu forest.c sartu, gure mkforest dugu, hau da, espero dugun bezala. 351 00:28:41,020 --> 00:28:42,890 Gauza malloc dugu. 352 00:28:42,890 --> 00:28:51,740 NULL gisa baso lursailean lehen abiarazi dugu hasiko da hutsik dagoelako, 353 00:28:51,740 --> 00:29:05,940 ondoren, pick, zuhaitz pisu txikiena itzultzen du, maiztasun txikiena ikusiko dugu, 354 00:29:05,940 --> 00:29:13,560 eta, ondoren, lortzen jakin nodo kentzeko zuhaitz hori puntu eta hurrengoa, 355 00:29:13,560 --> 00:29:16,760 horrela hartzen du baso-zerrenda lotuta. 356 00:29:16,760 --> 00:29:24,510 Eta gero, hara, landare, txertatzen zuhaitz bati lotuta zerrenda egin behar dugu. 357 00:29:24,510 --> 00:29:29,960 Zer basoa ez da mantentzen nicely ordenatuko gurekin. 358 00:29:29,960 --> 00:29:37,910 Eta gero, azkenik, rmforest dugu, eta, espero bezala, rmtree izeneko bertan dugu. 359 00:29:46,650 --> 00:29:55,440 >> Banaketa kodea hain urrun begira, huffile.c ziurrenik urruti gogorrena ulertzeko, 360 00:29:55,440 --> 00:29:59,990 beste fitxategi batzuk, berriz, nahiko erraz jarraitu izan dute. 361 00:29:59,990 --> 00:30:03,090 Erakusleak eta lotutako zerrendak eta, besteak beste, gure ezagutza, 362 00:30:03,090 --> 00:30:04,860 gai nahiko ongi jarraitu behar izan dugu. 363 00:30:04,860 --> 00:30:10,500 Baina benetan ziurtatu erabat dugun ulertu behar dugu. H fitxategiak 364 00:30:10,500 --> 00:30:15,840 behar duzu deituz funtzio horiek, itzulera balio duten aurre delako, 365 00:30:15,840 --> 00:30:20,590 beraz, ziurtatu erabat duzula ulertzen zer egin behar den. 366 00:30:20,590 --> 00:30:24,290 bakoitzean funtzio horietako bat deitzen duzu. 367 00:30:24,290 --> 00:30:33,020 Baina, egia esan, barruan ulertzea ez da nahiko beharrezkoa izan dugulako duten. H fitxategiak. 368 00:30:35,170 --> 00:30:39,490 2 gehiago gure banaketa kodea fitxategi utzi ditugu. 369 00:30:39,490 --> 00:30:41,640 >> Dezagun dump begiratu. 370 00:30:41,640 --> 00:30:47,230 Bere comment Irauli hemen Huffman-konprimitutako fitxategi bat hartzen du 371 00:30:47,230 --> 00:30:55,580 eta, ondoren, itzuli eta zabortegiak bere eduki guztiak. 372 00:31:01,010 --> 00:31:04,260 Hemen dela hfopen deituz ikusiko dugu. 373 00:31:04,260 --> 00:31:10,770 * Sarrerako fitxategia = fopen ispilu mota da, 374 00:31:10,770 --> 00:31:13,500 eta, ondoren, informazioa pasatzen duzu. 375 00:31:13,500 --> 00:31:18,240 Ia berdina da file * Huffile batean ari zaren pasatzen ordez izan ezik; 376 00:31:18,240 --> 00:31:22,030 ordez fopen hfopen pasatzen ari zaren. 377 00:31:22,030 --> 00:31:29,280 Hemen goiburua irakurri dugu lehen, hau da, mota nola goiburua irakurri dugu antzeko 378 00:31:29,280 --> 00:31:33,580 bitmap file. 379 00:31:33,580 --> 00:31:38,000 Zer ari gara hemen egiten da goiburua informazioa ala ez egiaztatzeko 380 00:31:38,000 --> 00:31:44,330 magia eskuineko zenbaki hori adierazten duela oraingo Huff fitxategia dauka, 381 00:31:44,330 --> 00:31:53,610 gero, txekeak horiek guztiak, ziurtatu fitxategia irekita dugu benetako huffed fitxategia edo ez da. 382 00:31:53,610 --> 00:32:05,330 Zer da hau ez da ikusi ahal izango dugu, sinbolo guztiak maiztasun irteerak 383 00:32:05,330 --> 00:32:09,790 grafiko bat taula batean terminal baten barruan. 384 00:32:09,790 --> 00:32:15,240 Zati hori erabilgarria izango da. 385 00:32:15,240 --> 00:32:24,680 Pixka bat ditu eta bit irakurtzen bit bit aldagaiak sartu eta, ondoren, inprimatzen ditu out. 386 00:32:28,220 --> 00:32:35,430 Beraz, bada, hth.bin,, fitxategi batean huffing emaitza da dump deitu ziren I 387 00:32:35,430 --> 00:32:39,490 langileen irtenbidea erabiliz, hau nuke. 388 00:32:39,490 --> 00:32:46,000 Pertsonaia hauen outputting da, eta ondoren agertzen dira frekuentzia jarriz. 389 00:32:46,000 --> 00:32:51,180 Begiratzen badugu, izan dira gehien 0 s hau izan ezik: H, agertzen da bi aldiz, 390 00:32:51,180 --> 00:32:54,820 eta, ondoren, T, agertzen da behin. 391 00:32:54,820 --> 00:33:07,860 Eta gero, hemen benetako mezua 0 s eta 1s ditugu. 392 00:33:07,860 --> 00:33:15,450 Hth.txt begiratzen badiogu, hau da, zentzuzkoa zen huffed jatorrizko mezua, 393 00:33:15,450 --> 00:33:22,490 Hs eta TS batzuk ikusteko espero dugu. 394 00:33:22,490 --> 00:33:28,720 Hain zuzen ere, 1 T eta 2 Hs ikusteko espero dugu. 395 00:33:32,510 --> 00:33:37,440 Hona hemen hth.txt dugu. HTH du, hain zuzen ere. 396 00:33:37,440 --> 00:33:41,270 Dago sartuta, ikusi ezin dugun arren, lerro pertsonaia bat da. 397 00:33:41,270 --> 00:33:53,190 Huff fitxategia hth.bin ere newline pertsonaia kodetzean baita. 398 00:33:55,680 --> 00:34:01,330 Hemen ezagutzen dugulako ordena HTH da eta, ondoren, newline, 399 00:34:01,330 --> 00:34:07,340 ikus ziurrenik H irudikatzen den, ezin dugu bakar bat baino ez 1 400 00:34:07,340 --> 00:34:17,120 eta, ondoren, T da seguruenik 01 eta, ondoren, hurrengo H 1 baita 401 00:34:17,120 --> 00:34:21,139 eta, ondoren, bi 0 s adierazitako newline dugu. 402 00:34:22,420 --> 00:34:24,280 Cool. 403 00:34:26,530 --> 00:34:31,600 >> Eta gero, azkenik, ari gara. Anitz c delako eta aurre egiteko. H fitxategiak, 404 00:34:31,600 --> 00:34:36,350 Konpilatzailearen argumentu konplexua eder bat izan dugu, 405 00:34:36,350 --> 00:34:40,460 eta, beraz, hemen Makefile duzun dump egiten dugu. 406 00:34:40,460 --> 00:34:47,070 Baina, benetan, zure puff.c fitxategia joan behar duzu. 407 00:34:47,070 --> 00:34:54,330 Makefile benetan ez puff.c egiten duzu aurre egiteko. 408 00:34:54,330 --> 00:34:59,310 Horretan ari gara Makefile editatzeko. 409 00:34:59,310 --> 00:35:05,930 Egin guztiei bezala komando bat idazten duzunean, adibidez, den-denak egingo duzu. 410 00:35:05,930 --> 00:35:10,760 Feel free Makefile adibide begiratu iraganeko pset 411 00:35:10,760 --> 00:35:17,400 , baita hau nola Puff file egiteko gai izan liteke 412 00:35:17,400 --> 00:35:20,260 Makefile hau editatzen. 413 00:35:20,260 --> 00:35:22,730 Hori da horri buruz gure banaketa-kodea. 414 00:35:22,730 --> 00:35:28,380 >> Dugu horren bidez ondoren, ahaztuak, eta gero hemen berreskuratu beste besterik ez da 415 00:35:28,380 --> 00:35:30,980 nola Huffman nodo aurre goaz. 416 00:35:30,980 --> 00:35:35,400 Ez ari gara deituz horiek nodo gehiago joan dira deituz horiek zuhaitz goaz 417 00:35:35,400 --> 00:35:39,260 non ordezkari bere sinbolo char bat dugu, 418 00:35:39,260 --> 00:35:43,340 haien maiztasuna, agerraldi kopurua, zenbaki oso bat. 419 00:35:43,340 --> 00:35:47,370 Mugikor bat baino gehiago zehatza delako erabiltzen ari gara. 420 00:35:47,370 --> 00:35:52,980 Eta gero, ezkerreko haur eta baita eskuineko umearen erakuslea beste izen bat izan dugu. 421 00:35:52,980 --> 00:35:59,630 Baso bat, ikusi dugun bezala, zuhaitz-zerrenda lotutako bat besterik ez da. 422 00:35:59,630 --> 00:36:04,670 Azken finean, gure Huff fitxategia eraikitzen ari gara, 423 00:36:04,670 --> 00:36:07,580 1 zuhaitza gure basoan eduki nahi dugu 424 00:36:07,580 --> 00:36:12,420 1 zuhaitza, haur hainbat erro 1. 425 00:36:12,420 --> 00:36:20,840 Lehenago besterik ez ginen gure Huffman zuhaitz egiten, 426 00:36:20,840 --> 00:36:25,360 nodo guztiak gure pantailan gainean jarriz hasi ginen 427 00:36:25,360 --> 00:36:27,790 eta nodo horiek izan behar dugu esaten, 428 00:36:27,790 --> 00:36:32,920 azkenean hostoak ari dira joan, eta bere sinboloa da, bere maiztasuna da. 429 00:36:32,920 --> 00:36:42,070 Gure baso batean 3 hizki besterik ez dugu bada, 3 zuhaitz baso bat da. 430 00:36:42,070 --> 00:36:45,150 Eta gero goazela, aurreneko gurasoaren gehitu dugu, 431 00:36:45,150 --> 00:36:48,080 2 zuhaitz baso bat egin dugu. 432 00:36:48,080 --> 00:36:54,930 2 haur horiek kendu dugu gure baso eta gero nodo gurasoaren ordez 433 00:36:54,930 --> 00:36:58,820 2 seme-alaba gisa nodo horiek izan. 434 00:36:58,820 --> 00:37:05,600 Eta gero, azkenik, gure azken urratsa, gure adibidean egiten den bezala, Bs, eta Cs 435 00:37:05,600 --> 00:37:08,030 azken gurasoaren izango litzateke, 436 00:37:08,030 --> 00:37:13,190 eta, beraz, ondoren, gure basoan zuhaitz Aldaketa guztira ekarriko luke 1. 437 00:37:13,190 --> 00:37:18,140 Denek ikusi nola hasten zara zure baso zuhaitz baino gehiago 438 00:37:18,140 --> 00:37:22,520 eta, azkenean, 1? Ongi da. Cool. 439 00:37:25,530 --> 00:37:28,110 >> Zer Puff egin behar dugu? 440 00:37:28,110 --> 00:37:37,110 Zer egin behar dugu, beti bezala, sarrera mota ematen dute eskubidea bermatzeko da 441 00:37:37,110 --> 00:37:39,090 beraz, benetan, programa exekutatu ahal izango dugu. 442 00:37:39,090 --> 00:37:43,130 Kasu honetan emango digu bere lehen argumentua ondoren komando-line ari dira. 443 00:37:43,130 --> 00:37:53,440 2 gehiago: destrinkotuko fitxategia deskonprimitu eta irteera fitxategia nahi dugun. 444 00:37:53,440 --> 00:38:00,410 Baina behin ziurtatu gainditu gaituzte balioak eskuineko zenbatekoa egiten dugu, 445 00:38:00,410 --> 00:38:05,820 sarrera Huff fitxategia edo ez da ziurtatu nahi dugu. 446 00:38:05,820 --> 00:38:10,420 Eta gero, behin Huff fitxategi bat dela bermatzen dugu, eta, ondoren, gure zuhaitz eraiki nahi dugu, 447 00:38:10,420 --> 00:38:20,940 hala nola, zuhaitz bat datorren zuhaitz mezua bidali duten pertsona eraiki eraikitzeko sortu. 448 00:38:20,940 --> 00:38:25,840 Gero, zuhaitza eraikitzen dugu ondoren eta, ondoren, aurre egin ahal izango dugu, 0 s eta 1s dutela onartu zuen, 449 00:38:25,840 --> 00:38:29,590 jarraitu gure zuhaitz zehar da berdin-berdina delako, 450 00:38:29,590 --> 00:38:33,510 eta, ondoren, idatzi mezu bat, bit interpretatzeko karakteretan sartu. 451 00:38:33,510 --> 00:38:35,880 Eta gero, amaieran ari gara erakusleak direlako, hemen aurre, 452 00:38:35,880 --> 00:38:38,110 Ziur ez dugu izan inolako memoria filtrazioak egin nahi dugu 453 00:38:38,110 --> 00:38:41,330 eta dugu free guztia. 454 00:38:42,820 --> 00:38:46,430 >> Egokia erabilera bermatzea orain Gurekin hat zaharra da. 455 00:38:46,430 --> 00:38:51,980 Sarrera bat hartu dugu, hau da, fitxategiaren izena puff izango, 456 00:38:51,980 --> 00:38:56,010 eta, ondoren, irteera bat zehaztu dugu, 457 00:38:56,010 --> 00:39:01,580 beraz, irteera puffed, testu-fitxategia izango da fitxategi izena. 458 00:39:03,680 --> 00:39:08,820 Hori erabilera. Eta orain,, sarrera hori huffed edo ez ziurtatu nahi dugu. 459 00:39:08,820 --> 00:39:16,420 Back Thinking zegoen ezer banaketa kodea lagunduko digun 460 00:39:16,420 --> 00:39:21,570 fitxategi bat den edo ez huffed edo ez ulertzeko? 461 00:39:21,570 --> 00:39:26,910 Ez zen huffile.c Huffeader buruzko informazioa. 462 00:39:26,910 --> 00:39:33,430 Huff fitxategi bakoitza lotutako zenbaki magiko bat Huffeader du ezagutzen dugu 463 00:39:33,430 --> 00:39:37,240 , ikur bakoitzaren maiztasunak array bat, baita 464 00:39:37,240 --> 00:39:39,570 baita checksum gisa. 465 00:39:39,570 --> 00:39:43,180 Jakin badakigu, baina peek a dump.c ere hartu dugu, 466 00:39:43,180 --> 00:39:49,120 Huff fitxategi batean irakurtzea. 467 00:39:49,120 --> 00:39:53,990 Eta, beraz, horretarako, benetan huffed ote den edo ez begiratu behar izan du. 468 00:39:53,990 --> 00:40:03,380 Beraz, agian, egitura gisa erabili dump.c genezake gure puff.c. 469 00:40:03,380 --> 00:40:12,680 Itzuli pset 4 fitxategi copy.c RGB triples kopiatu izan dugu 470 00:40:12,680 --> 00:40:14,860 interpretatzen dugu eta Whodunit eta Resize, 471 00:40:14,860 --> 00:40:20,390 era berean, zer egin ahal izango duzu besterik ez da exekutatu komando bezala cp dump.c puff.c 472 00:40:20,390 --> 00:40:23,600 eta erabili han kodea batzuk. 473 00:40:23,600 --> 00:40:28,210 Hala eta guztiz ere, ez da prozesu bat erraza izango 474 00:40:28,210 --> 00:40:33,010 dump.c itzultzeko puff.c 475 00:40:33,010 --> 00:40:36,160 baina, gutxienez, ematen du nonbait hasteko 476 00:40:36,160 --> 00:40:40,540 nola sarrera hori benetan huffed edo ez ziurtatzeko 477 00:40:40,540 --> 00:40:43,240 baita beste zenbait gauza ere. 478 00:40:45,930 --> 00:40:50,250 Ziurtatzen dugu, ongi erabili eta ziurtatu sarrera huffed. 479 00:40:50,250 --> 00:40:53,570 Denbora bakoitzak egin ditudan dugu gure error egiaztapena egokia egin dugu, 480 00:40:53,570 --> 00:41:01,520 beraz, itzuli eta funtzioa irtetea porrota batzuk gertatzen bada, arazoren bat badago. 481 00:41:01,520 --> 00:41:07,170 >> Orain zer egin nahi dugun da eraikitzeko benetako zuhaitzaren. 482 00:41:08,840 --> 00:41:12,640 Forest erreparatzen badiogu, ez dira funtzio nagusiak 2 483 00:41:12,640 --> 00:41:15,800 ari gara eta oso ezagunak bihurtu nahi du. 484 00:41:15,800 --> 00:41:23,870 Funtzio boolearrak landare landareak ez-0 maiztasuna zuhaitza gure basoan barruan. 485 00:41:23,870 --> 00:41:29,250 Eta beraz, ez pasatzen da erakuslea baso bat eta zuhaitz baten erakuslea. 486 00:41:32,530 --> 00:41:40,340 Quick question: Zenbat baso Huffman zuhaitz bat eraikitzen ari zaren izan al duzu? 487 00:41:44,210 --> 00:41:46,650 Gure baso gure mihise bezala da, ezta? 488 00:41:46,650 --> 00:41:50,800 Beraz, soilik ari gara 1 basoa izan du, baina zuhaitz bat baino gehiago izan dugu. 489 00:41:50,800 --> 00:41:57,590 Beraz, aurretik landare deitzen duzunean, ustez ari zara zure baso egin nahi du. 490 00:41:57,590 --> 00:42:04,430 Komando bat dela forest.h begiratuz gero nola baso bat egin ahal izango duzu. 491 00:42:04,430 --> 00:42:09,270 Zuhaitz bat landatu ahal izango duzu. Nola egiten den jakin nahi dugu. 492 00:42:09,270 --> 00:42:11,590 Eta gero, basoan zuhaitz bat jaso ahal izango duzu, 493 00:42:11,590 --> 00:42:17,540 zuhaitz bat kendu, pisu txikiena eta erakuslea eman ahal izateko. 494 00:42:17,540 --> 00:42:23,090 Atzera Thinking adibideak egingo dugu geure burua, 495 00:42:23,090 --> 00:42:27,980 ginen marrazketa, besterik ez dugu gehitu estekak. 496 00:42:27,980 --> 00:42:31,680 Baina hemen ordez loturak gehituz, 497 00:42:31,680 --> 00:42:40,630 pentsatu gehiago ari gisa nodo horien 2 kendu eta gero ordez beste bat. 498 00:42:40,630 --> 00:42:44,200 Biltzea eta landatzen termino hori adierazteko, 499 00:42:44,200 --> 00:42:48,840 2 zuhaitz ari zaren picking eta, ondoren, beste zuhaitz bat landatu 500 00:42:48,840 --> 00:42:54,060 duten 2 zuhaitz haurrak bildu ditu. 501 00:42:57,950 --> 00:43:05,280 Huffman-en zuhaitza eraikitzeko, sinbolo eta maiztasunak ordenean irakurri ahal izango duzu 502 00:43:05,280 --> 00:43:10,790 Huffeader ematen duelako duzu, 503 00:43:10,790 --> 00:43:14,250 maiztasunak array bat ematen dizu. 504 00:43:14,250 --> 00:43:19,660 Beraz, aurrera dezakezu, eta besterik gabe, ezer ez ikusi egin 0 du 505 00:43:19,660 --> 00:43:23,760 nahi dugu ez delako 256 bukaeran hostoak. 506 00:43:23,760 --> 00:43:27,960 Bakarrik nahi dugu hosto diren karaktere kopurua 507 00:43:27,960 --> 00:43:31,600 fitxategia erabiltzen diren benetan. 508 00:43:31,600 --> 00:43:37,590 Sinbolo horiek irakur dezakezu, eta ez-0 maiztasun duten sinboloak bakoitzean, 509 00:43:37,590 --> 00:43:40,440 horiek zuhaitzak izango. 510 00:43:40,440 --> 00:43:45,990 Zer egin dezakezu aldi bakoitzean irakurtzen ez-0 maiztasuna sinboloa da, 511 00:43:45,990 --> 00:43:50,660 basoan zuhaitz hori landatu ahal izango duzu. 512 00:43:50,660 --> 00:43:56,620 Landatu zuhaitz Behin basoan, zuhaitz horiek sartu ahal izango duzu anai-arrebak, 513 00:43:56,620 --> 00:44:01,130 beraz, landatu eta non hautatu picking 2 eta, ondoren, landare-1, 514 00:44:01,130 --> 00:44:05,820 non 1 planta 2 haur bildu duzula gurasoa. 515 00:44:05,820 --> 00:44:11,160 Orduan, zure azken emaitza da zure baso zuhaitz bakar bat izango da. 516 00:44:16,180 --> 00:44:18,170 Hau da zure zuhaitz nola eraiki duzu. 517 00:44:18,170 --> 00:44:21,850 >> Gauzak gaizki joan izan hemen daude hainbat 518 00:44:21,850 --> 00:44:26,580 ari garelako, zuhaitz berriak eginez, eta erakusleak eta gauzak horrela aurre aurre. 519 00:44:26,580 --> 00:44:30,450 Erakusleak ginen aurre egin aurretik, 520 00:44:30,450 --> 00:44:36,580 bakoitzean dugu malloc'd ziurtatu zuen ez dela itzuliko digu NULL erakuslea balioa egin nahi izan dugu. 521 00:44:36,580 --> 00:44:42,770 Beraz, prozesu horren barruan, urrats bat baino gehiago daude hainbat kasu izango 522 00:44:42,770 --> 00:44:45,920 non zure programa ezin huts egin. 523 00:44:45,920 --> 00:44:51,310 Zer egin nahi duzu akatsak horiek kudeatzeko duzula ziur egin nahi duzun, 524 00:44:51,310 --> 00:44:54,580 eta horiek kudeatzeko ondo zehaztutako dio, 525 00:44:54,580 --> 00:45:00,280 beraz, inprimatu mezu bat erabiltzaileari kontatzeko zergatik programa irten 526 00:45:00,280 --> 00:45:03,050 eta, ondoren, berehala irten da. 527 00:45:03,050 --> 00:45:09,490 Error manipulazioa Horretarako, gogoan izan nahi duzula egiaztatzeko 528 00:45:09,490 --> 00:45:12,160 bakoitza denbora ez dagoela porrot bat izan daiteke. 529 00:45:12,160 --> 00:45:14,660 Bakoitza denbora erakuslea berri bat egiten ari zarela 530 00:45:14,660 --> 00:45:17,040 zaitez hori arrakastatsua egin nahi duzu. 531 00:45:17,040 --> 00:45:20,320 Zer egin dugu berri bat erakuslea eta malloc da egin da aurretik, 532 00:45:20,320 --> 00:45:22,380 eta, ondoren, egiaztatu erakuslea NULL duten ala ez genuke. 533 00:45:22,380 --> 00:45:25,670 Beraz, ez dira zenbait kasutan bakarrik egin dezakezu hori izango da, 534 00:45:25,670 --> 00:45:28,610 baina, batzuetan, benetan ari zaren funtzio bat deituz 535 00:45:28,610 --> 00:45:33,100 eta funtzio horren barruan, duten mallocing bat egiten ari da. 536 00:45:33,100 --> 00:45:39,110 Kasu horretan, begiratu dugu atzera kodea barruan, funtzio batzuk 537 00:45:39,110 --> 00:45:42,260 horietako batzuek funtzio boolearrak dira. 538 00:45:42,260 --> 00:45:48,480 Abstraktua kasu izeneko foo Boolean funtzio bat izanez gero, 539 00:45:48,480 --> 00:45:54,580 funtsean, hori onar dezakegu edozein izanda ere foo du egiten gain, 540 00:45:54,580 --> 00:45:57,210 Boolean funtzio bat zenetik, egia edo gezurra itzultzen du 541 00:45:57,210 --> 00:46:01,300 benetako arrakasta izanez gero, faltsua ez bada. 542 00:46:01,300 --> 00:46:06,270 Beraz foo itzulera balioa egia edo gezurra den ala ez egiaztatu nahi dugu. 543 00:46:06,270 --> 00:46:10,400 Faltsua bada, horrek esan nahi du mezu bat inprimatu nahi dugun 544 00:46:10,400 --> 00:46:14,390 eta programa eta irten. 545 00:46:14,390 --> 00:46:18,530 Zer egin nahi dugun foo balio itzulera egiaztatu da. 546 00:46:18,530 --> 00:46:23,310 Foo itzultzen Faltsua bada, akats-mota batzuk aurkitu dugun badakigu 547 00:46:23,310 --> 00:46:25,110 eta gure programa irten behar dugu. 548 00:46:25,110 --> 00:46:35,600 Horretarako modu bat da, baldintza bat dute non benetako funtzioa bera da zure egoera. 549 00:46:35,600 --> 00:46:39,320 Esan foo x hartzen. 550 00:46:39,320 --> 00:46:43,390 Baldintza bat balitz bezala dugu (foo (x)). 551 00:46:43,390 --> 00:46:50,900 Funtsean, horrek esan nahi du foo exekutatzean amaieran true itzultzen bada, 552 00:46:50,900 --> 00:46:57,390 ondoren, hau egin ahal izango dugu funtzioa du foo ebaluatzeko 553 00:46:57,390 --> 00:47:00,500 ordena osoan egoera ebaluatzeko. 554 00:47:00,500 --> 00:47:06,500 Orduan hori nola zerbait egin dezakezu funtzioa itzultzen du egia bada, eta arrakastatsua izan da. 555 00:47:06,500 --> 00:47:11,800 Baina error egiaztapena zaudenean, bakarrik nahi duzu zure funtzioak faltsua bada irten. 556 00:47:11,800 --> 00:47:16,090 Zer egin ahal duzu besterik ez da gehitu == false, edo, besterik gabe, horren aurrean bang bat gehitu 557 00:47:16,090 --> 00:47:21,010 eta, ondoren, (! foo) behar duzu. 558 00:47:21,010 --> 00:47:29,540 Baldintza hori gorputz horren barruan error manipulazioa guztiak izango litzateke, 559 00:47:29,540 --> 00:47:36,940 bezala, "Ezin izan da sortu Zuhaitz hau" eta, ondoren, 1 edo horrelako zerbait itzultzeko. 560 00:47:36,940 --> 00:47:43,340 Zer egiten duen, baina, nahiz foo itzuli faltsua - 561 00:47:43,340 --> 00:47:46,980 Esan foo eta TRUE (EGIA) itzultzen du. 562 00:47:46,980 --> 00:47:51,060 Orduan ez duzu foo berriro deitzeko. Misconception komun bat da. 563 00:47:51,060 --> 00:47:54,730 Zure egoera zelako, dagoeneko ebaluatu, 564 00:47:54,730 --> 00:47:59,430 beraz, dagoeneko baduzu emaitza zaren zuhaitz edo horrelako zerbait erabiliz gero 565 00:47:59,430 --> 00:48:01,840 edo landare edo pick edo zerbait. 566 00:48:01,840 --> 00:48:07,460 Dagoeneko Balio hori. Dagoeneko exekutatu. 567 00:48:07,460 --> 00:48:10,730 Beraz, erabilgarria da boolear funtzioak erabili ahal izateko baldintza gisa 568 00:48:10,730 --> 00:48:13,890 ala ez exekutatu benetan loop-gorputza delako, 569 00:48:13,890 --> 00:48:18,030 funtzioa exekutatzen du, hala ere. 570 00:48:22,070 --> 00:48:27,330 >> Gure azken urratsa bigarren mezua da fitxategia idaztean. 571 00:48:27,330 --> 00:48:33,070 Behin Huffman zuhaitz eraikitzeko dugu, eta ondoren, mezua idazteko fitxategia nahiko erraza da. 572 00:48:33,070 --> 00:48:39,260 Nahiko erraza da 0 s eta 1s jarraitu. 573 00:48:39,260 --> 00:48:45,480 Eta, beraz, konbentzio Huffman zuhaitz bat 0 s adierazten utzi badakigu 574 00:48:45,480 --> 00:48:48,360 eta 1s adierazteko eskubidea. 575 00:48:48,360 --> 00:48:53,540 Beraz, gero, irakurri bit bit by, aldi bakoitzean bat duzula 0 576 00:48:53,540 --> 00:48:59,100 ezkerreko adarraren jarraitu ahal izango duzu, eta, ondoren, behin irakurtzen 1 577 00:48:59,100 --> 00:49:02,100 eskuineko adarraren jarraitu behar duzu. 578 00:49:02,100 --> 00:49:07,570 Eta gero, jarraitu zaren hosto bat sakatzen duzun arte 579 00:49:07,570 --> 00:49:11,550 dira hostoak, adarrak amaieran direlako. 580 00:49:11,550 --> 00:49:16,870 Nola ahal dugu hit hosto bat edo ez den edo ez esango dugu? 581 00:49:19,800 --> 00:49:21,690 Esan dugu aurretik. 582 00:49:21,690 --> 00:49:24,040 [Ikasleen] erakusleak NULL badira. >> Bai. 583 00:49:24,040 --> 00:49:32,220 Dugu hit hosto bat bada, bai ezkerreko eta eskuineko zuhaitzak erakusleak dira NULL bada esan dezakegu. 584 00:49:32,220 --> 00:49:34,110 Perfect. 585 00:49:34,110 --> 00:49:40,320 Bit bit gure Huff fitxategi irakurri nahi dugun erabaki dugu. 586 00:49:43,870 --> 00:49:51,220 Dump.c aurretik ikusi bezala, zer egin zuten irakurri bit bit Huff fitxategia bihurtu 587 00:49:51,220 --> 00:49:54,560 eta bakarrik inprimatutako bit horiek zer ziren. 588 00:49:54,560 --> 00:49:58,430 Ez ari gara egiten hori. Egiten pixka bat konplexuagoa da zerbait ari gara. 589 00:49:58,430 --> 00:50:03,620 Baina zer egin dezakegu Kode bit pixka irakurtzen hartu ahal izango dugu. 590 00:50:03,620 --> 00:50:10,250 Hemen dugun Oraindik uneko bit adierazten duen zenbaki oso bit ditugu. 591 00:50:10,250 --> 00:50:15,520 Fitxategia bit bit arduratzen hit lerro amaierara arte. 592 00:50:15,520 --> 00:50:21,270 Based on, eta gero iterator nolabaiteko izan nahi ari zaren 593 00:50:21,270 --> 00:50:26,760 zure zuhaitz zeharkatzeko. 594 00:50:26,760 --> 00:50:31,460 Eta gero bit da, 0 edo 1 den, 595 00:50:31,460 --> 00:50:36,920 iterator bai mugitu ezkerrera edo eskuinera mugitu nahi duzun 596 00:50:36,920 --> 00:50:44,080 modu hosto bat sakatzen duzun arte, beraz, modu guztiak nodo hori Oraindik duzun arte 597 00:50:44,080 --> 00:50:48,260 ez du gehiago nodo seinalatu. 598 00:50:48,260 --> 00:50:54,300 Zergatik ezin dugu hori Huffman fitxategi bat, baina ez da Morse kodea? 599 00:50:54,300 --> 00:50:56,610 Morse kodea anbiguotasun pixka bat delako. 600 00:50:56,610 --> 00:51:04,440 Bezala, oh itxaronaldia izan dugu, bidean gutun bat sakatu dugu, eta, beraz, agian hau da gure gutun 601 00:51:04,440 --> 00:51:08,150 jarraitu dugu, pixka bat luzeagoa bada, eta ondoren, berriz, izan hit genuke beste gutun bat. 602 00:51:08,150 --> 00:51:13,110 Baina hori ez da gertatuko Huffman kodeketa, 603 00:51:13,110 --> 00:51:17,540 beraz, atseden ziurtaturik modu bakarra ari dugu karaktere bat sakatu ahal izango dugu 604 00:51:17,540 --> 00:51:23,480 Nodo horrek ezkerreko eta eskuineko haurrak dira NULL bada. 605 00:51:28,280 --> 00:51:32,350 >> Azkenik, gure memoria libre nahi dugu. 606 00:51:32,350 --> 00:51:37,420 Itxi bi Huff fitxategia nahi dugu dugun aurre 607 00:51:37,420 --> 00:51:41,940 eta baita gure basoan zuhaitz guztiak kentzeko. 608 00:51:41,940 --> 00:51:46,470 Zure ezartzeko oinarrituta, seguruenik ari zaren nahi kendu baso deitu 609 00:51:46,470 --> 00:51:49,780 ordez benetan zuhaitz eskuz guztiak igaro. 610 00:51:49,780 --> 00:51:53,430 Baina egin duzun aldi baterako zuhaitz edozein bada, libre duten nahi duzu. 611 00:51:53,430 --> 00:51:59,060 Zure kodea Badakizu onena, beraz, badakizu non memoria ari zaren esleitzean. 612 00:51:59,060 --> 00:52:04,330 Eta beraz, behar izanez gero, joan beharko duzu, hasteko, nahiz eta Kontrol malloc for F'ing 613 00:52:04,330 --> 00:52:08,330 ikusten duzunean malloc eta ziur egiten askatzea duzun hori guztia 614 00:52:08,330 --> 00:52:10,190 , baina gero soilik zure kodea zeharkatuz, 615 00:52:10,190 --> 00:52:14,260 non memoria esleitu dakizukeela ulertzeko. 616 00:52:14,260 --> 00:52:21,340 Normalean besterik ez dezakezu esan, "fitxategi baten amaieran besterik ez dut nire baso baso kendu egingo" 617 00:52:21,340 --> 00:52:23,850 beraz, funtsean, garbitu memoria hori, free, 618 00:52:23,850 --> 00:52:28,310 "Eta ondoren ere naiz fitxategia itxi eta gero, nire programa irten egingo da." 619 00:52:28,310 --> 00:52:33,810 Baina bakarrik zure programa irten da? 620 00:52:33,810 --> 00:52:37,880 Ez, batzuetan dagoelako izan dezake errore bat gertatu da. 621 00:52:37,880 --> 00:52:42,080 Agian ezin dugu fitxategi bat ireki, edo ezin izan dugu beste zuhaitz bat egiteko 622 00:52:42,080 --> 00:52:49,340 edo akats-mota batzuk memoria esleipen prozesua gertatu zen, eta, beraz, NULL itzuli du. 623 00:52:49,340 --> 00:52:56,710 Errore bat gertatu da, eta, ondoren, itzuli gara eta irten. 624 00:52:56,710 --> 00:53:02,040 Beraz, ziurtatu daiteke edozein unetan zure programa irten ondoren, egin nahi duzun, 625 00:53:02,040 --> 00:53:06,980 Zure memoria askatzea nahi duzun. 626 00:53:06,980 --> 00:53:13,370 Ez da, besterik gabe, zure kodea ixtea funtzioa nagusia amaieran izango da. 627 00:53:13,370 --> 00:53:20,780 Adibidez behin atzera begiratu nahi duzu zure kodea duten potentzialki behar baino lehenago itzultzeko agian 628 00:53:20,780 --> 00:53:25,070 eta, ondoren, free edozein izanda ere memoria zentzua. 629 00:53:25,070 --> 00:53:30,830 Esan deitu zuen baso eta itzuli faltsua. 630 00:53:30,830 --> 00:53:34,230 Ondoren Ziurrenik ez duzu behar zure baso kendu 631 00:53:34,230 --> 00:53:37,080 ez duzulako baso bat oraindik. 632 00:53:37,080 --> 00:53:42,130 Baina, kodea puntu guztietan non itzultzeko behar baino lehenago, baliteke 633 00:53:42,130 --> 00:53:46,160 ziur askatzea posible memoria edozein egin nahi duzu. 634 00:53:46,160 --> 00:53:50,020 >> Beraz, memoria libre uzten ari gara eta aurre izatea potentzial filtrazioak, 635 00:53:50,020 --> 00:53:55,440 ez bakarrik erabili nahi dugu gure epaia eta gure logika 636 00:53:55,440 --> 00:54:01,850 baina ere erabil Valgrind dugu ala ez dugu gure memoria askatua dagoela edo ez zehazteko. 637 00:54:01,850 --> 00:54:09,460 Puff on edo exekutatu dezakezu Valgrind eta gero ere gainditu behar duzu 638 00:54:09,460 --> 00:54:14,020 komando-lerroko argumentu kopuru zuzena Valgrind. 639 00:54:14,020 --> 00:54:18,100 Abiarazi ahal izango duzu, baina irteera pixka bat críptica. 640 00:54:18,100 --> 00:54:21,630 Ahaztuak dugu erabiltzen Speller pixka bat, baina apur bat gehiago laguntza behar dugu, 641 00:54:21,630 --> 00:54:26,450 beraz, ondoren exekutatzen leak-check = full banderak bezala batzuk gehiago, 642 00:54:26,450 --> 00:54:32,040 Ziurrenik Valgrind irteera lagungarria batzuk ematen dizkigute. 643 00:54:32,040 --> 00:54:39,040 >> Ondoren, beste erabilgarria tip arazketa ari zaren diff komandoa da. 644 00:54:39,040 --> 00:54:48,520 Huff langileek ezartzeko sartu ahal izango duzu, exekutatu testu-fitxategi batean, 645 00:54:48,520 --> 00:54:55,400 eta, ondoren, bistaratu fitxategi bitarra, binary file Huff, zehatza izan. 646 00:54:55,400 --> 00:54:59,440 Ondoren exekutatu zure puff fitxategi bitarra dela, 647 00:54:59,440 --> 00:55:03,950 ondoren, haien, zure outputted testu fitxategi berdin-berdina izango da 648 00:55:03,950 --> 00:55:08,200 original bat sartu gainditu 649 00:55:08,200 --> 00:55:15,150 Hemen hth.txt dut adibide gisa erabiliz, eta hori buruz hitz egin zuen zure zehaztapenak. 650 00:55:15,150 --> 00:55:21,040 Hau da, hitzez hitz besterik ez HTH eta, ondoren, lerro berri bat. 651 00:55:21,040 --> 00:55:30,970 Baina, zalantzarik gabe, sentitzen free eta behin betiko animatu dira luzeagoa adibideak erabili 652 00:55:30,970 --> 00:55:32,620 zure testu-fitxategi. 653 00:55:32,620 --> 00:55:38,110 >> Agian konprimitzea filmatu ditzakezu eta, ondoren, deskonprimitzerakoan 654 00:55:38,110 --> 00:55:41,600 fitxategiak Speller duzula Gerra eta Bakea bezala erabiltzen batzuk 655 00:55:41,600 --> 00:55:46,710 edo Jane Austen edo horrelako zerbait cool mota izango litzateke - edo Austin Powers 656 00:55:46,710 --> 00:55:51,880 fitxategi handiago aurre mota genuke ez delako etorri da 657 00:55:51,880 --> 00:55:55,590 tresna erabiltzen dugu hurrengo hemen, ls-l bada. 658 00:55:55,590 --> 00:56:01,150 Ls, funtsean, gure uneko direktorioan eduki guztiak zerrendatzen gara. 659 00:56:01,150 --> 00:56:07,860 Ez-l gainditzea benetan fitxategi horiek tamaina erakusten du. 660 00:56:07,860 --> 00:56:12,690 Pset zehaztutako bidez joaten bazara, ibiltzen da benetan fitxategi bitarra sortzen bidez, 661 00:56:12,690 --> 00:56:16,590 huffing, eta hori ikusten duzun fitxategiak oso txikiak 662 00:56:16,590 --> 00:56:23,910 konprimitzea eta informazio hori guztia itzultzeko kostua espazioa 663 00:56:23,910 --> 00:56:26,980 maiztasunak eta gauzak horrela benetako prestazioa outweighs 664 00:56:26,980 --> 00:56:30,000 fitxategi konprimitzea Lehenik eta behin. 665 00:56:30,000 --> 00:56:37,450 Baina zenbait testu fitxategiak luzeagoa exekutatzen baduzu, eta gero ikusiko onura batzuk lortzeko dezake 666 00:56:37,450 --> 00:56:40,930 fitxategi horiek konprimitzea. 667 00:56:40,930 --> 00:56:46,210 >> Eta gero, azkenik, gure pal GDB zaharra, hau da, behin betiko handy etorri ere egingo dugu. 668 00:56:48,360 --> 00:56:55,320 >> Huff zuhaitzak edo prozesuari buruzko edozein zalantza izan dugu, agian, zuhaitz egiteko 669 00:56:55,320 --> 00:56:58,590 Puff Huff'n buruzko galderak beste edozein? 670 00:57:00,680 --> 00:57:02,570 Ongi da. Lo inguruan dut apur bat. 671 00:57:02,570 --> 00:57:06,570 >> Eskerrik asko, denek. Bisita gidatua 6 izan zen. Eta zorte ona. 672 00:57:08,660 --> 00:57:10,000 >> [CS50.TV]