1 00:00:00,000 --> 00:00:02,740 [Powered by Google Translate] [Walkthrough - সমস্যা সেট করুন 5] 2 00:00:02,740 --> 00:00:04,870 [Zamyla Chan - হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:04,870 --> 00:00:07,190 [এটি CS50. - CS50.TV] 4 00:00:07,190 --> 00:00:10,400 >> ঠিক আছে. হ্যালো, প্রত্যেককে, Walkthrough 5 যাও এবং স্বাগত জানাই. 5 00:00:10,400 --> 00:00:17,400 >> Pset5 হয় বানান ভুল, যা আমরা একটি বানান পরীক্ষক তৈরি করা হবে. 6 00:00:17,400 --> 00:00:21,030 -বানান চেকারস হল অত্যন্ত গুরুত্বপূর্ণ. 7 00:00:21,030 --> 00:00:23,390 এই করেনি কখনও আপনি কি? 8 00:00:23,390 --> 00:00:27,170 আপনি খুব কাজ, খুব একটা কাগজে সংঘর্ষ জন্য সম্পদ্ 9 00:00:27,170 --> 00:00:33,120 এবং তবু শেষ পর্যন্ত একজন D অথবা একজন D = মত একটি খুব ভাস rade পেয়ে 10 00:00:33,120 --> 00:00:39,390 এবং সব কারণ আপনি তিমি ব্যাপক শব্দ liverwurst ভক্ষক. 11 00:00:39,390 --> 00:00:44,710 হ্যাঁ, আপনার peppers প্রূফ্সংশোধন হয় একটি বিষয়, চরম দুর্বলতা. 12 00:00:44,710 --> 00:00:49,140 এটি একটি সমস্যা যে পুরুষালী, পুরুষালী ছাত্র প্রভাবিত করে. 13 00:00:49,140 --> 00:00:56,260 আমি আমার গ্রেড sith যন্ত্রণাদাতা দ্বারা একবার বলা হয়েছিল যে আমি একটি ভাল সহকর্মী মধ্যে পেতে হবে না. 14 00:00:56,260 --> 00:01:00,250 এবং যে সব আমি কখনও চেয়েছিল, যে সমস্ত কোনো ছাগলছানা আমার বয়সে চায়, 15 00:01:00,250 --> 00:01:04,569 শুধু একটা ভাল সহকর্মী মধ্যে পেতে. 16 00:01:04,569 --> 00:01:12,720 এবং. কেবল কোনো সহকর্মী না নং আমি একটি আইভরি আইনি সহকর্মী যেতে চেয়েছিলেন. 17 00:01:12,720 --> 00:01:18,360 সুতরাং যদি আমি উন্নতি না চলে যাচ্ছে হার্ভার্ডে আমার স্বপ্ন হবে, 18 00:01:18,360 --> 00:01:22,730 Jale, বা প্রিসন - আপনি কি জানেন, এ প্রিসন, নিউ জার্সি. 19 00:01:22,730 --> 00:01:25,170 তাই আমি একটি বানান পরীক্ষক নিজেকে. 20 00:01:25,170 --> 00:01:29,380 এটা আমার প্রিয় একটি উচ্চারিত শব্দ শিল্পী, টেলর মালি এক থেকে সামান্য উদ্ধৃতাংশ. 21 00:01:29,380 --> 00:01:34,630 যাই হোক, হিসাবে তিনি বলেছেন, একটি বানান পরীক্ষক থাকার গুরুত্ব খুবই গুরুত্বপূর্ণ. 22 00:01:34,630 --> 00:01:39,440 >> Walkthrough 5, তাই যা আমরা স্বাগত জানাই pset5 সম্পর্কে কথা বলা হবে: বানান ভুল, 23 00:01:39,440 --> 00:01:44,300 যা আমরা আমাদের নিজস্ব বানান পরীক্ষক তৈরি করা হবে. 24 00:01:44,300 --> 00:01:50,880 এই সপ্তাহের জন্য টুলবাক্স, বন্টন কোড গুরুত্বপূর্ণ তাকান করা যাচ্ছে না 25 00:01:50,880 --> 00:01:54,950 শুধুমাত্র বিভিন্ন ফাংশন যে আপনার অভিধানে আছে যাচ্ছে বুঝতে. 26 00:01:54,950 --> 00:02:01,500 আমরা আসলে করছি যাচ্ছে একাধিক. গ ফাইল একসাথে আমাদের pset করা হচ্ছে. 27 00:02:01,500 --> 00:02:05,420 এবং তাই বিভিন্ন দিক মাধ্যমে খুঁজছেন, যদিও আসলে আমরা সম্পাদনা করছেন না 28 00:02:05,420 --> 00:02:10,770 এক ফাইল, speller.c, বুদ্ধিমান কিভাবে এটি dictionary.c সম্পর্ক সঙ্গে কাজ করে, 29 00:02:10,770 --> 00:02:14,100 আমরা যা লেখা হবে, যাও অত্যন্ত গুরুত্বপূর্ণ হবে. 30 00:02:14,100 --> 00:02:16,970 pset বৈশিষ্ট প্রয়োজনীয় তথ্যও অনেক রয়েছে 31 00:02:16,970 --> 00:02:21,360 এ পদ জিনিস যে আপনি অনুমান করতে পারেন, এবং নিয়ম মত জিনিষ, 32 00:02:21,360 --> 00:02:24,710 তাই pset বৈশিষ্ট পড়া সাবধানে টিপসের জন্য নিশ্চিত করা. 33 00:02:24,710 --> 00:02:29,310 এবং যখন একটি ভালো যে নিয়ম বা কিছু সন্দেহ তারপর, pset বৈশিষ্ট সর্বদা পড়ুন 34 00:02:29,310 --> 00:02:31,550 বা আলোচনা. 35 00:02:31,550 --> 00:02:34,060 এই pset যাও প্রচন্ডভাবে পয়েন্টার নির্ভর করা যাচ্ছে না, 36 00:02:34,060 --> 00:02:37,890 তাই আমরা নিশ্চিত যে আমরা যোগ বড় মধ্যে পার্থক্য বুঝতে পারা করতে চাই 37 00:02:37,890 --> 00:02:41,680 মধ্যে পয়েন্টার এর নাম এবং ampersands, কিভাবে তাদের মুক্ত, ইত্যাদি সামনে 38 00:02:41,680 --> 00:02:47,550 তাই হচ্ছে পয়েন্টার ওস্তাদ এই সমস্যা সেটে খুব সহায়ক হবে. 39 00:02:47,550 --> 00:02:50,460 আমরা সংযুক্ত তালিকার মধ্যে একটি বিট আরো চেয়ে চলুন, 40 00:02:50,460 --> 00:02:57,790 যেখানে আমরা উপাদান আছে যা আমরা নোড যে উভয় একটি মান হিসাবে একটি পয়েন্টার আছে কল 41 00:02:57,790 --> 00:03:02,520 পরবর্তী নোডের, তাই মূলত লিঙ্ক এবং অন্যান্য পর এক বিভিন্ন উপাদান. 42 00:03:02,520 --> 00:03:07,190 কয়েক আপনার প্রকৃত অভিধান রূপায়ণকারী বিভিন্ন অপশন আছে. 43 00:03:07,190 --> 00:03:13,150 আমরা দুটি প্রধান পদ্ধতি আছে, যা হ্যাশ টেবিল এবং পরে চেষ্টা করে দেখব যাও চলুন. 44 00:03:13,150 --> 00:03:17,660 যারা উভয় ইন, তারা একটি লিঙ্ক তালিকা ধারণা কিছু জড়িত করা 45 00:03:17,660 --> 00:03:20,790 যেখানে আপনি উপাদান একে অপরের লিঙ্ক করেছেন. 46 00:03:20,790 --> 00:03:25,640 এবং আমরা উপেক্ষা করা কিভাবে আপনি লিঙ্ক তালিকা কাছাকাছি কাজ করতে সক্ষম হতে পারেন চলুন, 47 00:03:25,640 --> 00:03:29,680 উদাহরণস্বরূপ তাদের, কিভাবে তৈরি শর্তাদির মধ্যে নেভিগেট,, এটি একটি নোডের মধ্যে সন্নিবেশ 48 00:03:29,680 --> 00:03:32,760 বিনামূল্যে বা নোড হিসাবে ভাল সকল. 49 00:03:32,760 --> 00:03:34,740 Freeing নোড নিরিখে যে খুব গুরুত্বপূর্ণ 50 00:03:34,740 --> 00:03:37,700 যে যখনই আমরা malloc মেমরি পরে, আমরা এটি মুক্ত. 51 00:03:37,700 --> 00:03:42,910 তাই আমরা নিশ্চিত যে কোন পয়েন্টার যায় unfreed করতে চাই, যে আমরা কোন তথ্য ফাঁসের মেমরি নেই. 52 00:03:42,910 --> 00:03:48,330 আমরা একটি হাতিয়ার নামক Valgrind যে আপনার প্রোগ্রাম রান পরিচয় করিয়ে দিতে যাচ্ছেন 53 00:03:48,330 --> 00:03:52,260 এবং তারপর আপনি যে সব মেমরি বরাদ্দ কিনা চেক নিষ্কৃত হয়. 54 00:03:52,260 --> 00:03:59,080 তোমার pset কেবলমাত্র যখন এটি কাজ সম্পন্ন এবং এটি সম্পূর্ণ কার্যকারিতা আছে, 55 00:03:59,080 --> 00:04:03,990 কিন্তু, Valgrind বলে যে আপনি যে কোনো মেমরির তথ্য ফাঁসের খোঁজ পাই নি. 56 00:04:03,990 --> 00:04:06,690 এই pset জন্য পরিশেষে, আমি সত্যিই চাপ সৃষ্টি করতে চান - 57 00:04:06,690 --> 00:04:11,360 আমি বলতে চাচ্ছি, স্বাভাবিক হিসাবে, আমি স্পষ্টভাবে am আপনার সমস্যা সেটের জন্য কলম এবং কাগজ ব্যবহার করে একটি সমর্থক, 58 00:04:11,360 --> 00:04:14,840 কিন্তু এই এক জন্য, আমি মনে করি যে কলম এবং কাগজ, বিশেষ করে গুরুত্বপূর্ণ হতে চলেছে 59 00:04:14,840 --> 00:04:19,000 যখন আপনি চান জিনিষ তীরচিহ্ন অঙ্কন করা হবে এবং মতের মিল না কিভাবে যে কাজ. 60 00:04:19,000 --> 00:04:24,440 তাই নিশ্চিতভাবে কলম এবং কাগজ জিনিষ বহিষ্কার করা আগে আপনাকে কোডিং করতে ব্যবহার করার চেষ্টা করুন 61 00:04:24,440 --> 00:04:26,970 কারণ এটি একটি বিট অগোছালো পেতে পারেন. 62 00:04:26,970 --> 00:04:30,700 >> প্রথম, যাক সংযুক্ত তালিকার মধ্যে এর একটি বিট যান. 63 00:04:30,700 --> 00:04:35,510 লিঙ্ক তালিকা নোড, যেখানে প্রতিটি নোডের মধ্যে একটি মান এর সাথে জড়িত আছে গঠিত, 64 00:04:35,510 --> 00:04:39,810 সেইসাথে এটি পরে পরবর্তী নোডের একটি পয়েন্টার. 65 00:04:39,810 --> 00:04:43,680 জিনিসের লিঙ্ক তালিকা সঙ্গে গুরুত্বপূর্ণ একটি দম্পতি হয় যে আমরা মনে রাখতে প্রয়োজন 66 00:04:43,680 --> 00:04:48,810 যেখানে আমাদের প্রথম নোডের হয়, এবং তারপর একবার আমরা যেখানে প্রথম নোডের হয় জানি, 67 00:04:48,810 --> 00:04:52,990 যে ভাবে আমরা নোড অ্যাক্সেস করতে পারেন যে প্রথম যাও নোড পয়েন্ট 68 00:04:52,990 --> 00:04:55,850 এবং তারপর যা পরে এক এবং যে পরে এক. 69 00:04:55,850 --> 00:05:00,340 এবং তারপর আপনার লিঙ্ক তালিকা শেষ উপাদান হল নোড এর পয়েন্টার 70 00:05:00,340 --> 00:05:02,340 সবসময় যাও যাও নাল নির্দেশ যাচ্ছে. 71 00:05:02,340 --> 00:05:08,230 যখন একটি নোড পয়েন্ট নাল হয়ে থাকে তাহলে, আপনি কি জানেন যে আপনি তালিকার শেষে পৌঁছেছেন, 72 00:05:08,230 --> 00:05:12,320 যে যে নোড শেষ এক, যে পরে কিছুই নেই. 73 00:05:12,320 --> 00:05:16,970 এখানে এই পরিকল্পিত, আপনি দেখতে যে তীর আছে পয়েন্টার, 74 00:05:16,970 --> 00:05:20,290 এবং নীল অধ্যায় যেখানে মান সংরক্ষিত হয় না, 75 00:05:20,290 --> 00:05:24,420 এবং তারপর এটি যাও পয়েন্টারের সাথে লাল বক্স করা হয় নোড এর পয়েন্টার 76 00:05:24,420 --> 00:05:27,050 প্রতি নির্দেশ দেওয়ার পর এটি পরবর্তী নোডের যাও. 77 00:05:27,050 --> 00:05:33,730 এবং যাতে আপনি এখানে দেখতে, ডি নোড যাও নাল কারণ এটি তালিকা শেষ উপাদান নির্দেশ করবে. 78 00:05:33,730 --> 00:05:38,240 >> চলুন আমরা কিভাবে একটি নোডের জন্য একটি struct সংজ্ঞায়িত হতে পারে তাকান. 79 00:05:38,240 --> 00:05:40,130 এবং যেহেতু আমরা একাধিক নোড আছে চাই, 80 00:05:40,130 --> 00:05:43,180 এই একটি typedef struct হয়ে যাচ্ছে 81 00:05:43,180 --> 00:05:46,870 যা আমরা একাধিক নোড বিভিন্ন দৃষ্টান্ত আছে চলুন. 82 00:05:46,870 --> 00:05:50,850 এবং তাই আমরা একটি নতুন তথ্য টাইপ হিসাবে এটি সংজ্ঞায়িত. 83 00:05:50,850 --> 00:05:53,630 এখানে, আমরা একটি typedef struct নোড আছে. 84 00:05:53,630 --> 00:05:56,160 এই উদাহরণে, আমরা পূর্ণসংখ্যা নোড সঙ্গে লেনদেন করছেন, 85 00:05:56,160 --> 00:06:00,490 তাই আমরা একটি পূর্ণসংখ্যা মান নামে আছে এবং তারপর আমরা অন্য পয়েন্টার আছে, 86 00:06:00,490 --> 00:06:07,390 এবং এই ক্ষেত্রে, এটা একটি নোডের একটি পয়েন্টার, তাই আমরা একটি নোড struct * নামক পরের আছে. 87 00:06:07,390 --> 00:06:09,520 এবং তারপর আমরা এই গোটা ব্যাপারটাই নোড আহ্বান করছি. 88 00:06:09,520 --> 00:06:11,110 নিশ্চিত করুন যে আপনি এই বাক্য গঠন অনুসরণ করুন. 89 00:06:11,110 --> 00:06:17,940 উল্লেখ্য, নোড প্রকৃতপক্ষে উপরে উল্লেখিত আপ হিসাবে ভাল হিসাবে নীচের কোঁকড়া ধনুর্বন্ধনী. 90 00:06:17,940 --> 00:06:23,400 তারপর ট্র্যাকের মধ্যে যেখানে আমার প্রথম নোডের এই তালিকায় সংযুক্ত হয় রাখা, 91 00:06:23,400 --> 00:06:29,390 তারপর আমি একটি নোড পয়েন্টার নামক মাথা আছে, এবং আমি একটি নোড মাপ malloc জন্য পর্যাপ্ত স্থান. 92 00:06:29,390 --> 00:06:36,240 নোটিশ যাইহোক, যে প্রধান আসলে একটি নোড পয়েন্টার একটি প্রকৃত নোড হিসাবে নিজেকে বিরোধিতা. 93 00:06:36,240 --> 00:06:40,130 তাই আসলে মাথা কোনো মান উপস্থিত করা হয় না, 94 00:06:40,130 --> 00:06:45,590 এটি শুধুমাত্র যেটা আমার লিঙ্ক তালিকায় প্রথম নোডের হয় স্থানটিকে. 95 00:06:55,080 --> 00:06:58,340 >> যাও একটি লিঙ্ক তালিকার ভালো অর্থে, পেতে কারণ এটা খুব গুরুত্বপূর্ণ 96 00:06:58,340 --> 00:07:02,220 যাও, এমনটা নিশ্চিত করা যে আপনি শৃঙ্খল বজায় ট্র্যাক রাখতে, 97 00:07:02,220 --> 00:07:09,990 আমি তা মনে করি না হিসাবে একটি লাইন ব্যক্তিদের হাতে ধারণ, 98 00:07:09,990 --> 00:07:14,330 যেখানে প্রতিটি ব্যক্তি পরের এক সঙ্গে হাত অধিষ্ঠিত হয়. 99 00:07:14,330 --> 00:07:18,350 আপনি এই আঁকার মধ্যে দেখতে পারেন না, কিন্তু মূলত তারা পরবর্তী ব্যক্তির প্রতি নির্দেশ করছেন 100 00:07:18,350 --> 00:07:23,760 যে তাদের চেন হয়. 101 00:07:23,760 --> 00:07:29,270 তাই আপনি যদি একটি তালিকা সংযুক্ত যেখানে এইসব মানুষ, তর্ক করতে চান - 102 00:07:29,270 --> 00:07:32,830 যাদের সব কল্পনা তাদের মানের সাথে আছে 103 00:07:32,830 --> 00:07:36,590 এবং লাইন পরবর্তী ব্যক্তির নির্দেশ - 104 00:07:36,590 --> 00:07:40,810 উদাহরণস্বরূপ, যদি আপনি সংযুক্ত তালিকা তর্ক করতে চান, তাহলে হয়, মান সম্পাদনা করুন 105 00:07:40,810 --> 00:07:42,830 একটি ভালো যে মান বা কিছুর জন্য বা অনুসন্ধান, 106 00:07:42,830 --> 00:07:48,270 তাহলে আপনি নির্দিষ্ট ব্যক্তি একটি পয়েন্টার আছে চাইবেন. 107 00:07:48,270 --> 00:07:52,670 তাই আমরা তথ্য টাইপ নোড পয়েন্টার আছে চলুন. 108 00:07:52,670 --> 00:07:55,580 এই উদাহরণস্বরূপ, যাক এর কল এটি কার্সার. 109 00:07:55,580 --> 00:07:59,630 আরেকটি প্রচলিত উপায় হল এই নাম iterator বা যে ভালো কিছু হবে 110 00:07:59,630 --> 00:08:05,130 কারণ এটি উপর iterating এবং প্রকৃতপক্ষে চলন্ত যা নোড তা এর প্রতি নির্দেশ করে. 111 00:08:05,130 --> 00:08:14,410 এখানে আমাদের কার্সার হবে. 112 00:08:14,410 --> 00:08:20,180 আমাদের কার্সার প্রথম আমাদের তালিকায় প্রথম উপাদান নির্দেশ করা. 113 00:08:20,180 --> 00:08:26,910 তাই কি আমরা করতে হয় মূলত আমরা করা হবে কার্সার অব্যাহত, 114 00:08:26,910 --> 00:08:29,130 থেকে প্রান্তের দিকে এটি পরিবর্তনশীল. 115 00:08:29,130 --> 00:08:33,409 এই ক্ষেত্রে, আমরা তালিকায় পরবর্তী উপাদান তা স্থানান্তর করতে চান. 116 00:08:33,409 --> 00:08:38,480 অ্যারে দিয়ে, আমরা কি কি হয় আমরা ঠিক বলতে আমরা 1 দ্বারা সূচক বৃদ্ধি করবে. 117 00:08:38,480 --> 00:08:46,020 এই ক্ষেত্রে, আসলে আমরা কি করতে হবে যা বর্তমান ব্যক্তি এই ব্যক্তির প্রতি নির্দেশ খুঁজে পাওয়া হয়, 118 00:08:46,020 --> 00:08:48,930 এবং যে পরবর্তী মান হতে যাচ্ছে. 119 00:08:48,930 --> 00:08:53,230 তাই আপনি যদি কার্সার শুধুমাত্র একটি নোড পয়েন্টার, তাহলে কি আমরা যেতে চাই 120 00:08:53,230 --> 00:08:56,320 হয় আমরা মান যে কার্সার প্রতি নির্দেশ না পেতে চান. 121 00:08:56,320 --> 00:09:01,350 আমরা যে নোড যাও এবং পেতে তারপর, একবার আমরা যে নোড করেন, যেখানে এটি এর প্রতি নির্দেশ খুঁজে পেতে চান. 122 00:09:01,350 --> 00:09:05,820 প্রকৃত নোড যে কার্সার প্রতি নির্দেশ না পেতে, 123 00:09:05,820 --> 00:09:13,160 সাধারণত আমরা (* কার্সার) দ্বারা এটি ইঙ্গিত দেয়. 124 00:09:13,160 --> 00:09:19,160 যে প্রকৃত নোড যে কার্সার প্রতি নির্দেশ না আপনাকে দিতে হবে. 125 00:09:19,160 --> 00:09:21,730 যে পরে এবং তারপর, আমরা কি করতে হয় আমরা অ্যাক্সেস করতে চান 126 00:09:21,730 --> 00:09:25,680 যাই হোক না কেন যে নোড এর পরবর্তী মানটি. 127 00:09:25,680 --> 00:09:32,820 যাও যে, এর ভিতরে struct মান অ্যাক্সেস করবেন, আমরা বিন্দু অপারেটর আছে. 128 00:09:32,820 --> 00:09:39,530 আমি তখন এটি (* কার্সার). হতে পরবর্তী পারে. 129 00:09:39,530 --> 00:09:44,840 কিন্তু এই * কার্সার বন্ধনী কাছাকাছি থাকার পদ হয় একটু মলিন, 130 00:09:44,840 --> 00:09:56,800 এবং তাই আমরা কার্সার> সঙ্গে এই পুরো বিবৃতি প্রতিস্থাপন করুন. 131 00:09:56,800 --> 00:10:02,700 এটি একটি ড্যাশ এবং তারপর একটি চেয়ে সাইন, তাই একটি তীর তৈরীর. 132 00:10:02,700 --> 00:10:05,840 কার্সার> পরের. 133 00:10:05,840 --> 00:10:12,390 আসলে পেতে নোড হবে যে কার্সর পয়েন্ট. যে মান পরের হয়. 134 00:10:12,390 --> 00:10:16,790 সুতরাং পরিবর্তে তারকা এবং বিন্দু হচ্ছে, আপনি একটি তীর যে প্রতিস্থাপন করছেন. 135 00:10:16,790 --> 00:10:24,820 খুব নিশ্চিত যে আপনি এই বাক্য গঠন ব্যবহার করার চেষ্টা করতে সতর্কতা অবলম্বন করা আবশ্যক. 136 00:10:33,550 --> 00:10:37,620 >> এখন যে আমরা আমাদের কার্সার আছে, যদি আমরা মান অ্যাক্সেস করতে চান, 137 00:10:37,620 --> 00:10:40,450 পূর্বে, আমরা ছিল কার্সার> পরের, 138 00:10:40,450 --> 00:10:46,260 কিন্তু নোড এ মান যে কার্সার প্রতি নির্দেশ অ্যাক্সেস করা হয়, আমরা সহজভাবে বলতে 139 00:10:46,260 --> 00:10:48,070 নোড> মান. 140 00:10:48,070 --> 00:10:53,600 সেখান থেকে, এটি তথ্য ধরনের যাই হোক না কেন আমরা এর মান এবং নোড হতে সংজ্ঞায়িত করেছি. 141 00:10:53,600 --> 00:10:59,620 যদি এটি কোন int নোড তারপর, কার্সার> মান শুধুমাত্র পূর্ণসংখ্যা হতে যাচ্ছে. 142 00:10:59,620 --> 00:11:04,870 সুতরাং আমরা যে ক্রিয়াকলাপগুলি করতে পারেন, equalities, চেক এটি বিভিন্ন মান, ইত্যাদি দায়িত্ব অর্পণ করা 143 00:11:04,870 --> 00:11:11,090 তখন আপনি কি করতে চান, যদি আপনি পরবর্তী ব্যক্তির আপনার কার্সার স্থানান্তর করতে চান, 144 00:11:11,090 --> 00:11:15,270 আপনি আসলে কার্সার মান পরিবর্তন. 145 00:11:15,270 --> 00:11:19,340 যেহেতু কার্সারটি একটি নোড পয়েন্টার, পয়েন্টার আপনি প্রকৃত ঠিকানা পরিবর্তন 146 00:11:19,340 --> 00:11:23,890 আপনার তালিকায় পরবর্তী নোডের ঠিকানা. 147 00:11:23,890 --> 00:11:28,930 এই মাত্র কিছু কোড যেখানে আপনি পুনরুক্তি করা হতে পারে. 148 00:11:28,930 --> 00:11:31,230 যেখানে আমি কিছু মন্তব্য করবেন, 149 00:11:31,230 --> 00:11:33,850 যে যেখানে সম্ভবত আপনি মান অ্যাক্সেস করছি যাচ্ছে 150 00:11:33,850 --> 00:11:37,850 অথবা যে নির্দিষ্ট নোডের সাথে কিছু একটা করুন. 151 00:11:37,850 --> 00:11:43,050 এটি চলতে শুরু, আমি যে আমার কার্সার প্রাথমিকভাবে 152 00:11:43,050 --> 00:11:48,430 লিঙ্ক তালিকায় প্রথম উপাদান নির্দেশ যাচ্ছে. 153 00:11:48,430 --> 00:11:52,910 এবং তাই আপ এগিয়ে, আমি নোড প্রধান হিসাবে এটি সংজ্ঞায়িত. 154 00:11:52,910 --> 00:11:57,610 >> হিসাবে আমি আগে উল্লেখ করেছে, freeing সত্যিই গুরুত্বপূর্ণ. 155 00:11:57,610 --> 00:12:02,440 আপনি কি নিশ্চিত যে আপনি তালিকা প্রতিটি উপাদান মুক্ত একবার আপনি এটি দিয়ে সমাপ্ত করেছি করতে চাই. 156 00:12:02,440 --> 00:12:04,940 আপনি যখন আর যারা পয়েন্টার কোনো উল্লেখ করার প্রয়োজন হবে না, 157 00:12:04,940 --> 00:12:10,620 আপনি কি নিশ্চিত যে আপনি ঐ সমস্ত পয়েন্টার মুক্ত করতে চাই. 158 00:12:10,620 --> 00:12:14,460 কিন্তু আপনি খুব সতর্কভাবে এখানে হতে চান যে আপনি কোন মেমরি তথ্য ফাঁসের এড়াতে চান. 159 00:12:14,460 --> 00:12:25,080 আপনি যদি বিনামূল্যে এক ব্যক্তি অকালে তারপর, পয়েন্টার যে সমস্ত নোড পয়েন্ট 160 00:12:25,080 --> 00:12:26,900 করা হারিয়ে যাচ্ছে. 161 00:12:26,900 --> 00:12:32,070 ব্যক্তির উদাহরণ আলোচনার এটি একটি বিট আরো উচ্চ পুরস্কার না, 162 00:12:32,070 --> 00:12:49,600 এর দিন আছে এই ক্ষেত্রে তারা একটা দৈত্য সঙ্গে একটি হ্রদের উপর ঝুলে আছে এই ব্যক্তিদের ব্যতীত,. 163 00:12:49,600 --> 00:12:53,200 আমরা নিশ্চিত যে যখনই আমরা মুক্ত, আমরা হইনি হারান না করতে চাই 164 00:12:53,200 --> 00:12:58,920 এবং যাক কোনো নোডের মধ্যে যেতে আগে আসলে আমরা তাদের মুক্ত করেছেন. 165 00:12:58,920 --> 00:13:05,730 উদাহরণস্বরূপ, যদি আপনি কেবল এই লোক এখানে বিনামূল্যে কল ছিল, 166 00:13:05,730 --> 00:13:15,350 তারপর তিনি মুক্ত হবে, কিন্তু তারা আবার এই সব করা হবে না হারিয়ে 167 00:13:15,350 --> 00:13:18,450 এবং তারা বন্ধ এবং প্রপাত নিচে ফেলা হয়. 168 00:13:18,450 --> 00:13:24,900 তাই আমরা নিশ্চিত যে পরিবর্তে, আমরা বিশ্রাম একটি লিঙ্ক বজায় রাখতে চান করতে চাই. 169 00:13:37,630 --> 00:13:42,480 আমাদের মাথা পয়েন্টার, তালিকার প্রথম উপাদান যে স্থানটিকে চিহ্নিত করে. 170 00:13:42,480 --> 00:13:49,990 এটি একটি দড়ি প্রথম ব্যক্তি নোঙ্গরকরণ মত ধরনের. 171 00:13:52,870 --> 00:13:57,470 আপনি কি যখন আপনি মুক্ত করতে পারেন একটি তালিকা আছে না - 172 00:13:57,470 --> 00:14:04,520 আপনি যদি প্রথম প্রথম উপাদান মুক্ত করতে চান, তাহলে আপনাকে একটি অস্থায়ী পয়েন্টার হতে পারে 173 00:14:04,520 --> 00:14:07,370 যে পয়েন্ট যাই হোক না কেন প্রথম উপাদান হয়. 174 00:14:07,370 --> 00:14:11,420 সুতরাং আপনি আপনার অস্থায়ী পয়েন্টার এখানে প্রতি নির্দেশ আছে. 175 00:14:11,420 --> 00:14:15,840 এই ভাবে, আমরা প্রথম নোডের একটি খাকা. 176 00:14:15,840 --> 00:14:18,930 এবং তারপর থেকে, আমরা জানি যে, প্রথম নোডের মুক্ত করা যাচ্ছে, 177 00:14:18,930 --> 00:14:24,890 তারপর আমরা এই দড়ি, এই নোঙ্গর, আমাদের মাথা অগ্রসর না হতে পারেন, 178 00:14:24,890 --> 00:14:31,930 প্রকৃতপক্ষে যাই হোক না কেন প্রথম এক ইশারা নির্দেশ করা হয়. 179 00:14:31,930 --> 00:14:38,760 তাই এই মাথা আসলে দ্বিতীয় উপাদান স্থানটিকে এখন. 180 00:14:38,760 --> 00:14:43,980 এখন আমরা যাহা temp মধ্যে সংরক্ষিত হয় মুক্ত করতে অনুমতি দেওয়া হয়, 181 00:14:43,980 --> 00:14:53,360 এবং যাতে আমরা এটিকে আমাদের তালিকায় অন্যান্য নোডের মধ্যে সমস্ত বিপদ ডেকে আনছে ছাড়া যে নিশ্চিহ্ন করতে পারেন. 182 00:14:54,140 --> 00:15:05,020 আরেকটি উপায় হল যে আপনি এই যেত না হতে পারে 183 00:15:05,020 --> 00:15:08,650 প্রত্যেক সময় আপনি শুধু তালিকা শেষ উপাদান মুক্ত 184 00:15:08,650 --> 00:15:11,010 কারণ তারা নিশ্চিত করছি কিছু যাও যাও হইনি তীক্ষ্ন. 185 00:15:11,010 --> 00:15:15,570 সুতরাং আপনি শুধুমাত্র এই এক, তারপর বিনামূল্যে এই এক তারপর, বিনামূল্যে এই এক মুক্ত করতে পারে. 186 00:15:15,570 --> 00:15:21,900 যে স্পষ্টভাবে কাজ কিন্তু কারণ দ্বারা সংযুক্ত তালিকার প্রকৃতি, একটি বিট মন্থর 187 00:15:21,900 --> 00:15:24,670 আমরা কেবল অবিলম্বে গত এক যাও না তিড়িং লাফ পারেন. 188 00:15:24,670 --> 00:15:28,030 আমরা লিঙ্ক তালিকার প্রতিটি উপাদান, তর্ক আছে 189 00:15:28,030 --> 00:15:31,020 এবং যে কিনা এক নাল প্রতি নির্দেশ চেক করা হয়, প্রতি সময় চেক, 190 00:15:31,020 --> 00:15:33,780 এবং একবার তারপর আমরা শেষ, পৌঁছানোর পরে বিনামূল্যে যে. 191 00:15:33,780 --> 00:15:40,270 যদি আপনি এই প্রক্রিয়া ছিল না, আসলে এখানে আপনি চেক করা হবে, 192 00:15:40,270 --> 00:15:44,190 চেক এখানে, তারপর এখানে চেক করে, এটি freeing, 193 00:15:44,190 --> 00:15:47,470 তারপর ফিরে যাব, চেক করে এখানে, এখানে চেক, এটি freeing, 194 00:15:47,470 --> 00:15:49,660 চেক এখানে, এবং তারপর এটি freeing. 195 00:15:49,660 --> 00:15:52,880 যে কিছুটা সময় লাগে. হাঁ. 196 00:15:52,880 --> 00:15:59,060 >> [ছাত্রদের] এটি করা সম্ভব একটি লিঙ্ক তালিকা যে শেষে একটি করে প্রস্থান পয়েন্টার সঞ্চয় করতে চান? 197 00:15:59,060 --> 00:16:01,320 যে স্পষ্টভাবে করা সম্ভব হবে. 198 00:16:01,320 --> 00:16:08,340 যাও প্রশ্নটি পুনরাবৃত্তি, এটা একটি লিঙ্ক তালিকা আছে গঠন সম্ভব 199 00:16:08,340 --> 00:16:12,490 যেমন যে আপনি একটি পয়েন্টার নির্দেশকারী লিঙ্ক তালিকা শেষ আছে? 200 00:16:12,490 --> 00:16:18,090 আমি যে সম্ভব, এবং প্রত্যেক সময় যে আপনি আপনার লিঙ্ক তালিকায় কিছু সন্নিবেশ চাই 201 00:16:18,090 --> 00:16:21,470 আপনি যে মত পয়েন্টার এবং জিনিষ আপডেট করতে হবে. 202 00:16:21,470 --> 00:16:26,640 উদাহরণস্বরূপ একটি নোড * লেঙ্গুড় আছে, হবে. 203 00:16:26,640 --> 00:16:29,840 কিন্তু আপনি যখন এই বৈশিষ্ট্য রূপায়ণকারী করছি, আপনি বিনিময় প্রথা মনে আছে, 204 00:16:29,840 --> 00:16:32,700 কতবার চাই আমি যাচ্ছি এই উপর iterating করা হবে, 205 00:16:32,700 --> 00:16:36,100 কত কঠিন তা না কর লেঙ্গুড় ট্র্যাক হিসেবে মাথায় রাখতে হবে 206 00:16:36,100 --> 00:16:38,400 সেইসাথে আমার iterator, এবং যে ভালো জিনিস. 207 00:16:40,730 --> 00:16:42,480 কিন্তু যে -? >> [ছাত্রদের] হ্যাঁ. 208 00:16:42,480 --> 00:16:48,270 এটা সম্ভব, কিন্তু নকশা সিদ্ধান্ত পদ, আপনি অপশন তৌল করা আছে. 209 00:16:53,850 --> 00:17:01,090 >> এখানে কোড একটি কঙ্কাল যে আপনি একটি লিঙ্ক তালিকায় প্রতিটি উপাদান মুক্ত করা সম্ভব হবে. 210 00:17:01,090 --> 00:17:05,460 আবার, যেহেতু আমি একটি তালিকা সংযুক্ত উপর iterating করছি, আমি কার্সার কোন না কোন রকমের চান চলেছি 211 00:17:05,460 --> 00:17:08,670 অথবা iterator. 212 00:17:08,670 --> 00:17:14,640 আমরা পর্যন্ত কার্সার হয় শূন্য iterating হয়. 213 00:17:14,640 --> 00:17:17,640 আপনি যখন আপনার কার্সার হয় শূন্য পুনরুক্তি না চান 214 00:17:17,640 --> 00:17:20,579 কারণ তার মানে হল তালিকায় কিছু না. 215 00:17:20,579 --> 00:17:25,069 তাই এখানে আমি একটি অস্থায়ী করা নোডের * 216 00:17:25,069 --> 00:17:29,610 প্রতি নির্দেশ কি আমি বিবেচনা করছি আমার তালিকার প্রথম, 217 00:17:29,610 --> 00:17:35,340 এবং তারপর আমি আমার কার্সার এগিয়ে 1 এবং তারপর বিনামূল্যে যাই হোক না কেন আমি অস্থায়ী সংগ্রহস্থলের মধ্যে ছিল সরাতে. 218 00:17:38,460 --> 00:17:43,650 >> এখন আমরা সংযুক্ত তালিকার মধ্যে ঢোকাতে আসা. 219 00:18:00,200 --> 00:18:09,660 আমি আমার সংযুক্ত তালিকার তিন নোড আছে, এবং সহজ ক্ষেত্রে এর সঙ্গে যেতে দেওয়া 220 00:18:09,660 --> 00:18:18,970 যেখানে আমরা আমাদের লিঙ্ক তালিকা শেষে অন্য নোড সন্নিবেশ করতে চান. 221 00:18:18,970 --> 00:18:25,980 যাও না যে, আমরা সব কি হয় আমরা তর্ক করা হবে 222 00:18:25,980 --> 00:18:32,100 যেখানে লিঙ্ক তালিকা বর্তমান শেষ হয় খুঁজে, যেটা নোড যাও নাল প্রতি নির্দেশ করা হয় - 223 00:18:32,100 --> 00:18:33,850 এই যে এক - 224 00:18:33,850 --> 00:18:37,260 এবং তারপর, বলতে আসলে, এই এক নোড শেষ হবে না; 225 00:18:37,260 --> 00:18:39,830 আমরা আসলে করছি অন্য কেউ থাকে না. 226 00:18:39,830 --> 00:18:46,260 সুতরাং আমরা এই বর্তমান এক বিন্দু যাই হোক না কেন আমরা করছি সন্নিবেশ করতে হবে. 227 00:18:46,260 --> 00:18:50,080 তাই এখন এখানে এই লাল ব্যক্তি হয়ে লিঙ্ক তালিকা শেষ নোড. 228 00:18:50,080 --> 00:18:56,080 তাই লিঙ্ক তালিকা নোডের মধ্যে সর্বশেষ বৈশিষ্ট্য হলো এটা নাল স্থানটিকে চিহ্নিত করে. 229 00:18:56,080 --> 00:19:09,380 তখন আমরা কি কি করতে হবে এই লাল লোক এর পয়েন্টার যাও নাল সেট হয়. এখন পর্যন্ত. 230 00:19:09,380 --> 00:19:25,370 >> যদি তা কিন্তু আমরা মধ্যে দ্বিতীয় এবং তৃতীয় এক একটি নোড সন্নিবেশ চেয়েছিলেন? 231 00:19:25,370 --> 00:19:28,960 যে একটি কারণ হল, আমরা নিশ্চিত করতে চাই বেশ সহজ না 232 00:19:28,960 --> 00:19:34,290 যে আমরা আমাদের লিঙ্ক তালিকায় কোনো নোডের মধ্যে যেতে না দেওয়া. 233 00:19:34,290 --> 00:19:43,450 আমরা কি করতে হবে নিশ্চিত যে আমরা প্রতিটি নিজেদের অ্যাঙ্করে করা হয়. 234 00:19:43,450 --> 00:19:49,900 উদাহরণস্বরূপ, এর এই দ্বিতীয় এক কল দিন. 235 00:19:49,900 --> 00:19:54,390 আপনি যদি বলেন, দ্বিতীয় এখন এই এক নতুন এক স্থানটিকে 236 00:19:54,390 --> 00:20:02,520 এবং আপনি কোন পয়েন্টার তৈরি আছে, তারপর যে এই লোক হারিয়ে হচ্ছে দেবে 237 00:20:02,520 --> 00:20:07,830 কারণ তাকে কোনো লিঙ্ক নেই. 238 00:20:07,830 --> 00:20:18,970 পরিবর্তে - এই আমি আবার আঁকা হবে. আমার শৈল্পিক ক্ষমতা মাফ করবেন. 239 00:20:18,970 --> 00:20:26,570 আমরা জানি যে আমরা সরাসরি নতুন এক হইনি 2 লিঙ্ক করতে পারেন. 240 00:20:26,570 --> 00:20:30,480 আমরা নিশ্চিত যে আমরা গত এক রাখা হয়েছে. 241 00:20:30,480 --> 00:20:39,200 আমরা কি কি করতে পারেন একটি অস্থায়ী পয়েন্টার আছে 242 00:20:39,200 --> 00:20:42,650 যাও উপাদান যে উপর যোগ করা যাচ্ছে. 243 00:20:42,650 --> 00:20:45,140 তখন আমরা সেখানে একটি অস্থায়ী পয়েন্টার আছে. 244 00:20:45,140 --> 00:20:50,780 যেহেতু আমরা জানি যে এই তৃতীয় একটি হচ্ছে ট্র্যাক রাখা, 245 00:20:50,780 --> 00:20:53,680 2 এখন আমাদের নতুন একটি লিঙ্ক করতে পারেন. 246 00:20:53,680 --> 00:20:57,490 এবং যদি এই নতুন লাল পলায়ন মধ্যে 2 এবং 3 এর মধ্যে হতে হবে, 247 00:20:57,490 --> 00:21:05,550 তারপর কি যে লোক এর পয়েন্টার নির্দেশ যাচ্ছে? >> [ছাত্রদের] তাপমাত্রা. 248 00:21:05,550 --> 00:21:07,490 তাপমাত্রা. হাঁ. 249 00:21:07,490 --> 00:21:15,430 আমি তখন এই লাল লোক এর পরের মান temp হবে. 250 00:21:26,090 --> 00:21:33,010 যখন আপনি সংযুক্ত তালিকার মধ্যে ঢোকাতে হয়, আমরা দেখেছি যে আমরা পারা 251 00:21:33,010 --> 00:21:38,260 সহজে শেষে একটি অস্থায়ী অ্যারে তৈরি করে কিছু যোগ করুন, 252 00:21:38,260 --> 00:21:42,850 অথবা যদি আমরা আমাদের অ্যারের মধ্যম মধ্যে কিছু যোগ করতে চেয়েছিলাম, 253 00:21:42,850 --> 00:21:46,810 তারপর এটি একটি বিট নিতে আরো কাছাকাছি shuffling হবে. 254 00:21:46,810 --> 00:21:50,240 উদাহরণস্বরূপ, যদি আপনি চান,, একটি সাজানো তালিকা সংযুক্ত আছে, 255 00:21:50,240 --> 00:21:54,880 তারপর আপনাকে ধরনের যে ব্যয় ও সুবিধার তৌল 256 00:21:54,880 --> 00:21:59,720 কারণ যদি আপনি একটি সাজানো অ্যারের করাতে চাই, যে প্রতিটি সময় যে আপনি এটি মধ্যে সন্নিবেশ মানে, 257 00:21:59,720 --> 00:22:01,630 এটি কিছুটা সময় নিতে হচ্ছে. 258 00:22:01,630 --> 00:22:05,500 যাইহোক, যদি আপনি চান পরে, আমরা খুঁজে পাবেন হিসাবে আমরা করতে চান, 259 00:22:05,500 --> 00:22:10,280 একটি লিঙ্ক তালিকা মাধ্যমে অনুসন্ধান তারপর, এটা সহজ যদি আপনি কি জানেন যে অনুক্রমে সব হতে পারে. 260 00:22:10,280 --> 00:22:15,340 সুতরাং আপনি যে ব্যয় ও সুবিধার তৌল করতে চাইতে পারেন. 261 00:22:20,150 --> 00:22:27,740 >> আরেকটি উপায় একটি লিঙ্ক তালিকা মধ্যে সন্নিবেশ একটি তালিকা খুব প্রারম্ভে মধ্যে সন্নিবেশ করা হয়. 262 00:22:27,740 --> 00:22:34,700 যদি আমরা এখানে আমাদের নোঙ্গর আঁকা - এই হল আমাদের মাথা - 263 00:22:34,700 --> 00:22:40,960 এবং তারপর এই ব্যক্তিদের এটি যাও লিঙ্ক, 264 00:22:40,960 --> 00:22:48,460 এবং তারপর আমরা একটি নতুন প্রারম্ভ ঢোকানো করা নোড আছে, 265 00:22:48,460 --> 00:22:52,590 তাহলে কি আমরা করতে চাইবেন? 266 00:22:55,220 --> 00:23:03,580 কি বলছে ঠিক আমি নীল লাল লিঙ্ক করতে চান তাদের সাথে ভুল করে, 267 00:23:03,580 --> 00:23:05,790 কারণ যে প্রথম এক? 268 00:23:05,790 --> 00:23:08,570 এখানে কি ঘটতে পারে? 269 00:23:08,570 --> 00:23:12,130 এই তিনটি সব হারিয়ে যাবে না. 270 00:23:12,130 --> 00:23:14,140 তাই আমরা তা করতে না চান. 271 00:23:14,140 --> 00:23:21,430 আবার, আমরা যে আমরা অস্থায়ী পয়েন্টার কিছু শেখা প্রয়োজন আছে করেছি. 272 00:23:21,430 --> 00:23:34,470 এর একটা লোক এই অস্থায়ী বিন্দু আছে চয়ন করা যাক. 273 00:23:34,470 --> 00:23:39,640 তারপর আমরা নীল এক বিন্দু অস্থায়ী থাকতে পারেন 274 00:23:39,640 --> 00:23:43,240 এবং তারপর নীল লাল বিন্দু. 275 00:23:43,240 --> 00:23:47,830 কারণ আমি মানুষ এখানে ব্যবহার করছি কারণ আমরা সত্যিই ঠাহর করা চাই 276 00:23:47,830 --> 00:23:53,180 মানুষ আয়ত্ত এবং এমনটা নিশ্চিত করা যে আমরা তাদের একটি লিংক আছে 277 00:23:53,180 --> 00:23:57,590 আগে আমরা কি অন্য যে মত হাত বা কিছু যান. 278 00:24:05,630 --> 00:24:10,650 >> এখন যে আমরা লিঙ্ক তালিকা একটা ধারনা আছে - কীভাবে আমরা যুক্ত তালিকা তৈরি করতে পারেন 279 00:24:10,650 --> 00:24:15,090 এবং টাইপ সংজ্ঞা যে একটি নোডের জন্য গঠিত জন্য কাঠামো তৈরি 280 00:24:15,090 --> 00:24:19,060 এবং তারপর এমনটা নিশ্চিত করা যে আমরা যে লিঙ্ক তালিকা মাথার একটি পয়েন্টার আছে - 281 00:24:19,060 --> 00:24:23,210 একবার আমরা যে আছে এবং আমরা জানতে পারি কিভাবে একটি অ্যারের মাধ্যমে তর্ক যাও, 282 00:24:23,210 --> 00:24:28,200 বিভিন্ন উপাদানের অ্যাক্সেস, আমরা জানি কিভাবে সন্নিবেশ এবং আমরা জানতে পারি কিভাবে তাদের মুক্ত করতে, 283 00:24:28,200 --> 00:24:30,260 তারপর আমরা বানান ভুল করে পেতে পারেন. 284 00:24:30,260 --> 00:24:38,150 স্বাভাবিক হিসাবে, আমরা প্রশ্নগুলির একটি অধ্যায় যে অপারেটিং আপনাকে পেতে হবে সংযুক্ত তালিকার সঙ্গে ব্যবহৃত আছে 285 00:24:38,150 --> 00:24:41,750 এবং যেমন queues এবং stacks হিসাবে ভিন্ন কাঠামোর. 286 00:24:41,750 --> 00:24:46,000 তারপর আমরা ভুল বানান সরাতে পারেন. 287 00:24:46,000 --> 00:24:55,170 >> ডিস্ট্রিবিউশনের মধ্যে বানান ভুল কোড গুরুত্বপূর্ণ ফাইলের একটি দম্পতি আছে. 288 00:24:55,170 --> 00:24:58,850 আমাদের প্রথম লক্ষ্য করা যে আমরা এই এখানে Makefile আছে, 289 00:24:58,850 --> 00:25:03,040 যা সত্যিই আমরা আগে সম্মুখীন হইনি. 290 00:25:03,040 --> 00:25:10,090 আপনি যদি pset5 ফোল্ডার ভিতরে লাগছিল, আপনি যে আপনি একটি. জ ফাইল আছে বিজ্ঞপ্তি চাই, 291 00:25:10,090 --> 00:25:12,530 তারপর আপনি দুই. গ ফাইল আছে. 292 00:25:12,530 --> 00:25:18,920 কি এই Makefile আছে আগে হয়, আমরা শুধু টাইপ করতে হবে এবং তারপর প্রোগ্রামের নাম 293 00:25:18,920 --> 00:25:25,550 এবং তারপর আমরা সব এই আর্গুমেন্ট এবং পতাকার কম্পাইলার সালে পাশ দেখতে চাই. 294 00:25:25,550 --> 00:25:30,580 কি Makefile আছে আমাদের একযোগে একাধিক ফাইল কম্পাইল করতে পারবেন 295 00:25:30,580 --> 00:25:34,650 যে পতাকা আমরা চাই মধ্যে পাস করে. 296 00:25:34,650 --> 00:25:41,300 এখানে আমরা দেখতে এখানে আছে একটি হেডার ফাইলটি. 297 00:25:41,300 --> 00:25:43,730 তারপর আসলে আমরা দুটি সোর্স ফাইল আছে. 298 00:25:43,730 --> 00:25:47,520 আমাদের সাথে আছে speller.c এবং dictionary.c. 299 00:25:47,520 --> 00:25:54,560 আপনি যদি চান Makefile সম্পাদনা স্বাগত হয়. 300 00:25:54,560 --> 00:26:03,310 এখানে উল্লেখ্য যে যদি টাইপ করতে পরিষ্কার, তারপর এটি কী জন্য আসলে কিছু সরিয়ে 301 00:26:03,310 --> 00:26:06,340 যা কোর. 302 00:26:06,340 --> 00:26:09,190 আপনি যদি একটি সেগমেন্টেশন ফল্ট না, মূলত আপনাকে একটি কোর ডাম্প পেতে. 303 00:26:09,190 --> 00:26:13,260 তাই এই অরুপ সামান্য ফাইলটি আপনার নির্দেশিকা নামক কোর মধ্যে প্রদর্শিত হবে. 304 00:26:13,260 --> 00:26:16,310 আপনি যে একে পরিষ্কার করতে সরাতে চাইবেন. 305 00:26:16,310 --> 00:26:20,940 এটা কোনো exe ফাইল মুছে ফেলা হয় ও. ণ ফাইল. 306 00:26:27,900 --> 00:26:30,220 >> যাক এর মধ্যে dictionary.h কটাক্ষপাত. 307 00:26:30,220 --> 00:26:34,410 এই বলে যে এটি একটি অভিধান এর কার্যকারিতা ঘোষণা করে. 308 00:26:34,410 --> 00:26:39,530 আমরা একটি অভিধানে কোন শব্দ জন্য সর্বাধিক দৈর্ঘ্য আছে. 309 00:26:39,530 --> 00:26:45,130 আমরা যে এই শব্দ দীর্ঘতম সম্ভব হবে. এটা দ্বারা 45 এর মধ্যে. 310 00:26:45,130 --> 00:26:48,900 তাই আমরা কোনো শব্দ যে দৈর্ঘ্য অতিক্রম আছে চলুন না. 311 00:26:48,900 --> 00:26:50,980 এখানে আমরা ফাংশন এগুলির নমুনা আছে. 312 00:26:50,980 --> 00:26:55,290 কারণ আমরা যে কি আমরা এই pset জন্য হবে করছেন নেই প্রকৃত বাস্তবায়ন না. 313 00:26:55,290 --> 00:26:59,940 কিন্তু কি আছে এই হল যেহেতু আমরা এখানে বৃহত্তর ফাইল সঙ্গে লেনদেন করছেন 314 00:26:59,940 --> 00:27:06,650 এবং একটি বড় স্কেলে কার্যকারিতা, এটি একটি. জ ফাইল আছে দরকারী 315 00:27:06,650 --> 00:27:11,290 যাতে অন্য কেউ আপনার পড়া বা কোড ব্যবহার করে কি করছেন বুঝতে পারেন. 316 00:27:11,290 --> 00:27:17,910 এবং হয়তো তারা প্রয়োগ করতে চান চেষ্টা করে যদি আপনি হ্যাশ টেবিল বা তদ্বিপরীত করেছিল. 317 00:27:17,910 --> 00:27:21,850 তারপর তারা আমার চাহিদার ফাংশন বলা যায়, 318 00:27:21,850 --> 00:27:26,950 প্রকৃত বাস্তবায়ন যাও পৃথক যাচ্ছে তবে এই প্রোটোটাইপ পরিবর্তন করবে না. 319 00:27:26,950 --> 00:27:33,280 এখানে আমরা, চেক আছে যা ফেরৎ সত্য যদি একটি শব্দ অভিধান দেওয়া হয়. 320 00:27:33,280 --> 00:27:39,800 তারপর আমরা লোড, যা মূলত একটি অভিধান ফাইলে প্রদর্শিত আছে 321 00:27:39,800 --> 00:27:44,360 এবং তারপর কিছু ডাটা স্ট্রাকচার তা লোড করা. 322 00:27:44,360 --> 00:27:47,500 আমরা আকার আছে, যা, যখন বলা হয়, আপনার অভিধানের আকার ফেরৎ, 323 00:27:47,500 --> 00:27:50,310 কতগুলি শব্দ এটি মধ্যে সংরক্ষিত হয়, 324 00:27:50,310 --> 00:27:54,390 এবং তারপর, আন যা মুক্ত সমস্ত মেমরি আপ যে আপনি নেওয়া হতে পারে 325 00:27:54,390 --> 00:27:57,900 যখন আপনার অভিধান তৈরি. 326 00:28:01,070 --> 00:28:03,590 >> চলুন dictionary.c কটাক্ষপাত করা. 327 00:28:03,590 --> 00:28:10,490 আমরা দেখতে যে এটা দেখায় এখন শুধু তা এই TODOs সব ছাড়া আছে dictionary.h অনুরূপ,. 328 00:28:10,490 --> 00:28:16,980 এবং যাতে আপনার পেশা. অবশেষে, আপনি ভরাট এই কোড সব হবে speller.c আউট. 329 00:28:16,980 --> 00:28:21,540 Dictionary.c, যখন চালানো, কিছু করতে চাচ্ছ না হয়, 330 00:28:21,540 --> 00:28:29,590 আমরা বানান পরীক্ষক প্রকৃত বাস্তবায়ন দেখতে speller.c দিকে তাকান. 331 00:28:29,590 --> 00:28:32,060 যদিও আপনার এই কোড কোন সম্পাদনা করা চলুন না, 332 00:28:32,060 --> 00:28:38,050 এটা যাও, পড়তে যখন চাহিদার বলা হয় তা বুঝতে পারার দরকার, যখন আমি চেক কলিং, 333 00:28:38,050 --> 00:28:42,350 ঠিক, এটা বুঝতে ছকা, ফাংশন কিভাবে কাজ করে দেখুন. 334 00:28:42,350 --> 00:28:49,860 আমরা দেখতে যে এটা সঠিক ব্যবহারের জন্য চেক করা হয়. 335 00:28:49,860 --> 00:28:55,200 মূলত, যখন কেউ speller রান, এটি ইঙ্গিত করে যে এটা ঐচ্ছিক 336 00:28:55,200 --> 00:29:00,950 তাদের জন্য একটি অভিধান ফাইলে কারণ যাচ্ছে একটি ডিফল্ট অভিধান ফাইল আছে এর পাস করার জন্য. 337 00:29:00,950 --> 00:29:05,410 এবং তারপর তারা টেক্সট যাও বানান পরীক্ষা পাস করা আছে. 338 00:29:05,410 --> 00:29:11,410 সময়ের সঙ্গে সঙ্গে rusage পুলিশ এই pset একটি অংশ কারণ যা আমরা পরে চুক্তি হবে 339 00:29:11,410 --> 00:29:14,790 না কেবল পাবার একটি কার্যকরী বানান পরীক্ষক কাজ 340 00:29:14,790 --> 00:29:17,190 কিন্তু আসলে তা দ্রুত করা পেয়ে. 341 00:29:17,190 --> 00:29:22,040 এবং অতএব যে যেখানে rusage ইন আসা যাচ্ছে 342 00:29:22,040 --> 00:29:28,740 এখানে, আমরা আমাদের dictionary.c ফাইলের মধ্যে একটিতে প্রথম কল দেখতে, যা চাহিদার. 343 00:29:28,740 --> 00:29:34,720 লোড ফেরৎ সত্য বা মিথ্যা - সাফল্যের উপর সত্য, ব্যর্থতা উপর মিথ্যা. 344 00:29:34,720 --> 00:29:41,400 তাই আপনি যদি সঠিকভাবে অভিধান লোড হয় না, তারপরে speller.c 1 ফিরে যান এবং অব্যাহতিপ্রাপ্ত হবে. 345 00:29:41,400 --> 00:29:47,920 কিন্তু যদি এটি সঠিকভাবে লোড আছে, তাহলে এটি অবিরত যাচ্ছে. 346 00:29:47,920 --> 00:29:50,740 আমরা অবিরত, এবং আমরা কিছু ফাইল ইনপুট / আউটপুট এখানে দেখতে, 347 00:29:50,740 --> 00:29:56,210 যেখানে এটি টেক্সট ফাইল খোলার সাথে ডিল করা যাচ্ছে. 348 00:29:56,210 --> 00:30:04,640 এখানে, এই কি আছে প্রত্যেক টেক্সট একক শব্দ বানান পরীক্ষা করা হবে. 349 00:30:04,640 --> 00:30:09,270 তাই speller.c অধিকার এখানে করছে টেক্সট ফাইলে iterating প্রতিটি শব্দের উপর হয় 350 00:30:09,270 --> 00:30:12,790 এবং তারপর অভিধানে চেক. 351 00:30:24,680 --> 00:30:32,350 এখানে, আমরা একটি বুলিয়ান misspelled যে যদি চেক ফেরৎ সত্য বা না দেখতে হবে আছে. 352 00:30:32,350 --> 00:30:37,110 যদি শব্দ অভিধানে আসলে তারপর, চেক সত্য ফিরে আসবে. 353 00:30:37,110 --> 00:30:39,760 তার মানে যে শব্দ misspelled না. 354 00:30:39,760 --> 00:30:45,330 সুতরাং misspelled মিথ্যা হতে পারে, এবং সে জন্যই আমরা ঠুং ঠুং শব্দ আছে, ইঙ্গিত করে. 355 00:30:45,330 --> 00:30:56,320 আমরা যাওয়া রাখা, এবং তারপর এটি কতগুলি শব্দ misspelled ট্র্যাক রাখে 356 00:30:56,320 --> 00:30:58,910 ফাইলের মধ্যে আছে. 357 00:30:58,910 --> 00:31:03,870 এটা চলতে এবং ফাইল প্রচেষ্টা. 358 00:31:03,870 --> 00:31:09,250 তারপর এখানে, এটি রিপোর্ট কতগুলি misspelled শব্দগুলি আপনি চান ছিল. 359 00:31:09,250 --> 00:31:12,680 এটি হিসাব কত সময় এটি অভিধান লোড নেন, 360 00:31:12,680 --> 00:31:15,080 কত সময় এটা চেক গ্রহণ করেন, 361 00:31:15,080 --> 00:31:18,510 কত সময় তা নিরূপণ আকার গ্রহণ করে, 362 00:31:18,510 --> 00:31:21,260 যা, হিসাবে আমরা যেতে হবে, খুব ছোট করা উচিত, 363 00:31:21,260 --> 00:31:25,390 এবং তারপর কত সময় অভিধান আন এটা গ্রহণ করেন. 364 00:31:25,390 --> 00:31:27,700 এখানে আপ উপরে আমরা এখানে আন কল দেখুন. 365 00:31:27,700 --> 00:31:52,690 যদি আকার জন্য এখানে আমরা চেক, 366 00:31:52,690 --> 00:31:59,050 তারপর আমরা দেখতে যে এখানে মাপ কল যেখানে এটি অভিধান মাপ নির্ধারণ করে. 367 00:32:05,730 --> 00:32:07,100 জট্টিল. 368 00:32:07,100 --> 00:32:10,920 >> এই pset জন্য আমাদের টাস্ক চাপ, যা অভিধান লোড হবে বাস্তবায়ন হয় 369 00:32:10,920 --> 00:32:15,480 ডাটা স্ট্রাকচার - যেটা আপনি পছন্দ করেন, এটি একটি হ্যাশ টেবিল বা একটি চেষ্টা করে দেখুন - 370 00:32:15,480 --> 00:32:18,810 সঙ্গে অভিধান ফাইল থেকে শব্দ. 371 00:32:18,810 --> 00:32:25,290 এর পরে আকার, যা অভিধানে শব্দের সংখ্যা প্রত্যাবর্তন করা আছে. 372 00:32:25,290 --> 00:32:29,860 এবং যদি আপনি একটি স্মার্ট ভাবে লোড বাস্তবায়ন তারপর, আকার প্রশংসনীয় সহজ হওয়া উচিত. 373 00:32:29,860 --> 00:32:33,860 এর পরে, পরীক্ষা আছে যা যদি কোনো নির্দিষ্ট শব্দ অভিধান হয় পরীক্ষা করবে. 374 00:32:33,860 --> 00:32:38,690 সুতরাং speller.c একটি স্ট্রিং পাস, এবং তারপরে আপনি যে কিনা চেক স্ট্রিং আছে 375 00:32:38,690 --> 00:32:41,610 আপনার অভিধান মধ্যে অন্তর্ভুক্ত করা হয়. 376 00:32:41,610 --> 00:32:46,750 যে সাধারণভাবে আমরা মান অভিধান আছে লক্ষ্য করুন, 377 00:32:46,750 --> 00:32:53,020 কিন্তু এই pset মধ্যে, মূলত কোনো অভিধান কোন ভাষায় গৃহীত. 378 00:32:53,020 --> 00:32:57,040 সুতরাং আমরা যে শব্দ হয় ভিতরে অনুমান করতে পারে না. 379 00:32:57,040 --> 00:33:03,090 শব্দ FOOBAR একটি নির্দিষ্ট অভিধান যে আমরা পাস ইন সংজ্ঞায়িত করা যায়নি 380 00:33:03,090 --> 00:33:07,920 এবং তারপর আমরা, আন আছে যা মেমরি অভিধান থেকে মুক্ত করে. 381 00:33:07,920 --> 00:33:11,930 >> প্রথমত, আমি হ্যাশ টেবিল পদ্ধতি উপর যেতে চাই 382 00:33:11,930 --> 00:33:14,630 সম্পর্কে কিভাবে আমরা যারা চার র সমস্ত কর্ম ব্যবহার বাস্তবায়ন হতে পারে, 383 00:33:14,630 --> 00:33:18,650 এবং তারপর আমি উপর পদ্ধতি চেষ্টা করে যান, যাব, আমরা যারা চার ফাংশন বাস্তবায়ন, 384 00:33:18,650 --> 00:33:22,720 এবং কিছু সাধারণ টিপস সম্পর্কে আলাপ শেষ এ যখন আপনি pset তৈরি করছি 385 00:33:22,720 --> 00:33:27,870 এবং দেয়া আছে যে কিভাবে আপনি ব্যবহার করতে সক্ষম হতে পারেন মেমরি তথ্য ফাঁসের জন্য চেক Valgrind. 386 00:33:27,870 --> 00:33:30,550 >> যাক এর হ্যাশ টেবিল পদ্ধতি ঢোকা. 387 00:33:30,550 --> 00:33:35,910 একটি হ্যাশ টেবিল buckets একটি তালিকা উপস্থিত করা হয়. 388 00:33:35,910 --> 00:33:43,010 প্রতিটি মান, প্রতিটি শব্দ এই buckets এক ঢোকা যাও, যাচ্ছে. 389 00:33:43,010 --> 00:33:53,200 একটি হ্যাশ টেবিল আদর্শভাবে সমানভাবে এই মান সব বিতরণ যে আপনি পার করছি 390 00:33:53,200 --> 00:33:57,160 এবং তারপর যেমন যে বালতি মধ্যে মান পূরণ করা তাদের প্রতি বাকেট 391 00:33:57,160 --> 00:34:02,000 একটি মান সমান এটি সংখ্যা সম্পর্কে আছে. 392 00:34:02,000 --> 00:34:09,630 একটি হ্যাশ টেবিল জন্য গঠন, আমরা লিঙ্ক তালিকার একটি অ্যারে আছে. 393 00:34:09,630 --> 00:34:17,900 আমরা কি করব তা হল যখন আমরা একটি মান মধ্যে পাস, আমরা যেখানে যে মান অন্তর্গত উচিত চেক, 394 00:34:17,900 --> 00:34:23,840 যা বালতি এটি জন্যে, এবং তারপর যুক্ত তালিকা যে বালতি সাথে যুক্ত করে রাখুন. 395 00:34:23,840 --> 00:34:28,199 এখানে, আমি কি আছে একটি হ্যাশ ফাংশন. 396 00:34:28,199 --> 00:34:31,320 এটা কোন int হ্যাশ টেবিল. 397 00:34:31,320 --> 00:34:38,540 সুতরাং প্রথম জন্য বালতি, 10 নীচের কোনো পূর্ণসংখ্যা প্রথম বালতি ঢোকা. 398 00:34:38,540 --> 00:34:42,190 10 উপরোক্ত কোন পূর্ণসংখ্যার নীচের কিন্তু দ্বিতীয় মধ্যে 20 যেতে, 399 00:34:42,190 --> 00:34:44,179 এবং তারপর তাই এবং তাই ঘোষণা. 400 00:34:44,179 --> 00:34:52,370 আমার জন্য, প্রতিটি বালতি এই সংখ্যার প্রতিনিধিত্বমূলক হয়. 401 00:34:52,370 --> 00:34:59,850 যাইহোক, বলে আমি 50 উদাহরণস্বরূপ যাও পাস, ছিল. 402 00:34:59,850 --> 00:35:07,490 এটি প্রদর্শিত হিসাবে যদি প্রথম তিনটি দশ সংখ্যার একটি পরিসীমা থাকে. 403 00:35:07,490 --> 00:35:12,570 কিন্তু আমি আমার হ্যাশ টেবিল পূর্ণসংখ্যার কোনো সাজানোর নিয়ে মঞ্জুরি দিতে চান, 404 00:35:12,570 --> 00:35:19,860 অতএব আমি শেষ বালতি মধ্যে ফিল্টার 30 সর্বোপরি সংখ্যা আউট হবে. 405 00:35:19,860 --> 00:35:26,660 এবং তারপর যাতে অসম হ্যাশ টেবিল এক ধরনের দেবে. 406 00:35:31,330 --> 00:35:35,640 যাও পুনরাবৃত্তি করা, একটি হ্যাশ টেবিল শুধুমাত্র buckets একটি শ্রেণীবিন্যাস 407 00:35:35,640 --> 00:35:38,590 যেখানে প্রতি বালতি একটি যুক্ত তালিকা. 408 00:35:38,590 --> 00:35:43,730 তাই যেখানে প্রতি যায় মান নির্ধারণ, যা বালতি তা যায়, 409 00:35:43,730 --> 00:35:46,260 আপনি কি একটা হ্যাশ ফাংশন বলা হয় এর চান চলুন 410 00:35:46,260 --> 00:35:55,010 যে একটি মান নেয় এবং তারপর বলে এই মান একটি নির্দিষ্ট বালতি অনুরূপ. 411 00:35:55,010 --> 00:36:00,970 এই উদাহরণে, সুতরাং আপ উপরে, আমার হ্যাশ ফাংশন প্রতিটি মান গ্রহণ করে. 412 00:36:00,970 --> 00:36:03,020 এটি চেক কিনা এটি ছিল 10 এর কম. 413 00:36:03,020 --> 00:36:05,360 যদি এটি ছিল, এটি প্রথম বালতি মধ্যে রাখা হবে. 414 00:36:05,360 --> 00:36:08,910 সেটি পরীক্ষা করে কিনা এটা কম 20, দ্বিতীয় মধ্যে রাখে এটা যদি সত্যি হয় তবে, 415 00:36:08,910 --> 00:36:12,880 চেক করে যদি 30 তুলনায় কম, এবং তারপর তৃতীয় বালতি মধ্যে এটা বন্ধ রাখে, 416 00:36:12,880 --> 00:36:16,990 এবং তারপর অন্য সব ঠিক চতুর্থ বালতি যাও পড়ে. 417 00:36:16,990 --> 00:36:20,110 তাই যখনই আপনি একটি মান আছে, আপনার হ্যাশ ফাংশন 418 00:36:20,110 --> 00:36:25,420 উপযুক্ত বালতি মধ্যে যে মান স্থাপন করবে. 419 00:36:25,420 --> 00:36:32,430 হ্যাশ ফাংশন মূলত কতজন buckets আপনার জানা প্রয়োজন. 420 00:36:32,430 --> 00:36:37,960 তোমার হ্যাশ টেবিল আকার, আপনি buckets সংখ্যা, 421 00:36:37,960 --> 00:36:41,190 যে একটি নির্দিষ্ট নম্বর যে আপনার উপরে, এর জন্য আপনি কি ঠিক হতে যাচ্ছে, 422 00:36:41,190 --> 00:36:43,590 কিন্তু এটি একটি নির্দিষ্ট সংখ্যা হতে যাচ্ছে. 423 00:36:43,590 --> 00:36:51,840 সুতরাং আপনার যে হ্যাশ ফাংশন নির্ধারণ যা বালতি প্রতি কী করা যায় নির্ভর করা 424 00:36:51,840 --> 00:36:54,450 যেমন যে সমানভাবে এটি বিতরণ করা হচ্ছে. 425 00:36:56,150 --> 00:37:03,820 অনুরূপ লিঙ্ক তালিকা আমাদের বাস্তবায়ন এখন, হ্যাশ টেবিল প্রত্যেক নোডের যাও 426 00:37:03,820 --> 00:37:07,000 না আসলে একটি টাইপ গৃহস্থালির কাজ আছে না. 427 00:37:07,000 --> 00:37:14,340 সুতরাং আমরা একটি গৃহস্থালি অ্যারে বলা শব্দ এবং তারপর পরবর্তী নোডের অন্য পয়েন্টার আছে, 428 00:37:14,340 --> 00:37:19,010 যা ইন্দ্রিয় তোলে না কারণ এটি একটি লিঙ্ক তালিকা হতে যাচ্ছে. 429 00:37:19,010 --> 00:37:24,350 যখন আমরা তালিকা লিঙ্ক করে মনে রাখবেন, আমি একটি নোড * নামক মাথা তৈরি 430 00:37:24,350 --> 00:37:31,060 যে লিঙ্ক তালিকায় প্রথম নোডের যাও প্রতি নির্দেশ ছিল. 431 00:37:31,060 --> 00:37:34,020 কিন্তু আমাদের জন্য হ্যাশ টেবিল, কারণ আমরা একাধিক লিঙ্ক তালিকা আছে, 432 00:37:34,020 --> 00:37:37,520 আমরা কি করতে চান আমরা আমাদের হ্যাশ টেবিল মত হতে চাই "কি একটি বালতি?" 433 00:37:37,520 --> 00:37:43,340 একটি বালতি শুধুমাত্র নোড পয়েন্টার একটি তালিকা, 434 00:37:43,340 --> 00:37:50,620 এবং তাই বালতি প্রতিটি উপাদান আসলে তার অনুরূপ লিঙ্ক তালিকায় প্রতি নির্দেশ করা হয়. 435 00:37:56,180 --> 00:38:01,520 এই পরিকল্পিত ফিরে যেতে, আপনি দেখতে যে buckets নিজেরা তীর, 436 00:38:01,520 --> 00:38:06,980 নোড আসল না. 437 00:38:11,680 --> 00:38:16,420 এক হ্যাশ ফাংশান অপরিহার্য সম্পত্তি যে তারা নিয়ন্ত্রণবাদী. 438 00:38:16,420 --> 00:38:19,440 তার মানে যে যখনই আপনি হ্যাশ সংখ্যা 2, 439 00:38:19,440 --> 00:38:22,270 সবসময় একই বালতি করে ফেরত পাঠাবেন. 440 00:38:22,270 --> 00:38:26,440 প্রতিটি একক মান হ্যাশ ফাংশন মধ্যে যে যায়, যদি পুনরাবৃত্তি, 441 00:38:26,440 --> 00:38:29,690 একই সূচক পেতে হয়েছে. 442 00:38:29,690 --> 00:38:34,210 সুতরাং আপনার হ্যাশ ফাংশন অ্যারের সূচক ফেরত্ 443 00:38:34,210 --> 00:38:38,530 যেখানে যে মান জন্যে. 444 00:38:38,530 --> 00:38:41,790 হিসাবে আমি আগে উল্লেখ করেছে, buckets সংখ্যা সংশোধন করা হয়েছে, 445 00:38:41,790 --> 00:38:49,630 এবং তাই আপনার সূচক যে আপনি ফিরে যাও buckets সংখ্যার চেয়ে কম হতে হয়েছে 446 00:38:49,630 --> 00:38:52,680 কিন্তু 0 চেয়ে বেশী. 447 00:38:52,680 --> 00:39:00,780 কারণ আমরা পরিবর্তে শুধুমাত্র একটি লিঙ্ক তালিকা হ্যাশ ফাংশান আছে 448 00:39:00,780 --> 00:39:09,290 অথবা একটি অ্যারের হয় যে আমরা একটি নির্দিষ্ট বিভাগে ঝাঁপ সক্ষম হবে সবচেয়ে সহজে করতে চান 449 00:39:09,290 --> 00:39:11,720 যদি আমরা একটি মান বৈশিষ্ট্যগত জানা - 450 00:39:11,720 --> 00:39:14,760 পরিবর্তে সমগ্র সমগ্র অভিধান মাধ্যমে অনুসন্ধান হচ্ছে, 451 00:39:14,760 --> 00:39:18,320 এটি হচ্ছে একটি নির্দিষ্ট বিভাগে ঝাঁপ পারবেন. 452 00:39:19,880 --> 00:39:24,440 আপনার একাউন্টে যে হ্যাশ ফাংশন আদর্শভাবে নিতে হবে, 453 00:39:24,440 --> 00:39:28,980 প্রতিটি বালতি আছে কি প্রায় একই সংখ্যক. 454 00:39:28,980 --> 00:39:35,040 যেহেতু হ্যাশ টেবিল লিঙ্ক তালিকা একটি সিরিজ, 455 00:39:35,040 --> 00:39:38,480 তারপর লিঙ্ক তালিকা নিজেদের একাধিক নোড আছে যাচ্ছি. 456 00:39:38,480 --> 00:39:43,210 পূর্ববর্তী উদাহরণে, দুটি ভিন্ন সংখ্যা, যদিও তারা সমান ছিল না, 457 00:39:43,210 --> 00:39:46,950 যখন কুচি - কুচি করিয়া কাটা বস্তু, একই সূচক আবার ফিরে আসবে. 458 00:39:46,950 --> 00:39:53,620 সুতরাং যখন আপনি শব্দের সাথে ডিল করা হয় একটি শব্দ, যখন কুচি - কুচি করিয়া কাটা বস্তু 459 00:39:53,620 --> 00:39:57,450 একই অন্য শব্দ হিসাবে হ্যাশ মান হবে. 460 00:39:57,450 --> 00:40:04,140 আমরা একটি কল টাল, যখন আমরা একটি নোড যে, যখন কুচি - কুচি করিয়া কাটা বস্তু আছে, 461 00:40:04,140 --> 00:40:09,610 যে বালতি লিঙ্ক তালিকা ফাঁকা করা হবে না. 462 00:40:09,610 --> 00:40:14,180 প্রযুক্তি যা আমরা কল আছে অনুসন্ধান রৈখিক, 463 00:40:14,180 --> 00:40:22,550 যেখানে লিঙ্ক তালিকায় আপনি এবং যেখানে গিয়ে আপনি যা চান তাই খুঁজে নোড সন্নিবেশ 464 00:40:22,550 --> 00:40:25,520 কারণ আপনি একটি সংঘর্ষের আছে. 465 00:40:25,520 --> 00:40:28,070 আপনি যে একটি ট্রেড এখানে আছে, ডান হতে পারে দেখতে পারেন? 466 00:40:28,070 --> 00:40:33,760 যদি আপনি একটি খুব ছোট হ্যাশ টেবিল, একটি buckets খুব আছে, 467 00:40:33,760 --> 00:40:36,380 তারপর আপনি collisions অনেক আছে চলুন. 468 00:40:36,380 --> 00:40:40,460 কিন্তু আপনি যদি একটি খুব বড় হ্যাশ টেবিল করতে, 469 00:40:40,460 --> 00:40:44,110 আপনি সম্ভবত সেটি collisions হ্রাস করা যাচ্ছে, 470 00:40:44,110 --> 00:40:47,170 কিন্তু এটি একটি খুব বড় তথ্য গঠন হতে যাচ্ছে. 471 00:40:47,170 --> 00:40:49,310 যাচ্ছে যে সঙ্গে বিনিময় প্রথা আছে এর. 472 00:40:49,310 --> 00:40:51,310 সুতরাং যখন আপনি আপনার pset তৈরি করছি, চারপাশের খেলার চেষ্টা 473 00:40:51,310 --> 00:40:54,210 মধ্যে হয়তো আরো ছোট হ্যাশ টেবিল তৈরীর 474 00:40:54,210 --> 00:41:02,100 কিন্তু তারপর বুদ্ধিমান যে এটি একটি বিট আর বিভিন্ন উপাদান, তর্ক নিতে যাচ্ছে 475 00:41:02,100 --> 00:41:04,270 যারা সংযুক্ত তালিকা. 476 00:41:04,270 --> 00:41:09,500 >> কি বোঝা যাচ্ছে না হয় অভিধান প্রতিটি শব্দের উপর বারবার. 477 00:41:09,500 --> 00:41:13,180 এটা অভিধান একটি ফাইল পয়েন্টার পাস. 478 00:41:13,180 --> 00:41:18,050 তাই আপনার ফাইলের সুবিধা ইনপুট / আউটপুট কর্ম যে আপনি pset4 মধ্যে আয়ত্ত নিতে যাচ্ছেন 479 00:41:18,050 --> 00:41:23,010 অভিধান এবং প্রতিটি শব্দ বারবার উপর. 480 00:41:23,010 --> 00:41:26,620 আপনি অভিধান সালে একটি নতুন নোডের হত্তয়া প্রতি শব্দ করতে চান, 481 00:41:26,620 --> 00:41:32,730 এবং আপনি আপনার অভিধান ডাটা স্ট্রাকচার ভিতর যারা নোড প্রতি এক লিখুন চলুন. 482 00:41:32,730 --> 00:41:36,560 যখনই আপনি কোনো নতুন শব্দ পেতে, আপনি জানেন যে এটি একটি নোড হয়ে যাচ্ছে. 483 00:41:36,560 --> 00:41:46,590 তাই কম বয়সী আপনি যান এবং একটি নতুন শব্দ যে প্রত্যেক নোডের জন্য আপনাকে আছে পয়েন্টার malloc পারেন. 484 00:41:46,590 --> 00:41:52,610 এখানে আমি আমার নোড পয়েন্টার new_node আহ্বান করছি এবং আমি কি করছি mallocing? একটি নোডের মধ্যে মাপ. 485 00:41:52,610 --> 00:41:59,190 তারপর একটি ফাইল থেকে প্রকৃত পংক্তি পড়তে, কারণ আসলে অভিধান সংরক্ষিত হয় 486 00:41:59,190 --> 00:42:03,340 দ্বারা একটি শব্দ এবং তারপর একটি নতুন লাইন, আমরা কি সুবিধা গ্রহণ করতে পারেন 487 00:42:03,340 --> 00:42:06,520 হয় ফাংশন fscanf, 488 00:42:06,520 --> 00:42:10,280 তদ্দ্বারা ফাইলটি অভিধান ফাইলটি যে আমরা পাস করছি, 489 00:42:10,280 --> 00:42:18,900 তাই এটি একটি স্ট্রিং জন্য ফাইল স্ক্যান করা এবং শেষ যুক্তি মধ্যে জায়গা স্ট্রিং. 490 00:42:18,900 --> 00:42:26,890 আপনি যদি একটি বক্তৃতা, যখন আমরা উপর গিয়েছিলাম ফিরে প্রত্যাহার 491 00:42:26,890 --> 00:42:29,320 এবং ধরনের peeled CS50 গ্রন্থাগারের ফিরে স্তর 492 00:42:29,320 --> 00:42:33,430 আমরা fscanf একটি বাস্তবায়ন সেখানে দেখেছি. 493 00:42:33,430 --> 00:42:37,700 যাও fscanf ফিরে যান, আমরা যে ফাইল থেকে আমরা পড়ি আছে, 494 00:42:37,700 --> 00:42:42,570 আমরা যে ফাইলের মধ্যে একটি স্ট্রিং জন্য, খুঁজছেন এবং তারপর আমরা এটা করছি স্থাপন করছি 495 00:42:42,570 --> 00:42:48,340 এখানে আমি new_node> শব্দ আছে কারণ new_node একটি নোড পয়েন্টার, 496 00:42:48,340 --> 00:42:50,380 প্রকৃত নোডের একটি হইনি. 497 00:42:50,380 --> 00:42:57,100 আমি তখন new_node বলছে করছি, আমি নোড যাও যে এটি এর প্রতি নির্দেশ যেতে চান 498 00:42:57,100 --> 00:43:01,190 এবং তারপর শব্দ এই মান নির্ধারণ করুন. 499 00:43:01,190 --> 00:43:08,540 আমরা তারপর যে শব্দ নিয়ে হ্যাশ টেবিল মধ্যে সন্নিবেশ করতে চান. 500 00:43:08,540 --> 00:43:13,750 বুঝতে পারি যে আমরা একটি নোড পয়েন্টার new_node তৈরি 501 00:43:13,750 --> 00:43:18,230 কারণ আমরা যে কি নোড এর ঠিকানা হল জানতে চান চলুন 502 00:43:18,230 --> 00:43:23,940 যখন আমরা সন্নিবেশ কারণ নোড নিজেদের struct গঠন, এ 503 00:43:23,940 --> 00:43:26,380 হয় যে তারা একটি নতুন নোডের একটি ইশারা আছে. 504 00:43:26,380 --> 00:43:30,820 তখন কি যে নোড নির্দেশ না করে ঠিকানা? 505 00:43:30,820 --> 00:43:34,550 যে ঠিকানা যাও new_node হবে. 506 00:43:34,550 --> 00:43:42,140 কি যে জানার জন্য, আমরা কেন একটি নোড * একটি নোডের থেকে ভিন্ন new_node তৈরি করছেন? 507 00:43:43,700 --> 00:43:45,700 ঠিক আছে. 508 00:43:45,700 --> 00:43:52,840 আমরা একটি শব্দ আছে. যে মান new_node> শব্দ. 509 00:43:52,840 --> 00:43:55,970 যে অভিধান থেকে শব্দ যে আমরা ইনপুট করতে চান রয়েছে. 510 00:43:55,970 --> 00:44:00,210 তাই আমরা যা করে যেতে চাই হয় আমরা স্ট্রিং আমাদের হ্যাশ ফাংশন কল করতে চান 511 00:44:00,210 --> 00:44:03,780 কারণ আমাদের হ্যাশ ফাংশন একটি পংক্তিতে প্রদর্শিত হয় এবং পরে ফেরৎ একটি পূর্ণসংখ্যা আমাদের, 512 00:44:03,780 --> 00:44:12,090 যেখানে যে পূর্ণসংখ্যা হয় সূচক যেখানে যে সূচিতে hashtable যে বালতি প্রতিনিধিত্ব করে. 513 00:44:12,090 --> 00:44:18,260 আমরা যে সূচক নিতে চান এবং তারপর হ্যাশ টেবিল সূচকের যান 514 00:44:18,260 --> 00:44:26,960 এবং তারপর যে লিঙ্ক তালিকা new_node এ নোডের ব্যবহার সন্নিবেশ. 515 00:44:26,960 --> 00:44:31,950 তবে মনে রাখবেন যে আপনি আপনার নোড সন্নিবেশ করার সিদ্ধান্ত নেন, 516 00:44:31,950 --> 00:44:34,370 তা মধ্যম আছে যদি আপনি তা বাছাই করতে চান 517 00:44:34,370 --> 00:44:39,650 বা প্রারম্ভে বা শেষে, শুধুমাত্র নিশ্চিত যে আপনার সর্বশেষ নোড সর্বদা নাল স্থানটিকে করা 518 00:44:39,650 --> 00:44:46,730 কারণ যে একমাত্র উপায় যে আমরা জানি যেখানে আমাদের লিঙ্ক তালিকা সর্বশেষ উপাদান হয়. 519 00:44:50,790 --> 00:44:59,710 >> যদি আকার হল একটি পূর্ণসংখ্যা যে শব্দের অভিধান সংখ্যা উপস্থাপন করে, 520 00:44:59,710 --> 00:45:03,060 তারপর এক উপায় এই কাজের জন্য যে যখনই আকার বলা হয় 521 00:45:03,060 --> 00:45:05,840 প্রত্যেক উপাদান মাধ্যমে আমরা আমাদের হ্যাশ টেবিল যান 522 00:45:05,840 --> 00:45:09,410 এবং তারপর প্রতি হ্যাশ টেবিলের মধ্যে উপস্থিত লিঙ্ক তালিকা মাধ্যমে পুনরুক্তি করা 523 00:45:09,410 --> 00:45:13,770 এবং তারপর যে দৈর্ঘ্য, 1 নিরূপণ দ্বারা আমাদের পাল্টা 1 বৃদ্ধি. 524 00:45:13,770 --> 00:45:16,580 কিন্তু প্রত্যেক বার যে আকার বলা হয়, যে একটি দীর্ঘ সময় নিতে যাচ্ছে 525 00:45:16,580 --> 00:45:22,120 কারণ আমরা linearly হতে প্রতি একক লিঙ্ক তালিকা অনুসন্ধান চলুন. 526 00:45:22,120 --> 00:45:30,530 পরিবর্তে, এটা অনেক সহজ হবে যদি আপনি ট্র্যাক রাখতে মধ্যে কতগুলি শব্দ ইন পাস হয় এর 527 00:45:30,530 --> 00:45:36,330 তাই আপনি যদি আপনার চাহিদার ফাংশন মধ্যে একটি পাল্টা অন্তর্ভুক্ত 528 00:45:36,330 --> 00:45:42,430 প্রয়োজনীয় হিসাবে আপডেট তারপর, পাল্টা, যদি আপনি একটি বিশ্বব্যাপী পরিবর্তনশীল এটি সেট, 529 00:45:42,430 --> 00:45:44,930 মাপ দ্বারা ব্যবহার করা সক্ষম হবে. 530 00:45:44,930 --> 00:45:51,450 তাই সহজভাবে আকার যেত না এক লাইন থাকে, শুধু কাউন্টারের মান সর্বাধিক মান ফিরে, 531 00:45:51,450 --> 00:45:55,500 অভিধান মাপ, যা আপনি ইতিমধ্যে চাহিদার সঙ্গে মোকাবিলা. 532 00:45:55,500 --> 00:46:05,190 এটা কি আমি বোঝানো যখন আমি তাকে বললাম যদি আপনি একটি সহায়ক উপায় মধ্যে লোড বাস্তবায়ন, 533 00:46:05,190 --> 00:46:08,540 তারপর মাপ প্রশংসনীয় সহজ করা হচ্ছে. 534 00:46:08,540 --> 00:46:11,350 >> তাই এখন আমরা চেক পেতে. 535 00:46:11,350 --> 00:46:15,960 এখন আমরা শব্দ ইনপুট টেক্সট ফাইল থেকে আচরণ করছেন, 536 00:46:15,960 --> 00:46:19,910 এবং তাই, আমরা এই ইনপুট শব্দের কিনা সব চেক করা চলুন 537 00:46:19,910 --> 00:46:22,520 অভিধানে বা না আসলে. 538 00:46:22,520 --> 00:46:26,520 অনুরূপ একত্র, আমরা কেস insensitivity জন্য অনুমতি চান. 539 00:46:26,520 --> 00:46:32,110 আপনি নিশ্চিত হন যে সব শব্দের মধ্যে পাস করতে চাই, যদিও তারা মিশ্র কেস, 540 00:46:32,110 --> 00:46:37,840 স্ট্রিং তুলনা সঙ্গে যখন বলা হয়, হয় সমতুল্য. 541 00:46:37,840 --> 00:46:42,450 অভিধান টেক্সট ফাইল শব্দ আসলে সব ছোট হাতের. 542 00:46:42,450 --> 00:46:49,280 আরেকটি ব্যাপার হল আপনি যে সমস্ত শব্দ, প্রতিটি স্ট্রিং পাস ধারনা করতে পারি, 543 00:46:49,280 --> 00:46:53,200 হয় বর্ণানুক্রমিক অথবা apostrophes থাকতে হবে. 544 00:46:53,200 --> 00:46:58,010 Apostrophes আমাদের অভিধানে শব্দ বৈধ হতে যাচ্ছে. 545 00:46:58,010 --> 00:47:06,470 তাই আপনি যদি ঊর্ধকমা S সঙ্গে একটি শব্দ আছে, যা একটি প্রকৃত আপনার অভিধান বৈধ শব্দ 546 00:47:06,470 --> 00:47:11,650 যে আপনার হ্যাশ টেবিল বিভিন্ন নোডের মধ্যে একটি হচ্ছে. 547 00:47:13,470 --> 00:47:18,350 যদি শব্দ বিদ্যমান সঙ্গে কাজ করে পরীক্ষা করুন, তারপর আমাদের হ্যাশ টেবিল করা আছে এর. 548 00:47:18,350 --> 00:47:22,210 যদি শব্দ অভিধান হয়, তাহলে অভিধান সব শব্দের হ্যাশ টেবিল আছে, 549 00:47:22,210 --> 00:47:26,560 তাই আসুন হ্যাশ টেবিল এই শব্দ জন্য চেহারা. 550 00:47:26,560 --> 00:47:29,250 আমরা জানি যে, যেহেতু আমরা আমাদের হ্যাশ ফাংশন বাস্তবায়িত 551 00:47:29,250 --> 00:47:38,420 যেমন যে প্রত্যেক শব্দ অনন্য সবসময় একই মান হয় কুচি - কুচি করিয়া কাটা বস্তু, 552 00:47:38,420 --> 00:47:43,340 তারপর আমরা জানি যে আমাদের সমগ্র পরিবর্তে সম্পূর্ণ হ্যাশ টেবিল অনুসন্ধানের মাধ্যমে, 553 00:47:43,340 --> 00:47:48,310 আমরা আসলে সংযুক্ত তালিকার যে শব্দ যাও অন্তর্গত উচিত খুঁজে পেতে পারেন. 554 00:47:48,310 --> 00:47:51,850 যদি এটা অভিধান ছিল, তারপর যে বালতি হবে. 555 00:47:51,850 --> 00:47:57,140 আমরা কি, যদি শব্দটি হল আমাদের স্ট্রিং পাস মধ্যে নাম করতে পারি, 556 00:47:57,140 --> 00:48:01,560 আমরা ঠিক করতে পারেন যে হ্যাশ লিঙ্ক তালিকা শব্দ এবং চেহারা 557 00:48:01,560 --> 00:48:06,410 এ hashtable মান [হ্যাশ (শব্দ)]. 558 00:48:06,410 --> 00:48:12,410 সেখান থেকে, আমরা কি করব তা করা যেতে পারে, আমরা একটি নোড এই শব্দ অনুসন্ধান করার জন্য ছোট উপসেট আছে, 559 00:48:12,410 --> 00:48:16,770 এবং তাই আমরা যুক্ত তালিকা তর্ক, walkthrough আগে থেকে একটি উদাহরণ ব্যবহার করতে পারেন, 560 00:48:16,770 --> 00:48:24,110 এবং তারপর কল পালনে স্ট্রিং যেখানেই কার্সার প্রতি নির্দেশ তুলনা করা হয়, 561 00:48:24,110 --> 00:48:28,430 যে শব্দ, এবং কিনা সেই তুলনা. 562 00:48:30,280 --> 00:48:35,110 উপর নির্ভর করে পথ যে আপনি আপনার হ্যাশ ফাংশন সংগঠিত করা, 563 00:48:35,110 --> 00:48:39,260 যদি এটি সাজানো এর, আপনি মিথ্যা একটু আগে প্রত্যাবর্তন করতে সক্ষম হতে পারেন, 564 00:48:39,260 --> 00:48:43,440 কিন্তু যদি এটা আকাঁড়া, তাহলে আপনার লিঙ্ক তালিকা মাধ্যমে ঢোঁড়ন অবিরত করতে চান 565 00:48:43,440 --> 00:48:46,480 যতক্ষন না আপনি তালিকার সর্বশেষ উপাদান খুঁজে পেতে. 566 00:48:46,480 --> 00:48:53,320 এবং যদি এখনও আপনার শব্দ পাওয়া সময় আপনি লিঙ্ক তালিকার শেষে পৌঁছেছেন দ্বারা হইনি, 567 00:48:53,320 --> 00:48:56,890 তার মানে আপনার শব্দ অভিধান মধ্যে বিদ্যমান নয়, 568 00:48:56,890 --> 00:48:59,410 এবং যাতে শব্দ অবৈধ, 569 00:48:59,410 --> 00:49:02,730 এবং চেক মিথ্যা ফেরত পাঠাবেন. 570 00:49:02,730 --> 00:49:09,530 >> এখন আমরা আন আসে, যেখানে আমরা নোড যে আমরা malloc'd আছে সব মুক্ত করতে চাই, 571 00:49:09,530 --> 00:49:14,050 তাই আমাদের বিনামূল্যে হ্যাশ টেবিল নোডের ভিতর সব. 572 00:49:14,050 --> 00:49:20,270 আমরা লিঙ্ক তালিকা এবং বিনামূল্যে যে বিভিন্ন নোডের মধ্যে সমস্ত সমস্ত পুনরুক্তি উপর চান চলুন. 573 00:49:20,270 --> 00:49:29,350 যদি আপনি উপরোক্ত walkthrough চেহারা উদাহরণ যেখানে আমরা একটি তালিকা সংযুক্ত মুক্ত, 574 00:49:29,350 --> 00:49:35,140 তারপর আপনি হ্যাশ টেবিল প্রতিটি উপাদান জন্য যে প্রক্রিয়ার পুনরাবৃত্তি করতে চাইবেন. 575 00:49:35,140 --> 00:49:37,780 এবং আমি এই বিষয়ে walkthrough শেষ দিকে যাবেন, 576 00:49:37,780 --> 00:49:46,600 কিন্তু Valgrind একটি হাতিয়ার যেখানে আপনি যদি আপনি সঠিকভাবে মুক্ত আছে দেখতে পারেন 577 00:49:46,600 --> 00:49:53,600 প্রতিটি নোডের মধ্যে যে আপনি বা malloc'd অন্য যে আপনি malloc'd করেছি, অন্য কোনো পয়েন্টার করেছি. 578 00:49:55,140 --> 00:50:00,530 সুতরাং যে হ্যাশ টেবিল, যেখানে আমরা একটি buckets সসীম এর নম্বর আছে 579 00:50:00,530 --> 00:50:09,220 এবং একটি হ্যাশ ফাংশন যে কোনো মান গ্রহণ করা এবং তারপর একটি নির্দিষ্ট বালতি যে মান নির্ধারণ করতে হবে. 580 00:50:09,220 --> 00:50:13,340 >> এখন আমরা চেষ্টা করে আসা. 581 00:50:13,340 --> 00:50:18,750 ভালো বর্ণন ধরনের চেষ্টা করে, এবং আমি এও আঁকা একটি উদাহরণ আউট করব. 582 00:50:18,750 --> 00:50:25,630 মূলত, আপনি একটি সম্ভাব্য অক্ষর সমগ্র অ্যারে আছে, 583 00:50:25,630 --> 00:50:29,210 এবং তারপর যখনই আপনি একটি শব্দ গঠন করছেন, 584 00:50:29,210 --> 00:50:36,490 যে চিঠি একটি সম্ভাবনার বিস্তৃত একটি অভিধান ব্যবহার করা যেতে পারে লিঙ্ক. 585 00:50:36,490 --> 00:50:40,840 কিছু শব্দ সি দিয়ে শুরু কিন্তু একটি দিয়ে তারপরে অবিরত, 586 00:50:40,840 --> 00:50:42,960 কিন্তু অন্যদের হে অগ্রসর উদাহরণস্বরূপ,. 587 00:50:42,960 --> 00:50:51,090 একটি trie ঐ শব্দের সম্ভাব্য সমাহার সব visualizing একটি উপায়. 588 00:50:51,090 --> 00:50:59,070 একটি trie চিঠি যে শব্দের গঠন করা ক্রম ট্র্যাক রাখতে হবে, 589 00:50:59,070 --> 00:51:08,280 শাখাবিন্যাস বন্ধ যখন প্রয়োজন, তখন এক চিঠি বর্ণের একাধিক দ্বারা পারেন অনুসরণ করা, 590 00:51:08,280 --> 00:51:16,630 এবং প্রতিটি বিন্দুতে শেষে ইঙ্গিত কিনা যে শব্দ বা বৈধ হয় না 591 00:51:16,630 --> 00:51:30,120 কারণ যদি আপনি শব্দ Mat বানান করছেন, এম আমি না মনে হয় একটি বৈধ শব্দ, কিন্তু Mat হয়. 592 00:51:30,120 --> 00:51:37,820 আপনার trie যাতে এবং, এটা যে যে Mat পরে আসলে এর একটি বৈধ শব্দ নির্দেশ করে. 593 00:51:41,790 --> 00:51:48,590 আমাদের trie প্রতিটি নোডের প্রকৃতপক্ষে যাও নোড পয়েন্টার একটি অ্যারের থাকতে হচ্ছে, 594 00:51:48,590 --> 00:51:52,970 এবং আমরা, বিশেষ করে যারা আছে নোড পয়েন্টার 27, চলুন, 595 00:51:52,970 --> 00:52:00,550 বর্ণমালার প্রতিটি অক্ষর হিসেবে ঊর্ধকমা অক্ষরের জন্য একটি করে. 596 00:52:00,550 --> 00:52:10,450 যে অ্যারের মধ্যে প্রতিটি উপাদান নিজেই অন্য নোড দিকে নির্দেশ করে যাচ্ছে. 597 00:52:10,450 --> 00:52:14,020 তাই যদি হয় যে নোড শূন্য, যে পরে যদি কিছুই আছে, 598 00:52:14,020 --> 00:52:20,550 তারপর আমরা জানি যে কোন যে শব্দ ক্রম আরও অক্ষর আছে. 599 00:52:20,550 --> 00:52:26,950 কিন্তু যদি যে নোড শূন্য না হয়, তার মানে যে চিঠি ক্রমানুসারে আরো অক্ষর আছে. 600 00:52:26,950 --> 00:52:32,160 এবং তদ্ব্যতীত, তাহলে প্রত্যেক নোডের ইঙ্গিত করে কিনা তা একটি শব্দ বা না শেষ অক্ষর. 601 00:52:38,110 --> 00:52:43,170 >> চলুন একটি trie একটি উদাহরণ ঢোকা. 602 00:52:50,500 --> 00:52:58,340 প্রথম আমি এই অ্যারের মধ্যে 27 নোডের জন্য কোন রুম আছে. 603 00:52:58,340 --> 00:53:03,200 যদি আমি শব্দ বার আছে - 604 00:53:13,310 --> 00:53:15,370 যদি আমি শব্দ বার আছে এবং আমি যে সন্নিবেশ করতে চান, 605 00:53:15,370 --> 00:53:22,700 প্রথম চিঠি বি, তাই যদি আমার trie হয় খালি, 606 00:53:22,700 --> 00:53:29,910 বি হয় বর্ণমালার দ্বিতীয় অক্ষর, তাই আমি এই ঠেলা এখানে এই সূচিতে চয়ন যাচ্ছি. 607 00:53:29,910 --> 00:53:33,450 আমি এখানে বি আছে যাচ্ছি. 608 00:53:33,450 --> 00:53:42,400 বি একটি নোডের মধ্যে সমস্ত সম্ভব অক্ষরের অন্য অ্যারের যে স্থানটিকে হবে 609 00:53:42,400 --> 00:53:45,870 যে চিঠি বি পরে অনুসরণ করতে পারেন 610 00:53:45,870 --> 00:53:57,610 এই ক্ষেত্রে, আমি শব্দ দিয়ে BAR, আচরণ, তাই এখানে একটি যেতে হবে না. 611 00:54:02,000 --> 00:54:08,990 একটি পরে, আমি চিঠি আর, অতএব একটি নিজস্ব সমন্বয় যাও এখন পয়েন্ট আছে, 612 00:54:08,990 --> 00:54:15,120 এবং তারপর এখানে আর হবে. 613 00:54:15,120 --> 00:54:22,470 BAR একটি সম্পূর্ণ শব্দ, তাই আমি অন্য একটি নোড যাও আর পয়েন্ট আছে চলেছি 614 00:54:22,470 --> 00:54:33,990 যে যে শব্দ হয় বৈধ. 615 00:54:36,010 --> 00:54:40,970 যে নোড হয় যাও নোডের একটি শ্রেণীবিন্যাস আছে যাচ্ছে, 616 00:54:40,970 --> 00:54:45,260 কিন্তু যারা শূন্য হতে পারে. 617 00:54:45,260 --> 00:54:49,080 কিন্তু মূলত, এটি যে ভালো অবিরত করতে পারেন. 618 00:54:49,080 --> 00:54:54,250 যে একটি বিট আরো পরিষ্কার যখন আমরা একটি পৃথক উদাহরণে যেতে হবে, 619 00:54:54,250 --> 00:54:56,780 সে আমার সাথে আছে বহন করে. 620 00:54:56,780 --> 00:55:02,050 এখন আমরা আমাদের অভিধান অভ্যন্তরে বার আছে. 621 00:55:02,050 --> 00:55:05,980 এখন আমরা বলতে শব্দ baz আছে. 622 00:55:05,980 --> 00:55:12,630 আমরা বি দিয়ে শুরু, এবং আমরা ইতিমধ্যে চিঠি আমাদের অভিধানে যে এক হিসাবে বি আছে. 623 00:55:12,630 --> 00:55:15,170 যে এ অনুসরণ এর জন্য আমরা ইতিমধ্যে একটি আছে. 624 00:55:15,170 --> 00:55:19,250 কিন্তু পরিবর্তে, তাহলে আমরা Z নিম্নলিখিত আছে. 625 00:55:19,250 --> 00:55:25,490 আমি তখন আমাদের অ্যারের মধ্যে একটি উপাদান Z হবে, 626 00:55:25,490 --> 00:55:30,810 এবং তাই ঐ এক অন্য শব্দ বৈধ শেষ দিকে নির্দেশ করে যাচ্ছে. 627 00:55:30,810 --> 00:55:36,930 সুতরাং আমরা দেখতে যে, যখন আমরা বি মাধ্যমে অবিরত এবং তারপর একটি, 628 00:55:36,930 --> 00:55:43,480 দুই বর্তমানে আমাদের অভিধানে বিভিন্ন বিকল্প শব্দ B এবং এ সঙ্গে যে শুরু আছে 629 00:55:49,650 --> 00:55:57,460 বলুন, আমরা শব্দ FOOBAR সন্নিবেশ চেয়েছিলেন. 630 00:55:57,460 --> 00:56:05,620 তারপর আমরা এফ এ একটি এন্ট্রি করতে হবে 631 00:56:05,620 --> 00:56:11,320 ফল হয় একটি নোড সম্পূর্ণ অ্যারের যে স্থানটিকে চিহ্নিত করে. 632 00:56:11,320 --> 00:56:22,790 আমরা খুঁজে হে, হে যেতে চাই, হে তারপর একটি সম্পূর্ণ তালিকা সংযোগ করে. 633 00:56:22,790 --> 00:56:35,340 আমরা বি আছে এবং তারপরে অবিরত চাই, আমরা চাই একটি এবং তারপর আর 634 00:56:35,340 --> 00:56:43,570 আমি তখন FOOBAR ঘোরে পর্যন্ত FOOBAR নিচে উপায় হল একটি সঠিক শব্দ. 635 00:56:43,570 --> 00:56:52,590 এবং তারপর, তাই এই একটি বৈধ শব্দ হবে. 636 00:56:52,590 --> 00:57:00,170 এখন বলতে আমাদের অভিধানে পরবর্তী শব্দ আসলে শব্দ foo. 637 00:57:00,170 --> 00:57:03,530 আমরা কি এফ ফল অনুসরণ করে বলা যায়? 638 00:57:03,530 --> 00:57:06,190 আমি আসলে ইতিমধ্যে হে জন্য একটি জায়গা আছে, তাই আমি অবিরত যাচ্ছি. 639 00:57:06,190 --> 00:57:09,150 আমি একটি নতুন করা হবে না. চালিয়ে. 640 00:57:09,150 --> 00:57:15,500 এই অভিধান foo একটি বৈধ শব্দ, অতএব আমি নির্দেশ দিতে যাচ্ছি 641 00:57:15,500 --> 00:57:21,660 যে এটি কোন বৈধ. 642 00:57:21,660 --> 00:57:28,370 যদি আমি সেখানে আমার ক্রম থামাতে, যে সঠিক হবে. 643 00:57:28,370 --> 00:57:33,050 কিন্তু আমরা যদি foo থেকে আমাদের ক্রম অব্যাহত নিচে বি যাও 644 00:57:33,050 --> 00:57:39,750 এবং শুধুমাত্র FOOB ছিল, FOOB হয়, এবং একটি শব্দ না যে এক একটি বৈধ হিসাবে চিহ্নিত হয় না. 645 00:57:47,370 --> 00:57:57,600 একটি trie ইন, আপনি প্রত্যেক নোডের ইঙ্গিত আছে কিনা তা একটি বৈধ শব্দ বা না, 646 00:57:57,600 --> 00:58:05,840 এবং তারপর তিনি প্রত্যেক নোডের 27 নোড পয়েন্টার একটি অ্যারে আছে 647 00:58:05,840 --> 00:58:09,520 যে নোড নিজেদের তারপর বিন্দু. 648 00:58:09,520 --> 00:58:12,940 >> এখানে কিভাবে আপনি এই সংজ্ঞায়িত করতে পারেন একটি উপায়. 649 00:58:12,940 --> 00:58:17,260 যাইহোক, হ্যাশ টেবিল যেমন ঠিক, চান যেখানে আমরা একটি নোড * মাথা ছিল 650 00:58:17,260 --> 00:58:21,320 আমাদের সাথে লিঙ্ক তালিকা শুরুতে ইঙ্গিত, আমরা চান সেটি চালু 651 00:58:21,320 --> 00:58:29,150 বুদ্ধিমান যেখানে আমাদের trie শুরুতে হয় কিছু উপায়. 652 00:58:29,150 --> 00:58:34,110 কিছু মানুষ এই কল গাছ চেষ্টা করে, এবং যে যেখানে থেকে root পরিচয়ে আসে. 653 00:58:34,110 --> 00:58:36,910 সুতরাং আমরা আমাদের ট্রি রুট নিশ্চিত যে আমরা থাকতে ভিত্তির উপরে প্রতিষ্ঠিত করতে চান 654 00:58:36,910 --> 00:58:39,570 যেখানেই যাও আমাদের trie হয়. 655 00:58:42,910 --> 00:58:46,300 আমরা ইতিমধ্যে ধরনের গিয়েছিলাম উপর 656 00:58:46,300 --> 00:58:50,240 আপনি যেভাবে অভিধান মধ্যে প্রতিটি শব্দ আমার মনে হয় লোড করতে পারে নি. 657 00:58:50,240 --> 00:58:54,540 প্রত্যেক শব্দ জন্য মূলত, আপনার trie মাধ্যমে পুনরুক্তি করতে চান চলুন 658 00:58:54,540 --> 00:58:59,590 এবং বুদ্ধিমান যে শিশুদের প্রতি উপাদান - আমরা এটা বলা এই ক্ষেত্রে শিশুরা - 659 00:58:59,590 --> 00:59:04,290 অনুরূপ একটি পৃথক চিঠি যাও, আপনি কি ওই মান পরীক্ষা করতে যাচ্ছেন 660 00:59:04,290 --> 00:59:08,320 এ যে বিশেষ অক্ষর সূচক যে অনুরূপ. 661 00:59:08,320 --> 00:59:11,260 তাই চিন্তা সমস্ত পথ ফিরে সিজার এবং Vigenere যাও, 662 00:59:11,260 --> 00:59:16,070 বুদ্ধিমান যে প্রতি চিঠি আপনি একটি বর্ণানুক্রমিক সূচী ধরনের ফিরে মানচিত্রের করতে পারেন, 663 00:59:16,070 --> 00:59:20,690 Z মাধ্যমে স্পষ্টভাবে একটি চমত্কার একটি বর্ণানুক্রমিক চিঠি ম্যাপ সহজ করা হয়, 664 00:59:20,690 --> 00:59:25,200 কিন্তু দুর্ভাগ্যক্রমে, apostrophes এছাড়াও একটি শব্দের মধ্যে গৃহীত চরিত্র. 665 00:59:25,200 --> 00:59:31,650 আমি এমনকি কি ASCII মান নয়, 666 00:59:31,650 --> 00:59:39,250 তাই জন্য যে আপনি যদি যাও যাও কিনা তা আপনি হয় প্রথম এক হতে চান সিদ্ধান্ত একটি সূচক খুঁজতে চান 667 00:59:39,250 --> 00:59:44,550 অথবা গত এক, তাহলে আপনি হার্ড কোডেড যে জন্য চেক করা হবে 668 00:59:44,550 --> 00:59:48,930 এবং তারপর যে করা মধ্যে সূচক 26, উদাহরণস্বরূপ জন্য. 669 00:59:48,930 --> 00:59:55,300 আমি তখন কি শিশুদের এ মান যাচাই করছি [i] 670 00:59:55,300 --> 00:59:58,400 যেখানে [i] অনুরূপ যাও চিঠি যাই হোক না কেন আপনি এ. 671 00:59:58,400 --> 01:00:04,110 যদি যে শূন্য, তার মানে বর্তমানে কোন অক্ষর সম্ভব না 672 01:00:04,110 --> 01:00:08,150 যে আগের ক্রম থেকে করায়, তাই আপনি malloc চান চলুন 673 01:00:08,150 --> 01:00:13,150 এবং একটি নতুন নোডের জন্য যে শিশুদের [i] এটি যাও বিন্দু আছে 674 01:00:13,150 --> 01:00:17,890 তাই আপনার তৈরি করা - যখন আমরা আয়তক্ষেত্র মধ্যে একটি চিঠি ঢোকানো - 675 01:00:17,890 --> 01:00:23,680 ফলে যে নতুন নোডের মধ্যে শিশুদের অ শূন্য এবং বিন্দু. 676 01:00:23,680 --> 01:00:28,340 কিন্তু যদি যে শূন্য হয় না foo আমাদের ইনস্ট্যান্সের মধ্যে, পছন্দ 677 01:00:28,340 --> 01:00:34,570 যখন আমরা ইতিমধ্যে FOOBAR ছিল, আমরা অবিরত, 678 01:00:34,570 --> 01:00:44,010 এবং আমরা একটি নতুন নোড তৈরীর কখনও হয় না কিন্তু বরং সত্য যাও is_word সেটিং 679 01:00:44,010 --> 01:00:47,790 যে শব্দের শেষে. 680 01:00:50,060 --> 01:00:55,340 >> আমি তখন হিসাবে আগে, কারণ এখানে আপনি প্রতি চিঠি সঙ্গে একটি সময়ে আচরণ করছেন, 681 01:00:55,340 --> 01:01:01,470 এটি আকার এর জন্য আপনার জন্য সহজ হবে, বদলে যাও গণনা করা হচ্ছে 682 01:01:01,470 --> 01:01:06,910 পুরো ট্রি মাধ্যমে এবং যান না কতটা সন্তান আমি নেই নিরূপণ 683 01:01:06,910 --> 01:01:10,850 এবং তারপর শাখাবিন্যাস বন্ধ, মনে বাম এবং ডান পাশ কত হয় 684 01:01:10,850 --> 01:01:12,850 এবং যে ভালো জিনিস, এটা আপনার জন্য অনেক সহজ হতে যাচ্ছে 685 01:01:12,850 --> 01:01:16,220 আপনি যদি শুধুমাত্র কতগুলি শব্দ আপনাকে যোগ করছি ট্র্যাক রাখতে 686 01:01:16,220 --> 01:01:18,080 যখন আপনি চাহিদার সঙ্গে লেনদেন করছেন. 687 01:01:18,080 --> 01:01:22,630 এবং তারপর যাতে উপায় আকার একটি আকার বিশ্ব পরিবর্তনশীল শুধু ফিরে আসতে পারেন. 688 01:01:25,320 --> 01:01:28,530 >> এখন আমরা চেক আসে. 689 01:01:28,530 --> 01:01:33,920 আগে একই মান হিসাবে, যেখানে আমরা কেস insensitivity জন্য অনুমতি চান. 690 01:01:33,920 --> 01:01:40,400 পাশাপাশি, আমরা ধরে নিই যে পংক্তিগুলি শুধুমাত্র বর্ণানুক্রমিক অক্ষর বা apostrophes 691 01:01:40,400 --> 01:01:44,000 কারণ শিশুদের হয় 27 দীর্ঘ একটি শ্রেণীবিন্যাস, 692 01:01:44,000 --> 01:01:48,480 তাই বর্ণমালার প্লাস ঊর্ধকমা চিঠি সব. 693 01:01:48,480 --> 01:01:53,800 জন্য আপনি কি করতে চাইবেন চেক আপনাকে root-এ শুরু করতে চাইবেন 694 01:01:53,800 --> 01:01:58,440 কারণ রুট একটি অ্যারের ধারণকারী নির্দেশ করা 695 01:01:58,440 --> 01:02:01,630 সম্ভাব্য একটি শব্দের শুরু অক্ষর সব. 696 01:02:01,630 --> 01:02:03,680 আপনাকে সেখানে শুরু চলুন, 697 01:02:03,680 --> 01:02:11,590 এবং তারপরে আপনি চেক চলুন এই মান NULL বা না, 698 01:02:11,590 --> 01:02:16,490 কারণ যদি মানটি শূন্য, তার মানে অভিধান কোনো মান নেই 699 01:02:16,490 --> 01:02:21,480 যে যে বিশেষ ক্রম যে চিঠি থাকে. 700 01:02:21,480 --> 01:02:24,970 যদি এর শূন্য তারপর, তার মানে শব্দ সরাসরি misspelled হয়. 701 01:02:24,970 --> 01:02:27,110 কিন্তু যদি শূন্য না থাকে, তাহলে আপনি চালিয়ে যেতে পারেন, 702 01:02:27,110 --> 01:02:34,090 যে প্রথম চিঠি সম্ভব একটি শব্দ প্রথম চিঠি বলে, 703 01:02:34,090 --> 01:02:40,630 তাই এখন আমি যদি দ্বিতীয় চিঠি, যে ক্রম, আমার অভিধান মধ্যে চেক করতে চান. 704 01:02:40,630 --> 01:02:46,540 সুতরাং আপনি প্রথম নোডের শিশুদের সূচী যেতে চলুন 705 01:02:46,540 --> 01:02:50,720 এবং চেক কিনা যে দ্বিতীয় চিঠি বিদ্যমান. 706 01:02:50,720 --> 01:02:57,440 তারপর আপনি যে কিনা ক্রম বৈধ বা পরীক্ষা করা হবে না যে প্রক্রিয়ার পুনরাবৃত্তি 707 01:02:57,440 --> 01:02:59,060 এর মধ্যে আপনার trie. 708 01:02:59,060 --> 01:03:06,430 যখনই যে সূচক বিন্দুতে নোড শিশুদের নাল যাও, 709 01:03:06,430 --> 01:03:10,710 আপনি কি জানেন যে যে ক্রম বিদ্যমান নয়, 710 01:03:10,710 --> 01:03:16,230 কিন্তু যদি আপনি যে শব্দ ইনপুট করেছি শেষে পৌঁছানোর, 711 01:03:16,230 --> 01:03:20,070 তাহলে আপনি এখন চেক যে আমি এই প্রক্রিয়াটি সম্পন্ন করেছি চান 712 01:03:20,070 --> 01:03:27,610 এবং আমার trie মধ্যে এটি পাওয়া যায় নি, যে শব্দ বা বৈধ না? 713 01:03:27,610 --> 01:03:32,480 এবং তারপর, তাই আপনার আর যে চেক করতে চান, এবং যে যখন আপনি যদি ক্রম পেয়েছি যে, 714 01:03:32,480 --> 01:03:35,120 তারপরে আপনি যে শব্দ হয় কিনা বৈধ বা না চেক করতে চান 715 01:03:35,120 --> 01:03:40,290 কারণ আবার আগের ক্ষেত্রে মনে রাখবেন, যে আমি সৃষ্টি যেখানে আমরা FOOB ছিল, 716 01:03:40,290 --> 01:03:48,410 যে ছিল একটি বৈধ ক্রম যে আমরা পাওয়া কিন্তু সত্যিই একটি বৈধ শব্দ নিজেই ছিল না. 717 01:03:50,570 --> 01:03:59,000 >> একইভাবে, আপনি আপনার জন্য চেষ্টা trie বিভিন্ন নোডের মধ্যে সমস্ত আন চান মধ্যে আন. 718 01:03:59,000 --> 01:04:04,790 দুঃখিত. অনুরূপ হ্যাশ টেবিল যেখানে মধ্যে আন আমরা সমস্ত নোড মুক্ত যাও, 719 01:04:04,790 --> 01:04:09,740 এ চেষ্টা আমরা এছাড়াও নোডের মধ্যে সমস্ত মুক্ত করতে চান. 720 01:04:09,740 --> 01:04:15,000 নিচ থেকে উপরে আসলে আন সহজে কাজ করা 721 01:04:15,000 --> 01:04:19,290 কারণ এই তালিকা মূলত লিঙ্ক. 722 01:04:19,290 --> 01:04:22,540 তাই আমরা যাও মান সমস্ত নিশ্চিত যে আমরা রাখা করতে চাই 723 01:04:22,540 --> 01:04:25,700 এবং বিনামূল্যে সব স্পষ্টভাবে তাদের. 724 01:04:25,700 --> 01:04:28,840 যাও যাও করতে আপনি কি করতে যাচ্ছে যদি আপনি একটি trie সঙ্গে কাজ করছি করছি 725 01:04:28,840 --> 01:04:35,640 নীচে বিনামূল্যে এবং সর্বনিম্ন সম্ভব নোডের প্রথম ভ্রমণ হয় 726 01:04:35,640 --> 01:04:39,190 এবং তারপর যারা শিশুদের সমস্ত পর্যন্ত যান এবং তারপর যারা বিনামূল্যে সব, 727 01:04:39,190 --> 01:04:43,050 আপ যান এবং তারপর বিনামূল্যে, ইত্যাদি 728 01:04:43,050 --> 01:04:48,790 Trie প্রথম নীচে স্তর সাথে ডিল ভালো ধরনের 729 01:04:48,790 --> 01:04:51,940 এবং তারপর যাচ্ছে উপরে একবার আপনি সবকিছু মুক্ত করেছি. 730 01:04:51,940 --> 01:04:56,720 এটি একটি যেখানে recursive ফাংশন উপকারে আসতে পারে ভাল দৃষ্টান্ত. 731 01:04:56,720 --> 01:05:03,830 আপনি একবার আপনার trie নীচে স্তর মুক্ত করেছেন, 732 01:05:03,830 --> 01:05:08,000 তারপর আপনি এটি বাকি উপর আন কল, 733 01:05:08,000 --> 01:05:13,620 এমনটা নিশ্চিত করা যে আপনার প্রতি মিনি মুক্ত - 734 01:05:13,620 --> 01:05:16,410 আপনি ধরনের মনশ্চক্ষুতে এটি হিসাবে মিনি চেষ্টা করতে পারেন. 735 01:05:23,300 --> 01:05:28,990 সুতরাং আপনি এখানে আপনার রুট আছে. 736 01:05:30,840 --> 01:05:35,230 আমি শুধু এটা সহজ, তাই আমি তাদের 26 আঁকা না. 737 01:05:37,250 --> 01:05:43,770 সুতরাং আপনি এই আছে, এবং তারপর এইসব শব্দের ক্রম প্রতিনিধিত্ব 738 01:05:43,770 --> 01:05:54,620 যেখানে এই সামান্য চেনাশোনা সব চিঠি যা অক্ষর সিকোয়েন্স বৈধ. 739 01:06:03,040 --> 01:06:07,160 চলুন শুধুমাত্র একটি বিট আরো অবিরত. 740 01:06:15,110 --> 01:06:25,750 কি আপনি কাজ করতে চান সেটি চালু বিনামূল্যে নীচে এবং তারপর এখানে বিনামূল্যে এই এক 741 01:06:25,750 --> 01:06:31,640 এবং তারপর বিনামূল্যে নীচে এই এক আগে উপরে একটি মুক্ত করতে এখানে 742 01:06:31,640 --> 01:06:38,180 কারণ যদি আপনি এখানে দ্বিতীয় পর্যায়ে বিনামূল্যে কিছু, 743 01:06:38,180 --> 01:06:47,230 তারপর আসলে আপনি এই মান হারাতে চাই এখানে. 744 01:06:47,230 --> 01:06:54,780 তাই এটি একটি trie নিশ্চিত করুন যে আপনি নীচে প্রথম মুক্ত জন্য আন মধ্যে গুরুত্বপূর্ণ. 745 01:06:54,780 --> 01:06:59,480 প্রতিটি নোডের জন্য হয় বলে কি আপনি করতে পারেন 746 01:06:59,480 --> 01:07:06,430 আমি শিশুদের সব আন চান. 747 01:07:16,060 --> 01:07:22,140 >> এখন যে আমরা হ্যাশ টেবিল হিসাবে ভাল পদ্ধতি হিসাবে trie পদ্ধতি জন্য আন উপর চলে গেছে করেছি, 748 01:07:22,140 --> 01:07:27,020 আমরা Valgrind তাকান চান চলুন. 749 01:07:27,020 --> 01:07:29,640 Valgrind আপনি নিম্নলিখিত কমান্ডের সাহায্যে চালানো. 750 01:07:29,640 --> 01:07:32,700 আপনি valgrind-v আছে. 751 01:07:32,700 --> 01:07:40,960 আপনি সব তথ্য ফাঁসের জন্য যখন আপনি এই নির্দিষ্ট টেক্সট দেওয়া speller চালানো চেক করছি 752 01:07:40,960 --> 01:07:46,980 কারণ speller একটি টেক্সট ফাইল গ্রহণ করা প্রয়োজন. 753 01:07:46,980 --> 01:07:52,330 সুতরাং Valgrind চালানো আপনার প্রোগ্রাম, আপনি কত বাইট বরাদ্দ আপনি বলুন, হবে 754 01:07:52,330 --> 01:07:57,150 কত বাইট আপনি মুক্ত, এবং এটা আপনাকে বলতে আপনি ঠিক কিনা যথেষ্ট মুক্ত করা 755 01:07:57,150 --> 01:07:58,930 অথবা আপনি যথেষ্ট কিনা কি, বিনামূল্যে না 756 01:07:58,930 --> 01:08:02,850 অথবা কখনও কখনও আপনাকে এমনকি ওভার বিনামূল্যে বিনামূল্যে একটি নোড মত, যে এর ইতিমধ্যে পারেন মুক্ত করা হয়েছে 757 01:08:02,850 --> 01:08:05,140 এবং তাই ত্রুটি প্রত্যাবর্তন করতে হবে. 758 01:08:05,140 --> 01:08:11,600 আপনি যদি ব্যবহার Valgrind, এটি কয়েকটি বার্তা দিতে হবে 759 01:08:11,600 --> 01:08:15,970 ইঙ্গিত কিনা নিষ্কৃত হয় আপনি যথেষ্ট কম, যথেষ্ট করেছি মাত্র, 760 01:08:15,970 --> 01:08:19,609 যথেষ্ট সময় বা আরো বেশী. 761 01:08:24,370 --> 01:08:30,410 >> এই pset একটি অংশ, এটা বিগ বোর্ড চ্যালেঞ্জ ঐচ্ছিক. 762 01:08:30,410 --> 01:08:35,790 কিন্তু যখন আমরা ডাটা স্ট্রাকচার সঙ্গে লেনদেন করছেন 763 01:08:35,790 --> 01:08:40,689 এটা মজার যে ধরণের কত দ্রুত এবং কার্যকর কিভাবে আপনার ডাটা স্ট্রাকচার দেখতে হতে পারে. 764 01:08:40,689 --> 01:08:44,490 কিন্তু আপনার হ্যাশ collisions অনেক ফাংশানের ফলাফল? 765 01:08:44,490 --> 01:08:46,300 অথবা আপনার তথ্য আকার বড়? 766 01:08:46,300 --> 01:08:49,420 এটা যাও তর্ক করা অনেক সময় লাগবে? 767 01:08:49,420 --> 01:08:54,800 Speller র লগের মধ্যে, এটা আউটপুট কত সময় আপনি লোড ব্যবহার, 768 01:08:54,800 --> 01:08:57,700 যাও, যাও চেক আকার আচার - ব্যবহার, এবং আন, 769 01:08:57,700 --> 01:09:00,720 এবং তাই ঐ বিগ বোর্ড পোস্ট করা হয়, 770 01:09:00,720 --> 01:09:03,600 যেখানে আপনি আপনার সহপাঠীদের বিরুদ্ধে প্রতিদ্বন্দ্বিতা করা যাবে 771 01:09:03,600 --> 01:09:11,350 এবং কিছু কর্মী সদস্যদের যারা দ্রুততম বানান পরীক্ষক আছে দেখতে যাও. 772 01:09:11,350 --> 01:09:14,760 তবে একটি বিষয় যে আমি হ্যাশ টেবিল সম্পর্কে নোট চাই 773 01:09:14,760 --> 01:09:20,470 যে কিছু প্রশংসনীয় সহজ হ্যাশ ফাংশান যে আমরা মনে করতে পারি নি আছে. 774 01:09:20,470 --> 01:09:27,240 উদাহরণস্বরূপ, আপনি 26 buckets আছে, এবং তাই প্রতি বাকেট 775 01:09:27,240 --> 01:09:30,200 অনুরূপ একটি শব্দ প্রথম অক্ষরটি, 776 01:09:30,200 --> 01:09:35,229 কিন্তু যে একটি চমত্কার অসম হ্যাশ টেবিল সৃষ্টি হচ্ছে 777 01:09:35,229 --> 01:09:40,979 কারণ অনেক কম শব্দ এক্স সঙ্গে যে শুরু এম সঙ্গে শুরু তুলনায় উদাহরণস্বরূপ, আছে. 778 01:09:40,979 --> 01:09:47,890 ওয়ান ওয়ে speller সম্পর্কে যেতে হয় যদি আপনি অন্যান্য কার্যকারিতা সব নামা করতে চান, 779 01:09:47,890 --> 01:09:53,240 তারপর শুধুমাত্র একটি সহজ হ্যাশ ফাংশন আপনার কোড চালনাকারী পেতে ব্যবহার 780 01:09:53,240 --> 01:09:58,650 এবং তারপর ফিরে যান এবং আপনার হ্যাশ টেবিল এবং সংজ্ঞা মাপ পরিবর্তন করা. 781 01:09:58,650 --> 01:10:03,430 সম্পদের একটি হ্যাশ ফাংশান জন্য অনেক ইন্টারনেট আছে, 782 01:10:03,430 --> 01:10:08,250 এই pset জন্য এবং যাতে আপনি ইন্টারনেট হ্যাশ ফাংশান গবেষণা অনুমতি দেওয়া হয় 783 01:10:08,250 --> 01:10:15,560 জন্য কিছু ইঙ্গিত হিসাবে দীর্ঘ এবং অনুপ্রেরণা হিসাবে আপনি যেখানে আপনি এটা পেয়েছেন থেকে cite নিশ্চিত. 784 01:10:15,560 --> 01:10:22,060 আপনি এবং চেহারা কিছু হ্যাশ ফাংশন যে আপনার ইন্টারনেট অনুসন্ধান ব্যাখ্যা স্বাগত. 785 01:10:22,060 --> 01:10:27,460 পিছনে যে, আপনাকে যদি কেউ একটি trie ব্যবহৃত দেখতে পাবে 786 01:10:27,460 --> 01:10:31,700 কিনা তাদের প্রয়োগ আপনার হ্যাশ টেবিল বা না তুলনায় দ্রুততর. 787 01:10:31,700 --> 01:10:35,290 আপনি বিগ বোর্ড একাধিক বার জমা দিতে পারেন. 788 01:10:35,290 --> 01:10:37,660 এটা আপনার সবচেয়ে সাম্প্রতিক ভুক্তি রেকর্ড করব. 789 01:10:37,660 --> 01:10:44,300 তাই হয়তো আপনি আপনার হ্যাশ ফাংশন এবং তারপর পরিবর্তন যে এটা আসলে একটা অনেক দ্রুত বুঝতে 790 01:10:44,300 --> 01:10:46,780 অথবা অনেক আগের চেয়ে অনেক মন্থর. 791 01:10:46,780 --> 01:10:50,960 এটা একটা মজার উপায় একটি বিট. 792 01:10:50,960 --> 01:10:57,190 সর্বদা 1 বা 2 কর্মী সদস্যদের যারা ধীরতম সম্ভব অভিধান চেষ্টা করা আছে, 793 01:10:57,190 --> 01:11:00,210 যাতে সর্বদাই তাকান মজা. 794 01:11:00,210 --> 01:11:07,630 >> pset জন্য ব্যবহার হয় আপনি একটি ঐচ্ছিক অভিধান সঙ্গে speller চালানোর 795 01:11:07,630 --> 01:11:12,840 এবং তারপরে একটা টেক্সট ফাইল বাধ্যতামূলক. 796 01:11:12,840 --> 01:11:18,380 ডিফল্টরূপে যখন আপনি শুধুমাত্র একটি টেক্সট ফাইল সঙ্গে speller চালানো এবং একটি অভিধান উল্লেখ না, 797 01:11:18,380 --> 01:11:24,410 এটি অভিধান টেক্সট ফাইল, বৃহৎ ব্যবহার করছেন 798 01:11:24,410 --> 01:11:27,920 মধ্যে cs50/pset5/dictionaries ফোল্ডার. 799 01:11:27,920 --> 01:11:32,760 যে এক ওভার 100,000 শব্দ আছে. 800 01:11:32,760 --> 01:11:37,950 তারা একটি ছোট অভিধান যা অনেক কম শব্দ আছে 801 01:11:37,950 --> 01:11:40,730 যে CS50 আপনার জন্য তৈরি করেনি. 802 01:11:40,730 --> 01:11:44,050 যাইহোক, আপনি খুব সহজেই আপনার নিজস্ব অভিধান করতে পারেন 803 01:11:44,050 --> 01:11:47,150 যদি আপনি চান ছোট উদাহরণ কাজ করা - 804 01:11:47,150 --> 01:11:51,140 উদাহরণস্বরূপ, যদি আপনার সময় gdb ব্যবহার করতে চান এবং আপনি নির্দিষ্ট মান জানা 805 01:11:51,140 --> 01:11:53,560 আপনি যে আপনার হ্যাশ টেবিল যাও যাও ছকা চান. 806 01:11:53,560 --> 01:12:00,430 সুতরাং আপনি ঠিক BAR, baz, foo, এবং FOOBAR সঙ্গে আপনার নিজস্ব টেক্সট ফাইল ঠিক করতে পারেন, 807 01:12:00,430 --> 01:12:04,860 একটি টেক্সট ফাইলে যে, 1 টি লাইন, যাদের প্রতিটি পৃথক, 808 01:12:04,860 --> 01:12:12,670 এবং তারপর আপনার নিজস্ব টেক্সট ফাইলটি যে কেবল আক্ষরিক হয়তো 1 বা 2 শব্দ আছে না 809 01:12:12,670 --> 01:12:15,950 তাই আপনি কি জানেন যে ঠিক কি আউটপুট হওয়া উচিত. 810 01:12:15,950 --> 01:12:21,870 কিছু নমুনা টেক্সট ফাইলের যে বিগ বোর্ড যখন আপনি চ্যালেঞ্জ চালানোর পরীক্ষা করা 811 01:12:21,870 --> 01:12:25,580 হয় যুদ্ধ ও শান্তি এবং একটি অসটেন উপন্যাস বা যে ভালো কিছু. 812 01:12:25,580 --> 01:12:30,450 সুতরাং যখন আপনি আউট শুরু করছেন, এটা অনেক সহজ আপনার নিজস্ব টেক্সট ফাইল করা 813 01:12:30,450 --> 01:12:34,160 যে কেবল শব্দের একটি দম্পতি বা হয়ত 10 থাকে 814 01:12:34,160 --> 01:12:38,280 যাতে আপনি ফলাফল কি হওয়া উচিত তার পূর্বাভাস দিতে পারি 815 01:12:38,280 --> 01:12:42,880 এবং তারপর যে বিরুদ্ধে এটি, চেক নিয়ন্ত্রিত একটি উদাহরণ যাতে আরও বেশি. 816 01:12:42,880 --> 01:12:45,820 তাই যেহেতু আমরা পূর্বাভাসের এবং আশেপাশে জিনিস অঙ্কন সঙ্গে লেনদেন করছেন, 817 01:12:45,820 --> 01:12:48,690 আবার আমি আপনি কলম এবং কাগজ ব্যবহার উত্সাহিত করতে চান 818 01:12:48,690 --> 01:12:50,700 কারণ এটি এক সাথে আপনাকে সাহায্য করতে যাচ্ছে - 819 01:12:50,700 --> 01:12:55,620 তীরচিহ্ন আঁকা, কিভাবে হ্যাশ টেবিল বা কিভাবে আপনার trie দেখায়, 820 01:12:55,620 --> 01:12:57,980 যখন আপনি কিছু করতে যাচ্ছি যেখানে তীরচিহ্ন freeing করছি, 821 01:12:57,980 --> 01:13:01,730 হয় আপনি যথেষ্ট উপর অধিষ্ঠিত, আপনি কোন লিংক কি লোপ 822 01:13:01,730 --> 01:13:05,750 রসাতল অবাঞ্ছিতভাবে মেমরির মধ্যে এবং পতনশীল. 823 01:13:05,750 --> 01:13:11,070 তাই দয়া করে, জিনিষ বহিষ্কার এমনকি আগে আপনি নিচে লেখা কোড পেতে চেষ্টা করুন. 824 01:13:11,070 --> 01:13:14,520 সেটা যাতে আঁকুন তা বুঝতে কিভাবে যে কাজ করতে যাচ্ছি 825 01:13:14,520 --> 01:13:22,750 কারণ তখন আমি গ্যারান্টি আছে কম পয়েন্টার গন্ডগোল পাকিয়ে ফেলে পাতিত করব. 826 01:13:24,270 --> 01:13:25,910 >> ঠিক আছে. 827 01:13:25,910 --> 01:13:28,780 আমি আপনাকে খুব ভাগ্য এই pset ভাল চান চান. 828 01:13:28,780 --> 01:13:31,980 এটা সম্ভবত hardest এক. 829 01:13:31,980 --> 01:13:40,360 সুতরাং প্রথম দিকে শুরু করার চেষ্টা, সেটা আঁকা, সেটা আঁকা, এবং শুভকামনা. 830 01:13:40,360 --> 01:13:42,980 এই ছিল Walkthrough 5. 831 01:13:45,160 --> 01:13:47,000 >> [CS50.TV]