1 00:00:00,000 --> 00:00:11,856 2 00:00:11,856 --> 00:00:13,050 >> روب Bowden: ہیلو. 3 00:00:13,050 --> 00:00:16,210 میں روب ہوں، اور لشکر طیبہ کی ہیش اس حل سے باہر. 4 00:00:16,210 --> 00:00:20,070 لہذا ہم یہاں لاگو کرنے کے لئے جا رہے ہیں ایک عام ہیش کی میز. 5 00:00:20,070 --> 00:00:24,090 ہم دیکھتے ہیں کہ ہماری ہیش کی struct نوڈ ٹیبل اس طرح نظر آئے جا رہا ہے. 6 00:00:24,090 --> 00:00:28,710 تو یہ ایک چار لفظ ہے جا رہا ہے سائز لمبائی کے علاوہ 1 کی صف. 7 00:00:28,710 --> 00:00:32,259 زیادہ سے زیادہ 1 نہیں بھولنا لغت میں لفظ 45 8 00:00:32,259 --> 00:00:35,110 حروف، اور پھر ہم جا رہے ہیں کے لئے ایک اضافی کردار کی ضرورت 9 00:00:35,110 --> 00:00:37,070 الٹا سلیش 0. 10 00:00:37,070 --> 00:00:40,870 >> اور پھر ہر میں ہمارے ہیش کی میز بالٹی ذخیرہ کرنے کے لئے کی جا رہی ہے ایک 11 00:00:40,870 --> 00:00:42,320 نوڈس کے لنک کی فہرست. 12 00:00:42,320 --> 00:00:44,420 ہم یہاں کی تحقیقات لکیری نہیں کر رہے ہیں. 13 00:00:44,420 --> 00:00:48,430 اور اس حکم میں اگلے سے منسلک کرنے کی بالٹی میں عنصر، ہم ایک کی ضرورت ہے 14 00:00:48,430 --> 00:00:51,110 struct نوڈ * اگلا، دوسرا. 15 00:00:51,110 --> 00:00:53,090 تو ہے کہ ایک نوڈ کی طرح لگتا ہے ہے. 16 00:00:53,090 --> 00:00:56,180 اب، یہاں اعلان ہے ہماری ہیش ٹیبل کے. 17 00:00:56,180 --> 00:01:01,910 یہ 16.384 بالٹیاں کر جا رہا ہے، لیکن ہے یہ تعداد واقعی کوئی فرق نہیں پڑتا. 18 00:01:01,910 --> 00:01:05,450 اور آخر میں، ہم جا رہے ہیں عالمی متغیر hashtable_size، جس 19 00:01:05,450 --> 00:01:08,640 0 طور پر شروع کرنے کے لئے جا رہا ہے، اور یہ ہے کا ٹریک رکھنے کے لئے کی جا رہی ہے کہ کس طرح بہت سے الفاظ 20 00:01:08,640 --> 00:01:10,080 ہماری لغت میں تھے. 21 00:01:10,080 --> 00:01:10,760 ٹھیک ہے. 22 00:01:10,760 --> 00:01:13,190 >> تو لوڈ میں ایک نظر ڈالیں. 23 00:01:13,190 --> 00:01:16,390 تو اس کا بوجھ محسوس، یہ ایک bool واپس. 24 00:01:16,390 --> 00:01:20,530 اس کامیابی کے ساتھ تھا تو آپ حقیقی واپس دوسری صورت میں بھاری بھرکم اور جھوٹے. 25 00:01:20,530 --> 00:01:23,990 اور یہ ایک CONST چار * سٹار لیتا ہے ڈکشنری ہے جو لغت، 26 00:01:23,990 --> 00:01:25,280 ہم کو کھولنے کے لئے چاہتے ہیں. 27 00:01:25,280 --> 00:01:27,170 تو ہے کہ سب سے پہلی چیز ہے ہم کیا کرنے جا رہے ہیں. 28 00:01:27,170 --> 00:01:30,420 ہم لغت fopen کی جا رہے ہیں پڑھنے، اور ہم جا رہے ہیں 29 00:01:30,420 --> 00:01:34,700 یہ اگر ایسا ہے تو کامیاب ہو اس بات کو یقینی بنانے کے لئے یہ نل واپس، پھر ہم نے نہیں کیا 30 00:01:34,700 --> 00:01:37,440 کامیابی کے ساتھ ڈکشنری کھولنے اور ہم جھوٹے واپس کرنے کی ضرورت ہے. 31 00:01:37,440 --> 00:01:41,580 >> لیکن اس کامیابی کے ساتھ کیا ہے کہ سنبھالنے کھولیں، تو ہم پڑھنے کے لئے چاہتے ہیں، 32 00:01:41,580 --> 00:01:42,400 ڈکشنری. 33 00:01:42,400 --> 00:01:46,210 ہم نے کچھ جب تک تو looping کے رکھنے کے اس سے باہر کو توڑنے کے لئے کی وجہ سے 34 00:01:46,210 --> 00:01:47,570 ہم دیکھیں گے جس میں لوپ. 35 00:01:47,570 --> 00:01:51,780 تو looping کے رکھنے کے، اور اب ہم جا رہے ہیں ایک نوڈ malloc پر. 36 00:01:51,780 --> 00:01:56,800 اور ظاہر کی، ہم چیک غلطی کرنے کی ضرورت ہے پھر mallocing کامیاب نہیں اگر ایسا ہے تو 37 00:01:56,800 --> 00:02:00,660 اور ہم ہے کہ ہم کسی بھی نوڈ اتارنا کرنا چاہتے ہیں پہلے malloc پر ہوا، بند 38 00:02:00,660 --> 00:02:02,590 لغت اور جھوٹے واپس. 39 00:02:02,590 --> 00:02:07,440 >> لیکن اس کو نظر انداز، سنبھالنے ہم کامیاب، تو ہم fscanf استعمال کرنا چاہتے ہیں 40 00:02:07,440 --> 00:02:12,400 کی طرف سے ایک ایک لفظ پڑھنے کے لئے ہمارے ہمارے نوڈ ڈکشنری. 41 00:02:12,400 --> 00:02:17,310 تو اس اندراج> لفظ یاد چار لفظ سائز لمبائی کے بفر کے علاوہ 42 00:02:17,310 --> 00:02:20,300 ہم جا رہے ہیں کہ ایک اندر لفظ کی دکان 43 00:02:20,300 --> 00:02:25,280 تو fscanf 1 کے طور پر طویل عرصے سے واپس جا رہا ہے اس کامیابی کے ساتھ ایک پڑھنے کے قابل تھا 44 00:02:25,280 --> 00:02:26,750 فائل سے لفظ. 45 00:02:26,750 --> 00:02:31,030 >> ایک غلطی یا تو ہوتا ہے یا ہم تک پہنچ جائیں تو فائل کے آخر میں، یہ نہیں کریں گے 46 00:02:31,030 --> 00:02:34,950 اگر ایسا نہیں ہوتا جس صورت میں واپس 1 1 واپس، ہم آخر میں کو توڑنے کے لئے جا رہے ہیں 47 00:02:34,950 --> 00:02:37,280 اس دیر لوپ سے باہر. 48 00:02:37,280 --> 00:02:42,770 تو ہم دیکھتے ہیں کہ ہم کامیابی کے ساتھ ایک بار میں ایک لفظ پڑھا ہے 49 00:02:42,770 --> 00:02:48,270 اندراج> لفظ، پھر ہم ہیش کرنے جا رہے ہیں ہماری ہیش تقریب کا استعمال کرتے ہوئے ہے کہ لفظ. 50 00:02:48,270 --> 00:02:49,580 کی پر ایک نظر ڈالیں ہیش تقریب. 51 00:02:49,580 --> 00:02:52,430 52 00:02:52,430 --> 00:02:55,610 >> تو کیا تم واقعی ضرورت نہیں ہے اس کو سمجھنے کے لئے. 53 00:02:55,610 --> 00:02:59,460 اور اصل میں، ہم صرف اس کو نکالا انٹرنیٹ سے تقریب ہیش. 54 00:02:59,460 --> 00:03:04,010 آپ کی شناخت کرنے کی ضرورت ہے صرف ایک ہی چیز ہے یہ ایک CONST چار * لفظ لیتا ہے، 55 00:03:04,010 --> 00:03:08,960 تو یہ ان پٹ کے طور پر ایک تار لینے اور ہے پیداوار کے طور پر ایک int اہستاکشرت واپس لوٹنے کے. 56 00:03:08,960 --> 00:03:12,360 تو یہ سب ایک ہیش تقریب ہے، یہ ہے ایک ان پٹ میں لیتا ہے، یہ آپ کو ایک دیتا ہے 57 00:03:12,360 --> 00:03:14,490 ہیش ٹیبل میں انڈیکس. 58 00:03:14,490 --> 00:03:18,530 ہم NUM_BUCKETS کی طرف سے modding کر رہے ہیں تو ہیش قیمت واپس 59 00:03:18,530 --> 00:03:21,730 اصل میں ہیش ٹیبل میں ایک انڈیکس ہے اور کرتا ہے سے باہر نہیں انڈیکس 60 00:03:21,730 --> 00:03:24,320 صف کی حد. 61 00:03:24,320 --> 00:03:27,855 >> تو ہیش تقریب، ہم جا رہے ہیں کہ دی ہم نے پڑھا ہے کہ لفظ ہیش 62 00:03:27,855 --> 00:03:31,700 لغت سے اور پھر ہم جا رہے ہیں کہ استعمال کرنے کے لئے شامل کرنے کے لئے ہے 63 00:03:31,700 --> 00:03:33,750 ہیش ٹیبل میں اندراج. 64 00:03:33,750 --> 00:03:38,830 اب، hashtable ہیش موجودہ ہے منسلک ہیش ٹیبل میں فہرست، اور 65 00:03:38,830 --> 00:03:41,410 یہ صرف نل ہے کہ بہت ممکن ہے. 66 00:03:41,410 --> 00:03:45,640 ہم پر ہماری اندراج داخل کرنا چاہتے ہیں اس سے منسلک فہرست کے آغاز، اور تو 67 00:03:45,640 --> 00:03:48,910 ہم اپنے موجودہ اندراج لئے جا رہے ہیں فی الحال کیا ہیش کی میز کی طرف اشارہ 68 00:03:48,910 --> 00:03:54,030 پوائنٹس اور پھر ہم ذخیرہ کرنے کے لئے جا رہے ہیں ہیش میں ہیش ٹیبل میں 69 00:03:54,030 --> 00:03:55,350 موجودہ اندراج. 70 00:03:55,350 --> 00:03:59,320 >> تو یہ دو لائنوں کی کامیابی کے ساتھ داخل کے آغاز میں اندراج 71 00:03:59,320 --> 00:04:02,270 کہ انڈیکس میں منسلک فہرست ہیش ٹیبل میں. 72 00:04:02,270 --> 00:04:04,900 ہم نے اس کے ساتھ کیا کر رہے ہیں ایک بار، ہم جانتے ہیں ہم میں ایک لفظ پایا جاتا ہے 73 00:04:04,900 --> 00:04:07,800 لغت اور ہم ایک بار پھر اضافہ. 74 00:04:07,800 --> 00:04:13,960 تو ہم کیا کر رکھیں کہ fscanf تک آخر میں غیر کچھ 1 واپس 75 00:04:13,960 --> 00:04:18,560 جس نقطہ ہم کرنے کی ضرورت ہے یاد ہے کہ مفت انٹری، تو یہاں، ہم نے ایک malloced 76 00:04:18,560 --> 00:04:21,329 اندراج اور ہم کچھ پڑھنے کے لئے کی کوشش کی لغت سے. 77 00:04:21,329 --> 00:04:24,110 اور ہم کامیابی کے ساتھ نہیں پڑھا ڈکشنری سے کچھ جس میں 78 00:04:24,110 --> 00:04:27,440 کیس ہم کہ ہم اندراج آزاد کرنے کی ضرورت اصل میں ہیش ٹیبل میں ڈال کبھی نہیں 79 00:04:27,440 --> 00:04:29,110 اور آخر میں توڑ. 80 00:04:29,110 --> 00:04:32,750 >> ہم باہر کو توڑنے کے بعد، ہم، ٹھیک ہے، یہ دیکھنے کی ضرورت ہم کیونکہ وہاں توڑا 81 00:04:32,750 --> 00:04:35,840 ایک خرابی فائل سے پڑھنے، یا کیا گیا ہم تک پہنچ گئی کیونکہ ہم باہر توڑ دیا 82 00:04:35,840 --> 00:04:37,120 فائل کے آخر؟ 83 00:04:37,120 --> 00:04:40,150 ایک خامی تھی، تو ہم کرنا چاہتے ہیں لوڈ نہیں کیا کیونکہ جھوٹے واپس 84 00:04:40,150 --> 00:04:43,260 کامیاب، اور اس عمل میں، ہم چاہتے ہیں ہم نے پڑھا ہے کہ تمام الفاظ اتارنا 85 00:04:43,260 --> 00:04:45,670 اور ڈکشنری فائل بند. 86 00:04:45,670 --> 00:04:48,740 ہم کامیاب کیا سمجھتے ہوئے، تو ہم صرف اب بھی لغت کو بند کرنے کی ضرورت ہے 87 00:04:48,740 --> 00:04:51,970 فائل، اور آخر کے بعد سے حقیقی واپس ہم کامیابی کے ساتھ بھری ہوئی ہے 88 00:04:51,970 --> 00:04:53,040 ڈکشنری. 89 00:04:53,040 --> 00:04:54,420 اور یہ کہ لوڈ کے لئے ہے. 90 00:04:54,420 --> 00:04:59,020 >> تو اب ایک بھاری بھرکم ہیش ٹیبل دیا، چیک، اس طرح نظر آئے جا رہا ہے. 91 00:04:59,020 --> 00:05:02,690 لہذا، یہ ایک bool واپس، چیک کرنے کے لیے جس اس بات کی نشاندہی کی جا رہی ہے کہ آیا 92 00:05:02,690 --> 00:05:07,530 ایوان میں چار * لفظ، چاہے ایوان میں سٹرنگ ہماری لغت میں ہے. 93 00:05:07,530 --> 00:05:10,530 لغت میں ہے اگر ایسا ہے تو، اگر یہ ہے ہماری ہیش ٹیبل میں، ہم واپس آ جائیں گے 94 00:05:10,530 --> 00:05:13,380 یہ سچ ہے، اور اگر یہ نہیں ہے، ہم جھوٹے واپس آ جائیں گے. 95 00:05:13,380 --> 00:05:17,770 اس ایوان میں لفظ کو دیکھتے ہوئے، ہم لفظ ہیش کرنے کے لئے جا. 96 00:05:17,770 --> 00:05:22,020 >> اب، کو تسلیم کرنے کے لئے ایک اہم بات یہ ہے لوڈ میں، ہم جانتے تھے کہ اس کے تمام 97 00:05:22,020 --> 00:05:25,820 الفاظ کم کیس ہو جا رہے تھے، لیکن یہاں، ہم نے اس بات کا یقین نہیں کر رہے ہیں. 98 00:05:25,820 --> 00:05:29,510 ہم اپنے ہیش تقریب پر ایک نظر ڈالیں تو، اصل میں ہمارے ہیش تقریب 99 00:05:29,510 --> 00:05:32,700 ہر کردار lowercasing ہے لفظ کے. 100 00:05:32,700 --> 00:05:37,580 تو اس سے قطع نظر کے بڑے حروف تہجی کے لفظ، ہماری ہیش تقریب کی جا رہی ہے 101 00:05:37,580 --> 00:05:42,270 جو کچھ بھی کے لئے ایک ہی انڈیکس واپس بڑے حروف تہجی یہ ہو گا کے طور پر ہے 102 00:05:42,270 --> 00:05:45,280 ایک مکمل طور پر چھوٹے کے لئے واپس لفظ کے ورژن. 103 00:05:45,280 --> 00:05:45,950 ٹھیک ہے. 104 00:05:45,950 --> 00:05:47,410 >> جس سے کہ ہماری انڈیکس ہے. 105 00:05:47,410 --> 00:05:49,790 یہ اس لفظ کے لئے ہیش کی میز ہے. 106 00:05:49,790 --> 00:05:52,940 اب، لوپ کے لئے اس کی جا رہی ہے منسلک فہرست پر کرنے کے لئے 107 00:05:52,940 --> 00:05:55,000 کہ انڈیکس میں تھا. 108 00:05:55,000 --> 00:05:59,630 تو ہم اندراج ابتدا کر رہے ہیں نوٹس اس انڈیکس کی طرف اشارہ. 109 00:05:59,630 --> 00:06:03,480 ہم اندراج کرتا ہے جاری رکھنے کے لئے جا رہے ہیں نہیں برابر نل، اور یاد رکھیں کہ 110 00:06:03,480 --> 00:06:08,350 ہمارے منسلک فہرست میں پوائنٹر کو اپ ڈیٹ اندراج اگلا اندراج> کے برابر، تو ہے 111 00:06:08,350 --> 00:06:13,840 ہماری موجودہ انٹری پوائنٹ منسلک فہرست میں اگلے آئٹم. 112 00:06:13,840 --> 00:06:14,400 ٹھیک ہے. 113 00:06:14,400 --> 00:06:19,150 >> تو منسلک فہرست میں ہر اندراج کے لئے، ہم strcasecmp استعمال کرنے کے لئے جا رہے ہیں. 114 00:06:19,150 --> 00:06:23,780 یہ strcmp نہیں ہے کیونکہ ایک بار پھر، ہم insensitively چیزوں کیس کرنا چاہتے ہیں. 115 00:06:23,780 --> 00:06:28,830 تو ہم نے لفظ موازنہ کرنے strcasecmp استعمال کہ اس تقریب میں منظور کیا گیا تھا 116 00:06:28,830 --> 00:06:31,860 لفظ کے خلاف اس اندراج میں ہے. 117 00:06:31,860 --> 00:06:35,570 یہ 0 واپس تو، کہ تھا کا مطلب ہم چاہتے ہیں جس صورت میں ایک میچ، 118 00:06:35,570 --> 00:06:36,630 سچ واپس. 119 00:06:36,630 --> 00:06:39,590 ہم نے کامیابی مل گیا ہماری ہیش ٹیبل میں لفظ. 120 00:06:39,590 --> 00:06:43,040 >> ایک میچ وہاں نہیں تھا، تو ہم ہیں پھر لوپ پر جا کر اور پر نظر 121 00:06:43,040 --> 00:06:43,990 اگلا اندراج. 122 00:06:43,990 --> 00:06:47,640 اور ہم جبکہ وہاں looping کی جاری رکھیں گے اس سے منسلک فہرست میں اندراجات ہیں. 123 00:06:47,640 --> 00:06:50,160 ہم توڑ تو کیا ہوتا لوپ کے لئے اس سے باہر؟ 124 00:06:50,160 --> 00:06:55,110 کہ ہم ایک اندراج کو تلاش نہیں کیا مطلب ہے کہ جس صورت میں، اس لفظ کے ملاپ 125 00:06:55,110 --> 00:07:00,220 ہم اس بات کی نشاندہی کرنے کے لئے جھوٹے واپس کہ ہماری ہیش ٹیبل اس لفظ پر مشتمل نہیں تھا. 126 00:07:00,220 --> 00:07:01,910 اور اس چیک کے لئے ہے. 127 00:07:01,910 --> 00:07:02,540 ٹھیک ہے. 128 00:07:02,540 --> 00:07:04,790 >> تو سائز میں ایک نظر ڈالیں. 129 00:07:04,790 --> 00:07:09,280 اب، سائز بہت آسان ہو جا رہا ہے کے بعد سے ہر لفظ کے لئے، لوڈ میں یاد 130 00:07:09,280 --> 00:07:12,880 ہم ایک عالمی incremented کیا پایا متغیر hashtable_size. 131 00:07:12,880 --> 00:07:15,830 تو سائز تقریب صرف ہے عالمی واپس جا 132 00:07:15,830 --> 00:07:18,150 متغیر، اور یہ کہ یہ ہے. 133 00:07:18,150 --> 00:07:22,300 >> اب آخر میں، ہم خالی کرنے کی ضرورت ہے لغت میں سب کچھ کیا ہے ایک بار. 134 00:07:22,300 --> 00:07:25,340 تو ہم کس طرح ایسا کرنے کے لئے جا رہے ہیں؟ 135 00:07:25,340 --> 00:07:30,440 یہاں، ہم سب سے زیادہ looping کر رہے ہیں ہماری ہیش کی میز کی بالٹیاں. 136 00:07:30,440 --> 00:07:33,240 تو NUM_BUCKETS بالٹیاں ہیں. 137 00:07:33,240 --> 00:07:37,490 اور ہماری ہیش میں ایک لنک کی فہرست کے لئے میز، ہم لوپ کے لئے جا رہے ہیں 138 00:07:37,490 --> 00:07:41,070 لنک کی فہرست کے مکمل طور پر ہر عنصر آزاد. 139 00:07:41,070 --> 00:07:46,070 اب، ہم محتاط رہنے کی ضرورت، تو ہم یہاں ہے کہ ایک عارضی متغیر ہے 140 00:07:46,070 --> 00:07:49,740 اگلا پوائنٹر ذخیرہ کرنے منسلک فہرست میں عنصر. 141 00:07:49,740 --> 00:07:52,140 اور پھر ہم ڈاؤن لوڈ، اتارنا کرنے کے لئے جا رہے ہیں موجودہ عنصر. 142 00:07:52,140 --> 00:07:55,990 >> ہمیں کے بعد ایسا اس بات کا یقین کرنے کی ضرورت ہے صرف موجودہ عنصر کو آزاد نہیں کر سکتے ہیں 143 00:07:55,990 --> 00:07:59,260 اور پھر اگلے پوائنٹر تک رسائی حاصل کرنے کی کوشش کریں کے بعد ایک بار ہم نے اسے آزاد کر دیا 144 00:07:59,260 --> 00:08:00,870 میموری غلط ہو جاتا ہے. 145 00:08:00,870 --> 00:08:04,990 تو ہم پر ایک پوائنٹر کے ارد گرد رکھنے کی ضرورت ہے اگلے عنصر، پھر ہم آزاد کر سکتے ہیں 146 00:08:04,990 --> 00:08:08,360 موجودہ عنصر، اور پھر ہم کو اپ ڈیٹ کر سکتے ہیں، کی طرف اشارہ کرنے کے لئے ہماری موجودہ عنصر 147 00:08:08,360 --> 00:08:09,590 اگلے عنصر. 148 00:08:09,590 --> 00:08:12,770 >> ہم عناصر لوپ ہیں کریں گے جبکہ اس سے منسلک فہرست میں. 149 00:08:12,770 --> 00:08:16,450 ہم میں تمام منسلک کی فہرست لئے کیا کریں گے ہیش کی میز، اور ہم کیا کر رہے ہیں ایک بار 150 00:08:16,450 --> 00:08:20,180 اس کے ساتھ، ہم مکمل طور پر اتار دیا ہے ہیش کی میز، اور ہم کیا کر رہے ہیں. 151 00:08:20,180 --> 00:08:24,050 تو یہ unloads کے لئے کبھی بھی ناممکن ہے جھوٹے واپس، اور ہم کیا کر رہے ہیں، تو ہم 152 00:08:24,050 --> 00:08:25,320 صرف سچ واپس. 153 00:08:25,320 --> 00:08:27,563