[عزف الموسيقى] ANDI بنغ: مرحبا بكم في الأسبوع 3 من الباب. شكرا، يا رفاق، لجميع القادمين في هذا الوقت بداية وقت سابق اليوم. لدينا لطيف، قليلا مجموعة الحميمة اليوم. لذلك نأمل أننا سنصل إلى النهاية، ربما، في وقت مبكر، قليلا في وقت مبكر اليوم. بسرعة، فقط بعض إعلانات لجدول الأعمال اليوم. قبل أن نبدأ، ونحن الذهاب للذهاب فقط على بعض المسائل اللوجستية وجيزة، PSET الأسئلة، الاستجواب، وأشياء من هذا القبيل. وبعد ذلك سنقوم الغوص الصحيح في. سنستخدم مصحح دعا GDB ل بدء فضح الكود، التي ديفيد وأوضح في محاضرة في اليوم الآخر. سنذهب على مدى أربعة أنواع من نوع ما. سنذهب عليها بسرعة كبيرة منذ انهم مكثفة جدا. ولكن نعرف أن جميع الشرائح و شفرة المصدر دائما على الانترنت. لذا لا تتردد في اطلاعكم، ل العودة ونلقي نظرة على ذلك. سنذهب من خلال تدوين مقارب، التي هو مجرد وسيلة الهوى للقول "أوقات التشغيل" حيث لدينا O الكبير، الذي وأوضح ديفيد في المحاضرة. وعلينا أيضا أن أوميغا، التي هو وقت التشغيل الأدنى. وسوف نتحدث أكثر قليلا متعمقة بشأن كيفية عمل تلك. وأخيرا، سنذهب على البحث الثنائي، لأن الكثير منكم الذين لديهم بالفعل يحملق في psets بك ربما نعرف أن هذا هو السؤال الذي هو في PSET الخاص بك. لذلك عليك أن تكون سعيدا كل أن نغطي هذا اليوم. وأخيرا، في الخاص قسم ردود الفعل، والواقع غادر حوالي 15 دقيقة في نهاية للذهاب فقط على الخدمات اللوجستية من pset3، أي أسئلة، ربما قليلا من التوجيه، اذا صح التعبير، قبل أن نبدأ البرمجة. لذلك دعونا نحاول من خلال الحصول على المواد بسرعة كبيرة. وبعد ذلك يمكننا أن قضاء بعض الوقت اتخاذ المزيد من الأسئلة للPSET. حسنا. بسرعة، لذلك سوى عدد قليل إعلانات قبل أن تبدأ اليوم. أولا، مرحبا بكم في صنع من خلال اثنين من psets الخاص بك. أخذت نظرة على your-- نعم، دعونا الحصول على جولة من التصفيق لهذا واحد. في الواقع، كنت حقا، أعجب حقا. I متدرج في PSET الأول لليا رفاق الأسبوع الماضي كنت واللاعبين لم يصدق. كان أسلوبه على نقطة بالإضافة إلى بعض التعليقات. تأكد من أنك دائما التعليق التعليمات البرمجية. ولكن psets بك كانوا على نقطة. ويبقيه. وأنه من الجيد للالصف ل نرى أن رفاق يضعون في الكثير من الجهد في طريقتك والتصميم الخاص بك في التعليمات البرمجية التي نود لك أن ترى. لذلك أنا يمر على طول امتناني لبقية المشرفون الدوليون. ومع ذلك هناك بعض الأسئلة الاستجواب أريد فقط أن ذهبت أكثر من ذلك من شأنها أن تجعل كل من حياتي والكثير من الآخر المشرفون الدوليون "يعيش أسهل قليلا. أولا، لقد لاحظت هذا الماضي week-- كم منكم تم تشغيل check50 على التعليمات البرمجية الخاصة بك قبل أن تقدم؟ حسنا. لذلك على الجميع أن يفعل check50، because-- على secret-- نحن في الواقع تشغيل check50 كجزء من صحتها لدينا مخطوطات لاختبار التعليمات البرمجية. حتى إذا التعليمات البرمجية الخاصة بك هو الفشل check50، في جميع الاحتمالات، انه سيكون على الارجح الى فشل الاختيار لدينا كذلك. أحيانا يا رفاق لدينا الأجوبة الصحيحة. مثل، في الجشع، بعض لديك الأرقام الصحيحة، قمت بطباعة فقط بعض الاشياء الاضافية. والاشياء التي اضافية فشل فعلا في الاختيار، لأن الكمبيوتر لا أعرف حقا ما انها تبحث عنه. وهكذا فإنه سيتم فقط من خلال تشغيل، أرى أن الإخراج الخاص بك لا تتطابق مع ما نتوقع الإجابة أن يكون، ووضع علامة عليه من الخطأ. وأنا أعلم أن حدث في بعض الحالات بك هذا الاسبوع. فعدت ويدويا regraded كود الجميع. في المستقبل رغم ذلك، من فضلك، من فضلك تأكد من ان كنت تقوم بتشغيل تحقق 50 في التعليمات البرمجية. لأنه نوع من الألم لTA لدينا للذهاب الى الوراء ويدويا regrade كل PSET واحد لكل واحد، مثلا غاب قليلا. لذلك أنا لم تقلع أي نقطة. أعتقد أنني أقلعت ربما واحد أو اثنين للتصميم. في المستقبل على الرغم من ذلك، إذا كنت فشلها check50، وستتخذ نقطة إيقاف لصحتها. وعلاوة على ذلك، psets هي نظرا الجمعة ظهرا. أعتقد أن هناك سبع دقائق فترة سماح في وقت متأخر أن نقدم لكم. في الوقت هارفارد، انهم السماح ل هو سبع دقائق في وقت متأخر إلى كل شيء. حتى هنا في جامعة ييل، وسوف نقوم الانضمام إلى ذلك أيضا. ولكن الى حد كبير، الساعة 12:07، إذا PSET ليست في، انها سوف تكون وضعت في وقت متأخر. وذلك في حين تم وضع علامة في وقت متأخر، وTA-- أنا لا تزال جارية ليكون الدرجات psets الخاص بك. لذلك عليك أن لا تزال ترى يظهر الصف. ومع ذلك، ونعرف أن في في نهاية الفصل الدراسي، وكل psets في وقت متأخر يكون مجرد ركزت تلقائيا بواسطة الكمبيوتر. ونحن نفعل ذلك لسببين. واحدة، وأحيانا نحصل معذور، مثل أعذار العميد، في وقت لاحق بأنني لا أعرف عن حتى الان. ولذا فإننا نود أن نتأكد من أننا الدرجات كل شيء فقط في حالة، مثل، أنا المفقودين عذر لالعميد. وثانيا، أن نضع في العقل، لا يزال بإمكانك إسقاط PSET واحد لديه نقاط نطاق كامل. ولذا فإننا نود أن الصف كل psets الخاص بك فقط للتأكد من أن نطاق الخاص بك هناك وكنت في محاولة منهم. لذلك حتى لو كان في وقت متأخر، فستبقي الحصول على الائتمان للحصول على نقاط نطاقها، على ما أعتقد. أخلاقي جدا من القصة، وجعل تأكد psets لديك هي في في الوقت المحدد. وإذا لم تكن في يوم من الوقت، أعلم أنه ليست كبيرة. نعم، قبل أن ننتقل، هل لديها أي أسئلة بخصوص ردود الفعل PSET؟ نعم. الحضور: هل نقول نحن يمكن إسقاط واحد من psets؟ ANDI بنغ: نعم. لذلك هناك تسعة psets عموما على مدار الفصل الدراسي. وإذا كان لديك نطاق points-- ذلك النطاق هو فقط، الى حد كبير، وأنت تحاول أن المشكلة أنك تضع في الوقت المناسب، أنت تبين أن كنت قد أظهرت كنت قد قرأت المواصفات. هذا الى حد كبير النطاق. وإذا كنت الوفاء نقطة النطاق، ونحن يمكن إسقاط أدنى واحد خارج النطاق الكامل. ولهذا في صالحك ل استكمال ومحاولة كل PSET. حتى upload-- إذا كان أي من لهم العمل، وتحميل كل منهم. وبعد ذلك سنقوم نأمل أن تكون قادرة على أقدم لكم بعض من هذه النقاط مرة أخرى. رائع. أي أسئلة أخرى؟ رائعة. ثانيا، hours-- مكتب قليلة ملاحظات سريعة حول ساعات العمل. لذلك أولا، وتأتي في وقت مبكر من الاسبوع. لا أحد من أي وقت مضى في ساعات العمل يوم الاثنين. جاء Christabel ل ساعات العمل الليلة الماضية. نعم، Christabel. وماذا لدينا في المكتب ساعات الليلة الماضية، Christabel؟ الجمهور: كان لدينا الآيس كريم. ANDI بنغ: هذا صحيح، كان لدينا الآيس كريم في ساعات العمل الليلة الماضية. في حين لا أستطيع أن أعدكم أن سيكون لدينا الآيس كريم في ساعات العمل كل أسبوع، ما أستطيع أن أعدكم غير أنه لن يكون هناك كبير أفضل طالب لنسبة TA. مثل شرعي، انها مثل 3-1. في حين، على النقيض من ذلك مع الخميس، كنت قد حصلت على حوالي 150 وشدد حقا الاطفال وليس الآيس كريم. وانها ليست مجرد منتجة لأحد. أخلاقي جدا من القصة، تأتي في وقت مبكر لساعات العمل والأمور جيدة سوف يحدث. أيضا، يأتي مستعدا لطرح الأسئلة. أنت تعلم؟ بغض النظر عن ما المشرفون الدوليون، I أعتقد، وقد قائلا: لقد تم الحصول على الطلاب زوجين الذين يأتون في يوم الخميس في، مثل، 10:50 لا بعد قراءة المواصفات يجري مثل مساعدتي، ساعدني. للأسف في هذه النقطة، هناك لا ما يمكننا القيام به لمساعدتك. لذا يرجى تأتي في وقت مبكر من الاسبوع. تأتي في وقت مبكر لساعات العمل. يأتي مستعدا لطرح الأسئلة. تأكد من أنك، كما طالبة، هي التي عليك أن تكون بحيث المشرفون الدوليون يمكن أن توجه لك على طول، وهو ما ساعات العمل يجب أن يكون المخصص لل. ثانيا، إذا كنت لا تعرف أساتذة ترغب في مفاجأة لنا مع الاختبارات. كان لي أستاذ تلك مثل، يو، بالمناسبة، نتذكر أن التجديد النصفي لديك يوم الاثنين المقبل. نعم، لم أكن أعرف عن ذلك النصفية. لذلك أنا ذاهب ليكون ذلك TA أن يذكرك كل ذلك مسابقة 0-- لأنه، كما تعلمون، نحن CS. الآن بعد أن قمنا صفائف القيام به، تحصل لماذا من مسابقة 0، وليس استجواب 1، إيه؟ حسنا. أوه، أنا حصلت على بعض ضحك خافت على أن واحدا. حسنا. حتى مسابقة 0 سيكون 14 أكتوبر إذا كنت في قسم من الاثنين إلى الأربعاء و15 أكتوبر إذا كنت في قسم الثلاثاء-الخميس. هذا لا ينطبق على أولئك منكم في جامعة هارفارد who-- أعتقد أن عليك أن تكون كلها أخذ بك الاختبارات على 14. لذلك نعم، الأسبوع المقبل، إذا ديفيد، في محاضرة، وغني، نعم، حتى عن ذلك مسابقة الأسبوع القادم، لكم جميعا لن تكون صدمة ل جئت إلى القسم وأنت تعرف أن لديك مسابقة 0 هي في غضون أسبوعين. وسيتعين علينا مراجعة دورات وكل شيء. لذلك لا تقلق حول أن يكون خائفا لذلك. أي أسئلة before-- أي أسئلة في جميع المسائل اللوجستية المتعلقة، الدرجات، ساعات العمل، أقسام؟ نعم. الحضور: حتى هذه المسابقة هو سيكون خلال المحاضرة؟ ANDI بنغ: نعم. حتى هذه المسابقة، كما أعتقد، هو 60 دقائق المخصص في ذلك الوقت فتحة عليك أن تأخذ فقط في قاعة المحاضرات. لذلك لم يكن لديك لتأتي في على، مثل، عشوائي 07:00. كل شيء جيد. نعم. رائع. حسنا. لذلك نحن في طريقنا لل إدخال مفهوم لك هذا الاسبوع ان ديفيد ديه نوع بالفعل من تطرق في محاضرة الأسبوع الماضي. انه دعا GDB. وكم منكم، بينما في أثناء كتابة psets الخاص بك، لاحظت وجود زر الكبير الذي يقول "تصحيح" في الجزء العلوي من IDE الخاص بك؟ حسنا. حتى الآن أننا سنصل فعلا لكشف سر ما هذا الزر الواقع هل. وأنا أضمن لكم، بل هو جميل، شيء جميل. لذلك حتى الآن، وأعتقد كان هناك شيئين كان الطلاب عادة القيام عند تصحيح psets. واحد، ويضيفون إما في printf () - لذلك كل بضعة أسطر، ويضيفون في printf () - أوه، ما هو هذا المتغير؟ أوه، ما هو هذا المتغير now-- وأنت نوع من رؤية التقدم من التعليمات البرمجية الخاصة بك وتشغيله. أو الطريقة الثانية الاطفال القيام به هو أنها مجرد كتابة كل شيء ثم تذهب مثل هذا في نهاية المطاف. نأمل أن يعمل. أنا أضمن لكم، GDB الأفضل من كل من هذه الأساليب. نعم. ولذلك فإن هذا سيكون أفضل صديق الجديدة الخاصة بك. لأنه شيء جميل أن البصر يعرض على حد سواء ما يفعله التعليمات البرمجية عند نقطة معينة وكذلك كل ما من الخاص بك المتغيرات يقومون، مثل ما قيمهم هي، عند هذه النقطة المحددة. وبهذه الطريقة، يمكنك حقا تعيين نقاط في التعليمات البرمجية. يمكنك تشغيل من خلال سطرا سطرا. وسوف GDB ديك فقط ل لكم، عرض لك، ما كل من المتغيرات الخاصة بك و، ماذا يفعلون، ما يحدث في التعليمات البرمجية. وبهذه الطريقة، فمن أسهل كثيرا أن نرى ما يحدث بدلا من printf جي أو تدوين البيانات الخاصة بك. ولذا فإننا سوف نفعل مثال على ذلك لاحقا. ولذلك فإن هذا يبدو مجردة بعض الشيء. لا تقلق، وسوف نبذل الأمثلة. وذلك أساسا، والثلاثة أكبر، وظائف الأكثر استخداما عليك في GDB هي التالي، خطوة أكثر، وخطوة إلى الأزرار. انا ذاهب الى أكثر من رئيس هناك، في الواقع، في الوقت الراهن. حتى تتمكن جميع اللاعبين نرى أن أو ينبغي أن التكبير قليلا؟ في الجزء الخلفي، يمكنك ان ترى ذلك؟ يجب أن التكبير؟ قليلا فقط؟ OK، بارد. هناك نذهب. حسنا. وذلك لدي، هنا، يا تنفيذ لالجشع. وعلى الرغم من الكثير من رفاق كتب الجشع في حلقة في حين أن form-- هو وسيلة مقبولة تماما للقيام it-- طريقة أخرى للقيام بذلك هو ببساطة تقسيم في مودولو. لأنه بعد ذلك يمكن أن يكون لديك القيمة ومن ثم يكون الباقي الخاص بك. وبعد ذلك يمكنك فقط إضافة كل ذلك معا. لا منطق ما أفعله هنا معنى للجميع، قبل أن نبدأ؟ نوع من؟ رائع. رائعة. انها قطعة مثير جدا من التعليمات البرمجية، وأود أن أقول. كما قلت، ديفيد، في محاضرة، بعد حين، عليك أن تبدأ كل رؤية رمز كشيء جميل. وأحيانا عندما ترى جميلة رمز، انها مثل هذا الشعور الرائع. حتى مع ذلك، في حين هذا الرمز هو جدا جميلة، أنها لا تعمل بشكل صحيح. لذلك دعونا تشغيل check50 في هذا الشأن. تحقق 50 20-- صافية. 2؟ غير أن pset2؟ نعم. أوه، pset1. حسنا. لذلك نحن تشغيل check50. وكما كنت الرجال يمكن أن نرى هنا، انها فشله بضع الحالات. وبالنسبة لبعض منكم، في بالطبع للقيام مجموعات مشكلتك، كنت مثل، آه، لماذا لم يتم ذلك العمل. لماذا هو العمل لبعض القيم ولكن ليس للآخرين؟ حسنا، GDB سوف تساعدك على الرقم لماذا هذه المدخلات لا تعمل. حسنا. لذلك دعونا نرى، واحدة من الشيكات كنت فشلها في check50 كانت قيمة مدخلات 0.41. وبالتالي فإن الإجابة الصحيحة التي يجب أن يكون الحصول على هو 4. ولكن بدلا من ذلك ما أنا طبع هو ن 3، وهو غير صحيح. لذلك دعونا فقط تشغيل هذا يدويا، فقط تأكد من أن check50 يعمل. دعونا نفعل ./greedy. عفوا، لقد جعل الجشع. هناك نذهب. ./greedy الآن. كم هو مستحق؟ دعونا نفعل 0.41. ونعم، ونحن نرى هنا أن الأمر إخراج 3 عندما الإجابة الصحيحة، في الواقع، ينبغي أن يكون 4. لذلك دعونا إدخال GDB ونرى كيف يمكن أن تذهب نحو إصلاح هذه المشكلة. لذا فإن الخطوة الأولى في دائما تصحيح التعليمات البرمجية هو وضع نقطة توقف، أو النقطة التي تريد الكمبيوتر أو المصحح لبدء النظر. لذلك إذا كنت لا حقا تعرف ما هي مشكلتك، عادة، والشيء نموذجي ونحن نريد ل القيام به هو وضع نقطة توقف لدينا في الرئيسية. إذا كان الأمر كذلك يا رفاق يمكن أن يرى هذا الزر الأحمر هناك حق، نعم، كان لي أن وضع توقف عن الوظيفة الرئيسية. أنا فوق ذلك. وبعد ذلك يمكنني أن أذهب إلى بلدي زر التصحيح. أنا ضربت هذا الزر. اسمحوا لي أن إعادة تكبير ما إذا كان يمكنني. هناك نذهب. لذلك لدينا، هنا، لوحة على اليمين. أنا آسف، والرجال في الظهر، كنت لا يمكن أن يرى بشكل جيد حقا. ولكن أساسا، كل تقوم هذه اللوحة اليمنى وتتبع كل من سلط الضوء الخط، الذي هو سطر من التعليمات البرمجية أن الكمبيوتر قيد التشغيل حاليا، وكذلك كل من المتغيرات الخاصة بك بالأسفل هنا. لذلك كنت قد حصلت سنتا، والنقود المعدنية، ن، أعلن كل لأشياء مختلفة عند هذه النقطة. لا تقلق، لأن لدينا لم يكن في الواقع تهيئة لهم أية متغيرات حتى الان. حتى في جهاز الكمبيوتر الخاص بك، الخاصة بك كمبيوتر تشهد فقط، أوه، كان 32767 وظيفة مستعملة مشاركة لذلك مساحة الذاكرة في جهاز الكمبيوتر الخاص بي. وحتى ذلك حيث سنتا حاليا. ولكن لا أنه بمجرد تشغيل التعليمات البرمجية، يجب أن تصبح تهيئة. لذلك دعونا نذهب من خلال سطرا الخط، ما يجري هنا. حسنا. حتى هنا هي ثلاثة الأزرار التي شرحت توا. لديك اللعب، أو وظيفة تشغيل، زر، لديك الخطوة على زر، وعليك أيضا خطوة إلى زر. وأساسا، كل ثلاثة من لهم اذهبوا من خلال التعليمات البرمجية وتفعل أشياء مختلفة. لذلك عادة، عندما كنت التصحيح، نحن لا نريد أن مجرد ضرب اللعب، لأن اللعب تشغيل فقط التعليمات البرمجية لنهاية لها. وبعد ذلك سوف يست في الواقع أعرف ما مشكلتك غير إلا إذا قمت بتعيين نقاط التوقف متعددة. إذا قمت بتعيين نقاط التوقف متعددة، وسوف فقط تلقائيا تشغيل من نقطة واحدة، إلى أخرى، إلى أخرى. ولكن في هذه الحالة قمنا مجرد أن واحد، لأننا نريد أن نعمل طريقنا من أعلى إلى أسفل إلى أسفل. لذلك نحن ذاهبون الى تجاهل هذا الزر الآن لأغراض هذا البرنامج. وبالتالي فإن الخطوة أكثر من وظيفة فقط الخطوات على كل سطر واحد ويخبرك ما يقوم به الكمبيوتر. الخطوة إلى وظيفة يذهب في وظيفة فعلية هذا على الخط الخاص بك من التعليمات البرمجية. هكذا على سبيل المثال، مثل printf ()، هذا هو وظيفة، أليس كذلك؟ إذا أردت أن خطوة جسديا في وظيفة printf ()، وأود أن تذهب في الواقع إلى قطعة من كود حيث تم كتابة printf () وانظر ما الذي يحدث هناك. ولكن عادة، فإننا نفترض أن التعليمات البرمجية التي نعطيك يعمل. ونحن نفترض أن printf () يعمل. ونحن نفترض أن GetInt () يعمل. لذلك ليس هناك حاجة ل خطوة الى تلك الوظائف. ولكن إذا كان هناك وظائف أن تكتب لنفسك الذي تريد التحقق ما الذي يحدث، كنت تريد أن خطوة إلى أن وظيفة. حتى الآن نحن ذاهبون فقط لتخطي هذه القطعة من التعليمات البرمجية. لذلك دعونا نرى. أوه، الطباعة، "يا هاي، كيف ويعود الكثير من التغيير؟ " نحن لا نهتم. ونحن نعلم أن تعمل، لذلك نحن خطوة أكثر من ذلك. هكذا ن، وهي تطفو في أن قمنا initialized-- أو declared-- في أعلى، ونحن الآن يعادل ذلك لGetFloat (). لذلك دعونا تخطي ذلك. ونحن نرى في أسفل هنا، البرنامج ودفع لي لإدخال قيمة. لذلك دعونا إدخال قيمة نريد لاختبار هنا، وهو 0.41. رائعة. وحتى الآن القيام n-- يا رفاق يرى هنا، في bottom-- انها stored-- لأننا لم تقريب حتى الآن، انها المخزنة في هذا مثل عملاق تعويم هذا هو 0.4099999996، التي هي قريبة بما فيه الكفاية لدينا أغراض، الآن، إلى 0.41. وبعد ذلك سنرى لاحقا، ونحن تواصل تصعيد حول البرنامج، بعد هنا، أصبح ن تقريب وسنت أصبح 41. رائعة. لذلك نحن نعلم أن عملنا التقريب و. ونحن نعلم أن لدينا العدد الصحيح من سنتا، لذلك نعرف ان هذا ليس حقا مشكلة. لذلك فإننا لا نزال يخطو على في هذا البرنامج. نذهب هنا. وحتى بعد هذا سطر من التعليمات البرمجية، ونحن يجب أن تعرف كم عدد أرباع لدينا. نحن نخطو فوق. وترى نقوم به، في الواقع، لديك واحدة الربع لأننا قد تطرح 25 من وجهة نظرنا القيمة الأولية من 41. ونحن لدينا 16 اليسار لدينا سنتا. هل يفهم الجميع كيف هذا البرنامج هو تكثف من خلال ولماذا سنتا أصبح الآن 16 ولماذا، الآن، والنقود المعدنية أصبحت 1؟ والجميع يتابع هذا المنطق؟ رائع. وذلك من هذه النقطة، عمل البرنامج، أليس كذلك؟ ونحن نعلم أنه يفعل بالضبط ما نريد أن. ونحن لم أكن في الواقع يجب أن تطبع، أوه، ما هي سنتا عند هذه النقطة، ما هو القطع النقدية في هذه المرحلة. نواصل الذهاب من خلال البرنامج. خطوة أكثر. رائع. نذهب أكثر من الدايمات. رائعة. ونحن نرى أن انها اتخذت إيقاف 0.10 $ لعشرة سنتات. والآن لدينا اثنين من العملات. هذا صحيح. نذهب أكثر من البنسات ونحن نرى أن لدينا خلفها سنتا. هم، وهذا غريب. هنا في هذا البرنامج، كان من المفترض أن قد تطرح البنسات بلدي. ربما أنا فقط لم يكن فعل ذلك خط الحق. واحسرتاه، يمكنك ان ترى هنا، لأننا نعرف أننا يخطو من خلال خطوط 32 و 33، حيث ان برنامجنا كان غير صحيح المتغيرات تشغيل. ولذا فإننا يمكن أن ننظر ونرى، أوه، أنا طرح سنتا هنا، ولكن أنا لست في الواقع إضافة إلى بلدي قيمة العملة. أنا مضيفا إلى سنتا. وأنا لا أريد أن أضيف إلى سنتا، وأريد أن أضيف إلى النقود. لذلك إذا أردنا تغيير ذلك إلى النقود، لدينا برنامج عمل. لا أستطيع تشغيل check50. يمكنك الخروج للتو من GDB الحق هنا ثم قم بتشغيل check50 مرة أخرى. يمكنني أن أفعل هذا فقط. لقد جعل الجشع. 0.41. وهنا، انها الطباعة من الجواب الصحيح. بحيث يمكنك رؤية الرجال، GDB هو أداة قوية حقا لأننا عندما يكون لديك الكثير من كود يحدث، والكثير من المتغيرات أنه من الصعب بالنسبة لنا، و إنسان، لتتبع. الكمبيوتر، في GDB المصحح، لديه القدرة لتتبع كل شيء. وأنا أعلم، في Visionaire، يا رفاق ربما قد ضرب بعض أخطاء تجزئة لأنك لم تعمل خارج الحدود من مجموعة الخاصة بك. في المثال قيصر، وهذا بالضبط ما كنت تنفيذها هنا. لذلك أنا نسيت أن تحقق ل ماذا سيحدث لو أنا لم يكن لديك اثنين من وسائط سطر الأوامر. أنا فقط لم يضع في هذا الاختيار. وحتى لو كنت تشغيل Debug-- أحدد بلدي نقطة إلى اليمين هناك. أركض التصحيح. حسنا. نعم. حتى في الواقع، كان من المفترض GDB قد اخبرني بان هناك كان خطأ تجزئة هناك. أنا لا أعرف ما يجري هناك حق، ولكن عندما جريت عليه، انها تعمل. عند تشغيل خطوط للقانون من خلال و GDB قد استقال فجأة فقط عليك، ترتفع وانظروا الى ما هو خطأ أحمر. انها سوف اقول لكم، مهلا، كنت كان خطأ تجزئة، مما يعني أنك حاولت الوصول الفضاء في مجموعة التي لم تكن موجودة. نعم. حتى في المشكلة التالية ضبط هذا الأسبوع، يا رفاق من المحتمل أن يكون لديك الكثير من المتغيرات وتطوف. كنت لن يكون متأكدا ما أنهم جميعا يعني عند نقطة معينة. حتى GDB سوف تساعد حقا لكم في الاعتقاد ما هم يعادل كل والتمكن من رؤية أن بصريا. وأي شخص الخلط حول كيفية أي من ذلك كان يعمل؟ رائع. حسنا. حتى بعد ذلك، نحن الذهاب الى الغوص الحق إلى أربعة مختلفة أنواع من نوع ما لهذا الأسبوع. كم منكم، لأول مرة قبل كل شيء، قبل أن نبدأ، قرأت المواصفات الكاملة عن pset3؟ حسنا. أنا فخور يا رفاق. هذا مثل نصف الدرجة، التي هو أكثر بكثير من المرة السابقة. لذلك هذا أمر عظيم، لأنه عندما نتحدث عن المحتوى في lecture-- أو آسف، في section-- أحب لربط الكثير من ذلك العودة إلى ما هو PSET وكيف تريد ل تنفيذ ذلك في PSET الخاص بك. لذلك إذا كنت تأتي الحاجة قراءة المواصفات، وانها سوف يكون أسهل كثيرا بالنسبة لك لفهم ما أتحدث عنه عندما أقول، يا مهلا، هذا قد يكون حقا مكان جيد لتنفيذ هذا النوع. حتى أولئك منكم الذين قرأت المواصفات أعرف ذلك، كجزء من PSET الخاص بك، وأنت تسير لدينا ل إرسال نوع من الفرز. لذلك قد يكون من المفيد جدا بالنسبة للكثير منكم اليوم. ولذا فإننا سوف تبدأ، أساسا، النوع الأكثر بسيطة من نوع، نوع الاختيار. الخوارزمية نموذجية ل كيف كنا نذهب عن هذا is-- ذهب ديفيد من خلال هذه كلها في محاضرة، ولذا فإنني سوف تتحرك بسرعة على طول here-- هو أساسا، كنت لدينا مجموعة من القيم. ومن ثم تجد أصغر قيمة غير مصنفة ويمكنك مبادلة تلك القيمة مع القيمة الأولى التي لم يتم فرزها. ثم عليك أن تبقي فقط تكرار مع بقية القائمة الخاصة بك. وهنا شرح البصري من كيف يمكن أن تعمل. هكذا على سبيل المثال، إذا كان لنا أن نبدأ مع مجموعة من خمسة عناصر، مؤشر 0-4، مع 3 و 5 و 2 و 6 و 4 القيم وضعت في array-- الآن الحق في ذلك، نحن ذاهبون لمجرد افتراض أنهم جميعا لم يتم فرزها لأننا لم نجرب ذلك. فكيف سيكون نوعا اختيار العمل هو أنه لأول مرة تشغيل من خلال مجمل من مجموعة غير مصنفة. فإنه انتقاء أصغر قيمة. في هذه الحالة، 3، الحق الآن، هو أصغر. فإنه يحصل على 5. كلا، 5 ليس أكبر than-- أو آسف، لا أقل than-- 3. حتى الحد الأدنى لقيمة لا تزال 3. ثم تحصل على 2. الكمبيوتر ترى، يا، 2 أقل من 3. 2 يجب أن تكون الآن قيمة الحد الأدنى. وحتى 2 مقايضة مع أن القيمة الأولى. حتى بعد مرور واحد، ونحن لا نرى الحقيقة أن 2 و 3 يتم تبديل. ونحن ذاهبون لمجرد مواصلة القيام هذا مرة أخرى مع بقية مجموعة. لذلك نحن ذاهبون لمجرد تشغيل من خلال المؤشرات الأربعة الأخيرة من صفيف. سنرى أن 3 هو الحد الأدنى لقيمة القادمة. لذلك نحن ذاهبون لمبادلة أنه مع 4. وبعد ذلك نحن ذاهبون فقط للحفاظ على من خلال تشغيل حتى، في نهاية المطاف، ل الحصول على مجموعة وفرزها والتي 2، 3، 4، 5، و 6 يتم فرز جميع. هل الجميع على فهم المنطق كيف يعمل نوعا الاختيار؟ لديك فقط نوعا الحد الأدنى للقيمة. كنت تتبع ما هو. وكلما تجد ذلك، لأنه مبادلة مع القيمة الأولى في array-- أو، وليس value-- أولا القيمة التالية في المصفوفة. رائع. ذلك يا رفاق نوع من رأيت من لمحة وجيزة، ونحن في طريقنا إلى شبة الكود من ذلك. إذا كان الأمر كذلك يا رفاق في الظهر يريدون تشكيل مجموعة، والجميع على طاولة يمكن أن تشكل شريكا قليلا، وانا ذاهب لتعطيك الرجال مثل ثلاث دقائق لمجرد الحديث من خلال منطق، باللغة الإنجليزية، كيف يمكننا قد تكون قادرة على تنفيذ شبة الكود لكتابة نوع الاختيار. وهناك الحلوى. الرجاء الخروج والحصول على الحلوى. إذا كنت في الظهر وتريد حلوى، ويمكنني أن رمي الحلوى عليك. في الواقع، لا بارد you--. أوه، آسف. حسنا. إذا كان الأمر كذلك نود أن، كما فئة، الكتابة شبة الكود لكيفية التعامل مع واحد هذه المشكلة، فقط لا تتردد. أنا أتجول و، في النظام، اطلب من المجموعات للالسطر التالي من ما يجب أن تفعله. حتى إذا كنت تريد أن تبدأ الرجال إيقاف، ما هو أول شيء يجب القيام به عندما كنت في محاولة ل تنفيذ طريقة لحل هذا البرنامج لفرز انتقائي قائمة؟ دعونا نفترض أننا فقط لدينا مجموعة، كل الحق؟ الحضور: أنت تريد أن تخلق بعض نوع من [غير مسموع] أن كنت يمر عبر مجموعة كاملة بك. ANDI بنغ: الحق. لذلك كنت تريد الذهاب الى تكرار من خلال كل الفضاء، أليس كذلك؟ لذلك، عظيم. إذا كنت الرجال يريدون أن تعطيني line-- بجانب نعم، في الجزء الخلفي. الحضور: التحقق منها كل لأصغر. ANDI بنغ: هناك نذهب. لذلك نحن نريد أن تذهب من خلال وتحقق ل ترى ما هو الحد الأدنى لقيمة، أليس كذلك؟ انا ذاهب الى اختصار هذا إلى "دقيقة". ماذا يا رفاق تريد أن تفعل بعد كنت قد وجدت أدنى قيمة؟ الحضور: (غير مسموع) ANDI بنغ: إذن أنت تريد الذهاب الى التبديل مع أول تلك المصفوفة، الصحيح؟ هذا هو بداية، انا ذاهب الى القول. حسنا. حتى الآن بعد أن كنت قد تبادلت الأول واحد، ماذا تريد أن تفعل بعد ذلك؟ وحتى الآن ونحن نعلم أن هذا واحد هنا يجب أن يكون أصغر قيمة، أليس كذلك؟ ثم لديك بقية إضافية للصفيف هذا فرزها. وذلك ما تريد القيام به هنا، إذا كنت الرجال يريدون أن تعطيني السطر التالي؟ الحضور: حتى ذلك الحين كنت ترغب في تكرار من خلال ما تبقى من مجموعة. ANDI بنغ: نعم. وذلك ما لا بالتكرار عبر نوع من يعني أننا ربما ستحتاج؟ ما نوع of-- الحضور: أوه، متغير إضافي؟ ANDI بنغ: ربما آخر للحلقة، أليس كذلك؟ لذلك نحن ربما تريد الذهاب الى تكرار through-- كبيرة. ثم كنت تريد الذهاب لنعود و ربما تحقق الحد الأدنى من جديد، الصحيح؟ وأنت ذاهب للحفاظ على تكرار هذا، لأن الحلقات مجرد الذهاب للحفاظ على التوالي، أليس كذلك؟ ذلك يا رفاق يمكن أن يرى، ونحن يكون مجرد شبة الكود العام كيف نريد من هذا البرنامج للبحث. هذا أعاد هنا، ماذا نحن وعادة ما تحتاج إلى الكتابة في مدونتنا إذا كنا نريد أن تكرار من خلال مجموعة، نوع الهيكل؟ أعتقد Christabel وقال بالفعل هذا من قبل. الحضور: A للحلقة. ANDI بنغ: A لحلقة؟ بالضبط. لذلك هذا هو على الارجح سيكون للحلقة. ما هو الاختيار هنا سوف يعني؟ عادة، إذا كنت تريد التحقق إذا كان هناك شيء غير شيء else-- الحضور: إذا. ANDI بنغ: وإذا، أليس كذلك؟ ثم مبادلة هنا، وسوف نقوم يذهب أكثر في وقت لاحق، وذلك لأن ديفيد ذهبت من خلال ذلك في محاضرة كذلك. ثم أعاد الثاني implies-- الحضور: آخر لحلقة. ANDI بنغ: --another للحلقة، بالضبط. إذا كان الأمر كذلك نحن نبحث في هذا بشكل صحيح، ونحن يمكن أن نرى أننا ربما سنحتاج الى متداخلة للحلقة مع عبارة شرطية في وجود ثم قطعة الفعلي للكود هذا هو الذهاب إلى تبديل القيم. حتى لقد كتبت للتو عموما مدونة شبة الكود هنا. وبعد ذلك نحن ذاهبون فعلا جسديا، كطبقة، محاولة لتنفيذ هذا اليوم. دعونا نعود إلى هذا IDE. اه اوه. لماذا هو أن not-- هناك هو عليه. حسنا. عذرا، اسمحوا لي أن أحاول لتكبير أكثر قليلا. هناك نذهب. كل ما أفعله هنا هو أنني قمت بإنشائها برنامج يسمى "اختيار / sort.c". لقد خلق مجموعة من تسعة القيم، 4، 8، 2، 1، 6، 9، 7، 5، 3. حاليا، كما يمكنك ترى، فهي غير مرتبة. ن سيكون الرقم الذي يخبرك كمية من القيم لديك في مجموعة الخاصة بك. في هذه الحالة، لدينا تسعة القيم. ولقد حصلت للتو على لحلقة هنا أن بطباعة مجموعة غير مصنفة. وفي النهاية، أنا عندي أيضا ل حلقة التي يطبع فقط بها مرة أخرى. حتى من الناحية النظرية، إذا كان هذا البرنامج يعمل بشكل صحيح، في النهاية، يجب أن نرى المطبوعة للحلقة في منها 1، 2، 3، 4، 5، 6، 7، 8، 9 كلها بشكل صحيح في النظام. لذلك نحن قد حصلت على شبة الكود لدينا هنا. هل يريد أي شخص to-- أنا فقط سيذهب طلب volunteers-- قل لي بالضبط ماذا اكتب إذا نريد، أولا، مجرد تكرار خلال بداية هذه المجموعة؟ ما هو سطر من التعليمات البرمجية أنا ربما سنحتاج الى هنا؟ الحضور: (غير مسموع) ANDI بنغ: نعم، ويشعر مجانا to-- آسف، كنت لم يكن لديك للوقوف يشعر up-- مجانا لترفع صوتك قليلا. الحضور: لكثافة العمليات ط يساوي 0-- ANDI بنغ: نعم، جيد. الحضور: أنا أقل من طول المصفوفة. ANDI بنغ: حتى تبقي في مانع هنا، لأننا لم يكن لديك وظيفة أن يخبرنا طول صفيف، لدينا بالفعل القيمة التي يخزن ذلك. الصحيح؟ شيء آخر للحفاظ على في mind-- في مجموعة تسعة القيم، وما هي المؤشرات؟ دعنا نقول فقط وكانت هذه المجموعة 0-3. ترى أن آخر المؤشر هو في الواقع 3. انها ليست 4، على الرغم من هناك أربعة القيم في صفيف. حتى هنا، علينا أن نكون حذرين للغاية ما شرطنا للطول سيكون. الحضور: أليس يكون ن ناقص 1؟ ANDI بنغ: انها تسير ن ناقص 1، بالضبط. هل هذا معقول، لماذا انها ن ناقص 1، الجميع؟ انها لصفائف المفهرسة الصفر. وهي تبدأ عند 0 وتشغيل ما يصل إلى n ناقص 1. نعم، انها صعبة بعض الشيء. حسنا. وثم-- الحضور: Isnt'1 أن اتخذت بالفعل رعاية الرغم من ذلك، فقط عن طريق لا أقول "أقل من أو يساوي "واكتفى بالقول" أقل من؟ " ANDI بنغ: هذا هو سؤال جيد حقا. لذا نعم. ولكن أيضا، الطريقة التي نحن إعمال الحق التدقيق، تحتاج إلى مقارنة قيمتين. لذلك أردت فعلا ل مغادرة "إلى" فارغة. لأنه إذا قارنت هذا واحد، كنت لن لديك أي شيء بعد ذلك للمقارنة، أليس كذلك؟ نعم. لذلك أنا ++. دعونا نضيف بين قوسين لدينا في. يصيح. رائعة. لذلك لدينا بداية من حلقة لدينا الخارجي. وحتى الآن ربما نريد أن إنشاء متغير لحفظ المسار من أصغر قيمة، أليس كذلك؟ هل يريد أي شخص أن تعطيني سطر من التعليمات البرمجية التي من شأنها أن تفعل ذلك؟ ماذا نحتاج إذا نحن ذاهبون تريد لتخزين شيء؟ الصحيح. ربما أفضل اسم لهذا سوف be-- "مؤقت" works-- تماما ربما اسمه أكثر باقتدار سيكون، إذا كنا نريد أصغر value-- الحضور: الحد الأدنى. ANDI بنغ: الحد الأدنى، هناك نذهب. سوف دقيقة تكون جيدة. وحتى هنا، ماذا نحن تريد تهيئة ل؟ هذا هو صعبة بعض الشيء. لأن في هذه اللحظة ابتداء من هذه المجموعة، أنت لم ينظر في أي شيء، أليس كذلك؟ ماذا في ذلك، تلقائيا، إذا نحن فقط على أنا يساوي 0، ماذا نريد تهيئة أول قيمة لدينا الحد الأدنى ل؟ الحضور: ط. ANDI بنغ: ط، بالضبط. Christabel، لماذا نريد إلى تهيئة إلى ط؟ الحضور: لأنه، أيضا، بدأنا مع 0. ذلك لأنه ليس لدينا شيء للمقارنة ل، فإن الحد الأدنى في نهاية الأمر 0. ANDI بنغ: بالضبط. حتى انها على حق تماما. لأن لدينا لم يكن في الواقع نظرت إلى أي شيء حتى الآن، نحن لا نعرف ما هي قيمة الحد الأدنى لدينا. نريد أن مجرد تهيئة ل ط، والتي، في الوقت الراهن، هو هنا. وفيما نواصل تنزل هذه المجموعة، سنرى ذلك، مع كل ممر إضافي، ط الزيادات. وحتى في تلك المرحلة، أنا هو على الارجح تريد أن تكون في الحد الأدنى، لأنه سيكون مهما هو بداية مجموعة غير مصنفة. رائع. وحتى الآن نريد أن نضيف لحلقة هنا هذا الذهاب الى تكرار خلال لم يتم فرزها، أو ما تبقى من هذه المجموعة. هل يريد أي شخص أن تعطيني سطر من التعليمات البرمجية التي من شأنها أن تفعل ذلك؟ Hint-- ماذا نحتاج إلى هنا؟ ما يحدث للذهاب في هذه لحلقة؟ نعم. الحضور: لذلك كنا نريد أن لديها عدد صحيح مختلفة، لأننا من خلال تشغيل بقية المصفوفة بدلا من الأول، لذلك ربما ي. ANDI بنغ: نعم، ي يبدو جيدا بالنسبة لي. يساوي؟ الحضور: لذلك سيكون ط زائد 1، ل كنت بدأت في قيمة القادمة. ثم إلى end-- ذلك مرة أخرى، ي هو أقل من ن ناقص 1، ثم ي ++. ANDI بنغ: العظمى. ثم هنا، ونحن في طريقنا تريد تحقق لمعرفة ما إذا كان التقى اوضاعنا، الصحيح؟ لأنك تريد أن تغيير قيمة الحد الأدنى لو كان في الواقع أصغر من ما كنت مقارنتها، أليس كذلك؟ فما نحن تريد الذهاب الى هنا؟ تحقق لمعرفة ما. ما هو نوع من البيان نحن على الارجح منظمة الشفافية الدولية تريد استخدامها إذا كنا تريد أن تحقق شيئا؟ الحضور: تعليمة if. ANDI بنغ: تعليمة if. if-- ذلك وماذا سيكون الشرط الذي نريده داخل من إذا بياننا؟ الجمهور: إذا كانت قيمة ي أقل من قيمة i-- ANDI بنغ: بالضبط. حتى if-- ذلك وهذا ما يسمى مجموعة "مجموعة". رائعة. حتى إذا array-- ما كان ذلك؟ قل ذلك مجددا. الحضور: إذا كان صفيف ي أقل من مجموعة ط، ثم فإننا تغيير دقيقة. وبالتالي فإن الحد الأدنى سيكون ي. ANDI بنغ: هل هذا معقول؟ حسنا. والآن إلى هنا، ونحن في الواقع تريد تنفيذ المبادلة، أليس كذلك؟ لذلك أذكر، في المحاضرة التي ديفيد، عندما كان يحاول مبادلة the-- ما كان عصير البرتقال it-- وmilk-- وكان هذا الإجمالي: الحضور. ANDI بنغ: نعم، هذا كان إجمالي من نوعها. لكنها كانت جيدة مفهوم يدل على الوقت. حتى التفكير في القيم الخاصة بك هنا. كنت قد حصلت على مجموعة من دقيقة، ومجموعة من ط، أو ما كنا نحاول مبادلة هنا. وربما كنت لا يمكن أن تصب لهم في بعضها البعض في نفس الوقت، أليس كذلك؟ فما نحن ذاهبون في حاجة إلى خلق هنا من أجل مبادلة القيم بشكل صحيح؟ الحضور: متغير مؤقت. ANDI بنغ: متغير مؤقت. لذلك دعونا نفعل مؤقت الباحث. ترى، هذا من شأنه أن يكون أفضل الوقت to-- قف، ما كان ذلك؟ حسنا. لذلك هذا كان يمكن أن يكون أفضل الوقت لتسمية "مؤقت". متغير لذلك دعونا نفعل مؤقت الباحث. ما نحن ذاهبون لل ضبط درجة الحرارة على قدم المساواة إلى هنا؟ الحضور: مين؟ ANDI بنغ: انها صعبة بعض الشيء. في الواقع لا يهم في نهاية المطاف. لا يهم ما لكي تختار لمبادلة في طالما كنت التأكد من كنت تتبع ما كنت مبادلة. الحضور: ويمكن أن يكون مجموعة ط. ANDI بنغ: نعم، دعونا نفعل مجموعة ط. ثم ما هو السطر التالي من التعليمات البرمجية نحن نريد أن يكون هنا؟ الحضور: مجموعة ط يساوي صفيف ي. ANDI بنغ: وأخيرا؟ الحضور: مجموعة-ي يساوي مجموعة ط. الحضور: أو صفيف ي متساوين مصفوفة temp-- أو مؤقت. ANDI بنغ: OK. لذلك دعونا تشغيل هذا ونرى اذا كان الذهاب إلى العمل. حيث أن يحدث؟ أوه، هذا مشكلة. ترى، على خط 40، ونحن محاولة استخدام صفيف ي؟ ولكن حيث لا وجود لها إلا في ي؟ الحضور: في لحلقة. ANDI بنغ: الحق. فما نحن بحاجة الى الذهاب الى القيام به؟ الحضور: تعريف أنه خارج the-- الجمهور: نعم، أعتقد أن لديك لاستخدام آخر إذا العبارة، أليس كذلك؟ مثل ذلك، وإذا كان minimum-- كل الحق، واسمحوا لي أن أعتقد. ANDI بنغ: الرجال، ومحاولة لنلقي نظرة دعنا ترى، ما شيء يمكننا القيام به هنا؟ الحضور: OK. لذلك إذا كان الحد الأدنى لا يساوي j-- حتى إذا كان الحد الأدنى لا يزال i-- ثم لن يكون لدينا لمبادلة. ANDI بنغ: هل هذا يساوي أنا؟ ماذا تريد أن أقول هنا؟ الحضور: أو نعم، إذا كان الحد الأدنى لا أنا لا يساوي، نعم. ANDI بنغ: OK. جيدا أن يحل، نوع من، مشاكلنا. ولكن هذا لا يزال لا يحل مشكلة ماذا يحدث إذا j-- منذ ي غير موجود خارجه، ما هل نريد أن نفعل معها؟ تعلن الخارج؟ دعونا نحاول تشغيل هذا. اه اوه. لا يعمل لدينا نوع. كما ترون، لدينا الأولية كانت مجموعة هذه القيم. وبعد ذلك ينبغي أن يكون كان في 1، 2، 3، 4، 5، 6، 7، 8، 9. انها لا تعمل. آه. ماذا نفعل؟ الحضور: التصحيح. ANDI بنغ: حسنا، يمكننا أن نحاول ذلك. يمكننا تصحيحه. تصغير قليلا. دعونا مجموعة نقطة دينا. دعنا نذهب OK like--. ذلك لأننا نعلم بالفعل أن هذه السطور، من 15 إلى 22، وworking-- لأن كل ما أفعله هو فقط بالتكرار عبر وprinting-- أستطيع أن أمضي قدما وتخطي ذلك. دعونا نبدأ في خط 25. مكتب الرئيس، اسمحوا لي أن نتخلص من ذلك. الحضور: حتى توقف ل حيث يبدأ التصحيح؟ ANDI بنغ: أو توقف. الحضور: أو توقف. ANDI بنغ: نعم. يمكنك تعيين نقاط متعددة و فإنه يمكن القفز من واحدة إلى أخرى. ولكن في هذه الحالة نحن لا نعرف حيث يحدث الخطأ. لذلك نحن نريد فقط أن تبدأ من أعلى إلى أسفل. نعم. حسنا. حتى هذا الخط هنا، يمكننا أن تتدخل. تستطيع أن ترى إلى هنا، لدينا مجموعة. تلك هي القيم التي هي في المصفوفة. هل ترى ذلك، كيف مؤشر 0، فإنه يتوافق مع value-- أوه، انا ذاهب الى محاولة تكبير. آسف، فإنه من الصعب حقا لsee-- في مؤشر مجموعة 0، لدينا قيمة 4 و ثم هكذا دواليك وهلم جرا. لدينا المتغيرات المحلية الخاصة بنا. الآن أنا يساوي 0، التي نريد لها أن تكون. وهكذا دعونا نحافظ على التنقل خلال. لدينا أدنى يساوي 0، الذي نريد أيضا أن يكون. ثم ندخل الثانية لدينا ل حلقة، إذا صفيف ي أقل من صفيف ط، الذي لم يكن. لذلك هل رأيت كيف أن تخطي أكثر من ذلك؟ الحضور: لذلك ينبغي أن إذا الحد الأدنى، كل هكذا- يضرب لا ينبغي أن تكون داخل لأول مرة للحلقة؟ ANDI بنغ: لا، لأن كنت لا تزال ترغب في اختبار. كنت تريد أن تفعل مقارنة كل الوقت، حتى بعد تشغيل من خلال ذلك. كنت لا تريد فقط أن تفعل ذلك في أول المار. كنت تريد أن تفعل ذلك مع كل تمريرة إضافية مرة أخرى. لذلك أنت تريد أن تحقق ل حالتك في الداخل. لذلك نحن ذاهبون لمجرد الحفاظ على تشغيل من هنا. سأعطيك الرجال تلميحا. يجب عليها أن تفعله مع حقيقة أنه عندما كنت فحص مشروطة الخاص بك، كنت عدم التحقق لالفهرس الصحيح. حتى الآن كنت التحقق من وجود مؤشر مجموعة من ي أقل من مجموعة مؤشر ط. ولكن ماذا تفعلين حتى في بداية لحلقة؟ لا يمكنك وضع ي يساوي أنا؟ نعم، لذلك يمكننا فعلا خروج المصحح هنا. لذلك دعونا نلقي نظرة على شبة الكود لدينا. For-- نحن في طريقنا لل تبدأ في الاول يساوي 0. ونحن في طريقنا للذهاب إلى ن ناقص 1. دعونا تحقق، لا لدينا هذا الحق؟ نعم، هذا كان على حق. حتى ذلك الحين داخل هنا، ونحن الذهاب إلى خلق قيمة الحد الأدنى وتعيين هذا يساوي ط. لم نفعل ذلك؟ نعم فعلت ذلك. الآن لدينا في الداخلية للحلقة، ونحن تنوي القيام به ي ط يساوي إلى n 1 ناقص. لم نفعل ذلك؟ في الواقع، فعلنا ذلك. لذلك، لكن ما نحن مقارنة هنا؟ الحضور: ي زائد 1. ANDI بنغ: بالضبط. ثم كنت تريد الذهاب الى مجموعة الحد الأدنى بك يساوي ي زائد 1 كذلك. لذلك ذهبت من خلال ذلك بسرعة حقا. هل الرجال فهم لماذا هو زائد 1 ي؟ حسنا. وذلك في مجموعة الخاص بك، في تمرير الخاص بك أولا من خلال، للحصول على حلقة، لكثافة العمليات ط يساوي 0، دعونا فقط نفترض أن هذا لم يتغير حتى الآن. لدينا مجموعة من، تماما، فقط أربعة عناصر لم يتم فرزها، أليس كذلك؟ لذلك نحن نريد تهيئة ط يساوي 0. وأنا سوف فقط تشغيل من خلال هذه الحلقة. وحتى في مرور الأول، ونحن في طريقنا تهيئة متغير يسمى "دقيقة" الذي يساوي وأنا أيضا، ل ليس لدينا أدنى قيمة. لذلك وهذا يساوي حاليا 0 كذلك. وبعد ذلك نحن ذاهبون من خلال الذهاب. ونحن نريد أن تكرار مرة أخرى. والآن بعد أن وجدنا ما لا يقل دينا هو، ونحن نريد تكرار خلال مرة أخرى لمعرفة ما اذا كان يقارن، أليس كذلك؟ لذلك ي، هنا، هو الذهاب إلى i قدم المساواة، والتي هي 0. ثم إذا مجموعة ي بالاضافة الى انني، التي هو الذي انتهى المقبل، كما أقل مما الحد الأدنى الحالي القيمة، تريد مبادلة. لذلك دعونا نقول لقد حققنا حصلت، مثل، 2، 5، 1، 8. الآن، أنا يساوي 0 و ي يساوي 0. وهذا هو الحد الأدنى لقيمة لدينا. إذا صفيف ي بالإضافة إلى i-- حتى إذا واحد هذا بعد واحد ونحن نبحث في أكبر من واحد من قبل، انها سوف تصبح أدنى حد ممكن. حتى هنا نرى أن 5 ليس أقل من ذلك. لذلك يحدث أن لا يكون 5. ونحن نرى أن 1 أقل من 2، أليس كذلك؟ حتى الآن نحن نعرف أن الحد الأدنى لدينا هو ستكون قيمة المؤشر في 0، 1، 2. نعم؟ وبعد ذلك عندما تحصل إلى هنا، يمكنك تبديل القيم الصحيحة. وذلك عند الرجال كانوا مجرد وجود ي من قبل، وكنت لا تبحث في واحد بعد ذلك. كنت تبحث في نفس القيمة، والتي هو السبب في أنه فقط لا تفعل أي شيء. هل هذا يعقل أن الجميع، لماذا نحن بحاجة أن زائد 1 هناك؟ حسنا. الآن دعونا فقط تشغيل من خلال ذلك إلى جعل تأكد من أن بقية رمز هو الصحيح. لماذا هو أن يحدث؟ آه، انها دقيقة هنا. كنا بمقارنة قيمة خاطئة. اوه لا. أوه نعم، إلى هنا كنا مبادلة قيم خاطئة أيضا. لأننا كنا نبحث في i و j. هؤلاء هم كنا فحص. نحن نريد فعلا لمبادلة الحد الأدنى، والحد الأدنى الحالي، مع أيا كان خارج هو واحد. وكما كنت الرجال يمكن أن يرى أسفل هنا، لدينا مجموعة وفرزها. كان فقط أن تفعل مع حقيقة أنه عندما كنا فحص قيم كنا مقارنة، كنا لا تبحث في القيم الصحيحة. كنا نبحث في نفس واحد هنا، لا مبادلة فعلا. عليك أن تنظر في واحدة بالقرب لذلك وبعد ذلك يمكنك مبادلة. هذا ما كان من نوع التنصت رمز لنا من قبل. وما فعلته هنا هو كل شيء المصحح قد فعلت لك لقد فعلت ذلك على مجلس، لأنه من الأسهل لمعرفة بدلا من محاولة لتكبير المصحح. هل هذا يعقل أن الجميع؟ رائع. حسنا. يمكننا أن ننتقل إلى الحديث عن تدوين مقارب، التي هو مجرد طريقة أخرى للقول لل أوقات التشغيل من كل هذه الأنواع. إذا كنت لا تعرف ديفيد، في محاضرة، تطرقت أوقات التشغيل. وذهب من خلال صيغة كاملة كيفية حساب أوقات التشغيل. لا تقلق بشأن ذلك. إذا كنت غريبة حقا على كيف يعمل، لا تتردد في التحدث معي بعد القسم. يمكننا من خلال المشي الصيغ معا. ولكن كل ما عليك الرجال أن حقا أعرفه هو أن ن تربيع أكثر من 2 هو نفس الشيء كما ن تربيع. لأن أكبر عدد، الأس، وينمو أكثر من غيرها. وذلك لأغراضنا، كل ما يهمني غير أن عدد العملاقة التي المتنامية. فما هي أفضل الأحوال وقت التشغيل اختيار نوع؟ إذا كنت تريد الذهاب ل تكرار خلال قائمة ثم تكرار خلال ما تبقى من تلك القائمة، كم مرة أنت ذاهب لربما، في أسوأ case-- في أفضل حالة، sorry-- من خلال تشغيل؟ ربما أفضل السؤال هو لنسأل، ما هو أسوأ الأحوال وقت التشغيل اختيار نوع. الحضور: ن المربعة. ANDI بنغ: هو مربع ون، والحق. حتى طريقة سهلة للتفكير في هذا هو مثل، أي وقت لديك اثنين من تداخل للحلقات، انها ستكون مربع ن. ليس فقط لأن أنت من خلال تشغيل مرة أخرى، عليك أن تذهب إلى الوراء وحول تشغيل من خلال ذلك مرة أخرى داخل لكل قيمة. حتى في هذه الحالة، كنت تشغل ن ن مرات مربع، والتي is-- آسف، ن ن مرات، والذي يساوي مربع ن. والنوع أيضا قليلا فريدة من نوعها في المعنى أنه لا يهم إذا كانت هذه القيم هي بالفعل في النظام. فإنها ما تزال مستمرة لتشغيل من خلال أي حال. دعنا نقول فقط هذا كان 1، 2، 3، 4. بغض النظر عن ما إذا كانت أو لم تكن في أجل، فإنه لا يزال من شأنه أن تتخلل وما زال فحص قيمة الحد الأدنى. كان يمكن أن يكون أدلى نفس العدد من الشيكات كل مرة واحدة، حتى لو كان لم تلمس اي شيء في الواقع. حتى في هذه الحالة، فإن أفضل وأسوأ أوقات التشغيل هي في الواقع ما يعادلها. وبالتالي فإن وقت التشغيل المتوقع اختيار نوع، وهو ما يسمي بالرمز من ثيتا، ثيتا، في هذه الحالة، كما سيتم مربع ن. كل ثلاثة من هذه سوف المربعة ن. هل الجميع واضحة عن السبب وتربيع وقت ن؟ حسنا. لذلك أنا ذاهب لمجرد تشغيل بسرعة من خلال ما تبقى من نوع ما. الخوارزمية ل فقاعة sort-- تذكر، وكان هذا أول واحد ذهب داود على في المحاضرة. أساسا، يمكنك التنقل من خلال القائمة بأكملها وكنت swap-- أنت فقط مقارنة بين اثنين في وقت واحد. وإذا كان أحد من أكبر، مما كنت فقط مقايضتهم. حتى إذا كانت هذه هي أكبر، هل مبادلة. لقد حصلت الرسمي هنا. لذلك دعونا نقول فقط كان لديك 8، 6، 4، 2. وكنت مقارنة 8 و 6. كنت بحاجة لمقايضتهم. هل المقارنة بين 8 و 4. كنت بحاجة لمقايضتهم. إذا كان لديك لمبادلة 8 و 2، تغيير لهم كذلك. حتى في مثل هذا الشعور، يمكنك ان ترى، لعبت بها على مدى فترة طويلة من الزمن، كيف قيم هذا النوع من فقاعة ل الغايات، وهذا هو السبب نحن نسميها فقاعة النوع. ونحن فقط من خلال تشغيل مرة أخرى على مسار الثاني لدينا، وتمرير الثالث لدينا، وتمر الرابع. أساسا، فقاعة يعمل نوع فقط حتى لا تجعل أي مزيد من مقايضة. حتى في هذا المعنى، وهذا هو فقط في شبة الكود العام لذلك. لا تقلق، وهذه سوف تكون جميع على الانترنت. ليس لدينا للذهاب في الواقع أكثر من ذلك. نحن تهيئة مجرد عداد المتغير الذي يبدأ عند 0. ونحن تكرار خلال مجموعة بأكملها. وإذا قيمة واحدة is-- إذا كان هذا قيمة أكبر من تلك القيمة، وأنت تسير لمقايضتهم. ثم كنت فقط الذهاب على الاستمرار. وأنت تسير على الاعتماد. وكنت مجرد الذهاب للحفاظ على القيام هذا في حين أن العداد أكبر من 0، وهو ما يعني أن في كل مرة لديك لمبادلة، كنت أعلم أنك تريد أن تذهب التحقق مرة أخرى ومرة ​​أخرى. كنت تريد أن تبقي فحص حتى تعرف ان لم يكن لديك لمبادلة بعد الآن. إذن ما هي أفضل وأسوأ حالة أوقات التشغيل لفقاعة الفرز؟ وhint-- هذا يختلف في الواقع من نوع الاختيار بمعنى أن هذه الإجابات اثنين ليست هي نفسها. التفكير في ما يمكن أن يحدث في حالة إذا تم فرز بالفعل. والتفكير في ما يمكن أن يحدث إذا كان في حالة تم فيها غير مصنفة ذلك. ويمكنك النوع من تشغيل من خلال لماذا هذا يحدث. سأعطيك الرجال، مثل 30 ثواني للتفكير في ذلك. حسنا. هل لديها تخمين ما أسوأ وقت التشغيل حالة فقاعة النوع هو؟ نعم. الحضور: سيكون، مثل، n مرة ن ناقص 1 أو شيء من هذا القبيل؟ مثل كل مرة يتم تشغيله، انها مجرد مثل، تبادل واحدة أقل أن كل ما كان عليه. ANDI بنغ: نعم، حتى أنت محق تماما. وهذا هو الحالة التي لديك وكان الجواب في الواقع أكثر تعقيدا من واحد ونحن في حاجة إلى إعطاء. لذلك سيكون لrun-- أنا الذهاب إلى محو كل هذا هنا. هو شخص جيد؟ هل يمكنني مسح هذا؟ حسنا. وأنت تسير لتشغيل من خلال ن مرات أول مرة، أليس كذلك؟ وانهم ذاهبون لتشغيل من خلال ن ناقص 1 للمرة الثانية، أليس كذلك؟ ثم كنت تريد الذهاب للحفاظ على الذهاب، ن الألغام 2، وهلم جرا. فعله داود هذا في محاضرة، حيث، إذا أضيف لكم كل تلك القيم، تحصل على شيء هذا like-- yeah-- أكثر من 2، والتي في جوهرها مجرد يقلل وصولا الى ن المربعة. كنت ذاهب للحصول على جزء غريب هناك. وهكذا نعرف تماما أن ن تربيع دائما الأسبقية على الكسر. وحتى في هذه الحالة، والأسوأ سيكون وقت يتم تربيع ن. إذا كان في تنازلي أجل، والتفكير، كنت لديك لإجراء عملية تبادل واحدة كل مرة. ما يمكن أن يكون، وربما، أفضل وقت التشغيل الحالة؟ دعنا نقول فقط، إذا كانت قائمة بالفعل في النظام، ما من شأنه أن يكون وقت التشغيل؟ الحضور: ن. ANDI بنغ: انها ن، بالضبط. ولماذا هو ن؟ الحضور: لأنك فقط يجب أن تحقق في كل مرة. ANDI بنغ: بالضبط. حتى في أفضل وقت ممكن، إذا كانت هذه القائمة بالفعل sorted-- دعونا نقول 1، 2، 3، 4-- لك سيذهب فقط من خلال، هل تحقق، كنت انظر، يا، وأنهم جميعا توفق. لم يكن لديك لمبادلة. انتهيت. حتى في هذه الحالة، انها مجرد ن أو عدد من الخطوات التي فقط كان للتحقق في القائمة الأولى. وبعد، نحن ضرب الآن الإدراج الفرز، حيث الخوارزمية هي في جوهرها إلى الانقسام قبل أن تتحول إلى جزء فرزها وفرزها. وبعد ذلك واحدا تلو الآخر، القيم هي غير مصنفة إدراج مناسب لهم وظائف في بداية القائمة. هكذا على سبيل المثال، لدينا قائمة 3، 5، 2، 6، 4 ثانية. ونحن نعلم أنه حاليا لم يتم فرزها لأننا فقط بدأت تبحث في ذلك. ونحن نلقي نظرة ونحن نعلم أن يتم فرز القيمة الأولى، أليس كذلك؟ إذا كنت تبحث فقط في مجموعة من حجم واحد، كنت أعلم أن هذا فرزها. حتى ذلك الحين ونحن نعلم أن الأربعة الأخرى هي التي لم يتم فرزها. نذهب من خلال ونحن نرى أن قيمة. دعونا نعود. نرى أن قيمة 5؟ ونحن نلقي نظرة على ذلك. قارناه إلى 3. ونحن نعلم أنه أكبر من 3، لذلك نحن نعرف أن هذا ما فرزها. لذلك نحن نعرف الآن أن الأولين يتم فرز ومشاركة ثلاثة ليسوا كذلك. ونحن نلقي نظرة على 2. ونحن تحقق لأول مرة مع 5. هو أقل من 5؟ ليس. لذلك علينا أن نستمر في النظر إلى أسفل. ثم قمت بفحص 2 من 3. هو أقل من؟ لا. حتى تعرف 2 لابد من إدراجها في الجزء الأمامي و 3 و 5 على حد سواء يجب أن تكون دفعت بها. تفعل ذلك مرة أخرى مع 6 و 4. وعلينا الاستمرار في فحص أساسا، حيث نتحقق فقط، والتحقق، والتحقق. وحتى انها في الحق موقف، ونحن مجرد نوع من أدخله في المكان المناسب، الذي هو فيه اسم جاء. لذلك هذا مجرد الخوارزمية، شبة الكود في حد ذاتها، نوع من، على الطريقة التي ستنفذ والنوع الإدراج. شبة الكود هو هنا. كل شيء على الانترنت. لا تقلق إذا كنت الرجال محاولة نسخ هذا إلى أسفل. لذلك مرة أخرى، question-- نفسه ما سيكون أفضل وأسوأ أوقات التشغيل لإدراج النوع؟ انها تشبه الى حد بعيد على السؤال الأخير. سأعطيك الرجال، مثل 30 ثواني للتفكير في هذا أيضا. OK هل يريد أحد أن تعطيني أسوأ وقت التشغيل؟ نعم. الحضور: ن المربعة. ANDI بنغ: هو مربع ن و. ولماذا المربعة ن؟ الحضور: لأنه في ترتيب عكسي، لديك للذهاب من خلال الأوقات ن، ن الذي is-- ANDI بنغ: نعم، بالضبط. نفس ذلك الشيء كما هو الحال في هذا النوع فقاعة. إذا كانت هذه القائمة في ترتيب تنازلي، كنت ستكون لدينا للتحقق مرة الأولى. وبعد ذلك مع كل قيمة إضافية، وكنت ستكون لدينا للتحقق من ذلك ضد كل قيمة واحدة، أليس كذلك؟ وهكذا تماما، وأنت تسير لجعل ون مرات تمريرة أخرى ن تمر، التي ون المربعة. ماذا عن أفضل الأحوال؟ نعم. الحضور: ن ناقص 1، وذلك لأن وتربيع بالفعل أول واحد. ANDI بنغ: لذا، على مقربة. الجواب هو في الواقع ن. لأنه في حين أن أول واحد هو مرتبة، فإنه قد لا actually-- ذلك نحن حالفه الحظ للتو، في هذا المثال، أن 2 حدث لأنه أقل عدد. ولكن ذلك لن يكون الحال دائما. إذا تم فرزها 2 بالفعل في بداية ولكنك تبدو وهناك 1 هنا، 1 سوف عثرة. وانها سوف تنتهي حتى يتم صدم على أي حال. حتى في أفضل السيناريوهات، انها في الواقع مجرد ستكون ن. إذا كان لديك 1، 2، 3، 4، 5، 6، 7، 8، كنت الذهاب لتشغيل من خلال تلك القائمة بأكملها مرة واحدة لتحقق لمعرفة ما إذا كان كل شيء على ما يرام. هل الجميع واضحة على التوالي أوقات مختارة كذلك؟ وأنا أعلم أنني ذاهب من خلال هذه بسرعة. ولكن أعرف فقط أنه إذا كنت تعرف المفاهيم العامة، يجب أن تكون جيدة. حسنا. ولذا فإنني سوف أعطيكم الرجال ربما، مثل، دقيقة واحدة لاجراء محادثات مع جيرانكم على ما هي سوى بعض من الاختلافات الرئيسية بين هذه الأنواع من نوع ما. سنذهب أكثر من ذلك قريبا. الحضور: أوه، حسنا. ANDI بنغ: نعم. حسنا. بارد، دعونا الانعقاد كطبقة. حسنا. لذلك كان هذا النوع من سؤال مفتوح بمعنى أن هناك الكثير من الإجابات عليها. وسنذهب على بعض منهم لفترة وجيزة. أردت فقط أن تحصل على الرجال التفكير في ما يفرق جميع الأنواع الثلاثة من نوع ما. وسمعت أيضا، عظيم question-- ماذا الدمج النوع تفعل؟ السؤال الكبير، لأن هذا هو ما نقوم تغطي المقبل. لذلك دمج النوع هو نوع واحد أن وظائف مختلفة جدا من أنواع أخرى. كما يا رفاق يمكن see-- لم ديفيد قيام بذلك تجريبي حيث كان كل بارد ضوضاء رؤية كيف دمج ركض النوع، مثل، بلا حدود أسرع من غيرها من هذين النوعين؟ حسنا. بحيث لأن الدمج تنفذ النوع الذي الانقسام وقهر مفهوم أن لدينا وتحدث عن الكثير في المحاضرة. في هذا المعنى أن نود أن نعمل أكثر ذكاء، وليس أصعب، عند تقسيم وقهر مشاكل، والخروج منها إلى أسفل، ثم وضعها معا، الأشياء الجيدة يحدث دائما. وبالتالي فإن الطريقة التي دمج يعمل النوع أساسا غير أنه يقسم ل مجموعة لم يتم فرزها في النصف. ثم انها حصلت على نصفين من المصفوفات. ويفرز فقط تلك نصفي. فإنه يبقى مجرد تقسيم في نصف، في النصف، في نصف حتى يتم فرز كل شيء ثم متكرر يضع كل ذلك معا. ولهذا مجردة حقا. لذلك هذا هو فقط قليلا من شبة الكود. هل هذا يعقل في الطريقة انها تعمل؟ لذلك دعونا نقول فقط أن يكون لديك مجموعة من العناصر ن، أليس كذلك؟ إذا كان n هو أقل من 2، يمكنك العودة. لأنك تعرف أنه إذا كان هناك أمر شيء واحد فقط، يجب أن يتم فرز عليه. آخر، قمت بفرز النصف الأيسر، ثم قمت بفرز النصف الأيمن، ثم قمت بدمج. وذلك في حين يبدو من السهل حقا، في الواقع، والتفكير في انها نوع من صعوبة. لأنك مثل، حسنا، هذا النوع من يعمل على نفسها. الصحيح؟ انها تعمل على نفسه. حتى في هذا المعنى، لمست ديفيد على العودية في الصف. وهذا مفهوم سوف نتحدث عن أكثر من ذلك. ومن ذلك هذا، هذين الخطين هنا، في الواقع هو مجرد برنامج نقول ذلك لتشغيل نفسه مع مدخلات مختلفة. وذلك بدلا من تشغيل نفسه مع مجمل عناصر ن، يمكنك كسرها نزولا إلى النصف الأيسر والنصف الأيمن ومن ثم تشغيله مرة أخرى. وبعد ذلك سوف نبحث في ذلك بصريا، لأنني متعلم البصرية. أنه يعمل بشكل أفضل بالنسبة لي. ولذا فإننا سوف ننظر إلى المثال المرئي هنا. دعونا نقول لدينا مجموعة، ستة العناصر، 3، 5، 2، 6، 4، 1، غير مصنفة. كل الحق، وهناك الكثير في هذه الصفحة. إذا كان الأمر كذلك يا رفاق يمكن أن ننظر في الخطوة الأولى هنا، 3، 5، 2، 6، 4، 1، يمكنك تقسيمه إلى نصفين. لديك 3، 5، 2، 6، 4، 1. هل تعلم أن هذه aren't-- لك لا أعرف إذا كانوا مرتبة أم لا، لذلك عليك أن تبقي تقسيمها، في النصف، في النصف، في نصف، حتى في نهاية المطاف، لديك فقط عنصر واحد. ويتم فرز عنصر واحد دائما، أليس كذلك؟ لذلك نحن نعرف أن 3، 5، 2، 4، 6، 1، في حد ذاتها، يتم فرز. ونحن الآن يمكن وضعها معا مرة أخرى. حتى نعرف 3، 5. وضعنا هذه معا. ونحن نعلم أن من فرزها. ال 2 لا يزال هناك. يمكننا وضع 4 و 6 معا. ونحن نعلم أن هذا ما تم فرزها، لذلك وضعنا معا. و1 هناك. ثم كنت مجرد إلقاء نظرة على هذه شطري هنا. لديك 3، 5، 2، 2، 3، 5. يمكنك فقط مقارنة بداية كل شيء. لأنك تعرف أن هذا يتم فرز وأنت تعلم أن هذا ما فرزها. حتى ذلك الحين لم يكن لديك حتى ل مقارنة 5، كنت مجرد مقارنة 3. و2 أقل من 3، وذلك تعلمون 2 يجب أن تذهب في نهاية المطاف. نفس الشيء هناك. 1 يجب أن تذهب هنا. وبعد ذلك عندما تذهب إلى وضع تلك القيمتين معا، كنت أعلم أن هذا يتم فرز و هل تعلم أن التي تم فرزها. حتى ذلك الحين 1 و 2، 1 أقل من 2. تخبرك أن 1 يجب أن تذهب في نهاية هذا دون النظر حتى في 3 أو 5. ثم 4، يمكنك فقط تحقق، فإنه غني عن الحق هنا. لم يكن لديك للنظر في 5. نفس الشيء مع 6. أنت تعرف أن 6-- هو فقط لا تحتاج إلى أن ينظر. وهكذا وبهذه الطريقة، كنت مجرد إنقاذ نفسك الكثير من الخطوات عندما كنت المقارنة. لم يكن لديك لمقارنة كل العنصر ضد العناصر الأخرى. كنت مجرد مقارنة ضد تلك التي تحتاج إلى مقارنتها ضد. ولهذا النوع من مفهوما مجردا. لا تقلق إذا لم يكن ضرب جدا لك الحق حتى الآن. ولكن بصفة عامة، وهذا هو كيف يعمل نوعا الدمج. أسئلة، أسئلة سريعة، قبل أن أنتقل؟ نعم. الحضور: لذلك قلت أن تأخذ 1، ثم 4، و6 ووضعها في. ليست حتى those-- لا كنت ستقضي كما عناصر منفصلة، ​​وليس كما كليا؟ ANDI بنغ: نعم. ذلك ما يحدث هو أنك في الأساس وخلق مجموعة العلامة التجارية الجديدة. حتى تعرف ذلك، هنا، ولدي اثنين من صفائف حجم 3، أليس كذلك؟ حتى تعرف أن مجموعة بلدي فرزها يحتاج إلى ستة عناصر. لذلك أنت فقط إنشاء المبلغ الجديد من الذاكرة. لذلك كنت نوع من مثل كونها مضيعة للذاكرة، ولكن هذا لا يهم لأنها صغيرة جدا. لذا تبدو في 1 ونظرتم الى 2. وأنت تعرف أن 1 أقل من 2. حتى تعرف أن 1 يجب ان تذهب في بداية من كل هؤلاء جميعا. أنت لا تحتاج حتى ل ننظر إلى 3 و 5. حتى تعرف 1 يذهب هناك. ثم كنت ختم أساسا قبالة 1. انها، مثل، ميت بالنسبة لنا. ثم لدينا فقط 2، 3، 5، ثم 4 و 6. ثم أنت تعرف ذلك، ل مقارنة بين 4 و 2، أوه، 2 يجب ان تذهب الى هناك. لذلك كنت صوت نزول المطر بانخفاض 2، كنت ختم تشغيله. حتى ذلك الحين كان لديك فقط 3 و5 في 4 و 6. وعليك أن تبقي فقط تقطيع تشغيله حتى وضعها في مجموعة. الحضور: لذلك كنت دائما فقط مقارنة (غير مسموع)؟ ANDI بنغ: بالضبط. حتى في هذا المعنى، وكنت مجرد المقارنة، أساسا، رقم واحد ضد عدد آخر. ولأنك تعرف ان انها فرزها، كنت لا يجب أن ننظر من خلال جميع الأرقام. عليك فقط أن ننظر إلى أول واحد. ثم يمكنك صوت نزول المطر فقط عليهم، لأنك تعرف أنهم ينتمون حيث يجب أن تنتمي. نعم. سؤال جيد. ثم إذا كان أي منكم طموحة بعض الشيء، لا تتردد في إلقاء نظرة على هذا الرمز. هذا هو في الواقع التنفيذ المادي كيف يمكننا أن أكتب دمج النوع. ويمكنك أن ترى، انها قصيرة جدا. ولكن وراء الأفكار انها معقدة جدا. لذلك إذا كنت أشعر بأن رسم من ذلك في الليلة المنزلية الخاصة بك، لا تتردد في. حسنا. فذهب داود أيضا أكثر من ذلك في المحاضرة. ما هي أفضل حالة أوقات التشغيل، أسوأ أوقات التشغيل الحالة، وأوقات التشغيل المتوقعة لدمج النوع؟ وقبل بضعة ثواني للتفكير. هذا من الصعب جدا، ولكن نوع من بديهية إذا كنت تفكر في ذلك. حسنا. الحضور: هو أسوأ حالة ن سجل ن؟ ANDI بنغ: بالضبط. ولماذا ن ن تسجيل. الحضور: أليس لأنه يصبح أضعافا مضاعفة بشكل أسرع، لذلك مثل وظيفة من أن بدلا من مجرد كونها ببساطة ن المربعة أو شيء من هذا؟ ANDI بنغ: بالضبط. ذلك هو السبب في أن وقت التشغيل على هذا السجل ن n غير because-- ما أنت به في كل خطوة من هذه الخطوات؟ كنت مجرد تقطيع عليه في النصف، أليس كذلك؟ وذلك عندما نقوم به تسجيل كل ما تقوم به تم تقسيم المشكلة إلى النصف، في النصف، في نصف، في أكثر نصفين. وبهذا المعنى، يمكنك النوع من القضاء على النموذج الخطي أننا أستعمل. لأنه عندما كنت ختم الأشياء في نصف، انها السجل. هذا مجرد الرياضية سيلة لتمثيل ذلك. ثم أخيرا، في النهاية، كنت مجرد جعل تمريرة الماضي واحد من خلال لوضع كل منهم في النظام، أليس كذلك؟ وحتى إذا كان لديك فقط ل تحقق شيء واحد، وهذا ن. وهكذا كنت نوع من ضرب اثنين معا. لذلك فمن وكأنك حصلت على هذا النهائي تحقق من N إلى هنا مع سجل ن حتى هنا. وإذا ضرب لهم، وهذا ن ن تسجيل. وحتى أفضل الأحوال والأسوأ حالة والمتوقع كلها ن ن تسجيل. كما انها مثل نوع آخر. انها مثل اختيار نوع بمعنى أنه لا يهم ما لديك القائمة، انها مجرد الذهاب أن تفعل نفس الشيء في كل مرة واحدة. حسنا. ذلك يا رفاق يمكن أن نرى، على الرغم من وأنواع أننا قد ذهبت through-- ن مربع، انها ليست فعالة جدا. وحتى هذا ن سجل n هو ليس أكثر كفاءة. إذا يا رفاق هي غريبة، هناك آليات الفرز التي تتسم بالكفاءة بحيث انهم شقة أساسا تقريبا في وقت التشغيل. كنت قد حصلت على بعض السجل ن ل. كنت قد حصلت على بعض السجل سجل ن ل. نحن لا تلمس عليها في هذه الفئة في الوقت الراهن. ولكن إذا كنت اللاعبين هي غريبة، لا تتردد في جوجل، ما هو آليات الفرز الأكثر فعالية. أنا لا أعرف، هناك البعض منها مضحك حقا، like-- هناك بعض الحقيقة تلك مضحك أن تجعل الناس. وكنت أتساءل كيف فكرت في ذلك. حتى جوجل، إذا كان لديك بعض قطع الغيار الوقت، على، ما هي بعض الطرق مضحك أن people-- وكذلك الناس ways-- كفاءة تمكنت من تنفيذ نوع ما. حسنا. وهنا مجرد رسم مفيد قليلا. أنا أعرف كل واحد منكم، قبل أن مسابقة 0، سوف تكون في غرفتك ربما تحاول لحفظ ذلك. ذلك أن لطيفة في هناك ليا رفاق. فقط لا ننسى المنطق الذي made-- لماذا هي تلك الأرقام التي تحدث. إذا كنت فقدت دائما، وجعل مجرد تأكد من أنك تعرف ما هي أنواع. ويمكنك من خلال تشغيل لهم في عقلك لمعرفة لماذا تلك الأجوبة هي تلك الإجابات. حسنا. لذلك نحن ذاهبون للانتقال على، أخيرا، إلى البحث. لأنه كما أولئك منكم الذين قرأت PSET، البحث هو أيضا جزء من وتحدد المشكلة هذا الاسبوع. سيطلب منك لتنفيذ نوعين من عمليات البحث. واحد هو البحث الخطي و واحد هو البحث الثنائي. وبالتالي فإن البحث الخطي من السهل إلى حد ما. تريد فقط للبحث عنصر من قائمة لمعرفة ما إذا كنت تحصل عليه. لديك فقط لتكرار خلال. وإذا كان يساوي شيئا، يمكنك فقط إعادته، أليس كذلك؟ ولكن واحدة أننا أكثر مهتم في الحديث عن هو البحث الثنائي، والحق، الذي هو تقسيم وآلية التغلب التي كان داود يتظاهرون في المحاضرة. تذكر المثال دليل الهاتف انه يحتفظ تنشئة، واحد انه نوع من ناضل قليلا في هذا العام المنصرم، حيث يمكنك تقسيم المشكلة إلى النصف، في النصف، في نصف، مرارا وتكرارا، حتى تجد ما كنت تبحث عنه؟ وكنت قد حصلت على وقت التشغيل من ذلك أيضا. ويمكنك أن ترى، انها إلى حد كبير أكثر كفاءة من أي نوع آخر من البحث. وبالتالي فإن الطريقة التي كنا نذهب حول تنفيذ البحث الثنائي هو، إذا كان لدينا مجموعة، مؤشر 0-6، سبعة عناصر، يمكننا أن ننظر في الوسط، right-- آسف، إذا سؤالنا first-- إذا كنا نريد أن نطرح هذا السؤال من، هل مجموعة تحتوي على عنصر من 7 من الواضح، كونها البشر، وجود مثل مجموعة صغيرة، فمن السهل بالنسبة لنا لنقول نعم. ولكن الطريقة لتنفيذ ثنائي ان البحث سيكون للنظر في الوسط. ونحن نعلم أن المؤشر 3 هو الوسط، لأننا نعرف أن هناك سبعة عناصر. ما 7 مقسوما على 2؟ يمكنك بقطع أن 1 اضافية. كنت قد حصلت على 3 في الوسط. ذلك هو مجموعة من 3 تساوي 7؟ لم يكن، أليس كذلك؟ لكن يمكننا أن نفعل بضعة الشيكات. هو مجموعة من 3 أقل من 7 أو هو مجموعة من 3 أكبر من 7؟ ونحن نعلم أنه من أقل من 7. لذلك نعرف ان، أوه، يجب عليه لا يكون في النصف الأيسر. ونحن نعلم أنه يجب أن يكون في النصف الأيمن، أليس كذلك؟ حتى نتمكن من ختم قبالة نصف المصفوفة. ليس لدينا حتى ل ننظر في الأمر بعد الآن. لأننا نعلم أن نصف problem-- لدينا ونحن نعلم أن الجواب هو في النصف الأيمن من مشكلتنا. لذلك نحن ننظر فقط في ذلك الآن. حتى الآن ننظر إلى وسط ما تبقى. أن مؤشر 5. ونحن نفعل نفس الاختيار مرة أخرى ونحن نرى أنه أصغر. لذا فإننا نتطلع إلى اليسار من ذلك. ومن ثم فإننا نرى أن الاختيار. هي قيمة مجموعة في مؤشر 4 يساوي 7؟ إنها. حتى نتمكن من العودة صحيح، لأن وجدنا قيمة في قائمتنا. هل الطريق ذهبت من خلال هذا معقول للجميع؟ حسنا. سأعطيك الرجال ربما، مثل، ثلاث أو أربع دقائق لمعرفة كيفية شبة الكود هذا في. حتى تخيل طلبت منك أن إرسال بريد وظيفة تسمى البحث () التي عادت قيمة، قيمة منطقية، كان هذا صحيحا أم false-- مثل، صحيح إذا وجدت قيمة، كاذبة إذا كنت لم تفعل ذلك. ثم كانت مرت في القيمة التي كانوا يبحثون عن إلى قيم، والتي هو array-- أوه، أنا بالتأكيد وضع أنه في المكان الخطأ. حسنا. على أي حال، ما كان يجب أن كان على يمين القيم. ثم الباحث n هو عدد العناصر في هذا الصفيف. كيف يمكنك أن تذهب نحو محاولة لشبة الكود هذه المشكلة في؟ سأعطيك الرجال مثل ثلاث دقائق للقيام بذلك. لا، أعتقد أن هناك only-- نعم، هناك حق واحد هنا. الحضور: هل أنا؟ ANDI بنغ: نعم، حصلت لك. هل هذا العمل؟ OK، بارد. حسنا. كل الأشخاص المناسبين، ونحن الذهاب لكبح جماح فيها. حسنا. لذلك نفترض أننا قد حصلت على هذا جميل مجموعة صغيرة مع القيم ن في ذلك. لم أكن رسم الخطوط. ولكن كيف نذهب حول محاولة لكتابة هذا؟ لا يريدون أي شخص تعطيني السطر الأول؟ إذا كنت تريد أن تعطيني السطر الأول من هذا شبة الكود. الحضور: (غير مسموع) الحضور: كنت أريد تكرار through-- الحضور: مجرد آخر للحلقة؟ الحضور: --for. ANDI بنغ: هذا واحد هو صعبة بعض الشيء. أعتقد about-- تريد للحفاظ على التوالي هذه الحلقة مرارا وتكرارا حتى متى؟ الحضور: وحتى (غير مسموع) قيمة مساوية لقيمة. ANDI بنغ: بالضبط. لذلك يمكنك فعلا write-- فقط نحن حتى يمكن تبسيط الأمر أكثر. يمكننا أن نفعل مجرد حلقة في حين، أليس كذلك؟ لذلك يمكن أن يكون مجرد loop-- ونحن نعلم أنه من حين لاخر. ولكن للحق الآن، وانا ذاهب أن نقول "حلقة" - من خلال ما؟ حلقة until-- ما هو لدينا حالة انهاء؟ أعتقد أنني سمعت ذلك. سمعت أحدهم يقول ذلك. الحضور: القيم يساوي الوسط. ANDI بنغ: قل ذلك مرة أخرى. الحضور: أو، حتى القيمة التي تبحث لتساوي القيمة المتوسطة. ANDI بنغ: ماذا لو انها ليست في وجود؟ ما إذا كانت القيمة التي تبحث ليست في الواقع في هذه المجموعة؟ الحضور: يمكنك العودة 1. ANDI بنغ: ولكن ما نريد حلقة حتى لو كان لدينا حالة؟ نعم. الحضور: حتى هناك قيمة واحدة فقط؟ ANDI بنغ: يمكنك حلقة until-- حتى تعرف أنك ستكون لدينا قيمة الحد الأقصى، أليس كذلك؟ وأنت تعرف أنك ذاهب لتحديد قيمة دقيقة، أليس كذلك؟ لأن أيضا، وهذا شيء لقد نسيت أن أقول من قبل، ان هناك شيئا ما ل حاسمة حول البحث الثنائي غير أن مجموعة الخاصة بك يتم فرز بالفعل. لأنه ليس هناك طريقة للقيام هذا اذا كانا لا يزالان القيم فقط عشوائية. كنت لا أعرف إذا كان أحد ل أكبر من الآخر، أليس كذلك؟ حتى تعرف أن أقصى بك و دقيقة بك هنا، أليس كذلك؟ إذا كنت على وشك أن تعديل ماكس الخاص بك في دقائق الخاص وmid-- دعونا نفترض فقط الخاص قيمة منتصف هي here-- الحق وأنت تسير في الأساس حلقة حتى الحد الأدنى الخاص بك هو تقريبا نفس الخاص بك الحد الأقصى، والحق، أو إذا كحد أقصى ليست هي نفسها كما دقيقة بك. الصحيح؟ لأنه عندما يحدث ذلك، وتعلمون أن كنت قد تصل في نهاية المطاف نفس القيمة. لذلك كنت ترغب في حلقة حتى بك دقيقة أقل من أو يساوي to-- عفوا، لا أقل من أو يساوي، الطريقة الأخرى هي around-- ماكس. فهل هذا يعقل؟ أخذت عدة محاولات للحصول على هذا الحق. ولكن حلقة حتى قيمة الحد الأقصى الخاص بك هو في الأساس أقل تقريبا من أو يساوي الحد الأدنى الخاص بك، أليس كذلك؟ هذا هو عندما تعلم بعد أن كنت قد المتقاربة. الحضور: متى الحد الأقصى ل تكون القيمة أقل من الحد الأدنى؟ ANDI بنغ: اذا واصلتم تعديله، التي ما نحن ذاهبون أن تفعل في هذا المجال. هل هذا منطقي؟ الحد الأدنى والحد الأقصى ليست سوى الأعداد الصحيحة التي نحن على الارجح تريد الذهاب الى خلق للحفاظ على المسار من حيث نحن نبحث. بسبب وجود مجموعة بغض النظر عن ما نقوم به. مثل، نحن لسنا في الواقع جسديا قطع مجموعة، أليس كذلك؟ نحن فقط تعديل حيث نحن نبحث. هل هذا منطقي؟ الجمهور: نعم. ANDI بنغ: OK. حتى إذا كان هذا هو شرط للحلقة لدينا، ماذا نريد من داخل هذه الحلقة؟ ما نحن ذاهبون إلى أن الرغبة في القيام به؟ حتى الآن، لدينا ماكس ودقيقة، والحق، ربما تم إنشاؤها هنا في مكان ما. ونحن في طريقنا لربما تريد لإيجاد الوسط المناسب؟ كيف نحن ذاهبون ليكون قادرة على العثور على الوسط؟ ما هو mathematical-- الحضور: ماكس زائد دقيقة مقسومة على 2. ANDI بنغ: بالضبط. هل هذا منطقي؟ ويا رفاق نرى لماذا نحن لم يكتف use-- لماذا فعلنا هذا بدلا من مجرد القيام مقسمة ن بنسبة 2؟ انها لn هو قيمة ما يجري على حالها. الصحيح؟ ولكن كما نقوم بتعديل الحد الأدنى لدينا و الحد الأقصى للقيم، وانهم لن يتغير. ونتيجة لذلك، منتصف لدينا هو الذهاب الى تغيير أيضا. ولهذا السبب نريد للقيام بذلك هنا. حسنا. وبعد ذلك، أن الآن لقد وجدنا our-- نعم. الحضور: مجرد question-- سريعة عندما تقول دقيقة والحد الأقصى، نحن على افتراض أن لقد تم فرزها بالفعل؟ ANDI بنغ: نعم، هذا الواقع شرط مسبق لبحث ثنائي، أن عليك أن تعرف انه فرزها. وهذا هو السبب النوع، تكتب في الخاص مشكلة تعيين قبل البحث الثنائي الخاص بك. حسنا. حتى الآن أن نعرف أين منتصف لدينا هو، ماذا تريد أن تفعل هنا؟ الحضور: نريد للمقارنة ذلك إلى الآخر. ANDI بنغ: بالضبط. حتى وأنت تسير لمقارنة منتصف لقيمة، أليس كذلك؟ وماذا نقول أن لنا عندما نقارن؟ ماذا نريد أن نفعل بعد ذلك؟ الجمهور: إذا كانت القيمة أكبر من منتصف، ونحن نريد لخفض تشغيله. ANDI بنغ: بالضبط. حتى إذا كانت قيمة أكبر من منتصف، ونحن تريد الذهاب الى تغيير هذه الحد الأدنى وmaxes، أليس كذلك؟ ماذا نريد تغييره؟ حتى لو كنا نعرف قيمة في مكان ما هنا، وماذا علينا أن نتغير؟ نريد أن نغير الحد الأدنى ليكون منتصف، أليس كذلك؟ ثم آخر، وإذا كان في هذا نصف، ماذا نريد تغييره؟ الحضور: الحد الأقصى ل. ANDI بنغ: نعم. ثم كنت مجرد الذهاب للحفاظ على حلقات، أليس كذلك؟ لأنه الآن، وبعد تكرار واحد من خلال، كنت قد حصلت على الحد الأقصى هنا. ثم يمكنك إعادة حساب المتوسط. ثم يمكنك مقارنة. وأنت تسير على الاستمرار حتى دقيقة وmaxes قد تقاربت في الأساس. وهذا هو عندما تعلم ان كنت قد بلغت نهاية لها. وسواء كنت قد وجدت أو ليس لديك عند تلك النقطة. هل هذا يعقل أن الجميع؟ حسنا. وهذا أمر مهم جدا، لأن عليك لكتابة هذا في هذه الليلة التعليمات البرمجية. ولكن يا رفاق يكون جيدا جدا شعور ما يجب أن تقوم به، وهو أمر جيد. حسنا. لذلك نحن قد حصلت على حوالي سبعة دقائق تركت الباب. لذلك نحن ذاهبون للحديث عن هذا PSET التي سنقوم به. بحيث يتم تقسيم PSET إلى نصفين. ويشمل النصف الأول تنفيذ اكتشاف التي تكتب البحث الخطي، ل البحث الثنائي، وخوارزمية الفرز. لذلك هذا هو أول الوقت في PSET حيث سنكون اعطاء يا رفاق ما يسمى كود التوزيع، والذي هو رمز أن لدينا مسبقا مكتوبة، ولكن مجرد ترك بعض القطع خارج بالنسبة لك لإنهاء الكتابة. لذلك يا رفاق، عند النظر في هذا رمز، قد يشعرون بالخوف حقا. إذا كنت ترغب فقط، آه، I لا أعرف ما الذي يفعل، أنا لا أعرف، مثل، الذي يبدو معقدة جدا، آه، والاسترخاء. كل شيء على مايرام. قراءة المواصفات. فإن المواصفات يشرح لك بالضبط ما كل هذه البرامج يفعلون. على سبيل المثال، generate.c هو برنامج التي سوف تأتي مع PSET الخاص بك. لم يكن لديك فعلا لمسها، ولكن يجب أن نفهم ما تقوم به. وgenerate.c، كل ما يفعل هو إما توليد الأرقام العشوائية أو يمكنك إعطائها البذور، مثل عدد تقتاد الذي يستغرقه، ويولد المزيد من الأرقام. لذلك هناك طريقة محددة ل تنفيذ generate.c فيها يمكنك جعل مجرد حفنة من الأرقام بالنسبة لك لاختبار أساليب الأخرى الخاصة بك على. لذلك إذا أردت، ل سبيل المثال، test البحث الخاص بك، كنت ترغب في تشغيل generate.c، توليد مجموعة من الأرقام، ثم قم بتشغيل وظيفة المساعدين الخاص بك. وظيفة المساعدين الخاص بك هو حيث كنت في الواقع كتابة جسديا التعليمات البرمجية. وأعتقد أن من المساعدين كملف مكتبة كنت أكتب هذا الاكتشاف هو الدعوة. وذلك في إطار helpers.c، عليك تفعل البحث والفرز. ثم كنت تريد الذهاب إلى الأساس مجرد وضع لهم جميعا معا. فإن المواصفات اقول لكم كيفية التي وضعت على سطر الأوامر. وعليك أن تكون قادرا على اختبار ما إذا كان أو ليس لديك فرز وبحث يعملون. رائع. وقد أي شخص بدأت بالفعل و المشاكل التي واجهتها أو أسئلة لديهم الآن مع هذا؟ حسنا. الحضور: انتظر. لدي سؤال. ANDI بنغ: نعم. الحضور: وهكذا بدأت تفعل البحث الخطي في helpers.c وأنها لا تعمل حقا. ولكن بعد ذلك في وقت لاحق، اكتشفت أننا فقط يجب أن حذفها والقيام البحث الثنائي. لذلك لا يهم إذا كان لا يعمل؟ ANDI بنغ: الجواب باختصار هو لا. ولكن بما أننا not-- الحضور: ولكن لا أحد التحقق في الواقع. ANDI بنغ: نحن أبدا سنرى ذلك. ولكن ربما كنت تريد أن تجعل بالتأكيد تعمل بحثك. لأنه إذا الخطية بك لا يعمل البحث، ثم هي احتمالات ثنائي بك البحث لن تعمل بشكل جيد. لأن لديك مشابهة المنطق في كل منهما. وليس، لا يهم حقا. لذلك وحدهم سوف تتحول في لفرز والبحث الثنائي. نعم. وأيضا، الكثير من الاطفال كانوا تحاول تجميع helpers.c. كنت لا يسمح في الواقع للقيام بذلك، لأن helpers.c لايوجد الوظيفة الرئيسية. وهكذا ينبغي لك فقط يكون تجميع الواقع توليد والعثور عليها، لتجد المكالمات helpers.c وظائف في داخلها. بحيث يجعل التصحيح ألم في بعقب. ولكن هذا ما يتعين علينا القيام به. الحضور: أنت مجرد جعل كل شيء، أليس كذلك؟ ANDI بنغ: يمكنك فقط جعل جميع أيضا، نعم. حسنا. ذلك أن كل شيء من حيث ما وPSET يسأل لكم جميعا القيام به. إذا كان لديك أي أسئلة، لا تتردد في تسألني بعد القسم. سأكون هنا ل، مثل، 20 دقيقة. ونعم، في PSET الحقيقة ليست بهذا السوء. وينبغي أن تكون يا رفاق موافق. هذه، ما عليك سوى اتباع المبادئ التوجيهية. نوع من لديهم شعور، منطقيا، ما يجب أن يحدث وسوف يكون على ما يرام. لا يكون خائفا جدا. هناك الكثير من التعليمات البرمجية كتبت بالفعل هناك. لا يكون خائفا جدا إذا كنت لا فهم ما كل هذا يعني. اذا كان كثيرا، وأنها على ما يرام تماما. وتأتي لساعات العمل. ونحن سوف تساعدك على اتخاذ نظرة. الحضور: مع اضافية وظائف، لا ننظر تلك التي تصل؟ ANDI بنغ: نعم، تلك هي في التعليمات البرمجية. في لعبة 15، نصف الذي كتبت عليه بالفعل بالنسبة لك. حتى تلك الوظائف هي بالفعل في التعليمات البرمجية. نعم. حسنا. حسنا، حظا سعيدا. إنه يوم مثير للاشمئزاز. لذلك نأمل أن الرجال لا يشعرون أيضا سيئة عن البقاء داخل والترميز.