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 چان - ہارورڈ یونیورسٹی] 3 00:00:04,870 --> 00:00:07,190 یہ [CS50 ہے. CS50.TV] - 4 00:00:07,190 --> 00:00:10,400 >> ٹھیک ہے. ہیلو، سب لوگ، اور 5 Walkthrough کا استقبال ہے. 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 جی ہاں، آپ کے مرچ proofreading کی بات ہے، سب سے زیادہ نامردی ہے. 12 00:00:44,710 --> 00:00:49,140 یہ ایک مسئلہ یہ ہے کہ میں مردانا، مردانا طالب علموں کو متاثر کرتی ہے. 13 00:00:49,140 --> 00:00:56,260 میں ایک بار اپنے sith گریڈ torturer کی طرف سے بتایا گیا ہے کہ میں ایک اچھا ساتھی میں کبھی نہیں ملے گا. 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 >> تو 5 Walkthrough خیر مقدم کرتے ہیں، جس میں ہم نے 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 آزاد نوڈس کے لحاظ سے، یہ بہت ضروری ہے 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 میرا مطلب ہے، ہمیشہ کی طرح، میں ضرور آپ کے مسئلہ کے سیٹ کے لئے قلم اور کاغذ کا استعمال کرتے ہوئے کی حامی ہوں، 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 ہمیشہ اتارنا null کی طرف اشارہ کرنے جا رہا ہے. 71 00:05:02,340 --> 00:05:08,230 نوڈ پوائنٹس کب شہوت انگیز null، تو آپ جانتے ہیں کہ آپ کو فہرست کے آخر تک پہنچ چکے ہیں 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 اور تو آپ کو یہاں دیکھ کر، D نوڈ، شہوت انگیز null اشارہ کیونکہ اس فہرست میں آخری عنصر ہے. 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 arrays کے ساتھ، کیا ہم کرتے ہیں ہم صرف ہم نے 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 یہ صرف کچھ کوڈ ہے جہاں آپ iterate سکتا ہے. 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 >> جیسا کہ میں نے پہلے ذکر کیا تھا، آزاد بہت ضروری ہے. 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 اور چیک کرنے کے لیے کہ آیا کہ ایک شہوت انگیز null اشارہ کر رہا ہے، ہر بار چیک کرنے کے لیے کرتے ہیں، 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 یہاں کی جانچ پڑتال، تو یہاں کی جانچ پڑتال، آزاد، 193 00:15:44,190 --> 00:15:47,470 اور پھر واپس جا، یہاں کی جانچ پڑتال، یہاں کی جانچ پڑتال، یہ آزاد، 194 00:15:47,470 --> 00:15:49,660 یہاں کی جانچ پڑتال، اور پھر یہ آزاد ہے. 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 آپ کو جب آپ کا کرسر نل ہے iterate نہیں کرنا چاہتا 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 جہاں منسلک فہرست کی موجودہ آخر ہے، تو جو بھی نوڈ شہوت انگیز null اشارہ کر رہا ہے - 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 اور منسلک فہرست میں آخری نوڈ کی خصوصیت یہ ہے کہ اس شہوت انگیز null اشارہ ہے. 229 00:18:56,080 --> 00:19:09,380 تو پھر ہمیں کیا کرنا ہوگا یہ سرخ آدمی پوائنٹر شہوت انگیز null قائم ہے. آمدید. 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 تو پھر اس آدمی کے پوائنٹر کی طرف اشارہ کرنے جا رہا ہے؟ >> [طالب علم] TEMP. 248 00:21:05,550 --> 00:21:07,490 TEMP. جی ہاں. 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 اور جیسا کہ قطار اور 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 یہاں ہم صرف تقریب prototypes ہے. 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 اور ایک بڑے پیمانے پر فعالیت، یہ مفید H فائل. 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 ہم دیکھتے ہیں کہ یہ بہت dictionary.h کی طرح اب یہ صرف اس میں ان TODOs کے سب ہے سوائے لگتا ہے،. 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 بنیادی طور پر، یہ جب کوئی ہجے کنندہ چلتا ہے، کی طرف اشارہ کرتا ہے کہ یہ اختیاری ہے 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 ہم جاری ہے، اور ہم نے کچھ فائل میں / O یہاں دیکھ 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 یہاں، ہم نے ایک غلط ہجے شدہ ہے کہ اگر چیک درست ہے یا نہیں واپس نظر آئے گا بولین ہے. 352 00:30:32,350 --> 00:30:37,110 اگر لفظ لغت میں اصل میں ہے، تو چیک درست واپس آ جائیں گے. 353 00:30:37,110 --> 00:30:39,760 اس کا مطلب یہ ہے کہ ہے کہ لفظ غلط ہجے شدہ نہیں ہے. 354 00:30:39,760 --> 00:30:45,330 تو غلط ہجے شدہ باطل ہے، اور یہی وجہ ہے کہ ہم نے دھماکے وہاں ہے، اشارہ کریں گے. 355 00:30:45,330 --> 00:30:56,320 ہم جا رہو، اور پھر یہ کتنے الفاظ غلط ہجے شدہ ٹریک رکھتا ہے 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 پھر یہاں، یہ رپورٹ کتنی غلط ہجے شدہ الفاظ تمہارے پاس تھا. 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 ایک ہیش میز بالٹیاں کی ایک فہرست پر مشتمل ہے. 388 00:33:35,910 --> 00:33:43,010 ہر قیمت، ہر لفظ، ان بالٹیاں میں سے ایک میں جانے کے لئے کی جا رہی ہے. 389 00:33:43,010 --> 00:33:53,200 ایک ہیش میز مثالی طور پر یکساں طور پر ان اقدار کی تمام تقسیم ہے کہ آپ میں گزر رہے ہیں 390 00:33:53,200 --> 00:33:57,160 اور اس کے بعد ان کے اس طرح کہ بالٹی میں populates ہر بالٹی 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 سے نیچے کسی بھی integers پہلے بالٹی کے لئے جاؤ. 398 00:34:38,540 --> 00:34:42,190 10 اوپر کوئی integers ذیل لیکن دوسری میں 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 لیکن میں میرا ہیش ٹیبل میں سے کسی قسم کا integers میں لینے کی اجازت دینے کے لئے چاہتے ہیں، 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 کرنے کا اعادہ، ایک ہیش میز بالٹیاں کی ایک صف ہے 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 ہیش تقریب بنیادی طور پر جانتے ہیں آپ کتنے بالٹیاں ہے کی ضرورت ہے. 420 00:36:32,430 --> 00:36:37,960 آپ ہیش ٹیبل کا سائز،، بالٹیاں آپ کے کی تعداد 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 اس یوجنابدق پر واپس جانے کے لئے آپ کو دیکھ، کہ خود بالٹیاں تیر ہیں، 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 جیسا کہ میں نے پہلے کہا، بالٹیاں کی تعداد طے ہو گئی ہے، 445 00:38:41,790 --> 00:38:49,630 اور تو اپنی فہرست ہے کہ آپ واپس بالٹیاں کی تعداد سے کم ہے 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 جب hashed، اسی انڈیکس واپس کریں گے. 458 00:39:46,950 --> 00:39:53,620 تو جب آپ الفاظ کے ساتھ نمٹنے کر رہے ہیں، ایک لفظ جب hashed 459 00:39:53,620 --> 00:39:57,450 ایک لفظ کے طور پر ایک ہی ہیش قدر کیا جائے گا. 460 00:39:57,450 --> 00:40:04,140 یہ ہے جو ہم کہتے ہیں ایک تصادم، جب ہم نے ایک نوڈ ہے کہ جب hashed ہے، 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 اگر آپ کو ایک بہت چھوٹے ہیش میز، بالٹیاں کی ایک بہت چھوٹی تعداد ہے، 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 >> کیا لوڈ کرنے جا رہی ہے اور لغت میں ہر لفظ میں iterate. 477 00:41:09,500 --> 00:41:13,180 یہ ڈکشنری فائل پوائنٹر میں گزر جاتا ہے. 478 00:41:13,180 --> 00:41:18,050 تو آپ کو فائل کا فائدہ اٹھانے کے لئے I / O کام کرتا ہے کہ آپ pset4 میں مہارت حاصل کر رہے ہیں 479 00:41:18,050 --> 00:41:23,010 اور لغت میں ہر لفظ iterate. 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 اور قسم 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 یا شروع میں یا آخر میں، صرف اس بات کا یقین کر لیں کہ آپ کی آخری نوڈ ہمیشہ اتارنا null اشارہ 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 اور پھر ہیش میز کے اندر اندر ہر منسلک فہرست کے ذریعے iterate 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 جدوجہد کی طرح، ہمیں کیس کی بے حسی کے لئے اجازت دینے کے لئے چاہتے ہیں. 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 تو اگر آپ apostrophe 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 ، اس طرح کہ ہر منفرد لفظ ہمیشہ ایک ہی قیمت hashed ہے 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 لیکن اگر یہ ناچھانٹا ہوا ہے، تو آپ کو آپ کے منسلک فہرست کے ذریعے traversing جاری کرنا چاہتے ہیں 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 ہم منسلک فہرستوں اور مفت میں نوڈس کے تمام iterate کرنا چاہتے ہیں جا رہے ہیں. 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 تو ہے کہ ہیش میزیں ہے، جہاں ہم بالٹیاں کی ایک محدود تعداد ہے 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 کچھ الفاظ C کے ساتھ شروع لیکن پھر ایک ساتھ جاری رکھیں، 586 00:50:40,840 --> 00:50:42,960 لیکن دوسروں O کے ساتھ مثال کے طور پر جاری ہے. 587 00:50:42,960 --> 00:50:51,090 A trie ان الفاظ کے ممکنہ سنیوجنوں کی سب visualizing کا ایک طریقہ ہے. 588 00:50:51,090 --> 00:50:59,070 A trie خط جو کہ الفاظ پر مشتمل کی ترتیب کے ٹریک رکھنے کے لئے کی جا رہی ہے، 589 00:50:59,070 --> 00:51:08,280 ، branching جب ضروری، جب ایک خط میں حروف کی ایک سے زیادہ کی طرف سے کے بعد کیا جا سکتا ہے 590 00:51:08,280 --> 00:51:16,630 اور آخر میں ہر موڑ پر بتاتے ہیں چاہے وہ لفظ درست ہے یا نہیں ہے 591 00:51:16,630 --> 00:51:30,120 کیونکہ اگر آپ لفظ مساج ہجے رہے ہیں، MA مجھے نہیں لگتا ایک درست لفظ ہے، لیکن مساج ہے. 592 00:51:30,120 --> 00:51:37,820 اور اس طرح یہ آپ کے trie میں سے ظاہر ہوتا ہے، کہ مساج کے بعد ہے جو اصل میں ایک درست لفظ ہے. 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 حروف تہجی میں ہر خط کے طور پر ساتھ ساتھ apostrophe کردار کے لئے ایک. 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 پہلا خط B ہے، اگر ایسا ہے تو میری trie خالی ہے، 606 00:53:22,700 --> 00:53:29,910 B حروف تہجی کا دوسرا حرف ہے، تو میں اس انڈیکس میں ڈال منتخب کرنے کے لئے جا رہا ہوں. 607 00:53:29,910 --> 00:53:33,450 میں B یہاں دیکھ کر جا رہا ہوں. 608 00:53:33,450 --> 00:53:42,400 B ایک نوڈ جو تمام ممکنہ حروف کی ایک سرنی کی طرف اشارہ کرنے کے کی جا رہی ہے 609 00:53:42,400 --> 00:53:45,870 خط B. اس کے بعد کی پیروی کر سکتے ہیں 610 00:53:45,870 --> 00:53:57,610 اس صورت میں، میں لفظ بار کے ساتھ نمٹنے رہا ہوں تو یہاں جانے گا. 611 00:54:02,000 --> 00:54:08,990 ایک کے بعد، میں نے خط R، تو اس کے اپنے مجموعہ میں ایک اب پوائنٹس ہیں، 612 00:54:08,990 --> 00:54:15,120 اور پھر R یہاں ہو جائے گا. 613 00:54:15,120 --> 00:54:22,470 بار ایک مکمل لفظ ہے، اس لئے تو میں دوسرے نوڈ R نقطہ ہے جا رہا ہوں 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 اب کا کہنا ہے کہ ہم نے لفظ باز ہے. 622 00:55:05,980 --> 00:55:12,630 ہم B کے ساتھ شروع، اور ہم نے پہلے سے ہی خط جو ہماری لغت میں ہے میں سے ایک کے طور پر B ہے. 623 00:55:12,630 --> 00:55:15,170 A. کے بعد ہم نے ایک پہلے سے ہی ہے. 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 تو ہم دیکھتے ہیں کہ جب ہم B تک جاری رہے اور پھر، 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 پھر ہم F. میں ایک اندراج کریں گے 631 00:56:05,620 --> 00:56:11,320 F ایک گرہ ہے کہ ایک پوری صف اشارہ ہے. 632 00:56:11,320 --> 00:56:22,790 O ہم O تلاش O پر ہوتا، تو ایک پوری فہرست پر رابطہ ہے. 633 00:56:22,790 --> 00:56:35,340 ہم B ہے اور اس کے بعد جاری رکھیں گے، ہم چاہتے ہیں اور اس کے بعد آر 634 00:56:35,340 --> 00:56:43,570 تو پھر FOOBAR تک نیچے FOOBAR traverses طرح ایک صحیح لفظ ہے. 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 ہم کہیں گے کیا F. F مندرجہ ذیل؟ 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 سے ہماری ترتیب B جاری نیچے 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 بعض لوگ کال درختوں کی کوشش کرتا ہے، اور یہ کہ جہاں جڑ سے آتا ہے. 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 کے ذریعے iterate کرنا چاہتے ہیں کے لئے جا رہے ہیں 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 تو اس کے بعد آپ کے بچے کو قدر کی جانچ پڑتال کر رہے ہیں [میں] 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 اور ایک نیا نوڈ اور کہ بچوں کو [میں] اس کی طرف اشارہ 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 اور پھر دور branching، یاد کتنے بائیں طرف اور دائیں جانب ہیں 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 پہلے کی طرح ایک ہی معیار، جہاں ہم نے کیس کی بے حسی کے لئے اجازت دینے کے لئے چاہتے ہیں. 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 حروف تہجی کے علاوہ apostrophe کے خطوط کی. 693 01:01:48,480 --> 01:01:53,800 کے لئے چیک کرنے کے لیے ہے کہ آپ کیا کرنا چاہیں گے آپ کو جڑ شروع کرنا چاہتے ہیں کریں گے 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 اور پھر آپ کو چیک کرنے کے لیے جا رہے ہیں اس کی قیمت نل ہے یا نہیں ہے، 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 اگر یہ نل ہے، تو اس کا مطلب یہ ہے کہ لفظ فورا غلط ہجے شدہ ہے. 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 اس انڈیکس پوائنٹس پر نوڈ بچوں شہوت انگیز null جب بھی، 709 01:03:06,430 --> 01:03:10,710 آپ کو معلوم ہے کہ اس ترتیب کا کوئی وجود نہیں ہے، 710 01:03:10,710 --> 01:03:16,230 لیکن اس وقت اگر آپ لفظ کے آخر کہ آپ نے inputted کیا ہے تک پہنچ جاتے ہیں، 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 یہ جہاں پنراورتی تقریب ہاتھ میں آ سکتا ہے ایک اچھی مثال ہے. 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 آپ تمام لیک کے لئے جانچ پڑتال جب آپ اس بات کا یقین متن دیا ہجے کنندہ چلاتے رہے ہیں 752 01:07:40,960 --> 01:07:46,980 کیونکہ ہجے کنندہ ایک ٹیکسٹ فائل میں لینے کی ضرورت ہے. 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 ہجے کنندہ کے لاگ ان نتائج کتنا وقت آپ کو لوڈ کرنے کے لئے استعمال کرتے ہیں، 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 بالٹیاں ہے، اور تو ہر بالٹی 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 کیونکہ وہاں بہت کم الفاظ ہیں جو M سے شروع سے X کے ساتھ مثال کے طور پر شروع،. 778 01:09:40,979 --> 01:09:47,890 ہجے کنندہ کے بارے میں جانے کے لئے کا ایک طریقہ ہے، اگر آپ دوسرے کی فعالیت کے سب نیچے حاصل کرنے کے لئے کرنا چاہتے ہیں، 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 کچھ اشارے اور جب تک پریرتا کے طور پر آپ کو جہاں آپ نے یہ مل گیا سے حوالہ دیتے ہیں اس بات کا یقین کر کے لئے. 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 عملے کے ارکان جو ممکن slowest ڈکشنری بنانے کی کوشش کرتے ہیں، 793 01:10:57,190 --> 01:11:00,210 تاکہ ہمیشہ مذاق ہے کو دیکھنے کے لئے. 794 01:11:00,210 --> 01:11:07,630 >> pset کیلئے استعمال کی ہے آپ ایک اختیاری لغت سے ہجے کنندہ کو چلانے 795 01:11:07,630 --> 01:11:12,840 اور پھر ایک لازمی ٹیکسٹ فائل ہے. 796 01:11:12,840 --> 01:11:18,380 بنیادی طور پر، جب آپ صرف ایک ٹیکسٹ فائل کے ساتھ ہجے کنندہ کو چلانے اور ایک لغت کی وضاحت نہیں 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 تو تم بار، باز، 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 جنگ اور امن اور جین Austen کے ایک ناول یا ایسا کچھ کر رہے ہیں. 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 تم سے کچھ جہاں تیر جا رہے ہیں جب آزاد کر رہے ہیں، 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 کیونکہ مجھے تو اس بات کی ضمانت آپ کو کم پوائنٹر muddles میں حصہ وہاں گے. 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 یہ شاید سب سے مشکل ہے. 829 01:13:31,980 --> 01:13:40,360 تو جلد از جلد شروع کرنے کی کوشش کریں، چیزیں باہر اپنی طرف متوجہ، چیزیں باہر اپنی طرف متوجہ، اور خوش قسمتی ہے. 830 01:13:40,360 --> 01:13:42,980 یہ 5 Walkthrough تھا. 831 01:13:45,160 --> 01:13:47,000 >> [CS50.TV]