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 Chan - হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:04,810 --> 00:00:07,240 [এটি CS50. - CS50.TV] 4 00:00:07,240 --> 00:00:12,180 >> Huff'n বহান: হ্যালো, প্রত্যেককে, Walkthrough 6 যাও এবং স্বাগত জানাই. 5 00:00:12,180 --> 00:00:17,440 Huff'n বহান আমরা কি করছেন একটি Huffman ফাইল কম্প্রেস সাথে ডিল করা যাচ্ছে না 6 00:00:17,440 --> 00:00:20,740 এবং তারপর, তাই এটি puffing ব্যাক আপ, এটি decompressing, 7 00:00:20,740 --> 00:00:25,810 যাতে আমরা 0 সেঃ এবং 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 যে pset 4 এবং 5 pset এবং ধরণের আপনি 1 চমত্কার ঝরঝরে ধারণার মধ্যে তাদের মিশ্রন ব্যবহৃত 11 00:00:41,730 --> 00:00:43,830 যখন আপনি এ সম্বন্ধে চিন্তা আসে. 12 00:00:43,830 --> 00:00:50,110 >> এছাড়াও তর্কসাপেক্ষ,, pset 4 এবং 5 ছিল সবচেয়ে চ্যালেঞ্জিং 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 মধ্যে toughest কুঁজ উপর পাবার জন্য নিজের অভিনন্দন. 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 এবং তাই যারা. গ ফাইল হতে পারে, কিন্তু পরে তাদের প্রবন্ধসহ. জ ফাইল করা 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 এবং তারপর ডানদিকে অবস্থিত নোড 1 টি শাখা. 59 00:04:08,140 --> 00:04:16,040 সাঙ্কেতিক লিখন - পদ্ধতি হিসাবে আমরা দেখেছি, এক gotcha ছিল যে আপনি যদি শুধুমাত্র একটি হুইসেল এবং হুইসেল ছিল 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 Bs, এবং 2 Cs 4 আছে. 73 00:05:14,010 --> 00:05:17,270 আমার প্রথম পদক্ষেপ গণনা করা হবে. 74 00:05:17,270 --> 00:05:20,760 কত বার একটি মনে হয় না? এটি স্ট্রিং মধ্যে 4 বার প্রদর্শিত হবে. 75 00:05:20,760 --> 00:05:25,060 বি 6 বার প্রদর্শিত হবে, এবং সি 2 বার প্রদর্শিত হবে. 76 00:05:25,060 --> 00:05:28,970 স্বাভাবিকভাবেই, আমি আমি বি করছি ব্যবহার করে প্রায়ই বলতে যাচ্ছি, 77 00:05:28,970 --> 00:05:35,970 আমি বিট fewest নম্বর, 0 সেঃ এবং 1s এর fewest নম্বর বি প্রতিনিধিত্ব করতে চান. 78 00:05:35,970 --> 00:05:42,600 এবং তারপর এছাড়াও আমি সি 0 সেঃ এবং 1s অধিকাংশ পরিমান হিসাবে ভাল প্রয়োজন আশা করছি না. 79 00:05:42,600 --> 00:05:48,550 প্রথমে আমি এখানে কি আমি ফ্রিকোয়েন্সি পদ ক্রম ঊর্ধ্বগামী হয় সেগুলি স্থাপন করা. 80 00:05:48,550 --> 00:05:52,710 আমরা দেখতে যে সি এবং একটি, যারা আমাদের 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 অনুসরণ করবে 86 00:06:14,970 --> 00:06:17,450 এবং তারপর 1 এ পেতে 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 যেখানে বি পেতে, ঠিক যে বিট হতে হবে 1 93 00:06:40,020 --> 00:06:45,430 এবং তারপর একটি পেতে থাকে, তবে আমরা 01 এবং সি হচ্ছে 00 দিন. 94 00:06:45,430 --> 00:06:51,300 সুতরাং এখানে আমরা দেখতে যে আমরা মূলত হয় 1 বা 2 বিট সঙ্গে এইসব টুকিটাকি কাজ করছেন প্রতিনিধিত্বমূলক 95 00:06:51,300 --> 00:06:55,160 যেখানে বি, পূর্বাভাস হিসাবে, অন্তত হয়েছে. 96 00:06:55,160 --> 00:07:01,730 এবং তারপর আমরা সি সবচেয়ে প্রত্যাশিত আছে, কিন্তু তিনি যেহেতু এটা যেমন একটি ছোট 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 প্রদর্শিত হবে একবার এবং তারপর ই প্রদর্শিত হবে একবার এবং তারপর আমরা ঠ প্রদর্শনে দুইবার আছে 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 [ছাত্রদের] ঠ. >> ঠ. হাঁ. ঠ সঠিক. 105 00:07:47,450 --> 00:07:50,730 আমরা আশা ঠ বিট কমপক্ষে নম্বর দ্বারা প্রতিনিধিত্ব করা 106 00:07:50,730 --> 00:07:55,890 কারণ ঠ স্ট্রিং হয় সর্বাধিক ব্যবহৃত "হ্যালো." 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 সবসময় ডান বাম এক শাখা এবং 0 সেঃ হয়. 123 00:09:37,480 --> 00:09:45,880 তারপর আমরা ঠ 2 দ্বারা মাত্র 1 বিট এবং তারপর ণ দ্বারা প্রতিনিধিত্ব আছে 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 দ্বারা শুধুমাত্র 0 সেঃ এবং 1s. 127 00:10:02,760 --> 00:10:07,910 তবে, মনে রাখবেন, যে কয়েকটি ক্ষেত্রে আমরা আমাদের ফ্রিকোয়েন্সি সঙ্গে বন্ধন ছিল. 128 00:10:07,910 --> 00:10:11,900 আমরা হয় H ও ণ হয়তো প্রথম যোগদান করে থাকতে পারে. 129 00:10:11,900 --> 00:10:15,730 অথবা তারপর পরে যখন আমরা ঠ 2 দ্বারা প্রতিনিধিত্ব ছিল 130 00:10:15,730 --> 00:10:19,410 সেইসাথে এক 2 দ্বারা প্রতিনিধিত্ব যোগদান, আমরা এক সাথে লিঙ্ক করা হয় থাকতে পারে. 131 00:10:19,410 --> 00:10:23,630 >> তাই যখন আপনি পাঠাতে 0 সেঃ এবং 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 তার মানে আমরা জিনিস করছি বিভাজক এবং decimals সাথে ডিল বরং বা 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 [ছাত্রদের] গাণিতিক সম্পূর্ণ ঠিক নয়. >> হ্যাঁ. অনির্দিষ্টতা. 153 00:11:38,600 --> 00:11:43,760 এই 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 কি হবে তাদের মান? >> [ছাত্রদের] শূন্য. >> শূন্য. ঠিক. 166 00:12:53,970 --> 00:12:58,430 এখানে কিভাবে আপনি floats মধ্যে ফ্রিকোয়েন্সি প্রতিনিধিত্ব করতে পারে একটি উদাহরণ, 167 00:12:58,430 --> 00:13:02,130 কিন্তু আমরা একে সঙ্গে পূর্ণসংখ্যার সাথে ডিল করা যাচ্ছেন, 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 যা পরে তার বাম যাও 0 1 শাখা সঙ্গে শাখা এবং ডান সঙ্গে পয়েন্ট. 174 00:13:29,310 --> 00:13:34,200 যদি আমরা স্ট্রিং "এটি cs50," তবে আমরা গণনা কতবার টি উল্লেখ করা হয়, 175 00:13:34,200 --> 00:13:38,420 জ উল্লেখ করেছে, তোমার, গুলি, গ, 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 প্রত্যাশিত হিসাবে, আমি এবং গুলি, যা প্রদর্শিত অধিকাংশ 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 একটি ছোট হাতের অক্ষর ব্যবহার গুলি থেকে পৃথক. 209 00:16:13,670 --> 00:16:21,260 যদি আমরা ছিল "এটি CS50" বড় হাতের অক্ষর দিয়ে তারপর, ছোট হাতের গুলি মাত্র দুবার প্রদর্শিত হবে, 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 এটি, এবং যে ভালো জিনিস ঘোরা. 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 এবং আপনার কাজে অভিমান বাস্তবায়ন হ্যাকার সংস্করণ হয়. 225 00:17:30,240 --> 00:17:38,490 কি অভিমান আছে এটা টেক্সট প্রদর্শন করা হয় এবং তারপর এটি 0 সেঃ এবং 1s এটা অনুবাদ, 226 00:17:38,490 --> 00:17:41,990 তাই আমরা যে প্রক্রিয়ার উপরে কি যেখানে আমরা ফ্রিকোয়েন্সি সংখ্যাত 227 00:17:41,990 --> 00:17:50,970 এবং তারপর ট্রি তৈরি এবং তারপর বলেন, "আমি কীভাবে টি পেতে পারি?" 228 00:17:50,970 --> 00:17:54,840 টি 100 উপস্থাপন করা হয়, যে জিনিস যেমন, 229 00:17:54,840 --> 00:17:58,860 এবং তারপর অভিমান নিতে টেক্সট এবং তারপর আউটপুট যে বাইনারি হবে. 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 তারপর বহান সঙ্গে আমরা একটি 0 সেঃ এবং 1s এর বাইনারি ফাইল দেওয়া হয় 233 00:18:17,980 --> 00:18:21,740 এবং প্রদত্ত এছাড়াও ফ্রিকোয়েন্সি সম্পর্কে তথ্য. 234 00:18:21,740 --> 00:18:26,740 আমরা মূল বার্তা যে ছিল মধ্যে যারা 0 সেঃ এবং 1s পিছনে সমস্ত অনুবাদ, 235 00:18:26,740 --> 00:18:29,350 তাই আমরা যে decompressing করছি. 236 00:18:29,350 --> 00:18:36,450 যদি আপনি মানক সংস্করণে করছেন, আপনি অভিমান বাস্তবায়ন করতে হবে না, 237 00:18:36,450 --> 00:18:39,290 অতএব আপনি শুধু অভিমান এর কর্মীরা বাস্তবায়ন ব্যবহার করতে পারেন. 238 00:18:39,290 --> 00:18:42,080 কিভাবে যে করবেন বৈশিষ্ট নির্দেশাবলী আছে. 239 00:18:42,080 --> 00:18:48,780 আপনি নির্দিষ্ট একটি টেক্সট ফাইল এর উপর অভিমান কর্মীদের বাস্তবায়ন রান করতে পারেন 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 আমি অধিকাংশ সময় ব্যয় করা যাচ্ছে. জ ফাইল 244 00:19:04,400 --> 00:19:07,660 কারণ. গ ফাইল, কারণ আমরা. জ আছে 245 00:19:07,660 --> 00:19:11,650 এবং যে কর্ম এগুলির নমুনা সঙ্গে আমাদের প্রদান করে, 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 মধ্যে এটি অনুবাদ তারপর, এটা আসলে spells অভিমান আউট. 259 00:20:27,160 --> 00:20:34,290 এখানে আমরা একটি Huffman-এনকোডেড ফাইলের জন্য একটি struct আছে. 260 00:20:34,290 --> 00:20:39,670 এই ফাইলটি একটি অভিমান সাথে যুক্ত সমস্ত বৈশিষ্ট্য আছে. 261 00:20:39,670 --> 00:20:47,080 তারপর এখানে নিচে আমরা একটি ফাইল হেডারের অভিমান আছে, তাই আমরা কল এটি Huffeader 262 00:20:47,080 --> 00:20:50,810 পরিবর্তে অতিরিক্ত জ যোগ করার কারণ এটি একই যাইহোক শোনাচ্ছে. 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 যদি এটি একটি প্রকৃত অভিমান ফাইল, এটা সংখ্যা হবে আপ উপরে, এই যাদু এক করে যাচ্ছে. 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 এটা কি সেই চিহ্ন ফ্রিকোয়েন্সি অভিমান ফাইল মধ্যে তালিকা যাচ্ছে. 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 তারপর আমরা কিছু ফাংশন যে অভিমান ফাইল পরবর্তী বিট ফিরে আছে 273 00:21:44,600 --> 00:21:52,580 সেইসাথে অভিমান ফাইলটি একটি বিট লিখেছেন, এবং তারপর এই ফাংশন এখানে, hfclose, 274 00:21:52,580 --> 00:21:54,650 আসলে অভিমান ফাইল প্রচেষ্টা. 275 00:21:54,650 --> 00:21:57,290 আগে, আমরা সোজা শুধু fclose সাথে ডিল করা হয়েছে, 276 00:21:57,290 --> 00:22:01,190 কিন্তু যখন আপনি একটি ফাইল আছে অভিমান, পরিবর্তে এটি fclosing 277 00:22:01,190 --> 00:22:06,080 আপনি আসলে কি করছেন না যাওয়া হয় এবং এটি hfclose hfopen. 278 00:22:06,080 --> 00:22:13,220 সেগুলো হল অভিমান ফাইল নির্দিষ্ট ফাংশন যে আমরা সাথে ডিল করা চলুন. 279 00:22:13,220 --> 00:22:19,230 তারপর এখানে হেডারের আমরা এবং তারপর পড়া হেডারের লিখুন. 280 00:22:19,230 --> 00:22:25,700 >> আমরা শুধু. জ ফাইল পড়া দ্বারা কি অভিমান ফাইল হতে পারে একটা ধারনা পেতে ধরনের পারেন, 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 এর মধ্যে ফাইল ইনপুট / আউটপুট এখানে পয়েন্টার সাথে ডিল করার সব আছে. 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 ভিতরে পরিবর্তে এটি আমরা এর সমস্ত করছেন অভিমান ফাইল. 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 Speller পশ্চাতে, যখন আপনি একটি নতুন নোড তৈরীর ছিল 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 তাই মূলত যে গাছ যখন আপনি এটি সঙ্গে সম্পন্ন এর freeing, 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 শূন্য মান, তাই 0 সেঃ অথবা NULLs মানের সমস্ত সূচনা করে, 307 00:25:03,190 --> 00:25:08,280 এবং ঐ বৃক্ষ যাও পয়েন্টার ফেরৎ যে আপনি শুধু আপনার করেছি malloc'd. 308 00:25:08,280 --> 00:25:13,340 এখানে আপনি যখন গাছ সরাতে কল প্রথম এটি নিশ্চিত যে আপনি ডবল freeing করছি না. 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 এই কি আছে এটা recursively ট্রি বাম নোডের উপর গাছ সরানোর আহ্বান 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 পর্যন্ত hardest বুঝতে দ্বারা সম্ভবত ছিল, 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 কিন্তু আমরা সত্যিই কি নিশ্চিত যে সম্পূর্ণরূপে আমরা বুঝতে পারি না প্রয়োজন হয়. জ ফাইল 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 কিন্তু আসলে তা ভিতরে প্রতীতি হয়. জ ফাইল পুরোপুরি প্রয়োজন কারণ আমরা যারা আছে না. 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 এবং তারপর তার অনুবাদ এবং ডাম্প কন্টেন্ট সব আউট. 372 00:31:01,010 --> 00:31:04,260 এখানে আমরা দেখতে যে এটা hfopen বলছেন. 373 00:31:04,260 --> 00:31:10,770 এটি যাও = fopen দায়ের * ইনপুট মিরর ধরনের, 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 ডান ম্যাজিক নম্বর যে ইঙ্গিত করে যে এটি একটি প্রকৃত অভিমান ফাইল আছে, 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 এটা এই অক্ষরের সমস্ত এর outputting এবং তারপর ফ্রিকোয়েন্সিতে যা তারা প্রদর্শিত নির্বাণ. 389 00:32:46,000 --> 00:32:51,180 যদি আমরা চেহারা, তাদের অধিকাংশই এই জন্য ছাড়া হয় 0 সেঃ: H, যা দুইবার প্রদর্শিত হবে, 390 00:32:51,180 --> 00:32:54,820 এবং তারপর, T যা একবার প্রদর্শিত হবে. 391 00:32:54,820 --> 00:33:07,860 এবং তারপর এখানে আমরা 0 সেঃ এবং 1s মধ্যে প্রকৃত বার্তা আছে. 392 00:33:07,860 --> 00:33:15,450 যদি আমরা hth.txt তাকান, যা সম্ভবতঃ মূল বার্তা huffed ছিল যে, 393 00:33:15,450 --> 00:33:22,490 আমরা সেখানে কিছু Hs এবং Ts দেখুন আশা. 394 00:33:22,490 --> 00:33:28,720 বিশেষত, আমরা শুধু 1 টি এবং 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 অভিমান ফাইল 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 এবং পরে সম্ভবত 01 টি এবং তারপর পরবর্তী এইচ 1 হিসাবে ভাল 401 00:34:17,120 --> 00:34:21,139 এবং তারপর আমরা একটি newline দুটি 0 সেঃ দ্বারা নির্দেশিত আছে. 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 Makefile উদাহরণ এ pset অতীত থেকে চেয়ে নির্দ্বিধায় 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 আমরা যে ব্যবহার করছেন, কারণ এটি একটি float তুলনায় আরো সুনির্দিষ্ট. 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 পরিশেষে, আমরা যখন আমাদের অভিমান আপ ফাইল নির্মাণ করছেন, 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 এবং তারপর পরিশেষে, আমাদের যেমন, Bs সঙ্গে আমাদের উদাহরণ দিয়ে শেষ পদক্ষেপ, এবং Cs 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: ফাইলটি যে আমরা এবং ডিকম্প্রেস decompressed ফাইল আউটপুট চান. 444 00:37:53,440 --> 00:38:00,410 কিন্তু একবার আমরা নিশ্চিত যে তাদেরকে মান ঠিক পরিমাণ আমাদের প্রেরণ করার জন্য, 445 00:38:00,410 --> 00:38:05,820 আমরা যে ইনপুট একটি অভিমান বা ফাইলটি নিশ্চিত করতে চাইবেন. 446 00:38:05,820 --> 00:38:10,420 এবং একবার তারপর আমরা গ্যারান্টি দিই যে এটা একটা অভিমান ফাইল, তারপর আমরা আমাদের ট্রি নির্মাণ করতে চান, 447 00:38:10,420 --> 00:38:20,940 গাছ যেমন যে গাছ যে ব্যক্তি বার্তাটি পাঠানো নির্মিত সাথে মেলে বিল্ড আপ. 448 00:38:20,940 --> 00:38:25,840 তারপর পরে আমরা ট্রি নির্মাণ তারপর, আমরা সঙ্গে 0 সেঃ এবং 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 তাই স্ফীত আউটপুট, যা টেক্সট ফাইল হতে হবে জন্য ফাইলের নাম. 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 Huffeader huffile.c সম্পর্কে তথ্য ছিল. 462 00:39:26,910 --> 00:39:33,430 আমরা জানি যে প্রতি অভিমান ফাইলটি একটি 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 যার মধ্যে এটি একটি অভিমান ফাইলে পড়া ছিল. 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 পিছনে যাও pset 4 যখন আমরা ফাইলটি copy.c আরজিবি triples যে কপি ছিল 470 00:40:12,680 --> 00:40:14,860 এবং আমরা রহস্যময় গল্প এবং পুনরায় মাপ জন্য যে ব্যাখ্যা, 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 আমরা নিশ্চিত যে এটা একটি NULL পয়েন্টার মান আমাদের নি প্রত্যাবর্তন করতে চেয়েছিলেন. 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 আমরা যদি একটি শর্ত হিসাবে থাকতে পারে (foo বিন্যাস (x)). 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 এটি ফাংশন যাইহোক করুন. 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 এটা এখন চমত্কার সহজবোধ্য ঠিক 0 সেঃ এবং 1s অনুসরণ করুন. 573 00:48:39,260 --> 00:48:45,480 প্রচল দ্বারা যাতে এবং আমরা জানি যে, একটি Huffman ট্রির 0 সেঃ বাকি ইঙ্গিত 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 যদি আমরা একটি গাছের পাতা আঘাত করেছি যদি উভয় বাম এবং ডান গাছ যাও NULL পয়েন্টার হয় বলতে পারেন. 584 00:49:32,220 --> 00:49:34,110 পারফেক্ট. 585 00:49:34,110 --> 00:49:40,320 আমরা জানি যে আমরা কিছুক্ষনের মধ্যে আমাদের অভিমান ফাইলে পড়তে বিট দ্বারা চান. 586 00:49:43,870 --> 00:49:51,220 হিসাবে আমরা dump.c আগে দেখেছি, তারা কি কি হয় বিট তারা অভিমান ফাইলে পড়তে বিট দ্বারা 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 আমরা উভয় অভিমান ফাইল বন্ধ করতে চান যে আমরা হয়েছে আচরণ করেছি 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 এবং তাই আপনি যদি যান, এমনকি কন্ট্রোল জন্য F'ing malloc দ্বারা, শুরু, 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 >> সুতরাং যখন আমরা মেমরি freeing সঙ্গে আচরণ এবং সম্ভাব্য তথ্য ফাঁসের ভোগ করছি, 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 আমরা একটি বিট Speller সঙ্গে ব্যবহৃত এটি করেছি, অর্জিত, কিন্তু আমরা এখনও একটি বিট আরো সাহায্যের প্রয়োজন হয়, 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 আপনি অভিমান এর কর্মীরা এর বাস্তবায়ন অ্যাক্সেস, চালানোর যে একটি টেক্সট ফাইল, করতে পারেন 645 00:54:48,520 --> 00:54:55,400 এবং তারপর একটি বাইনারি ফাইল, একটি বাইনারি ফাইল অভিমান এটি নির্দিষ্ট করা আউটপুট. 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 >> এমনকি আপনি হয়তো সংকুচিতকারী একটি শট এবং তারপর নিতে পারেন decompressing 654 00:55:38,110 --> 00:55:41,600 যুদ্ধ ও শান্তি মত যে ফাইলগুলি আপনি Speller ব্যবহৃত কিছু 655 00:55:41,600 --> 00:55:46,710 অথবা অসটেন বা ওই জাতীয় কিছু - যে শীতল ধরনের হবে - অমুসলিম বা ক্ষমতা, 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 >> আমরা অভিমান গাছ বা প্রক্রিয়ার কোন প্রশ্ন থাকে সম্ভবত গাছ করার 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 >> ধন্যবাদ, সবাই. এই ছিল Walkthrough 6. এবং শুভকামনা. 672 00:57:08,660 --> 00:57:10,000 >> [CS50.TV]