DAVID مالان: حسنا.
لذلك هذا هو CS50، وهذا هو الآن بداية الأسبوع الثلاثة.
>> لذلك حتى الآن، لدينا تم كتابة البرامج في C
أن ننظر قليلا شيء من هذا القبيل هنا.
ولذا فإننا قد حصلت على زوجين من يشمل حادة في الأعلى.
لدينا كثافة العمليات، الرئيسي، الفراغ، و ثم أن تفعل شيئا في الوسط،
بعض الشيء من التعليمات البرمجية داخل من تلك الوظيفة.
ولكن كان مفتاح حقيقة أن كنا نقوله هنا باطلا.
ذلك الفراغ، كل هذا الوقت، يحدد أن هذا البرنامج عند تشغيله،
لا يمكن إلا أن تدار عبر اسمها.
لا يمكنك كتابة أي كلمة أخرى أو الأرقام بعد اسم البرنامج عندما
تشغيله.
لذلك، على سبيل المثال، إذا كان برنامج تجميعها في ملف يسمى مرحبا،
هل يمكن أن تفعل ./hello، ولكن هذا هو عليه.
>> الطريقة الوحيدة التي يمكن لكم تقديم مدخلات لهذا البرنامج
هو عن طريق استدعاء دالة.
على سبيل المثال، ما هي وظيفة ونحن تم استخدام حتى الآن
للحصول على مدخلات من المستخدم؟
>> الجمهور: الحصول السلسلة.
DAVID مالان: للحصول على سلسلة، أو الحصول على كثافة العمليات، أو كنت قد رأيت الآخرين،
حتى إذا لم تكن قد استخدمتها بعد، مثل الحصول على فترة طويلة، طويلة، وما شابه ذلك.
ولكن لنفترض أننا في الواقع تريد أن تبدأ
برامج الكتابة التي هي أكثر قليلا تنوعا،، وبصراحة، أكثر من ذلك بقليل
مثل الأوامر التي قمت تم الحصول على، ونأمل،
قليلا تعتاد عليها.
مثل مؤتمر نزع السلاح دروببوإكس الفضاء.
هذا، بطبيعة الحال، والتغيرات الدليل الخاص بك، على افتراض
كنت في منزل جون هارفارد الدليل إلى مجلد دروببوإكس الخاص بك.
وفي الوقت نفسه، أمر مثل هذا بإنشاء دليل جديد يسمى pset2،
كما قد يكون لديك بالفعل أو قريبا لمشكلة تعيين اثنين.
جعل مرحبا، بالطبع، هو أمر التي تبني برنامج يسمى مرحبا
من ملف يسمى مرحبا نقطة ج.
وفي كل من هذه الحالات، الآن، لقد كان لدينا
تقديم حجة على ما يسمى سطر الأوامر، موجه امض،
بحيث جعل يعرف ما لبناء، وهكذا أن يعرف ما MKDIR مجلد لإنشاء و
وبحيث يعرف CD حيث تريد أن تذهب.
ولكن حتى الآن، ونحافظ قائلا أن الرئيسية، وظيفة الافتراضي الخاص بك،
لديه التعبير الفراغ داخل هذه الأقواس،
مما يعني أنه لا يمكن اتخاذ أي حجج.
>> لذلك ابتداء من اليوم، ما نحن في طريقنا للقيام
و، نحن ذاهبون لبدء دعم مثل هذه الامور حتى.
في الواقع، في هذه الحالة، والتي عادة لا اكتب يدويا،
جعل تم القيام بذلك بالنسبة لنا، لا يوجد
واحد ولكن واحد، اثنان، ثلاثة إضافية سلاسل بعد البرنامج اسمه
رنة.
لذلك كيف يمكننا تحقيق ذلك؟
>> حسنا، ابتداء من اليوم، في الحالات التي نريد
لتوفير المدخلات عن طريق ما يسمى سطر الأوامر،
نحن ذاهبون الى البدء في إضافة هنا ما في yellow--
استبدال الفراغ مع كثافة العمليات argc فاصلة سلسلة ARGV قوس قوس مفتوح وثيق.
الآن هذا مثير للاهتمام لعدة أسباب.
واحد، انها سوف دعونا إرسال البرامج التي هي أكثر قليلا ديناميكية.
ولكن، أكثر مقنع، انها سوف تفتح
الآن محادثة ل ما صفائف يمكن حقا
استخدامها، لما سلسلة هو في الحقيقة تحت غطاء محرك السيارة،
حتى الاسبوع المقبل عندما نبدأ الغوص في أعمق لكيفية الآلة
جعل كل هذا العمل الاشياء.
لكنه الآن، دعونا رسم، ربما، صورة.
>> عند كتابة برنامج مع أعلن الرئيسية
في هذه الطريقة، بحيث الرئيسية يأخذ حجتين، وكثافة العمليات
و- ما نوع البيانات هي الحجة الثانية؟
>> الجمهور: صفيف.
DAVID مالان: صفيف.
بحيث يبدو للوهلة الأولى مثل انها سلسلة ولكن لاحظ الأقواس المربعة.
أذكر آخر مرة قدمنا مفهوم صفيف.
والمصفوفات تستخدم الأقواس المربعة في بضع السياقات.
قد تستخدم الساحة بين قوسين للذهاب في صفيف
والحصول على عنصر معين، مثل 0 قوس أو قوس أو قوس 1 2.
ولكن رأينا، إذا لفترة وجيزة، الاسبوع الماضي ان كنت أيضا
استخدام هذه الأقواس المربعة ل يعلن حجم صفيف،
إذا كنت تعرف مسبقا كيف كثير [إينتس] أو كم عدد السلاسل أو ما كنت
فعلا تريد.
حتى اتضح هناك ل السياق الثالث هنا
أن لا يوجد لديه رقم داخل من أقواس معقوفة.
عند تحديد، كما قلت هنا، اسم ARGV شيء من هذا القبيل،
الذي هو مجرد وسيلة لنزوة قائلا ناقلات الحجة، التي
طريقة نزوة آخر من تقول مجموعة من الحجج،
قوس قوس مفتوح وثيق فقط يعني أنك لا بالضرورة
تعرف مسبقا كيف كبيرة مجموعة ستكون،
لكنك تعلم أنها ستكون صفيف.
حتى إذا كنت لا تعرف عدد ليس وضعه في هناك،
قوس مفتوح للقوس وثيق يعني أن ARGV ليست سلسلة،
ولكن مجموعة من السلاسل.
حتى نحويا، إذا كنت التفكير مرة أخرى في الأسبوع الماضي،
انها تشبه الى حد بعيد قائلا شيء من هذا القبيل كثافة العمليات الأعمار قوس مفتوح،
ثم شيئا بعد ذلك.
فماذا يعني هذا تبدو وكأنها؟
دعونا بالفعل رسم صورة.
لذلك عند تشغيل هذا البرنامج مع الرئيسية بعد حجتين محددة داخل
تلك قوسين، أنت لدينا أساسا اثنين على الأقل قطع
من الذاكرة سلمت لك تحت غطاء محرك السيارة.
واحد، وسوف أكون كما توجه هذا المستطيل، سوف يتم دعا argc.
ومثلما خلاصة سريعة، ما هو نوع بيانات argc؟
حتى انها لكثافة العمليات.
ذلك هو عدد مستمرة للذهاب في المنعطفات argc--
إلى أن تقف على عدد حجة.
وفي الوقت نفسه، لقد رسمها ARGV كما صفيف.
وأنا لا أعرف حقا متى سيكون،
حتى لأغراض اليوم نقطة نقطة نقطة.
قد تحصل بعض الطول.
ولكني هنا في الصورة لا يقل عن أربعة مستطيلات.
حتى ARGV جزءا من الذاكرة التي تخزن سلسلة سلسلة سلسلة نقطة نقطة نقطة،
وargc هو قطعة واحدة فقط من الذاكرة لعدد صحيح.
>> وحتى الآن، دعونا نكون أكثر دقة قليلا.
إذا، عندما يكون لدي سلاسل في هذه المجموعة، ودعا
ARGV، أريد الحصول عليهم فردي، تماما مثل الأسبوع الماضي،
نحن ذاهبون الى استخدام التدوين مثل قوس ARGV 0
للحصول على أول شيء صفيف.
ARGV قوس 1 للحصول على الشيء الثاني، وهكذا دواليك.
المفتاح هنا يجري ما زلنا 0 indexed-- ما زلنا العد من 0.
حتى الآن دعونا الواقع وضع شيء في هذا.
إذا كان لي أن ترجمة برنامج يسمى مرحبا من ملف يسمى مرحبا نقطة ج،
وبعد ذلك تشغيل هذا البرنامج مع نقطة خفض مرحبا،
ماذا جهاز الكمبيوتر الخاص بي، جهاز الكمبيوتر المحمول، تبدو وكأنها تحت غطاء محرك السيارة
لحظة تشغيل نقطة خفض مرحبا وهاهنا؟
حسنا، هذا هو ربما ما يمكننا وصف
ومحتوى جهاز الكمبيوتر الخاص بك الذاكرة أو ذاكرة الوصول العشوائي RAM--.
وبعبارة أخرى، الكمبيوتر، بطريقة أو بأخرى بالنسبة لك سحرية،
يضع الرقم 1 في argc، AKA argcount، وأنه يضع حرفيا سلسلة
./hello في ARGV قوس 0.
ليس لدي فكرة، بصراحة، ما هو في قوس ARGV 1 أو 2 أو 3،
لأنه إذا كان المستخدم لديه لا كتابة أي شيء إلى جانب ./hello،
نحن ذاهبون لنفترض أن هذه هي قيم القمامة على الأرجح،
إذا جاز التعبير.
تلك أجزاء من الذاكرة موجودة، ولكنها ليست متروك لنا
أن ننظر إليها، ل وargcount واحد فقط.
>> الآن، وفي الوقت نفسه، إذا كنت إرسال تشغيل برنامج آخر،
مؤتمر نزع السلاح، الذي هو أكثر أمر صحيح، امض في الفضاء الخاص بك مؤتمر نزع السلاح prompt--
Dropbox-- عندما كنت تشغيل هذا، على نحو فعال، عند تشغيل برنامج مؤتمر نزع السلاح، argc،
داخل ذاكرة جهاز الكمبيوتر الخاص بي، هو ل أكثر أقصر الثانية عدد 2.
ثم ARGV س قوس له مؤتمر نزع السلاح، ARGV قوس 1 ديه دروببوإكس،
وبعد ذلك بالطبع الأمر يكمل، لذلك كل من هذه الذاكرة
يذهب أساسا بعيدا و يستخدم لشيء آخر.
ولهذا السبب أقول مجرد جزء من الثانية.
>> وفي الوقت نفسه، إذا فعلنا إنشاء مجلد pset2، فإن الصورة تبدو نفسها تقريبا،
ولكن مع سلاسل مختلفة داخل ARGV.
إذا كنت تفعل رنة اندفاعة مرحبا مرحبا نقطة ج، نفس الفكرة.
يتم تعبئة المزيد من الأشياء في ل ARGV، وargc، بالطبع، هو 4.
لذلك وبعبارة أخرى، على الرغم من هذه المجموعة
قد تكون نقطة نقطة نقطة، من بعض طول متغير، إذا جاز التعبير،
تعرف دائما أين نهاية لها هو، لأن argc سوف اقول لكم
في نقطة ما لديك لوقف النظر في عناصر في ARGV.
يمكنك أن تبحث فقط في أربعة في المجموع في هذه الحالة.
>> لذلك دعونا الآن نلقي نظرة على، ربما، برنامج بسيط.
واحد أن يقول فقط مرحبا لشخص مثل Zamyla.
حتى أزعم أنا ذاهب لكتابة برنامج في لحظة فقط عبر التي يمكن أن أفعله
./hello الفضاء Zamyla، ثم أريد برنامجي لطباعة شيء
فائقة بسيطة مثل "مرحبا، Zamyla".
الآن في الماضي استخدمنا getstring.
حتى في الماضي، حتى لو كنت جديدا على البرمجة،
الاحتمالات هي أنك يمكن أن جهز برنامج يستخدم getstring
ثم يستخدم printf أن يقول مرحبا لZamyla.
ولكن دعونا لا تستخدم getstring هذا الوقت.
اسمحوا لي بدلا من الذهاب إلى Appliant ولا تشمل القياسية أنا يا نقطة ح.
اسمحوا لي أن تشمل أيضا CS50 نقطة ح.
الآن الباحث الرئيسي، والآن أنا لن تفعل الفراغ اليوم.
بدلا من ذلك، أنا ذاهب الى القيام به كثافة العمليات argc سلسلة ARGV قوس قوس مفتوح وثيق،
لم يحدد رقما.
والآن هنا هو بلدي ما يسمى القيام به.
ما أنا ذاهب الى القيام به الآن هو، أنا سوف تفعل شيئا من قفزة الإيمان،
أنا ذاهب لنفترض أن المستخدم تنوي استخدام هذا البرنامج بشكل صحيح،
وأنا ببساطة الذهاب الى القيام printf مرحبا، SN٪.
لذلك لا شيء جديد هناك.
ولكن أريد أن الآن وضع كل ما كلمة و أنواع المستخدم بعد اسم البرنامج.
حتى لو كنت تفعل ./hello الفضاء Zamyla، وأنا تريد بطريقة أو بأخرى الوصول برمجيا
أقتبس نهاية الاقتباس "Zamyla". لذلك أنا يمكن أن تذهب إلى حجتي ناقلات،
بلدي مجموعة من السلاسل، وإذا الأمر، مرة أخرى، كان ./hello الفضاء Zamyla،
ما هو الرقم الذي أريد لوضع ARGV هنا؟
الجمهور: 1.
DAVID مالان: 1، ل قوس 0 تبين
سيكون ل اسم البرنامج، كما رأينا.
حتى قوس 1 هي الكلمة الأولى أنني، المستخدم، وكتابة.
انا ذاهب الى المضي قدما وحفظ هذا.
انا ذاهب للذهاب الى مجلد بلدي حيث كنت قد وضعت هذا الملف.
انا ذاهب الى القيام به جعل مرحبا 3.
OK شركات IO ل.
./hello Zamyla أدخل.
ماذا فعلت خطأ؟
كنت اشتعلت على حين غرة نفسي لمجرد لحظة هناك.
ماذا فعلت خطأ؟
>> الجمهور: اسم.
>> DAVID مالان: الملف ل دعا فعلا hello3.c.
وفعلت ذلك فقط ل الاتساق، لأننا
كان في hello.c في الماضي في مدونة على الانترنت.
لذلك دعونا إصلاح هذه ./hello قوس اندفاعة 3 Zamyla.
دخول.
والآن لدينا مرحبا، Zamyla.
وفي الوقت نفسه، يمكنني تغيير هذا ل يكون روب، أو حقا أي كلمة أخرى.
>> ولكن دعونا النظر في قضية الزاوية.
ما يمكن أن تتوقع أن يحدث إذا أنا لا اكتب اسم أي شخص على الإطلاق؟
>> الجمهور: خطأ.
>> DAVID مالان: خطأ من نوع ما، ربما.
دعونا نرى.
دخول.
لاغية.
حتى printf يجري في الواقع قليلا من الحماية لنا
هنا، وحرفيا طباعة PAREN المفتوحة لاغية، ولكن الأمور أسوأ من ذلك يمكن أن يحدث.
وفقط لإثبات شيء كنت على الاطلاق
لا ينبغي القيام به، دعنا نذهب في وهنا تبدأ بدس حولها.
أليس كذلك؟
لو كنت أعلم أن الصورة الذاكرة هي في الأساس هذا،
ARGV قوس 1 ديه Zamyla، ARGV قوس 0 ديه ./hello، أو ./hello-3.
ما هو في قوس 2؟
حتى أتمكن من الإجابة على هذا أسأل نفسي، أليس كذلك؟
يمكنني تغيير فقط 1 إلى 2.
يمكنني الآن إعادة ترجمة مرحبا 3، ./hello3 دعونا تكبير وهاهنا.
يصيح.
لا يوجد علامة اقتباس.
مثيرة للاهتمام.
ولهذا النوع من بارد ل نرى ماذا هو هنا.
>> فما هو آخر داخل جهاز الكمبيوتر المحمول؟
دعونا حفظه مع قوس 3.
جعل hello3، ./hello-3.
الغريب.
والآن دعنا bold-- حقا 50.
ذلك أن الغوص عميقا حقا في ذاكرة جهاز الكمبيوتر الخاص بي.
50 في الفهارس.
لذا تأكد مرحبا ./hello 3-3.
الغريب.
كل الحق، والآن أنا فقط ذاهب للحصول على التهور.
دعنا نذهب إلى 5،000.
كل الحق.
لذلك اسمحوا لي إعادة ترجمة.
جعل hello3، ./hello-3.
موافق.
الآن بعض منكم، ربما هناك تكون لمبة ضوء الخروج.
كم لديك رأيت هذه الرسالة من قبل؟
موافق.
لذا، لماذا؟
>> وهناك خلاف are-- المختلفة الأشياء التي يمكن أن تسبب هذا،
واضح أنك في حالة جيدة company-- لدينا بشكل واضح
تسبب ما يسمى خطأ تجزئة.
وقصة قصيرة طويلة لهذا اليوم، وأنا لمست شريحة الذاكرة
أنني لا ينبغي أن يكون.
حيث شريحة يعني مجرد قطعة الذاكرة التي لا ينبغي أن يكون.
الآن ويضمن جهاز الكمبيوتر الذي لو تشغيل ./helloZamyla أستطيع أن تلمس ARGV
يكون قوس 0 وARGV قوس 1.
لكن argc قيمة 2، هذا يعني أنا فقط allowed-- انها نوع من الشرف
system-- للمس 0 قوس وقوس 1.
إذا ذهبت أي أبعد، هناك يحدث على الإطلاق أن تكون الذاكرة هناك.
بلدي RAM موجود جسديا في الكمبيوتر.
ولكن من يدري ماذا هناك؟
في الواقع، أنا على التوالي متعددة برامج في وقت واحد.
كنت قد يكون seen-- لو لم أكن القيام بذلك على Appliant
ولكن على بلدي ماك أو PC-- أنني قد يكون ينظر محتويات البريد الإلكتروني.
أنا قد شهدت لحظة لقد أرسلت رسالة في الآونة الأخيرة.
أي شيء يمكن أن يكون حول العالقة في الذاكرة
كان يمكن الوصول إليها عن طريق هذا التعسفي مربع التدوين قوس.
أو، الأسوأ من ذلك، قد يكون لديك وجدت واحدة من كلمات السر الخاصة بي
ان كنت كتبته مؤخرا في، أن وكان البرنامج المخزن في الذاكرة حتى
لمصادقة لي، و ثم مجرد نوع من تركها
في ذاكرة الوصول العشوائي حتى أستقيل هذا البرنامج.
>> وفي الواقع، هذا هو واحد من الخطر واحد القوى
استخدام لغة مثل C. لديك حق الوصول بلا قيود
إلى محتويات من ذاكرة البرنامج،
وما الأشرار يمكن حتى تفعل في تلك cases--
خاصة عندما كنا وصول الى برمجة الويب
في نهاية الفصل الدراسي، وسوف نقوم إعادة النظر في هذا topic-- وكزة حولها،
يحتمل، شخص ما الكمبيوتر الذاكرة وتجد مثل هذه الأشياء غريبة
كما رأينا هناك.
أو حتى الأسوأ من ذلك، كلمات المرور التي كان أو انها يمكن بعد ذلك استخدامها لتفعل أشياء سيئة.
>> بوضوح لا ينبغي لي أن فعلت هذا، بسبب أشياء غريبة تبدأ في الحدوث.
في الواقع، هذا هو تحطمها البرنامج.
وهذا سيكون ما يعادل من نظام التشغيل ماك أو في نظام التشغيل Windows
نافذة البرنامج فقط تختفي.
حدث خطأ غير متوقع.
في بيئة سطر الأوامر نرى شيئا من هذا القبيل.
ولكن هذا هو السبب، وأنا ببساطة لمس الذاكرة التي لا تنتمي لي.
>> لذلك دعونا دفاع ضد هذا قليلا بطريقة مختلفة
من خلال النظر في هذا البرنامج هنا.
هكذا، مرة أخرى، والهيكل العظمي التي رأيناها earlier--
ولقد أبرزت هذه المرة كثافة العمليات.
وكل هذا الوقت الرئيسي له عاد بالفعل قيمة.
على الرغم من أن في معظم محاضرة لدينا أمثلة لدينا قط استخدم مرة واحدة
العودة في أي شيء الرئيسية.
نكتب فقط قريبة printf متعرج وهذا كل شيء.
ولكن مجانا، ما مترجم تم به بالنسبة لك،
على نحو فعال، يعود 0 بالنسبة لك.
يتحول out-- وانها قليلا 0 counterintuitive-- أن أمر جيد.
وهذا لا يعني خاطئة في حد ذاتها.
0 امر جيد، وأي غير 0- قيمة، قررت العالم،
يمكن الدلالة على خطأ.
حتى إذا كنت قد افسدت أي وقت مضى شيء ما على جهاز الكمبيوتر الخاص بك،
أو برنامج قد مات فقط على لك و كنت قد حصلت على بعض نافذة الخاطئ
على الشاشة، قائلا خطأ 49 سلبية أو خطأ 23--
بعض value-- تبدو تعسفية هذا لأن مبرمج والثابت تلوينها
مثل قيمة سلبية أو إيجابية 49 23 لتمثيل أي عدد، أجرؤ على القول،
4 مليارات الأشياء الممكنة يمكن أن تذهب الخطأ في البرنامج.
>> فكيف يمكن أن أنتهز ميزة هذا بنفسي؟
حسنا، اسمحوا لي أن فتح برنامج التي كتبت في وقت مبكر،
ودعا كزة حول الانترنت مرحبا 4.
وانها متطابقة تقريبا، إلا أن حصلت لها قليلا من تدقيق الأخطاء.
في هذه الحالة، لقد أعلنت مرة أخرى الرئيسية عن اتخاذ حجتين،
ولكن هذه المرة، على الخط 17، إشعار أنا أفعل قليلا من التعقل الاختيار.
أنا التأكد من أن argc يساوي يساوي 2.
لأنه إذا كان كذلك، أن يعني يمكنني بأمان
لا تلمس قوس 0 فقط، ولكن قوس 1.
وأنا المضي قدما وطباعة، في هذه الحالة، Zamyla أو روب
أو أي كلمة أنا كتبته بها.
والآن فقط للحصول على أكثر من ذلك بقليل السليم،
انا ذاهب الى العودة صراحة 0 للدلالة كل شيء على ما يرام.
لم يحدث شيء سيء.
>> ولكن من خلال اتفاقية، أنا ذاهب ل العودة 1، أو أي بصراحة-0 غير ذات قيمة،
إذا حدث خطأ ما.
الآن المستخدم لن تلاحظ حقا ما يجري.
في الواقع إذا ذهبت إلى هذا الدليل، نحن تكبير ولا تجعل مرحبا 4،
./hello-4 Zamyla يتصرف كما أتوقع.
ولكن إذا كنت بدلا من ذلك لا اكتب أي شيء، لا شيء يبدو أن يحدث،
ولكن لا تحطم الطائرة.
وإذا كنت تفعل شيئا بدلا مثل روب هو بروكتور
في تقاسم Thayer-- معلومات التعسفية.
لكن الإشعار، ARGV 1، 2، 3، 4، و 5 يجب أن تكون موجودة الآن في الذاكرة.
وهذا أيضا ليس ما يتوقع برنامجي،
لأنني جربت ما اذا argc يساوي يساوي 2 أو لا.
لذلك أنا الآن الدفاع ضد هذا.
>> الآن، بوصفها جانبا، نحن programmer-- أو بالأحرى لنا users--
أبدا نرى أن 0 أو 1 ولكن باستخدام أداة تسمى المصحح، أو غيرها من الأدوات،
كما سنرى قبل طويلة، وكنت مبرمج
يمكن أن نرى في الواقع ما قد يكون تسير بشكل خاطئ داخل البرنامج.
>> لذلك، على أية أسئلة على argc؟
نعم.
>> الجمهور: رأيت حيث لم تكن لديها شخصية، [غير مسموع]
وقال عادل نجم سلسلة د، مثل حرف العلامة النجمية فاصلة.
هم ما يعادل هنا؟
>> DAVID مالان: هم.
لذا فإن السؤال هو، لديك برامج يشاهد أحيانا
مثل هذه التي لا يقول قوس سلسلة ARGV
ولكن بدلا من ذلك تقول شيئا مثل شار قوس نجمة ARGV.
وهناك حتى الآخر المتغيرات التي قد تراها.
هم في الواقع ما يعادلها.
في الوقت الراهن، لدينا هذه نوع من عجلات التدريب
يوم في شكل سلسلة في CS50 مكتبة، ولكن في ما يزيد قليلا على أسبوع
أو نحو ذلك ونحن في طريقنا لإزالة هذا انسداد تماما وفعلا
ننظر إلى ما شار والنجم هي، وكيف أن هذه تتعلق الذاكرة
التمثيل بشكل عام.
ولذا فإننا سوف أعود إلى ذلك.
>> الأسئلة الأخرى على موقعنا على ARGV أو argc؟
نعم.
الجمهور: لماذا هو العودة خطأ (غير مسموع)؟
DAVID مالان: لماذا فعلت هذا بإرجاع خطأ only-- أوه!
في الحالة السابقة، عندما كنا تم futzing حولها مع الذاكرة،
لماذا لم يعود فقط خطأ عندما كنت حقا كتبته عدد كبير؟
الجواب القصير هو، نحن فقط حصلت على الحظ.
بصفة عامة، كمبيوتر يخصص الذاكرة في قطع،
وأنه أعطاني جزءا كبيرا يكفي أن حصلت بعيدا، دون أن يلحظ،
من قوس لمس 2، قوس 3، قوس 50، ولكن بمجرد لقد ضغطت
لي الحظ، ذهبت أبعد من حدود قطعة من الذاكرة
وكان نظام التشغيل الممنوحة لي.
وذلك عندما فرضت أسفل، وقال: لا.
خطأ تجزئة.
نعم.
>> الجمهور: كيف الكمبيوتر تعرف قيمة argc؟
>> DAVID مالان: كيف الكمبيوتر يعرفون قيمة argc؟
عند تشغيل البرنامج، أن البرنامج، حسب طبيعة موجه امض،
وسلمت مجموعة من الكلمات التي تم كتابتها
في موجه، وكان ذلك كتبته في موجه.
ولذا فمن التشغيل نظام أساسي
بملء الحجج الرئيسية للك.
ذلك أن واحدة من الخدمات أن تحصل، من النوع سرا
تحت غطاء محرك السيارة من نظام التشغيل.
أسئلة أخرى؟
نعم.
>> الجمهور: ماذا يعني تفريغ الأساسية؟
DAVID مالان: ماذا يعني تفريغ الأساسية؟
لذلك هذا سؤال جيد.
واسمحوا لي أن أعود إلى هذا الدليل هنا.
وستلاحظ أن لدي ملف جديد هناك.
انه دعا بالفعل الأساسية، وانها في الواقع عادة ملف ائق الحجم.
هذا هو أساسا لقطة من محتويات ذاكرة البرنامج بلدي
أو ذاكرة الوصول العشوائي عندما تحطمت.
وهذا سيكون مفيدا، يحتمل، في التشخيص،
مرة نتحدث في محاضرة المستقبلية والقسم حول تصحيح الأخطاء،
لأنه يمكنك القيام به في الواقع يعادل التشريح الرقمي
على هذا الملف للمساعدة في معرفة ما فعلتموه خطأ في البرنامج.
نعم.
>> الجمهور: هل argc أمر في نفسها، أو يمكنك تسميته أي شيء؟
>> DAVID مالان: سؤال جيد.
argc هو أمر في حد ذاته، أو يمكنك تسميته أي شيء؟
انها بالتأكيد ليست الأوامر.
انها مجرد متغير اسم أو اسم حجة، و
وهكذا نحن تماما يمكن أن نسمي هذا فو،
يمكن أن نطلق على هذا الشريط، والتي تميل ليكون المفتاح إلى الكلمات التي كمبيوتر
عالم يذهب إلى.
ولكن من خلال الاتفاقية، ونحن نستخدم argc وARGV.
ولكن هذا مجرد إنسان الاتفاقية، لا شيء أكثر من ذلك.
كل الحق.
حتى تبين، لقد كنت أقول قليلا من lie-- الأبيض
وبصراحة، في المستقبل، سترى كنا نقول غيرها من الأكاذيب البيضاء.
لكنه الآن، ونحن في طريقنا قشر العودة إلى واحدة من هذه.
في هذه الحالة عندما كنت هنا سابقا يدير برنامج مثل ./hello أو ./hello-3
Zamyla، كان لدينا محتويات بلدي ذاكرة الكمبيوتر أبحث تقريبا مثل
هذا.
ولكن أذكر ما هي السلسلة.
ماذا نقول قبل أسبوع ما سلسلة هو في الواقع تحت غطاء محرك السيارة؟
الجمهور: صفيف من حرف.
DAVID مالان: إنها مجموعة من حرف، أليس كذلك؟
لذلك قد يكون لدينا مجموعة من سلاسل، ولكن، في المقابل، سلسلة
هو مجموعة من الأحرف.
حتى لو كنت حقا تريد أن تكون الشرج عندما رسم هذه الصورة،
وأرجو أن يكون حقا رسم أكثر قليلا من هذا القبيل،
حيث في كل من هذه مؤشرات بلدي ARGV مجموعة،
هناك هو في حد ذاته سلسلة كاملة الذي هو نفسه في صفيف.
والآن كذبة بيضاء نحن نقول اليوم
غير أن الصورة لا تبدو تماما مثل هذا.
في الواقع، هي مربعات صغيرة عادة خارج المستطيلات الكبيرة
هناك.
ولكننا سوف نعود إلى ذلك قبل فترة طويلة.
ولكن هذا هو ./hello مائل 0، أن يجري طابع خاص
ترسم نهاية سلسلة، ونحن قد حصلت على واحد آخر بعد
اسم Zamyla ل.
فماذا يعني هذا؟
>> حسنا، اسمحوا لي المضي قدما و فتح مثالين أخرى
التي تتوفر على الانترنت.
واحد يسمى argv1.c والآخر هو argv2.
إنه برنامج فائقة بسيط هو أن يختلف عن البرامج السابقة
في ذلك الآن أنا باستخدام argc وARGV هنا.
والآن أنا دمج مع لحلقة في خط 18، من ط = 0 على ما يصل إلى argc.
وما أنا ذاهب الى القيام به مع هذا سطر من التعليمات البرمجية هنا؟
باللغة الإنجليزية.
هذا يدل بوضوح استخدام argc.
ولكن باللغة الإنجليزية، ماذا تفعل لو كنت تشغيل هذا البرنامج؟
نعم؟
>> الجمهور: انها سوف الطباعة الشاشة عدة مرات كما تريد.
DAVID مالان: بالضبط.
وبغض النظر عن الكلمات أنا اكتب في موجه، انها
سوف اجتر لهم في وجهي واحد في كل سطر.
لذلك دعونا نمضي قدما ونفعل ذلك.
اسمحوا لي ان اذهب إلى دليل بلدي والقيام جعل ./argv1 argv1.
والآن، دعونا يبقيه بسيط.
دعونا نفعل شيئا في البداية.
فعلت طباعة شيء واحد، و هذا هو في الواقع اسم البرنامج،
لأن هذا هو في قوس 0.
إذا أنا الآن أقول فو، انها تنوي القيام به هذين، وإذا قلت شريط فو،
انها ستقول تلك الأشياء الثلاثة.
الآن هذا مثير للاهتمام إلى حد ما، ربما.
ولكن أذكر أن ARGV هو مجموعة من الجمل،
لكن السلسلة هي مجموعة من الأحرف، حتى نتمكن من اتخاذ الامور الشق
وتطبيق ذلك الأساسية المنطق وجعل التعليمات البرمجية التي
تبدو أكثر قليلا خفي، باعتراف الجميع.
ولكن من خلال وجود متداخلة حلقة، شيء أقرب
لماذا تذكرون من ماريو، على سبيل المثال، إذا كنت فعلت ذلك بهذه الطريقة.
>> لذلك نلاحظ الآن على خط 19، وأنا بالتكرار مرة أخرى على حججي،
من 0 على ما يصل إلى argc.
والآن في خط 21-- أنا الاقتراض خدعة من week-- آخر
أنا فحص ما هو طول قوس ARGV ط.
أنا تخزين هذا الجواب في ن.
ثم أنا من دمج ي على حتى n، حيث تتم تهيئة ي إلى 0.
لذا، اتفاقية لفرز الأصوات.
مرة واحدة كنت قد استخدمت ط، إذا كان لديك حلقة متداخلة، لا يمكنك استخدام ط مرة أخرى،
وإلا فسوف ضرب بقسوة، يحتمل، قيمة خارج الحلقة الداخلية.
لذلك أنا باستخدام ي من الاتفاقية.
نحن قد تستخدم ك.
إذا كان لديك أكثر من ك، وربما كنت لديك الكثير من التعشيش، وعادة.
ولكن الآن، لاحظ بلدي printf خط مختلف قليلا.
أنا لا تطبع٪ ق، أنا طباعة٪ ج، التي، بطبيعة الحال،
هو عنصر نائب لشار.
>> والآن لاحظ هذا النحو.
جديد.
لم نر ذلك من قبل.
لكن منطقيا، وهذا يعني فقط الحصول على سلسلة إيث في ARGV
مستشفى جوبا التعليمي والحصول على ماذا؟
الجمهور: حرف.
DAVID مالان: حرف في هذه السلسلة.
ذلك باستخدام الأقواس المربعة يليها بين قوسين معقوفين،
هذا هو الغوص لأول مرة إلى سلاسل ARGV، و
وثم الثانية بين قوسين معقوفين مع ي
هو الغوص في شخوص هذه السلسلة خاصة في ARGV.
ومن ثم، فقط لحسن التدبير، أنا الطباعة خط جديد هنا.
وحتى الآن اسمحوا لي المضي قدما وفتح نافذة أكبر قليلا
لذا فإننا يمكن أن نرى في هذا العمل.
اسمحوا لي أن أخوض في هذا المجلد.
وبه الآن جعل ARGV-2-- whoops-- جعل ARGV-2، ./argv 2.
دخول.
وانه من الصعب قليلا لقراءة عموديا،
ولكن هذا في الواقع اسم برنامج، تليها سطر فارغ.
الآن اسمحوا لي أن نمضي قدما ونفعل فو.
وبالمثل من الصعب قراءة، ولكن هذا في الواقع طباعة حرف واحد في كل سطر.
وإذا كنت تفعل شريط، انها الآن طباعة هذه سطرا سطرا.
لذلك الوجبات الجاهزة هنا ليست الكثير من أن، نجاح باهر، والنظر في هذه الخدعة الجديدة أنيق
حيث يمكنك الحصول على المحتويات من أحرف محددة مجموعة و
بل كيف نحن نأخذ هذه الأساسية أفكار مثل الفهرسة في صفيف،
ثم فهرسة إلى مجموعة التي كانت في ذلك الصفيف،
ومجرد تطبيق نفس الأفكار ل أمثلة قليلا أكثر تعقيدا.
ولكن الأساسيات لا يكون حقا تغير، حتى منذ الأسبوع الماضي.
>> الآن هذا هو نوع من في الوقت المناسب، في ذلك، أذكر، في الأسبوع الصفر
لعبنا مع دفتر الهاتف من هذا القبيل.
وعلى الرغم من أن من الواضح أن هذا قطع المادية من الورق،
يمكنك النوع من التفكير دليل الهاتف كما صفيف.
بالتأكيد، لو كنت لreimplement هذا قطع هذه القطع من الورق
في الكمبيوتر، وربما كنت تستخدم شيئا
مثل مجموعة لتخزين كل تلك أسماء وأرقام من كل وسيلة
من خلال Z. لذا هذا هو لطيف، ل لأنها تتيح لنا فرصة،
ربما، للنظر في كيفية كنت قد في الواقع تنفيذ شيء من هذا القبيل.
كما هو الحال مع سلسلة من الأبواب هنا.
حتى لو كنت could-- نحن في حاجة واحدة التطوع لتأتي على ما يصل.
دعونا نرى.
وجها غير مألوف ربما، وجه غير مألوف ربما.
ماذا عن باللون البرتقالي؟
هنا.
القميص البرتقالي، وتأتي على ما يصل.
>> دعونا نمضي قدما الآن والخطوة هذه الأبواب إلى الجانب،
نقل هذه للخروج من الطريق لحظة.
ما اسمك؟
>> AJAY:
>> DAVID مالان: أجاي.
ديفيد.
لطيف لمقابلتك.
كل الحق.
لذلك لدينا ستة وراء هذه الأبواب رقميا على screen--
أو، بالأحرى، سبعة أبواب على screen-- في مجمله مجموعة من الأرقام.
ولقد قلت لكم شيئا في advance-- المتفق عليها؟
AJAY: لا شيء مقدما.
DAVID مالان: كل ما أريده منك أن تفعل الآن هو العثور بالنسبة لي، وبالنسبة لنا،
حقا، عدد 50، خطوة واحدة في وقت واحد.
>> AJAY: عدد 50؟
>> DAVID مالان: عدد 50.
ويمكنك الكشف عن ما هو وراء كل من هذه الأبواب
بمجرد لمسها بأصابعك.
اللعنة. [ضحك]
>> [تصفيق]
>> أحسنت جدا.
موافق.
لدينا هدية جميلة الجائزة بالنسبة لك هنا.
تختار من الأفلام نحن ناقش الأسبوع الماضي.
>> AJAY: يا رجل.
أوه، أنا لم أر قط Spaceballs.
>> DAVID مالان: Spaceballs.
كل الحق.
لذلك عقد في لحظة واحدة فقط.
How-- دعونا جعل هذا من اللحظات، قابل للتعليم
كيف يمكنك أن تذهب نحو العثور على عدد 50؟
AJAY: اخترت عشوائيا.
DAVID مالان: إذا اخترت حصلت عشوائيا ومحظوظ.
AJAY: نعم.
DAVID مالان: OK.
ممتازة.
وحتى الآن، كان لديك لا حصلت محظوظ، ماذا
يمكن أن يحدث خلف هذه الأبواب؟
حتى لو كنت المضي قدما و تكشف هذه الأرقام هنا،
هم في الواقع في ترتيب عشوائي.
والأفضل أن يكون لديك القيام به، بصراحة، هو من خلال، في نهاية المطاف،
في أسوأ الحالات، والتحقق من كل منهم.
لذلك كنت حصلت فائقة محظوظا، التي ليس ما كنا ندعو خوارزمية.
نعم، كونغراتس.
ولكن الآن let's-- الفكاهة لي، إذا كنت تستطيع.
دعونا نذهب إلى هذا التبويب هنا.
وهنا الأرقام بوضوح في ما يبدو أن ترتيب عشوائي،
وكانوا.
ولكن الآن لو كنت بدلا من ذلك المطالبة أن وراء هذه الأبواب
هي الأرقام التي يتم فرزها.
الهدف الآن هو أيضا تجدنا عدد 50.
ولكنها تفعل ذلك حسابيا، و تخبرنا كيف وأنت تسير في ذلك.
وإذا وجدت أنه، عليك أن تبقي الفيلم.
كنت لا تجد ذلك، كنت يعيدها.
AJAY: لذلك أنا ذاهب للتحقق من الغايات أولا، لتحديد ما إذا there's--
[ضحك وتصفيق]
DAVID مالان: هنا تذهب.
دعونا نلقي نظرة على واحدة من أسلافه أجاي،
شون، الذي لم يكن محظوظا تماما كما.
موافق، لذلك مهمتك هنا، شون، هو ما يلي.
لقد الخفي وراء هذه عدد الأبواب السبعة،
لكن مدسوس بعيدا في بعض هذه الأبواب وكذلك أيضا أرقام غير السلبية الأخرى.
وهدفك هو التفكير في هذا الصف العلوي من الأرقام بوصفه مجرد مجموعة.
نحن مجرد تسلسل من القطع من الورق مع أرقام وراءها.
وهدفك هو، فقط باستخدام أعلى مجموعة هنا، تجد لي الرقم سبعة.
ونحن بعد ذلك يذهب إلى نقد كيف تذهب عن القيام بذلك.
تجدنا الرقم سبعة، من فضلك.
رقم
5، 19، 13.
انها ليست مسألة خدعة.
1.
عند هذه النقطة درجاتك ليست غاية جيدة، لذلك يمكن أن تبقي كذلك الذهاب.
3.
تستمر.
بصراحة، لا يسعني إلا أن أتساءل ما كنت حتى التفكير.
>> شون: أنا يمكن أن تتخذ فقط من الصف العلوي.
DAVID مالان: فقط في الصف العلوي.
لذلك كنت قد حصلت على ثلاث اليسار.
لذلك تجد لي 7.
>> [الجمهور يصرخ اقتراحات]
لذلك كل تلك كانت مدهشة لأسباب مختلفة جدا.
لذلك هذا هو المكان الذي توقفت قبل لحظة،
والفكرة الرئيسية هنا وقد كان لهذه الأبواب أرقام
خلفهم التي تم فرزها، ومثالية الوجبات الجاهزة التي هي أنك يمكن أن تفعل
أفضل جوهريا في هذا example-- الثانية
وبالفعل، كان شون أن المحاولة الأولى مع أرقام عشوائية
فقط before-- ولكن في أقرب وقت كما يتم فرز هذه الأرقام،
مثل الكثير من دفتر الهاتف، ما يمكنك القيام به واضح؟
أو كيف يمكنك الاستفادة من هذه المعرفة؟
نعم.
>> الجمهور: تذهب في منتصف الطريق (غير مسموع).
DAVID مالان: نعم.
بالضبط.
لذا كانت غريزة أولية أجاي للتحقق من الغايات، على ما أذكر،
وبعد ذلك نوع من الانتهاء على سبيل المثال بسرعة.
ولكن إذا بدأنا القيام بذلك أكثر منهجي على طول تلك الخطوط،
ولكن بدءا ربما في الوسط لأنهم فرزها،
بأسرع ما تكشف رقم 16، وبالتالي فإننا know--
ودعونا نفعل نحن بالضبط that-- ولنعلم أن 50 في حالة اليوم،
ويجب أن يكون إلى اليمين.
تماما مثل ذلك في الأسبوع الصفر عندما نحن مزق دفتر الهاتف إلى النصف
ورمى نصف المشكلة بعيدا، نفس الفكرة هنا.
نحن يمكن أن يلقي هذا الشوط المشكلة بعيدا.
وربما ما كنت قد تفعل حسابيا،
بمجرد أن تعرف أن 50 يجب أن يكون إلى اليمين، لو كان في أي مكان،
هو محاولة هناك، في منتصف الأبواب المتبقية.
بالطبع، هو أعلى 50 من 42، حتى نتمكن من
رمي هذا المتبقية ربع المشكلة بعيدا،
وأخيرا، وتحديد شيء من هذا القبيل 50.
ولكن فقط كما هو الحال مع دفتر الهاتف، وهذه الأرقام
وقدمت لنا بالفعل في ترتيب فرزها، مما يترك لنا
مع السؤال، كيف الحصول على الأشياء في ترتيب فرزها؟
وبصراحة، بأي ثمن؟
انه شيء واحد أن يكون سلمت دليل الهاتف
ثم اعجاب أصدقائك من خلال إيجاد رقم هاتف بسرعة حقا، أليس كذلك؟
تمزيق صفحات من 32 إلى إيجاد شخص من 4 مليارات الصفحات،
قلنا كان مثالا صارخا واحد.
ولكن كم من الوقت لم يستغرق فيريزون لفرز هذا الكتاب الهاتف؟
كم من الوقت لم تأخذنا لفرز هذه الأرقام السبعة؟
هذا هو السؤال الذي قمنا وبالتالي تجاهلها تماما حتى الآن.
>> لذلك دعونا الإجابة على هذا السؤال الآن.
ونحن جميعا من الأفلام الآن، ولكن لدينا بعض الكرات الإجهاد.
إذا، تقول، ثمانية متطوعين لن تمانع في الانضمام إلينا هنا؟
دعونا نمضي قدما ونفعل، وكيف حول أربعة منكم، ثلاثة أنت هنا؟
الحصول على بعض الوجوه الجديدة.
وأربعة من أنت هناك؟
وnow-- دعونا لا تحيز here-- و رقم ثمانية هنا في نهاية المطاف.
تأتي على ما يصل.
كل الحق.
فما لدينا هنا ل كل واحد منكم هو رقم.
إذا كنت ترغب في الذهاب قبل، واتخاذ هذا الرقم.
ما اسمك؟
>> أرتي: أرتي.
>> DAVID مالان: أرتي، حسنا.
كنت رقم 1.
>> أمين: أمين.
DAVID مالان: أمين.
ديفيد.
كنت رقم 2.
والمضي قدما، وأسلم لك ورقة من الورق،
خط أنفسكم أمام الموسيقى تقف في نفس الترتيب كما هناك.
>> ANDY: مرحبا، أندي.
>> DAVID مالان: أندي، أنه من الجيد أن أراك.
عدد 3.
>> يعقوب يعقوب.
>> DAVID مالان: يعقوب، عدد 4.
مرحبا بكم على متن.
المنحة: غرانت.
DAVID مالان: غرانت.
عدد 5.
>> ALANNA: Alanna.
>> DAVID مالان: Alanna، عدد 6.
>> FRANCES: فرانسيس.
DAVID مالان: فرانسيس، رقم 7.
و؟
>> راشيل: راشيل.
>> DAVID مالان: راشيل، عدد 8.
كل الحق.
المضي قدما والحصول على نفسك في هذا النظام.
اسمحوا لي أن وضع واحد المتبقية الموسيقى يقف في المكان.
أين كنت في حاجة الى موقف؟
موافق.
المضي قدما وضعت للتو الأرقام الخاصة بك حيث يمكن للجمهور رؤيتها على،
الموسيقى يقف تواجه الخارج.
ونأمل، ونحن أولا الاختيار التعقل here-- 4، 2، 6.
أوه أوه.
انتظر لحظة.
ليس لدينا 8.
أحتاج لطرد لكم من على سبيل المثال بطريقة أو بأخرى.
رقم
لا، هذا موافق.
دعونا نرى.
يمكننا أن نفعل هذا.
الوقوف إلى جانب.
هناك نذهب.
صحيح.
كل الحق.
لذلك، والآن لدينا 8، 1، 3 7، 5.
موافق.
ممتازة.
>> ولذلك فإن السؤال المطروح هو، في ما تكلفة، وعبر عن الطريقة،
يمكننا في الواقع فرز هذه الأرقام هنا حتى نتمكن من نوع من العمل الى الوراء،
في نهاية المطاف، وdecide-- هو عليه حقا مثير للإعجاب، هل هو حقا فعالة،
أستطيع أن تقسيم و قهر دليل الهاتف؟
هل حقا أن كفاءة أستطيع أن فرق تسد
تلك القطع الرقمية من الورق على متن الطائرة،
إذا ربما انها سوف يكلفنا ثروة في الوقت أو الطاقة أو دورات وحدة المعالجة المركزية
في الواقع الحصول على البيانات لدينا في بعض ترتيب فرزها؟
لذلك دعونا نسأل هذا السؤال.
>> من الأول الكبير، وهذه الأرقام هي في ترتيب عشوائي حد كبير،
وانا ذاهب الى اقتراح خوارزمية واحدة، أو عملية
يمكننا من خلالها فرز هؤلاء الناس.
انا ذاهب الى الاقتراب هذا بسذاجة جدا.
وانا ذاهب الى الاعتراف انه نوع من الكثير بالنسبة لي
التفاف ذهني حول مجموعة البيانات بأكملها في وقت واحد.
ولكن هل تعرف لماذا؟
انا ذاهب الى جعل بعض إصلاحات هامشية بسيطة جدا.
4 و 2 من النظام، وإذا كان الهدف هو ان تذهب من 1 على ما يصل إلى 8.
حتى تعرف ماذا؟
أنا ذاهب ليكون لك الرجال مبادلة، إذا قمت بالتبديل
جسديا المواقف و القطع من الورق.
الآن 4 و 6، وهذه هي في النظام.
انا ذاهب الى ترك تلك يكون.
6 و 8، وتلك هي في النظام.
سوف تترك لهم يكون.
8 AND1، خارج الترتيب.
إذا كنت لا تمانع مبادلة اثنين.
الآن 8 و 3، إذا يا رفاق يمكن مبادلة.
8 و 7، إذا يا رفاق يمكن مبادلة.
و 8 و 5، إذا يا رفاق يمكن مبادلة.
>> الآن، أنا فعلت؟
لا، بالطبع لا.
ولكن لقد جعلت من الوضع أفضل، أليس كذلك؟
ما كان اسمك ثانية، رقم 8؟
>> راشيل: راشيل.
DAVID مالان: لذا راشيل ديه فقاعات فعال يصل إلى حد الآن،
على طول الطريق إلى نهاية بلدي مجموعة من الأرقام هنا.
وذلك هو نوع من حل هذه المشكلة.
الآن، بشكل واضح، 2 لا تزال بحاجة إلى تحرك قليلا، و 4 و 6 و 1.
ولكن يبدو لي أن قد حصلت على قليلا أقرب إلى الحل.
لذلك دعونا تطبيق هذا نفسه ارشادي السذاجة مرة أخرى.
2 و 4، موافق.
4 و 6، موافق.
6 و 1 ملم ملم.
دعونا المبادلة.
6 و 3 ملم ملم.
دعونا المبادلة.
6 و 7 على ما يرام.
7 و 5، كلا.
دعونا المبادلة.
والآن 7 و 8.
وما اسمك مرة أخرى؟
FRANCES: فرانسيس.
DAVID مالان: فرانسيس.
حتى الآن فرانسيس في حتى أفضل موقف، لأنه الآن 7 و 8
وانفجر بشكل صحيح تصل إلى أعلى.
حتى 2 و 4، موافق.
4 و 1، دعونا تبادل.
4 و 3، دعونا تبادل.
4 و 6، وكنت موافق.
6 و 5، دعونا تبادل.
والآن هؤلاء الرجال جيدة.
نحن تقريبا هناك.
2 و 1، خارج الترتيب، لذلك مبادلة.
والآن اسمحوا لي أن تفعل شيك التعقل.
2 و 3 و 3 و 4 و 4 و 5 و 5 و 6 و 6 و 7 و 8.
موافق، لذلك نحن القيام به.
>> ولكن بأي ثمن فعلته أنا فرز هذه الأرقام هنا؟
حسنا، كم من الخطوات فعلت أنا محتملة تأخذ عندما يكون الترتيب هؤلاء الناس؟
حسنا، سوف نعود إلى هذا السؤال.
ولكن، بصراحة، إذا كنت حصلت على قليلا بالملل، وهذا
نوع من كاشفا في أن هذا لم يكن ربما خوارزمية الأكثر فعالية.
وبالفعل، بصراحة، أنا التعرق ومما يزيد من المشي ذهابا وإيابا.
لكن ذلك لم يشعر فعالة بشكل خاص.
لذلك دعونا نجرب شيئا آخر.
إذا يا رفاق يمكن إعادة ضبط أنفسكم لهذه القيم ثمانية.
وظيفة جيدة.
>> دعونا نلقي نظرة رقميا، لمجرد لحظة قبل أن نحاول شيئا آخر،
في ما حدث للتو.
هنا، كنت على وشك أن نرى تصور هؤلاء البشر ثمانية
حيث الأزرق والأحمر القضبان تمثل الأرقام.
وأطول شريط، وأكبر عدد.
أقصر شريط، أصغر رقم.
وماذا كنت تريد الذهاب لترى في ترتيب عشوائي أكثر من ثمانية منهم.
وأنت تسير لرؤية هذه القضبان الحصول على مرتبة حسب أن الخوارزمية نفسها،
أو مجموعة من الإرشادات التي وسوف ندعو من الآن فصاعدا فقاعة النوع.
لذلك نلاحظ، في كل ثانية أو نحو ذلك، بارين وتضيء باللون الأحمر،
ويجري مقارنة بواسطة الكمبيوتر.
ثم إذا كان شريط كبير و شريط قليلا خارج الترتيب،
ويجري تبادلت أنها بالنسبة لي.
>> الآن هذا هو مملة بشكل لا يصدق لمشاهدة هذا، بالتأكيد،
لفترة طويلة جدا، ولكن تلاحظ takeaway-- الحانات كبيرة تتحرك إلى اليمين،
قضبان تتحرك قليلا إلى اليسار.
دعونا إجهاض هذه العملية وتسريع هذا الأمر
لتكون أسرع بكثير، حتى نتمكن من الحصول على شعور رفيع المستوى ما،
في الواقع، فقاعة النوع يقوم به.
في الواقع، انها محتدما حتى الجانب الأيمن من القائمة،
أو مجموعة، قضبان أكبر.
وعلى العكس، والحانات الصغيرة هي محتدما طريقهم إلى أسفل إلى اليسار،
وإن كان ذلك بوتيرة أسرع مما فعلنا سابقا.
لذلك، من الصعب أن نرى مع البشر، لكن بصريا وهذا بالفعل ما
كان يحدث.
>> ولكن دعونا نحاول الأساس نهجا مختلفا الآن.
دعونا نحاول مختلفة خوارزمية حيث لدينا لكم
يبدأ الرجال في هذه الأصلي المواقف، التي كان هذا النظام هنا.
ودعونا نمضي قدما الآن.
وانا ذاهب الى القيام بشيء حتى أبسط، أليس كذلك؟
في وقت لاحق، مبادلة زوجيا مرة أخرى ومرة أخرى، ذكي قليلا تقريبا.
دعونا نفعل الامور اكثر بسذاجة، حيث إذا كنت تريد فرز هؤلاء الناس،
اسمحوا لي فقط مواصلة البحث لأصغر عنصر.
حتى الآن، 4 هو أقل عدد رأيت.
انا ذاهب الى تذكر ذلك.
لا، 2 أفضل، وتذكر ذلك.
1 هو أصغر.
3، 7، 5.
موافق.
احدا-- ما اسمك مرة أخرى؟
>> أرتي: أرتي.
>> DAVID مالان: أرتي.
لذلك، أرتي، والمضي قدما.
انا ذاهب الى سحب لكم من على خط المرمى.
إذا كنت يمكن أن تأتي إلى هنا.
ولست بحاجة لجعل غرفة له.
لدينا نقطة اتخاذ القرار هنا.
كيف يمكن أن نجعل مجالا للأرتي هنا في البداية حيث عدد 1 ينتمي؟
>> الجمهور: التحول.
>> DAVID مالان: حسنا، نحن يمكن أن تحول الجميع.
لكن اقتراح الأمثل.
أن يشعر مزعج قليلا بالنسبة لي أن أسأل أربعة أشخاص
للتحرك على طول الطريق.
ماذا يمكن أن أفعل؟
>> الجمهور: تبديل لها.
>> DAVID مالان: تبديل لها.
وما اسمك مرة أخرى؟
>> يعقوب يعقوب.
DAVID مالان: يعقوب التحرك.
أكثر كفاءة بكثير لمجرد الحصول على مواقع تبادل يعقوب مع أرتي،
بدلا من إجبار كل أربعة من هؤلاء الناس،
شكرا جزيلا لك، ل الموضع الصحيح لها.
ما هو لطيف حول أرتي الآن، انه في موقعه الصحيح.
دعونا نفعل ذلك مرة أخرى.
2، وهذا أقل عدد رأيت.
3، 7، 5.
موافق.
2 هو بالتأكيد أصغر.
لم يكن لديك للقيام بأي عمل.
دعونا نفعل ذلك مرة أخرى.
6.
أصغر؟
8.
كلا.
4؟
أوه.
اسمحوا لي أن نتذكر 4.
3.
اسمحوا لي أن نتذكر 3.
7، 5.
أقل عدد عندي نشاهد في هذا الممر هو 3.
إذا كنت تأتي على الخروج.
إلى أين نحن ذاهبون لوضع لك؟
وما اسمك؟
>> ALANNA: Alanna.
>> DAVID مالان: Alanna، نحن ستكون لدينا لطرد لك.
ولكن هذا هو أكثر كفاءة، لمجرد مبادلة شخصين،
من أن يكون عدة أشخاص تجاهل الواقع أكثر.
الآن دعونا نفعل ذلك مرة أخرى.
انا ذاهب لاختيار 4، حتى يأتي على الخروج.
والذي يحدث لتتحرك؟
رقم 8، بطبيعة الحال.
إذا أنا الآن العثور على رقم 5، وتأتي على الخروج.
رقم 8 هو الذهاب الى الحصول على طرد مرة أخرى.
أنا الآن سوف تجد رقم 6 في المكان.
7 في المكان.
8 في المكان.
>> ما نحن فقط لم الآن ما يسمى اختيار نوع،
وإذا كان لنا تصور هذا، انها سوف تشعر مختلفة قليلا.
دعونا نمضي قدما وهذا من القائمة هنا، وهذا visualization--
دعونا تغيير هذا علي: هيا، فايرفوكس.
دعونا تغيير هذا إلى اختيار نوع.
ودعونا تسريع العملية كما كان من قبل، وبدء التصور الآن.
وهذه الخوارزمية لها شعور مختلف عليه.
على كل التكرار، بصراحة، انها أكثر وضوحا.
أنا فقط اختيار أصغر عنصر.
الآن، بصراحة، حصلت قليلا محظوظا ل الوقت، حيث أنه تم فرزها بسرعة فائقة.
كانت العناصر العشوائية.
انها ليست، كما سنقوم في نهاية المطاف ترى، جوهريا أسرع.
ولكن دعونا نرى الثالثة والأخيرة نقترب هنا على ما يجري.
لذلك دعونا المضي قدما وإعادة يا رفاق مرة واحدة نهائية ليكون في هذا النظام هنا.
>> والآن، أنا ذاهب ل تكون أكثر قليلا ذكي،
فقط لجولة خارج خوارزميات لدينا.
انا ذاهب للقيام بذلك.
انا ذاهب الى لا تذهب ذهابا وإيابا من ذلك بكثير.
بصراحة، أنا تعبت من كل هذا تعبر.
أنا فقط ذاهب الى اتخاذ ما أنا أعطيت في بداية القائمة،
وانا ذاهب لفرز أن ثم وهناك.
لذلك نحن هنا.
عدد 4.
انا ذاهب الى ادخال عدد 4 في قائمة تم فرزها.
القيام به.
أزعم الآن، وفقط لجعل هذا أكثر واضحة، يتم فرز هذا الجزء من قائمتي.
انها نوع من المطالبة غبية، ولكن في الواقع يتم فرز 4 في قائمة حجم واحد.
الآن، انا ذاهب لتأخذ على رقم 2.
عدد 2 انا ذاهب الآن ل إدراج في المكان المناسب.
فأين 2 لا تنتمي؟
من الواضح، أكثر من هنا.
لذلك يذهب إلى الأمام ونقل مرة أخرى، إذا كنت تستطيع.
ولماذا لا تأخذ يا رفاق فقط الموسيقى يقف معك هذه المرة.
ودعونا لك إدراج قسرا في بداية القائمة.
المزيد من العمل حتى قليلا.
اضطررت للانتقال يعقوب حولها، وما اسمك؟
>> أمين: أمين.
>> DAVID مالان: أمين.
ولكن على الأقل أنا لم أذهب ذهابا وإيابا.
أنا مجرد أخذ الأشياء كما ذهبت.
أنا مجرد إدراجها في المكان المناسب.
6، وهذا هو في الواقع من السهل جدا.
دعونا إدراج كنت هناك، إذا كنت أردت فقط أن نقل أكثر قليلا.
رقم 8، أيضا من السهل جدا.
الحق هناك.
اللعنة.
رقم 1 لا نستطيع فقط مبادلة مع أمين هنا،
لأن ذلك يحدث لخبط النظام.
لذلك علينا أن نكون أكثر قليلا ذكي.
لذلك، أرتي، إذا كنت تستطيع نسخ احتياطي لحظة.
دعونا نمضي قدما والتحول الآن، على عكس الخوارزميات السابقة لدينا،
لإفساح المجال لأرتي هنا في البداية.
حتى في نهاية اليوم، وأنا نوع من تفعل ما أردت أن تجنب من قبل.
وهكذا خوارزمية بلدي هو نوع من عكسه، فكريا،
عما كان عليه في الأصل.
أنا فقط القيام بتحرك في وجهة نظر مختلفة.
الآن أنا في 3.
أوه، اللعنة.
علينا أن نفعل المزيد من العمل مرة أخرى.
لذلك دعونا دفع لكم.
دعنا ننتقل 8، 6، 4-- يا oh-- و 3 ستذهب هناك حق.
على الأقل حتى هذا الوقت وفورات طفيفة.
7، وليس الكثير من العمل الذي يتعين القيام به.
حتى إذا كنت تريد لموسيقى البوب مرة أخرى، ودعونا إدراج لك.
وأخيرا، 5، إذا كنت تريد لموسيقى البوب ​​إلى الخلف، نحن
تحتاج إلى تحويل أنت، أنت، لك، حتى خمسة في المكان.
>> حتى الآن أن نرى هذا في مستوى عال بيانيا،
دعونا نفعل ذلك خوارزمية التصور وقتا إضافيا واحدا.
كذلك يكون هذا النوع نسميه الإدراج.
سنقوم تشغيله تماما كما بسرعة، وتبدأ من هنا.
وأنه، أيضا، لديه شعور مختلف.
انها نوع من الحصول على أفضل و أفضل، لكنه أبدا الكمال
حتى أذهب في وسلس في تلك الفجوات.
لأنه، مرة أخرى، أنا أخذ فقط ما أنا يولى من اليسار إلى اليمين.
لذلك لم أكن محظوظا جدا كان هذا كل شيء مثاليا.
لهذا السبب كان لدينا هذه القليل mispositions أننا ثابتة على مر الزمن.
>> لذلك كل من هذه الخوارزميات يبدو أن تشغيل بوتيرة مختلفة قليلا.
في الواقع، وهو ما تقوله هو أفضل أو أسرع حتى الآن؟
فقاعة النوع، الأولى؟
اختيار النوع، والثانية؟
نوع الإدراج، والثالثة؟
أسمع بعض أنواع الاختيار.
أفكار أخرى؟
>> لذلك تبين أن كل من هذه الخوارزميات
هي في الأساس مجرد فعالة مثل كل other-- أو، على العكس، تماما كما
غير فعال وبعضها البعض، لأننا يمكن أن تفعل في الأساس
أفضل من كل ثلاثة هذه الخوارزميات.
وهذا هو قليلا من كذبة بيضاء أيضا.
عندما أقول فعالة قدر أو غير فعالة،
هذا هو على الأقل ل القيم فائقة كبيرة من ن.
عندما يكون لدينا فقط ثمانية أشخاص هنا، أو ربما 50 أو نحو ذلك الحانات على الشاشة،
ستلاحظ الاختلافات على الاطلاق بين هذه الخوارزميات الثلاثة.
ولكن كما ن، وعدد من الناس، أو رقم من الأرقام،
أو عدد من الناس في الهاتف الكتاب، أو عدد صفحات الويب
في قاعدة بيانات جوجل يحصل على أكبر وأكبر،
سنرى أن كل ثلاثة من هذه الخوارزميات هي في الواقع سيئة جدا.
ويمكننا أن نفعل جذريا أفضل من ذلك.
>> دعونا نلقي نظرة، أخيرا، في ما يمكن هذه الخوارزميات
يبدو في سياق عدد قليل من الآخرين
وكذلك عن طريق هذا التصور هنا
التي سوف يعرض لنا عدد من الخوارزميات.
دعونا نمضي قدما ونهنئ المشاركون دينا هنا، وجميعهم
فرزها أنفسهم بشكل جيد جدا.
إذا كنت ترغب في أخذ هدية فراق.
يمكنك الاحتفاظ الأرقام الخاصة بك أيضا.
وماذا سترى، أو بالأحرى يسمع، الآن،
غير أن ما وضعنا الأصوات لكل من هذه القضبان
وربطه مع البرنامج، تردد مختلف للصوت،
يمكنك لف عقلك أكثر audioly حول ما كل هذه الأشياء
تبدو.
أولها هو نوع الإدراج
>> [نغمات]
>> هذا هو فقاعة النوع.
>> [نغمات]
>> اختيار نوع.
>> [نغمات]
>> ما يسمى دمج النوع.
>> [نغمات]
>> نوع غنوم.
>> [نغمات]
>> هذا كل شيء لCS50.
سوف نرى لك يوم الاربعاء.
>> المعلق: والآن، "ديب الأفكار، "حسب Daven فارنهام.
لماذا هو لحلقة؟
لماذا لا نجعلها أفضل؟
فما استقاموا لكم فاستقيموا جعل حلقة خمسة.
>> [ضحك]