1 00:00:00,000 --> 00:00:02,210 [Powered by Google Translate] [Walkthrough - مسئلہ 6 سیٹ] 2 00:00:02,210 --> 00:00:04,810 [Zamyla چان - ہارورڈ یونیورسٹی] 3 00:00:04,810 --> 00:00:07,240 یہ [CS50 ہے. CS50.TV] - 4 00:00:07,240 --> 00:00:12,180 >> خوش، سب، اور 6 Walkthrough کا خیر مقدم: Huff'n پف. 5 00:00:12,180 --> 00:00:17,440 Huff'n پف میں جو ہم کر رہے ہیں وہ Huffman کمپریسڈ فائل سے نمٹنے جا رہا ہے 6 00:00:17,440 --> 00:00:20,740 اور پھر یہ puffing بیک اپ، تو یہ پھیلانا، 7 00:00:20,740 --> 00:00:25,810 تاکہ ہم 0s اور 1s کہ صارف بھیجتا سے ترجمہ کر سکتے ہیں 8 00:00:25,810 --> 00:00:30,660 اور اس کے اصل متن میں واپس تبدیل کریں. 9 00:00:30,660 --> 00:00:34,360 Pset 6 کافی ٹھنڈا ہو جائے گا کیونکہ آپ کو ٹولز میں سے کچھ کو دیکھنے کے لئے جا رہے ہیں 10 00:00:34,360 --> 00:00:41,730 ہے کہ آپ کو 1 بہت صاف تصور میں انہیں شامل کرنے کے 4 pset اور 5 pset اور قسم میں استعمال کیا 11 00:00:41,730 --> 00:00:43,830 جب آپ اس کے بارے میں سوچنے کے لئے آئے ہیں. 12 00:00:43,830 --> 00:00:50,110 >> کے علاوہ، arguably، 4 اور 5 pset کے سب سے زیادہ مشکل psets کہ ہم کرنے کی پیشکش کی تھی. 13 00:00:50,110 --> 00:00:53,950 تو اب سے، ہم سی 1 pset ہے، 14 00:00:53,950 --> 00:00:56,480 اور پھر ہم اس کے بعد ویب پروگرامنگ پر ہیں. 15 00:00:56,480 --> 00:01:02,310 تو اپنے CS50 میں سب سے مشکل کوبڑ پر حاصل کرنے کے لئے مبارک باد دیتا ہوں. 16 00:01:03,630 --> 00:01:09,760 >> کو Huff'n پف کے لئے منتقل، اس pset کے لئے ہماری آلات Huffman درخت کے لئے جا رہے ہیں، 17 00:01:09,760 --> 00:01:14,700 ایسا ہے، تو نہ صرف کس طرح بائنری درخت بلکہ کام خاص طور پر Huffman درختوں کو سمجھنے 18 00:01:14,700 --> 00:01:16,240 وہ کس طرح تعمیر کر رہے ہیں. 19 00:01:16,240 --> 00:01:20,210 اور پھر ہم اس pset میں تقسیم کے کوڈ کا ایک بہت ہے کے لئے جا رہے ہیں، 20 00:01:20,210 --> 00:01:22,480 اور ہم اصل میں یہ دیکھ کوڈ کے کچھ آئے گا 21 00:01:22,480 --> 00:01:24,670 ہم مکمل طور پر ابھی تک سمجھنے کے قابل نہیں ہو سکتا ہے، 22 00:01:24,670 --> 00:01:30,080 لہذا ان سی فائلوں.، لیکن اس وقت ان کے ساتھ فائلیں. H 23 00:01:30,080 --> 00:01:34,300 ہمیں تفہیم کے لئے کافی ہے کہ ہمیں ضرورت ہے تا کہ ہم جانتے ہیں کہ کس طرح ان افعال کا کام دے گا 24 00:01:34,300 --> 00:01:38,100 یا کم از کم جو وہ کرنا چاہئے ہیں - ان کے آدانوں اور نتائج - 25 00:01:38,100 --> 00:01:40,760 ہم بھی اگر آپ نہیں جانتے کہ بلیک باکس میں کیا ہو رہا ہے 26 00:01:40,760 --> 00:01:44,090 سمجھ یا نہیں کیا کے اندر اندر بلیک باکس میں کیا ہو رہا ہے. 27 00:01:44,090 --> 00:01:49,400 اور پھر آخر میں، ہمیشہ کی طرح، ہم نئے اعداد و شمار کے ڈھانچے کے ساتھ دوچار ہیں، 28 00:01:49,400 --> 00:01:51,840 کے مخصوص قسم کے نوڈس کہ کچھ چیزوں کی طرف اشارہ ہے، 29 00:01:51,840 --> 00:01:56,080 اور اس وجہ سے یہاں نہ صرف ڈیزائن کے عمل کے لئے ایک قلم اور کاغذ 30 00:01:56,080 --> 00:01:58,470 اور جب آپ کو معلوم کرنا آپ کا pset کس طرح کام کرنا چاہئے کی کوشش کر رہے ہیں 31 00:01:58,470 --> 00:02:00,520 بلکہ بگ کے دوران. 32 00:02:00,520 --> 00:02:06,140 آپ کو آپ کے قلم اور کاغذ کے ساتھ ساتھ GDB جب تم کیا اقدار ہیں کر سکتے ہیں، 33 00:02:06,140 --> 00:02:09,320 آپ کے تیر کی طرف اشارہ کرتے ہوئے جہاں، کر رہے ہیں اور اس طرح کی چیزیں. 34 00:02:09,320 --> 00:02:13,720 >> پہلے Huffman درختوں کو دیکھو. 35 00:02:13,720 --> 00:02:19,600 Huffman درخت بائنری درخت ہیں، کا مطلب یہ ہے کہ ہر نوڈ کو صرف 2 بچے ہیں. 36 00:02:19,600 --> 00:02:24,870 Huffman درختوں میں خصوصیت ہے کہ سب سے زیادہ بار بار اقدار 37 00:02:24,870 --> 00:02:27,140 fewest بٹس کی طرف سے نمائندگی کی. 38 00:02:27,140 --> 00:02:32,690 ہم مورس کوڈ کے لیکچر کے مثال کے طور پر، انوائسز کی طرح ہے جو کچھ خط میں دیکھا. 39 00:02:32,690 --> 00:02:38,030 اگر آپ مثال کے طور پر ایک یا ایک ای کا ترجمہ کرنے کی کوشش کر رہے ہیں، 40 00:02:38,030 --> 00:02:43,940 آپ اکثر کہ ترجمہ کر رہے ہیں، تو بجائے اس کے کہ بٹس کی مکمل سیٹ کو استعمال کرنے کے لئے 41 00:02:43,940 --> 00:02:48,640 کہ ہمیشہ کی طرح ڈیٹا کی قسم کے لیے مختص ہیں، آپ اسے کم کمپریس نیچے، 42 00:02:48,640 --> 00:02:53,730 اور پھر ان خطوط جو کی نمائندگی کر رہے ہیں کم اکثر طویل بٹس کے ساتھ نمائندگی کر رہے ہیں 43 00:02:53,730 --> 00:02:59,840 کیونکہ آپ نے برداشت جب آپ باہر تعدد ہے کہ ان خطوط ظاہر وزن کر سکتے ہیں. 44 00:02:59,840 --> 00:03:03,020 ہم Huffman درختوں میں ایک ہی خیال ہے یہاں 45 00:03:03,020 --> 00:03:12,360 ہم کہاں کر رہے ہیں، چین کے راستے کی ایک قسم ہے کہ مخصوص حروف حاصل کرنے کے لئے. 46 00:03:12,360 --> 00:03:14,470 اور اس کے بعد جو سب سے زیادہ فریکوئنسی آنے والے حروف 47 00:03:14,470 --> 00:03:17,940 fewest بٹس کے ساتھ نمائندگی کر رہے ہیں کیا جا رہا ہے. 48 00:03:17,940 --> 00:03:22,020 >> طریقہ ہے کہ آپ کو ایک Huffman درخت تعمیر 49 00:03:22,020 --> 00:03:27,430 متن میں ظاہر ہونے والے حروف کے تمام رکھ کر ہے 50 00:03:27,430 --> 00:03:30,630 اور ان کی فریکوئنسی حساب، وہ کتنی بار دکھائے جاتے ہیں. 51 00:03:30,630 --> 00:03:33,880 یہ کتنی بار ان حروف کو ظاہر شمار یا تو ہو سکتا ہے 52 00:03:33,880 --> 00:03:40,270 یا شاید تمام حروف کتنے ہر ایک ظاہر ہوتا ہے سے باہر کا ایک فی صد ہے. 53 00:03:40,270 --> 00:03:44,270 اور اس وجہ سے جو تم کرتے ہو ہے ایک بار تم اس نقشے باہر کے سب 54 00:03:44,270 --> 00:03:49,060 تو آپ 2 سب سے کم تعدد کے لئے دیکھو اور اس کے بعد ان کے بہن بھائیوں کے طور پر اپنے ساتھ شامل ہونے کی 55 00:03:49,060 --> 00:03:55,660 تو جہاں والدین نوڈ تعدد ہے جو اس کے 2 بچوں کی رقم ہے ہے. 56 00:03:55,660 --> 00:04:00,870 اور کنونشن کی طرف سے تو آپ کا کہنا ہے کہ بائیں نوڈ، 57 00:04:00,870 --> 00:04:03,770 آپ 0 برانچ کے بعد کی طرف سے اس کی پیروی، 58 00:04:03,770 --> 00:04:08,140 اور پھر rightmost نوڈ 1 برانچ ہے. 59 00:04:08,140 --> 00:04:16,040 جیسا کہ ہم نے مورس کوڈ میں دیکھا، ایک پکڑ لیا تھا کہ اگر آپ کے پاس صرف ایک بیپ اور بیپ تھا 60 00:04:16,040 --> 00:04:18,120 یہ مبہم تھا. 61 00:04:18,120 --> 00:04:22,430 1 خط یا یہ 2 حروف کی ترتیب ہو سکتی ہے ہو سکتا ہے. 62 00:04:22,430 --> 00:04:27,790 اور تو کیا Huffman درختوں کرتا ہے کیونکہ حروف کی نوعیت کی طرف سے 63 00:04:27,790 --> 00:04:34,140 یا ہماری آخری اصل برانچ پر گزشتہ نوڈس کے حروف - 64 00:04:34,140 --> 00:04:39,300 ہم ان کے پتے کے طور پر حوالہ دیتے ہیں - کے سامنے اس کی وجہ سے کوئی ابہام نہیں ہو سکتا 65 00:04:39,300 --> 00:04:45,160 کس خط کی شرائط آپ بٹس کی سیریز کے ساتھ ضابطہ کاری کریں کرنے کی کوشش کر رہے ہیں میں 66 00:04:45,160 --> 00:04:50,670 کیونکہ بٹس 1 خط کی نمائندگی کرتے ہیں کے ساتھ ساتھ کہیں 67 00:04:50,670 --> 00:04:55,960 ایک اور پورے خط آپ کا سامنا اور کوئی الجھن وہاں نہیں کریں گے. 68 00:04:55,960 --> 00:04:58,430 لیکن ہم مثال کے طور پر میں جانا ہے کہ آپ لوگ اصل میں دیکھ سکتے ہیں کریں گے کہ 69 00:04:58,430 --> 00:05:02,120 بجائے اس کے کہ ہم صرف آپ کو بتا رہا ہوں کہ یہ سچ ہے. 70 00:05:02,120 --> 00:05:06,390 >> Huffman درخت کی ایک سادہ مثال میں نظر ہے. 71 00:05:06,390 --> 00:05:09,380 میں یہاں ایک سٹرنگ ہے کہ 12 حروف طویل ہے ہے. 72 00:05:09,380 --> 00:05:14,010 میں کے طور پر، 6، گریڈ، اور کاوچ سرفنگ کے 2 4 ہے. 73 00:05:14,010 --> 00:05:17,270 میرا پہلا قدم شمار ہو گا. 74 00:05:17,270 --> 00:05:20,760 A کتنی بار دکھائی دیتا ہے؟ یہ سٹرنگ میں 4 بار ظاہر ہوتا ہے. 75 00:05:20,760 --> 00:05:25,060 B 6 بار ظاہر ہوتا ہے، اور C 2 مرتبہ ظاہر ہوتا ہے. 76 00:05:25,060 --> 00:05:28,970 ظاہر ہے، میں کہتا ہوں کہ میں B کا استعمال کرتے ہوئے سب سے زیادہ کثرت سے ہوں جا رہا ہوں، 77 00:05:28,970 --> 00:05:35,970 تو میں بٹس کی fewest تعداد، 0s اور 1s fewest تعداد کے ساتھ بی کی نمائندگی کرنا چاہتے ہیں. 78 00:05:35,970 --> 00:05:42,600 اور پھر میں نے بھی C 1s اور 0s کے سب سے زیادہ رقم کے طور پر کی ضرورت کی توقع کی جا رہی ہوں. 79 00:05:42,600 --> 00:05:48,550 پہلے کہ میں یہاں کیا میں نے تعدد کی شرائط کے لئے کی ترتیب صعودی ترتیب میں ان کے رکھ دیا ہے. 80 00:05:48,550 --> 00:05:52,710 ہم دیکھتے ہیں کہ C اور A، وہ ہمارے 2 سب سے کم تعدد ہیں. 81 00:05:52,710 --> 00:06:00,290 ہم نے والدین کی نوڈ کو تشکیل دیتے ہیں، اور اس کے والدین نوڈ اس کے ساتھ منسلک خط نہیں ہے، 82 00:06:00,290 --> 00:06:05,070 لیکن یہ تعدد، جو رقم ہے ہے. 83 00:06:05,070 --> 00:06:08,780 رقم 2 + 4، جس میں 6 ہے ہو جاتا ہے. 84 00:06:08,780 --> 00:06:10,800 پھر ہم بائیں شاخ پر عمل کریں. 85 00:06:10,800 --> 00:06:14,970 اگر ہم اس 6 نوڈ میں تھے، تو ہم 0 کی پیروی C پر حاصل کرنے کے لئے کریں گے 86 00:06:14,970 --> 00:06:17,450 اور پھر 1 A. حاصل کرنے کے لئے 87 00:06:17,450 --> 00:06:20,300 تو اب ہم نے 2 نوڈس ہے. 88 00:06:20,300 --> 00:06:23,920 ہم 6 قیمت ہوتا ہے اور پھر ہم بھی 6 قیمت کے ساتھ ایک نوڈ. 89 00:06:23,920 --> 00:06:28,550 اور اس طرح 2 ان لوگوں کو نہ صرف کم سے کم 2 بلکہ صرف 2 رہ گئے ہیں، 90 00:06:28,550 --> 00:06:33,820 تو ہم نے رقم 12 ہونے کے ساتھ ایک اور والدین کی طرف سے ان لوگوں میں شامل ہونے، ہے. 91 00:06:33,820 --> 00:06:36,300 تو یہاں ہم اپنے Huffman درخت ہے 92 00:06:36,300 --> 00:06:40,020 جہاں B حاصل کرنے کے لئے، 1 بٹ صرف ہو گی 93 00:06:40,020 --> 00:06:45,430 اور پھر ایک حاصل کرنے کے لئے، ہم 01 ہے اور تو C 00 رکھنے. 94 00:06:45,430 --> 00:06:51,300 تو ہم یہاں دیکھتے ہیں کہ بنیادی طور پر ہم نے یا تو 1 یا 2 بٹس کے ساتھ ان حروف کی نمائندگی کر رہے ہیں 95 00:06:51,300 --> 00:06:55,160 جہاں B، کے طور پر پیش گوئی کی ہے، کم از کم ہے. 96 00:06:55,160 --> 00:07:01,730 اور پھر ہم C زیادہ سے زیادہ ہے کی توقع تھی، لیکن اس طرح ایک چھوٹی سی Huffman درخت ہے، 97 00:07:01,730 --> 00:07:06,020 تو بھی درمیان میں کہیں کے خلاف 2 بٹس کی طرف سے ظاہر کیا جاتا ہے. 98 00:07:07,820 --> 00:07:11,070 >> Huffman درخت کی ایک اور عام مثال پر جانے کے لئے، 99 00:07:11,070 --> 00:07:19,570 کا کہنا ہے کہ آپ کو سٹرنگ ہے "ہیلو." 100 00:07:19,570 --> 00:07:25,360 جو تم کرتے ہو سب سے پہلے ہے، آپ کا کہنا ہے کہ کتنی بار H اس میں ظاہر کرتا ہے؟ 101 00:07:25,360 --> 00:07:34,200 H ظاہر ہوتا ہے ایک بار تو ای ظاہر ہوتا ہے ایک بار اور اس کے بعد ہم نے دو بار دکھائے جانے L ہے 102 00:07:34,200 --> 00:07:36,580 اور اے ایک بار دکھائے جانے. 103 00:07:36,580 --> 00:07:44,310 اور تو ہم امید کرتے ہیں جو خط بٹس کی کم از کم تعداد کی طرف سے نمائندگی ہے؟ 104 00:07:44,310 --> 00:07:47,450 [طالب علم] L. >> L. جی ہاں. L صحیح ہے. 105 00:07:47,450 --> 00:07:50,730 ہم L بٹس کی کم از کم تعداد کی طرف سے نمائندگی کی توقع 106 00:07:50,730 --> 00:07:55,890 کیونکہ L سٹرنگ میں سب سے زیادہ استعمال کیا جاتا ہے "ہیلو." 107 00:07:55,890 --> 00:08:04,280 میں اب کیا کرنے جا رہا ہوں ان مراکز کو اپنی طرف متوجہ ہے. 108 00:08:04,280 --> 00:08:15,580 1 ہے، جس H، اور پھر دوسرے 1،، جس میں ای ہے اور پھر 1، جو اے - 109 00:08:15,580 --> 00:08:23,410 ابھی میں نے ان کی ترتیب میں ڈال رہا ہوں - اور پھر 2، جس میں ہے. 110 00:08:23,410 --> 00:08:32,799 پھر میں نے کا کہنا ہے کہ جس طرح سے ہے کہ میں نے ایک Huffman درخت تعمیر کم از کم تعدد کے ساتھ 2 نوڈس کو تلاش کرنے کے لئے ہے 111 00:08:32,799 --> 00:08:38,010 اور ان کے والدین کی نوڈ بنانے کے کی طرف سے بہن بھائیوں ہے. 112 00:08:38,010 --> 00:08:41,850 یہاں ہم سب سے کم تعدد کے ساتھ 3 نوڈس ہے. وہ 1 تمام ہو. 113 00:08:41,850 --> 00:08:50,620 لہذا ہم یہاں کا انتخاب کرتے ہیں جو ایک ہم پہلے سے منسلک کرنے جا رہے ہیں. 114 00:08:50,620 --> 00:08:54,850 چلو کا کہنا ہے کہ میں H اور ای کا انتخاب کریں. 115 00:08:54,850 --> 00:09:01,150 1 کی رقم + 1 2 ہے، لیکن یہ نوڈ اس کے ساتھ منسلک خط نہیں ہے. 116 00:09:01,150 --> 00:09:04,440 یہ صرف قیمت کی ڈگری حاصل کی. 117 00:09:04,440 --> 00:09:10,950 اب ہم اگلے 2 سب سے کم تعدد میں دیکھو. 118 00:09:10,950 --> 00:09:15,590 وہ 2 اور 1 ہے. کہ یا تو 2 والوں کی، لیکن میں نے اس سے ایک کو منتخب کرنے کے لئے جا رہا ہوں سکتے ہیں. 119 00:09:15,590 --> 00:09:18,800 رقم ہے 3. 120 00:09:18,800 --> 00:09:26,410 اور پھر آخر میں، میں صرف 2 بائیں ہے، تو 5 ہو جاتا ہے. 121 00:09:26,410 --> 00:09:32,010 ، پھر یہاں، کے طور پر امید کی جاتی ہے، اگر میں اس کے لئے انکوڈنگ میں بھرتے ہیں 122 00:09:32,010 --> 00:09:37,480 1s ہمیشہ صحیح برانچ اور 0s بائیں ایک ہیں. 123 00:09:37,480 --> 00:09:45,880 پھر ہم 2 کی طرف سے صرف 1 اور پھر تھوڑا اے کی طرف سے نمائندگی L ہے 124 00:09:45,880 --> 00:09:52,360 اور پھر 2 کی طرف سے ای اور پھر H 3 بٹس نیچے آتا ہے. 125 00:09:52,360 --> 00:09:59,750 تو آپ کو یہ پیغام منتقل "ہیلو" کی بجائے اصل حروف کا استعمال کرتے ہوئے 126 00:09:59,750 --> 00:10:02,760 کی طرف سے صرف 0s اور 1s. 127 00:10:02,760 --> 00:10:07,910 لیکن یاد رکھنا چاہیے کہ ہم نے کئی مقدمات میں ہمارے تعدد کے ساتھ تعلقات تھے. 128 00:10:07,910 --> 00:10:11,900 ہم یا تو H اور O پہلے شاید میں شمولیت اختیار کر سکتے ہیں. 129 00:10:11,900 --> 00:10:15,730 یا پھر بعد میں جب ہم 2 کی طرف سے نمائندگی L 130 00:10:15,730 --> 00:10:19,410 کے ساتھ ساتھ 2 کی طرف سے نمائندگی ایک میں شمولیت اختیار کی، ہم یا تو ایک سے منسلک کیا جا سکتا ہے ہے. 131 00:10:19,410 --> 00:10:23,630 >> اور اس لئے تم جب بھیجنے 0s اور 1s کہ اصل میں نہیں اس بات کی ضمانت ہے 132 00:10:23,630 --> 00:10:27,090 کہ وصول کنندہ کا حق بیٹ کے اپنے پیغام کو مکمل طور پر پڑھ سکتے ہیں 133 00:10:27,090 --> 00:10:30,490 کیونکہ وہ نہیں جانتے کہ جو فیصلہ تم نے ہو سکتا ہے. 134 00:10:30,490 --> 00:10:34,920 تو جب ہم Huffman سمپیڑن کے ساتھ کام کر رہے ہو، 135 00:10:34,920 --> 00:10:40,090 کسی نہ کسی طرح ہم کو ہمارے پیغام کے وصول کنندہ کو بتانا کہ کس طرح ہم نے فیصلہ کیا ہے - 136 00:10:40,090 --> 00:10:43,470 وہ کچھ قسم کی اضافی معلومات کے جاننے کی ضرورت ہے 137 00:10:43,470 --> 00:10:46,580 کمپریسڈ پیغام اس کے علاوہ ہے. 138 00:10:46,580 --> 00:10:51,490 وہ اصل میں جو درخت کی طرح لگتا ہے سمجھ کی ضرورت ہے، 139 00:10:51,490 --> 00:10:55,450 ہم اصل میں کس طرح ان کے فیصلے کی تھی. 140 00:10:55,450 --> 00:10:59,100 >> یہاں ہم صرف اصل شمار کی بنیاد پر مثال کے طور پر کر رہے تھے، 141 00:10:59,100 --> 00:11:01,550 لیکن کبھی کبھی آپ کو ایک Huffman درخت بھی ہو سکتا ہے 142 00:11:01,550 --> 00:11:05,760 تعدد کی بنیاد پر ہے جس میں خط دکھائے جاتے ہیں، اور یہ بالکل وہی عمل ہے. 143 00:11:05,760 --> 00:11:09,090 یہاں میں یہ فیصد یا ایک حصہ کی شرائط میں کا اظہار کر رہا ہوں، 144 00:11:09,090 --> 00:11:11,290 اور اس وجہ سے یہاں بالکل وہی بات ہے. 145 00:11:11,290 --> 00:11:15,300 میں 2 سب سے کم، ان کا خلاصہ یہ اگلے سب سے کم 2، ان خلاصہ تلاش 146 00:11:15,300 --> 00:11:19,390 جب تک میں ایک مکمل درخت ہے. 147 00:11:19,390 --> 00:11:23,610 اگرچہ ہم یہ کسی بھی طرح سے، جب ہم فی صد کے ساتھ کام کر رہے ہو کر سکتے ہیں، 148 00:11:23,610 --> 00:11:27,760 کہ بلکہ کا مطلب ہے کہ ہم چیزوں کو تقسیم کر رہے ہیں اور دشملو سے نمٹنے یا floats 149 00:11:27,760 --> 00:11:30,900 اگر ہم سر کے اعداد و شمار کے ڈھانچے کے بارے میں سوچ رہے ہیں. 150 00:11:30,900 --> 00:11:32,540 ہم floats کے بارے میں کیا جانتے ہیں؟ 151 00:11:32,540 --> 00:11:35,180 کیا ایک عام مسئلہ ہے جب ہم floats کے ساتھ کام کر رہے ہو؟ 152 00:11:35,180 --> 00:11:38,600 [طالب علم] Imprecise ریاضی. >> جی ہاں. Imprecision. 153 00:11:38,600 --> 00:11:43,760 چل نقاط imprecision کی وجہ سے اس pset کے لئے تا کہ ہم اس بات کو یقینی بنانے کے لئے 154 00:11:43,760 --> 00:11:49,450 ہے کہ ہم کسی بھی اقدار کو کھو نہ کرو، تو پھر ہم اصل میں شمار سے نمٹنے جا رہے ہیں. 155 00:11:49,450 --> 00:11:54,880 تو اگر آپ Huffman نوڈ کے بارے میں سوچو، اگر آپ کی ساخت پر واپس یہاں دیکھو، 156 00:11:54,880 --> 00:12:01,740 اگر آپ سبز ہیں دیکھو، یہ اس کے ساتھ منسلک تعدد ہے 157 00:12:01,740 --> 00:12:08,760 کے ساتھ ساتھ اس کی بائیں جانب ایک نوڈ کے طور پر اچھی طرح سے کے طور پر اس کے حق میں ایک نوڈ کی طرف اشارہ ہے. 158 00:12:08,760 --> 00:12:13,970 اور پھر سرخ ہیں وہاں بھی ان کے ساتھ منسلک کردار ہے. 159 00:12:13,970 --> 00:12:18,900 ہم نہیں کر رہے ہیں اور پھر والدین کو حتمی نوڈس کے لئے الگ الگ ہیں بنانے کے 160 00:12:18,900 --> 00:12:23,680 جو ہم پتے کے طور پر حوالہ دیتے ہیں، بلکہ وہ نل اقدار پڑے گا. 161 00:12:23,680 --> 00:12:31,050 ہر نوڈ کے لیے ہم نے ایک کردار علامت پڑے گا کہ کہ نوڈ کی نمائندگی کرتا ہے، 162 00:12:31,050 --> 00:12:40,490 پھر ایک تعدد کے طور پر ساتھ ساتھ اس کے بائیں کے ساتھ ساتھ بچے کو اس کے صحیح بچے پوائنٹر. 163 00:12:40,490 --> 00:12:45,680 پتے، جو کہ بہت ہی سب سے نیچے دیئے گئے ہیں، نوڈ اشارہ بھی ہوگا 164 00:12:45,680 --> 00:12:49,550 ، ان کے بائیں اور ان کا حق ہے، لیکن ان اقدار کو اصل نوڈس کی طرف اشارہ نہیں کر رہے ہیں کے بعد 165 00:12:49,550 --> 00:12:53,970 ان کی قیمت کیا ہو گی؟ >> [طالب علم]، اتارنا null. >>، اتارنا null. بالکل. 166 00:12:53,970 --> 00:12:58,430 یہ کہ آپ کس طرح floats میں تعدد کی نمائندگی کر سکتے ہیں کی ایک مثال ہے، 167 00:12:58,430 --> 00:13:02,130 لیکن ہم integers کے ساتھ اس کے ساتھ نمٹنے جا رہے ہیں، 168 00:13:02,130 --> 00:13:06,780 تو تمام میں نے کیا ہے کہ ڈیٹا کی قسم کو تبدیل کریں. 169 00:13:06,780 --> 00:13:09,700 >> تھوڑا سا ایک پیچیدہ مثال کے جانے دو 170 00:13:09,700 --> 00:13:13,360 لیکن اب کہ ہم نے سادہ والوں نے کیا ہے، یہ صرف ایک ہی عمل ہے. 171 00:13:13,360 --> 00:13:20,290 آپ کے 2 سب سے کم تعدد تلاش، تعدد خلاصہ 172 00:13:20,290 --> 00:13:22,450 اور یہ کہ اپنے والدین کی نوڈ کے نئے تعدد ہے، 173 00:13:22,450 --> 00:13:29,310 1 برانچ کے ساتھ 0 برانچ اور حق کے ساتھ جو اس کے بعد اس کے بائیں طرف اشارہ ہے. 174 00:13:29,310 --> 00:13:34,200 اگر ہم سٹرنگ "یہ cs50 ہے،" ہے تو ہم شمار کتنی بار T ذکر ہے، 175 00:13:34,200 --> 00:13:38,420 H ذکر، میں، S، C، 5، 0. 176 00:13:38,420 --> 00:13:42,010 تو کیا میں یہاں کیا سرخ نوڈس میں صرف لگائے کے ساتھ ہے، 177 00:13:42,010 --> 00:13:48,530 میں نے کہا میں ان حروف کو اپنے درخت کے سب سے نیچے دیئے گئے آخر میں جا رہا ہوں. 178 00:13:48,530 --> 00:13:51,740 وہ پتیوں کی سب جا رہے ہیں. 179 00:13:51,740 --> 00:13:58,200 اس کے بعد میں نے کیا کیا ہے میں صعودی میں تعدد کی طرف سے ان کے مطابق، 180 00:13:58,200 --> 00:14:02,950 اور یہ اصل میں جس طرح سے کہ pset کوڈ اس سے فرق پڑتا ہے ہے 181 00:14:02,950 --> 00:14:07,550 تعدد کی طرف سے اس قسم کی اور پھر ترتیب حروف تہجی کے. 182 00:14:07,550 --> 00:14:13,870 تو اس تعداد میں سب سے پہلے اور اس کے بعد تعدد کی طرف سے ترتیب حروف تہجی کے ہے. 183 00:14:13,870 --> 00:14:18,520 تو کیا میں کروں گا میں 2 سب سے کم ملے گا. یہ 0 اور 5 ہے. 184 00:14:18,520 --> 00:14:22,390 میں انہیں خلاصہ، اور یہ کہ 2. پھر میں جاری کرے گا اگلے سب سے کم 2 تلاش. 185 00:14:22,390 --> 00:14:26,100 وہ دو 1s ہیں، اور پھر ان 2 بن ساتھ ساتھ. 186 00:14:26,100 --> 00:14:31,570 اب میں جانتا ہوں کہ میرا اگلا قدم سب سے کم تعداد میں شامل ہونے جا رہا ہے، 187 00:14:31,570 --> 00:14:41,380 جس T ہے، 1، اور پھر نوڈس جو تعدد کے طور پر 2 ہے ایک کا انتخاب ہے. 188 00:14:41,380 --> 00:14:44,560 لہذا ہم یہاں 3 اختیارات ہیں. 189 00:14:44,560 --> 00:14:47,980 میں سلائڈ کے لئے کیا کرنے جا رہا ہوں صرف آپ کے لئے نابینا ان پنرویوستیت 190 00:14:47,980 --> 00:14:51,790 تو تم نے دیکھا کہ کس طرح میں اس کی تعمیر کر رہا ہوں کر سکتے ہیں. 191 00:14:51,790 --> 00:14:59,040 کوڈ کیا اور اپنی تقسیم کوڈ کرنے والی ہے T ایک میں شامل ہونے گے 192 00:14:59,040 --> 00:15:01,410 0 اور 5 نوڈ کے ساتھ. 193 00:15:01,410 --> 00:15:05,060 تو پھر ہے کہ 3 رقم، اور پھر ہم عمل جاری ہے. 194 00:15:05,060 --> 00:15:08,660 2 اور 2 اب سب سے کم ہیں، تو پھر 4 ان رقم. 195 00:15:08,660 --> 00:15:12,560 ہر کوئی اتنی دور کے بعد؟ ٹھیک ہے. 196 00:15:12,560 --> 00:15:16,410 اس کے بعد ہم نے اس کے بعد 3 اور 3 کہ شامل کرنے کی ضرورت ہے ہے، 197 00:15:16,410 --> 00:15:21,650 تو پھر میں صرف سوئچنگ رہا ہوں تاکہ آپ ضعف تو دیکھتے ہیں کہ یہ بہت گندا حاصل نہیں کر سکتا. 198 00:15:21,650 --> 00:15:25,740 پھر ہم 6 ہے، اور پھر ہماری آخری مرحلہ ہے کہ ہم صرف 2 نوڈس ہے 199 00:15:25,740 --> 00:15:30,440 ہم ان ہمارے درخت، جس میں 10 ہے کی جڑ کو بنانے کے لئے خلاصہ. 200 00:15:30,440 --> 00:15:34,100 اور 10 نمبر سمجھ میں آتا ہے کیونکہ ہر نوڈ کی نمائندگی، 201 00:15:34,100 --> 00:15:40,750 ان کی قیمت، ان کے تعدد کی تعداد، کتنی بار وہ سٹرنگ میں شائع، 202 00:15:40,750 --> 00:15:46,350 اور پھر ہم اپنے سٹرنگ میں 5 حروف، جو سمجھ میں آتا ہے. 203 00:15:48,060 --> 00:15:52,320 اگر ہم نے کہ ہم کس طرح یہ اصل میں ضابطہ کاری کریں گے، دیکھو، 204 00:15:52,320 --> 00:15:56,580 کے طور پر امید کی جاتی ہے، میں نے اور S، جس میں سب سے زیادہ کثرت سے دکھائے 205 00:15:56,580 --> 00:16:01,350 بٹس کے fewest تعداد کی طرف سے نمائندگی کی. 206 00:16:03,660 --> 00:16:05,660 >> یہاں محتاط رہیں. 207 00:16:05,660 --> 00:16:09,780 Huffman درختوں میں بات واقعی فرق پڑتا ہے. 208 00:16:09,780 --> 00:16:13,670 ایک بڑے S ایک چھوٹے S سے مختلف ہے. 209 00:16:13,670 --> 00:16:21,260 اگر ہم نے "یہ CS50 ہے" بڑے حروف کے ساتھ، تو چھوٹے S میں دو بار ہی نظر آئے، 210 00:16:21,260 --> 00:16:27,120 اس کی قیمت کے طور پر 2 کے ساتھ ایک نوڈ، اور اس وقت کے بڑے S صرف ایک دفعہ ہی ہو گی. 211 00:16:27,120 --> 00:16:33,440 تو پھر آپ کا درخت ڈھانچے کو تبدیل کیونکہ آپ واقعی ایک اضافی پتی یہاں ہے. 212 00:16:33,440 --> 00:16:36,900 لیکن رقم 10 اب بھی ہو جائے گا. 213 00:16:36,900 --> 00:16:39,570 یہی ہے جو ہم واقعی حیض بلا رکھا جائے جا رہے ہیں، 214 00:16:39,570 --> 00:16:44,060 شمار کے سب کے علاوہ. 215 00:16:46,010 --> 00:16:50,990 >> اب کہ ہم نے Huffman درختوں کو احاطہ کرتا ہے، ہم کو Huff'n پف، pset میں کودو کر سکتے ہیں. 216 00:16:50,990 --> 00:16:52,900 ہم سوالات کے ایک حصے کے ساتھ شروع کرنے جا رہے ہیں، 217 00:16:52,900 --> 00:16:57,990 اور یہ آپ کو بائنری درختوں اور کس طرح کہ اس کے ارد گرد کام کرنے کے ساتھ عادی جا رہا ہے: 218 00:16:57,990 --> 00:17:03,230 ڈرائنگ نوڈس، ایک نوڈ کے لئے اپنا خود کا typedef struct پیدا 219 00:17:03,230 --> 00:17:07,230 اور دیکھ کر کس طرح آپ کو ایک بائنری درخت، ایک کے مطابق ہے میں داخل ہو سکتا ہے، 220 00:17:07,230 --> 00:17:09,050 ، اور اس طرح چیزوں traversing. 221 00:17:09,050 --> 00:17:14,560 وہ علم یقینی طور پر جب آپ Huff'n پف حصہ میں ڈوبکی کی مدد کی جا رہی ہے 222 00:17:14,560 --> 00:17:17,089 pset. 223 00:17:19,150 --> 00:17:26,329 pset کے سٹینڈرڈ ایڈیشن میں، آپ کے کام کو پف کو لاگو کرنے کے لئے ہے، 224 00:17:26,329 --> 00:17:30,240 اور ہیکر کے ورژن میں آپ کا کام Huff کو لاگو کرنے کے لئے ہے. 225 00:17:30,240 --> 00:17:38,490 Huff کیا ہے یہ ہے کہ یہ متن لیتا ہے اور پھر یہ 0s اور 1s میں ترجمہ، 226 00:17:38,490 --> 00:17:41,990 تاکہ عمل کہ ہم اوپر کیا جہاں ہم تعدد شمار 227 00:17:41,990 --> 00:17:50,970 اور پھر درخت تو نے اور کہا، "میں کس طرح T حاصل کروں؟" 228 00:17:50,970 --> 00:17:54,840 T 100 کی طرف سے ظاہر کیا جاتا ہے، اس طرح چیزوں 229 00:17:54,840 --> 00:17:58,860 اور پھر Huff متن اور پھر بائنری کہ پیداوار لیں گے. 230 00:17:58,860 --> 00:18:04,920 بلکہ کیونکہ ہم جانتے ہیں کہ ہم کو ہمارے پیغام کے وصول کنندہ کو اجازت دینے کے لئے چاہتے ہیں 231 00:18:04,920 --> 00:18:11,790 عین مطابق ایک ہی درخت کو آرام کرنے کے لئے، یہ بھی تعدد شمار کے بارے میں معلومات بھی شامل ہے. 232 00:18:11,790 --> 00:18:17,980 پھر ہم پف کے ساتھ 0s اور 1s کے ایک بائنری فائل دیا جاتا ہے 233 00:18:17,980 --> 00:18:21,740 اور بھی تعدد کے بارے میں معلومات دی. 234 00:18:21,740 --> 00:18:26,740 ہم اصل پیغام تھا میں ان 0s اور 1s پیٹھ کے سب ترجمہ 235 00:18:26,740 --> 00:18:29,350 تو ہم یہ پھیلانا رہے ہیں. 236 00:18:29,350 --> 00:18:36,450 اگر آپ سٹینڈرڈ ایڈیشن کر رہے ہیں، تو آپ کو Huff لاگو کرنے کے لئے کی ضرورت نہیں ہے، 237 00:18:36,450 --> 00:18:39,290 تو آپ Huff کے عملے پر عملدرآمد کا استعمال کر سکتے ہیں. 238 00:18:39,290 --> 00:18:42,080 اس رپورٹ میں کس طرح ایسا کرنے کے ہدایات ہیں. 239 00:18:42,080 --> 00:18:48,780 آپ کو ایک مخصوص متن فائل وسلم Huff کے عملے پر عملدرآمد کو چلا سکتے ہیں 240 00:18:48,780 --> 00:18:53,270 اور پھر آپ ان پٹ کے طور پر اس کی پیداوار پر پف کا استعمال کریں. 241 00:18:53,270 --> 00:18:59,330 >> جیسا کہ میں نے پہلے ذکر کیا ہے، ہم اس کے لئے تقسیم کے کوڈ کا ایک بہت ہے. 242 00:18:59,330 --> 00:19:01,810 میں نے اس کے ذریعے شروع کرنے جا رہا ہوں. 243 00:19:01,810 --> 00:19:04,400 میں وقت کے سب سے زیادہ خرچ کرنے جا رہا ہوں H فائلوں. 244 00:19:04,400 --> 00:19:07,660 کیونکہ سی فائلوں میں کیونکہ، ہم ایچ. 245 00:19:07,660 --> 00:19:11,650 اور اس کے افعال میں سے prototypes کے ساتھ فراہم کرتا ہے، 246 00:19:11,650 --> 00:19:15,520 ہم بالکل مکمل طور پر سمجھنے کے لئے کی ضرورت نہیں ہے - 247 00:19:15,520 --> 00:19:20,280 اگر آپ کو سمجھ میں نہیں آ رہا ہے کہ سی فائلوں میں کیا چل رہا ہے، تو بہت زیادہ فکر نہ کریں، 248 00:19:20,280 --> 00:19:23,600 لیکن یقینی طور پر ایک نظر لے کرنے کی کوشش کریں کیونکہ اس سے کچھ اشارہ دے سکتے ہیں 249 00:19:23,600 --> 00:19:29,220 اور اسے دوسرے لوگوں کے کوڈ کو پڑھنے کے کرنے کے لئے استعمال کرنے کے لئے مفید ہے. 250 00:19:38,940 --> 00:19:48,270 >> huffile.h کو دیکھ کر، اسے تبصرے میں فائلوں Huffman کوڈ کے لئے تجرید کی پرت کی یہ وانی ہے. 251 00:19:48,270 --> 00:20:01,660 اگر ہم جاتے ہیں، ہم دیکھتے ہیں کہ وہاں 256 علامات کی ایک زیادہ سے زیادہ ہے کہ ہم کے لئے کوڈ کی ضرورت ہو سکتی ہے. 252 00:20:01,660 --> 00:20:05,480 بڑے اور چھوٹے - یہ حروف تہجی کے تمام حروف شامل ہیں - 253 00:20:05,480 --> 00:20:08,250 تو اور علامات اور نمبر، وغیرہ 254 00:20:08,250 --> 00:20:11,930 اس کے بعد ہم یہاں ایک جادو ایک فائل Huffman کوڈ کی شناخت نمبر ہے. 255 00:20:11,930 --> 00:20:15,890 Huffman کوڈ کے اندر اندر انہوں نے ایک خاص جادو نمبر کے لئے جا رہے ہیں 256 00:20:15,890 --> 00:20:18,560 ہیڈر کے ساتھ منسلک ہے. 257 00:20:18,560 --> 00:20:21,110 یہ صرف ایک بے ترتیب جادو نمبر کی طرح ہو سکتا ہے، 258 00:20:21,110 --> 00:20:27,160 لیکن اگر آپ ASCII میں اصل میں یہ ترجمہ، تو یہ اصل میں باہر HUFF منتر ہے. 259 00:20:27,160 --> 00:20:34,290 یہاں ہم ایک فائل Huffman انکوڈنگ کے لئے ایک struct ہے. 260 00:20:34,290 --> 00:20:39,670 Huff فائل کے ساتھ منسلک کی خصوصیات کی تمام ہے. 261 00:20:39,670 --> 00:20:47,080 پھر یہاں نیچے ہم Huff فائل کے لئے ہیڈر ہے، تو ہم اسے Huffeader کہتے ہیں 262 00:20:47,080 --> 00:20:50,810 اضافی H بجائے انہوں نے مزید کہا کیونکہ یہ بھی ویسے بھی لگتا ہے. 263 00:20:50,810 --> 00:20:52,720 پیارا. 264 00:20:52,720 --> 00:20:57,790 ہم اس کے ساتھ وابستہ جادو نمبر ہے. 265 00:20:57,790 --> 00:21:09,040 اگر یہ ایک حقیقی Huff فائل ہے، اس تعداد کو اوپر، اس جادو ہو رہا ہے. 266 00:21:09,040 --> 00:21:14,720 اور پھر یہ ایک صف پڑے گا. 267 00:21:14,720 --> 00:21:18,750 تو ہر علامت کے لئے، جس میں سے 256 ہیں، 268 00:21:18,750 --> 00:21:24,760 فہرست ہے کہ ان علامات کے تعدد Huff فائل کے اندر اندر ہیں جا رہا ہے. 269 00:21:24,760 --> 00:21:28,090 اور پھر آخر میں، ہم تعدد کے لئے ایک حیض ہے، 270 00:21:28,090 --> 00:21:32,160 جو ان کے تعدد رقم ہونا چاہئے. 271 00:21:32,160 --> 00:21:36,520 تو ہے کہ کیا ایک Huffeader ہے. 272 00:21:36,520 --> 00:21:44,600 اس کے بعد ہم نے کچھ کام کرتا ہے جو Huff فائل میں اگلے تھوڑا سا واپس 273 00:21:44,600 --> 00:21:52,580 کے ساتھ ساتھ Huff فائل تھوڑی لکھتا ہے، اور اس کے بعد اس تقریب یہاں hfclose، 274 00:21:52,580 --> 00:21:54,650 جو اصل میں Huff فائل بند ہوجائے گا. 275 00:21:54,650 --> 00:21:57,290 سے پہلے، ہم براہ راست صرف fclose سے نمٹنے کر رہے تھے، 276 00:21:57,290 --> 00:22:01,190 لیکن جب تم نے ایک Huff فائل ہے، بجائے اس fclosing 277 00:22:01,190 --> 00:22:06,080 جو آپ اصل میں کرنے جا رہے ہیں ہے اور اسے hfopen hfclose. 278 00:22:06,080 --> 00:22:13,220 وہ Huff فائلوں کو مخصوص کام کرتا ہے کہ ہم سے نمٹنے جا رہے ہیں ہیں. 279 00:22:13,220 --> 00:22:19,230 تو پھر ہم یہاں ہیڈر میں اور اس کے بعد پڑھنے کے ہیڈر لکھنے. 280 00:22:19,230 --> 00:22:25,700 >> H فائل کو پڑھنے سے صرف ہم Huff فائل کیا ہو سکتا ہے کا احساس حاصل کی طرح کر سکتے ہیں، 281 00:22:25,700 --> 00:22:32,480 یہ اصل میں huffile.c میں بغیر کیا خصوصیات ہے، 282 00:22:32,480 --> 00:22:36,750 جو، اگر ہم میں کودو، تھوڑا سا زیادہ پیچیدہ ہونے جا رہا ہے. 283 00:22:36,750 --> 00:22:41,270 یہ فائل I / O یہاں اشارہ سے نمٹنے کے سب ہیں. 284 00:22:41,270 --> 00:22:48,010 ہم یہاں دیکھا کہ جب ہم hfread فون، مثال کے طور پر، یہ اب بھی fread کے ساتھ نمٹنے ہے. 285 00:22:48,010 --> 00:22:53,050 ہم ان کے افعال میں سے چھٹکارا نہیں کر رہے ہیں مکمل طور پر، لیکن ہم ان لوگوں کو بھیجنے کی دیکھ بھال پر لے جایا جائے ہو 286 00:22:53,050 --> 00:22:59,760 خود کی سب کرنے کے بجائے Huff فائل کے اندر. 287 00:22:59,760 --> 00:23:02,300 تم نے اس کے ذریعے اسکین کرنے کے لئے آزاد لگے گا اگر آپ جاننا ہو 288 00:23:02,300 --> 00:23:08,410 اور واپس پرت تھوڑا سا چھیل. 289 00:23:20,650 --> 00:23:24,060 >> اگلے فائل ہے کہ ہم کو دیکھنے کے لئے جا رہے ہیں tree.h. ہے 290 00:23:24,060 --> 00:23:30,210 سے پہلے میں Walkthrough سلائڈ ہم نے کہا کہ ہم نے ایک Huffman نوڈ کی توقع 291 00:23:30,210 --> 00:23:32,960 اور ہم ایک typedef struct نوڈ کیا. 292 00:23:32,960 --> 00:23:38,360 ہم اس علامت، تعدد، اور پھر 2 نوڈ ستاروں کی امید. 293 00:23:38,360 --> 00:23:41,870 اس صورت میں کیا ہم کر رہے ہیں ہے، یہ بنیادی طور پر ایک ہی ہے 294 00:23:41,870 --> 00:23:46,880 صرف نوڈ کے بجائے ہم ان درختوں کو فون کرنے جا رہے ہیں. 295 00:23:48,790 --> 00:23:56,760 ہم نے ایک تقریب میں ہے کہ جب آپ درخت بنانا کہتے ہیں یہ آپ کو ایک درخت پوائنٹر واپس ہے. 296 00:23:56,760 --> 00:24:03,450 ہجے کنندہ پر واپس جائیں، جب آپ کو ایک نیا نوڈ رہے تھے 297 00:24:03,450 --> 00:24:11,410 تم نے کہا نوڈ * نیا لفظ = malloc (sizeof) اور اس طرح کی چیزیں. 298 00:24:11,410 --> 00:24:17,510 بنیادی طور پر، mktree آپ کے لئے اس کے ساتھ نمٹنے جا رہا ہے. 299 00:24:17,510 --> 00:24:20,990 اسی طرح، جب آپ ایک درخت کو خارج کرنا چاہتے ہیں 300 00:24:20,990 --> 00:24:24,810 تاکہ بنیادی طور پر درخت آزاد ہے جب تم اس کے ساتھ کیا کر رہے ہیں، 301 00:24:24,810 --> 00:24:33,790 واضح طور پر اس پر آزاد کہہ کے بجائے، آپ اصل میں صرف تقریب rmtree کا استعمال کر رہے ہیں جا 302 00:24:33,790 --> 00:24:40,360 جہاں آپ پوائنٹر میں اس درخت کے پاس اور تو tree.c ہے کہ آپ کے لئے دیکھ بھال کرے گا. 303 00:24:40,360 --> 00:24:42,490 >> ہم tree.c. میں نظر آتے ہو 304 00:24:42,490 --> 00:24:47,240 ہم پر عملدرآمد کے طور پر دیکھ کر سوائے ایک ہی کام کرتا ہے کی امید رکھتے ہیں. 305 00:24:47,240 --> 00:24:57,720 جیسا کہ ہم توقع نہیں کی جب آپ کہتے mktree پوائنٹر میں ایک درخت کے سائز mallocs، 306 00:24:57,720 --> 00:25:03,190 نل قدر تو 0s یا NULLs اقدار کے initializes، 307 00:25:03,190 --> 00:25:08,280 اور پھر اس درخت پوائنٹر واپس ہے کہ آپ کو صرف آپ کو malloc'd ہے. 308 00:25:08,280 --> 00:25:13,340 یہاں جب تم درخت ہٹانے کہتے ہیں یہ سب سے پہلے اس بات کا یقین کر لیں کہ آپ آزاد ڈبل نہیں کر رہے ہیں دیتا ہے. 309 00:25:13,340 --> 00:25:18,320 یہ اس بات کا یقین کر لیں کہ آپ اصل میں ایک درخت ہے کہ آپ کو خارج کرنا چاہتے ہیں ہے کرتا ہے. 310 00:25:18,320 --> 00:25:23,330 یہاں وجہ سے ایک درخت بھی اس کے بچوں پر مشتمل ہے، 311 00:25:23,330 --> 00:25:29,560 یہ کیا ہوتا ہے یہ تکراری طور پر درخت کے بائیں نوڈ پر درخت ہٹانے کا مطالبہ 312 00:25:29,560 --> 00:25:31,650 کے ساتھ صحیح نوڈ کے طور پر. 313 00:25:31,650 --> 00:25:37,790 اس سے پہلے کہ اس کے والدین آزاد ہے، یہ بچوں کے طور پر آزاد کرنے کی ضرورت ہے. 314 00:25:37,790 --> 00:25:42,770 والدین بھی جڑ کے ساتھ تبادلہ ہے. 315 00:25:42,770 --> 00:25:46,500 تو عظیم کے عظیم عظیم کے پردادا کی طرح پہلی بار والدین، 316 00:25:46,500 --> 00:25:52,130 یا دادی کے درخت، سب سے پہلے ہمیں نیچے کی سطح پر سب سے پہلے آزاد ہے. 317 00:25:52,130 --> 00:25:58,490 تو نیچے گزرنا، مفت ان، اور پھر واپس آئے، مفت ان وغیرہ، 318 00:26:00,400 --> 00:26:02,210 تو وہ درخت ہے. 319 00:26:02,210 --> 00:26:04,240 >> اب ہم جنگل میں لگ رہی ہو. 320 00:26:04,240 --> 00:26:09,860 جنگل ہے جہاں آپ اپنے Huffman درختوں کی تمام جگہ. 321 00:26:09,860 --> 00:26:12,910 یہ کہہ رہا ہے کہ ہم کچھ کرنے جا رہے ہیں ملاقات کی ایک پلاٹ 322 00:26:12,910 --> 00:26:22,320 کہ ایک درخت پر ایک پوائنٹر کے ساتھ ساتھ نامی اگلے سازش پوائنٹر پر مشتمل ہے. 323 00:26:22,320 --> 00:26:28,480 ساخت کی طرح نظر آتے ہیں کیا اس طرح کرتا ہے؟ 324 00:26:29,870 --> 00:26:32,490 کی قسم کا کہنا ہے کہ وہاں ہے. 325 00:26:34,640 --> 00:26:36,700 ٹھیک ہے یہاں پر. 326 00:26:37,340 --> 00:26:39,170 ایک لنک کی فہرست. 327 00:26:39,170 --> 00:26:44,590 ہم دیکھتے ہیں کہ جب تم میں سے کسی ایک کو ہم نے ایک پلاٹ ہے یہ پلاٹوں کی ایک لنک کی فہرست کی طرح ہے. 328 00:26:44,590 --> 00:26:53,020 ایک جنگل پلاٹوں کی ایک لنک کی فہرست کے طور پر بیان کیا جاتا ہے، 329 00:26:53,020 --> 00:26:58,100 اور تو جنگل کی ساخت ہے، ہم صرف ہمارے پہلے پلاٹ پوائنٹر رہے ہیں جا 330 00:26:58,100 --> 00:27:02,740 اور یہ کہ پلاٹ اس کے اندر اندر ایک درخت ہے بلکہ ایک درخت کی طرف اشارہ ہے 331 00:27:02,740 --> 00:27:06,190 اور پھر اگلے سازش بتاتے ہیں، اور وغیرہ. 332 00:27:06,190 --> 00:27:11,100 ایک جنگل کو بنانے کے لئے ہم mkforest کہتے ہیں. 333 00:27:11,100 --> 00:27:14,930 اس کے بعد ہم نے کچھ بہت مفید کام کرتا ہے یہاں ہے. 334 00:27:14,930 --> 00:27:23,240 ہم نے لینے جہاں آپ کو ایک جنگل میں گزرتے ہیں اور اس کے بعد واپسی کی قدر ایک درخت * ہے، 335 00:27:23,240 --> 00:27:25,210 ایک درخت پر ایک پوائنٹر. 336 00:27:25,210 --> 00:27:29,370 منتخب کیا کریں گے یہ ہے کہ یہ جنگل میں جائیں گے کہ آپ کی طرف اشارہ کر رہے ہیں 337 00:27:29,370 --> 00:27:35,240 پھر اس جنگل سے سب سے کم تعدد کے ساتھ ایک درخت ہٹا دیں 338 00:27:35,240 --> 00:27:38,330 اور پھر تم نے اس کے درخت کو پوائنٹر دے. 339 00:27:38,330 --> 00:27:43,030 ایک بار جب آپ فون لینے کے جنگل میں درخت موجود ہیں، نہیں کیا جائے گا، 340 00:27:43,030 --> 00:27:48,550 لیکن واپسی قیمت اس درخت پوائنٹر ہے. 341 00:27:48,550 --> 00:27:50,730 تو پھر تم پلانٹ ہے. 342 00:27:50,730 --> 00:27:57,420 کہ آپ پوائنٹر میں ایک درخت ہے کہ میں ایک غیر 0 تعدد ہے گزر بشرطیکہ 343 00:27:57,420 --> 00:28:04,040 کیا پلانٹ کیا کرے گا اس جنگل، درخت لے، اور گا پلانٹ ہے کہ جنگل کے درخت کے اندر. 344 00:28:04,040 --> 00:28:06,370 یہاں ہم rmforest ہے. 345 00:28:06,370 --> 00:28:11,480 درخت، جو کہ بنیادی طور پر ہمارے لئے ہماری تمام درختوں کی آزاد کو ہٹانے کی طرح، 346 00:28:11,480 --> 00:28:16,600 جنگل ہٹانے کے اس جنگل میں موجود ہر چیز. 347 00:28:16,600 --> 00:28:24,890 >> اگر ہم forest.c میں دیکھو، ہم وہاں کم از کم 1 rmtree کمانڈ کو دیکھنے کے لئے کی توقع کریں گے، 348 00:28:24,890 --> 00:28:30,090 کیونکہ جنگل میں مفت میموری پر اگر اس میں ایک جنگل کے درخت ہیں 349 00:28:30,090 --> 00:28:32,930 تو بالآخر تم ان درختوں کو بھی کو دور کرنے کے لئے جا رہے ہیں. 350 00:28:32,930 --> 00:28:41,020 اگر ہم forest.c میں دیکھو، ہم اپنے mkforest، جس کا ہے جیسا کہ ہم امید کرتے ہیں ہے. 351 00:28:41,020 --> 00:28:42,890 ہم چیزوں malloc. 352 00:28:42,890 --> 00:28:51,740 ہم نل کے طور پر جنگل میں سب سے پہلے پلاٹ ابتدا کیونکہ اس کے ساتھ شروع کرنے کے لئے خالی ہے، 353 00:28:51,740 --> 00:29:05,940 تو پھر ہم پک،، جس میں سب سے کم وزن کے ساتھ درخت واپس سب سے کم تعدد، 354 00:29:05,940 --> 00:29:13,560 اور اس کے بعد ہے کہ خاص طور پر نوڈ سے نجات ہو جاتا ہے کہ، اس درخت پوائنٹس اور اگلے ایک 355 00:29:13,560 --> 00:29:16,760 تو یہ اس جنگل سے منسلک فہرست کے لیتا ہے. 356 00:29:16,760 --> 00:29:24,510 اور پھر ہم یہاں پلانٹ، جس میں منسلک فہرست میں ایک درخت اضافہ ہے. 357 00:29:24,510 --> 00:29:29,960 کیا جنگل ہے کہ یہ اچھی طرح سے رکھتا ہے، یہ ہمارے لئے کے مطابق ہے. 358 00:29:29,960 --> 00:29:37,910 اور پھر آخر میں، ہم rmforest ہے اور، کے طور پر امید کی جاتی ہے، ہم نے وہاں فون کیا rmtree ہے. 359 00:29:46,650 --> 00:29:55,440 >> کی تلاش میں تقسیم کوڈ میں اب تک، huffile.c شاید دور سمجھنے کی سب سے مشکل کی طرف سے تھا، 360 00:29:55,440 --> 00:29:59,990 جبکہ دیگر فائلوں پر عمل خود بہت سادہ تھے. 361 00:29:59,990 --> 00:30:03,090 اشارہ اور منسلک کی فہرست اور اس طرح ہمارے علم کے ساتھ، 362 00:30:03,090 --> 00:30:04,860 ہم بہت اچھی طرح کی پیروی کرنے کے قابل تھے. 363 00:30:04,860 --> 00:30:10,500 لیکن ہم واقعی اس بات کا یقین کر لیں کہ ہم مکمل طور پر سمجھ بنانے کی ضرورت فائلوں. H 364 00:30:10,500 --> 00:30:15,840 کیونکہ تم ان افعال بلا، واپسی کے ان اقدار سے نمٹنے کی ضرورت ہے، 365 00:30:15,840 --> 00:30:20,590 تو اس بات کا یقین کریں کہ آپ کو مکمل طور پر سمجھ کیا کارروائی کی کارکردگی کا مظاہرہ کیا جا رہا ہے 366 00:30:20,590 --> 00:30:24,290 جب بھی آپ ان کے افعال میں سے ایک کہتے ہیں. 367 00:30:24,290 --> 00:30:33,020 لیکن اصل میں اس کے اندر بہت سمجھنے کی ضرورت ہے کیونکہ ہم ان ہے H فائلوں. 368 00:30:35,170 --> 00:30:39,490 ہم 2 مزید ہمارے تقسیم کے کوڈ میں چھوڑ فائلوں ہے. 369 00:30:39,490 --> 00:30:41,640 >> ڈمپ میں نظر ہے. 370 00:30:41,640 --> 00:30:47,230 اس تبصرہ کی طرف سے یہاں ڈمپ فائل Huffman کمپریسڈ لیتا ہے 371 00:30:47,230 --> 00:30:55,580 اور پھر ترجمہ اور dumps اس کے مواد کے سب باہر ہیں. 372 00:31:01,010 --> 00:31:04,260 ہم یہاں دیکھتے ہیں کہ یہ hfopen بلا رہا ہے. 373 00:31:04,260 --> 00:31:10,770 * ان پٹ = fopen دائر mirroring کی طرح ہے، 374 00:31:10,770 --> 00:31:13,500 اور پھر آپ کی معلومات میں گزرتے ہیں. 375 00:31:13,500 --> 00:31:18,240 بجائے ایک فائل * آپ ایک Huffile میں گزر رہے ہیں سوائے تقریبا ایک جیسی ہے، 376 00:31:18,240 --> 00:31:22,030 fopen کے بجائے آپ hfopen میں گزر رہے ہیں. 377 00:31:22,030 --> 00:31:29,280 یہاں پہلے ہم نے ہیڈر میں پڑھتے ہیں، جن میں سے قسم ہے کہ ہم کس طرح ہیڈر میں پڑھنے کے لئے اسی طرح کی ہے 378 00:31:29,280 --> 00:31:33,580 ایک بٹ نقشہ فائل کے لئے. 379 00:31:33,580 --> 00:31:38,000 ہم یہاں کیا کر رہے ہیں کو دیکھنے کے لئے جانچ پڑتال ہے چاہے ہیڈر کی معلومات 380 00:31:38,000 --> 00:31:44,330 صحیح جادو تعداد جس کی طرف اشارہ کرتا ہے کہ یہ ایک حقیقی Huff فائل ہے پر مشتمل ہے، 381 00:31:44,330 --> 00:31:53,610 پھر ان چیکوں کی تمام اس بات کا یقین کرنے کے لئے کہ فائل ہے کہ ہم کھلے ایک حقیقی huffed فائل یا نہیں ہے. 382 00:31:53,610 --> 00:32:05,330 اس کا کیا ہے، یہ علامات ہے کہ ہم دیکھ سکتے ہیں میں سے سب سے تعدد نتائج 383 00:32:05,330 --> 00:32:09,790 ایک گرافیکل ٹیبل میں ایک ٹرمینل کے اندر اندر. 384 00:32:09,790 --> 00:32:15,240 یہ حصہ مفید ہو جا رہا ہے. 385 00:32:15,240 --> 00:32:24,680 یہ تھوڑا سا ہے اور متغیر بٹ میں تھوڑا تھوڑا پڑھتا ہے اور پھر اسے پرنٹ باہر ہے. 386 00:32:28,220 --> 00:32:35,430 تو اگر میں hth.bin، جو ایک فائل huffing کا نتیجہ ہے ڈمپ پر کال 387 00:32:35,430 --> 00:32:39,490 عملے حل کا استعمال کرتے ہوئے، مجھے یہ ملے گا. 388 00:32:39,490 --> 00:32:46,000 یہ ان حروف کی سب لکھنا اور پھر تعدد جس میں وہ ظاہر ہوتے ہیں ڈال. 389 00:32:46,000 --> 00:32:51,180 اگر ہم دیکھو، ان میں سے اکثر اس کے علاوہ 0s ہیں: H، جو دو مرتبہ ظاہر ہوتا ہے، 390 00:32:51,180 --> 00:32:54,820 اور پھر T، جو ایک بار ظاہر ہوتا ہے. 391 00:32:54,820 --> 00:33:07,860 اور پھر ہم یہاں 0s اور 1s میں اصل پیغام ہے. 392 00:33:07,860 --> 00:33:15,450 اگر ہم hth.txt میں نظر آتے ہیں، جو شاید اصل پیغام ہے جو huffed کیا گیا ہے، 393 00:33:15,450 --> 00:33:22,490 ہمیں وہاں میں کچھ ایچ ایس اور TS کو دیکھنے کے لئے کی توقع ہے. 394 00:33:22,490 --> 00:33:28,720 خاص طور پر، ہم نے صرف 1 T اور 2 HS کو دیکھنے کے لئے کی امید رکھتے ہیں. 395 00:33:32,510 --> 00:33:37,440 یہاں ہم hth.txt میں ہیں. یہ واقعی HTH ہے. 396 00:33:37,440 --> 00:33:41,270 وہاں میں شامل ہیں، اگرچہ ہم اسے دیکھ نہیں سکتے، ایک newline کردار ہے. 397 00:33:41,270 --> 00:33:53,190 Huff فائل hth.bin بھی newline کردار انکوڈنگ ہے. 398 00:33:55,680 --> 00:34:01,330 یہ ہم جانتے ہیں کہ HTH اور پھر newline ہے کیونکہ 399 00:34:01,330 --> 00:34:07,340 ہم صرف ایک واحد 1 دیکھتے ہیں کہ شاید H نمائندگی ہے 400 00:34:07,340 --> 00:34:17,120 اور پھر T شاید 01 ہے اور پھر اگلے H 1 بھی ہے 401 00:34:17,120 --> 00:34:21,139 اور اس کے بعد ہم نے ایک دو 0s کی طرف سے دلالت کرتی newline ہے. 402 00:34:22,420 --> 00:34:24,280 ڈاؤن لوڈ، اتارنا. 403 00:34:26,530 --> 00:34:31,600 >> ، اور پھر آخر میں، کیونکہ ہم نے ایک سے زیادہ سی. کے ساتھ نمٹنے کر رہے ہیں. اور ایچ فائلوں 404 00:34:31,600 --> 00:34:36,350 ہم سنکلک ایک خوبصورت پیچیدہ دلیل کو جا رہے ہیں، 405 00:34:36,350 --> 00:34:40,460 اور اسی طرح ہم یہاں ایک Makefile ہے جو آپ کے لئے ڈمپ کرتا ہے ہے. 406 00:34:40,460 --> 00:34:47,070 لیکن اصل میں، آپ کو آپ کے اپنے puff.c فائل بنانے کے بارے میں جانے کے لئے ہے. 407 00:34:47,070 --> 00:34:54,330 Makefile اصل آپ کے لئے puff.c کرنے سے نہیں. 408 00:34:54,330 --> 00:34:59,310 ہم چھوڑ رہے ہو آپ پر Makefile میں ترمیم کرنے کی. 409 00:34:59,310 --> 00:35:05,930 جب آپ سب کی طرح ایک کمانڈ میں داخل ہیں، مثال کے طور پر، یہ آپ کے لئے ان میں سے سب کر دے گا. 410 00:35:05,930 --> 00:35:10,760 گزشتہ pset سے Makefile کی مثالیں پر نظر بلا جھجھک 411 00:35:10,760 --> 00:35:17,400 کے ساتھ ساتھ اس ایک کی یہ دیکھنے کے لئے کہ آپ کس طرح اپنے پف فائل کو بنانے کے لئے کے قابل ہو سکتا ہے 412 00:35:17,400 --> 00:35:20,260 اس Makefile میں ترمیم کی طرف سے. 413 00:35:20,260 --> 00:35:22,730 یہ ہمارے تقسیم کے کوڈ کے لئے اس کے بارے میں ہے. 414 00:35:22,730 --> 00:35:28,380 >> ایک بار ہم نے اس کے ذریعے ملا ہے، تو صرف یہاں ایک اور یاد دہانی ہے 415 00:35:28,380 --> 00:35:30,980 کس طرح ہم Huffman نوڈس کے ساتھ نمٹنے جا رہے ہیں. 416 00:35:30,980 --> 00:35:35,400 ہم ان مراکز بلا اب نہیں رہے ہیں، ہم ان درختوں پر بلا رکھا جائے جا رہے ہیں 417 00:35:35,400 --> 00:35:39,260 جہاں ہم ایک حروف کے ساتھ ان کی علامت پر نمائندگی کرنے جا رہے ہیں، 418 00:35:39,260 --> 00:35:43,340 ان کی فریکوئنسی، واقعات کی ایک عددی کے ساتھ تعداد. 419 00:35:43,340 --> 00:35:47,370 ہم اس کا استعمال کریں کیونکہ یہ ایک فلوٹ سے زیادہ عین مطابق ہے رہے ہیں. 420 00:35:47,370 --> 00:35:52,980 اور پھر ہم بائیں کے ساتھ ساتھ بچے کو صحیح بچے کی ایک اور پوائنٹر ہے. 421 00:35:52,980 --> 00:35:59,630 ایک جنگل، جیسا کہ ہم نے دیکھا، صرف درختوں کی ایک لنک کی فہرست ہے. 422 00:35:59,630 --> 00:36:04,670 آخر میں، جب ہم نے تعمیر ہمارے Huff فائل رہے ہیں 423 00:36:04,670 --> 00:36:07,580 ہم جنگل صرف 1 درخت شامل کرنا چاہتے ہیں - 424 00:36:07,580 --> 00:36:12,420 1 درخت، ایک سے زیادہ بچوں کے ساتھ 1 جڑ. 425 00:36:12,420 --> 00:36:20,840 پہلے جب ہم صرف ہمارے Huffman درخت بنا رہے تھے، 426 00:36:20,840 --> 00:36:25,360 ہم ہمارے سکرین پر مراکز کی سب رکھ کی طرف سے شروع کیا 427 00:36:25,360 --> 00:36:27,790 ہم ان مراکز کے لئے جا رہے ہیں اور کہہ رہے ہیں، 428 00:36:27,790 --> 00:36:32,920 بالآخر وہ پتے، کر رہے ہیں اور یہ ان کی علامت ہے، یہ ان کا تعدد ہے. 429 00:36:32,920 --> 00:36:42,070 ہمارے جنگل میں اگر ہم صرف 3 حروف ہیں، جو 3 درختوں کی ایک جنگل ہے. 430 00:36:42,070 --> 00:36:45,150 اور پھر ہم جاتے ہیں، جب ہم پہلی والدین نے کہا، 431 00:36:45,150 --> 00:36:48,080 ہم نے 2 درختوں کے جنگل بنا دیا ہے. 432 00:36:48,080 --> 00:36:54,930 ہم جنگل سے ان بچوں کی 2 تو ہٹا دیا اور والدین نوڈ کے ساتھ اس کی جگہ 433 00:36:54,930 --> 00:36:58,820 ہے کہ بچوں کو ان 2 نوڈس تھا. 434 00:36:58,820 --> 00:37:05,600 اور پھر آخر میں، جیسا کہ گریڈ کے ساتھ ہماری مثال بنانے کے ساتھ ہمارے آخری مرحلہ ہے، اور کاوچ سرفنگ کے 435 00:37:05,600 --> 00:37:08,030 آخری والدین کرنا ہوگا، 436 00:37:08,030 --> 00:37:13,190 اور تو ہے کہ 1 ہماری جنگل میں درختوں کی کل شمار لے آئے گی. 437 00:37:13,190 --> 00:37:18,140 سب کیا یہ دیکھنے کی ضرورت ہے کہ آپ کس طرح ایک سے زیادہ درخت کے ساتھ آپ کے جنگل میں شروع 438 00:37:18,140 --> 00:37:22,520 اور 1 کے ساتھ ختم ہو؟ ٹھیک ہے. ڈاؤن لوڈ، اتارنا. 439 00:37:25,530 --> 00:37:28,110 >> ہم پف کے لئے کیا کرنے کی ضرورت ہے؟ 440 00:37:28,110 --> 00:37:37,110 ہم کیا کرنے کی ضرورت ہے اس بات کا یقین کرنے کے لئے کہ، ہمیشہ کی طرح، وہ ہمیں ان پٹ کے دائیں قسم دے ہے 441 00:37:37,110 --> 00:37:39,090 تاکہ ہم اصل پروگرام چلا سکتے ہیں. 442 00:37:39,090 --> 00:37:43,130 اس صورت میں وہ ہمیں ان کی پہلی دلیل کمانڈ لائن کے بعد دینے جا رہے ہیں 443 00:37:43,130 --> 00:37:53,440 2: فائل ہے کہ ہم اور پھیلا دی گئی فائل کی پیداوار پھیلائیں کرنا چاہتے ہیں. 444 00:37:53,440 --> 00:38:00,410 لیکن جب ہم اس بات کا یقین کر لیں کہ وہ ہمیں اقدار کے دائیں رقم میں گزرے، 445 00:38:00,410 --> 00:38:05,820 ہمیں اس بات کا یقین کرنے کے لئے کہ ان پٹ Huff فائل یا نہیں ہے کرنا چاہتے ہیں. 446 00:38:05,820 --> 00:38:10,420 اور پھر ایک بار ہم اس بات کی ضمانت دیتا ہوں کہ یہ ایک Huff فائل ہے، تو ہم اپنے درخت کی تعمیر کرنا چاہتے ہیں، 447 00:38:10,420 --> 00:38:20,940 ایسی ہے کہ یہ درخت کہ وہ شخص جس نے پیغام بھیجا تعمیر سے میل کھاتا ہے درخت کی تعمیر کے. 448 00:38:20,940 --> 00:38:25,840 پھر اس کے بعد ہم درخت کی تعمیر، تو پھر ہم ساتھ 0s اور 1s کہ وہ میں منظور نمٹنے کر سکتے ہیں 449 00:38:25,840 --> 00:38:29,590 ہمارے درخت کے ساتھ ان کی پیروی کرتے ہیں کیونکہ یہ ایک جیسی ہے، 450 00:38:29,590 --> 00:38:33,510 اور پھر اس پیغام لکھنے بٹس، حروف میں واپس تشریح. 451 00:38:33,510 --> 00:38:35,880 اور پھر آخر میں ہے کیونکہ ہم اشارہ کے ساتھ یہاں کام کر رہے ہو، 452 00:38:35,880 --> 00:38:38,110 ہم اس بات کا یقین کر لیں کہ ہم کسی بھی میموری لیک نہیں ہے بنانا چاہتے ہیں 453 00:38:38,110 --> 00:38:41,330 اور یہ کہ ہم آزاد سب کچھ. 454 00:38:42,820 --> 00:38:46,430 >> مناسب استعمال کو یقینی بنانے کے اب تک ہمارے لئے پرانے ٹوپی ہے. 455 00:38:46,430 --> 00:38:51,980 ، ہم نے ایک ان پٹ میں لے، جس کی فائل کے نام فلانا جا رہا ہے 456 00:38:51,980 --> 00:38:56,010 اور پھر ہم ایک پیداوار کی وضاحت کرتے ہیں، 457 00:38:56,010 --> 00:39:01,580 puffed پیداوار، جس میں ٹیکسٹ فائل ہو جائے گا کے لئے فائل کے نام پر. 458 00:39:03,680 --> 00:39:08,820 وہ استعمال ہے. اور اب ہمیں اس بات کا یقین کرنے کے لئے کہ ان پٹ huffed ہے یا نہیں کرنا چاہتے ہیں. 459 00:39:08,820 --> 00:39:16,420 واپس سوچ رہا تھا، وہاں تقسیم کوڈ ہے جو ہمیں مدد کر سکتا ہے میں کچھ تھا 460 00:39:16,420 --> 00:39:21,570 سمجھنے کہ ایک فائل huffed ہے یا نہیں ہے؟ 461 00:39:21,570 --> 00:39:26,910 کے بارے میں huffile.c میں Huffeader معلومات تھی. 462 00:39:26,910 --> 00:39:33,430 ہم جانتے ہیں کہ ہر Huff فائل ایک جادو تعداد کے ساتھ اس کے ساتھ منسلک Huffeader ہے 463 00:39:33,430 --> 00:39:37,240 کے طور پر ساتھ ساتھ ہر علامت کے لئے تعدد کے ایک صف 464 00:39:37,240 --> 00:39:39,570 کے ساتھ ساتھ ایک پڑتالی مجموعہ کے طور پر. 465 00:39:39,570 --> 00:39:43,180 ہم یہ جانتے ہیں، لیکن ہم بھی dump.c میں جھانکنا لیا، 466 00:39:43,180 --> 00:39:49,120 جس میں یہ Huff فائل میں پڑھ رہا تھا. 467 00:39:49,120 --> 00:39:53,990 اور تاکہ کرنا، یہ چیک کرنے کے لیے تھا کہ کیا یہ واقعی huffed یا نہیں کیا گیا تھا. 468 00:39:53,990 --> 00:40:03,380 تو شاید ہم اپنے puff.c. کے لئے ایک ڈھانچہ کے طور پر dump.c استعمال کر سکتے ہیں 469 00:40:03,380 --> 00:40:12,680 4 pset پر واپس جائیں جب ہم فائل copy.c ہے کہ RGB triples میں کاپی 470 00:40:12,680 --> 00:40:14,860 اور ہم نے Whodunit اور کا سائز تبدیل کرنے کے لئے کہ تشریح، 471 00:40:14,860 --> 00:40:20,390 اسی طرح، جو آپ کر سکتے ہیں صرف CP dump.c puff.c کی طرح کمانڈ چلائیں 472 00:40:20,390 --> 00:40:23,600 اور وہاں کوڈ میں سے کچھ کا استعمال کریں. 473 00:40:23,600 --> 00:40:28,210 تاہم، یہ ایک عمل کے طور پر براہ راست نہیں ہے 474 00:40:28,210 --> 00:40:33,010 ، puff.c میں آپ کی dump.c ترجمہ کے لئے 475 00:40:33,010 --> 00:40:36,160 لیکن کم از کم یہ تمہیں کہیں ہے جس میں شروع 476 00:40:36,160 --> 00:40:40,540 کس طرح اس بات کا یقین کرنے کے لئے کہ ان پٹ اصل huffed ہے یا نہیں 477 00:40:40,540 --> 00:40:43,240 کے ساتھ ساتھ کچھ دوسری چیزوں کے طور پر. 478 00:40:45,930 --> 00:40:50,250 ہم مناسب استعمال کو یقینی بنایا ہے اور اس بات کا یقین ہے کہ ان پٹ huffed. 479 00:40:50,250 --> 00:40:53,570 ہر وقت ہے کہ ہم نے کیا کیا ہے کہ ہم اپنے مناسب غلطی کی چیکنگ نے کیا کیا ہے، 480 00:40:53,570 --> 00:41:01,520 تو واپس آ تقریب چھوڑنے اگر کوئی ناکامی اس وقت ہوتی ہے، اگر کوئی مسئلہ ہے. 481 00:41:01,520 --> 00:41:07,170 >> اب جو ہم کرنا چاہتے ہیں اصل درخت کی تعمیر ہے. 482 00:41:08,840 --> 00:41:12,640 اگر ہم جنگل میں دیکھو، 2 اہم کام ہیں 483 00:41:12,640 --> 00:41:15,800 کہ ہم کے ساتھ بہت واقف بننے کے لئے جا رہے ہیں. 484 00:41:15,800 --> 00:41:23,870 بولین تقریب پلانٹ ہے کہ پودوں ہمارے جنگل کے اندر ایک غیر 0 تعدد درخت 485 00:41:23,870 --> 00:41:29,250 اور تو وہاں آپ کو ایک پوائنٹر کے میں جنگل اور ایک درخت پر ایک پوائنٹر گزرتے ہیں. 486 00:41:32,530 --> 00:41:40,340 فوری سوال: آپ کتنے جنگلات جب آپ کو ایک Huffman درخت بنا رہے ہیں؟ 487 00:41:44,210 --> 00:41:46,650 ہمارا جنگل ہمارے کینوس کی طرح ہے، ہے نا؟ 488 00:41:46,650 --> 00:41:50,800 تو ہم صرف 1 جنگل جا رہے ہیں، لیکن ہم ایک سے زیادہ درخت لگائے جائیں جا رہے ہیں. 489 00:41:50,800 --> 00:41:57,590 تو قبل اس کے کہ آپ پودوں سے کہتے ہیں، تو آپ کو شاید اپنے جنگل کو بنانے کے لئے چاہتے ہیں کے لئے جا رہے ہیں. 490 00:41:57,590 --> 00:42:04,430 اس کے لئے ایک حکم ہے اگر آپ کو آپ کو ایک جنگل کس طرح کر سکتے ہیں forest.h میں دیکھتا ہے. 491 00:42:04,430 --> 00:42:09,270 آپ کو ایک درخت لگانے کر سکتے ہیں. ہم جانتے ہیں کہ کس طرح ایسا. 492 00:42:09,270 --> 00:42:11,590 اور پھر تم نے جنگل سے ایک درخت بھی منتخب کر سکتے ہیں، 493 00:42:11,590 --> 00:42:17,540 سب سے کم وزن کے ساتھ ایک درخت کو ختم کرنے اور آپ اس دے پوائنٹر. 494 00:42:17,540 --> 00:42:23,090 جب ہم نے مثالیں کر خود کو کیا گیا تھا واپس سوچ رہے ہیں، 495 00:42:23,090 --> 00:42:27,980 جب ہم اسے ڈرائنگ باہر نکال رہے تھے، ہم تو صرف لنک شامل ہیں. 496 00:42:27,980 --> 00:42:31,680 لیکن یہاں کے بجائے صرف لنک انہوں نے مزید کہا، 497 00:42:31,680 --> 00:42:40,630 اس سے زیادہ لگتا ہے کہ کے طور پر آپ کو ان مراکز کی 2 اتارنے پھر رہے ہیں اور ایک دوسرے کی طرف سے اس کی جگہ. 498 00:42:40,630 --> 00:42:44,200 منتخب کرنا اور لگانے کے معاملے میں اس کا اظہار، 499 00:42:44,200 --> 00:42:48,840 آپ کو 2 درختوں اٹھا تو کر رہے ہیں اور ایک درخت لگانا 500 00:42:48,840 --> 00:42:54,060 ان 2 درخت ہے کہ آپ کے بچے کے طور پر اٹھایا ہے. 501 00:42:57,950 --> 00:43:05,280 Huffman درخت کی تعمیر کرنے کے لئے، آپ کو ترتیب میں علامات اور تعدد میں پڑھ سکتے ہیں 502 00:43:05,280 --> 00:43:10,790 کیونکہ Huffeader آپ کو دیتا ہے، 503 00:43:10,790 --> 00:43:14,250 آپ کے تعدد پر ایک سرنی دیتا ہے. 504 00:43:14,250 --> 00:43:19,660 تو تم آگے بڑھو اور اس میں 0 سے کچھ بھی نظر انداز کر سکتے ہیں 505 00:43:19,660 --> 00:43:23,760 کیونکہ ہم اس کے اختتام پر 256 پتے نہیں کرنا چاہتا. 506 00:43:23,760 --> 00:43:27,960 ہم صرف پتے جو کہ حروف ہیں کی تعداد میں چاہتا ہوں 507 00:43:27,960 --> 00:43:31,600 جو اصل میں فائل میں استعمال کیا جاتا ہے. 508 00:43:31,600 --> 00:43:37,590 آپ ان علامات میں پڑھنے، اور ان علامات جو تعدد غیر 0 میں سے ہر ایک کر سکتے ہیں، 509 00:43:37,590 --> 00:43:40,440 ان پیڑوں کے لئے جا رہے ہیں. 510 00:43:40,440 --> 00:43:45,990 آپ کیا کر سکتے ہیں ہر وقت آپ کو ایک غیر 0 تعدد علامت میں پڑھا ہے، 511 00:43:45,990 --> 00:43:50,660 آپ کو جنگل میں درخت لگانے کر سکتے ہیں. 512 00:43:50,660 --> 00:43:56,620 ایک بار جب آپ کو جنگل میں درخت پلانٹ، آپ بہن بھائیوں کے طور پر ان پیڑوں میں شامل کر سکتے ہیں، 513 00:43:56,620 --> 00:44:01,130 تو پودے لگانے اور جہاں تمہیں لینے اٹھا 2 اور پھر 1 پلانٹ واپس جا، 514 00:44:01,130 --> 00:44:05,820 جہاں کہ 1 ہے کہ آپ پودوں سے 2 بچوں کہ آپ اٹھایا والدین ہے. 515 00:44:05,820 --> 00:44:11,160 تو پھر آپ آخر اسکے نتیجے کے طور پر آپ کے جنگل میں ایک درخت بننے جا رہا ہے. 516 00:44:16,180 --> 00:44:18,170 یہ ہے کہ آپ کس طرح آپ کے درخت کی تعمیر کے. 517 00:44:18,170 --> 00:44:21,850 >> کئی چیزیں ہیں وہ غلط کر سکتے ہیں 518 00:44:21,850 --> 00:44:26,580 کیونکہ ہم نئے درخت بنانے اور اس طرح اشارہ اور چیزوں کے ساتھ نمٹنے کے ساتھ کام کر رہے ہو. 519 00:44:26,580 --> 00:44:30,450 جب ہم نے اشارہ سے نمٹنے کر رہے تھے اس سے پہلے، 520 00:44:30,450 --> 00:44:36,580 جب بھی ہم malloc'd ہم اس بات کا یقین کر لیں کہ یہ ہمیں واپس نہیں کیا ایک نل پوائنٹر قدر کرنا چاہتا تھا. 521 00:44:36,580 --> 00:44:42,770 تو اس عمل کے اندر اندر کئی اقدامات میں کئی مقدمات کے لئے جا رہے ہیں 522 00:44:42,770 --> 00:44:45,920 اپنے پروگرام کو ناکام کہاں جا سکتا ہے. 523 00:44:45,920 --> 00:44:51,310 آپ کیا کرنا چاہتے ہیں آپ کو اس بات کا یقین کر لیں کہ آپ ان غلطیوں کو سنبھالنا کرنا چاہتے ہیں، 524 00:44:51,310 --> 00:44:54,580 اور اس رپورٹ میں ان gracefully سنبھال کا کہنا ہے کہ، 525 00:44:54,580 --> 00:45:00,280 تو صارف کو ایک پیغام کو پرنٹ انہیں بتا کیوں پروگرام چھوڑ پسند 526 00:45:00,280 --> 00:45:03,050 اور اس کے بعد فوری طور پر اسے چھوڑ دیا. 527 00:45:03,050 --> 00:45:09,490 اس خرابی کو سنبھالنے کرنے کے لئے یاد رکھیں، کہ آپ اسے چیک کرنے کے لیے کرنا چاہتے ہیں 528 00:45:09,490 --> 00:45:12,160 ہر وقت ہے کہ ناکامی ہو سکتی ہے. 529 00:45:12,160 --> 00:45:14,660 ہر ایک وقت ہے کہ آپ کو ایک نیا پوائنٹر کر رہے ہیں 530 00:45:14,660 --> 00:45:17,040 آپ کو اس بات کا یقین کر لیں کہ کہ کامیاب ہے بنانے کے لئے چاہتے ہیں. 531 00:45:17,040 --> 00:45:20,320 ، ہمیں کیا کرنا استعمال کیا جاتا ہے ایک نئی پوائنٹر اور اس malloc سے پہلے 532 00:45:20,320 --> 00:45:22,380 اور پھر ہم چیک کرنے کے لیے چاہے وہ پوائنٹر نل ہے. 533 00:45:22,380 --> 00:45:25,670 تو کچھ مثالوں جہاں آپ ایسا صرف کر سکتے ہیں کے لئے جا رہے ہیں، 534 00:45:25,670 --> 00:45:28,610 لیکن کبھی کبھی آپ کو اصل میں ایک تقریب کو بلا رہے ہیں 535 00:45:28,610 --> 00:45:33,100 اور اس تقریب کے اندر اندر، کہ ایک کہ mallocing کر رہی ہے. 536 00:45:33,100 --> 00:45:39,110 اس صورت میں، اگر ہم نے کوڈ کے اندر اندر کے افعال میں سے کچھ واپس دیکھو، 537 00:45:39,110 --> 00:45:42,260 ان میں سے کچھ بولین افعال ہیں. 538 00:45:42,260 --> 00:45:48,480 خلاصہ صورت میں اگر ہم نے ایک بولین کہا جاتا FOO ایک تقریب ہے، 539 00:45:48,480 --> 00:45:54,580 بنیادی طور پر، ہم نے جو بھی FOO کرتا کرنے کے علاوہ کہ فرض کر سکتے ہیں، 540 00:45:54,580 --> 00:45:57,210 کیونکہ یہ ایک بولین تقریب ہے، یہ سچ ہے یا جھوٹ واپس - 541 00:45:57,210 --> 00:46:01,300 سچ ہے اگر یہ کامیاب رہا، جھوٹے نہیں ہو. 542 00:46:01,300 --> 00:46:06,270 تو ہم چیک کرنے کے لیے کرنا چاہتے ہیں کہ FOO کی واپسی کی قیمت صحیح یا غلط ہے. 543 00:46:06,270 --> 00:46:10,400 اگر یہ جھوٹ ہے، اس کا مطلب یہ ہے کہ ہم پیغام کی کسی قسم کو پرنٹ کرنے کے لئے کرنا چاہتے ہیں جا رہے ہیں 544 00:46:10,400 --> 00:46:14,390 اور پھر پروگرام چھوڑ دیا. 545 00:46:14,390 --> 00:46:18,530 ہم کیا کرنا چاہتے ہے FOO کی واپسی کی قیمت چیک کرنے کے لیے ہیں. 546 00:46:18,530 --> 00:46:23,310 اگر FOO جھوٹے واپس، تو ہم جانتے ہیں کہ ہم نے غلطی کی کسی قسم کا سامنا کرنا پڑا 547 00:46:23,310 --> 00:46:25,110 اور ہم اپنے پروگرام کو چھوڑ کرنے کی ضرورت ہے. 548 00:46:25,110 --> 00:46:35,600 ایک ایسا راستہ ہے جس سے ایک شرط ہے جہاں اصل تقریب میں ہی آپ کی شرط ہے. 549 00:46:35,600 --> 00:46:39,320 کہو FOO X میں لیتا ہے. 550 00:46:39,320 --> 00:46:43,390 ہم اگر ایک شرط کے طور پر کر سکتے ہیں ((X) FOO). 551 00:46:43,390 --> 00:46:50,900 بنیادی طور پر، اس کا مطلب ہے کہ اگر یہ FOO قتل کے آخر میں صحیح واپس، 552 00:46:50,900 --> 00:46:57,390 تو پھر ہم ایسا کر سکتے ہیں کیونکہ تقریب FOO اندازہ ہے 553 00:46:57,390 --> 00:47:00,500 کے لئے پوری کی حالت کا اندازہ کرنے کے لئے. 554 00:47:00,500 --> 00:47:06,500 تو اس طرح آپ ہی کچھ کر سکتے ہیں اگر فنکشن درست واپس اور کامیاب ہے. 555 00:47:06,500 --> 00:47:11,800 لیکن جب تم نے غلطی پڑتال کر رہے ہیں، تو آپ صرف اگر آپ کی تقریب جھوٹے واپس چھوڑ کرنا چاہتے ہیں. 556 00:47:11,800 --> 00:47:16,090 آپ کیا کر سکتے ہیں صرف شامل ہے ایک == یا باطل اس کے سامنے ایک دھماکے شامل کریں 557 00:47:16,090 --> 00:47:21,010 اور پھر اگر تم (FOO!) ہے. 558 00:47:21,010 --> 00:47:29,540 کہ اس حالت کے جسم کے اندر اندر آپ کو غلطی سے نمٹنے کی سب ہوگا، 559 00:47:29,540 --> 00:47:36,940 تو پسند ہے، تو "اس کے درخت کو پیدا نہیں کیا جا سکا" اور 1 یا اس طرح کچھ واپس. 560 00:47:36,940 --> 00:47:43,340 ہے کہ وہ کیا کرتا ہے، تاہم، کہ اگرچہ FOO جھوٹے واپس ہے - 561 00:47:43,340 --> 00:47:46,980 کہو FOO صحیح واپس. 562 00:47:46,980 --> 00:47:51,060 تو پھر تم FOO دوبارہ کال نہیں ہے. یہ ایک عام غلط فہمی ہے. 563 00:47:51,060 --> 00:47:54,730 کیونکہ یہ آپ کی حالت میں تھا، اس کے پاس پہلے سے ہی تعین کیا ہے، 564 00:47:54,730 --> 00:47:59,430 تو آپ کے پاس پہلے سے ہی نتیجہ ہے اگر آپ کو درخت یا ایسا کچھ کرنے کے استعمال کر رہے ہیں 565 00:47:59,430 --> 00:48:01,840 پلانٹ یا پسند یا کچھ اور. 566 00:48:01,840 --> 00:48:07,460 یہ پہلے سے ہی اس قدر ہے. یہ پہلے ہی پھانسی دے دی ہے. 567 00:48:07,460 --> 00:48:10,730 لہذا یہ شرط کے طور پر بولین کام کرتا ہے استعمال کرنے کے لئے مفید ہے 568 00:48:10,730 --> 00:48:13,890 کیونکہ یا اصل میں آپ کو لوپ کی لاش نہیں پھانسی 569 00:48:13,890 --> 00:48:18,030 یہ تقریب ویسے بھی executes. 570 00:48:22,070 --> 00:48:27,330 >> ہماری آخری مرحلے پر دوسری فائل پیغام لکھ رہی ہے. 571 00:48:27,330 --> 00:48:33,070 ایک بار جب ہم Huffman درخت کی تعمیر، پھر فائل پیغام لکھنے بہت براہ راست ہے. 572 00:48:33,070 --> 00:48:39,260 یہ خوبصورت براہ راست اب صرف 0s اور 1s پر عمل کریں. 573 00:48:39,260 --> 00:48:45,480 اور اس طرح ہم نے کنونشن کی طرف سے جانتے ہیں کہ Huffman درخت میں 0s چھوڑ اس بات کی نشاندہی 574 00:48:45,480 --> 00:48:48,360 اور 1s صحیح اشارہ ملتا ہے. 575 00:48:48,360 --> 00:48:53,540 تو پھر اگر آپ نے بٹ کی طرف سے تھوڑا سا میں پڑھتے ہیں، ہر وقت ہے کہ آپ 0 ملتا ہے 576 00:48:53,540 --> 00:48:59,100 آپ کو بائیں برانچ کی پیروی اور اس کے بعد کریں گے ہر وقت آپ 1 میں پڑھا 577 00:48:59,100 --> 00:49:02,100 تم صحیح برانچ کی پیروی کرنے جا رہے ہیں. 578 00:49:02,100 --> 00:49:07,570 اور پھر آپ کو جاری ہو جب تک آپ کو ایک پتی مارا 579 00:49:07,570 --> 00:49:11,550 کیونکہ پتے شاخوں کے آخر میں ہونے جا رہے ہیں. 580 00:49:11,550 --> 00:49:16,870 ہم کہ ہم نے ایک پتی یا نہ مارو ہے کس طرح کہہ سکتے ہیں؟ 581 00:49:19,800 --> 00:49:21,690 ہم نے اس سے پہلے کہا. 582 00:49:21,690 --> 00:49:24,040 [طالب علم] اگر اشارہ نل ہیں. >> جی ہاں. 583 00:49:24,040 --> 00:49:32,220 ہم بتا دو اگر ہم پتی مارا ہے اگر بائیں اور دائیں دونوں درخت اشارہ نل ہیں کر سکتے ہیں. 584 00:49:32,220 --> 00:49:34,110 ٹھیک ہے. 585 00:49:34,110 --> 00:49:40,320 ہم جانتے ہیں کہ ہم ہمارے Huff فائل میں تھوڑا سا میں پڑھ کرنا چاہتے ہیں. 586 00:49:43,870 --> 00:49:51,220 جیسا کہ ہم dump.c میں پہلے دیکھا، انہوں نے کیا کیا ہے وہ Huff فائل میں بٹ کی طرف سے تھوڑا سا میں پڑھیں 587 00:49:51,220 --> 00:49:54,560 اور صرف طباعت ان بٹس تھے. 588 00:49:54,560 --> 00:49:58,430 ہم یہ ہے کہ ایسا کرنے کے لئے نہیں کر رہے ہیں. ہم کچھ ہے کہ تھوڑا سا زیادہ پیچیدہ ہے کر جا رہے ہیں. 589 00:49:58,430 --> 00:50:03,620 لیکن جو ہم کر سکتے ہیں ہے کہ ہم کوڈ کا تھوڑا سا جو کچھ میں پڑھتا لے جا سکتے ہیں. 590 00:50:03,620 --> 00:50:10,250 یہاں ہم عددی موجودہ تھوڑا ہے کہ ہم ہیں کی نمائندگی سا ہے. 591 00:50:10,250 --> 00:50:15,520 یہ فائل میں بٹس کی سب iterating کا خیال لیتا ہے جب تک کہ آپ کو فائل کے آخر مارا. 592 00:50:15,520 --> 00:50:21,270 اس بنا پر، تو پھر آپ iterator کے کچھ قسم ہے کرنا چاہتے ہیں جا رہے ہیں 593 00:50:21,270 --> 00:50:26,760 اپنے درخت کو گزرنا ہے. 594 00:50:26,760 --> 00:50:31,460 اور پھر چاہے تھوڑا 0 یا 1 ہے کی بنیاد پر، 595 00:50:31,460 --> 00:50:36,920 آپ کو یا تو بائیں iterator کہ کو منتقل یا دائیں منتقل کرنا چاہتے ہیں جا رہے ہیں 596 00:50:36,920 --> 00:50:44,080 طرح جب تک آپ کو ایک پتی مارا ہے، تو وہ نوڈ کہ تم پر تک پورے راستے 597 00:50:44,080 --> 00:50:48,260 زیادہ نوڈس نہیں کی طرف اشارہ کرتا ہے. 598 00:50:48,260 --> 00:50:54,300 ہم Huffman فائل لیکن مورس کوڈ کے ساتھ نہیں کیوں یہ کر سکتا ہوں؟ 599 00:50:54,300 --> 00:50:56,610 کیونکہ مورس کوڈ میں ابہام کے تھوڑا سا ہے. 600 00:50:56,610 --> 00:51:04,440 ہم نے طرح، اوہ انتظار ہو سکتا ہے، ہم نے راستے میں ایک خط متاثر کیا ہے، تو ہو سکتا ہے یہ ہمارا خط ہے، 601 00:51:04,440 --> 00:51:08,150 جبکہ اگر ہم اب صرف تھوڑا سا جاری، پھر ہم نے ایک اور خط ہے متاثر کرے گی. 602 00:51:08,150 --> 00:51:13,110 لیکن یہ ہونے والا ہے Huffman انکوڈنگ میں نہیں، 603 00:51:13,110 --> 00:51:17,540 ہم تو آرام کر سکتے ہیں یقین دہانی کرائی ہے کہ صرف ایک ہی طریقہ ہے کہ ہم جا رہے ہیں ایک کردار کو نشانہ بنانے 604 00:51:17,540 --> 00:51:23,480 اگر کہ نوڈ کے بائیں اور دائیں بچوں نل ہیں. 605 00:51:28,280 --> 00:51:32,350 >> آخر میں، ہم ہماری میموری کی سب آزاد کرنا چاہتے ہیں. 606 00:51:32,350 --> 00:51:37,420 ہم دونوں کے قریب Huff فائل کرنا چاہتے ہیں کہ ہم کیا گیا ہے کے ساتھ نمٹنے 607 00:51:37,420 --> 00:51:41,940 کے ساتھ ساتھ ہمارے جنگل میں درختوں کی سب کو ہٹا دیں. 608 00:51:41,940 --> 00:51:46,470 آپ کے عمل پر کی بنیاد پر، آپ کو شاید کرنا چاہتے ہیں جا رہے ہیں جنگل ہٹانے فون کرنے کی 609 00:51:46,470 --> 00:51:49,780 کی بجائے اصل میں درخت خود سے گزر رہا ہے. 610 00:51:49,780 --> 00:51:53,430 لیکن اگر آپ کے ذہن میں کوئی عارضی درخت بنایا ہے، کہ تم آزاد کرنا چاہتے ہیں کریں گے. 611 00:51:53,430 --> 00:51:59,060 آپ اپنے کوڈ کو سب سے بہتر طور پر جانتے ہیں، تو آپ کو پتہ ہے تم کہاں میموری آونٹن کر رہے ہیں. 612 00:51:59,060 --> 00:52:04,330 اور اگر ایسا ہے تو بھی malloc کے لئے F'ing کنٹرول کی طرف سے شروع کیا جس میں آپ کو جانے، 613 00:52:04,330 --> 00:52:08,330 دیکھ جب بھی آپ malloc اور اس بات کا یقین ہے کہ تم اس کے سب آزاد 614 00:52:08,330 --> 00:52:10,190 لیکن یہ تو صرف اپنا کوڈ کے ذریعے ہو رہا ہے، 615 00:52:10,190 --> 00:52:14,260 جہاں آپ میموری مختص ہو سکتا ہے سمجھنے. 616 00:52:14,260 --> 00:52:21,340 عام طور پر، آپ صرف اتنا کہنا انہوں نے کہا کہ ایک فائل کے آخر میں میں نے صرف میری جنگل جنگل کو دور کرنے جا رہا ہوں، "ہو سکتا ہے 617 00:52:21,340 --> 00:52:23,850 تو بنیادی طور پر اس میموری کو واضح، مفت، 618 00:52:23,850 --> 00:52:28,310 "اور پھر میں بھی فائل اور قریب پھر اپنے پروگرام چھوڑ جا رہا ہے جا رہا ہوں." 619 00:52:28,310 --> 00:52:33,810 لیکن یہ صرف اب وقت آ گیا ہے کہ اپنے پروگرام برابر ہے؟ 620 00:52:33,810 --> 00:52:37,880 نہیں، کیونکہ کبھی کبھی میں ایک خرابی ہے جو کچھ بھی ہوا ہے ہو سکتا ہے. 621 00:52:37,880 --> 00:52:42,080 شاید ہم ایک فائل نہیں کھول یا ہم دوسرے درخت نہ کر سکے سکتا ہے 622 00:52:42,080 --> 00:52:49,340 یا کچھ قسم کی غلطی کی میموری مختص کرنے کے عمل میں ہوا تھا اور اس لئے یہ نل واپس. 623 00:52:49,340 --> 00:52:56,710 ایک خرابی ہوا اور پھر ہم واپس آئے اور چھوڑ دیا. 624 00:52:56,710 --> 00:53:02,040 تو پھر آپ اس بات کا یقین کر لیں کہ آپ کے پروگرام ہے کہ کسی بھی ممکنہ وقت چھوڑ سکتے ہیں بنانے کے لئے چاہتے ہیں، 625 00:53:02,040 --> 00:53:06,980 آپ کو آپ کی میموری کی سب وہاں آزاد کرنا چاہتے ہیں. 626 00:53:06,980 --> 00:53:13,370 یہ اہم تقریب ہے کہ آپ اپنے کوڈ کو چھوڑ دیا کے آخر میں صرف نہیں جا رہے ہیں. 627 00:53:13,370 --> 00:53:20,780 ہر مثال کے طور پر واپس دیکھنا چاہتا ہوں کہ اپنے کوڈ کو ممکنہ طور پر وقت سے پہلے ہی واپس کر سکتے ہیں 628 00:53:20,780 --> 00:53:25,070 اور پھر مفت میموری جو کچھ بھی سمجھ میں آتا ہے. 629 00:53:25,070 --> 00:53:30,830 کہتے ہیں کہ تم نے فون کیا تھا جنگل ہے اور اس جھوٹے واپس. 630 00:53:30,830 --> 00:53:34,230 تو پھر آپ شاید اپنے جنگل کو دور کرنے کے لئے کی ضرورت نہیں کرے گا 631 00:53:34,230 --> 00:53:37,080 کیونکہ آپ کو ایک جنگل کی ضرورت نہیں ہے. 632 00:53:37,080 --> 00:53:42,130 لیکن آپ کو کوڈ میں ہر موڑ پر ہے جہاں وقت سے پہلے ہی واپس کر سکتے ہیں 633 00:53:42,130 --> 00:53:46,160 آپ کو اس بات کا یقین کر لیں کہ آپ کسی بھی ممکنہ میموری آزاد کرنا چاہتے ہیں. 634 00:53:46,160 --> 00:53:50,020 >> ، تو جب ہم میموری آزاد سے نمٹنے کر رہے ہیں اور ممکنہ لیک ہونے 635 00:53:50,020 --> 00:53:55,440 ہم نہ صرف ہمارے فیصلے اور ہماری منطق استعمال کرنا چاہتے ہیں 636 00:53:55,440 --> 00:54:01,850 پر بھی استعمال Valgrind کا تعین ہے کہ ہم ہمارے میموری کی سب آزاد صحیح طور پر نہیں ہے. 637 00:54:01,850 --> 00:54:09,460 آپ پف پر Valgrind یا تو اور پھر چلانے تم بھی اسے منظور ہے کر سکتے ہیں 638 00:54:09,460 --> 00:54:14,020 دلائل کمانڈ لائن کی صحیح تعداد Valgrind. 639 00:54:14,020 --> 00:54:18,100 تم اس چلاتے ہیں، لیکن پیداوار تھوڑا خفیہ ہے کر سکتے ہیں. 640 00:54:18,100 --> 00:54:21,630 ہم نے ہجے کنندہ کے ساتھ اس کے لئے استعمال کیا جاتا سا ہو گیا ہے، لیکن ہم اب بھی تھوڑا سا زیادہ مدد کی ضرورت ہے، 641 00:54:21,630 --> 00:54:26,450 تو یہ لیک چیک کرنے کے لیے مکمل = جیسے چند پرچم کے ساتھ چل رہا ہے، 642 00:54:26,450 --> 00:54:32,040 جو ہمیں شاید Valgrind پر کچھ زیادہ مددگار پیداوار دے گا. 643 00:54:32,040 --> 00:54:39,040 >> اس کے بعد ایک اور مفید ٹپ جب آپ ٹھیک رہے ہیں فرق حکم ہے. 644 00:54:39,040 --> 00:54:48,520 آپ Huff کے عملے پر عملدرآمد تک رسائی حاصل کرتے ہیں، کہ، ایک ٹیکسٹ فائل پر چلا سکتے ہیں 645 00:54:48,520 --> 00:54:55,400 اور پھر یہ ایک بائنری فائل، Huff کے ایک بائنری فائل پیداوار، مخصوص. 646 00:54:55,400 --> 00:54:59,440 پھر اگر آپ اس بائنری فائل خود اپنے پف چلاتے ہیں، 647 00:54:59,440 --> 00:55:03,950 پھر مثالی طور پر، آپ کے outputted ٹیکسٹ فائل جیسی بننے جا رہا ہے 648 00:55:03,950 --> 00:55:08,200 اصل ایک ہے کہ تمہیں اندر منظور 649 00:55:08,200 --> 00:55:15,150 میں یہاں مثال کے طور پر hth.txt استعمال کر رہا ہوں، اور یہ کہ اپنی رپورٹ میں کے بارے میں بات کی ہے. 650 00:55:15,150 --> 00:55:21,040 یہ لفظی صرف HTH اور پھر newline ہے. 651 00:55:21,040 --> 00:55:30,970 لیکن یقینی طور پر مفت لگے گا اور آپ کو یقینی طور پر طویل مثال کے طور پر استعمال کرنے کے لئے حوصلہ افزائی کی جاتی ہے 652 00:55:30,970 --> 00:55:32,620 آپ کے ٹیکسٹ فائل کے لئے. 653 00:55:32,620 --> 00:55:38,110 >> آپ شاید سکیڑنا میں ایک شاٹ بھی اور اس کے بعد لے جا سکتے ہیں پھیلانا 654 00:55:38,110 --> 00:55:41,600 جنگ اور امن کی طرح فائلوں ہے کہ آپ کو ہجے کنندہ میں استعمال کیا کچھ 655 00:55:41,600 --> 00:55:46,710 یا جین Austen یا اس طرح کچھ - یا آسٹن، ٹیکساس پاورس - جو کول کی طرح ہو جائے گا 656 00:55:46,710 --> 00:55:51,880 طرح کی بڑی فائلوں کے ساتھ نمٹنے کے کی وجہ سے ہم اس پر نہیں آ گے 657 00:55:51,880 --> 00:55:55,590 اگر ہم اگلے آلہ، LS L-استعمال کیا. 658 00:55:55,590 --> 00:56:01,150 ہم LS، جو کہ بنیادی طور پر ہماری موجودہ ڈائریکٹری میں تمام مواد کی فہرست کرنے کے لئے استعمال کر رہے ہیں. 659 00:56:01,150 --> 00:56:07,860 پرچم L-گزرنے میں ان فائلوں کی سائز دکھاتا ہے. 660 00:56:07,860 --> 00:56:12,690 اگر آپ pset رپورٹ کے ذریعے جانا، یہ اصل میں آپ کو بائنری فائل بنانے کے ذریعے چلتا ہے، 661 00:56:12,690 --> 00:56:16,590 یہ huffing، اور آپ کے پاس ہے کہ بہت چھوٹے فائلوں کے لئے دیکھ 662 00:56:16,590 --> 00:56:23,910 اس کو سکیڑنا اور اس معلومات کے سب ترجمہ جگہ قیمت 663 00:56:23,910 --> 00:56:26,980 اس طرح تمام تعدد اور چیزوں کی اصل فائدہ outweighs 664 00:56:26,980 --> 00:56:30,000 پہلی جگہ میں فائل سکیڑنا. 665 00:56:30,000 --> 00:56:37,450 لیکن اگر تم اسے کچھ طویل متن فائلوں پر چلنے، اس وقت تم دیکھتے ہیں کہ آپ کو کچھ فائدہ حاصل کرنے کے لئے شروع کر سکتے ہیں 666 00:56:37,450 --> 00:56:40,930 ان فائلوں کو سکیڑنا. 667 00:56:40,930 --> 00:56:46,210 >> اور پھر آخر میں، ہم نے اپنے پرانے دوست GDB، جو ضرور ہاتھ میں بھی آنے والا ہے. 668 00:56:48,360 --> 00:56:55,320 >> کیا ہم درخت بنانے کے Huff درخت یا عمل پر کوئی سوال شاید 669 00:56:55,320 --> 00:56:58,590 پف Huff'n پر کسی دوسرے سوال؟ 670 00:57:00,680 --> 00:57:02,570 ٹھیک ہے. میں تھوڑی دیر کے لئے یہاں رہیں گے. 671 00:57:02,570 --> 00:57:06,570 >> شکریہ، سب. یہ 6 Walkthrough تھا. اور اچھی قسمت ہے. 672 00:57:08,660 --> 00:57:10,000 >> [CS50.TV]