[موسیقی] ANDI PENG: به هفته 3 از بخش خوش آمدید. با تشکر از شما بچه ها، برای همه آینده این زمان شروع اوایل امروز. ما باید خوب، کمی گروه صمیمی امروز. پس امیدوارم ما به پایان، شاید، در اوایل، کمی اوایل امروز. بنابراین به سرعت، تنها برخی از اطلاعیه برای امروز در دستور کار. قبل از شروع، ما رفتن به فقط رفتن را برخی از مسائل تدارکات را تحت پوشش کوتاه، pset سوال، پرسش کردن، مانند آن. و سپس ما را بیاندیشید. ما یک دیباگر GDB به نام به از آن استفاده شروع رد کد ما، که دیوید روز دیگر در سخنرانی توضیح داد. ما بیش از چهار نوع از انواع است. ما بیش از آنها را به سرعت به از آنجایی که آنها بسیار فشرده است. اما می دانم که تمام اسلاید و کد منبع همیشه آنلاین. بنابراین احساس رایگان، در مطالعه خود، به رفتن به عقب و نگاهی که. ما را از طریق رفتن نماد مجانبی که فقط یک راه فانتزی است گفت: "زمان های اجرا" که در آن ما O بزرگ، که دیوید در سخنرانی توضیح داد. و ما نیز امگا، دارند که زمان اجرا پایین تر است. و ما کمی بیشتر صحبت در عمق در مورد چگونگی آن کار می کنند. و در آخر، ما بیش از جستجوی دودویی بروید، چرا که بسیاری از شما که در حال حاضر نگاه psets خود را احتمالا می دانید که این یک سوال که در pset شما است. بنابراین شما تمام خوشحال خواهید بود که ما امروز را پوشش میدهد. و در آخر، در خود بازخورد بخش، من در واقع حدود 15 دقیقه در سمت چپ پایان دادن به فقط رفتن را تدارکات از pset3، هر گونه سوال، شاید کمی از هدایت، اگر شما خواهد شد، قبل از ما شروع برنامه نویسی. بنابراین سعی کنید برای دریافت از طریق مواد خیلی سریع. و پس از آن ما می توانیم برخی از صرف زمان سوال های بیشتر برای pset. باشه. سرعت، به طوری که تنها چند اطلاعیه ها قبل از ما شروع به امروز. در مرحله اول، به ساخت خوش آمدید آن را از طریق دو نفر از psets خود را. من یک نگاه your-- آره، اجازه دهید در زمان یک دور از کف زدن برای آن یکی. در واقع، من واقعا بود، واقعا تحت تاثیر قرار. من برای اولین بار pset برای شما بچه ها درجه بندی هفته گذشته و شما بچه ها باور نکردنی بود. سبک در نقطه بود علاوه بر چند نظر. اطمینان حاصل کنید که شما همیشه اظهار نظر کد خود را. اما psets خود را در نقطه بود. و آن را نگه دارید تا. و آن را به خوبی برای حرفه ای به دید که شما بچه ها در حال قرار دادن در تلاش به همان اندازه در سبک خود را و طراحی خود را در کد خود را که ما دوست داریم برای شما برای دیدن. بنابراین من گذر از کنار قدردانی من برای بقیه از TAS. با این حال وجود دارد که چند سوال پرسش کردن من فقط می خواهم به بیش از که هر دو زندگی من را و بسیاری از دیگر استادیار "زندگی کمی آسان تر است. در مرحله اول، من متوجه شده ام این گذشته week-- چگونه بسیاری از شما در حال اجرا در check50 کد خود را قبل از شما را انتخاب؟ باشه. پس هر کس باید انجام check50، از آنجا که ما در واقع secret-- اجرا check50 به عنوان بخشی از صحت ما اسکریپت برای تست کد خود را. بنابراین اگر کد خود را شکست خورده check50، در تمام احتمال، آن را احتمالا رفتن به شکست چک ما نیز هست. گاهی اوقات شما بچه ها دارند پاسخ درست است. مانند، در حریص، برخی از شما باید اعداد سمت راست، شما فقط چاپ برخی چیزهای اضافی. و چیزهای اضافی در واقع با شکست مواجه چک، زیرا کامپیوتر نمی کند واقعا می دانیم چه آن را به دنبال. و پس از آن فقط از طریق اجرا شود، دید که خروجی خود را نمی کند مطابقت با آنچه ما انتظار پاسخ می شود، و علامت آن اشتباه است. و من می دانم که در اتفاق افتاد برخی از موارد خود را در این هفته. پس من رفتم و دستی کد همه regraded. در آینده هر چند، مدیر فروش، لطفا مطمئن شوید که شما در حال اجرا بررسی 50 در کد خود را. از آنجا که آن نوع درد برای TA به باید به عقب برگردید و دستی regrade هر pset برای هر تنها، به عنوان مثال کمی از دست رفته. بنابراین من را نمی کردن هر نقطه است. من فکر می کنم من در زمان خاموش شاید یک یا دو برای طراحی. در آینده هر چند، اگر شما در حال شکست check50، نقاط گرفته خواهد شد برای صحت. علاوه بر این، psets هستند علت جمعه در ظهر. من فکر می کنم هفت دقیقه وجود دارد مهلت اواخر که ما به شما. میانگین پستها در طول زمان هاروارد، آنها به اجازه هفت دقیقه دیر به همه چیز. بنابراین در اینجا در دانشگاه ییل، ما پایبندی به آن نیز هست. اما بسیار زیاد است، ساعت 12:07، اگر pset خود را در نیست، آن را به عنوان اواخر مشخص شده اند. و به این ترتیب در حالی که آن مشخص شده است به عنوان اواخر سال، TA-- من هنوز باید درجه بندی psets خود را. بنابراین شما هنوز هم یک درجه به نظر می رسد. با این حال، می دانیم که در پایان ترم، همه psets اواخر فقط می شود به صورت خودکار توسط کامپیوتر صفر. ما این کار را به دو دلیل. یکی، گاهی اوقات ما معاف است، مانند بهانه دین، بعد که من در مورد هنوز نمی دانند. بنابراین ما دوست داریم به مطمئن شوید که ما در حال درجه بندی همه چیز فقط در مورد، مانند، من از دست رفته بهانه ای جستجوی یک مدیر است. و در مرحله دوم، نگه داشتن در ذهن، شما هنوز هم می تواند رها کردن یک pset که دارای نقاط دامنه کامل. بنابراین، ما به کلاس دوست همه psets خود را فقط مطمئن شوید که دامنه خود را وجود دارد و شما در حال تلاش آنها. بنابراین حتی اگر آن اواخر، به شما هنوز اعتبار برای نقاط دامنه، من فکر می کنم. بنابراین اخلاقی داستان است، مطمئن مطمئن psets خود را در در زمان. و اگر آنها در زمان نیست، مطمئن شوید که آن را بزرگ نمی کند. آره، قبل از من در حرکت می کند، آیا کسی هرگونه سوال در مورد بازخورد pset؟ آره. مخاطبان: آیا ما می گویند می توانید یکی از psets رها؟ ANDI PENG: آره. بنابراین نه psets کلی وجود دارد در طول دوره از ترم. و اگر شما دامنه points-- بنابراین دامنه است که فقط، بسیار زیاد است، شما تلاش مشکل، شما را در زمان قرار دادن، شما نشان می دهد که شما ام نشان تنظیمات شما را خوانده ام. که دامنه بسیار است. و اگر شما در حال انجام امتیاز دامنه، ما می تواند کمترین رها یکی از دامنه کامل. به طوری که در نفع خود به تکمیل کنید و سعی کنید هر pset. حتی اگر هیچ کدام از upload-- آنها کار می کنند، آپلود همه آنها را. و پس از آن ما امیدواریم قادر به شما برخی از آن نقاط را به عقب. خنک. هر گونه سوال دیگر؟ عالی. در مرحله دوم، دفتر hours-- چند یادداشت سریع در مورد ساعات اداری. بنابراین برای اولین بار، در اوایل هفته می آیند. هیچ کس تا به حال در ساعات اداری در روزهای دوشنبه. Christabel به آمد ساعات اداری شب گذشته. آره، Christabel. و چه ما در دفتر ساعت شب گذشته، Christabel؟ مخاطبان: ما بستنی بود. ANDI PENG: به طوری که درست است، ما به حال بستنی در ساعات اداری شب گذشته. در حالی که من می تواند به شما قول می دهم که نمی ما بستنی در ساعات اداری باید هر هفته، چه می توانم به شما قول این است که وجود خواهد داشت به طور قابل توجهی دانش آموز بهتر نسبت به TA. مانند حلال، آن را مانند 3-1 است. در حالی که، آن را با پنجشنبه، شما را در مورد 150 اس ام اس واقعا بچه ها و بستنی تاکید کرد. و آن را فقط مولد برای هر کسی نیست. بنابراین اخلاقی داستان است، آمده است اوایل به ساعات اداری و چیزهای خوب اتفاق خواهد افتاد. همچنین، آماده به سوال بپرسید. میدونی؟ صرف نظر از آنچه TAS، من فکر می کنم، شده اند گفت، ما اخذ شده است که یک زن و شوهر دانشجویان که در روز پنج شنبه در آمده، مثل، 10:50 پس از خواندن تنظیمات نیست که مثل من کمک کند، به من کمک کند. متاسفانه در آن نقطه، وجود دارد بسیار ما می توانیم انجام به شما کمک کند. پس لطفا در اوایل هفته آمده است. بیا زود به ساعات اداری. بیا آماده به سوال بپرسید. مطمئن شوید که شما، به عنوان یک دانش آموز، که در آن شما نیاز به به طوری که استادیار می تواند به شما همراه راهنمای، این چیزی است که از ساعات اداری باید برای اختصاص داده شده. در مرحله دوم، بنابراین من می دانم اساتید دوست دارید به ما را شگفت زده با آزمون. من تا به حال یک استاد آن مانند، یو، توسط راه، به یاد داشته باشید که میان دوره ای شما دوشنبه آینده. آره، من که میان دوره ای را نمی دانند. بنابراین من قصد دارم که به TA که به شما یادآوری که مسابقه 0-- دلیل، شما می دانید، ما CS است. حالا که ما این آرایه انجام می شود، شما می توانید از به همین دلیل آن مسابقه 0، مسابقه 1، سوگند ملایمی؟ باشه. اوه، من مقداری آهسته میخندد در آن یکی است. باشه. بنابراین امتحان 0 خواهد بود اگر اکتبر 14 شما در بخش دوشنبه چهارشنبه هستید و اکتبر 15 اگر شما در آن هستید بخش سه شنبه پنج شنبه. این درخواست نمیدهد کسانی که از شما در دانشگاه هاروارد who-- من فکر می کنم همه شما باشد در نظر گرفتن آزمونها خود را در 14. پس بله، هفته آینده، اگر دیوید، در سخنرانی، می رود، بله، تا که مسابقه هفته آینده، شما همه خواهد شد به دلیل شوکه شما به بخش آمد و شما می دانید که خود را مسابقه 0 در دو هفته است. و ما برای بررسی جلسات و همه چیز. بنابراین هیچ نگرانی در مورد برای که می ترسم. هر گونه سوال هر گونه سوال before-- در همه مسائل در مورد تدارکات را تحت پوشش، درجه بندی، ساعت اداری، بخش؟ آره. رسید پس از مسابقه است رفتن در طول سخنرانی می شود؟ ANDI PENG: آره. بنابراین مسابقه، من فکر می کنم، 60 است دقیقه اختصاص داده شده که در بازه زمانی که شما فقط می خواهید را در سالن سخنرانی. بنابراین شما لازم نیست که به در آمده در، مانند، تصادفی 07:00. همه چیز خوبه. آره. خنک. خیلی خوب. بنابراین ما قصد داریم به معرفی یک مفهوم به شما این هفته که دیوید در حال حاضر نوع از در در سخنرانی لمس این هفته گذشته است. آن را به نام GDB. و چگونه بسیاری از شما، در حالی که در این دوره از نوشتن psets خود را، متوجه یک دکمه بزرگ است که می گوید "اشکال زدایی" در بالای IDE خود را؟ باشه. بنابراین در حال حاضر ما در واقع می خواهید به زیرخاک در اوردن رمز و راز از آنچه که در واقع دکمه می کند. و من به شما تضمین، آن است که زیبا، چیزی زیبا. بنابراین تا به حال، من فکر می کنم دو چیز وجود دارد دانش آموزان به طور معمول شده است انجام هنگام اشکال زدایی psets. یکی از آنها هم در اضافه تابع () printf () - به طوری که هر چند خط، آنها در یک تابع () printf () اضافه کنید - آه، چه این متغیر است؟ اوه، چه این متغیر است now-- و شما به نوعی از پیشرفت را ببینید کد خود را به عنوان آن را اجرا می کند. و یا از روش دوم بچه ها انجام دهید این است که آنها فقط ارسال همه چیز و پس از آن شبیه به این در پایان. امیدوارم آن کار می کند. من به شما تضمین، GDB بهتر است از هر دو این روش. آره. بنابراین این خواهد بود بهترین دوست جدید خود را. از آنجا که آن یک چیز زیبا که از لحاظ بصری نمایش هر دو چه کد خود را در حال انجام است در یک نقطه خاص و همچنین چه تمام خود را متغیرهای حمل، مانند آنچه ارزش خود هستند، در آن نقطه خاص. و در این راه، شما واقعا می توانید تعیین نقاط شکست در کد خود را. شما می توانید از طریق خط به خط اجرا کنید. و GDB فقط برای مجبور شما، نمایش داده را برای شما، آنچه که همه متغیرهای خود را هستند، چه آنها انجام می دهند، چه خبر است در در کد. و در چنین راهی، آن را خیلی آسان تر برای دیدن آنچه اتفاق می افتد به جای تابع () printf نشستند نوشتن بیانیه های خود را. بنابراین ما یک مثال از این بعد انجام دهد. بنابراین این به نظر می رسد کمی انتزاعی. بدون نگرانی، ما نمونه هایی را انجام دهد. و بنابراین اساسا، سه بزرگترین، بیشترین استفاده از توابع شما در GDB نیاز هستند در مرحله بعد، مرحله بیش از، و قدم به دکمه. من قصد دارم به سر وجود دارد، در واقع، در حال حاضر. بنابراین می تواند به شما بچه ها همه دید که و یا باید در یک بیت زوم کنم؟ در پشت، می تواند شما را دید که؟ باید بزرگنمایی؟ فقط یک کمی؟ باشه خوبه. ما میرویم آنجا. باشه. بنابراین من، در اینجا، من پیاده سازی برای حریص. و در حالی که بسیاری از شما بچه ها نوشت حریص در حالی که حلقه form-- که یک راه کاملا قابل قبول است انجام دهید این است it-- راه دیگری برای انجام این کار را به سادگی به است تقسیم در باقی مانده است. از آنجا که پس شما می توانید خود را ارزش و پس از آن باقی مانده خود را. و سپس شما فقط می توانید با هم اضافه کنید آن همه است. آیا منطق آنچه من انجام در اینجا حس برای همه، قبل از شروع کنیم؟ نوع؟ خنک. عالی. این قطعه زیبا سکسی است از کد، من می گویند. دوست من گفت، دیوید، در سخنرانی، پس از مدتی، از همه شما شروع به دیدن کد به عنوان چیزی که زیبا. و گاهی اوقات هنگامی که می بینید زیبا کد، آن را مانند یک احساس فوق العاده است. بنابراین با این حال، در حالی که این کد بسیار زیبا، آن را درست کار نمی کند. بنابراین اجازه دهید check50 اجرا در این. 50 20-- OOP را بررسی کنید. 2؟ این است که pset2؟ آره. اوه، pset1. باشه. بنابراین ما check50 را اجرا کنید. و به عنوان شما بچه ها می توانید در اینجا ببینید، آن را شکست یک زن و شوهر از موارد. و برای بعضی از شما، در البته انجام مجموعه مشکل شما، دوست دارید، آه، چرا آن را کار نیست. چرا برای برخی کار ارزش اما نه برای دیگران؟ خب، GDB است که برای کمک به شما که چرا کسانی که ورودی کار نمی شد. باشه. بنابراین اجازه دهید که یکی از چک من شکست را در check50 مقدار ورودی از 0.41 بود. بنابراین پاسخ صحیح که شما باید گرفتن 4 است. اما به جای آنچه من چاپ 3-N، است که نادرست است. بنابراین اجازه دهید فقط این کار را دستی اجرا شود، فقط مطمئن شوید که check50 حال کار است. اجازه دهید ./greedy. اوه، من را به حریص. ما میرویم آنجا. در حال حاضر ./greedy. چقدر بدهکار است؟ اجازه دهید 0.41. و بله، ما در اینجا مشاهده کنید که آن را از خروجی 3 زمانی که پاسخ صحیح، در واقع، باید 4 باشد. بنابراین اجازه دهید وارد کنید GDB و ببینید که چگونه ما می توانید در مورد برطرف کردن این مشکل است. بنابراین اولین گام در همیشه اشکال زدایی کد شما است که به تنظیم نقطه انفصال، و یا یک نقطه که در آن شما خواهید کامپیوتر و یا دیباگر برای شروع به دنبال در. بنابراین اگر شما واقعا نمی مطمئن شوید مشکل شما چیست، معمولا، چیزی که ما می خواهیم معمولی انجام این است که مجموعه نقطه انفصال ما در اصلی. بنابراین اگر شما بچه توانید این را ببینید دکمه قرمز سمت راست وجود دارد، بله، من که تنظیم شد نقطه انفصال برای تابع اصلی است. من کلیک کنید که. و بعد من می تواند تا دکمه اشکال زدایی من برو. من ضربه آن را فشار دهید. اجازه دهید من زوم به عقب اگر من می توانم. ما میرویم آنجا. بنابراین ما باید، در اینجا، یک پانل در سمت راست. من در تماس هستم، بچه ها، شما واقعا نمی تواند به خوبی ببینید. اما در اصل، تمام این پانل سمت راست در حال انجام است است پیگیری هر دو برجسته خط است، که خط از کد که کامپیوتر در حال حاضر در حال اجرا، و همچنین تمام متغیرهای خود را این پایین. بنابراین شما رو سنت، سکه ها، N، ام همه به چیزهای مختلف اعلام در این نقطه است. بدون نگرانی، چرا که ما در واقع آنها را به هر متغیر مقداردهی اولیه است. بنابراین در کامپیوتر شما، خود را کامپیوتر تنها با دیدن، آه، 32767 تابع مورد استفاده قرار گرفت آخرین که فضای حافظه در کامپیوتر من. و به طوری که در حال حاضر که در آن سنت است. اما هیچ که هنگامی که شما اجرای کد، باید آن را مقداردهی اولیه شده است. بنابراین اجازه دهید از طریق رفتن، خط خط، چه خبر است اینجا. باشه. بنابراین تا اینجا سه دکمه های که من فقط توضیح داد. شما باید این بازی، و یا تابع اجرا، را فشار دهید، شما باید مرحله بر روی دکمه، و همچنین شما گام به دکمه داشته باشد. و اساسا، هر سه از آنها فقط از طریق کد خود را و انجام کارهای مختلف. بنابراین به طور معمول، زمانی که شما اشکال زدایی، ما نمی خواهیم به بازی فقط ضربه، چون بازی فقط اجرا خواهد شد کد خود را به پایان آن است. و سپس شما در واقع نه مطمئن شوید که چه مشکل خود را است مگر اینکه شما تعیین نقاط شکست های متعدد. اگر شما تعیین نقاط شکست های متعدد، آن را فقط به طور خودکار اجرا از یک نقطه انفصال، به بعد، به بعدی. اما در این مورد ما باید فقط یک، چرا که ما می خواهید برای کار راه ما از بالا به پایین به پایین. بنابراین ما قصد داریم به چشم پوشی از آن دکمه در حال حاضر برای اهداف این برنامه است. بنابراین گام بر تابع فقط مراحل بیش از هر خط و شما می گوید چه کامپیوتر انجام شده است. گام به تابع می رود به عملکرد واقعی که در خط خود را از کد است. بنابراین برای مثال، مانند printf ()، که یک تابع است، درست است؟ اگر من می خواستم به مرحله فیزیکی به تابع printf ()، من در واقع به قطعه ای از رفتن کد که در آن تابع () printf () نوشته شده بود و ببینید اونجا چه خبره. اما به طور معمول، ما فرض کنیم که کدی که ما به شما کار می کند. فرض می کنیم که تابع () printf () در حال کار. ما فرض کنیم که GetInt () در حال کار. بنابراین بدون نیاز به وجود قدم به آن دسته از توابع. اما اگر توابع وجود دارد که شما خود را ارسال که شما می خواهید برای بررسی چه خبر است در، شما می خواهید به مرحله به آن تابع. بنابراین در حال حاضر ما فقط رفتن به بیش از این قطعه کد به گام. بنابراین اجازه دهید را ببینید. اوه، چاپ، "اوه چینگ های، چگونه تغییر چقدر بدهکار است؟ " برای ما مهم نیست. ما می دانیم که کار می کند، بنابراین ما بیش از آن گام. بنابراین نفر است که شناور ما که اس ام اس initialized-- یا declared-- تا در بالای صفحه، ما در حال حاضر برابری که به GetFloat (). بنابراین اجازه دهید بیش از آن گام. و ما در دید پایین در اینجا، این برنامه من باعث به ورودی یک ارزش است. بنابراین اجازه دهید ارزش ما می خواهیم ورودی برای آزمایش اینجا است که 0.41. عالی. بنابراین در حال حاضر n-- آیا شما بچه ها ببینید در اینجا، در bottom-- آن stored-- چون ما گرد نشده است، آن را ذخیره شده در این غول شناور است که 0.4099999996، نزدیک به اندازه کافی است که ما اهداف، در حال حاضر، به 0.41. و سپس ما بعد خواهید دید، به عنوان ما ادامه پله بر این برنامه، پس در اینجا، N تبدیل شده است گرد و سنت تبدیل شده است 41. عالی. بنابراین ما می دانیم که کار گرد کردن ما است. ما می دانیم که ما باید تعداد صحیح سنت، بنابراین ما می دانیم که که واقعا مشکل است. بنابراین ما همچنان پله در این برنامه است. ما به اینجا بروید. و به این ترتیب پس از این خط از کد، ما باید بدانید که چگونه بسیاری از محله های ما. ما مرحله بیش از. و شما می بینید که ما، در واقع، یک سه ماهه چون ما 25 ام کم از مقدار اولیه ما از 41. و ما باید 16 سنت چپ برای ما است. آیا همه درک کنند که چگونه این برنامه از طریق پله و به همین دلیل در حال حاضر 16 سنت تبدیل و به همین دلیل، در حال حاضر، سکه تبدیل شده است 1. آیا همه زیر که منطق؟ خنک. بنابراین از این نقطه، کار برنامه، درست است؟ ما می دانیم که آن را به انجام دقیقا آنچه که ما آن را می خواهم. و ما در واقع نه به چاپ کردن، آه، چه سنت در این نقطه است، چه سکه در این نقطه است. ما همچنان به رفتن را از طریق این برنامه است. مرحله بیش از. خنک. ما بیش از از dimes است. عالی. ما می بینیم که آن را گرفته خاموش 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 ارزش قرار داده شده در آرایه بنابراین در حال حاضر، ما فقط رفتن به فرض که همه آنها نامرتب هستید چرا که ما در غیر این صورت آزمایش نشده است. پس چگونه مرتب کردن بر اساس انتخاب می کار این است که آن را برای اولین بار اجرا از طریق تمامیت از آرایه نامرتب. آن را انتخاب کنید از کوچکترین مقدار است. در این مورد، 3، سمت راست در حال حاضر، کوچکترین است. آن را به 5 می شود. نه، 5 بزرگتر نیست than-- و یا با عرض پوزش، و نه کمتر than-- 3. به طوری که حداقل ارزش است که هنوز هم 3. و سپس شما را به 2 است. کامپیوتر می بیند، آه، 2 کمتر از 3 است. 2 در حال حاضر باید حداقل مقدار باشد. و به این ترتیب 2 معاوضه با ارزش برای اولین بار است که. بنابراین پس از یک پاس، ما در واقع ببینید که 2 و 3 تعویض می شود. و ما فقط رفتن به ادامه انجام این کار را دوباره با بقیه آرایه. بنابراین ما قصد داریم فقط از طریق اجرا چهار شاخص آخرین آرایه است. خواهیم دید که 3 است حداقل مقدار بعدی. بنابراین ما قصد داریم به مبادله که با 4. و پس از آن ما فقط رفتن را به نگه داشتن در حال اجرا از طریق تا، در نهایت، شما رسیدن به یک آرایه مرتب شده که در آن 2، 3، 4، 5، و 6 همه طبقه بندی شده اند. آیا همه درک منطق چگونه مرتب کردن بر اساس انتخاب می کند؟ شما فقط باید نوعی از حداقل مقدار است. شما در حال پیگیری از چه چیزی است. و هر زمان که شما آن را پیدا کنید، شما آن را مبادله با ارزش برای اولین بار در آرایه و یا، نه value-- اول مقدار بعدی در آرایه. خنک. به طوری که شما بچه ها نوع دیدم از یک نگاه اجمالی مختصری، ما قصد داریم به شبه این است. بنابراین اگر شما در پشت بچه ها می خواهید به تشکیل یک گروه، هر کس در یک جدول می توانید یک شریک کمی تشکیل می دهند، من قصد دارم به شما بچه ها مانند سه دقیقه را فقط از طریق صحبت منطق، به زبان انگلیسی، ما از اینکه چگونه ممکن است قادر به اجرای شبه به ارسال مرتب سازی بر اساس انتخاب. و آب نبات وجود دارد. لطفا آمد و گرفتن آب نبات. اگر شما در تماس هستید و می خواهید آب نبات، آب نبات من می توانم به شما بزنند. در واقع، انجام سرد you--. آه ببخشید. باشه. بنابراین اگر ما می خواهم به عنوان یک کلاس، نوشتن شبه برای که چگونه ممکن است نزدیک این مشکل، فقط در صورت تمایل. من فقط در اطراف بروید و، در سفارش، گروه بپرسید برای خط بعدی از آنچه که ما باید انجام شود. بنابراین اگر شما بچه می خواهید برای شروع خاموش، اولین چیزی است به زمانی که شما در حال تلاش برای پیاده سازی یک راه برای حل این برنامه به صورت انتخابی یک لیست مرتب سازی بر اساس: اجازه دهید فقط فرض می کنیم یک آرایه، باشه؟ رسید شما می خواهید برای ایجاد برخی از مرتب کردن بر اساس [نامفهوم] است که شما حال اجرا از طریق کل آرایه خود را. ANDI PENG: درست است. بنابراین شما در حال رفتن به می خواهم به تکرار از طریق هر فضای، درست است؟ بسیار عالی. اگر شما بچه ها می خواهید به من می دهد بعدی line-- آره، در پشت. مخاطبان: بررسی آنها برای کوچکترین. ANDI PENG: وجود ما بروید. بنابراین ما می خواهیم از طریق رفتن و بررسی کنید تا ببینید که چه مقدار حداقل است، درست است؟ من قصد دارم تا مختصر که به «دقیقه." شما بچه ها چه می خواهند پس از به انجام شما در حداقل مقدار را پیدا کرده ام؟ مخاطبان: [نامفهوم] ANDI PENG: بنابراین شما می خواهید به تغییر آن را با اولین بار از این آرایه، درست؟ این آغاز است، من قصد دارم برای گفتن. خیلی خوب. پس اکنون که شما برای اولین بار عوض میکنه که یکی، چه چیزی می خواهید که کاری انجام دهید؟ بنابراین در حال حاضر ما می دانیم که این یکی در اینجا باید کوچکترین مقدار باشد، درست است؟ سپس شما باید استراحت اضافی از آرایه که نامرتب. پس چه می خواهید انجام دهید در اینجا، اگر شما بچه ها می خواهید به من خط بعدی می دهد؟ مخاطبان: بنابراین پس از آن شما می خواهم به تکرار از طریق باقی مانده از آرایه است. ANDI PENG: آره. و به این ترتیب چه از طریق تکرار نوع دلالت ما احتمالا نیاز دارید؟ چه نوعی-- مخاطبان: اوه، یک متغیر اضافی؟ ANDI PENG: احتمالا یکی دیگر از حلقه for، درست است؟ بنابراین ما در حال احتمالا می خواهید به تکرار through-- بزرگ است. و پس از آن شما در حال رفتن به عقب برگردید و احتمالا حداقل دوباره بررسی کنید، درست؟ و شما در حال رفتن به حفظ تکرار این، به دلیل حلقه فقط رفتن برای نگه داشتن در حال اجرا، درست است؟ به طوری که شما می توانید بچه ها، ما می بینیم فقط باید یک شبه کلی چگونه ما می خواهیم این برنامه را به نگاه. این تکرار در اینجا، آنچه که ما انجام به طور معمول نیاز به نوشتن کد ما در اگر ما می خواهیم از طریق یک تکرار آرایه، چه نوع از ساختار؟ من فکر می کنم Christabel در حال حاضر پیش از این گفته. رسید برای حلقه. ANDI PENG: برای حلقه؟ دقیقا. بنابراین این است که احتمالا برای رفتن به یک حلقه for. یک بررسی در اینجا رفتن به این مفهوم را میرسانند چیست؟ به طور معمول، اگر شما می خواهید برای بررسی اگر چیزی چیزی است else-- مخاطبان: اگر. ANDI PENG: یک اگر، درست است؟ و پس از آن مبادله اینجا، ما بیش از بعد، به دلیل دیوید از طریق این در سخنرانی و رفت. و پس از آن تکرار دوم implies-- مخاطبان: یکی دیگر از حلقه. ANDI PENG: --another برای حلقه، دقیقا. بنابراین اگر ما به دنبال در این درست، ما می توانید ببینید که ما احتمالا رفتن به نیاز به یک حلقه تو در تو برای با یک دستور شرطی در آن وجود دارد و سپس یک قطعه واقعی از کد که رفتن به مبادله ارزش. بنابراین من فقط به طور کلی نوشته یک کد شبه اینجا. و سپس ما در واقع رفتن از لحاظ جسمی، به عنوان یک طبقه، سعی کنید برای اجرای این امروز. بیایید به بازگشت به این IDE. آه اوه. چرا که not-- آن وجود دارد. باشه. با عرض پوزش، اجازه دهید به زوم در کمی بیشتر. ما میرویم آنجا. همه من در اینجا انجام است من ایجاد کرده اید برنامه ای به نام "انتخاب / sort.c." من یک آرایه از نه ایجاد کرده اید ارزش، 4، 8، 2، 1، 6، 9، 7، 5، 3. در حال حاضر، که شما می توانید ببینید، آنها نامرتب هستند. N است برای رفتن به شماره ای که به شما می گوید میزان ارزش شما در آرایه خود را داشته باشد. در این مورد، ما باید نه ارزش ها. و من فقط یک حلقه for کردم اینجا که چاپ آرایه نامرتب. و در پایان، من هم یک برای اس ام اس حلقه است که فقط آن را چاپ کنید. بنابراین به لحاظ نظری، اگر این برنامه به درستی کار کند، در پایان، شما باید ببینید برای حلقه چاپ که در آن 1، 2، 3، 4، 5، 6، 7، 8، 9 همه به درستی در جهت. بنابراین ما شبه ما را در اینجا. آیا کسی می خواهید to-- من فقط برای رفتن از آنها بخواهید برای volunteers-- من دقیقا چه نوع اگر ما می خواهیم به، برای اولین بار، فقط تکرار تا آغاز این آرایه؟ خط از کد من چه خبر احتمالا نیاز به رفتن به اینجا؟ مخاطبان: [نامفهوم] ANDI PENG: بله، احساس رایگان to-- با عرض پوزش، شما لازم نیست برای ایستادن احساس up-- رایگان به منظور بالا بردن صدای خود را کمی. مخاطبان: اینترنت من برابر با 0-- ANDI PENG: آره، خوب است. مخاطبان: من کمتر از طول آرایه است. ANDI PENG: بنابراین در حفظ ذهن در اینجا، چرا که ما یک تابع نیست که به ما می گوید طول یک آرایه، ما در حال حاضر ارزش است که از فروشگاه ها که. درست؟ چیز دیگری که به حفظ در mind-- در یک آرایه نه ارزش ها، چه شاخص ها؟ بیایید می گویند این آرایه 0-3 بود. شما می بینید که آخرین شاخص است که در واقع 3. این 4 نیست، حتی اگر وجود دارد چهار مقدار در آرایه. بنابراین در اینجا، ما باید بسیار مراقب باشید چه وضعیت ما برای طول در حال رفتن به. رسید آن را نمی شود N منهای 1؟ ANDI PENG: این خبر N منهای 1، دقیقا. آیا این را حس، چرا آن N منهای 1، همه؟ به این دلیل که آرایهها zero-نمایه میشود. آنها در 0 شروع و اجرا تا n منهای 1. آره، آن را کمی مشکل است. باشه. و بعد-- رسید که Isnt'1 در حال حاضر هر چند مراقبت از گرفته شده است، تنها با گفتن نیست "و یا کمتر از برابر با "و فقط گفت:" کمتر از؟ " ANDI PENG: این یک درخواست واقعا خوب است. درنتیجه بله. بلکه، راه است که ما اجرای حق چک کردن، شما نیاز به مقایسه دو مقدار است. بنابراین شما واقعا می خواهید ترک "را به" خالی است. چرا که اگر شما مقایسه این یکی، شما نمی هر چیزی پس از آن برای مقایسه، درست است؟ آره. بنابراین من + +. اجازه دهید اضافه کردن براکت ما در. متأسفیم. عالی. بنابراین ما باید ابتدا حلقه بیرونی ما. بنابراین در حال حاضر ما احتمالا می خواهید ایجاد یک متغیر برای نگه داشتن آهنگ از کوچکترین ارزش، درست است؟ آیا کسی می خواهید به من می دهد خط از کد که انجام این کار؟ چه ما نیاز اگر ما قصد داریم می خواهید به ذخیره چیزی؟ درست. شاید یک نام بهتر که می be-- "موقتی" کاملا works-- شاید به درستی تر به نام خواهد بود، اگر ما می خواهیم کوچکترین value-- مخاطبان: حداقل. ANDI PENG: دقیقه، در آنجا می رویم. دقیقه می تواند خوب باشد. و بنابراین در اینجا، آنچه که ما انجام می خواهم به آن را مقداردهی اولیه به؟ این کمی مشکل است. از آنجا که در حال حاضر در آغاز این آرایه، شما در هر چیزی نگاه، درست است؟ پس چه، به طور خودکار، اگر ما فقط در من برابر با 0 است، چه می خواهیم به مقداردهی اولیه برای اولین بار حداقل مقدار خود را به؟ مخاطبان: من. ANDI PENG: من، دقیقا. Christabel، چرا ما می خواهیم به آن را مقداردهی اولیه به من؟ رسید، زیرا خوب، ما با 0 شروع. بنابراین چون ما که چیزی برای مقایسه آن را به، حداقل به پایان خواهد رسید 0. ANDI PENG: دقیقا. بنابراین او دقیقا درست است. از آنجا که ما در واقع در هر چیزی نگاه نشده است، ما نمی دانیم که چه مقدار حداقل ما است. ما می خواهیم به آن را فقط به مقداردهی اولیه من که، در حال حاضر، در اینجا ببینید. و همانطور که ما به ادامه حرکت به پایین این آرایه، خواهیم دید که، با هر پاس اضافی، من افزایش یابد. و به این ترتیب در آن نقطه، من احتمالا می خواهید به حداقل، به دلیل آن را به هر آنچه که آغاز آرایه نامرتب است. خنک. بنابراین در حال حاضر ما می خواهیم به اضافه یک حلقه for در اینجا که رفتن به از طریق تکرار نامرتب، یا بقیه از این آرایه. آیا کسی می خواهید به من می دهد خط از کد که انجام این کار؟ Hint-- چه ما نیاز را در اینجا؟ چه خبر است به در این حلقه؟ آره. مخاطبان: بنابراین ما می خواهم می خواهم یک عدد صحیح مختلف، چرا که ما در حال اجرا را از طریق بقیه از آرایه به جای من، تا شاید J. ANDI PENG: بله، J برای تلفن های موبایل خوب به من. برابر؟ مخاطبان: بنابراین من می تواند به علاوه 1، به دلیل شما در مقدار بعدی شروع می شود. و سپس به end-- تا دوباره، j است کمتر از n منهای 1، و سپس J ++. ANDI PENG: بزرگ. و سپس در اینجا، ما در حال رفتن به می خواهم به چک کنید اگر وضعیت ما ملاقات کرده است، درست؟ از آنجا که شما می خواهید حداقل مقدار را تغییر دهید اگر آن را در واقع کوچکتر از آنچه شما آن را نسبت به، درست است؟ بنابراین آنچه از ما می خواهید در اینجا؟ بررسی کنید ببینید. چه نوع عبارت ما احتمالا TI خواهید به استفاده از اگر ما می خواهید برای بررسی چیزی؟ مخاطبان: عبارت if. ANDI PENG: عبارت if. بنابراین if-- و رفتن به شرایط که ما در داخل می خواهند از دستور if ما؟ مخاطبان: اگر مقدار J کمتر از ارزش i-- است ANDI PENG: دقیقا. بنابراین if-- این آرایه است به نام "آرایه." عالی. بنابراین اگر آرایه اون چی بود؟ دوباره بگو. مخاطبان: اگر آرایه-J کمتر از آرایه-I، سپس ما را در دقیقه تغییر دهید. بنابراین دقیقه خواهد J. ANDI PENG: آیا این را حس؟ باشه. و در حال حاضر در اینجا، ما در واقع می خواهید برای اجرای مبادله، درست است؟ پس به یاد آورید، در سخنرانی، که دیوید، هنگامی که او در تلاش بود به the-- چه بود مبادله آب پرتقال it-- و milk-- رسید که ناخالص بود. ANDI PENG: بله، این نوع از ناخالص بود. اما خوب زیبا بود مفهوم زمان نشان دادن. بنابراین از ارزش خود را اینجا فکر می کنم. شما یک آرایه را از دقیقه، آرایه ای از من، و یا هر آنچه ما در تلاش برای مبادله در اینجا. و شما احتمالا می توانید آنها را به پور هر یک از دیگر در همان زمان، درست است؟ بنابراین چه می خواهیم به نیاز به ایجاد در اینجا به منظور مبادله مقادیر درستی؟ مخاطبان: یک متغیر موقت. ANDI PENG: یک متغیر موقت است. بنابراین اجازه انجام موقتی نوع int است. ببینید، این امر می تواند یک بهتر زمان to-- ایست، اون چی بود؟ باشه. بنابراین این امر یک بهتر است زمان به نام متغیر "دما." بنابراین اجازه انجام موقتی نوع int است. چه هستند که ما را به رفتن مجموعه های موقتی برابر به اینجا؟ مخاطبان: حداقل؟ ANDI PENG: این کمی مشکل است. آن را در واقع در پایان مهم نیست. مهم نیست که چه سفارش شما انتخاب می کنید به مبادله در تا زمانی که شما در حال مطمئن شوید که شما هستید پیگیری آنچه را که شما مبادله. مخاطبان: این می تواند آرایه-I. ANDI PENG: بله، اجازه دهید آرایه-I. و پس از آن چه خط بعدی است کد ما می خواهیم به اینجا؟ مخاطبان: آرایه من برابر با آرایه-J. ANDI PENG: و در آخر؟ مخاطبان: آرایه-j برابر آرایه-I. رسید و یا آرایه-j برابر آرایه temp-- یا، دما. ANDI PENG: OK. بنابراین اجازه دهید این اجرا کنید و ببینید اگر آن را به کار است. که در آن است که اتفاق می افتد؟ اوه، این یک مشکل است. ببینید، در خط 40، ما تلاش برای استفاده از آرایه-J؟ اما از کجا J تنها در وجود دارد؟ مخاطبان: در حلقه for. ANDI PENG: درست است. پس چه می خواهیم به باید انجام دهید؟ مخاطبان: تعریف آن را در خارج the-- مخاطبان: آره، من حدس می زنم شما به استفاده از دیگر اگر بیانیه، درست است؟ بنابراین مانند، اگر minimum-- همه حق است، اجازه دهید من فکر می کنم. ANDI PENG: بچه ها، سعی کنید را به یک نگاه بیایید ببینید، چه چیزی است که ما اینجا می توانید انجام؟ رسید OK. بنابراین اگر حداقل برابر نیست j-- بنابراین اگر حداقل هنوز i-- پس از آن ما نمی خواهد که به مبادله. ANDI PENG: آیا مساوی کنم؟ چه چیزی شما را می خواهم بگویم که اینجا هستید؟ رسید یا آره، اگر حداقل برابر نیست من، آره. ANDI PENG: OK. خوب است که حل میکند، نوع، مشکلات ما است. اما که هنوز حل نمی کند مشکل چه اتفاقی می افتد اگر از J j-- کند در خارج از آن وجود ندارد، چه آیا شما ما می خواهیم انجام با آن؟ اعلام آن را در خارج؟ بیایید سعی کنید در حال اجرا است. آه اوه. مرتب سازی بر ما کار نمی کند. که شما می توانید، اولیه ما را ببینید آرایه کسانی که ارزش داشته است. و پس از آن باید در 1، 2، 3، 4، 5، 6، 7، 8، 9 بوده است. کار نمیکند. اه. چه کنیم؟ مخاطبان: اشکال زدایی. ANDI PENG: همه درست است، ما می توانید سعی کنید که. ما می توانیم اشکال زدایی. زوم کردن کمی. بیایید مجموعه ای نقطه انفصال است. اجازه دهید به OK like--. بنابراین از آنجا که ما می دانیم که این خطوط، 15 تا 22، می working-- چرا که همه من انجام فقط تکرار را از طریق و printing-- من می توانید پیش بروید و جست و خیز است. اجازه دهید در خط 25 شروع می شود. OOP، اجازه دهید من خلاص شدن از شر است. مخاطبان: بنابراین نقطه انفصال است که در آن اشکال زدایی شروع می شود؟ ANDI PENG: یا متوقف می شود. رسید یا متوقف می شود. ANDI PENG: آره. شما می توانید نقاط شکست های متعدد تنظیم و آن را فقط می توانید از یکی به دیگری پرش. اما در این مورد ما نمی دانیم که در آن خطا اتفاق می افتد. بنابراین ما فقط می خواهید شروع از بالا به پایین. بله. باشه. بنابراین این خط در اینجا، ما می توانیم در گام. شما می توانید در اینجا مشاهده کنید پایین، ما یک آرایه کردم. کسانی که مقادیر که در آرایه می باشد. آیا شما می بینید که چگونه شاخص 0، آن مربوط به value-- آه، من قصد دارم به سعی کنید به زوم. با عرض پوزش، این واقعا سخت است به see-- در اندیس آرایه 0، ما یک مقدار 4 و پس از آن غیره و غیره. ما متغیرهای محلی ما است. در حال حاضر من برابر است با 0، که ما می خواهیم آن را به. و بنابراین اجازه دهید در حفظ و پله را از طریق. حداقل ما برابر با 0 است، که ما نیز خواهید آن را به. و سپس ما وارد دوم ما برای حلقه، اگر آرایه-J کمتر از آرایه من است، که در آن بود. به طوری که شما ببینید که چگونه که بیش از که قلم؟ مخاطبان: بنابراین باید اگر حداقل، تمام that-- باید که نه در داخل اولین حلقه for می شود؟ ANDI PENG: خیر، زیرا شما هنوز هم می خواهید به آزمون. شما می خواهید برای انجام یک مقایسه هر زمان، حتی پس شما را از طریق آن را اجرا کنید. شما نه تنها خواهید آن را انجام در اولین عبور از طریق. شما می خواهید به آن را با هر پاس اضافی دوباره. بنابراین شما می خواهید برای چک وضعیت خود را در داخل. بنابراین ما فقط رفتن به در حال اجرا از طریق اینجا. من به شما بچه تذکر بدهد. این است که با این واقعیت است که زمانی که شما در حال چک مشروط خود را، شما در حال چک نمی برای شاخص درست است. بنابراین در حال حاضر شما در حال چک برای صفحه اول آرایه ای از J کمتر از آرایه است شاخص من. اما آنچه از شما انجام تا در آغاز برای حلقه؟ آیا شما تنظیم نیست j به من برابر است؟ آره، پس ما در واقع می توانید دیباگر اینجا خارج شوید. بنابراین اجازه دهید نگاهی به شبه ما. For-- ما قصد داریم به شروع من برابر با 0. ما قصد داریم برای رفتن به N منهای 1. اجازه دهید به بررسی، آیا ما این حق را داشته باشد؟ آره، راست بود. بنابراین پس از آن در داخل در اینجا، ما برای ایجاد یک حداقل مقدار و مجموعه ای که به من برابر است. آیا ما به انجام این کار؟ بله، انجام دادیم. در حال حاضر در داخل حلقه ما، ما رفتن به انجام j برابر من به N منهای 1. آیا ما به انجام این کار؟ در واقع، ما را انجام دادیم. بنابراین با این حال، آنچه که ما مقایسه می کنید؟ مخاطبان: J به علاوه 1. ANDI PENG: دقیقا. و پس از آن شما به خواهید به مجموعه حداقل خود را به J به همراه 1 و همچنین برابر است. بنابراین من از طریق که واقعا به سرعت رفت. آیا شما بچه ها درک و چرا از آن J به علاوه 1؟ باشه. بنابراین در آرایه خود را، در در اولین گذر خود را از طریق، برای حلقه، برای خود را از نوع int من برابر با 0، بیا فقط فرض این هنوز تغییر نکرده است. ما مجموعه ای از، به طور کامل، فقط چهار عنصر نامرتب، درست است؟ بنابراین ما می خواهیم به مقداردهی اولیه من برابر با 0. و من قصد دارم فقط از طریق این حلقه را اجرا کنید. و به این ترتیب در اولین گذر، ما قصد داریم به مقداردهی اولیه یک متغیر به نام "حداقل" که آن نیز برابر من است، چرا که ما حداقل ارزش ندارد. بنابراین که در حال حاضر برابر با 0 است. و سپس ما در حال رفتن را از طریق رفتن. و ما می خواهیم به تکرار دوباره و دوباره. حالا که ما پیدا کرده ام آنچه حداقل ما است، ما می خواهیم به تکرار از طریق برای دیدن دوباره اگر آن را مقایسه، درست است؟ بنابراین J، در اینجا، در حال رفتن برابر من، 0 است. و پس از آن اگر آرایه J به علاوه من که یکی که بعدی بیش از، کمتر است از آنچه حداقل در حال حاضر خود را ارزش است، شما می خواهید به مبادله. بنابراین اجازه دهید فقط می گویند ما باید کردم، مانند، 2، 5، 1، 8. در حال حاضر، من برابر است با 0 و j برابر با 0 است. و حداقل ارزش ما است. اگر آرایه-J علاوه i-- بنابراین اگر یکی از که پس از یک ما به دنبال در این بیشتر از قبل از آن است، آن را به تبدیل شدن به حداقل برساند. بنابراین در اینجا ما دید که 5 کمتر از که. پس از آن را برای رفتن به 5 است. ما می بینیم که 1 است کمتر از 2، درست است؟ بنابراین در حال حاضر ما می دانیم که حداقل ما این است که رفتن به ارزش شاخص در 0، 1، 2. آره؟ و پس از آن هنگامی که شما را در اینجا، شما می توانید مقادیر صحیح مبادله. بنابراین، هنگامی که شما بچه ها فقط با داشتن شدند J قبل، شما شد به دنبال نه در یک بعد از آن. شما در دنبال ارزش همان است که به همین دلیل آن فقط هیچ کاری نمی کرد. آیا این را حس به همه، به همین دلیل ما مورد نیاز است که به علاوه 1 وجود دارد؟ باشه. حالا اجازه دهید فقط اجرا را از طریق آن را به مطمئن شوید که بقیه کد صحیح است. چرا که اتفاق می افتد؟ آه، آن را در اینجا دقیقه. ما مقایسه ارزش در اشتباه بودند. وای نه. آه، بله، در اینجا ما بودند انتقال ارزش های غلط است. از آنجا که ما در i و j دنبال شد. آنها هستند که ما چک شدند. ما در واقع می خواهم به مبادله حداقل، حداقل در حال حاضر، با هر یک خارج است. و همانطور که شما بچه ها می توانید به پایین را ببینید در اینجا، ما باید یک آرایه مرتب شده است. این فقط تا به حال با این واقعیت است که وقتی ما چک کردن شد ارزش های ما مقایسه شد، ما در ارزش حق با تو بود به دنبال ندارد. ما در یکی از همان دنبال در اینجا، در واقع آن مبادله. شما باید در یک نگاه بعدی به آن و سپس شما می توانید مبادله. به طوری که چه نوع از بود شنود کد ما قبل از. و آنچه من در اینجا همه چیز است دیباگر می تواند برای شما انجام می من فقط آن را در انجام هیئت مدیره، به دلیل آن را آسان تر برای دیدن به جای تلاش به زوم بر روی دیباگر. آیا این را حس به همه؟ خنک. خیلی خوب. ما می توانیم به صحبت کردن در مورد حرکت نماد مجانبی که فقط یک راه فانتزی گفتن است زمان های اجرا از همه از این نوع. بنابراین من می دانم دیوید، در سخنرانی، لمس بر زمان های اجرا. و او را از طریق طیف فرمول رفت چگونه برای محاسبه زمان اجرای. هیچ نگرانی در مورد آن است. اگر شما واقعا کنجکاو هستید در مورد چگونه است که کار می کند، احساس رایگان به صحبت به من بعد از. ما می توانیم از طریق راه رفتن فرمول با هم. اما همه شما بچه ها باید واقعا بدانید این است که بیش از 2 N مربع همان چیزی است که N مربع. از آنجا که بیشترین تعداد، توان، رشد می کند بیشتر است. و به همین ترتیب برای اهداف ما، همه ما در مورد مراقبت که تعداد غول پیکر است که در حال رشد است. بنابراین بهترین است زمان اجرا از مرتب سازی انتخابی؟ اگر شما در حال رفتن به از طریق یک لیست تکرار و سپس از طریق تکرار بقیه که لیست، چند بار شما را به رفتن احتمالا، در بدترین case-- در مورد بهترین، sorry-- از طریق اجرا شود؟ شاید این سوال بهتر است بپرسید، چه بدترین حالت این است زمان اجرا از مرتب سازی انتخابی. مخاطبان: N مربع. ANDI PENG: این N مربع، درست است. بنابراین یک راه آسان برای فکر می کنم این است، هر زمان شما دو حلقه تو در تو برای، آن را به N مربع. از آنجا که نه تنها شما حال اجرا از طریق یک بار دیگر، شما باید به عقب برگردید اطراف و از طریق آن را اجرا کنید یک بار دیگر در داخل برای هر مقدار. بنابراین در آن صورت، شما در حال اجرا N N بار مربع، که is-- با عرض پوزش، n بار n، که برابر با n مربع. و مرتب کردن است نیز کمی در حس منحصر به فرد که آن را اگر این مهم نیست ارزش در حال حاضر به منظور. آن را هنوز هم به هر حال اجرا کنید. اجازه دهید فقط می گویند این 1، 2، 3، 4 بود. بدون در نظر گرفتن یا نه آن را در بود سفارش، آن را هنوز هم از طریق فرار و هنوز هم ارزش حداقل بررسی می شود. این را ساخته اند که به همان تعداد از چک در هر زمان تنها، حتی اگر آن در واقع هر چیزی را لمس کنید. بنابراین در این حالت، بهترین و بدترین زمان ها در واقع معادل آن. بنابراین انتظار می رود در زمان اجرا انتخاب نوع، که ما با نماد تعیین تتا، تتا، در این مورد، همچنین می تواند N مربع. هر سه این می شود N مربع. همه روشن است که چرا زمان اجرا N مربع؟ خیلی خوب. بنابراین من فقط رفتن را به سرعت اجرا از طریق بقیه انواع. الگوریتم برای حباب sort-- به یاد داشته باشید، این یکی از اولین بود دیوید بیش از در سخنرانی رفت. اساسا، شما گام به گام از طریق لیست کل و شما می swap-- فقط مقایسه دو در یک زمان. و اگر یکی بیشتر، از شما فقط آنها مبادله. بنابراین اگر این بیشتر می باشد، شما می مبادله. من رسمی کردم در اینجا ببینید. بنابراین اجازه دهید فقط می گویند شما تا به حال 8، 6، 4، 2. شما می خواهم 8 و 6 مقایسه کنید. شما می باید به آنها مبادله. شما می توانید 8 و 4 مقایسه کنید. شما می باید به آنها مبادله. اگر شما به مبادله 8 و 2، آنها را تغییر دهید. بنابراین در چنین معنا، شما می توانید ببینید، بیش از یک دوره طولانی از زمان بازی، چه نوع ارزش های حباب به به پایان می رسد، همین دلیل است که ما آن را مرتب سازی بر حباب. ما فقط از طریق اجرای دوباره در پاس دوم ما، و پاس سوم ما، و چهارم پاس ما است. اساسا، حباب مرتب سازی بر فقط اجرا می شود تا زمانی که شما هر گونه معاوضه تر را ندارد. بنابراین در این معنا، این فقط شبه کلی برای آن است. بدون نگرانی، این همه آنلاین می باشد. ما لازم نیست که به واقع بیش از این است. ما فقط مقداردهی اولیه یک شمارنده متغیر است که در 0 شروع می شود. و ما را از طریق تمام آرایه تکرار. و اگر یک مقدار is-- اگر این ارزش بیشتر از ارزش است، شما در حال رفتن به آنها مبادله. و سپس شما فقط هستید رفتن به رفتن ادامه. و شما در حال رفتن به تعداد. و شما فقط رفتن به انجام این در حالی که مقابله بیشتر است از 0، که بدان معنی است که هر زمان که شما به مبادله، شما می دانید که شما می خواهید به تماس و دوباره چک کنید. شما می خواهید به نگه داشتن چک کردن تا زمانی که شما می دانید که شما لازم نیست که به مبادله کند. پس چه بهترین و بدترین هستند مورد زمان های اجرا برای مرتب سازی حبابی؟ و این است که در واقع hint-- مختلف از مرتب سازی بر انتخاب در مفهوم که این دو پاسخ ها یکسان نیست. در مورد آنچه که در اتفاق می افتد فکر می کنم یک مورد آن در حال حاضر اگر طبقه بندی شده اند. و فکر می کنم در مورد آنچه که اتفاقی می افتد اگر آن در مورد که در آن طبقه بندی شده اند نمی شد. و شما می توانید نوع اجرا از طریق همین دلیل است که اتفاق می افتد. من به شما بچه را، مانند، 30 ثانیه به آن فکر کنیم. باشه. آیا کسی یک حدس در چه بدترین حالت زمان اجرا از مرتب سازی حبابی است؟ آره. رسید می شود آن را، مانند، n بار N منهای 1 و یا چیزی شبیه به آن؟ مانند، هر زمان آن را اجرا می کند، آن را فقط، مانند، یک مبادله کمتر که هر آنچه در آن بود. ANDI PENG: آره، بنابراین شما کاملا حق با شماست. و این یک مورد است که در آن خود را پاسخ در واقع پیچیده تر بود از یکی از ما نیاز به دادن. بنابراین آن را به run-- من رفتن به پاک کردن تمام در اینجا. هر کس خوب است؟ آیا من می توانم این را پاک کنید؟ باشه. شما در حال رفتن به N اجرا بار اولین بار، درست است؟ و آنها در حال رفتن به از طریق اجرا N منهای 1 بار دوم، درست است؟ و سپس شما قصد داریم برای حفظ رفتن، N 2 معدن، و غیره. دیوید این در یک سخنرانی، که در آن، اگر شما اضافه تا تمام کسانی که ارزش ها، شما چیزی است که گرفتن like-- yeah-- بیش از 2، که در اصل فقط کاهش می دهد به N مربع. شما در حال رفتن به یک بخش عجیب و غریب در آن وجود دارد. و به این ترتیب فقط می دانم که از N مربع همیشه تقدم بخش. و بنابراین در این مورد، بدترین زمان اجرا می شود N مربع. اگر آن را در نزولی بود سفارش، فکر می کنم، شما را به یک مبادله هر زمان تنها. چه خواهد بود، به طور بالقوه، بهترین حالت در زمان اجرا؟ بیایید می گویند، اگر لیست در حال حاضر در، آنچه را که در زمان اجرا می شود؟ مخاطبان: N. ANDI PENG: این N، دقیقا. و چرا از آن است N؟ رسید آنجا که شما فقط باید در هر بار چک کنید. ANDI PENG: دقیقا. بنابراین در بهترین زمان اجرا ممکن است، اگر به این لیست در حال حاضر sorted-- اجازه دهید بگویم 1، 2، 3، 4-- شما فقط از طریق رفتن، شما می توانید بررسی کنید، شما می توانید ببینید، آه، همه آنها حرکت کند. من مجبور به مبادله. من انجام می شود. بنابراین در آن صورت، آن را فقط N و یا تعدادی از مراحل شما فقط تا به حال در لیست اول تیک بزنید. و پس از، ما در حال حاضر ضربه مرتب سازی بر درج، که در آن الگوریتم است که در اصل به تقسیم آن را به یک بخش طبقه بندی شده اند و نامرتب. و پس از آن یک به یک، ارزش نامرتب هستند قرار داده شده در مناسب خود موقعیت خود را در ابتدای فهرست. بنابراین برای مثال، ما یک لیست 3، 5، 2، 6، 4 است. ما می دانیم که آن را در حال حاضر نامرتب چون ما فقط این آغاز شده نگاه کردن به آن. ما را نگاه و ما می دانیم که ارزش اولین بار است که طبقه بندی شده اند، درست است؟ اگر شما تنها به دنبال در یک آرایه از اندازه یک، شما می دانید که آن را طبقه بندی شده اند. پس ما می دانیم که چهار دیگر نامرتب هستند. ما از طریق رفتن و ما که ارزش را ببینید. بیا برگردیم. دید که مقدار 5؟ ما نگاهی به آن است. ما آن را نسبت به 3. ما می دانیم که آن را بیشتر از 3، به طوری که ما می دانیم که که طبقه بندی شده اند. بنابراین ما اکنون می دانیم که در دو مورد اول طبقه بندی شده اند و سه هستند. ما نگاهی به 2. ما برای اولین بار آن را با 5 تیک بزنید. آیا کمتر از 5؟ این نیست. بنابراین ما باید به دنبال حفظ کرد. سپس شما را بررسی کنید 2 خاموش 3. است آن را کمتر از؟ شماره بنابراین شما می دانید 2 به قرار داده می شود به جلو و 3 و 5 هر دو باید تحت فشار قرار دادند شود. آیا این را دوباره با 6 و 4. و ما فقط نگه داشتن چک کردن اصل، که در آن ما فقط به بررسی، چک، چک. و تا زمانی که آن را در سمت راست است جایگاه، ما نوع فقط قرار دادن آن را به سمت راست، که است که که در آن نام آن را از آمد. به طوری که فقط الگوریتم، شبه در هر سه، نوع، در مورد ما چگونه می پیاده سازی مرتب کردن بر اساس درج. شبه است در اینجا. این همه آنلاین است. هیچ نگرانی اگر شما بچه ها تلاش برای کپی کردن این پایین. پس یک بار دیگر، همان question-- چه خواهد بود که بهترین و بدترین زمان های اجرا برای مرتب سازی درجی؟ آن را بسیار شبیه به آخرین سوال. من به شما بچه را، مانند، 30 ثانیه در این باره فکر است. OK آیا کسی می خواهید به من بدترین زمان اجرا به من بدهید؟ آره. مخاطبان: N مربع. ANDI PENG: این N مربع. و به همین دلیل است که آن را N مربع؟ مخاطبان: از آنجا که در جهت معکوس، شما باید را از طریق بار N GO n، که is-- ANDI PENG: بله، دقیقا. بنابراین همان در مرتب سازی بر حباب. اگر به این لیست است در نزولی، شما رفتن به بررسی کنید یک بار برای اولین بار. و پس از آن با هر ارزش اضافی، شما رفتن به آن را بررسی کنید در برابر هر ارزش واحد، درست است؟ و به این ترتیب در دسترس نباشد، شما در حال رفتن به N بار پاس یکی دیگر از N عبور، که است N مربع. چه در مورد بهترین حالت؟ آره. مخاطبان: N منهای 1، به دلیل یکی از اولین در حال حاضر مربع. ANDI PENG: بنابراین، نزدیک است. پاسخ این است در واقع N. زیرا در حالی که یکی از اولین طبقه بندی شده اند، ممکن است آن را actually-- نیست ما فقط با خوش شانسی روبرو شد، در که به عنوان مثال، که 2 رخ داده است به کوچکترین عدد است. اما این همیشه صدق نمی کند باشد. اگر 2 در حال حاضر در آغاز طبقه بندی شده اند اما شما نگاه کنید و یک 1 در اینجا وجود دارد، 1 حال رفتن به آن دست انداز. و آن را برای پایان دادن به تا اینکه به هر حال ضربه. بنابراین در بهترین حالت، آن را در واقع فقط برای رفتن به N. اگر شما 1، 2، 3، 4، 5، 6، 7، 8، شما رفتن را از طریق اجرا که لیست کامل یک بار به چک کنید اگر همه چیز روبراهه. همه روشن است در حال اجرا زمان انتخاب به عنوان؟ من می دانم من رفتن را از طریق این واقعا سریع است. اما فقط می دانم که اگر شما می دانید مفاهیم کلی، شما باید خوب باشد. باشه. بنابراین من فقط شما بچه ها شاید به، مانند، یک دقیقه به صحبت به همسایگان خود در چه تنها برخی از تفاوت های اصلی بین این نوع از انواع. ما بیش از آن که به زودی. مخاطبان: آه، باشد. ANDI PENG: آره. باشه. سرد، اجازه دهید به عنوان یک کلاس دوباره نشستی. باشه. بنابراین این نوع از سوال باز به این معنا که بسیاری از پاسخ به آنها وجود دارد. و ما بیش از برخی از آنها به طور خلاصه. من فقط می خواستم به شما بچه فکر کردن در مورد آنچه متفاوت هر سه نوع از انواع. و من شنیده ام، همچنین، بزرگ question-- چه مرتبسازی ادغامی را انجام دهد؟ سوال بزرگ، چرا که آنچه ما را پوشش بعدی. بنابراین ادغام مرتب سازی بر است یک نوع که توابع بسیار متفاوت از انواع دیگر. همانطور که شما بچه ها می توانید see-- آیا دیوید که نسخه ی نمایشی جایی که او تا به حال تمام سرد سر و صدا از دیدن چگونه ادغام مرتب سازی بر زد، مانند، بی نهایت سریع تر از دو نوع دیگر؟ باشه. به طوری که به دلیل ادغام است مرتب سازی بر پیاده سازی است که تقسیم و تسخیر مفهوم است که ما را در مورد بسیاری در سخنرانی صحبت کردیم. در این معنا است که ما دوست داریم به کار دقیق، نه سخت تر است، هنگام تقسیم و تسخیر مشکلات، و شکستن آنها پایین، و سپس آنها را با هم، چیزهای خوب همیشه اتفاق می افتد. پس راه که ادغام مرتب سازی بر اساس اصل کار می کند این است که این تقسیم آرایه نامرتب در نیم. و سپس آن را به دو نیمه آرایه ها. و آن را فقط انواع آن دو نیمه. این فقط نگه می تقسیم در نیم، در نیم، در نیمه تا همه چیز مرتب شده اند پس از آن به صورت بازگشتی و آن همه را با هم. به طوری که واقعا انتزاعی. بنابراین این فقط یک کمی از شبه است. آیا این را حس در راه آن را در حال اجرا؟ بنابراین اجازه دهید فقط می گویند شما یک مجموعه ای از عناصر N، درست است؟ اگر n کمتر از 2 است، شما می توانید بازگشت. چون شما می دانید اگر وجود دارد که تنها یک چیز، باید آن را طبقه بندی شده اند. دیگری، شما مرتب کردن بر اساس نیمه چپ، و سپس شما مرتب کردن بر اساس نیمه سمت راست، و سپس شما ادغام خواهند شد. بنابراین در حالی که به نظر می رسد که واقعا آسان است، در واقع، فکر کردن در مورد آن نوع دشوار است. از آنجا که شما مانند، خب، این نوع از در حال اجرا در خود دارد. درست؟ آن در حال اجرا است. بنابراین در این معنا، دیوید لمس بر بازگشت در کلاس. و یک مفهوم ما در مورد بیشتر صحبت کنیم. آن است که این، این دو خط در اینجا، در واقع فقط از این برنامه است گفتن آن را به خود اجرا با ورودی های مختلف است. بنابراین به جای خود را با اجرا به طور کامل از عناصر N، شما می توانید آن را به شکستن نیمه چپ و نیمه سمت راست و سپس آن را دوباره اجرا کنید. و سپس ما را در آن بصری نگاه کنید، چون من یک یادگیرنده بصری است. با این نسخهها کار برای من بهتر است. بنابراین ما را با یک نمونه بصری اینجا نگاه کنید. بیایید می گویند ما یک آرایه، شش عناصر، 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 PENG: آره. بنابراین آنچه اتفاق می افتد که شما اساسا در حال ایجاد یک آرایه با نام تجاری جدید. بنابراین شما می دانید که، در اینجا، من دو آرایه از اندازه 3، درست است؟ بنابراین شما می دانید که آرایه مرتب شده من نیاز به شش عناصر. بنابراین شما فقط ایجاد یک مقدار جدید از حافظه است. بنابراین شما نوع مانند هستید بی فایده حافظه انسان، اما این مهم نیست دلیل آن را بسیار کوچک است. بنابراین شما در 1 نگاه و شما در 2 نگاه کنید. و شما می دانید که کمتر از 1 2 است. بنابراین شما می دانید که 1 باید در رفتن در آغاز همه از آن. شما حتی نمی نیاز به در 3 و 5 است. بنابراین شما می دانید 1 وجود دارد می رود. سپس شما اساسا ریز ریز کردن. 1 آن را، مانند، مرده به ما. پس از آن ما فقط باید 2، 3، 5، و سپس 4 و 6. و پس از آن شما می دانید که، شما می مقایسه 4 و 2، آه، 2 باید در وجود دارد. بنابراین شما با صدای تلپ 2 پایین، شما آن را ریز ریز کردن. بنابراین پس از آن شما فقط باید 3 و 5 در 4 و 6. و شما فقط حفظ سفت آن را خاموش تا زمانی که شما آنها را در آرایه. رسید بنابراین شما فقط همیشه مقایسه [نامفهوم]؟ ANDI PENG: دقیقا. بنابراین در این معنا، شما فقط مقایسه، در اصل، یک عدد برابر عدد دیگر. و چون شما می دانید که آن را طبقه بندی شده اند، شما می لازم نیست از طریق نگاه تمام اعداد. شما فقط باید به در یکی از اولین نگاه. و سپس شما فقط می توانید با صدای تلپ آنها را، چون شما می دانید که تعلق دارند که در آن آنها نیاز به تعلق دارند. آره. سوال خوبی بود. و پس از آن اگر هر کدام از شما کمی بلند پروازانه، در صورت تمایل به این کد نگاه کنید. این است که در واقع پیاده سازی های فیزیکی چگونه ما مرتب سازی بر ادغام ارسال. و شما می توانید آن را ببینید، بسیار کوتاه است. اما ایده پشت آن را بسیار پیچیده است. بنابراین اگر شما مانند نقاشی احساس این در امشب مشق شب خود را، احساس رایگان برای. باشه. پس داود نیز بیش از این در سخنرانی رفت. بهترین حالت چیست زمان های اجرا، بدترین زمان های اجرا مورد، و انتظار می رود از زمان های اجرا مرتب سازی بر ادغام شوند؟ چند ثانیه به فکر می کنم. این بسیار سخت است، اما نوع بصری اگر شما فکر می کنم. خیلی خوب. مخاطبان: آیا بدترین حالت n log n استفاده؟ ANDI PENG: دقیقا. و به همین دلیل است که آن را N log n است. مخاطبان: آیا نه به خاطر آن می شود به صورت تصاعدی سریعتر، پس آن را مانند یک تابع از آن است به جای فقط به سادگی بودن N مربع و یا چیزی؟ ANDI PENG: دقیقا. بنابراین به همین دلیل زمان اجرا در این N ورود به سیستم است N است از آنجا که آنچه شما انجام این کار در تمام این مراحل؟ شما فقط آن سفت در نیمه، درست است؟ و تا زمانی که ما در حال انجام ورود به سیستم، که آن را به انجام تقسیم یک مشکل در نیم، در نیم، در نیم، در نیمه تر است. و در این معنی، شما می تواند به نوعی از بین بردن مدل خطی که ما با استفاده از شده است. زیرا هنگامی که شما را ریز ریز کردن همه چیز در نیم، آن را به یک وارد سیستم شود. که فقط ریاضی راهی است برای نشان آن است. و سپس در نهایت، در پایان، شما فقط یکی از آخرین عبور برای قرار دادن تمام آنها را در جهت، درست است؟ و بنابراین اگر شما فقط به بررسی یک چیز، که N. و بنابراین شما نوع هستید ضرب دو با هم. بنابراین آن را مانند شما که نهایی کردم برای n در اینجا با ورود به سیستم از n را بررسی کنید این بالا. و اگر شما چند برابر آنها، که N log n است. و به این ترتیب بهترین و بدترین مورد مورد و انتظار می رود که تمام n log n است. آن را نیز مانند نوع دیگری. آن را مانند مرتب سازی انتخابی است به این معنا که آن را مهم نیست که چه خود را لیست است، آن را فقط به همین کار را در هر زمان تنها. باشه. به طوری که شما بچه ها می توانید ببینید، حتی اگر انواع که ما through-- N رفته مربع، آن را بسیار موثر است. و حتی این n log n استفاده است نه کارآمد ترین. اگر شما بچه ها کنجکاو هستند، مرتب سازی بر اساس مکانیسم وجود دارد که تا کارآمد است که آنها تقریبا ثابت در زمان اجرا. شما برخی از log n است شده ام. شما برخی از ورود به سیستم ورود به سیستم 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-- مانند، درست است اگر شما یافت ارزش، نادرست اگر شما نمی. و سپس شما گذشت در ارزش شما برای به دنبال ارزش ها، که شد است که آرایه آه، من قطعا قرار داده است که در محل اشتباه است. باشه. به هر حال، که باید به سمت راست از ارزش بوده است. و پس از آن اعضای هیات n تعداد است از عناصر در آن آرایه. چگونه شما در مورد تلاش رفتن به شبه که مشکل در؟ من به شما بچه دوست دارم سه دقیقه به انجام این کار. نه، من فکر می کنم only-- وجود دارد آره، یکی از سمت راست تا اینجا وجود دارد. مخاطبان: می توانم؟ ANDI PENG: آره، من به شما کردم. است که کار؟ باشه خوبه. باشه. همه بچه ها حق، ما رفتن به آن را مهار. باشه. بنابراین فرض ما این دوست داشتنی ام آرایه کمی با ارزش N در آن است. من خطوط قرعه کشی نیست. ولی چگونه باید می رفت در مورد تلاش برای نوشتن این؟ آیا کسی می خواهید به من خط اول به من بدهید؟ اگر می خواهید به من می دهد خط اول از این شبه. مخاطبان: [نامفهوم] رسید شما می خواهم می خواهم به تکرار through-- مخاطبان: فقط یکی دیگر از حلقه for؟ مخاطبان: --for. ANDI PENG: پس این یکی کمی مشکل است. فکر می کنم شما می خواهید about-- برای نگه داشتن این حلقه در حال اجرا دوباره و دوباره تا زمانی که؟ رسید تا [نامفهوم] ارزش به آن مقدار برابر است. ANDI PENG: دقیقا. بنابراین شما می توانید در واقع فقط write-- ما حتی می توانید آن را بیشتر را ساده کنید. ما فقط می توانید یک حلقه در حالی که، درست است؟ بنابراین شما فقط می توانید loop-- ما می دانیم که آن را در حالی است. اما در حال حاضر، من قصد دارم به "حلقه" - از طریق چه؟ حلقه until-- چه چیزی است شرایط پایان دادن به ما؟ من فکر می کنم من آن را شنیده. من شنیده ام کسی آن را می گویند. مخاطبان: ارزش برابر وسط. ANDI PENG: بگو دوباره آن را. رسید یا، تا زمانی که ارزش شما در جستجوی برای به مقدار متوسط ​​برابر است. ANDI PENG: چه اگر آن را در وجود ندارد؟ اگر ارزش شما در جستجوی برای است که در واقع در این آرایه نیست؟ رسید شما بازگشت 1. ANDI PENG: اما چه چیزی ما می خواهیم حلقه تا زمانی که اگر ما یک شرایط؟ آره. رسید تا تنها یک ارزش وجود دارد؟ ANDI PENG: شما می توانید حلقه until-- بنابراین شما می دانید که شما هستید رفتن به یک مقدار حداکثر، درست است؟ و شما می دانید که شما در حال رفتن به مقدار دقیقه، درست است؟ از آنجا همچنین، این چیزی است که من را فراموش می گویند قبل، این چیزی است که درباره جستجوی دودویی مهم این است که آرایه شما در حال حاضر طبقه بندی شده اند. از آنجا که هیچ راهی برای انجام وجود دارد این اگر ارزشهای فقط تصادفی است. شما نمی دانید که اگر یکی بزرگتر از دیگری، درست است؟ بنابراین شما می دانید که خود را حداکثر دقیقه خود را اینجا، درست است؟ اگر شما در حال رفتن به راه اندازی شود حداکثر خود را در دقیقه شما و mid-- اجازه دهید فقط فرض خود را اواسط ارزش here-- است شما در حال رفتن به اساسا حلقه تا زمانی که حداقل خود است در مورد همان حداکثر خود را، راست، و یا اگر حداکثر خود است همان دقیقه شما نیست. درست؟ چرا که وقتی که اتفاق می افتد، شما می دانید که شما در نهایت ضربه به همان مقدار است. بنابراین شما به حلقه تا زمانی که می خواهید خود را در دقیقه کمتر یا to-- اوه برابر است، کمتر از یا برابر با، راه دیگر around-- حداکثر است. آیا این را حس؟ من در زمان چند تلاش می کند تا که حق است. اما حلقه تا زمانی که مقدار حداکثر خود اساسا تقریبا کمتر از یا به حداقل خود را برابر، درست است؟ این زمانی است که شما می دانید که شما همگرا است. مخاطبان: هنگامی که حداکثر خود مقدار کمتر از حداقل باشد؟ ANDI PENG: اگر شما در حفظ راه اندازی آن، که چیزی است که ما می رویم در این انجام می شود. فرقی میکنه؟ حداقل و حداکثر فقط اعداد صحیح است که ما احتمالا رفتن به خواهید برای ایجاد به نگه داشتن پیگیری که در آن ما به دنبال. از آنجا که آرایه وجود دارد صرف نظر از آنچه ما انجام می دهیم. مانند، ما در واقع از لحاظ جسمی نمی سفت کردن آرایه، درست است؟ ما فقط تنظیم که در آن ما به دنبال. فرقی میکنه؟ مخاطبان: آره. ANDI PENG: OK. بنابراین اگر که شرایط برای حلقه ما است، چه چیزی ما را در داخل از این حلقه می خواهید؟ چه می خواهیم به مایل به انجام؟ بنابراین در حال حاضر، ما باید حداکثر و یک دقیقه، راست، احتمالا ایجاد تا جایی. ما قصد داریم به احتمالا می خواهید برای پیدا کردن یک میانه، درست است؟ چگونه می خواهیم به قادر به پیدا کردن وسط؟ mathematical-- چه خبر مخاطبان: حداکثر به علاوه دقیقه تقسیم بر 2. ANDI PENG: دقیقا. فرقی میکنه؟ و شما بچه ها ببینید که چرا ما نه تنها use-- چرا ما این کار را به جای انجام فقط N 2 تقسیم شده است؟ به این دلیل N یک ارزش است که رفتن به همان باقی بماند. درست؟ اما همانطور که ما حداقل ما تنظیم و حداکثر ارزش ها، آنها در حال رفتن را تغییر دهید. و به عنوان یک نتیجه، متوسط ​​ما است که برای تغییر بیش از حد. به همین دلیل ما می خواهیم برای انجام این کار در اینجا ببینید. باشه. و پس از آن، در حال حاضر که ما our-- پیدا کرده ام آره. مخاطبان: فقط یک question-- سریع وقتی به شما می گویند حداقل و حداکثر، فرض می کنیم که که در حال حاضر مرتب شده اند؟ ANDI PENG: آره، که در واقع یک پیش شرط برای یک جستجوی دودویی، که شما باید بدانید که آن را طبقه بندی شده اند. همین دلیل است که مرتب سازی بر اساس، شما را در ارسال خود را مجموعه ای مشکل قبل از جستجوی دودویی خود را. باشه. بنابراین در حال حاضر ما می دانیم که در آن است که نقطه میانی ما است، چه چیزی می خواهید برای انجام در اینجا؟ مخاطبان: ما می خواهیم به مقایسه که به یک دیگر. ANDI PENG: دقیقا. بنابراین شما در حال رفتن به مقایسه اواسط تا ارزش، درست است؟ و چه می کند که به ما زمانی که ما مقایسه می کنید؟ ما چه می خواهیم به انجام پس از آن؟ مخاطبان: اگر مقدار بزرگتر است از اواسط، ما می خواهیم به آن را قطع کند. ANDI PENG: دقیقا. بنابراین اگر مقدار بزرگتر است از اواسط، ما رفتن به می خواهم برای تغییر این حداقل و مکسز، درست است؟ ما چه می خواهیم را تغییر دهید؟ بنابراین اگر ما که ارزش است که در جایی در اینجا، آنچه شما ما را به تغییر دهید؟ ما می خواهیم به ما تغییر حداقل به اواسط، درست است؟ و پس از آن دیگری، اگر آن را در این است نیم، چه می خواهیم را تغییر دهید؟ مخاطبان: حداکثر شما. ANDI PENG: آره. و سپس شما فقط رفتن برای نگه داشتن حلقه، درست است؟ چون در حال حاضر، بعد از یک تکرار از طریق، شما حداکثر کردم اینجا. و پس از آن شما می توانید یک اواسط دوباره حساب. و پس از آن شما می توانید مقایسه کنید. و شما در حال رفتن به رفتن ادامه تا دقیقه و مکسز اساسا همگرا. و این زمانی که شما می دانید که شما در پایان از آن ضربه. و یا شما آن را پیدا کرده ام یا شما در آن نقطه ندارد. آیا این حس را به همه؟ باشه. این بسیار مهم است، چرا که شما باید را به نوشتن این کد در امشب خود را. اما شما از بچه ها یک خیلی خوب از چیزی که باید انجام بدهند، کدام خوب است. باشه. بنابراین ما در مورد هفت کردم بخش دقیقه باقی مانده است. بنابراین ما قصد داریم به بحث در مورد این pset که ما انجام خواهد داد. بنابراین pset به دو نیمه تقسیم شده است. نیمه اول شامل اجرای پیدا که در آن شما ارسال نامه جستجو خطی، جستجوی دودویی، و یک الگوریتم مرتب سازی. پس این است که اولین زمان در یک pset که در آن ما خواهید بود به شما بچه ها آنچه به نام کد توزیع است که کد که ما از پیش نوشته شده، اما فقط برخی از قطعات را ترک کردن برای شما به پایان نوشتن. پس شما بچه ها، هنگامی که شما در این نگاه کد، شما ممکن است واقعا می ترسم. اگر شما فقط دوست دارید، اه، من نمی دانم چه که انجام می دهند، من نمی دانم، مانند، که به نظر می رسد خیلی پیچیده است، اه، استراحت. مشکلی نیست. دفعات بازدید: تنظیمات. تنظیمات را به شما دقیقا توضیح آنچه را که همه از این برنامه ها انجام می دهند. به عنوان مثال، یک برنامه است generate.c که با pset شما آمده است. شما در واقع باید آن را لمس است، اما شما باید درک آنچه در آن انجام می دهند. و generate.c، تمام آن را به انجام است هم تولید اعداد تصادفی و یا شما می توانید آن یک دانه را، مانند یک تعداد پیش تعیین شده که طول می کشد، و آن را تولید اعداد است. بنابراین یک راه خاص به وجود پیاده سازی generate.c که در آن شما فقط می توانید یک دسته از اعداد را برای شما برای تست روش های دیگر خود را در. بنابراین اگر شما می خواهید برای به عنوان مثال، تست خود را پیدا کنید، شما می خواهید برای اجرای generate.c، تولید یک دسته از اعداد، و پس از آن اجرا تابع یاران خود را. عملکرد یاران خود را است که در آن شما در واقع از نظر فیزیکی به نوشتن کد. و از یاران فکر می کنم به عنوان یک فایل کتابخانه شما در حال نوشتن است که پیدا کردن که خواستار. و به این ترتیب در helpers.c، شما انجام جستجو و مرتب سازی. و پس از آن شما به اصل فقط همه آنها را با هم. تنظیمات به شما خواهد گفت که چگونه به قرار داده است که در خط فرمان. و شما قادر خواهید بود برای تست اینکه آیا یا نمی مرتب کردن و جستجوی خود را در حال کار. خنک. و آیا کسی در حال حاضر آغاز شده مشکل یا سوال مواجه می شوند آنها در حال حاضر با این؟ باشه. مخاطبان: صبر کنید. من یک سوال دارم. ANDI PENG: آره. مخاطبان: بنابراین من شروع به انجام جستجو خطی در helpers.c و آن را واقعا نمی کند. اما پس از آن بعد، متوجه شدم ما فقط باید آن را حذف کنید و انجام جستجوی دودویی. بنابراین تفاوتی می کند اگر آن کار نمی کند؟ ANDI PENG: پاسخ کوتاه این است که هیچ. اما از آنجایی که ما not-- هستید رسید اما هیچ کس در واقع چک کردن. ANDI PENG: ما هرگز هستید رفتن به دید که. اما شما احتمالا خواهید مطمئن مطمئن جستجوی خود را به کار است. از آنجا که اگر خطی خود را جستجو کار نمی کند، سپس شانس هستند باینری خود را جستجو است که به کار و همچنین. از آنجا که شما مشابه منطق در هر دو آنها. و نه، آن واقعا مهم نیست. بنابراین تنها آنهایی که شما به نوبه خود در مرتب کردن و جستجوی دودویی. آره. و همچنین، بسیاری از بچه ها تلاش برای کامپایل helpers.c. شما در واقع اجازه برای انجام این کار، به دلیل helpers.c یک تابع اصلی ندارد. و بنابراین فقط باید در واقع تدوین تولید و پیدا کنید، چرا پیدا کردن تماس ها helpers.c و توابع درون آن. به طوری که باعث اشکال زدایی درد در لب به لب. اما این چیزی است که ما باید انجام دهیم. رسید شما فقط همه را، درست است؟ ANDI PENG: شما فقط می توانید همه به خوبی، آره. باشه. به طوری که آن را در شرایط از آنچه pset است از همه شما را به انجام. اگر شما هر گونه سوال، احساس رایگان به من پس بخش بپرسید. من برای، مانند، 20 دقیقه اینجا باشد. و آره، pset است واقعا که بد نیست. شما بچه ها باید باشه. این، فقط به دنبال دستورالعمل. نوع یک حس، منطقی، چه باید اتفاق می افتد و شما خوب باشد. آیا بیش از حد می ترسم. در بسیاری از کد وجود دارد در حال حاضر نوشته شده است. آیا بیش از حد می ترسم اگر شما نمی درک آنچه همه از معناست. اگر آن را در بسیاری، آن را کاملا خوب است. و به ساعات اداری آمده است. ما به شما کمک نگاهی به. رسید با اضافی توابع، ما آن نگاه کردن؟ ANDI PENG: بله، کسانی که در کد می باشد. در این بازی از 15، نیمی از که در حال حاضر برای شما نوشته شده است. بنابراین آن دسته از توابع هستند در حال حاضر در کد. بله. خیلی خوب. خوب، بهترین شانس. این یک روز نفرت انگیز است. پس امیدوارم شما بچه ها احساس خیلی بد در مورد اقامت در داخل و برنامه نویسی.