[Powered by Google Translate] [Walkthrough - مسئلہ سیٹ 5] [Zamyla چان - ہارورڈ یونیورسٹی] یہ [CS50 ہے. CS50.TV] - ٹھیک ہے. ہیلو، سب لوگ، اور 5 Walkthrough کا استقبال ہے. Pset5 غلط ہجے ہے، جس میں ہم نے ایک سپیل چیکر بنا رکھا جائے گا. بسات ہجوں انتہائی اہم ہیں. کیا اس نے کبھی آپ کو کیا ہوا ہے؟ آپ بہت کام کرتے ہیں، تصادم کے لئے بہت ایک کاغذ پر جمع کرنا اور اس کے بعد ابھی تک D یا D = جیسے ایک ہی چمک rade حاصل ختم اور کیونکہ آپ کو وہیل وسیع لفظ میں liverwurst بگاڑنے ہیں. جی ہاں، آپ کے مرچ proofreading کی بات ہے، سب سے زیادہ نامردی ہے. یہ ایک مسئلہ یہ ہے کہ میں مردانا، مردانا طالب علموں کو متاثر کرتی ہے. میں ایک بار اپنے sith گریڈ torturer کی طرف سے بتایا گیا ہے کہ میں ایک اچھا ساتھی میں کبھی نہیں ملے گا. اور یہ کہ تمام میں نے کبھی چاہتا تھا، کہ کوئی بچہ میری عمر میں چاہتا ہے، صرف ایک اچھا ساتھی میں حاصل کرنے کے لئے. اور صرف کوئی ساتھی نہیں ہے. نہیں، میں ایک آئیوری قانونی ساتھی جانا چاہتا تھا. تو اگر میں نے بہتری نہیں، چلے گئے ہارورڈ میں جانے کا میرا خواب ہو جائے گا، Jale، جیل یا - آپ جانتے ہیں، جیل میں، نیو جرسی. تو میں نے اپنے آپ کو ایک سپیل چیکر ہے. یہ میرا پسندیدہ بولنےوالی لفظ فنکاروں، ٹیلر مالی میں سے ایک کی طرف سے ایک چھوٹا سا اقتباس ہے. بہر حال، جیسا کہ وہ کہتے ہیں کہ، ہجے پڑتال کار ہونے کی اہمیت بہت اہم ہے. تو 5 Walkthrough خیر مقدم کرتے ہیں، جس میں ہم نے pset5 کے بارے میں بات کریں گے: تہجی، جس میں ہم نے اپنے اپنے ہجے پڑتال کار بنا رکھا جائے گا. اس ہفتے کے لئے آلات، تقسیم کوڈ، اہم کو دیکھنے کے لئے جا رہا ہے صرف مختلف کام کرتا ہے کہ آپ کی ڈکشنری والا ہے سمجھنے کے لئے. ہم اصل میں ایک سے زیادہ. سی فائلوں کو ایک ساتھ مل کر ہمارے pset ہونے جا رہے ہیں. اور اس طرح مختلف پہلوؤں کے ذریعے تلاش، اگرچہ ہم واقعی نہیں میں ترمیم کر رہے ہیں فائلوں کی ایک speller.c، يہ علم ميں رہے کہ یہ کس طرح dictionary.c تعلق کے ساتھ کام کرتا ہے، جو ہم نے لکھ رکھا جائے گا، بہت اہم ہو جا رہا ہے. pset رپورٹ بھی مفید معلومات کا ایک بہت پر مشتمل ہے چیزوں کی شرائط کہ تم فرض کر سکتے ہیں، اس طرح کے قوانین اور چیزیں تو pset رپورٹ کی تجاویز کے لئے دھیان سے پڑھیں اس بات کا یقین ہو جائے. اور جب اس طرح ایک اصول یا کچھ شک میں تو ہمیشہ pset رپورٹ کا حوالہ دیتے ہیں بحث یا یہ pset اشارہ پر بہت زیادہ انحصار کی جا رہی ہے، تو ہم اس بات کا یقین کر لیں کہ ہم انہوں نے مزید کہا ستاروں کے درمیان کا فرق سمجھ سکتا ہوں بنانا چاہتے ہیں پوائنٹر نام اور ampersands، ان سے کس طرح آزاد، وغیرہ کے سامنے تو اشارہ کے مالک ہونے کے اس مسئلے کے سیٹ میں بہت مددگار ثابت ہو جا رہا ہے. ہم منسلک کی فہرست میں تھوڑا نظر آتے جا رہے ہیں، ہم عناصر جہاں ہے کہ ہم نوڈس ہے کہ دونوں ایک قدر کے طور پر ساتھ ساتھ پوائنٹر فون اگلے نوڈ اور تو بنیادی طور پر مختلف عناصر ایک کے بعد ایک سے منسلک ہے. اپنے اصل لغت پر عمل پیرا میں سے چند ایک مختلف اختیارات ہیں. ہم دو اہم طریقوں، جو ہیش میزیں اور پھر کوشش کرتا ہے میں دیکھنے کے لئے جا رہے ہیں. ان میں سے دونوں میں، انہوں نے کچھ طرح کی ایک لنک کی فہرست کے تصور کے میں شامل تم عناصر جہاں ایک دوسرے کے ساتھ منسلک ہے. اور اس طرح ہم دیکھو کس طرح آپ کو منسلک کی فہرست کے ارد گرد کام کرنے کے قابل ہو سکتا ہے جا رہے ہیں، انہیں تشکیل دیتے ہیں، کس طرح کے معاملے میں پر، مثال کے طور پر، اس میں ایک نوڈ داخل یا ساتھ ساتھ مراکز کی تمام. آزاد نوڈس کے لحاظ سے، یہ بہت ضروری ہے کہ جب بھی ہم malloc میموری، بعد ہم یہ مفت ہے. تو ہم اس بات کا یقین کر لیں کہ ہے کہ نہیں پوائنٹر unfreed جاتا ہے بنانا چاہتے ہیں، کہ ہم کسی بھی میموری لیک نہیں ہے. ہم نامی Valgrind آلہ ہے جو آپ کے پروگرام چلاتے ہیں کو متعارف کرانے کے لئے جا رہے ہیں اور تمام میموری کہ آپ مختص چاہے چیک تو آزاد ہے. آپ کے pset صرف مکمل ہے جب یہ کام کرتا ہے اور اس کی مکمل فعالیت، بلکہ، Valgrind آپ کو بتاتا ہے کہ آپ کو کسی بھی میموری لیک نہیں مل سکا ہے. آخر میں، اس pset کے لئے، میں واقعی میں زور کرنا چاہتے ہیں - میرا مطلب ہے، ہمیشہ کی طرح، میں ضرور آپ کے مسئلہ کے سیٹ کے لئے قلم اور کاغذ کا استعمال کرتے ہوئے کی حامی ہوں، لیکن اس کے لئے، مجھے لگتا ہے کہ ہے کہ قلم اور کاغذ کی خاص طور پر ضروری جا رہا ہے جب آپ چیزوں تیر ڈرائنگ اور سمجھنے کس طرح چیزیں کام کرنا چاہتے ہیں. تو یقینی طور پر قلم اور کاغذ کی چیزیں باہر اپنی طرف متوجہ کرنے سے پہلے آپ کو کوڈنگ جاتے ہیں کرنے کے لئے استعمال کرنے کی کوشش کریں کیونکہ یہ تھوڑا گندا حاصل کر سکتے ہیں. پہلے، منسلک کی فہرست میں تھوڑا سا. لنک کی فہرست نوڈس، جہاں ہر نوڈ اس کے ساتھ منسلک کی گئی ہے پر مشتمل ہوتے ہیں، کے ساتھ ساتھ اس کے بعد اگلے نوڈ پوائنٹر. منسلک کی فہرست کے ساتھ اہم چیزوں کے ایک جوڑے کی ہے کہ ہم یاد رکھنے کی ضرورت جہاں ہمارا پہلا نوڈ ہے، اور پھر ایک بار ہم جانتے ہیں کہ جہاں پہلے نوڈ ہے، اس طرح ہم نوڈ تک رسائی حاصل کر سکتے ہیں کہ سب سے پہلے نوڈ پوائنٹس اور پھر اس کے بعد ایک اور اس کے بعد ایک. اور پھر آپ کے منسلک فہرست میں آخری عنصر ہے کہ نوڈ پوائنٹر ہے ہمیشہ اتارنا null کی طرف اشارہ کرنے جا رہا ہے. نوڈ پوائنٹس کب شہوت انگیز null، تو آپ جانتے ہیں کہ آپ کو فہرست کے آخر تک پہنچ چکے ہیں کہ وہ نوڈ آخری ایک ہے، ہے کہ اس کے بعد کچھ بھی نہیں ہے. اس یوجنابدق میں، آپ دیکھیں گے کہ تیر اشارہ ہیں، اور نیلے رنگ کے حصے میں جہاں قدر ہے ذخیرہ، اور پھر اس پوائنٹر کے ساتھ سرخ باکس نوڈ پوائنٹر ہے اس کے بعد اگلے نوڈ کی طرف اشارہ کرتے ہوئے. اور تو آپ کو یہاں دیکھ کر، D نوڈ، شہوت انگیز null اشارہ کیونکہ اس فہرست میں آخری عنصر ہے. کو دیکھو کہ ہم کس طرح ایک نوڈ کے لئے ایک struct کی وضاحت کر سکتے ہیں ہیں. اور چونکہ ہم ایک سے زیادہ نوڈس ہے کرنا چاہتے ہیں، یہ ایک typedef struct بننے جا رہا ہے جس میں ہم مراکز کی کئی مختلف مثالوں کے لئے جا رہے ہیں. اور اس طرح ہم ایک نئے اعداد و شمار کی قسم کے طور پر کی وضاحت کریں. یہاں، ہم ایک typedef struct نوڈ ہے. اس مثال میں، ہم عددی نوڈس کے ساتھ کام کر رہے ہو، تو ہم نامی ایک عددی قدر ہے اور اس کے بعد ہم کسی دوسرے پوائنٹر ہے، اور اس صورت میں، یہ ایک نوڈ کو ایک پوائنٹر ہے، تو ہم نے ایک struct نوڈ * کہا جاتا اگلے ہے. اور پھر ہم اس پوری چیز نوڈ کو بلا رہے ہیں. اس بات کا یقین کر لیں کہ آپ یہ نحوی کی پیروی کرو. نوٹس کہ نوڈ اصل اوپر محولہ کے ساتھ ساتھ گھوبگھرالی منحنی خطوط وحدانی سے نیچے ہے. ، پھر ٹریک جہاں میرا پہلا نوڈ اس سے منسلک فہرست میں ہے رکھنے کے لئے تو میں نامی ایک نوڈ سر پوائنٹر ہے، اور ایک نوڈ کے سائز کے لئے میں malloc کافی جگہ ہے. نوٹس، تاہم، سر اصل میں ایک نوڈ پوائنٹر کے طور پر ایک حقیقی نوڈ خود کے خلاف ہے. تو سر اصل میں کسی بھی قیمت پر مشتمل نہیں ہے، یہ صرف جو بھی میرے منسلک فہرست میں پہلے نوڈ ہے کی طرف اشارہ ہے. لنک کی فہرست کے ایک بہتر احساس حاصل کرنے کے لئے، کیونکہ یہ بہت ضروری ہے ، اس بات کا یقین کر لیں کہ آپ سلسلہ برقرار رکھنے کے لئے بنانے کے ٹریک رکھنے کے لئے میں اس کے بارے میں سوچ کے طور پر ایک سطر میں عوام کے ہاتھ انعقاد، ہر شخص اگلے ایک کے ساتھ جہاں ہاتھ پکڑے ہوئے ہے. آپ اس ڈرائنگ میں نظر نہیں، لیکن کر سکتے ہیں بنیادی طور پر وہ اگلے شخص کی طرف اشارہ کرتے ہوئے کر رہے ہیں جو ان کے سلسلہ میں ہے. اور اگر ایسا ہے تو آپ کو منسلک فہرست ہے جہاں ان لوگوں کو گزرنا کرنا چاہتے ہیں - تصور ان لوگوں میں سے سب ان کے ساتھ وابستہ اقدار ہیں اور لائن میں اگلے شخص کی طرف اشارہ - اگر آپ کی فہرست منسلک گزرنا چاہتے ہیں، مثال کے طور پر، یا تو اقدار میں ترمیم کرنے کی ، اور اس طرح سے ایک قدر یا کچھ اور کے لئے تلاش یا تو آپ کو مخصوص شخص کو ایک پوائنٹر چاہیں گے. تو ہم ڈیٹا کی قسم نوڈ پوائنٹر کے لئے جا رہے ہیں. یہ مثال کے طور پر، کرسر کہتے ہیں. اس نام پر ایک عام طریقہ iterator یا ایسا کچھ ہو جائے گا کیونکہ یہ iterating ہے اور اصل میں منتقل جو نوڈ کی طرف اشارہ ہے. یہ یہاں اپنے کرسر ہو جائے گا. ہماری کرسر ہماری فہرست میں پہلے عنصر کو سب سے پہلے کی طرف اشارہ کریں گے. اور تو جو ہم کرنا چاہتے ہیں ہم بنیادی طور پر کرسر کی جائے گی جاری، کی طرف سے کی طرف بڑھ رہا ہے. اس صورت میں، ہم نے اس فہرست میں اگلے عنصر میں منتقل کرنا چاہتے ہیں. arrays کے ساتھ، کیا ہم کرتے ہیں ہم صرف ہم نے 1 کی طرف سے انڈیکس میں اضافہ کہیں گے. اس صورت میں، ہم کیا کرنے کی ضرورت ہے اصل میں تلاش ہے جو شخص اس موجودہ شخص کی طرف اشارہ کرتے ہوئے ہے، اور یہ کہ اگلے قدر ہونے جا رہا ہے. تو اگر کرسر ایک نوڈ پوائنٹر ہے، پھر جو ہم کرنا چاہتے ہیں ہم قیمت پر حاصل کرنے کے لئے ہے کہ کرسر اشارہ کر رہا ہے کرنا چاہتے ہیں ہے. ہم اس نوڈ پر حاصل کرنے کے لئے کرنا چاہتے ہیں اور اس کے بعد، ایک بار ہم نے اس نوڈ میں ہو، جہاں اس کی طرف اشارہ کرتے ہوئے تلاش کرنے چاہتے ہیں. اصل نوڈ ہے کہ کرسر اشارہ کر رہا ہے حاصل کرنے کے لئے، عام طور پر ہم اسے (* کرسر) کی طرف سے اس بات کی نشاندہی کرتے ہیں. یہ آپ کو اصل نوڈ ہے کہ کرسر اشارہ کر رہا ہے دے گی. اور پھر اس کے بعد، جو ہم کرنا چاہتے ہیں ہے ہم تک رسائی حاصل کرنا چاہتے ہیں جو بھی نوڈ کے اگلے قیمت ہے. کہ struct کے اندر اقدار تک رسائی حاصل کرنے کے لئے، ہم نقطہ آپریٹر ہے. تو پھر یہ (* کرسر) اگلے گے. لیکن یہ * کرسر کے ارد گرد بریکٹ کرنے کے معاملے میں تھوڑا گندا ہے، اور ہم کرسر> کے ساتھ اس پورے بیان کی جگہ لے لے. یہ تو اور ڈیش سے زیادہ علامت ہے، لہذا ایک تیر بنانے. کرسر اگلا>. ہے کہ آپ نوڈ اصل میں ملے گا کہ کرسر پوائنٹس. اس قدر اگلے ہے. تو اسٹار اور نقطہ کرنے کے بجائے، آپ کو ایک تیر کے ساتھ کہ تبدیل کر رہے ہیں. اس بات کا یقین کر لیں کہ آپ اس نحو کو استعمال کرنے کے لئے کی کوشش کرتے ہیں بنانے کے لئے بہت ہوشیار رہنا. اب جب کہ ہم اپنے کرسر ہے، اگر ہم قدر تک رسائی حاصل کرنا چاہتے ہیں، پہلے، ہم کرسر اگلا> تھا، لیکن نوڈ میں قیمت ہے کہ کرسر اشارہ کر رہا ہے تک رسائی حاصل کرنے کے لئے، ہم صرف یہ کہتے ہیں قیمت نوڈ>. وہاں سے، یہ ڈیٹا کے قسم کی ہے جو کچھ بھی ہم نے اقدار اور ہو نوڈس بیان کیا ہے. اگر یہ ایک int نوڈ ہے، تو کرسر> قیمت صرف ایک عدد صحیح ہونا ہو رہا ہے. تو ہم اس پر آپریشن کر سکتے ہیں، equalities چیک کرنے کے لیے، یہ مختلف اقدار، وغیرہ تفویض تو پھر تم کیا کرنا چاہتے ہیں اگر آپ اگلے شخص کو آپ کا کرسر منتقل کرنا چاہتے ہیں، آپ اصل میں کرسر کی قدر تبدیل کریں. چونکہ کرسر ایک نوڈ پوائنٹر ہے، آپ کو حقیقی پوائنٹر ایڈریس کو تبدیل آپ کی فہرست میں اگلے نوڈ کے ایڈریس پر. یہ صرف کچھ کوڈ ہے جہاں آپ iterate سکتا ہے. کہاں ہے، میں تبصرہ کچھ کرنا ہے کہ جہاں آپ شاید قدر تک رسائی حاصل کرنے جا رہے ہیں یا اس مخصوص نوڈ کے ساتھ کیا کچھ کیا. اسے شروع کرنے کے لئے، میں کہنا ہے کہ اپنے کرسر کو ابتدائی طور پر منسلک فہرست میں پہلے عنصر کی طرف اشارہ ہو رہا ہے. اور اتنی آگے، میں یہ نوڈ کے سربراہ کے طور پر وضاحت کی گئی ہے. جیسا کہ میں نے پہلے ذکر کیا تھا، آزاد بہت ضروری ہے. آپ کو اس بات کا یقین کر لیں کہ آپ کی فہرست میں ہر عنصر آزاد ہے ایک بار تم نے اس کے ساتھ ختم کیا ہے بنانا چاہتے ہیں. جب آپ ان اشارہ میں سے کسی کو کوئی حوالہ دینے کی ضرورت نہیں ہے، آپ کو اس بات کا یقین کر لیں کہ آپ ان اشارہ کے تمام آزاد کرنا چاہتے ہیں. لیکن آپ کو بہت ہوشیار یہاں رہنا چاہتا ہوں میں کہ آپ کو کسی بھی میموری لیک سے بچنے کے لئے کرنا چاہتے ہیں. اگر وقت سے پہلے ہی، تو آپ مفت میں ایک شخص کے تمام اشارہ کہ وہ نوڈ پوائنٹس ضائع ہو رہا ہے. شخص مثال کے طور پر واپس جا رہا ہوں یہ تھوڑا سا زیادہ اعلی دانو بنانے ہم ان لوگوں کو اس معاملے میں انہوں نے ایک راکشس کے ساتھ ایک جھیل کے اوپر معلق کر رہے ہیں سوائے ہے،. ہمیں اس بات کا یقین کر لیں کہ جب بھی ہم آزاد ہیں، ہم کھونا نہیں بنانا چاہتے ہیں اور کسی بھی مراکز کی اس سے پہلے کہ ہم واقعی انہیں آزاد ہے. مثال کے طور پر، اگر آپ کو صرف اس آدمی پر مفت یہاں فون تھے، تو وہ، آزاد کریں گے لیکن اس وقت ان تمام لڑکوں کو تو کھو جائے گی اور وہ آلگائے اور نیچے گر جائے گی. تو ہم اس بات کا یقین کر لیں کہ اس کے بجائے، ہم آرام کرنے کے لئے ایک لنک کو برقرار رکھنے کے لئے چاہتے ہیں کرنا چاہتے ہیں. ہمارے سر پوائنٹر، اس فہرست میں سب سے پہلے عنصر کے اشارہ. یہ پہلا شخص لنگر کاری کرنے میں ایک رسی کی طرح ہے. تم کیا کرنا چاہتے ہو سکتا ہے جب آپ آزاد ایک فہرست ہے - اگر آپ نے پہلے عنصر پہلے آزاد کرنا چاہتے ہیں، تو آپ کو ایک عارضی پوائنٹر کر سکتے ہیں کہ پوائنٹس جو بھی پہلا عنصر ہے. تو تم اپنے عارضی پوائنٹر کی طرف اشارہ کرتے ہوئے. اس طرح، ہم پہلے نوڈ کا ہولڈ ہے. اور پھر، ہم سے جانتا ہے کہ سب سے پہلے نوڈ آزاد ہونے جا رہا ہے، تو ہم اس رسی، اس کا لنگر، ہمارے سر کو منتقل کر سکتے ہیں، اصل میں جو بھی پہلا اشارہ کر رہا ہے کی طرف اشارہ ہے. تو یہ سر اصل میں دوسرا عنصر اب اشارہ ہے. اب ہم آزاد ہے جو کچھ بھی TEMP میں ذخیرہ کیا جاتا ہے کی اجازت دی جاتی ہے، اور ہم کہ یہ ہماری فہرست میں دوسرے نوڈس کے سب خطرے میں ڈال کے بغیر مٹانے کر سکتے ہیں. ایک اور طریقہ ہے کہ آپ یہ کر سکتے ہیں ہو سکتا ہے ہر وقت آپ کو فہرست میں آخری عنصر آزاد کیونکہ انہوں نے ضمانت دی گئی ہو نہیں رکھا جائے کچھ کی طرف اشارہ کیا. تو تم نے اس میں سے ایک، تو مفت ایک یہ تو مفت یہ ایک آزاد سکتا ہے. یہ یقینی طور پر کام کرتا ہے، لیکن کیونکہ منسلک فہرستوں کی نوعیت کی طرف سے تھوڑا سا سست ہے ہم صرف گزشتہ ایک فوری طور پر نہیں کود کر سکتے ہیں. ہم منسلک فہرست میں ہر عنصر گزرنا ہے اور چیک کرنے کے لیے کہ آیا کہ ایک شہوت انگیز null اشارہ کر رہا ہے، ہر بار چیک کرنے کے لیے کرتے ہیں، اور پھر ایک بار ہم آخر تک پہنچنے، تو مفت ہی ہے. اگر آپ اس عمل کو کرنا ہے، تو آپ یہاں کیا جائے گا کی جانچ پڑتال، یہاں کی جانچ پڑتال، تو یہاں کی جانچ پڑتال، آزاد، اور پھر واپس جا، یہاں کی جانچ پڑتال، یہاں کی جانچ پڑتال، یہ آزاد، یہاں کی جانچ پڑتال، اور پھر یہ آزاد ہے. یہ تھوڑا سا زیادہ وقت لیتا ہے. جی ہاں. [طالب علم] ممکن ہے یہ ایک لنک کی فہرست میں اس حوالے سے ایک وہاں سے نکلنے کی پوائنٹر ذخیرہ بنانے کے لئے کیا جائے گا؟ یہ ممکن ضرور ہو گی. سوال کو دوبارہ کرنے کے لئے، کیا یہ ممکن ہے منسلک فہرست ڈھانچے ایسی ہے کہ آپ کو ایک منسلک فہرست کے اختتام کی طرف اشارہ کرتے ہوئے پوائنٹر ہے؟ میں کہنا ہے کہ ممکن ہے، اور ہر وقت ہے کہ آپ کو آپ کے منسلک فہرست میں کچھ داخل تھا آپ کو ہے کہ اس طرح پوائنٹر اور چیزوں کو اپ ڈیٹ کرنے کی ضرورت گا. آپ کو مثال کے طور پر ایک نوڈ * دم گے. لیکن جب آپ اس خصوصیت کو لاگو کرنے کر رہے ہیں، آپ کو تجارت آف کے بارے میں سوچ ہے، کس طرح کئی بار کی طرح میں نے اس سے زیادہ سے iterating جا رہا ہوں، کتنا مشکل دم کا ٹریک کے طور پر ساتھ ساتھ سر پر رکھنے کے لئے کی جا رہی ہے کے ساتھ میری، iterator، اور اس طرح چیزوں کے طور پر. کہ کیا -؟ >> [طالب علم] جی ہاں. یہ ممکن ہے، لیکن ڈیزائن فیصلوں کے معاملے میں، آپ کے اختیارات وزن ہے. یہاں کے کوڈ کا ایک کنکال ہے کہ آپ کو ایک لنک کی فہرست میں ہر عنصر کو آزاد کرنے کی اجازت دے گا ہے. ایک بار پھر، کیونکہ میں ایک لنک کی فہرست پر iterating کر رہا ہوں، میں کرسر کی کسی قسم جا رہا ہوں یا iterator. ہم iterating تک کرسر نل ہے. آپ کو جب آپ کا کرسر نل ہے iterate نہیں کرنا چاہتا کیونکہ اس کا مطلب ہے کہ اس فہرست میں کچھ بھی نہیں ہے. تو پھر میں یہاں ایک عارضی نوڈ * جو میں غور کر رہا ہوں کی طرف اشارہ کرتے ہوئے میری فہرست کے پہلے ہے، اور پھر میں اپنے کرسر کو آگے 1 اور تو مفت میں جو بھی عارضی اسٹوریج میں تھا منتقل. اب ہم منسلک کی فہرست میں داخل کرنے کے لئے آئے. میں میری منسلک فہرست میں تین مراکز ہیں، اور سیدھا سادہ کیس ہے کے ساتھ جانا جہاں ہم ہمارے منسلک کی فہرست کے آخر میں ایک اور نوڈ داخل کرنا چاہتے ہیں. ایسا کرنے کے لئے، ہم سب کیا کریں گے ہم گزرنا گے جہاں منسلک فہرست کی موجودہ آخر ہے، تو جو بھی نوڈ شہوت انگیز null اشارہ کر رہا ہے - کہ ایک یہ ہے - اور اس کے بعد، اصل میں، یہ ایک آخری نوڈ نہیں ہے کا کہنا ہے کہ؛ ہم واقعی ایک دوسرے کے لئے جا رہے ہیں. تو ہم ہم جو کچھ بھی داخل کر رہے ہیں اس موجودہ ایک نقطہ ہوگا. تو اب یہ لال شخص یہاں منسلک فہرست میں آخری نوڈ بن جاتا ہے. اور منسلک فہرست میں آخری نوڈ کی خصوصیت یہ ہے کہ اس شہوت انگیز null اشارہ ہے. تو پھر ہمیں کیا کرنا ہوگا یہ سرخ آدمی پوائنٹر شہوت انگیز null قائم ہے. آمدید. لیکن کیا اگر ہم نے دوسری اور تیسری کے درمیان میں ایک نوڈ داخل کرنا چاہتا تھا؟ کہ ایک بہت ہی سادہ ہے نہیں ہے کیونکہ ہم اس بات کو یقینی بنانا چاہتے ہیں کہ ہم ہمارے منسلک فہرست میں کسی بھی نوڈ کے ہے. ہمیں کیا کرنا ہوگا اس بات کا یقین کر لیں کہ ہم نے خود کو ہر ایک اینکر ہے. مثال کے طور پر، یہ دوسری کال دو. اگر تم نے کہا تھا کہ دوسرا اب اس نئی ایک اشارہ اور آپ کو صرف وہاں ایک پوائنٹر بنا دیا، پھر اس آدمی کو کھو دیا جا رہا ہے کہ اس کے نتیجے کیونکہ وہاں اسے کوئی لنک نہیں ہے. بجائے - میں نے یہ پھر سے اپنی طرف متوجہ کریں گے. اپنے فنکارانہ صلاحیتوں کو معاف کریں. ہم جانتے ہیں کہ ہم صرف براہ راست نئی نہیں 2 منسلک کر سکتے ہیں. ہم اس بات کا یقین کر لیں کہ ہم گزشتہ ایک پکڑ بنانے کے لئے ہے. ہمیں کیا کرنا چاہتے ہیں کر سکتے ہیں ایک عارضی پوائنٹر عنصر ہے اس پر سے منسلک کیا جا رہا ہے. تو پھر ہم وہاں ایک عارضی پوائنٹر ہے. چونکہ ہم جانتے ہیں کہ اس تیسری ایک کیا جا رہا ہے کا ٹریک رکھا ہے، 2 اب ہمارے نئے ایک سے منسلک کر سکتے ہیں. اور، اگر اس نئے سرخ آدمی 2 اور 3 کے درمیان میں ہونے جا رہا ہے، تو پھر اس آدمی کے پوائنٹر کی طرف اشارہ کرنے جا رہا ہے؟ >> [طالب علم] TEMP. TEMP. جی ہاں. تو پھر اس سرخ آدمی کے اگلے قیمت TEMP جا رہا ہے. جب آپ منسلک کی فہرست میں داخل کر رہے ہیں، ہم نے دیکھا ہے کہ ہم کر سکتے آسانی سے ایک عارضی صف بنانے کی طرف سے آخر تک کچھ یا اگر ہم ہمارے صف کے وسط میں کچھ شامل کرنے کے لئے کرنا چاہتا تھا، تو یہ تھوڑا سا زیادہ ارد گرد shuffling گی. اگر آپ چاہتے ہیں، مثال کے طور پر، ایک کے مطابق منسلک فہرست ہے، تو آپ پر قسم کی ہے اس کے اخراجات اور فوائد کا وزن کیونکہ اگر آپ کے مطابق صف کرنا چاہتے ہیں، اس کا مطلب ہے کہ ہر وقت ہے کہ آپ اس میں داخل ہے، یہ تھوڑا سا زیادہ وقت لے جا رہا ہے. تاہم، اگر آپ بعد میں کرنا چاہتے ہیں، ہم کے طور پر تلاش کر لیں گے ہم چاہیں گے، ایک لنک کی فہرست کے ذریعے تلاش، تو اس میں آسانی ہو گا اگر آپ کو پتہ ہے کہ سب کچھ ٹھیک ہے ہو سکتا ہے. تو آپ کو اس کے اخراجات اور فوائد کا وزن کرنا چاہتے ہیں کر سکتے ہیں. ایک لنک کی فہرست میں شامل کرنے کے لئے راستہ ہے جس سے ایک فہرست کے آغاز میں داخل ہے. اگر ہم اپنے میزبان کو یہاں اپنی طرف متوجہ - یہ ہمارے سر ہے - اور پھر ان لوگوں نے اس سے منسلک ہے، اور اس کے بعد ہم نے ایک نیا آغاز میں داخل نوڈ ہے، تو ہمیں کیا کرنا چاہتے ہو سکتا ہے؟ صرف یہ کہہ رہا میں نیلے رنگ سرخ سے منسلک کرنے چاہتے ہیں کے ساتھ کیا غلط ہوگا، اس لیے کہ وہ سب سے پہلے ایک ہے؟ یہاں کیا ہوگا؟ ان تین میں سے سب ضائع ہو جائیں گے. تو ہم ایسا نہیں کرنا چاہتے ہیں. ایک بار پھر، ہم نے یہ سیکھا کہ ہم عارضی پوائنٹر کے کچھ قسم کی ضرورت ہے. عارضی طور پر اس آدمی کی طرف اشارہ کرنے کا انتخاب کرتے ہیں. پھر ہم عارضی طور پر نیلے رنگ کے ایک نقطہ ہو سکتا ہے اور پھر سرخ نیلے رنگ کی طرف اشارہ ہے. وجہ ہے کہ میں لوگوں کا استعمال کرتے ہوئے یہاں کر رہا ہوں کیونکہ ہم واقعی دیکھ چاہتے ہیں لوگوں پر برقرار ہے اور اس بات کا یقین کر لیں کہ ہم نے ان کے لئے ایک لنک ہے بنانے ہم پہلے ہم اس طرح ایک اور ہاتھ یا کچھ جانے. اب جب کہ ہم منسلک فہرستوں کا احساس ہے - کہ ہم کس طرح ایک لنک کی فہرست بنا سکتا ہے اور قسم تعریف کی ہے کہ ایک نوڈ کے لئے پر مشتمل کے لئے ڈھانچے پیدا اور پھر اس بات کا یقین کر لیں کہ ہم اس منسلک فہرست کے سر پر ایک پوائنٹر ہے - ایک بار ہم اس ہے اور ہم جانتے ہیں کہ کس طرح ایک صف کے ذریعے گزرنا، مختلف عناصر تک رسائی حاصل کر سکتے ہیں، ہم جانتے ہیں کہ کس طرح شامل کرنے کے لئے ہے اور ہم جانتے ہیں کہ کس طرح ان کے آزاد، تو ہم تہجی میں حاصل کر سکتے ہیں. ہمیشہ کی طرح، ہم نے سوالات کا ایک ٹکڑا ہے کہ آپ منسلک کی فہرست کے ساتھ آپریٹنگ کے لئے استعمال کیا ہے اور جیسا کہ قطار اور stacks کے طور پر مختلف ڈھانچے. پھر ہم تہجی میں منتقل کر سکتے ہیں. غلط ہجے کی تقسیم کے کوڈ میں اہمیت کا حامل فائلوں کی ایک جوڑے کی ہے. سب سے پہلے ہم یہ دیکھیں گے کہ ہم یہ Makefile یہاں ہے، جو ہم پہلے واقعی نہیں کا سامنا کرنا پڑا ہے. اگر آپ pset5 فولڈر کے اندر دیکھا، آپ کو نوٹس، کہ آپ کے پاس ایک ایچ فائل ہوگا، پھر تم دونوں سی فائلوں. ہے. اس Makefile ہے پہلے ہے، ہم صرف ٹائپ ہے اور تو پروگرام کا نام اور پھر ہم ان دلائل اور جھنڈوں کے تمام سنکلک میں منظور نظر آئے گی. کیا Makefile کرتا ہے، ہمیں ایک بار میں کئی فائلوں کو مرتب کرنے کی اجازت دیتا ہے ہے اور پرچم کہ ہم چاہتے ہیں میں گزرے. یہاں ہم صرف ایک ہیڈر فائل یہاں ہے. اس کے بعد ہم اصل میں دو منبع فائلوں ہے. ہم speller.c اور dictionary.c ہے. آپ Makefile اگر تم چاہو تو میں ترمیم کا استقبال ہے. یہاں ہے کہ اگر آپ کو صاف ٹائپ نوٹس، تو کیا اس سے فرق پڑتا ہے اصل میں کچھ ہٹاتا ہے کہ بنیادی ہے. اگر آپ کو ایک انقطاع غلطی ہے، بنیادی طور پر آپ کو ایک بنیادی ڈمپ حاصل ہے. تو یہ بدسورت چھوٹی فائل کہا جاتا بنیادی ڈائریکٹری میں دکھایا جائے گا. آپ کو ہٹانے کے کہ اسے صاف کرنے چاہیں گے. یہ کسی بھی exe فائلوں کو ہٹا دیتا ہے اور اے فائلوں. dictionary.h میں ایک نظر ڈالیں. اس کا کہنا ہے کہ یہ ایک لغت فعالیت کی یہ وانی ہے. ہم لغت میں کوئی لفظ کے لئے ایک زیادہ سے زیادہ لمبائی ہے. ہم کا کہنا ہے کہ یہ سب سے طویل ممکن لفظ کی جا رہی ہے. یہ 45 کی لمبائی کی ہے. تو ہم جا الفاظ کہ اس کی حد سے تجاوز نہیں کر رہے ہیں. یہاں ہم صرف تقریب prototypes ہے. ہم اصل پر عمل درآمد کی ضرورت نہیں ہے کیونکہ ہے کہ کیا ہم اس pset کے لئے کر کریں گے. لیکن اس کا کیا ہے کیونکہ ہم بڑی فائلوں کے ساتھ نمٹنے یہاں کر رہے ہیں اور ایک بڑے پیمانے پر فعالیت، یہ مفید H فائل. کوئی اور پڑھ یا کا استعمال کرتے ہوئے اپنے کوڈ تاکہ سمجھ کیا ہو رہا ہے کر سکتے ہیں. اور شاید وہ پر عملدرآمد چاہتے ہیں کی کوشش کرتا ہے اگر آپ ہیش میزیں یا اس کے برعکس کیا. پھر وہ میری لوڈ تقریب کو کہیں گے، اصل عمل مختلف ہو رہا ہے، لیکن اس پروٹوٹائپ نہیں بدل جائے گی. ہم یہاں چیک کرنے کے لیے ہے جو صحیح واپس اگر دیئے گئے لفظ لغت میں ہے. پھر ہم لوڈ، جو کہ بنیادی طور پر ایک ڈکشنری فائل میں لیتا ہے ہے اور اس کے بعد اسے کچھ آنکڑا ڈھانچہ میں لوڈ کرتا ہے. ہم سائز ہے، جس میں، جب کہا جاتا ہے، آپ کی ڈکشنری کے سائز واپس، کتنے الفاظ اس میں جمع کیے جاتے ہیں، اور پھر خالی، جو سب میموری آزاد ہے کہ آپ کو لیا جا سکتا ہے جبکہ آپ کی ڈکشنری بنانے. چلو dictionary.c پر ایک نظر لے. ہم دیکھتے ہیں کہ یہ بہت dictionary.h کی طرح اب یہ صرف اس میں ان TODOs کے سب ہے سوائے لگتا ہے،. اور تاکہ آپ کا کام ہے. آخر میں، آپ کو اس کوڈ کو سب کے ساتھ ہوں گے بھرنے speller.c. Dictionary.c، جب چلانے کے، کچھ کرنے کی واقعی نہیں جا رہی ہے، تو ہم speller.c طرف دیکھو سپیل چیکر کی اصل عمل کو دیکھنے کے لئے. اگرچہ تم جا اس کوڈ کے کسی بھی ترمیم کرنے کے لئے نہیں کر رہے ہیں، یہ اہم ہے، جب لوڈ کہا جاتا ہے کو سمجھنے کے لئے پڑھیں، جب میں نے چیک کو فون کر رہا ہوں، صرف اسے باہر نقشہ سمجھنے، دیکھتے ہیں کس طرح تقریب کام کرتا ہے. ہم دیکھتے ہیں کہ یہ صحیح استعمال کے لئے کی جانچ پڑتال ہے. بنیادی طور پر، یہ جب کوئی ہجے کنندہ چلتا ہے، کی طرف اشارہ کرتا ہے کہ یہ اختیاری ہے ان کے لیے ایک ڈکشنری فائل میں منتقل کیونکہ وہاں پہلے سے طے شدہ ڈکشنری فائل جا رہا ہے. اور پھر وہ منتر کی جانچ پڑتال کرنے کے لئے کے لئے متن میں منتقل ہے. وقت کے ساتھ ساتھ rusage سودے کیونکہ اس pset کے ایک حصہ ہے جو ہم سے بعد میں نپٹونگا نہ صرف ایک عملی ہجے پڑتال کار کام کر رہے لیکن اصل میں یہ روزہ ہو رہا ہے. اور تو ہے کہ جہاں rusage اندر آ رہا ہے یہاں، ہم ایک ہمارے dictionary.c فائلوں کی پہلی کال پر دیکھتے ہیں، جس کا بوجھ ہے. کامیابی صلی اللہ علیہ وسلم صحیح ناکامی، صلی اللہ علیہ وسلم کے جھوٹے - لوڈ صحیح ہیں یا کہ باطل واپس. لہذا اگر لغت لوڈ ٹھیک نہیں ہے، تو speller.c 1 واپس چھوڑ جائے گا. لیکن اگر یہ بوجھ مناسب طریقے سے کرتا ہے، تو یہ جاری ہو رہا ہے. ہم جاری ہے، اور ہم نے کچھ فائل میں / O یہاں دیکھ جہاں یہ ٹیکسٹ فائل کو کھولنے سے نمٹنے جا رہا ہے. یہاں، اس کا کیا ہے متن میں ہر ایک لفظ منتر کے چیک کرتا ہے. تو کیا speller.c یہیں کر رہی ہے ٹیکسٹ فائل میں iterating ہے الفاظ میں سے ہر ایک اور پھر ان کے لغت میں کی جانچ ہو رہی ہے. یہاں، ہم نے ایک غلط ہجے شدہ ہے کہ اگر چیک درست ہے یا نہیں واپس نظر آئے گا بولین ہے. اگر لفظ لغت میں اصل میں ہے، تو چیک درست واپس آ جائیں گے. اس کا مطلب یہ ہے کہ ہے کہ لفظ غلط ہجے شدہ نہیں ہے. تو غلط ہجے شدہ باطل ہے، اور یہی وجہ ہے کہ ہم نے دھماکے وہاں ہے، اشارہ کریں گے. ہم جا رہو، اور پھر یہ کتنے الفاظ غلط ہجے شدہ ٹریک رکھتا ہے فائل میں ہیں. اس پر اور فائل بند ہے. پھر یہاں، یہ رپورٹ کتنی غلط ہجے شدہ الفاظ تمہارے پاس تھا. اس کا حساب لگاتا ہے یہ ڈکشنری لوڈ کرنے میں کتنا وقت لیا، یہ چیک کرنے کے لیے کتنا وقت لیا، زیادہ وقت سائز کا حساب کرنے کے لیا کہ کس طرح، جو، جیسا کہ ہم چلے جائیں گے، بہت ہی چھوٹا ہونا چاہئے، اور پھر کتنا وقت لغت اتارنا لیا. یہاں اوپر ہم یہاں اتارنا اذان دیکھو. اگر ہم سائز کے لئے یہاں چیک کرنے کے لیے، تو ہم دیکھتے ہیں کہ یہاں سائز کال ہے جہاں اس لغت کے سائز کا تعین کرتا ہے ہے. بہت اچھے. لوڈ لاگو کرنے کے لئے، جو لغت لوڈ ہو جائے گا اور اس pset کے لئے ہمارا کام ہے آنکڑا ڈھانچہ - آپ جو بھی انتخاب کرتے ہیں، یہ ایک ہیش میز یا کوشش - ڈکشنری فائل سے الفاظ کے ساتھ. تو پھر تم فونز، جو لغت میں الفاظ کی تعداد کو واپس آ جائیں گے. اور اگر آپ کو ایک ہوشیار راستہ میں لوڈ پر عمل در آمد کی، تو سائز کافی آسان ہونا چاہئے. تو پھر تم، چیک کرنے کے لیے ہے جو اگر ایک دیئے گئے لفظ لغت میں جانچ پڑتال کرے گا. تو speller.c ایک تار میں گزر جاتا ہے، اور پھر آپ چاہے وہ سٹرنگ چیک کرنے کے لیے ہے آپ کی ڈکشنری کے اندر اندر موجود ہے. نوٹس ہے کہ ہم عام طور پر معیاری لغات، لیکن اس pset میں کسی بھی زبان میں، بنیادی طور پر کسی بھی لغت میں منظور کر دیا. تو ہم نہ صرف فرض کر سکتے ہیں کہ لفظ اندر ہے. ایک مخصوص لغت میں لفظ FOOBAR تعریف یوں کی جا سکتا ہے کہ ہم اندر سے گزر اور پھر ہم، اتارنا جو میموری سے لغت آزاد ہے. سب سے پہلے، میں ہیش کی میز کے طریقہ کار سے جانا پسند ہے. ، کہ ہم کس طرح ان چار کے افعال میں سے تمام عمل درآمد کر سکتے ہیں کے بارے میں اور پھر میں طریقہ کی کوشش کرتا ہے، کہ ہم کس طرح ان چار افعال پر عملدرآمد کریں گے، اور کچھ عام تجاویز کے بارے میں آخری بات میں جب آپ pset کر رہے ہیں اور یہ بھی کہ آپ کس طرح استعمال کرنے کے لئے کرنے کے قابل ہو سکتا ہے میموری لیک کے لئے چیک کرنے کے لیے Valgrind. میں ہیش کی میز طریقہ میں حاصل ہوں. ایک ہیش میز بالٹیاں کی ایک فہرست پر مشتمل ہے. ہر قیمت، ہر لفظ، ان بالٹیاں میں سے ایک میں جانے کے لئے کی جا رہی ہے. ایک ہیش میز مثالی طور پر یکساں طور پر ان اقدار کی تمام تقسیم ہے کہ آپ میں گزر رہے ہیں اور اس کے بعد ان کے اس طرح کہ بالٹی میں populates ہر بالٹی اس میں اقدار کی اتنی ہی تعداد کے بارے میں ہے. ساخت ایک ہیش میز کے لئے، ہم نے لنک کی فہرست کے ایک سرنی ہے. ہم کیا کرتے ہیں جب ہم ایک قیمت میں گزر ہے، ہم چیک کرنے کے لیے اس قدر جہاں سے تعلق رکھتے ہیں، جس بالٹی اس سے تعلق رکھتا ہے، اور پھر یہ کہ بالٹی کے ساتھ منسلک منسلک فہرست میں جگہ. یہاں، میں نے ایک ہیش فنکشن ہے. یہ ایک int ہیش کی میز ہے. تو پہلے بالٹی میں 10 سے نیچے کسی بھی integers پہلے بالٹی کے لئے جاؤ. 10 اوپر کوئی integers ذیل لیکن دوسری میں 20 جانے اور تو اور وغیرہ. میرے لئے، ہر ایک بالٹی میں ان کی تعداد کی نمائندگی کر رہا ہے. تاہم کہتے ہیں، میں 50 میں مثال کے طور پر منتقل کرنے کے لئے،. ایسا لگتا ہے کے طور پر اگر پہلے تین دس نمبروں کی ایک رینج پر مشتمل ہے. لیکن میں میرا ہیش ٹیبل میں سے کسی قسم کا integers میں لینے کی اجازت دینے کے لئے چاہتے ہیں، تو میں نے گزشتہ بالٹی میں 30 سب سے اوپر کی تعداد فلٹر ہوگا. اور اس کہ اسنتلیت ہیش ٹیبل کے ایک قسم میں تو نتیجے گی. کرنے کا اعادہ، ایک ہیش میز بالٹیاں کی ایک صف ہے ہر بالٹی میں ایک لنک کی فہرست کہاں ہے. اور اس طرح جہاں ہر قیمت جاتا ہے، کا تعین جس میں بالٹی میں چلا جاتا ہے، آپ چاہتے ہیں کہ کیا ایک ہیش تقریب کہا جاتا ہے کے لئے جا رہے ہیں کا کہنا ہے کہ یہ ایک قیمت لیتا ہے اور اس کے بعد اس کی قیمت ایک خاص بالٹی کے مساوی ہے. تو اس مثال میں اوپر، میرے ہیش فنکشن ہر قیمت لیا. یہ جانچ پڑتال کی چاہے وہ 10 سے کم تھی. اگر یہ تھا، یہ پہلی بالٹی میں ڈال دیں گے. یہ چیک کرتا ہے کہ آیا یہ 20 سے کم ہے، دوسری میں کہتے ہیں اگر یہ سچ ہے، اگر یہ 30 سے ​​کم ہے اور پھر چیک یہ تیسری بالٹی میں کہتے ہیں، اور پھر باقی تمام صرف چوتھی بالٹی آتا ہے. تو جب بھی آپ کو ایک کی قیمت ہے، آپ ہیش تقریب مناسب بالٹی میں اس قدر رکھ گا. ہیش تقریب بنیادی طور پر جانتے ہیں آپ کتنے بالٹیاں ہے کی ضرورت ہے. آپ ہیش ٹیبل کا سائز،، بالٹیاں آپ کے کی تعداد جو ایک مقررہ تعداد میں ہے کہ تم پر منحصر ہے، آپ کے لئے فیصلہ کرنے کے لئے جا رہا ہے، لیکن یہ ایک مقررہ تعداد ہونے جا رہا ہے. آپ کے ہیش فنکشن تو اس کا تعین کرنے کے لئے پر اعتماد کیا جائے گا جو بالٹی ہر کلید جاتا ہے میں اس طرح کہ وہ یکساں طور پر تقسیم کیا ہے. ہماری لنک کی فہرست کے عمل، اب کو ہیش ٹیبل میں ہر نوڈ کی طرح ہے اصل میں ایک قسم کے حروف کو ہے جا. تو ہم نامی ایک چار لفظ صف اور پھر اگلے نوڈ کے دوسرے پوائنٹر ہے، جو سمجھ میں آتا ہے کیونکہ اس میں ایک لنک کی فہرست کو ہونے جا رہا ہے. جب ہم کی فہرست منسلک تھا یاد رکھو، میں ایک نوڈ سے ملاقات کی سر * کیا منسلک فہرست میں پہلے نوڈ کی طرف اشارہ کرتے ہوئے کیا گیا تھا. لیکن ہمارے ہیش کی میز کے لئے، کیونکہ ہم ایک سے زیادہ کی فہرست منسلک ہے، جو ہم چاہتے ہیں یہ ہے کہ ہم ہماری ہیش کی میز کی طرح چاہتے ہیں "ایک بالٹی کیا ہے؟" ایک بالٹی صرف نوڈ اشارہ کے ایک فہرست ہے، اور اس بالٹی میں ہر عنصر اصل کو اس سے منسلک فہرست میں اشارہ کر رہا ہے. اس یوجنابدق پر واپس جانے کے لئے آپ کو دیکھ، کہ خود بالٹیاں تیر ہیں، نوڈس اصل نہیں ہے. ہیش کے افعال میں سے ایک ضروری جائیداد ہے کہ وہ نیتاتمک ہو. یہ ہے کہ جب بھی ہیش آپ نمبر 2 کا مطلب ہے کہ یہ وہی بالٹی ہمیشہ واپس آ جانا چاہئے. ہر ایک کی قیمت کہ ہیش تقریب میں جاتا ہے، اگر بار بار، اسی کی انڈیکس کو حاصل کرنے کے لئے ہے. تو آپ کے ہیش تقریب صف کی فہرست واپس اس قدر جہاں سے تعلق رکھتا ہے. جیسا کہ میں نے پہلے کہا، بالٹیاں کی تعداد طے ہو گئی ہے، اور تو اپنی فہرست ہے کہ آپ واپس بالٹیاں کی تعداد سے کم ہے لیکن 0 سے بڑا ہے. وجہ ہے کہ ہم بجائے صرف ایک ایک سے منسلک فہرست ہیش فرائض ہیں یا ایک صف یہ ہے کہ ہم سب سے زیادہ آسانی سے ایک مخصوص حصے میں کودنے کے قابل ہونا چاہتے ہیں اگر ہم قدر کی خصوصیت کو جانتے ہیں - پوری پوری ڈکشنری کے ذریعے تلاش کرنے کے لئے کی بجائے، اس کا ایک خاص حصے پر کودنے کے قابل ہے. آپ ہیش تقریب اکاؤنٹ میں مثالی طور پر لینا چاہئے، ہر ایک بالٹی چابیوں کی تقریبا اتنی ہی تعداد ہے. چونکہ ہیش میز لنک کی فہرست کے ایک سلسلہ ہے، تو منسلک کی فہرست اپنے آپ کو ایک سے زیادہ نوڈ کے لئے جا رہے ہیں. گزشتہ مثال میں، دو مختلف نمبرز، اگرچہ وہ برابر نہیں تھے جب hashed، اسی انڈیکس واپس کریں گے. تو جب آپ الفاظ کے ساتھ نمٹنے کر رہے ہیں، ایک لفظ جب hashed ایک لفظ کے طور پر ایک ہی ہیش قدر کیا جائے گا. یہ ہے جو ہم کہتے ہیں ایک تصادم، جب ہم نے ایک نوڈ ہے کہ جب hashed ہے، اس بالٹی میں منسلک فہرست خالی نہیں ہے. ٹیکنالوجی کا ہے کہ ہم وہاں فون لکیری ہے کی تحقیقات، آپ کو منسلک فہرست میں کہاں اور پھر جہاں آپ اس نوڈ کو شامل کرنے کے لئے کرنا چاہتے ہیں کیونکہ آپ کو ایک تصادم ہے. تم نے دیکھا ہے کہ ایک تجارتی آف یہاں، ٹھیک ہے ہو سکتا ہے کر سکتے ہیں؟ اگر آپ کو ایک بہت چھوٹے ہیش میز، بالٹیاں کی ایک بہت چھوٹی تعداد ہے، تو آپ کو collisions کی ایک بہت جا رہے ہیں. لیکن اگر آپ کو ایک بہت بڑی ہیش کی میز، آپ کو شاید collisions کم سے کم کرنے جا رہے ہیں، لیکن یہ ایک بہت بڑی آنکڑا ڈھانچہ ہونے جا رہا ہے. اس کے ساتھ تجارت آف ہونے جا رہا ہے. تو جب آپ اپنے pset کر رہے ہیں، کے ارد گرد ادا کرنے کی کوشش کریں شاید ایک چھوٹے ہیش ٹیبل بنانے کے درمیان لیکن اس وقت یہ جان کر کہ یہ اب تھوڑا سا مختلف عناصر گزرنا ہو رہا ہے ان سے منسلک کی فہرست کے. کیا لوڈ کرنے جا رہی ہے اور لغت میں ہر لفظ میں iterate. یہ ڈکشنری فائل پوائنٹر میں گزر جاتا ہے. تو آپ کو فائل کا فائدہ اٹھانے کے لئے I / O کام کرتا ہے کہ آپ pset4 میں مہارت حاصل کر رہے ہیں اور لغت میں ہر لفظ iterate. لغت میں ہر لفظ ایک نیا نوڈ بننے کی ضرورت ہے، اور آپ کو آپ کی ڈکشنری کے آنکڑا ڈھانچہ کے اندر ان مراکز کی ہر ایک جگہ جا رہے ہیں. جب بھی آپ کو ایک نیا لفظ ملتا ہے، تم جانتے ہو کہ یہ نوڈ بننے جا رہی ہے. تو آپ فورا جاؤ اور malloc ہر نئے لفظ ہے کہ آپ کے لئے ایک نوڈ پوائنٹر کر سکتے ہیں. یہاں میں اپنے نوڈ پوائنٹر new_node بلا رہا ہوں اور میں کیا mallocing رہا ہوں؟ ایک نوڈ کا سائز. پھر ایک فائل سے اصل سٹرنگ، پڑھنے کے لئے کیونکہ اصل لغت سے محفوظ کیا جاتا ہے ایک لفظ ہے اور اس کے بعد ایک نئی سطر میں، جو ہم سے ناجائز فائدہ اٹھا سکتا تقریب fscanf ہے، فائل ڈکشنری فائل جس میں یہ ہے کہ ہم میں منظور ہو، تو یہ ایک تار کے لئے فائل کو سکین کرتا ہے اور گزشتہ بحث میں مقامات سٹرنگ کہ. اگر آپ لیکچرز میں سے ایک، جب ہم گئے واپس یاد اور قسم CS50 لائبریری تہوں کھلی واپس، ہم fscanf کا ایک عمل درآمد وہاں دیکھا. fscanf پر واپس جانا، ہم فائل ہے کہ ہم سے پڑھ رہے ہو، ہم اس فائل میں ایک تار کے لئے تلاش کر رہے ہیں، اور پھر ہم اس میں رکھ رہے ہیں. ، میں یہاں new_node> لفظ ہے کیونکہ new_node نوڈ پوائنٹر ہے اصل نہیں نوڈ ہے. تو میں new_node کہہ رہا ہوں، میں نوڈ پر جانے کے لئے کہ اس کی طرف اشارہ ہے کرنا چاہتے ہیں اور پھر لفظ اس قدر تفویض. پھر ہم اس لفظ پر لے اور ہیش ٹیبل میں یہ داخل کرنا چاہتے ہیں. احساس ہے کہ ہم ایک نوڈ پوائنٹر new_node کیونکہ ہم جانتے ہیں کہ نوڈ کا پتہ کیا ہے کرنا چاہتے ہیں جا رہے ہیں ہم جب کیونکہ نوڈس خود struct کی ساخت، میں داخل یہ ہے کہ انہوں نے ایک نیا نوڈ پوائنٹر ہے. تو تو اس کی طرف اشارہ کرنے والے نوڈ کا ایڈریس کیا ہے؟ جو پتہ new_node جا رہا ہے. کیا اس کا کوئی مطلب ہے، کیوں ہم نوڈ * کے طور پر ایک نوڈ کی مخالفت new_node کر رہے ہیں؟ ٹھیک ہے. ہم ایک لفظ ہے. اس قدر new_node> لفظ ہے. یہ لغت سے لفظ ہے کہ ہم ان پٹ کرنا چاہتے ہیں پر مشتمل ہے. تو کیا ہوا جو ہم کرنا چاہتے ہیں ہم اس سٹرنگ پر ہمارے ہیش فنکشن کال کرنا چاہتے ہیں کیونکہ ہمارے ہیش فنکشن ایک تار میں تو لیتا ہے اور ہمیں ایک عددی واپس کہ عددی انڈیکس ہے جہاں اس انڈیکس میں hashtable کہ بالٹی کی نمائندگی کرتا ہے کہاں ہے. ہم نے جو فہرست لے تو چاہتے ہیں اور ہیش ٹیبل کے اس صفحہ اور پھر اس سے منسلک فہرست new_node میں نوڈ ڈالنے کا استعمال کریں. یاد رکھیں کہ تاہم آپ اپنے نوڈ کو داخل کرنے کا فیصلہ کیا ہے، چاہے وہ درمیان میں ہے اگر آپ اسے حل کرنا چاہتے ہیں یا شروع میں یا آخر میں، صرف اس بات کا یقین کر لیں کہ آپ کی آخری نوڈ ہمیشہ اتارنا null اشارہ ہے کہ صرف ایک ہی طریقہ ہے کہ ہم جانتے ہیں کہ جہاں ہمارے منسلک کی فہرست کے آخری عنصر ہے کیونکہ. اگر سائز ایک عددی ہے کہ لغت میں الفاظ کی تعداد کی نمائندگی کرتا ہے ہے، تو ایسا کرنے کا ایک طریقہ ہے جب بھی سائز کہا جاتا ہے کہ ہم ہماری ہیش ٹیبل میں ہر عنصر کے ذریعے اور پھر ہیش میز کے اندر اندر ہر منسلک فہرست کے ذریعے iterate اور پھر اس کی لمبائی کا حساب، 1 کی طرف سے ہمارے انسداد 1 میں اضافہ ہے. لیکن ہر بار سائز کہا جاتا ہے، جو ایک طویل وقت لے جا رہا ہے کیونکہ ہم linearly ہر ایک منسلک فہرست کی تحقیقات کی جا رہے ہیں. اس کے بجائے، یہ بہت آسان ہو جائے گا اگر آپ کو نگاہ رکھنے کے کتنے الفاظ کے اندر منظور کر رہے ہیں تو پھر اگر آپ کو آپ کی لوڈ تقریب کے اندر اندر ایک انسداد میں شامل ہیں کہ ضرورت کے مطابق اپ ڈیٹ، تو انسداد پر، اگر آپ کو یہ ایک عالمی متغیر قائم کرنے، اور سائز کی طرف سے حاصل کیا جائے گا کے قابل ہو جائے گا. تو کیا حجم صرف کر سکتا ہے ایک ہی لائن میں ہے، صرف انسداد قدر واپس، لغت کے سائز، جو آپ نے پہلے ہی بوجھ سے نمٹا. یہی میرا مطلب جب میں نے کہا کہ اگر آپ کو ایک مفید طریقہ میں لوڈ کے نفاذ، تو سائز کافی آسان ہو جا رہا ہے. تو اب ہم چیک کرنے کے لیے. اب ہم ان پٹ ٹیکسٹ فائل سے الفاظ کے ساتھ کام کر رہے ہو. اور ہم ان پٹ کے ان الفاظ کی تمام ہے، کی جانچ پڑتال جا رہے ہیں ڈکشنری میں یا نہیں اصل میں ہیں. جدوجہد کی طرح، ہمیں کیس کی بے حسی کے لئے اجازت دینے کے لئے چاہتے ہیں. آپ کو اس بات کا یقین کر لیں کہ تمام الفاظ کے میں منظور کرنے کے لئے چاہتے ہیں، اگرچہ وہ مخلوط کیس ہو، جب سٹرنگ کا موازنہ کے ساتھ کہا جاتا ہے، کے برابر ہیں. لغت متن فائلوں میں الفاظ اصل میں تمام چھوٹے ہیں. ایک اور بات یہ ہے کہ تم فرض ہے کہ ہر لفظ میں، ہر سٹرنگ منظور کر سکتے ہیں، یا تو حروف تہجی یا apostrophes پر مشتمل ہو جائے گا. Apostrophes ہماری لغت میں درست الفاظ بننے جا رہے ہیں. تو اگر آپ apostrophe S کے ساتھ ایک لفظ ہے، آپ کی ڈکشنری میں ایک حقیقی جائز لفظ ہے جو آپ کے ہیش ٹیبل میں نوڈس میں سے ایک ہونے جا رہا ہے. چیک کریں اگر لفظ موجود ہے کے ساتھ چلتی ہے، تو یہ ہمارے ہیش ٹیبل میں مل گیا ہے. اگر لفظ لغت میں ہے، تو لغت میں الفاظ کے ہیش ٹیبل میں ہیں، تو ہیش ٹیبل میں اس لفظ کے لئے نظر. ہم جانتے ہیں کہ چونکہ ہم اپنے ہیش تقریب عملدرآمد ، اس طرح کہ ہر منفرد لفظ ہمیشہ ایک ہی قیمت hashed ہے تو ہم جانتے ہیں کہ ہمارے پورے پورے ہیش میز کے ذریعے تلاش کرنے کے بجائے، ہم منسلک فہرست ہے کہ اس لفظ کا تعلق چاہئے اصل میں حاصل کر سکتے ہیں. اگر یہ لغت میں تھے، تو اس بالٹی میں کیا جائے گا. ہمیں کیا کرنا ہے، کر سکتے ہیں اگر لفظ ہمارے میں منظور سٹرنگ کا نام ہے، ہم صرف ہیش کر سکتے ہیں کہ منسلک فہرست میں لفظ اور دیکھو hashtable کی قدر [ہیش (الفاظ)]. وہاں سے، جو ہم کر سکتے ہیں ہے ہم مراکز کی ایک چھوٹی اپسمچی یہ لفظ تلاش کرنے کے لئے ہے، اور اسی طرح ہم سے منسلک فہرست گزرنا، walkthrough میں پہلے سے ایک مثال کا استعمال کرتے ہوئے کر سکتے ہیں، اور پھر فون سٹرنگ لفظ صلی اللہ علیہ وسلم جہاں کہیں بھی کرسر کی طرف اشارہ کرتے ہوئے موازنہ کرنے، اس لفظ کو دیکھتے ہیں اور ان چاہے موازنہ. ، کی بنیاد پر جس طرح کہ آپ اپنے ہیش فنکشن منظم اگر اس کے مطابق ہے، تو آپ کو پہلے جھوٹے تھوڑا سا واپس کرنے کے قابل ہو سکتا ہے، لیکن اگر یہ ناچھانٹا ہوا ہے، تو آپ کو آپ کے منسلک فہرست کے ذریعے traversing جاری کرنا چاہتے ہیں جب تک کہ آپ کو فہرست کے آخری عنصر ملے. اور، اگر آپ اب بھی وقت آپ کو منسلک فہرست کے آخر تک پہنچ چکے لفظ مل گیا ہے نہیں اس کا مطلب یہ ہے کہ آپ کا لفظ لغت میں موجود نہیں ہے، اور تاکہ لفظ باطل ہے، اور چیک جھوٹے واپس آ جانا چاہئے. اب ہمیں اتارنا آتے ہیں، جہاں ہم تمام نوڈس کہ ہم malloc'd کو آزاد کرنا چاہتے ہیں، تو ہماری ہیش ٹیبل کے اندر مراکز کی. ہم منسلک فہرستوں اور مفت میں نوڈس کے تمام iterate کرنا چاہتے ہیں جا رہے ہیں. اگر آپ walkthrough میں مثال کے طور پر اوپر ہیں جہاں ہم نے ایک سے منسلک فہرست آزاد، تو آپ ہیش ٹیبل میں ہر عنصر کے لئے اس عمل کو دوبارہ چاہیں گے. اور میں اس پر walkthrough کے اختتام کی طرف جائیں گے، لیکن Valgrind ایک آلہ ہے جہاں آپ کو دیکھو، اگر آپ درست طریقے سے آزاد کر سکتے ہیں ہے ہر نوڈ کہ آپ malloc'd یا کچھ اور کہ آپ malloc'd ہے، کسی بھی دوسرے پوائنٹر ہے. تو ہے کہ ہیش میزیں ہے، جہاں ہم بالٹیاں کی ایک محدود تعداد ہے اور ایک ہیش تقریب ہے کہ ایک قیمت لے لو اور پھر ایک مخصوص بالٹی اس قدر تفویض کرے گا. اب ہم کوشش کریں. اس کی طرح نظر آتے کی طرح کی کوشش کرتا ہے، اور میں نے بھی ایک مثال کے طور پر اپنی طرف متوجہ کریں گے. بنیادی طور پر، آپ کو ممکنہ خطوط کی ایک پوری صف ہے، اور اس کے بعد جب بھی آپ کو ایک لفظ کی تعمیر کر رہے ہیں، اس خط کے امکانات کی ایک وسیع رینج پر ایک ڈکشنری کے لئے رکھا جائے منسلک کیا جا سکتا ہے. کچھ الفاظ C کے ساتھ شروع لیکن پھر ایک ساتھ جاری رکھیں، لیکن دوسروں O کے ساتھ مثال کے طور پر جاری ہے. A trie ان الفاظ کے ممکنہ سنیوجنوں کی سب visualizing کا ایک طریقہ ہے. A trie خط جو کہ الفاظ پر مشتمل کی ترتیب کے ٹریک رکھنے کے لئے کی جا رہی ہے، ، branching جب ضروری، جب ایک خط میں حروف کی ایک سے زیادہ کی طرف سے کے بعد کیا جا سکتا ہے اور آخر میں ہر موڑ پر بتاتے ہیں چاہے وہ لفظ درست ہے یا نہیں ہے کیونکہ اگر آپ لفظ مساج ہجے رہے ہیں، MA مجھے نہیں لگتا ایک درست لفظ ہے، لیکن مساج ہے. اور اس طرح یہ آپ کے trie میں سے ظاہر ہوتا ہے، کہ مساج کے بعد ہے جو اصل میں ایک درست لفظ ہے. ہمارے trie میں ہر نوڈ اصل نوڈ اشارہ کی ایک صف پر مشتمل جا رہا ہے، اور ہم نے، خاص طور پر ہے، ان نوڈ اشارہ 27 جا رہے ہیں، حروف تہجی میں ہر خط کے طور پر ساتھ ساتھ apostrophe کردار کے لئے ایک. اس صف میں ہر عنصر خود دوسرے نوڈ کی طرف اشارہ کرنے جا رہا ہے. تو اگر اس نوڈ نل ہے، اگر اس کے بعد کچھ بھی نہیں ہے، تو ہم جانتے ہیں کہ اس لفظ کی ترتیب میں کوئی مزید حروف. لیکن اگر اس نوڈ نل نہیں ہے، اس کا مطلب یہ ہے کہ اس خط کے تسلسل میں زیادہ حروف ہیں. اور پھر اس کے علاوہ، ہر نوڈ کی طرف اشارہ کرتا ہے چاہے وہ ایک لفظ ہے یا نہیں کے آخری کردار ہے. ایک trie کی ایک مثال میں جانے دو. سب سے پہلے میں اس صف میں 27 مراکز کے لئے کمرہ ہے. اگر میں لفظ بار ہے - اگر میں لفظ بار ہے اور میں میں داخل کرنا چاہتے ہیں، پہلا خط B ہے، اگر ایسا ہے تو میری trie خالی ہے، B حروف تہجی کا دوسرا حرف ہے، تو میں اس انڈیکس میں ڈال منتخب کرنے کے لئے جا رہا ہوں. میں B یہاں دیکھ کر جا رہا ہوں. B ایک نوڈ جو تمام ممکنہ حروف کی ایک سرنی کی طرف اشارہ کرنے کے کی جا رہی ہے خط B. اس کے بعد کی پیروی کر سکتے ہیں اس صورت میں، میں لفظ بار کے ساتھ نمٹنے رہا ہوں تو یہاں جانے گا. ایک کے بعد، میں نے خط R، تو اس کے اپنے مجموعہ میں ایک اب پوائنٹس ہیں، اور پھر R یہاں ہو جائے گا. بار ایک مکمل لفظ ہے، اس لئے تو میں دوسرے نوڈ R نقطہ ہے جا رہا ہوں جو یہ کہتا ہے کہ ہے کہ وہ لفظ صحیح ہے. وہ نوڈ بھی مراکز کی ایک صف کی جا رہی ہے، لیکن وہ نل ہو سکتا ہے. لیکن بنیادی طور پر یہ اس طرح جاری کر سکتے ہیں. یہ تھوڑا سا زیادہ واضح ہو گیا ہے جب ہم ایک مختلف مثال، تو میرے ساتھ صبر کریں. اب ہم ہماری لغت کے اندر بار ہے. اب کا کہنا ہے کہ ہم نے لفظ باز ہے. ہم B کے ساتھ شروع، اور ہم نے پہلے سے ہی خط جو ہماری لغت میں ہے میں سے ایک کے طور پر B ہے. A. کے بعد ہم نے ایک پہلے سے ہی ہے. لیکن اس وقت اس کے بجائے، ہم Z مندرجہ ذیل ہے. تو پھر ہمارے صف میں ایک عنصر Z جا رہا ہے، اور تو وہ لفظ کا ایک درست ختم ہونے کی طرف اشارہ کرنے جا رہا ہے. تو ہم دیکھتے ہیں کہ جب ہم B تک جاری رہے اور پھر، الفاظ کے لئے فی الحال ہماری لغت میں دو مختلف اختیارات B اور اے کے ساتھ شروع کرتے ہیں کہو کہ ہم لفظ FOOBAR داخل کرنا چاہتے تھے. پھر ہم F. میں ایک اندراج کریں گے F ایک گرہ ہے کہ ایک پوری صف اشارہ ہے. O ہم O تلاش O پر ہوتا، تو ایک پوری فہرست پر رابطہ ہے. ہم B ہے اور اس کے بعد جاری رکھیں گے، ہم چاہتے ہیں اور اس کے بعد آر تو پھر FOOBAR تک نیچے FOOBAR traverses طرح ایک صحیح لفظ ہے. اور تو یہ ایک درست بات ہو گی. اب کا کہنا ہے کہ ہماری لغت میں اگلے لفظ اصل میں لفظ FOO ہے. ہم کہیں گے کیا F. F مندرجہ ذیل؟ دراصل میں نے پہلے ہی اے کے لئے ایک جگہ ہے، تو میں جاری کی جا رہی ہوں. میں ایک نیا بنانے کے لئے کی ضرورت نہیں ہے. آگے. FOO اس لغت میں ایک درست لفظ ہے، اس لئے تو میں اس بات کی نشاندہی کی جا رہی ہوں کہ صحيح ہے. اگر میں میرا ترتیب وہاں بند کرو، کیا یہ صحیح ہو گا. لیکن اگر ہم FOO سے ہماری ترتیب B جاری نیچے FOOB اور FOOB تھا، ایک لفظ نہیں ہے، اور یہ کہ ایک درست میں سے ایک کے طور پر اس بات کا اشارہ نہیں ہے. trie میں، آپ کو ہر نوڈ اشارہ ہے کہ یہ ایک درست لفظ ہے یا نہیں ہے، اور پھر ہر نوڈ 27 نوڈ اشارہ بھی ایک صف ہے کہ تو خود نوڈس کی طرف اشارہ ہے. یہ ہے کہ آپ کس طرح اس کی وضاحت کرنا چاہتے ہیں کر سکتے ہیں کا ایک طریقہ ہے. تاہم ہیش ٹیبل مثال میں، صرف پسند ہے، جہاں ہم نے ایک نوڈ * سر تھا ہمارے منسلک کی فہرست کے آغاز کی نشاندہی کرنے کے لئے، ہم بھی چاہتے ہیں جا رہے ہیں ہے کہ ہمارے trie کے آغاز کہاں ہے جاننے کے کوئی نہ کوئی راستہ ہے. بعض لوگ کال درختوں کی کوشش کرتا ہے، اور یہ کہ جہاں جڑ سے آتا ہے. تو ہم ہمارے درخت کی جڑ اس بات کا یقین کر لیں کہ ہم رہنے کے لئے زمین بنانا چاہتے ہیں جہاں بھی ہماری trie ہے. ہم نے پہلے ہی اس قسم کی گئی تھی جس طرح تم نے لغت میں ہر لفظ لوڈ کرنے کے بارے میں سوچ سکتا ہے. بنیادی طور پر، آپ کو ہر لفظ کے لئے اپنے trie کے ذریعے iterate کرنا چاہتے ہیں کے لئے جا رہے ہیں جاننے اور ہے کہ بچوں میں ہر عنصر - ہم نے اسے اس صورت میں بچے کو بلایا - ایک مختلف خط کے مساوی ہو، اور تم نے ان اقدار کو چیک کرنے کے لیے کرنا چاہتے ہیں کے لئے جا رہے ہیں اس مخصوص انڈیکس خط کے مساوی ہے. ، تمام طرح کیسر اور Vigenere واپس سوچ تو یہ جان کر کہ، ہر خط آپ کو نقشہ کی ایک حروف تہجی انڈیکس طرح واپس کر سکتے ہیں Z ذریعے ضرور ایک ایک حروف تہجی کی خط نقشہ بہت آسان جا رہا ہے، لیکن بدقسمتی سے، apostrophes بھی الفاظ میں ایک مقبول کردار ہیں. مجھے یہ بھی نہیں ہوں اس بات کا یقین کر لیں کہ ASCII قیمت کیا ہے، تاکہ اگر آپ فیصلہ کریں گے کہ آپ اسے یا تو سب سے پہلے ایک چاہتے انڈیکس کو تلاش کرنا چاہتے ہیں یا گزشتہ ایک، آپ کو اس کے لئے ایک مشکل کوڈت چیک کرنا پڑے گا اور اس کے بعد کہ مثال کے طور پر 26 انڈیکس میں ڈال دیا. تو اس کے بعد آپ کے بچے کو قدر کی جانچ پڑتال کر رہے ہیں [میں] کہ آپ نے جو کچھ بھی خط میں ہیں کے لئے [i] کے مساوی ہے. اگر وہ نل ہے، اس کا مطلب یہ ہے کہ اس وقت نہیں ہے کسی بھی ممکنہ خطوط کہ گزشتہ ترتیب سے نتیجے میں پڑنے والے، تو آپ malloc کرنا چاہتے ہیں جا رہے ہیں اور ایک نیا نوڈ اور کہ بچوں کو [میں] اس کی طرف اشارہ تاکہ آپ کو تشکیل دیں - جب ہم نے مستطیل میں ایک خط ڈالا - بچوں کو اس نئے نوڈ میں کو غیر نل اور نقطہ بنانے کے. لیکن FOO کی ہماری مثال میں پسند کرتا ہے اگر یہ نل نہیں ہے، جب ہم نے پہلے سے ہی FOOBAR تھا، ہم جاری ہے، اور ہم نے ایک نیا نوڈ کبھی نہیں کر رہے ہیں بلکہ صرف سچ is_word قائم کرنے اس لفظ کے آخر میں. تو پھر پہلے کی طرح، یہاں آپ ایک وقت میں ہر خط کے ساتھ کام کر رہے ہو، کیونکہ سائز کے لئے آپ کے لئے آسان ہو رہا ہے، کا تخمینہ کرنے کی بجائے اور تمام درخت کے ذریعے جاؤ اور حساب کتنے بچوں میں ہے اور پھر دور branching، یاد کتنے بائیں طرف اور دائیں جانب ہیں اور اس طرح چیزیں، یہ آپ کے لئے بہت آسان ہو رہا ہے اگر آپ کو کتنے الفاظ آپ کو میں انہوں نے مزید کہا کر رہے ہیں کے ٹریک رکھنے کے جب آپ کو بوجھ کے ساتھ کام کر رہے ہو. اور تو اس طرح سائز کے سائز کی ایک عالمی متغیر صرف واپس آ سکتے ہیں. اب ہم چیک کرنے کے لیے آتے ہیں. پہلے کی طرح ایک ہی معیار، جہاں ہم نے کیس کی بے حسی کے لئے اجازت دینے کے لئے چاہتے ہیں. اچھی طرح کے طور پر، ہم سمجھتے ہیں کہ ڈور میں صرف حروف تہجی حروف یا apostrophes ہیں کیونکہ بچوں کو طویل عرصے سے 27 ایک صف ہے، حروف تہجی کے علاوہ apostrophe کے خطوط کی. کے لئے چیک کرنے کے لیے ہے کہ آپ کیا کرنا چاہیں گے آپ کو جڑ شروع کرنا چاہتے ہیں کریں گے کیونکہ جڑ ایک صف پر مشتمل ہے کی طرف اشارہ کریں گے ایک لفظ کے ممکنہ شروع خطوط کی. آپ کو وہاں شروع کرنے جا رہے ہیں، اور پھر آپ کو چیک کرنے کے لیے جا رہے ہیں اس کی قیمت نل ہے یا نہیں ہے، کیونکہ اگر قیمت نل ہے، اس کا مطلب یہ ہے کہ لغت میں کوئی اقدار نہیں ہے جو اس خاص ترتیب میں اس خط پر مشتمل ہے. اگر یہ نل ہے، تو اس کا مطلب یہ ہے کہ لفظ فورا غلط ہجے شدہ ہے. لیکن اگر وہ نل نہیں ہے تو، آپ جاری رکھ سکتے ہیں، کا کہنا ہے کہ پہلا خط ایک لفظ میں ایک ممکنہ پہلا حرف ہے، تو اب میں اگر دوسرے خط، اس ترتیب، میری ڈکشنری کے اندر اندر ہے چیک کرنے کے لیے کرنا چاہتے ہیں. تو کیا آپ پہلے نوڈ کے بچوں کے انڈیکس پر جانے کے لئے جا رہے ہیں چیک کرنے کے لیے اور چاہے وہ دوسرا خط موجود ہے. تو پھر تم نے اس عمل کو چیک کرنے کے لیے چاہے وہ ترتیب درست ہے یا نہیں ہے دوبارہ آپ trie کے اندر اندر. اس انڈیکس پوائنٹس پر نوڈ بچوں شہوت انگیز null جب بھی، آپ کو معلوم ہے کہ اس ترتیب کا کوئی وجود نہیں ہے، لیکن اس وقت اگر آپ لفظ کے آخر کہ آپ نے inputted کیا ہے تک پہنچ جاتے ہیں، تو آپ کو اب چیک کرنے کے لیے کہ میں نے اس ترتیب کو مکمل کیا ہے چاہتے ہیں اور میری trie کے اندر اندر پایا جاتا ہے، کہ درست ہے یا نہیں لفظ ہے؟ اور تو آپ اس کو چیک کرنے کے لیے پر کرنا چاہتے ہیں، اور اس وقت اگر تم نے اس ترتیب کو تلاش کر لیا ہے، تو آپ کو چیک کرنے کے لیے کرنا چاہتے ہیں چاہے وہ لفظ درست ہے یا نہیں ہے کیونکہ گزشتہ صورت میں واپس یاد ہے کہ میں متوجہ کیا جہاں ہم FOOB تھا یہ درست ترتیب یہ ہے کہ ہم نے محسوس کیا، لیکن ایک حقیقی درست لفظ خود نہیں تھا. اسی طرح کی کوشش کرتا ہے آپ آپ کے trie میں مراکز کی سب اتارنا کرنا چاہتے ہیں میں اتارنا. معاف کیجئے گا. ہیش میزیں جہاں ہم خالی تمام نوڈس آزاد کی طرح کی کوشش کرتا ہے ہم بھی نوڈس کے تمام آزاد کرنا چاہتے ہیں. سب سے آسان لوڈ نیچے سے اصل میں سب سے اوپر کام کریں گے کیونکہ یہ بنیادی طور پر منسلک کی فہرست ہیں. تو ہم اقدار کے سب اس بات کا یقین کر لیں کہ ہم پر فائز کرنا چاہتی ہوں اور ان میں سے واضح طور پر تمام. تم کیا کرنا چاہتے ہو رہا اگر آپ trie کے ساتھ کام کر رہے ہیں رہے ہیں نیچے اور آزاد ممکن سب سے کم نوڈ سے سب سے پہلے سفر ہے اور اس کے بعد ان بچوں کی سب جاؤ اور ان میں سے تو تمام جاؤ اور تو مفت وغیرہ، trie پہلے کے سب سے نیچے پرت کے ساتھ نمٹنے کی طرح قسم کی اور پھر سب سے اوپر جا رہا ہے ایک بار تم نے سب کچھ آزاد ہے. یہ جہاں پنراورتی تقریب ہاتھ میں آ سکتا ہے ایک اچھی مثال ہے. ایک بار جب آپ اپنے trie کے سب سے نیچے پرت آزاد ہے، تو آپ کو اس کے باقی اتارنا کال، اس بات کا یقین کر لیں کہ آپ ہر منی آزاد بنانے - تم منی کی کوشش کرتا ہے کے طور پر کی طرح دیکھ سکتے ہیں. تو یہاں آپ اپنی جڑ ہے. میں صرف اس کو آسان بنانے کر رہا ہوں تو میں ان میں سے 26 کو اپنی طرف متوجہ کرنے کی ضرورت نہیں ہے. تو آپ ان ہے، اور اس کے بعد ان الفاظ کے انداز کی نمائندگی کرتی ہیں ان چھوٹی حلقوں کے تمام خطوط جو کہ حروف کی درست انداز ہیں کہاں ہیں. چلو، صرف تھوڑا سا جاری. آپ کیا کرنا چاہتے ہیں کے لئے جا رہے ہیں یہاں اور پھر مفت کسی کو اس نیچے ہے اور اس کے بعد نیچے دیے گئے یہ ایک مفت قبل اس کے کہ آپ سب سے اوپر ایک یہاں آزاد وجہ سے، اگر آپ دوسری سطح میں یہاں مفت میں کچھ تو آپ واقعی میں اس قدر یہاں کھو دیں گے. یہی وجہ ہے کہ یہ trie کے لئے اس بات کا یقین کر لیں کہ آپ نیچے پہلے آزاد بنانے کے لئے اتارنا ضروری ہے. آپ کو ہر نوڈ کے لئے کیا کرنا چاہتا ہے کا کہنا ہے کہ ہو سکتا ہے میں بچوں کی سب اتارنا کرنا چاہتے ہیں. اب جب کہ ہم ہیش ٹیبل کے طور پر ساتھ ساتھ طریقہ کار trie طریقہ کے لئے خالی پر چلے گئے، ہم Valgrind کو دیکھنے کے لئے چاہتے ہیں کے لئے جا رہے ہیں. Valgrind آپ کو مندرجہ ذیل حکم کے ساتھ چلاتے ہیں. تم valgrind V-ہے. آپ تمام لیک کے لئے جانچ پڑتال جب آپ اس بات کا یقین متن دیا ہجے کنندہ چلاتے رہے ہیں کیونکہ ہجے کنندہ ایک ٹیکسٹ فائل میں لینے کی ضرورت ہے. تو Valgrind آپ کے پروگرام کو چلانے کے، آپ کو بتا، تم کتنے بائٹس مختص کرے گا، تم کتنے بائٹس آزاد ہے، اور یہ آپ کو بتا کہ کیا آپ نے ابھی کافی آزاد یا آپ مفت کیا کافی نہیں، یا کبھی کبھی تم بھی زیادہ مفت مفت ایک نوڈ کی طرح جو پہلے ہی کر سکتے ہیں کیا گیا ہے آزاد اور اسی طرح یہ آپ کو غلطیاں واپس آ جائیں گے. اگر آپ Valgrind کا استعمال کرتے ہیں، تو آپ کو کچھ پیغام دے گا اشارہ چاہے آپ یا تو آزاد ضرورت سے کم ہے، صرف اتنا یا کافی وقت سے زیادہ ہے. اس pset کا ایک حصہ، یہ اختیاری ہے کہ بگ بورڈ کو چیلنج ہے. لیکن جب ہم نے ان اعداد و شمار ڈھانچے کے ساتھ کام کر رہے ہو یہ مذاق کی طرح ہے یہ دیکھنے کے لئے آپ کے ڈیٹا ڈھانچے تیزی سے کس طرح اور کس طرح موثر ہو سکتا ہے. کی ایک بہت collisions میں ہیش تقریب کا نتیجہ کیا ہے؟ یا پھر اپنے ڈیٹا کا سائز بہت بڑا ہے؟ کیا یہ وقت کی ایک بہت گزرنا؟ ہجے کنندہ کے لاگ ان نتائج کتنا وقت آپ کو لوڈ کرنے کے لئے استعمال کرتے ہیں، ، سائز عمل کرنے کے لئے چیک کرنے کے لیے، اور اتارنا لہذا ان بگ بورڈ میں تعینات ہیں، آپ اپنے ہم جماعتوں کے خلاف کہاں مقابلہ کر سکتے ہیں کچھ عملے کے ارکان کو دیکھ اور جو سب سے تیز رفتار سے ہجے پڑتال کار ہے. ایک بات یہ ہے کہ میں ہیش میزیں کے بارے میں نوٹ کرنا چاہتے ہیں یہ ہے کہ کچھ بہت آسان ہیش افعال ہیں کہ ہم کے بارے میں سوچ سکتے ہیں. مثال کے طور پر، آپ کو 26 بالٹیاں ہے، اور تو ہر بالٹی ایک لفظ میں پہلا حرف کے مساوی ہے، لیکن اس ایک خوبصورت اسنتلیت ہیش میز کے نتیجے میں ہو رہا ہے کیونکہ وہاں بہت کم الفاظ ہیں جو M سے شروع سے X کے ساتھ مثال کے طور پر شروع،. ہجے کنندہ کے بارے میں جانے کے لئے کا ایک طریقہ ہے، اگر آپ دوسرے کی فعالیت کے سب نیچے حاصل کرنے کے لئے کرنا چاہتے ہیں، تو بس ایک سادہ ہیش تقریب اپنا کوڈ چلانے کے قابل ہو جائے کرنے کے لئے استعمال اور پھر واپس جا کر اپنے ہیش میز اور تعریف کا سائز تبدیل کریں. ہیش افعال کے لئے ایک انٹرنیٹ پر وسائل بہت ہیں، اور تو آپ اس pset کے لئے ہیش افعال کو انٹرنیٹ پر تحقیق کی اجازت دی جاتی ہے کچھ اشارے اور جب تک پریرتا کے طور پر آپ کو جہاں آپ نے یہ مل گیا سے حوالہ دیتے ہیں اس بات کا یقین کر کے لئے. آپ کو دیکھو کچھ ہیش تقریب ہے کہ آپ انٹرنیٹ پر تلاش کریں اور تشریح کا استقبال ہے. اس سے پہلے، آپ اگر کوئی ایک trie استعمال کیا دیکھ سکیں ہو سکتا ہے کہ ان کے عمل کو آپ کے ہیش میز یا نہیں سے تیز ہے. بگ بورڈ میں کئی بار پیش کر سکتے ہیں. یہ آپ کی سب سے حال ہی میں داخلے کو ریکارڈ کریں گے. تو شاید آپ اپنے ہیش تقریب اور پھر تبدیل احساس ہے کہ یہ اصل میں ہے تیز بہت یا پہلے سے سست بہت. یہ ایک مذاق کے راستے سے تھوڑا سا ہے. ہمیشہ 1 یا 2 عملے کے ارکان جو ممکن slowest ڈکشنری بنانے کی کوشش کرتے ہیں، تاکہ ہمیشہ مذاق ہے کو دیکھنے کے لئے. pset کیلئے استعمال کی ہے آپ ایک اختیاری لغت سے ہجے کنندہ کو چلانے اور پھر ایک لازمی ٹیکسٹ فائل ہے. بنیادی طور پر، جب آپ صرف ایک ٹیکسٹ فائل کے ساتھ ہجے کنندہ کو چلانے اور ایک لغت کی وضاحت نہیں لغت ٹیکسٹ فائل ہے، ایک بڑی کو استعمال کرنے کے لئے جا رہا ہے cs50/pset5/dictionaries فولڈر میں. وہ ایک 100،000 سے زائد الفاظ ہیں. انہوں نے یہ بھی ایک چھوٹی سی لغت ہے جس میں کافی کم الفاظ ہیں اس CS50 آپ کے لئے بنایا گیا ہے. تاہم، آپ بہت آسانی سے یہ آپ کی اپنی لغت میں کر سکتے ہیں اگر آپ کے پاس صرف چھوٹے مثالوں میں کام کرنے والے چاہتے ہیں - مثال کے طور پر، اگر آپ gdb استعمال کرنے کے لئے کرنا چاہتے ہیں اور آپ کو مخصوص اقدار کا پتہ ہے ہے کہ آپ کو آپ کے ہیش میز نقشے پر کرنا چاہتے ہیں. تو تم بار، باز، FOO اور FOOBAR کے ساتھ اپنا خود کا متن فائل صرف کر سکتے ہیں، کہ ایک ٹیکسٹ فائل میں لائن 1 میں سے ہر ایک ان الگ، اور پھر اپنا خود کا متن فائل ہے کہ لفظی صرف شاید 1 یا 2 الفاظ پر مشتمل ہے تاکہ آپ کو پتہ ہے کہ پیداوار بالکل وہی جو ہونا چاہئے. نمونہ متن فائلوں میں سے کچھ بگ بورڈ جب آپ کو چیلنج چلاتے ہیں کہ جانچ پڑتال کرے گا جنگ اور امن اور جین Austen کے ایک ناول یا ایسا کچھ کر رہے ہیں. تو جب آپ کو شروع کر رہے ہیں، بہت آسان ہے اپنا خود کا متن فائلوں کو بنانے کے لئے جو کہ صرف الفاظ کی ایک جوڑے یا شاید 10 پر مشتمل نتیجہ کیا ہونا چاہئے تاکہ اس کی پیشن گوئی کر سکتے ہیں اور پھر اس کے خلاف چیک کرنے کے لیے کنٹرول مثال کے. اور اس کے بعد ہم نے پیشن گوئی اور ڈرائنگ کے ارد گرد چیزوں کے ساتھ کام کر رہے ہو، پھر میں آپ کو قلم اور کاغذ کو استعمال کرنے کے لئے حوصلہ افزائی کرنا چاہتے ہیں کیونکہ یہ واقعی میں کسی کو اس کے ساتھ آپ کی مدد کی جا رہا ہے - تیر ڈرائنگ، ہیش میز یا آپ کی trie لگتا ہے، تم سے کچھ جہاں تیر جا رہے ہیں جب آزاد کر رہے ہیں، کیا آپ کافی پر انعقاد، آپ کسی لنک غائب دیکھتے ہیں اور لیک میموری کی اتاہ کنڈ میں گرنے. تو براہ مہربانی، براہ مہربانی چیزوں کو باہر کرنے کے لئے اپنی طرف متوجہ یہاں تک کہ اس سے پہلے کہ آپ نے کوڈ لکھنے نیچے حاصل کرنے کے لئے کرنے کی کوشش کریں. چیزیں تو ڈرا کہ آپ سمجھتے ہیں کہ کس طرح چیزوں کے کام کرنے جا رہے ہیں کیونکہ مجھے تو اس بات کی ضمانت آپ کو کم پوائنٹر muddles میں حصہ وہاں گے. ٹھیک ہے. میں تم سے اس pset کے ساتھ قسمت کا بہترین کرنا چاہتے ہیں کرنا چاہتے ہیں. یہ شاید سب سے مشکل ہے. تو جلد از جلد شروع کرنے کی کوشش کریں، چیزیں باہر اپنی طرف متوجہ، چیزیں باہر اپنی طرف متوجہ، اور خوش قسمتی ہے. یہ 5 Walkthrough تھا. [CS50.TV]