[Powered by Google Translate] [بخش 3 - راحت تر]
[راب Bowden - دانشگاه هاروارد
>> [این CS50 است. - CS50.TV]
>> بنابراین سوال اول عجیبی دقت کنید.
GDB اجازه می دهد تا شما "اشکال زدایی برنامه، اما، بیشتر به طور خاص، چه آن را به شما اجازه انجام این کار؟
من که یکی از آنها، پاسخ دادن و من نمی دانم چه دقیقا انتظار می رود،
بنابراین من حدس می زنم آن چیزی در امتداد خطوط از آن به شما اجازه می دهد تا گام به گام
راه رفتن را از طریق این برنامه، ارتباط برقرار کردن با آن، تغییر متغیر، انجام تمام این کارها -
اساسا به طور کامل اجرای یک برنامه کنترل
و بازرسی هر بخش از اجرای این برنامه داده شده است.
بنابراین ویژگی های آن اجازه دهید همه چیز اشکال زدایی کنید.
باشه.
جستجوی دودویی چرا نیاز است که یک آرایه مرتب شوند؟
چه کسی می خواهد برای پاسخ به این؟
[دانشجوی] از آنجا که آن کار نمی کند اگر آن را طبقه بندی شده اند. >> آره. [خنده]
اگر آن را دسته بندی نمی کند، و سپس آن را غیر ممکن است که آن را در نیمی از تقسیم
و می دانیم که همه چیز را به سمت چپ کمتر است و همه چیز را به سمت راست
بیشتر از مقدار متوسط ​​است.
پس از آن نیاز به مرتب شوند.
باشه.
چرا مرتب سازی بر اساس حباب در O مربع N؟
آیا کسی برای اولین بار سطح بالا بسیار سریع کلی از چه نوع حباب را می خواهید؟
[دانشجوی] شما اساسا از طریق هر یک از عناصر و بررسی عناصر چند.
اگر آنها از جایی که شما آنها را مبادله، پس از آن عناصر چند بعدی و به همین ترتیب شما را بررسی کنید.
هنگامی که شما به پایان می رسند، پس از آن شما می دانیم که بزرگترین عنصر در پایان قرار می گیرد،
بنابراین شما را نادیده می گیرند که یکی از پس از آن شما را در رفتن را از طریق،
و هر بار شما باید به بررسی یکی کمتر عنصر تا زمانی که شما می توانید بدون هیچ تغییری. >> آره.
این مرتب سازی بر حباب نامیده می شود زیرا اگر آرایه را در کنار خود تلنگر آن را به بالا و پایین، عمودی،
پس از آن ارزش های بزرگ به پایین و نزول مقادیر کوچک حباب به بالا.
که چگونه آن را از آنجا نام خود را.
و آره، شما فقط از طریق رفتن.
شما در حفظ و رفتن را از طریق آرایه، مبادله ارزش بزرگتر
برای بدست آوردن بزرگترین ارزش ها به پایین.
>> چرا آن را مربع N O؟
اول، آیا هر کسی می خواهم بگویم چرا از آن O از N مربع؟
[دانشجو] از آنجا که برای هر اجرا آن می رود N
شما فقط می توانید اطمینان حاصل کنید که شما بزرگترین عنصر تمام راه را به پایین باشد،
سپس شما باید به تکرار است که به عنوان بسیاری از عناصر. >> آره.
پس در ذهن داشته باشید چه بزرگ O به معنی و چه به معنای امگا بزرگ است.
O بزرگ است مثل حد بالا در مورد چگونه آهسته آن را در واقع می تواند اجرا شود.
بنابراین با گفتن O آن از مربع N، O از N و یا دیگری آن را قادر به اجرا
در زمان خطی است، اما از آن O از N نبات
دلیل آن است که توسط O از N نبات محدود شده است.
اگر آن را توسط O مربع N محدود، و سپس آن را توسط N نبات نیز محدود شده است.
پس از آن نفر مربع، و در بدترین حالت آن را می توانید انجام دهید بهتر از مربع N،
به همین دلیل است که آن O از N مربع است.
بنابراین برای دیدن ریاضی اندکی که چگونه از آن بیرون می آید به مربع،
اگر ما پنج چیز را در لیست ما، اولین بار که چگونه بسیاری از معاوضه می توانیم به طور بالقوه نیاز به
به منظور رسیدن به این؟ اجازه دهید در واقع تنها -
چگونه بسیاری از معاوضه می خواهیم در اولین اجرا از مرتب کردن حباب را از طریق آرایه؟
[دانشجوی] n - 1. >> آره.
>> اگر 5 عنصر وجود دارد، ما در حال رفتن به نیاز به n - 1 است.
سپس در دوم که چگونه بسیاری از معاوضه می خواهیم را به؟
[دانشجوی] n - 2 است. >> آره.
و سوم به n - 3، و پس از آن برای راحتی من دو تاریخ و زمان آخرین ارسال
و سپس ما در حال رفتن به نیاز به ایجاد 2 معاوضه و 1 مبادله.
من حدس می زنم یکی از آخرین ممکن است یا ممکن است در واقع لازم نیست اتفاق می افتد.
آیا این یک مبادله است؟ نمی دانم.
بنابراین این کل مقدار سواپ یا حداقل مقایسه شما را.
حتی اگر شما مبادله نیست، شما هنوز هم نیاز به مقایسه ارزش است.
بنابراین N وجود دارد 1 - مقایسه در اولین اجرا از طریق آرایه.
اگر این چیزها را تنظیم مجدد، اجازه دهید در واقع این شش چیز را تا چیزهایی پشته سادگی.
و پس از آن من 3، انجام 2، 1.
پس فقط چینش دوباره این مبالغ، ما می خواهیم تا ببینید که چگونه بسیاری از مقایسه ما را
در کل الگوریتم.
بنابراین اگر ما را به این بچه ها را در اینجا،
پس ما هنوز فقط جمع مقایسه با این حال بسیاری وجود دارد.
اما اگر این جمع و به این جمع ما و این مجموع را،
هنوز هم مشکل مشابه دارد. ما فقط به آن گروه خاص خلاصه.
>> بنابراین در حال حاضر ما در حال جمع 3 نفر است. این فقط 3 نفر نیست.
این همیشه خواهد بود N / 2 نفر است.
بنابراین در اینجا ما اتفاق می افتد به 6.
اگر ما تا به حال 10 همه چیز، پس از آن ما می تواند این گروه را به مدت 5 جفت مختلف از چیزهایی
و در نهایت با N + N + N + N + N است.
بنابراین شما همیشه برای گرفتن N / 2 N، و پس از این خواهیم آن را به نقطه N مربع / 2.
و بنابراین، حتی اگر آن عامل نیم، که اتفاق می افتد می آیند در
به دلیل این واقعیت است که از طریق هر یک از تکرار بیش از آرایه مقایسه می کنیم 1 کمتر
به طوری که ما بیش از 2 است، اما هنوز هم نفر مربع است.
ما در مورد عامل ثابت نیم اهمیتی نمی دهند.
بنابراین بسیاری از چیزهای O بزرگ مثل این متکی به نوع انجام این کار مرتب کردن بر اساس ریاضی،
انجام مبالغ حساب و چیزهای سری هندسی،
اما بسیاری از آنها در این دوره بسیار سرراست است.
باشه.
چرا مرتب سازی بر اساس درج امگا از N؟ چه امگا چیست؟
[دو دانشجوی صحبت کردن در یک بار - ناخوانا] >> آره.
امگا شما می توانید به عنوان حد پایین فکر می کنم.
>> بنابراین هر چقدر هم که کارآمد خود را مرتب کردن بر اساس الگوریتم درج شده است،
صرف نظر از لیست که در به تصویب رسید، آن را همواره برای مقایسه حداقل N همه چیز
و یا آن را به بیش از چیزهای N تکرار.
این است که چرا؟
[دانشجوی] از آنجا که اگر این لیست در حال حاضر مرتب شده اند، و سپس از طریق تکرار اول
شما تنها می توانید که اولین عنصر بسیار است که حداقل تضمین،
و تکرار دوم شما فقط می توانید در دو مورد اول تضمین
زیرا شما نمی دانید که بقیه از فهرست طبقه بندی شده اند. >> آره.
اگر شما در یک لیست کاملا طبقه بندی شده اند منتقل می کند، حداقل شما را برای رفتن بیش از همه عناصر
برای دیدن آن احتیاج به اطراف منتقل می شود.
بنابراین عبور از روی لیست و گفت: آه، این است که در حال حاضر طبقه بندی شده اند.
را برای شما به آن را غیر ممکن می دانم که این طبقه بندی شده اند تا زمانی که هر یک از عناصر را چک کنید
برای دیدن است که آنها به منظور طبقه بندی شده اند.
بنابراین کمتر محدود در مرتب سازی بر درج امگا از n است.
چه بدترین حالت زمان اجرای مرتب سازی بر اساس ادغام،
بدترین حالت O بزرگ دوباره؟
بنابراین در بدترین حالت، چگونه به مرتب کردن بر اساس ادغام اجرا شده است؟
[دانشجوی] N ورود N. >> آره.
سریع ترین الگوریتم های مرتب سازی به طور کلی عبارتند از: N ورود N. شما نمی توانید انجام دهید بهتر است.
>> موارد خاص وجود دارد، و اگر ما هم امروز - اما ما احتمالا won't -
ما می تواند کند که بهتر از ورود N N را ببینید.
اما در حالت کلی، شما نمی توانید بهتر از ورود N N.
و ادغام مرتب کردن بر اساس اتفاق می افتد که یکی از شما باید برای این دوره است که n log n استفاده می دانیم.
و بنابراین، ما در واقع خواهید پیاده سازی می شود که امروز است.
و در نهایت، در بیش از سه جمله، چگونه انتخاب کار مرتب کردن بر اساس؟
آیا کسی که می خواهید به جواب بدهد، و من جملات شما را به حساب
چرا که اگر شما بیش از 3 -
آیا کسی به یاد داشته باشید مرتب کردن بر اساس انتخاب؟
مرتب کردن بر اساس انتخاب است که معمولا بسیار آسان است فقط از نام به یاد داشته باشید.
شما فقط بیش از آرایه تکرار، هر چه که بزرگترین ارزش است و یا کوچکترین -
هر سفارش شما مرتب سازی شوید.
بنابراین می گویند ما در حال مرتب سازی از کوچکترین تا بزرگترین.
شما بیش از آرایه تکرار، به دنبال هر عنصر حداقل،
آن را انتخاب کنید، و سپس آن را فقط به مبادله آنچه در وهله اول.
و سپس در پاس دوم طول آرایه، حداقل برای این عنصر را دوباره نگاه می کنم،
آن را انتخاب کنید، و سپس مبادله آن را با آنچه که در مقام دوم است.
بنابراین ما فقط به چیدن و انتخاب حداقل ارزش
و قرار دادن آنها را در مقابل از آرایه تا زمانی که طبقه بندی شده اند.
سوالات مطرح شده در آن؟
>> این به ناچار در اشکال شما باید برای پر کردن زمانی که شما در حال ارسال pset ظاهر می شود.
اینها اساسا پاسخ به این.
خوب، بنابراین در حال حاضر مشکلات برنامه نویسی است.
من در حال حاضر از طریق ایمیل فرستاده می شود - آیا هر کسی که ایمیل می کنید؟ باشه.
من در حال حاضر از طریق ایمیل فرستاده می شود، فضایی که ما قصد داریم با استفاده از
و اگر شما بر روی نام من کلیک کنید - بنابراین من فکر می کنم من قصد دارم تا در پایین
به دلیل عقب R - اما اگر شما بر روی نام من کلیک کنید شما 2 تجدید نظر را ببینید.
ویرایشهای (1) برای رفتن به من در حال حاضر کپی و کد را در فاصله جا به جا
برای چیزی که جستجو شما قصد به پیاده سازی.
و تجدید نظر 2 خواهد بود چیزی که مرتب سازی بر اساس است که ما بعد از آن پیاده سازی است.
بنابراین شما می توانید بر روی ویرایشهای من 1 کلیک کنید و از کار وجود دارد.
و در حال حاضر ما می خواهیم به پیاده سازی جستجو دودویی.
>> آیا هر کسی مایل به سطح بالا توضیح شبه فقط به
از آنچه که ما در حال رفتن به برای جستجو؟ آره.
[دانشجوی] شما فقط وسط آرایه و اگر آنچه شما به دنبال آن هستید
کمتر از آن و یا بیشتر از آن.
و اگر آن را کمتر، شما را به نیمه است که کمتر
و اگر آن را بیشتر، شما را به نیمه است که بیشتر بروید و دوباره تکرار کنید تا زمانی که شما فقط یک چیز است.
[Bowden] آره.
توجه کنید که آرایه ای از اعداد است ما در حال حاضر طبقه بندی شده اند.
و به طوری که بدان معنی است که ما می توانیم استفاده از آن می گیرد و ما برای اولین بار می تواند چک،
خوب، من به دنبال شماره 50.
بنابراین من می تواند به وسط بروید.
میانه سخت است برای تعریف هنگامی که آن را به یک تعداد حتی از چیزهایی،
اما اجازه دهید فقط می گویند ما همیشه باید به وسط کوتاه.
بنابراین در اینجا ما 8 همه چیز، بنابراین میانه خواهد بود 16.
برای 50 من به دنبال، به طوری که 50 از 16 بزرگتر است.
بنابراین در حال حاضر من اساسا می تواند به عنوان این عناصر آرایه من را درمان کنند.
من می توانم به دور انداختن همه چیز را از 16 بیش از.
آرایه من فقط این 4 عنصر، و من تکرار می کنم.
بنابراین پس از آن من می خواهم برای پیدا کردن وسط دوباره، که می شود 42.
42 کمتر از 50 است، بنابراین من می تواند به دور انداختن این دو عنصر است.
این آرایه باقی مانده است.
من قصد دارم برای پیدا کردن وسط دوباره.
من حدس می زنم 50 یک مثال بد بود چون من همیشه پرتاب بود دور همه چیز را به سمت چپ،
اما به همان اندازه، اگر من به دنبال چیزی
و آن را کمتر از عنصر من در حال حاضر به دنبال
پس از آن من قصد دارم به دور انداختن همه چیز را به سمت راست.
بنابراین در حال حاضر ما نیاز به پیاده سازی.
توجه داشته باشید که ما نیاز به تصویب در اندازه.
ما نیز به اندازه سخت کد می تواند نیاز نیست.
بنابراین اگر ما از آن خلاص شدن از شر # تعریف -
باشه.
چگونه می توانم به سادگی بیرون شکل چه اندازه از آرایه اعداد در حال حاضر؟
>> چگونه بسیاری از عناصر موجود در آرایه اعداد هستند؟
[دانشجو] اعداد، براکت، طول؟
[Bowden] که در C. وجود ندارد
نیاز دارند. طول.
آرایه خصوصیات را نداشته باشند، بنابراین هیچ اموال طول آرایه وجود دارد
که فقط می خواهد با این حال شما زمانی آن اتفاق می افتد.
[دانشجو] ببینید که چه مقدار حافظه آن است و چقدر تقسیم - >> آره.
پس چگونه می تواند ما را ببینید که چه مقدار حافظه آن است؟ >> [دانشجو] Sizeof. >> بله، sizeof.
Sizeof اپراتور که برای بازگشت به اندازه آرایه اعداد است.
و که می شود با این حال بسیاری از اعداد صحیح بار به اندازه یک عدد صحیح وجود دارد
از آن چه مقدار حافظه در واقع مصرف تا.
پس اگر من می خواهم تعدادی از چیزهایی در آرایه،
پس از آن من می خواهم به اندازه یک عدد صحیح تقسیم است.
باشه. به طوری که به شما اجازه می دهد تا من در اندازه منتقل نمائید.
چرا من باید به اندازه عبور در همه؟
چرا من نمی توانم فقط اینجا اندازه نوع int = sizeof (انبار کاه) / sizeof (هوشمند)؟
چرا این کار نمی کند؟
[دانشجو] آن را یک متغیر جهانی نیست.
[Bowden] کومه علف خشک وجود دارد و ما در حال عبور در اعداد به عنوان انبار کاه،
و این نوع foreshadowing از آنچه که برای آمدن به راه است. آره.
[دانشجو] کومه علف خشک فقط اشاره به آن است، پس از آن باز خواهد گشت چقدر بزرگ است که مرجع است.
آره.
من در سخنرانی شک دارند که شما را دیده ام پشته اما واقعا، درست است؟
ما فقط در مورد آن سخن گفته شده است.
پس پشته می باشد که در آن تمامی متغیر ها ذخیره می شود.
>> هر حافظه اختصاص داده شده است که برای متغیرهای محلی در پشته،
و هر تابع می شود، فضای خود را در پشته ها، قاب پشته خود را همان چیزی است که آن را به نام.
بنابراین اصلی دارای قاب پشته آن است، و در داخل آن وجود دارد این آرایه اعداد،
و آن را به sizeof (شماره) خواهد بود.
رفتن به اندازه عدد تقسیم بر اساس اندازه از عناصر،
اما این همه زندگی در قاب پشته اصلی.
وقتی ما تماس جستجو، جستجو می شود قاب پشته خود را،
فضای خود را برای ذخیره تمام متغیرهای محلی خود را.
اما این استدلال - تا انبار کاه یک کپی از کل این آرایه نیست.
ما را در کل آرایه به عنوان یک کپی به جستجو منتقل نکنید.
فقط عبور یک مرجع به آن آرایه می باشد.
جستجو می تواند این تعداد از طریق این مرجع دسترسی داشته باشید.
این هنوز هم دسترسی به چیزهایی که در داخل قاب پشته اصلی زندگی می کنند،
اما در واقع، هنگامی که ما را به اشاره گر، که به زودی باید،
این همان چیزی است که اشاره گر هستند.
اشاره گرها فقط به چیزهایی است، و شما می توانید اشاره گر برای دسترسی به چیزهایی استفاده کنید
که در قاب پشته چیزهای دیگر هستند.
بنابراین حتی اگر اعداد به بخش اصلی محلی است، ما هنوز هم می توانید آن را از طریق این اشاره گر دسترسی داشته باشید.
اما از آنجا که این فقط یک اشاره گر است و آن را فقط به یک مرجع،
sizeof (انبار کاه) فقط به اندازه از مرجع خود را بر می گرداند.
این کار به اندازه چیزی که آن را با اشاره به بازگشت نیست.
اندازه واقعی از اعداد را بر نمی گرداند.
و بنابراین این است که رفتن به کار به عنوان ما می خواهیم آن را به.
>> سوالات مطرح شده در آن؟
اشاره گرها خواهد شد در جزئیات به طور معناداری بیشتر لخته در هفته های رفته آمده است.
و به همین دلیل است که بسیاری از چیزهایی که شما را مشاهده کنید، بسیاری از چیزهایی جستجو و یا همه چیز مرتب سازی بر اساس،
تقریبا همه آنها در حال رفتن به نیاز را به اندازه واقعی آرایه،
چرا که در C، ما هیچ ایده چه اندازه از آرایه است.
شما با عضویت در این سایت باید به صورت دستی آن را رد شوید.
و شما دستی در کل آرایه نمی تواند عبور زیرا شما فقط در مرجع عبور
و آن را می توانید از مرجع می کنید.
باشه.
بنابراین در حال حاضر ما می خواهیم برای پیاده سازی آنچه که قبلا توضیح داده شد.
شما می توانید برای یک دقیقه بر روی آن کار می کنند،
و شما لازم نیست که به نگرانی در مورد همه چیز کاملا 100٪ کار می کند.
فقط تا ارسال شبه نصف چگونه فکر می کنید که باید کار.
باشه.
بدون نیاز به طور کامل انجام نشده است.
اما آیا هر کسی احساس راحتی با آنچه که تا کنون،
مانند چیزی است که ما می توانیم با هم کار می کنند؟
آیا کسی داوطلب؟ یا من به طور تصادفی انتخاب کنید.
این را ندارد که حق با هر اقدام، اما چیزی است که ما می توانیم به یک دولت کار را تغییر دهید.
[دانشجو] مطمئنا. >> درست است.
بنابراین می تواند تجدید نظر را ذخیره کنید با کلیک بر روی آیکون کوچک ذخیره شده است.
تو Ramya، درست است؟ >> [دانشجو] آره. >> [Bowden] باشه.
بنابراین در حال حاضر من می توانم تجدید نظر خود را مشاهده و هر کس می تواند جلو و تجدید نظر است.
و در اینجا ما باید - باشه.
بنابراین Ramya رفت و با راه حل بازگشتی، که قطعا یک راه حل معتبر است.
دو راه وجود دارد شما می توانید این مشکل را انجام دهد.
شما هم می توانید آن را مکررا و یا به صورت بازگشتی انجام دهد.
اکثر مشکلات شما روبرو می شوند که می تواند انجام شود به صورت بازگشتی نیز می تواند انجام شود تکرار شونده است.
بنابراین در اینجا ما آن را به صورت بازگشتی انجام می شود.
>> آیا کسی می خواهید به تعریف آنچه در آن به معنی ایجاد یک تابع بازگشتی؟
[دانشجو] هنگامی که شما یک تابع خود تماس بگیرید
و پس از آن خود را تا زمانی که بیرون می آید درست است تماس بگیرید. >> آره.
تابع بازگشتی تابعی که خود را فرا می خواند.
سه چیز بزرگ وجود دارد که یک تابع بازگشتی باید.
برای اولین بار است که به وضوح، آن را به خود فرا می خواند.
دوم، در مورد پایه است.
بنابراین در برخی از نقطه تابع نیاز برای جلوگیری از تماس خود،
و این چیزی است که برای مورد پایه است.
بنابراین در اینجا ما می دانیم که ما باید به توقف، ما را در ما جستجو
زمانی که شروع به پایان برابر است - و ما رو به چه معنی می دهد.
اما در نهایت، آخرین چیزی که مهم است از توابع بازگشتی:
توابع به نحوی باید در مورد پایه نزدیک شود.
مانند اگر شما در واقع به روز رسانی هر زمانی که شما را به تماس دوم بازگشتی،
اگر شما به معنای واقعی کلمه فقط فراخوانی تابع با استدلال مشابه
و هیچ متغیر های جهانی تغییر کرده است و یا هر چیزی،
به شما خواهد شد در مورد پایه برسد، که در آن مورد که بد است.
بازگشت بی نهایت و یک سرریز پشته خواهد بود.
اما در اینجا ما می بینیم که به روز رسانی در حال وقوع است از آنجایی که ما در حال به روز رسانی شروع + پایان / 2،
ما در حال به روز رسانی استدلال نهایی در اینجا، ما در حال به روز رسانی استدلال شروع کنید.
بنابراین در تمام تماس های بازگشتی چیزی است که ما در حال به روز رسانی است. باشه.
آیا شما می خواهید به ما راه رفتن را از طریق راه حل های خود را؟ >> مطمئنا.
من با استفاده از SearchHelp به طوری که هر بار که من را به این فراخوانی تابع
من شروع از جایی که من به دنبال در آرایه و پایان
از جایی که من هستم به دنبال آرایه.
>> در هر مرحله که در آن گفت که این عنصر میانه، که شروع + پایان / 2،
است که برابر به آنچه ما به دنبال آن هستید؟
و اگر چنین باشد، پس از آن که ما آن را در بر داشت، و من حدس می زنم که می شود منتقل می شود تا به سطح بازگشت.
و در صورتی که این درست نیست، و سپس بررسی کنید که آیا مقدار متوسط ​​از آرایه بسیار بزرگ است،
که در این صورت ما در نیمه سمت چپ آرایه با رفتن از آغاز تا شاخص متوسط ​​نگاه کنید.
و در غیر این صورت ما در نیمه نهایی.
[Bowden] باشه.
خیلی خوب است.
خوب، پس همه چیز یک زن و شوهر، و در واقع، این یک چیز بسیار سطح بالا
که شما هرگز نیاز به این دوره می دانم، اما درست است.
توابع بازگشتی، شما همیشه می شنویم که آنها به یک معامله بد
چرا که اگر شما به صورت بازگشتی تماس خود را بیش از حد بسیاری از بار، شما سرریز پشته
از آنجا که، همانطور که قبلا گفتم، هر تابع می شود قاب پشته خاص خود را دارد.
بنابراین هر فراخوانی تابع بازگشتی می شود قاب پشته خاص خود را دارد.
بنابراین اگر شما 1،000 تماس بازگشتی، شما 1000 فریم پشته،
و به سرعت شما را به داشتن بیش از حد بسیاری از قاب پشته و همه چیز فقط شکستن منجر شود.
بنابراین به همین دلیل است که توابع بازگشتی به طور کلی بد هستند.
اما یک زیر مجموعه خوب از توابع بازگشتی وجود دارد به نام دم توابع بازگشتی،
و این اتفاق می افتد به عنوان مثال از یک جایی که اگر کامپایلر متوجه این
و آن را باید، من فکر می کنم - در صدای جرنگ جرنگ اگر شما منتقل-O2 پرچم
سپس آن را متوجه خواهید شد این دم بازگشتی است و همه چیز خوب است.
>> این قاب پشته همان بارها و بارها استفاده مجدد برای هر تماس بازگشتی.
و بنابراین از آنجایی که شما با استفاده از همان قاب پشته، شما لازم نیست که به نگرانی در مورد
همیشه سرشار، پشته و در همان زمان، مثل شما قبل از گفت،
جایی که شما را به راست، سپس آن را به بازگشت از این قاب پشته
و تماس 10 به SearchHelp به بازگشت به 9، به بازگشت به 8 است.
به طوری که نیازی نیست که اتفاق می افتد هنگامی که توابع دم بازگشتی.
و بنابراین، آنچه باعث می شود این دم تابع بازگشتی است توجه داشته باشید که برای هر تماس داده شده به searchHelp
تماس بازگشتی که آن را ساخت، آن چیزی است که آن را بازگشت.
بنابراین در اولین تماس به SearchHelp، ما یا بلافاصله بازگشت کاذب،
بلافاصله به راست، و یا ما را به یک تماس بازگشتی به SearchHelp
که در آن چیزی است که ما در حال بازگشت به همان چیزی است که تماس در حال بازگشت است.
و ما می توانیم این کار را انجام دهند که اگر ما چیزی شبیه به نوع int x = SearchHelp، بازگشت X * 2،
فقط برخی از تغییرات تصادفی.
>> بنابراین در حال حاضر این بازگشتی تماس بگیرید، این نوع int x = تماس SearchHelp بازگشتی،
دیگر دم بازگشتی به دلیل آن را در واقع مجبور به بازگشت
برگشت به یک قاب پشته قبلی به طوری که که در تماس قبلی به تابع
می تواند پس از آن انجام کاری با مقدار بازگشتی.
پس این دم بازگشتی نیست، اما آنچه که ما تا به حال قبل از سادگی دم بازگشتی. آره.
[دانشجو] باید مورد پایه دوم در ابتدا چک می شود
زیرا می تواند وضعیت وجود دارد که در آن وقتی که از تو بگذرد این بحث
شما شروع پایان، اما آنها ارزش سوزن.
سوال را می توان به این مورد ما اجرا نمی که پایان ارزش سوزن
یا شروع به پایان =، مناسب، شروع پایان =
و شما در واقع بررسی نشده که ارزش خاصی ندارد،
سپس شروع به + پایان / 2 رفتن به همان مقدار است.
اما ما قبلا هم بازگشته نادرست و ما در واقع هرگز بررسی ارزش است.
بنابراین حداقل، در تماس اول، اگر اندازه 0 است، پس از آن ما می خواهیم به بازگشت غلط است.
اما اگر اندازه 1، پس از آن شروع شده است برای پایان دادن برابر نیست،
و ما حداقل به بررسی یک عنصر است.
اما من فکر می کنم شما درست می گویید که ما می توانیم تا پایان در یک مورد که در آن شروع به + پایان / 2،
آغاز به پایان می رسد تا اینکه همان راه + پایان / 2،
اما ما در واقع هرگز به بررسی آن عنصر است.
>> بنابراین اگر ما ابتدا عنصر وسط ارزش است که ما به دنبال آن هستید،
پس از آن ما می تواند بلافاصله به راست.
دیگری اگر آنها برابر است، پس از آن هیچ نقطه ای در ادامه وجود دارد
از آنجایی که ما فقط می خواهم برای به روز رسانی به صورت که در آن ما را در یک آرایه تک عنصری است.
در صورتی که عنصر تنها یکی از ما به دنبال نمی باشد،
پس از آن همه چیز اشتباه است. آره.
[دانشجو] چیزی است که از آنجا که اندازه است که در واقع بزرگتر از تعداد عناصر موجود در آرایه،
در حال حاضر وجود دارد افست - >> اندازه -
[دانشجو] بگو: اگر آرایه به اندازه 0 بود، پس از آن SearchHelp واقع خواهد شد کومه علف خشک از 0 بررسی
در اولین تماس است.
آرایه اندازه 0 تا 0 است - >> آره.
چیز دیگری که وجود دارد - ممکن است خوب باشد. بیایید فکر می کنم.
بنابراین اگر آرایه به حال 10 عناصر و یکی از میانه ما قصد داریم برای بررسی شاخص 5،
بنابراین ما در حال بررسی 5، و اجازه دهید بگویم که این مقدار کمتر است.
بنابراین ما در حال پرتاب همه چیز را از 5 به بعد.
بنابراین شروع به + پایان / 2 به پایان جدید ما،
بنابراین آره، آن را همیشه به فراتر از انتهای آرایه باقی بماند.
اگر این مورد است، اگر آن را و یا حتی عجیب و غریب بود، و سپس ما را چک کنید، می گویند، 4،
اما ما هنوز دور انداختن -
پس بله، پایان است که همیشه رفتن به فراتر از پایان واقعی از آرایه باشد.
پس ما تمرکز بر روی پایان است که همواره برای رفتن به یکی از پس از آن است.
و بنابراین، اگر آغاز تا کنون پایان برابر، ما را در آرایه ای از اندازه 0.
>> چیز دیگری که من فکر کردم این است که ما در حال به روز رسانی شروع به شروع به + پایان / 2،
بنابراین این مورد است که من با مشکل روبرو شد، که در آن شروع به + پایان / 2
عنصر ما در حال بررسی است.
بیایید می گویند که ما تا به حال 10 عنصر این آرایه است. هر چیز دیگری.
بنابراین شروع به + پایان / 2 است به چیزی مثل این یکی،
و در صورتی که ارزش نیست، می گویند ما می خواهیم برای به روز رسانی.
مقدار بزرگتر است، به طوری که ما می خواهیم در این نیمه از آرایه.
پس چگونه ما در حال به روز رسانی شروع، ما در حال به روز رسانی شروع به در حال حاضر این عنصر است.
اما این هنوز هم ممکن است، کار و یا حداقل، شما می توانید شروع به + پایان / 2 + 1.
[دانشجو] شما لازم نیست که برای پایان دادن به + شروع [نامفهوم] >> آره.
ما در حال حاضر بررسی این عنصر و می دانم که این یکی از ما به دنبال.
بنابراین ما نیاز به به روز رسانی شروع می شود این عنصر است.
ما فقط می تواند آن را و بروید به روز رسانی شروع می شود این عنصر است.
وجود داشته است که تا کنون یک مورد، اجازه دهید بگویم که این پایان بود،
بنابراین پس از شروع خواهد بود + پایان، شروع / 2 خواهد بود.
شروع پایان + - بله، من فکر می کنم می توان آن را در نهایت در بازگشت نامحدود.
بیایید می گویند این فقط یک آرایه با اندازه 2 یا آرایه ای از اندازه 1. من فکر می کنم این کار خواهد کرد.
بنابراین در حال حاضر، راه این است که عنصر و پایان 1 فراتر از آن است.
بنابراین این عنصر است که ما قصد داریم برای بررسی این یکی،
و پس از آن زمانی که شروع ما به روز رسانی ما در حال به روز رسانی شروع می شود 0 + 1/2،
است که به ما در نهایت با شروع این عنصر است.
>> بنابراین ما در حال بررسی عنصر مشابه بارها و بارها.
پس این مورد که در آن هر تماس بازگشتی در واقع چیزی است که باید به روز رسانی است.
بنابراین ما نیاز به شروع + پایان / 2 + 1، و یا دیگری یک مورد وجود دارد
جایی که ما در واقع نه به روز رسانی شروع می شود.
هر کس می بینیم که؟
باشه.
آیا کسی سوال در مورد این راه حل و یا بیشتر نظرات؟
باشه. آیا کسی راه حل تکرار شونده است که همه ما می توانید در نگاه است؟
آیا همه ما آن را به صورت بازگشتی انجام دهید؟
و همچنین من حدس می زنم اگر شما ... او را باز کرد، و سپس شما ممکن است مجبور بازنویسی قبلی خود را.
آیا آن را به طور خودکار ذخیره کنید؟ من مثبت نیست.
آیا کسی تکراری؟
ما می توانیم از طریق آن راه رفتن با هم اگر نه.
ایده این است که رفتن به همان.
تکراری راه حل.
ما قصد داریم تا به همان ایده اساسا
که در آن ما می خواهیم به نگه داشتن مسیر از انتهای آرایه و آغاز جدیدی از آرایه
و انجام این کار بارها و بارها.
و اگر آنچه که ما در حال پیگیری به عنوان شروع و پایان هر چه از وسط قطع کردن،
سپس ما آن را پیدا نمی کند و ما می توانیم بازگشت غلط.
پس چگونه است که من کاری انجام دهید؟ کسی پیشنهاد و یا کد برای من به جلو؟
[دانشجو] آیا در حالی که حلقه. >> آره.
شما در حال رفتن می خواهم به انجام یک حلقه است.
>> آیا کدی که من می تواند بالا بکشد، و یا آنچه که شما قرار شد به پیشنهاد؟
[دانشجو] من فکر می کنم تا. >> همه حق است. این باعث می شود همه چیز آسان تر است. نام و نام خانوادگی شما چه بوده است؟
[دانشجوی] لوکاس.
ویرایشهای 1. باشه.
پایین همان چیزی است که ما به نام شروع قبل از.
تا کاملا آنچه که ما به نام آنکه پایان کار را پیش از.
در واقع، در حال حاضر در داخل آرایه. این یک عنصر ما باید در نظر است.
بسیار پایین 0 است، تا اندازه آرایه - 1،
و در حال حاضر ما در حال حلقه، و ما در حال بررسی -
من حدس می زنم شما می توانید از طریق آن راه رفتن است.
چه تفکر خود را از طریق این؟ پیاده روی ما را از طریق کد شما.
[دانشجو] مطمئنا. نگاهی به ارزش کومه علف خشک در وسط و مقایسه آن را به سوزن.
پس اگر آن را بیش از سوزن خود را، پس از آن شما می خواهید به - آه، در واقع، که به عقب باید.
شما می خواهم به دور انداختن نیمه سمت راست، و آره، که باید راه است.
[Bowden] بنابراین این باید کمتر؟ این است که آنچه به شما گفت؟ >> [دانشجو] آره.
[Bowden] باشه. کمتر.
بنابراین اگر آنچه که ما در حال نگاه کردن به کوچکتر از آنچه ما می خواهیم،
سپس آره، ما می خواهیم به دور انداختن نیمه سمت چپ،
که بدان معنی است که ما در حال به روز رسانی ما با توجه به همه چیز
با حرکت کم به سمت راست از آرایه.
این به نظر می رسد خوب است.
من فکر می کنم آن است که مسئله همان است که ما در یکی از قبلی گفت،
جایی که اگر پایین است 0 و تا 1، و سپس پایین + بالا / 2 رفتن به راه اندازی همان چیزی که به دوباره است.
>> و حتی در صورتی که این مورد نیست، آن است که هنوز هم کارآمد تر است و حداقل
فقط به دور انداختن این عنصر ما فقط نگاه کرد که در آن ما می دانیم اشتباه است.
بسیار پایین + بالا / 2 + 1 - >> [دانشجو] است که باید راه دیگری است.
[Bowden] یا این باید باشد - 1 و یکی دیگر باید باشد + 1.
[دانشجو] و باید وجود داشته باشد دو برابر ورود به سیستم. >> [Bowden] آره.
[دانشجوی] آره.
باشه.
و در نهایت، در حال حاضر که ما این 1 + 1 - چیزی،
- آن را نمی ممکن است - آن است که همیشه ممکن است برای کم تا پایان با یک مقدار بزرگتر از تا؟
من فکر می کنم تنها راهی است که می تواند رخ دهد - آیا ممکن است؟ >> [دانشجو] من نمی دانم.
اما اگر آن را کوتاه می شود و پس از آن می شود منهای 1 و پس از آن - >> آره.
[دانشجو] آن را احتمالا می خراب گرفتن.
من فکر می کنم آن را باید فقط به این دلیل خوب است
برای آن برای پایان دادن به پایین آنها می باید برابر، من فکر می کنم.
اما اگر آنها با هم برابر هستند، پس از آن ما می توانست انجام نمی شود در حالی که حلقه برای شروع
و ما فقط می بازگشته اند ارزش است. بنابراین من فکر می کنم ما در حال حاضر.
توجه کنید که حتی اگر این مشکل این است که دیگر بازگشتی،
همان نوع از ایده ها اعمال می شود که در آن ما می توانید ببینید که چگونه به راحتی خود را lends
برای راه حل بازگشتی توسط این واقعیت است که ما فقط به روز رسانی شاخص ها بارها و بارها،
ما در حال ساخت مشکل کوچکتر و کوچکتر، ما در حال تمرکز بر روی یک زیر مجموعه از آرایه.
[دانشجو] اگر کم است 0 و 1 است، آنها هر دو در 0 + 1/2، که می تواند تا 0،
و پس از آن خواهد بود + 1 خواهد بود - 1.
[دانشجو] ما داریم به کجا چک کردن برابری؟
مثل اگر یکی از متوسط ​​است که در واقع سوزن؟
ما در حال انجام این کار؟ آه!
اگر it's -
بله. ما می توانیم نه فقط انجام آزمون را در اینجا به دلیل اجازه دهید می گویند وسط اول -
[دانشجو] این در واقع مثل پرتاب نمی کند و دور متصل.
بنابراین اگر شما دور انداختن محدود، شما باید آن را چک کنید یا هر چیز دیگری.
ق. آره. >> [دانشجو] آره.
بنابراین در حال حاضر ما یکی از ما در حال حاضر در نگاه دور انداخته،
به این معنی است که ما در حال حاضر نیاز به همچنین دارای
اگر (کومه علف خشک (کم + تا) / 2] == سوزن)، و سپس ما می توانیم بازگشت درست است.
و آیا من را دیگری و یا فقط در صورتی که، به معنای همان چیزی که
زیرا این درست بازگشته اند.
بنابراین من دیگری خواهید قرار دهید اگر، اما مهم نیست.
>> بنابراین اگر دیگری، دیگری این است، و این یک چیز مشترک من انجام می دهم
جایی که حتی اگر این مورد است که در آن همه چیز اینجا خوب است،
مانند کم هرگز نمی تواند بیشتر از بالا، آن را استدلال ارزش در مورد اینکه آیا این درست نیست.
بنابراین شما را به عنوان ممکن است به خوبی می گویند در حالی که کم است کمتر از یا مساوی با
یا در حالی که کم است کمتر از
بنابراین اگر آنها همیشه برابر یا پایین اتفاق می افتد به تصویب،
پس از آن ما می توانیم از این حلقه است.
پرسش ها، نگرانی ها، نظرات؟
باشه. این به نظر می رسد خوب است.
حالا ما می خواهیم به انجام مرتب سازی بر اساس.
اگر ما را به تجدید نظر دوم من، ما می بینیم این همان تعداد،
اما در حال حاضر آنها دیگر به منظور طبقه بندی شده اند.
و ما می خواهیم برای پیاده سازی مرتب سازی بر اساس استفاده از هر الگوریتم O n log n استفاده است.
بنابراین الگوریتم آیا شما فکر می کنید ما در اینجا باید پیاده سازی؟ >> [دانشجو] مرتب سازی بر اساس ادغام خواهند شد.
[Bowden] آره. ادغام مرتب کردن بر اساس O (n log n است) است، به طوری که این چیزی است که ما قصد داریم برای انجام این کار است.
و مشکل این است که به صورت کاملا مشابه،
جایی که آن را به آسانی خود را به یک راه حل بازگشتی آشنایی.
ما همچنین می توانیم با یک راه حل تکرار شونده صورت می گیرد که ما می خواهیم،
اما بازگشتی ساده تر خواهد شد و ما باید بازگشت.
من حدس می زنم ما را از طریق مرتب کردن بر اساس ادغام راه رفتن اول،
اگر چه یک فیلم دوست داشتنی در مرتب کردن بر اساس ادغام حال حاضر وجود دارد. [خنده]
بنابراین مرتب کردن بر اساس ادغام وجود دارد - من به هدر رفتن خیلی از این مقاله است.
آه، فقط یک سمت چپ وجود دارد.
بنابراین ادغام خواهند شد.
اوه، 1، 3، 5.
باشه.
ادغام دو آرایه جداگانه به طول می انجامد.
فردی این دو آرایه ها هم طبقه بندی شده اند.
بنابراین این آرایه، 1، 3، 5، طبقه بندی شده اند. این آرایه، 0، 2، 4، طبقه بندی شده اند.
در حال حاضر آنچه ادغام باید انجام دهید این است که ترکیب آنها را در یک آرایه است که خود طبقه بندی شده اند.
بنابراین ما می خواهیم مجموعه ای از اندازه 6 است که رفتن به این عناصر در داخل از آن
به منظور طبقه بندی شده اند.
>> و بنابراین ما می توانیم با استفاده از این واقعیت است که این دو آرایه مرتب را
برای انجام این کار را در زمان خطی،
معنای زمان خطی اگر این آرایه X اندازه و Y اندازه،
سپس الگوریتم در کل باید O (x + y). باشه.
بنابراین پیشنهادات.
[دانشجو] می تواند ما را از سمت چپ شروع می شود؟
بنابراین شما 0 پایین اول و سپس از شماره 1 قرار داده و پس از آن در اینجا شما در 2 هستید.
پس از آن نوع از مثل شما یک تب است که در حال حرکت به سمت راست است. >> [Bowden] آره.
هر دو از این آرایه اگر ما فقط تمرکز بر روی عنصر سمت چپ.
از آنجا که هر دو آرایه مرتب شده باشد، ما می دانیم که این 2 عنصر
کوچکترین عناصر در هر دو آرایه.
به طوری که بدان معنی است که 1 از 2 عنصر باید کوچکترین عنصر در آرایه ادغام شده ما است.
این فقط اتفاق می افتد که کوچکترین است که در سمت راست این زمان است.
بنابراین 0 ما را، قرار دادن آن در سمت چپ به دلیل 0 این است که کمتر از 1
بنابراین، 0، آن را به موقعیت اول ما را وارد، و پس از آن ما به روز رسانی
در حال حاضر تمرکز بر روی عنصر اول.
و در حال حاضر ما تکرار کنید.
بنابراین در حال حاضر 2 مقایسه کنیم و 1. 1 است کوچکتر، بنابراین خواهیم 1 وارد است.
این اشاره گر به روز رسانی ما برای اشاره به این پسر.
در حال حاضر ما دوباره آن را انجام دهد، بنابراین 2. این به روز رسانی خواهد شد، مقایسه این 2، 3.
این به روز رسانی، و سپس 4 و 5.
به طوری که ادغام خواهند شد.
>> این باید بسیار واضح است که وقت آن است که خطی از آنجایی که ما فقط در سراسر هر یک از عناصر یک بار.
و این بزرگترین گام برای پیاده سازی مرتب سازی بر اساس ادغام در حال انجام این کار است.
و از آن است که سخت نیست.
دو چیز نگران است بیایید می گویند که ما ادغام 1، 2، 3، 4، 5، 6.
در این حالت ما تا پایان در سناریویی که در آن این یکی برای رفتن به کوچکتر،
پس از این اشاره گر ما به روز رسانی، این یکی برای رفتن به کوچکتر، به روز رسانی،
این یکی کوچکتر، و در حال حاضر شما به رسمیت شناختن
هنگامی که شما در واقع اجرا کردن عناصر در مقایسه با.
از آنجا که ما در حال حاضر استفاده می شود کل این آرایه،
همه چیز در این آرایه در حال حاضر فقط به اینجا وارد می شود.
بنابراین اگر ما تا به حال به نقطه ای که یکی از آرایه های ما به طور کامل با هم ادغام شدند در حال حاضر اجرا می شود،
پس ما فقط تمام عناصر آرایه دیگر و قرار دادن آنها را در پایان از آرایه.
بنابراین ما فقط می تواند 4، قرار دادن 5، 6. باشه.
این یک چیز را به مراقب است.
پیاده سازی است که باید مرحله 1.
ادغام مرتب سازی و سپس بر اساس آن، این 2 گام، 2 مرحله احمقانه است.
بیایید فقط این آرایه را به من بدهید.
بنابراین ادغام مرتب کردن بر اساس، مرحله 1 را به صورت بازگشتی آرایه به نیمه شکستن.
بنابراین این آرایه را به دو نیمه تقسیم می شود.
ما در حال حاضر 4، 15، 16، 50 و 8، 23، 42، 108.
و در حال حاضر ما این کار را انجام دوباره و ما این کار را به دو نیمه تقسیم شده است.
من آن را در این سمت انجام درست.
SO 4، 15 و 16، 50.
ما می خواهیم به همان چیزی که در اینجا انجام دهید.
و در حال حاضر ما آن را به دو نیمه تقسیم شده دوباره.
و در حال حاضر 4، 15، 16، 50.
به طوری که مورد پایگاه ما.
هنگامی که آرایه از اندازه 1 هستند، پس ما را با تقسیم به دو نیمه متوقف شود.
>> حالا چه ما این کار را انجام دهند؟
ما تا پایان این نیز خواهد شد شکستن به 8، 23، 42، و 108.
بنابراین در حال حاضر که ما در این نقطه هستیم، در حال حاضر دو تا از مرتب کردن بر اساس ادغام ادغام جفت به لیست گام.
بنابراین ما می خواهیم به ادغام این. ما فقط ادغام تماس بگیرید.
ما می دانیم که ادغام خواهد شد این کار را به منظور طبقه بندی شده اند بازگشت.
4، 15.
حالا ما می خواهیم به این ادغام، و این فهرست را با کسانی که به منظور طبقه بندی شده اند بازگشت،
16، 50.
ما ادغام آن - من نمی توانم نوشتن - 8، 23 و 42، 108.
بنابراین ما باید جفت ادغام یک بار.
در حال حاضر ما فقط دوباره ادغام خواهند شد.
توجه داشته باشید که هر یک از این لیست طبقه بندی شده اند را در خود دارد،
و پس از آن ما فقط می تواند این لیست یک لیست از اندازه 4 است که طبقه بندی شده اند را به ادغام
و ادغام این دو لیست برای به دست آوردن یک لیست از اندازه 4 است که طبقه بندی شده اند.
و در نهایت، ما می توانیم یک لیست از اندازه 8 است که طبقه بندی شده اند به این دو لیست از اندازه 4 ادغام خواهند شد.
بنابراین برای دیدن این است که به طور کلی n log n استفاده، ما در حال حاضر را دیدم که ادغام خطی است،
بنابراین، هنگامی که ما در حال خرید و فروش با ادغام این پس مانند هزینه های کلی از ادغام
برای این دو لیست فقط 2 - به دلیل
یا خوب، آن O از N، N در اینجا این است که فقط این 2 عنصر، پس از آن، 2.
و این 2 خواهد بود (2) و این 2 خواهد بود 2 و این 2 خواهد بود 2.
تا سراسر همه از ادغام است که ما باید انجام دهیم، ما تا پایان انجام N.
مانند 2 + 2 + 2 + 2 8 است، که N،
بنابراین هزینه ادغام در این مجموعه N.
و سپس همان چیز در اینجا.
خواهیم این 2، ادغام، سپس این 2 و به صورت جداگانه این ادغام چهار عملیات را انجام دهید،
این ادغام چهار عملیات را، اما بار دیگر، در بین تمام این،
ما تا پایان ادغام N چیزهای کل، و در این مرحله طول می کشد N.
و به این ترتیب هر سطح، طول می کشد n عنصر با هم ادغام شدند.
>> و چگونه بسیاری از سطوح وجود دارد؟
در هر سطح، آرایه ما رشد می کند به اندازه 2.
آرایه ما از اندازه 1 هستند، در اینجا آنها را با اندازه 2 هستید، در اینجا آنها از اندازه 4 هستید،
و در نهایت، آنها از اندازه 8 هستید.
پس از آن دو برابر شده است، قصد دارد به عنوان یک کل از ورود نفر از این سطوح است.
بنابراین با ورود N سطح، هر سطح فردی در عملیات کل،
ورود N N الگوریتم.
پرسش و پاسخ؟
مردم در حال حاضر در مورد چگونگی اجرای این پیشرفت؟
هر کسی که در حال حاضر در دولت که در آن من فقط می توانید کدهای خود را بالا بکشد؟
من می توانم یک دقیقه به من بدهید.
این یکی برای رفتن به دیگر.
من به شدت توصیه عود -
شما لازم نیست که برای انجام این کار بازگشت برای ادغام
به خاطر بازگشت برای ادغام، شما در حال رفتن به یک دسته از اندازه های مختلف به تصویب.
شما می توانید، اما آن را آزار دهنده است.
اما بازگشت برای مرتب کردن بر اساس خود بسیار آسان است.
شما فقط به معنای واقعی کلمه در نیمه سمت چپ تماس، مرتب کردن بر روی نیمه راست. باشه.
هر کس هر چیزی می توانید بکشید تا هنوز؟
وگرنه من یک دقیقه به من بدهید.
باشه.
هر کس چیزی است که ما می توانیم با آن کار کنند؟
وگرنه ما فقط با این کار و پس از آن از آنجا گسترش.
>> هر کس بیش از این که من می تواند بالا بکشد؟
[دانشجوی] آره. شما می توانید بکشید تا مال من است. >> همه حق است.
بله!
[دانشجو] بسیاری از شرایط وجود دارد. >> آه، ساقه. آیا می توانم به شما -
[دانشجو] من باید آن را ذخیره کنید. >> آره.
بنابراین ما انجام ادغام به طور جداگانه.
آه، اما از آن است که بد نیست.
باشه.
بنابراین مرتب کردن بر اساس خود فقط خواستار mergeSortHelp.
به ما توضیح دهید چه mergeSortHelp می کند.
[دانشجوی] MergeSortHelp تا حد زیادی می کند دو مرحله ی اصلی،
است که به مرتب کردن بر اساس هر یک از نیمی از آرایه و سپس به ادغام هر دو آنها است.
[Bowden] بسیار خوب، من یک لحظه هم به من بدهید.
من فکر می کنم این - >> [دانشجو] من نیاز به -
آره. من گم شده چیزی.
در ادغام، من می دانم که من نیاز به ایجاد یک آرایه جدید
زیرا من می توانم آن را در جای خود انجام نمی دهد. >> بله. شما می توانید نیست. درست است.
[دانشجو] بنابراین یک آرایه جدید ایجاد کنم.
من در پایان از ادغام دوباره تغییر را فراموش کرده است.
باشه. ما نیاز به یک آرایه جدید.
مرتب کردن بر اساس ادغام، این است که تقریبا همیشه درست است.
بخشی از هزینه از یک الگوریتم بهتر و زرنگ
تقریبا همیشه نیاز به استفاده از حافظه کمی بیشتر است.
بنابراین در اینجا، مهم نیست که چگونه شما انجام دهد ادغام مرتب کردن بر اساس:
شما ناگزیر به استفاده از برخی از حافظه اضافی نیاز دارند.
او یک آرایه جدید است.
و پس از آن به شما می گویند در پایان ما تنها نیاز داریم برای کپی کردن آرایه به آرایه اصلی.
[دانشجو] من فکر می کنم، آره.
من نمی دانم در صورتی که در شمارش توسط مرجع یا هر چیز دیگری کار می کند -
آره، آن را به کار می کنند. >> [دانشجو] باشه.
آیا شما سعی می کنید اجرای این؟ >> [دانشجو] نه، هنوز نه. >> درست است.
سعی کنید با اجرای آن، و سپس من در مورد آن را برای یک ثانیه صحبت کنید.
[دانشجو] من نیاز به داشتن تمام نمونه های عملکرد و همه چیز، هر چند، درست است؟
نمونه های تابع. بله - آه، تو مثل بود.
مرتب سازی بر اساس خواستار mergeSortHelp.
>> بنابراین به منظور مرتب سازی بر به تماس mergeSortHelp، mergeSortHelp یا باید شده است را تعریف
قبل از مرتب کردن بر اساس و یا ما فقط نیاز به نمونه است. فقط و کپی پیست کنید که.
و به همین ترتیب، mergeSortHelp خواستار ادغام،
اما ادغام هنوز تعریف نشده است، بنابراین ما فقط می تواند mergeSortHelp می دانیم
که این چیزی است که ادغام شبیه، و این که.
بنابراین mergeSortHelp.
در حال حاضر موضوع در اینجا جایی که در حال حاضر هیچ مورد پایه.
MergeSortHelp بازگشتی است، بنابراین هر تابع بازگشتی
رفتن به نیاز برخی از مرتب کردن بر اساس مورد پایه می دانم که زمانی که برای متوقف کردن صورت بازگشتی خود خواستار است.
آنچه که مورد پایگاه ما را از رفتن به اینجا؟ آره.
[دانشجوی] اگر به اندازه 1؟ >> [Bowden] بله.
پس چون ما را دیدم در سمت راست وجود دارد، ما را متوقف آرایه تقسیم
زمانی که ما به آرایه از اندازه (1)، که به ناچار خود را طبقه بندی شده اند.
بنابراین اگر اندازه برابر با 1، ما می دانیم که آرایه در حال حاضر طبقه بندی شده اند،
بنابراین ما فقط می تواند بازگشت.
>> توجه داشته باشید که از درجه اعتبار ساقط است، بنابراین ما هیچ چیز خاصی نمی گرداند، ما فقط بازگشت.
باشه. به طوری که مورد پایگاه ما است.
من حدس می زنم در مورد پایگاه ما همچنین می تواند اگر ما اتفاق می افتد به ادغام مجموعه ای از اندازه 0،
ما احتمالا می خواهید به توقف در برخی از نقطه،
بنابراین ما فقط می تواند به اندازه کمتر از 2 یا کمتر از یا برابر با 1 می گویند
به طوری که این کار برای هر آرایه است.
باشه.
به طوری که مورد پایگاه ما است.
حالا شما می خواهید به ما از طریق ادغام راه رفتن؟
همه این موارد به چه معنی است؟
به اینجا ما فقط به انجام همان ایده، -
[دانشجو] من نیاز به عبور از اندازه با تمام تماس های mergeSortHelp.
من به اندازه اولیه اضافی اضافه شده است و آن وجود ندارد، مانند اندازه 2 /.
[Bowden: اوه، اندازه / 2، اندازه 2 /. >> [دانشجوی] آره، و همچنین در تابع فوق را به عنوان است.
[Bowden] در اینجا؟ >> [دانش آموز فقط اندازه. >> [Bowden] آه. حجم، اندازه؟ >> [دانشجو] آره.
[Bowden] باشه.
اجازه دهید من فکر می کنم برای یک ثانیه.
آیا ما به یک مسئله اجرا شود؟
ما همیشه درمان سمت چپ را با 0. >> [دانشجوی] شماره
که اشتباه است بیش از حد. متأسفم. باید شروع می شود. آره.
[Bowden] باشه. من دوست دارم که بهتر است.
و پایان. باشه.
بنابراین در حال حاضر شما می خواهید به ما از طریق ادغام راه رفتن؟ >> [دانشجو] باشه.
من فقط راه رفتن را از طریق این آرایه جدید است که من ایجاد کرده اید.
اندازه آن به اندازه بخشی از آرایه است که ما می خواهیم طبقه بندی شده اند
و در تلاش برای پیدا کردن این عنصر است که من باید در مرحله آرایه جدید قرار داده است.
بنابراین برای انجام این کار، ابتدا من چک کردن اگر در نیمه سمت چپ آرایه ادامه می دهد، به عناصر هر
و اگر آن را ندارد، پس از آن شما به پایین که به بیماری دیگری، که فقط می گوید:
خوب، باید آن را در آرایه درست می شود، و ما که در شاخص فعلی newArray قرار داده است.
>> و پس از آن در غیر این صورت، من چک کردن اگر در سمت راست از آرایه نیز به پایان رسید،
که در این صورت من فقط در سمت چپ قرار داده است.
است که در واقع ممکن است لازم باشد. مطمئن نیستم.
اما به هر حال، دو نفر دیگر چک کدام یک از این دو کوچکتر در سمت چپ و یا سمت راست.
و همچنین در هر مورد، من افزایش هر کدام از مکان نگه دار من افزایش است.
[Bowden] باشه.
که به نظر می رسد خوب است.
آیا کسی نظر و یا نگرانی و یا سوالات؟
بنابراین چهار مورد که در حال حاضر به آوردن همه چیز را به تنها بودن - و یا آن را حدود پنج به نظر می رسد -
اما ما مجبور به در نظر گرفتن که آیا آرایه سمت چپ است از چیزهایی که ما نیاز به ادغام اداره،
آیا آرایه راست است از چیزهایی که ما نیاز به ادغام اداره -
اشاره من در هیچ چیز.
به طوری که آیا آرایه سمت چپ است که از چیزهایی که اجرا و یا آرایه حق است از همه چیز اجرا شده است.
این دو مورد است.
ما همچنین باید در مورد بی اهمیت که آیا چیزی که سمت چپ کمتر از چیزی که درست است.
سپس ما می خواهیم به چیزی که سمت چپ را انتخاب کنید.
اینها موارد است.
پس این درست بود، به طوری که که.
آرایه را ترک کردند. 1، 2، 3. باشه. پس بله، کسانی هستند که چهار چیز را ما در صورت تمایل به انجام.
و ما نمی خواهد بیش از یک تکرار شونده راه حل.
من توصیه می کنم -
ادغام مرتب سازی بر اساس عنوان مثال از یک تابع است که هر دو دم نه بازگشتی است،
کار آسانی نیست به آن دم بازگشتی،
بلکه آن را بسیار آسان نیست، آن را به تکراری.
این بسیار آسان است.
این پیاده سازی مرتب سازی بر اساس ادغام،
ادغام، بدون توجه به آنچه شما انجام دهد، شما در حال رفتن برای ساخت ادغام شده است.
>> بنابراین به صورت بازگشتی مرتب سازی بر اساس ساخته شده در بالا از ادغام فقط ادغام این سه خط است.
مکررا، آن است که بیشتر آزار دهنده و مشکل تر به فکر کردن در مورد.
اما توجه کنید که آن دم بازگشتی از سال mergeSortHelp نیست - هنگامی که آن را می نامد، خود -
هنوز نیاز به انجام کارهای پس از این تماس بازده بازگشتی.
پس این قاب پشته باید ادامه یابد تا حتی پس از فراخوانی این وجود داشته باشد.
و پس از آن زمانی که شما این قاب پشته باید به وجود
زیرا حتی پس از این تماس، ما هنوز نیاز به ادغام.
و آن است که کوچک اما نه بیاهمیت است که این دم را بازگشتی.
پرسش و پاسخ؟
بسیار خوب.
بنابراین رفتن به مرتب سازی - آه، دو چیز من می خواهم برای نشان دادن وجود دارد. باشه.
بازگشت به مرتب کردن بر اساس، ما از این به سرعت انجام دهد.
و یا جستجو. مرتب سازی بر اساس؟ مرتب سازی بر اساس. آره.
بازگشت به آغاز مرتب سازی بر.
ما می خواهیم برای ایجاد یک الگوریتم که نوع آرایه با استفاده از هر الگوریتم
O از N.
پس این چگونه ممکن است؟ آیا هر کسی که هر نوع -
من قبل از اینکه در اشاره کرد -
اگر ما در مورد بهبود از ورود N N به O از N،
ما را بهبود الگوریتم ما به زمان عاقل،
که به معنی چیزی است که می خواهیم به نیاز به انجام به را تشکیل می دهند که برای؟
[دانشجو] فضا. >> آره. ما قصد داریم تا با استفاده از فضای بیشتری است.
و نه حتی فقط فضای بیشتر، از آن نمایی فضای بیشتری است.
بنابراین من فکر می کنم این نوع از الگوریتم چیزی است که شبه، polynom شبه -
شبه - من نمی توانم به یاد داشته باشید. چیزی شبه.
اما این دلیل است که ما نیاز به استفاده از فضای بسیار
که این دست یافتنی است، اما واقع بینانه نیست.
>> و چگونه انجام این کار ما رسیدن به؟
ما می توانیم این کار را در صورتی که ما را تضمین دستیابی به آن است که هر عنصر در آرایه
در زیر به یک اندازه خاص است.
بنابراین اجازه دهید فقط می گویند که اندازه 200،
هر عنصر در یک آرایه زیر اندازه 200.
و این است که در واقع بسیار واقع بینانه است.
شما به راحتی می توانید یک آرایه است که شما می دانید همه چیز در آن
رفتن به کمتر از برخی از شماره.
مثل این می مونه که شما باید برخی از بردار کاملا گسترده و یا چیزی
اما شما می دانید همه چیز را بین 0 و 5،
سپس آن را به میزان قابل توجهی سریعتر برای انجام این کار است.
و در هر یک از عناصر محدود 5 است،
بنابراین این محدود، که این است که چه مقدار از حافظه شما استفاده خواهیم نمود.
بنابراین محدود 200 است.
در تئوری این است که همیشه وجود دارد محدود از یک عدد صحیح تنها می تواند تا 4 میلیارد دلار باشد،
اما این غیر واقعی از آن پس ما می شود با استفاده از فضا
منظور از 4 میلیارد. به طوری که غیر واقعی است.
اما در اینجا، ما محدود به ما می گویند 200 است.
ترفند برای انجام آن را در O از N است که ما یک آرایه به نام شمارش از اندازه محدود است.
پس در واقع، این یک میانبر برای - من واقعا نمی دانم اگر صدای جرنگ جرنگ می کند این است.
اما در GCC حداقل - I'm فرض صدای جرنگ جرنگ آن را بیش از حد -
این فقط کل آرایه را به 0s و مقداردهی اولیه.
بنابراین اگر من نمی خواهم به انجام این کار، پس از آن من به طور جداگانه می تواند برای انجام (اعضای هیات من = 0؛
I <متصل به، من + +) و تعداد [من] = 0؛
بنابراین در حال حاضر همه چیز تا 0، مقداردهی اولیه می شود.
من بیش از آرایه تکرار،
و آنچه من انجام می دهند این است که من شمارش تعداد هر یک از - اجازه دهید در اینجا به پایین.
در حال حاضر 4، 15، 16، 50، 8، 23، 42، 108.
چیزی که من شمارش تعداد تکرار هر یک از این عناصر است.
اجازه دهید در واقع اضافه کردن یک زن و شوهر بیشتر در اینجا با برخی از تکرار.
بنابراین ارزش ما در اینجا، ارزش آن در حال رفتن به آرایه های [i].
بنابراین وال می تواند 4 یا 8 یا هر چیز دیگری.
و در حال حاضر من به شمارش چه بسیاری که ارزش من دیده ام،
به طوری که تعداد [VAL] + +؛
بعد از این انجام شده است، مهم است این است که به دنبال چیزی شبیه به 0001 است.
اجازه دهید شمارش [VAL] - مکلف + 1.
>> حالا که فقط برای این واقعیت است که ما در حال شروع از 0 حساب.
بنابراین اگر 200 است که برای رفتن به بزرگترین ما شماره،
و سپس 0 تا 200 201 چیز است.
بنابراین شمارش، آن را مانند 00،001 زیرا ما یکی از 4.
سپس خواهیم 0001 که در آن ما یک 1 در صفحه اول 8 تعداد را داشته باشند.
خواهیم 2 در شاخص از 23rd تعداد را داشته باشند.
خواهیم 2 در 42 شاخص از تعداد را داشته باشند.
بنابراین ما می توانیم به تعداد استفاده کنید.
بنابراین num_of_item = شمارش های [i].
و بنابراین اگر num_of_item 2، این بدان معناست که ما می خواهیم برای وارد کردن 2 شماره من
به ما آرایه طبقه بندی شده اند.
بنابراین ما نیاز به پیگیری تا چه حد ما را به آرایه.
بنابراین شاخص = 0.
آرایه - من فقط آن را بنویسید.
شمارش -
آرایه [فهرست مطالب + +] = من؛
این است که آنچه را که من می خواهم؟ من فکر می کنم این چیزی است که من می خواهم.
بله، این به نظر می رسد خوب است. باشه.
پس آیا همه درک چه هدف از آرایه شمارش من است؟
شمارش تعداد تکرار هر یک از این اعداد است.
سپس من به تکرار بیش از آن آرایه شمارش،
و موقعیت i ام در آرایه شمارش
از من این است که باید در درون آرایه مرتب شده ظاهر می شود.
به همین دلیل است که تعداد از 4 رفتن به (1)
و تعداد از 8 رفتن به (1)، شمارش از 23 به 2 است.
به طوری که بسیاری از آنها من می خواهم به من آرایه ای طبقه بندی شده اند وارد است.
پس من فقط انجام دهد.
من قرار دادن num_of_item من به من آرایه ای طبقه بندی شده اند.
>> پرسش و پاسخ؟
و به این ترتیب باز هم، این زمان خطی است که از آنجا که ما بیش از این تکرار یک بار،
اما آن را نیز خطی در آنچه در این شماره اتفاق می افتد،
و پس از آن به شدت در مورد آنچه متصل به خود را دارد.
با متصل از 200، که آن بد نیست.
اگر متصل به خود را در حال رفتن به 10،000، پس از آن که کمی بدتر،
اما اگر متصل به خود را در حال رفتن به 4 میلیارد دلار، که کاملا غیر واقعی است
و این آرایه به اندازه 4 میلیارد دلار، که غیر واقعی است.
به طوری که که. پرسش و پاسخ؟
[پاسخ دانش آموز نامفهوم] >> درست است.
من متوجه شدم یک چیز دیگر هنگامی که ما به رفتن را از طریق.
من فکر می کنم مشکل این بود که در لوکاس و احتمالا هر یکی از ما را دیده ام.
من کاملا فراموش کرده.
تنها چیزی که من می خواستم به اظهار نظر در مورد این است که زمانی که شما در حال خرید و فروش با چیزهایی مانند شاخص،
شما واقعا هرگز دیدن این زمانی که شما در حال نوشتن یک حلقه for،
اما از نظر فنی، هر زمان که شما در حال خرید و فروش با این شاخص،
شما خیلی باید همیشه با اعداد صحیح بدون علامت رسیدگی کند.
دلیل این کار این است که زمانی که شما در حال خرید و فروش با اعداد صحیح امضا شده،
بنابراین اگر شما دارای 2 امضا شده اعداد صحیح و به آنها اضافه کنید با هم
و آنها در نهایت بیش از حد بزرگ است، سپس شما را تا پایان با یک عدد منفی است.
به طوری که سرریز عدد صحیح است.
>> اگر من اضافه کردن 2 میلیارد و 1 میلیارد، من در نهایت با منفی 1 میلیارد است.
که چگونه اعداد صحیح بر روی کامپیوتر کار می کنند.
بنابراین این مشکل با استفاده از -
خوب مگر اینکه پایین اتفاق می افتد می شود 2 میلیارد دلار و تا اتفاق می افتد می شود 1 میلیارد،
پس از آن این است که رفتن به منفی 1 میلیارد است و پس از آن ما در حال رفتن به تقسیم آن را در 2
و در نهایت با منفی 500 میلیون است.
پس این تنها یک مسئله اگر شما اتفاق می افتد را از طریق یک آرایه است
از میلیاردها از چیزها.
اما اگر + پایین تا سرریز اتفاق می افتد، پس از آن که یک مشکل است.
به محض این که ما آنها را بدون علامت، و سپس 2 میلیارد به علاوه 1 میلیارد 3 میلیارد دلار است.
3 میلیارد تقسیم بر 2 1.5 میلیارد دلار است.
بنابراین به محض این که آنها بدون علامت، همه چیز کامل است.
و به طوری که موضوع زمانی که شما در حال نوشتن خود را برای حلقه ها،
و در واقع، آن را احتمالا از آن به صورت خودکار.
در واقع فقط به شما داد.
بنابراین اگر این عدد را بیش از حد بزرگ است فقط در یک عدد صحیح باشد، اما آن را در یک عدد صحیح بدون علامت مناسب،
آن را در شما داد، به طوری که به همین دلیل شما به این موضوع واقعا هرگز اجرا است.
شما می توانید ببینید که یک شاخص است هرگز به منفی باشد،
و تا زمانی که شما در حال تکرار بیش از یک آرایه،
شما می توانید به تقریبا همیشه بدون علامت اعضای هیات من می گویند، اما شما واقعا لازم نیست که.
چیزهایی که در حال رفتن به محل کار بسیار خوبی است.
باشه. [زمزمه] چه زمانی است؟
آخرین چیزی که من می خواستم برای نشان دادن - و من فقط آن را انجام دهید واقعا سریع است.
شما می دانید که ما چگونه # تعریف، بنابراین ما # می تواند حداکثر 5 یا چیزی تعریف کنید؟
بیایید MAX نمی کنند. # محدود به 200 تعریف کنیم. این چیزی است که ما قبل از انجام.
است که به تعریف یک ثابت است که فقط برای رفتن به کپی و جا به جا
هر جا که اتفاق می افتد به نوشتن مکلف.
>> بنابراین، ما در واقع می تواند با # تعریف می کند انجام دهد.
# ما می توانید توابع را تعریف کنیم.
آنها واقعا نمی توابع، اما ما آنها را توابع.
به عنوان مثال می تواند چیزی شبیه به MAX (x، y) را به عنوان (؟: X X <Y Y) تعریف شده است. باشه.
بنابراین شما باید به نحو عملگر سه تایی استفاده می شود،
اما X کمتر از Y است؟ بازگشت Y، دیگری X بازگشت.
بنابراین شما می توانید ببینید که شما می توانید این تابع را جداگانه،
و تابع می تواند مانند بولی MAX طول می کشد 2 استدلال، بازگشت.
این یکی از آنهایی که شایع ترین که من می بینم مثل این انجام شده است. ما آنها را ماکروها.
این یک ماکرو است.
این نحو برای آن است.
شما می توانید یک ماکرو برای انجام هر آنچه می خواهید بنویسید.
شما غالبا ماکرو برای اشکال زدایی printfs و چیزهای ها را ببینید.
بنابراین یک نوع از printf، ثابت ویژه در C مانند زیرین به خط زیرین به وجود دارد،
2 تأکید LINE تأکید،
و همچنین من فکر می کنم 2 تأکید تابع وجود دارد. که ممکن است آن را. چیزی شبیه به آن.
کسانی که همه چیز را با نام تابع جایگزین خواهد شد
یا شماره خط است که شما در آن هستید.
اغلب، شما ارسال اشکال زدایی printfs که پایین در اینجا من می تواند فقط بنویسید
اشکال زدایی و آن را به شماره خط و تابع که من اتفاق می افتد به چاپ
که آن را بیانیه ای که DEBUG مواجه می شوند.
و شما همچنین می توانید چیزهای دیگر را چاپ کنید.
بنابراین یک چیز شما باید مراقب این است اگر من به اتفاق # تعریف DOUBLE_MAX
به عنوان چیزی شبیه به 2 * Y و 2 * X.
بنابراین دلیل هر چیز دیگری، شما اتفاق می افتد که بسیاری انجام دهد.
پس از آن یک ماکرو را.
این است که در واقع شکسته شده است.
من می خواهم آن را با انجام کاری مانند DOUBLE_MAX (3، 6) تماس بگیرید.
بنابراین آنچه که باید می گردد؟
[دانشجو] 12.
بله، 12 باید بازگشت، و 12 بازگشته است.
3 می شود برای x جایگزین، 6 می شود سالانه برای جایگزین، و ما بازگشت 2 * 6، 12.
در حال حاضر آنچه در مورد این؟ چه باید می گردد؟
[دانشجو] 14. >> در حالت ایده آل، 14.
این موضوع این است که کار چگونه مخلوط را تعریف می کند، به یاد داشته باشید آن را یک کپی تحت اللفظی و رب
از همه چیز تا حد زیادی، پس چه این به عنوان تفسیر
است 3 کمتر از 1 به علاوه 6، 2 بار در 1 به علاوه 6، 2 بار 3.
>> بنابراین به همین دلیل شما تقریبا همیشه بپیچید همه چیز را در پرانتز.
هر متغیر شما تقریبا همیشه در پرانتز بپیچید.
مواردی که شما لازم نیست که در وجود دارد، مثل من می دانم که من لازم نیست که برای انجام این کار در اینجا
زیرا کمتر از است که تقریبا همیشه فقط رفتن به محل کار،
هر چند که حتی ممکن است درست باشد.
اگر چیزی است که مسخره مانند DOUBLE_MAX (1 == 2) وجود دارد،
پس از آن که با 3 کمتر از 1 جایگزین برابر برابر 2،
و به همین ترتیب پس از آن که آن را به انجام 3 کمتر از 1، کند که برابر 2،
که آن چیزی نیست که ما می خواهیم.
لذا به منظور جلوگیری از هر گونه مشکلات اولویت عملگر،
همیشه در پرانتز بپیچید.
باشه. و آن را، 5:30.
اگر شما هر گونه سوال در مورد pset، به ما اطلاع دهید.
باید سرگرم کننده است، و نسخه هکر نیز بسیار واقعی تر است
از نسخه هکر از سال گذشته است، بنابراین ما امیدواریم که بسیاری از شما آن را امتحان کنید.
سال گذشته بسیار سخت و طاقت فرسا بود.
>> [CS50.TV]