[Powered by Google Translate] [Дел 3] [Помалку Комфорни]
>> [Нејт Hardison] [Универзитетот Харвард]
>> [Ова е CS50.] [CS50.TV]
>> Добро, ајде да започнете.
Добредојдовте на недела 4 од CS50.
Ако вие момци се отвори веб пребарувач и ќе отвори pset 3,
Трка со CS50, ние ќе тргнат
преку делот на прашања таму.
Исто како и минатата недела, ќе се работат во CS50 простори,
ако вие исто така ќе повлече дека до, како и,
и ако се оди напред и да ја посетите овој линк дека имам се тука на врвот.
Тоа е време за да започнете.
Имаме нашата мала hi програмата тука. Ништо луд.
Една од првите работи што сакам да направам со вас момци денес е поминат неколку решенија
да Проблем Постави 1, вид на пример решенија,
само така може да се добие чувство за она што видови на кодот персонал е пишување,
какви код другите ученици се пишува,
и имаш да погледнам во него, бидејќи знам дека е чудно
кога ќе ја поднесете решение за проблемот во собата и се коментари
на своја верзија, но понекогаш тоа е корисно да видите како другите луѓе тоа го правеше,
особено оние кои се убаво гледа.
За најголем дел, јас бев многу импресиониран со решенија кои вие момци произведени.
Јас се уште не се почнати во потрага на вашиот проблем Постави 2s, но ако тие се нешто како првиот,
тоа не значи ништо, но добри нешта.
>> Ако погледнете во мојот ревизии, да почнеме сите патот надолу во Ревизија 1,
и ние ќе земеме еден брз поглед на решение Марио.
Ако се повлече овој горе, овие програми кои ние ќе ги презентираат се точни.
Немаше точноста проблеми со овие проблеми, туку
сакаме да зборуваме малку за различните дизајн прашања
кои биле користени тука.
Една од работите што беше интересно за решение
е тоа што користи овој нов конструкт наречен фунта дефинира,
понекогаш исто така познат како хаш се дефинира.
Дозволете ми да зумирате на тоа овде.
А # define ти овозможува да даде имињата на овие броеви во вашата програма.
Во овој случај, максималната висина на пирамидата во Марио
беше 23 и наместо ставање 23 во мојот код-
ние ќе се однесуваат на тоа како тешко кодирање 23 -
наместо тоа дава името MAX_HEIGHT до тој број,
така што тука долу во моето не-додека јамка
вие всушност може да се однесува MAX_HEIGHT
наместо на ставање на бројот 23 внатре
[Студентски] Која е предноста на тоа го прават?
Тоа е големо прашање.
Една од нив е читливост.
Предноста на користење на овој # define е читливост.
Кога читам овој код, можам да видам што се случува.
>> Јас може да се види во оваа состојба тука дека ние сме тестирање
за висината е <0, што би можеле да се дефинира и
да биде минимална висина или мин висина.
Од друга предност е тоа што јас тогаш може да го прочитате остатокот на ред за да ја видите
дека ние сме, исто така, проверка за да бидете сигурни дека висината не е поголема од висината Макс,
затоа ние ќе продолжиме додека висината е поголема од висината макс.
Од друга предност е-ако јас одзумирате малку тука-
ако јас ја извршите оваа програма и јас се кандидира, да речеме, со 23 токму сега,
тоа ќе се печати сите 23 реда само така.
Но велат дека сакав да се промени висината Макс,
и сега сакам да го ограничи максималната висина на пирамидите
да биде само велат човек, тоа беше фанки.
# Include , # define MAX_HEIGHT,
и да речеме сакавме да го поставите тоа еднаква на 10.
Сега во овој момент, сите морав да ја направам е да го промени тоа во оваа локација.
Можам да прекомпајлирате код, и сега ако јас се обидувам и напишете во 12,
ќе ме натера повторно.
Во овој случај, ние сме само користење MAX_HEIGHT еднаш.
Тоа не е толку голема за кавга да оди во
и промени во додека јамка ако треба да се.
Но, во програми каде сте референцирање исто магичната бројка
одново и одново, ова # define механизам е навистина корисна
затоа што само ја промените едно време на врвот на датотеката-тоа е типично каде што ќе ги стави-
и промената percolates низ остатокот на датотеката.
>> Други работи што сакав да се напомене во оваа задача, кој мислев изгледаше навистина убаво,
еден беше именувањето на променливи.
Гледаш дека тука имаме цел број променливи се нарекува ред и т.н. висина.
Простори, хашови, тоа им помага да го кодот малку повеќе може да се чита,
прави малку повеќе разбирливо она што всушност се случува.
Ова е во контраст со користење на, да речеме, случаен букви
или само gobbledygook заедно.
Во последната работа што ќе укаже дека во за петелки,
често овие iterator променливи, овие бројачи кои ги користите во вашите за петелки,
тоа е стандард и конвенционалните да ги започнете со било кој јас и тогаш ј а потоа k
и се случува од таму, ако ви требаат повеќе променливи,
и ова е само конвенцијата.
Постојат многу конвенции.
Тоа зависи од програмскиот јазик сте го користите.
Но во C, ние обично на проектот со i.
Тоа не дава никаква смисла да се користи, да речеме, или б
во зависност од ситуацијата.
Тоа е тоа за оваа.
Ако сега се повлече верзии 2, ќе видите уште една Марио,
и овој е сличен на другите она што го видоа,
но тоа не нешто вид на кул.
Ако ги погледнеме во овој дел, токму тука во внатрешниот за телефонска линија,
тие се користат некои луди гледа синтакса тука правото во оваа линија.
Ова се нарекува троичен оператор.
Тоа е ако друг изјава кондензирана во една линија.
Состојбата е овој дел во загради.
Тоа е еквивалентно на велејќи дека ако ѕ <висина - I - 1.
И тогаш што содржината на таа доколку блок ќе биде се во просторот
и тогаш содржината на она што друго би било се тоа #.
Тоа е суштина доделување на простор за оваа променлива.
Тоа е ставање на просторот во содржината на блок променлива,
ако овој услов е исполнет, а ако услов не е исполнет,
тогаш блок променлива добива овој #.
И тогаш, се разбира, наместо за градење на цела низа
и печатење што на крајот на ова решение тоа отпечатоци од еден карактер во исто време.
Прилично кул.
>> Уште неколку работи да се погледне. Ние ќе се движи кон алчен.
Сега ако гледаме алчен, овој прв решение
ги користи овие # дефинира доста.
Имаме една константа дефинирани за секоја од различни броеви во оваа програма.
Имаме еден за центи за долар, еден за четвртина, dimes, nickels и пени,
и сега ако ние движете се надолу и прочитате кодот,
можеме да видиме стандард не-додека јамка печатење се надвор.
Вид на суштината на овој проблем е свесен дека
што ви е потребно да се конвертира плови да го прочитате во од корисникот да целобројна
точно да го направите математика, и ова е поради тоа
со броеви со подвижна запирка, како ние разговаравме за во предавање накратко,
тоа не е можно точно да претставуваат секоја вредност на бројот линија
бидејќи постојат бесконечно многу вредности помеѓу 3 и, да речеме, 3,1 дури.
Можете да имаат 3,01 и 3,001 и 3,0001, и можете да продолжувам да одам.
Излегува кога си работат со пари, често сакаат да го претвори
во цел број формат, така што вие не сте губи пени и тој вид на работи.
Тоа го прават и заокружување беше клучот.
Ова решение се користи совршено јасна, голема алгоритам,
кој decremented бројот на центи останатите, прв по квартали,
потоа од страна dimes, а потоа од страна nickels, а потоа од страна на пени,
и додавање на бројот на монетите секој пат.
>> Друго решение што ќе видиме, како што одзумирате и да одат во Ревизија 4,
имаше многу слични почетокот, но наместо него ги користеле div и МО
право овде да се пресмета бројот на центи.
Ова, бројот на кругови е еднаков на бројот на центи поделено со 25,
а причина овој работи е затоа што го правиме број поделба,
па тоа е отфрлајќи било остатокот.
[Студентски] Дали имаме да коментира за пребарување?
Тоа навистина зависи.
[Студентски] Вие сте коментирајќи повеќе од кодот овде.
Да, и така постојат еден куп на различни филозофии за ова.
Мојата лична филозофија е дека вашиот код е навистина вистина,
како вашиот код е она што всушност извршување на компјутерот,
и така вашиот код треба да биде што може да се чита како е можно да не имаат потреба толку многу коментари.
Тоа, рече, кога ќе се прават работи кои се вид на слабо математички
или algorithmically, тоа е добро да коментираат оние, така што ќе може да
додадете дополнителна димензија, екстра слој кој е читање вашиот код.
Во овие решенија, често се коментира повеќе во голема мера само затоа што
сакаме да бидеме во можност да ги дистрибуира и да имаат луѓето ги собереш
и ги прочитате прилично лесно.
Но, дефинитивно, јас ќе се согласат дека ова е тежок.
[Студентски] Но, кога се двоумите, одете потешки?
Кога се двоумите, одете потешки.
Некои луѓе понекогаш ќе каже враќање 0 или нешто слично.
Мислам дека тоа е смешно коментар.
Јасно дека е она што се случува.
Не ми треба англиски да ми каже тоа.
Понекогаш луѓето ќе напише нешто како "kthxbai!"
Тоа е вид на слатки, но исто така, не-
тоа не е правење разлика меѓу коментирајќи поени или не.
Оние видови на коментари се само ха, ха.
Кул.
>> Во овој момент, ајде да почнеме да работиме на проблемот Намести 3 дел на прашања.
Ако вие момци се повлече оваа повторно,
како и со минатата недела, ние нема да се види на шорцеви во оваа секција.
Ние ќе ви момци го направите тоа на свој време и да разговараат за прашања.
Но, сега во овој дел ние ќе потрошите малку повеќе време
зборуваме за помалку од кодирање основите
како што правевме минатата недела, и наместо тоа, ние ќе се фокусираат повеќе на
малку повеќе на теорија, така зборува за бинарни пребарување, а потоа сортирање.
Од оние од вас кои биле следниве заедно со предавање,
некој може да ми даде реприза на она што разликата е
помеѓу бинарни пребарување и линеарно пребарување?
Што се случува? Секако.
Линеарно пребарување пребарувања низ секој елемент во Подредена листа
еден по еден по еден по еден по еден,
и бинарни пребарување дели листа во 2 групи,
проверува дали клучеви вредност која сте во потрага по е поголема или помала од средината вредност
дека сте само најде, и ако тоа е помалку отколку, тоа оди со пониски листа
а потоа се дели дека повторно, дали истата функција
сите патот надолу се додека не најде средина да биде еднаква со вредноста себе.
Право.
>> Зошто ни е гајле?
Зошто зборуваме за бинарни пребарување наспроти линеарно пребарување?
Да.
Бинарни е многу побрзо, па ако се удвои големината на проблемот
тоа трае уште еден чекор наместо двојно повеќе.
Точно.
Тоа е голем одговор.
Линеарно пребарување е многу проверка еден елемент во еден момент,
и како што видовме во првиот ден на предавање
кога Давид отиде преку неговиот именик пример
и искинале од една страна на телефонот книга во време
и се чуваат тоа го прават одново и одново и одново,
тоа ќе го земе навистина долго време да се најде некој во книгата на телефонот,
освен, се разбира, тој е во потрага за некој уште на самиот почеток од азбуката.
Со бинарна пребарување, можете да одат многу побрзо,
и тоа не е само два пати толку брзо или 3 пати толку брзо или 4 пати побрзо.
Но, проблемот добива помала и помала и помала многу побрзо.
За да го илустрираме ова, ние ќе почнам да зборувам за она што се случува
кога ние пишуваме бинарни пребарување.
Проблемот на дофат на раката е дека ако имам низа на броеви,
да речеме, 1, 2, 3, 5, 7, 23, 45, 78, 12.323,
а потоа 9 со еден тон на 0-ти по неа,
сакаме да бидеме во можност да дознаам навистина брзо она што е во
оваа низа на броеви.
Знам дека ова изгледа малку глупо и малку измислена,
бидејќи сега тоа е.
Имаме низа што не имаат многу различни елементи во него,
и ако го побарам од вас да дознаам дали или не
23 е во низа, можете да го направите прилично брзо
само со обѕрне на ова и ми кажуваше да или не.
На аналогни да се разгледа е да се замисли ако ова беа, да речеме,
табела Excel со 10.000 редови, 20.000 редови.
Се разбира, можете да го направите команда F или контрола F и гледам нешто.
Исто така можете да го користите филтри и потрагата работи,
но ако сте имале да се погледне преку таа датотека линија по линија по линија,
тоа ќе ви потрае подолго време да го најдете.
Тоа е вид на како во телефонот книга пример, премногу, каде што
никој не гледа преку телефон книга една страница во исто време.
Вообичаено, тие ми ја отвори до средината,
или во случај на многу телефон книги и речници каде
вие всушност го приспособени на првата буква,
ќе флип тоа првата буква и да се отвори и да почне да оди преку таму.
>> Ме потсетува на вашето име повторно. >> Сем.
Сем.
Како Сем рече дека линеарно пребарување процес ќе биде навистина бавно,
и наместо со бинарна пребарување, начинот на кој тоа работи е дека
секој пат кога ќе одиме преку повторување на нашата потрага алгоритам,
ние ќе се подели на листата на половина, во суштина,
во две помали листи.
И потоа на следниот повторување на циклусот, ние ќе ја делат повторно
во други помали листи.
Како што можете да видите, проблемот постојано стануваат помали и помали
бидејќи ние ги отфрлајќи половина од листата секој пат.
Како го прави ова отфрлање работа?
Само како потсетување, она што се случува да направам, ако бевме компјутер
и бевме, да речеме, во потрага за бројот 5 во оваа листа
е дека ќе изберете број во средината.
Во средината на оваа листа, бидејќи таму се 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 броеви,
ние би изберете број или на 4-та позиција или на 5 позиција,
и ние би ја нарекол дека средината на нашата листа.
Трансферот број во средината.
Потоа, само како Сем рече, ние ќе тест за да видите дали тој број е еднаков
на бројот што сакате да го добиете или нашите саканиот број.
Ако е еднаква, тогаш ние сме го најде. Ние победиме.
Ако не е еднаква, тогаш постојат неколку случаи.
Двата случаи се или бројот треба да биде поголем од бројот ние барате,
или тоа е помалку од.
Ако е поголема, се движиме кон десно.
И ако тоа е помалку, се движиме кон лево.
А потоа се повторува целиот процес повторно
на или десната половина или на левата половина од листата.
>> Првиот проблем во делот денес е да дознаам
како ние всушност може да почне да се изразат оваа во C код.
Имаме pseudocode тука.
Што ќе почнете да го правите е јас ќе се повлече сосема нов простор,
спаси оваа ревизија, така што имаме овие белешки за подоцна,
ние ќе ги избришете сето тоа, а потоа да копирате и залепите од проблемот сет
оваа информација во нашите простори, и се надевам дека тоа не се скрши.
Совршена.
Ако вие момци сите го направат тоа, копирајте го и ставете го овој код во вашиот нов простор,
во празно еден.
Да се ​​обидеме Даниел. Ако компајлирајте и извршете оваа програма, тоа функционира?
Бр >> Што е тоа зборуваш?
Таа вели дека контрола достигне крајот на не-празнина функција.
Да, па дозволете ми да се обиде трчање.
Дали вие момци се види ова и пред тоа? Дали знаете што тоа значи?
Океј, ајде да го сецира ова малку.
Тоа е велејќи дека во враќам документот on-line 9, колона 1 имаме грешка, исто како што рече ти,
и вели дека тоа е произлегуваат од грешка предупредување и враќање тип предупредување.
Тоа изгледа како нешто се случува со враќањето тип, што го прави смисла.
Имаме не-празнина функција, што значи дека имаме функција
тоа не се врати неважечки.
А празнина функција е оној кој изгледа вака:
празнина foo (), и тоа е неважечки, бидејќи враќањето тип е празнина,
што значи дека ако имавме нешто тука
како враќање 1, ние ќе добијам компајлерот грешка за ова.
Сепак, ние имаме не-празнина функција.
Нашата не-празнина функција во овој случај е нашата функција за пребарување
бидејќи има враќање тип на bool.
Кога тоа е велејќи дека контролата достигне крајот на не-празнина функција,
тоа е затоа пребарување нема враќање изјава.
Тоа не е враќање ништо од тип bool.
>> Ние може да се поправи тоа, и она што ви момци мислите
пребарување треба да се врати по дифолт?
Што треба да биде стандардно повратната вредност на пребарување?
Бидејќи тоа е она што може да се стави на крајот.
Шарлот, не имате било какви-?
Вистински или лажни? >> Вистински или лажни.
Кој?
Лажни. Не знам.
Лажни? Ајде да ја обидат.
Зошто и вие би рекол враќање лажни? Тоа е одлично интуиција.
[Шарлот] Не знам.
Ние ќе се врати лажни во овој случај, бидејќи тоа ќе биде нашата стандардна
ако поради некоја причина на листата е празна или на игла
дека ние сме во потрага по не постои.
Потоа на самиот крај, ако не се врати точно во почетокот на оваа функција,
ние секогаш знаеме дека оваа функција ќе каже бе, тоа не е во низа.
Тоа не е во haystack.
Сега ако ние ги собере и да ја стартувате-нека ме спаси ова, па можеме да го повлече.
Сега ако ние компајлирајте и извршете нашата програма, таа го гради.
Ние се нашата мала линија.
Ако јас хит 4-Ш-ох.
Тоа не печати од ништо. Тоа изгледа како и сè заврши добро.
Мораме да се пополни оваа внатре
Ние разговаравме за алгоритам во pseudocode малку пред.
Дозволете ми да видам, освен тоа,
и јас ќе се повлече дека алгоритам се врати повторно.
Да го погоди овој човек. Не бе.
Ете го.
Како го правиме тоа?
Што ќе биде добра стратегија за поаѓање овој код?
Мора да изберете број во средината.
Како да ја изберете број во средината на низа?
Секоја сугестија?
[Студентски] strlen поделено со 2.
Strlen поделено со 2. Тоа е одлично.
Strlen дела со посебни видови на низи.
Какви видови на низи?
Стринг низи, карактер низи.
Тоа е истиот вид на концепт што сакаме да се применуваат,
но не можеме да го користите strlen бидејќи ние немаме низа од карактери.
Имаме низа на ints.
Но, она што не strlen се за нас?
Дали знаете што се добива за нас?
[Студентски] strlen нас добива должина.
Точно, тоа ни добива должина.
Strlen добива должината на низата за нас.
>> Како да ја добиете дека во нашата бинарни пребарување програмата?
Како ќе добиете на должината на низата?
[Студентски] strlen?
Можете да добиете на должината на правилно форматиран C стринг низа со strlen.
Проблемот, сепак, е дека ние немаме стринг низа.
Ако ги погледнеме назад во овој код, имаме овој број низа.
Како да знаеме колку долго е тоа?
[Студентски] Дали постои еквивалент една за крајната точка, како int l или нешто?
Излегува таму всушност не е, и тоа на начин, ова е
една од оние работи тоа е само добро да се знае за C,
дека не постои начин да се добие на должината на низата
ако сите ви го давам е низа.
Причината работи со жици, причината strlen дела,
е затоа што ако стрингот е правилно форматиран,
тоа ќе го имаат тоа специјален \ 0 карактер на самиот крај.
>> Исто така можете да си замислите, ако имате неправилно форматирана низа
и нема \ 0 лик таму, тогаш целата работа не функционира.
[Студентски] можете да го додадете \ 0?
Ние може во овој случај.
Ние би можеле да додадете некој вид на \ 0
или некој вид на означување карактер, а потоа ја користат таа.
Но, тоа не е сосема оди на работа
бидејќи \ 0 е за знак тип,
и тука имаме ints.
Од друга работа е ако ние требаше да користите специјална вредност
како -1 да се означи крајот на низата
тогаш ние никогаш не може да се складира -1 во нашата целобројни низи.
Ние би се заглавени.
Излегува дека единствениот начин да се добие должина
на низа во C е всушност да се сеќава на него
кога ќе го постави, а потоа го помине околу со низа
така што секогаш кога имам функција која ќе направи некоја работа
на низа од цели броеви или пловки или двојки или што имаш,
Јас исто така ќе треба да се даде на функција должина на низата е,
и тоа е токму она што ние го направивме тука на функцијата за пребарување.
Ако се погледне, она што ние го направивме кога ќе помине во нашата низа тука,
ние исто така помине во должина, големината.
Тоа едноставно се случува, дека ние се нарекува оваа променлива овде,
овој параметар или аргумент.
Ова се нарекува аргумент листа функција или параметар листа,
и овие се викаат исто така аргументи или параметри.
Луѓето користат различни термини во различни времиња.
Јас понекогаш ги замените себе.
Тоа само така се случува, дека оваа променлива тука е именуван слично
на овој # define се тука.
Но тие не се иста работа.
Капитализација не е важно.
>> Ако се погледне што се случува тука, изјавуваме
нашите int низа, кој го нарече броеви.
Ние го даде нашиот големина, што соодветствува на нашите # define на врвот.
Тоа ќе биде 8.
И тогаш кога ние тогаш јавете се во нашата функцијата за пребарување долу,
ние преминуваме на бројот што сакате да пребарувате, кој го предизвика,
добиле од корисникот.
Ние помине во низа, овој број,
а потоа ние, исто така, мора да поминат во големината на низата,
и тогаш вредноста на големина 8 добива чуваат
или предадена на овој целобројна променлива наречена големина.
Имаме големина на низата.
Сега ако ние се вратиме на она што се зборува за порано,
Мислам Missy донесе до точка дека она што ни е потребно да направите е да се добие должината на низата
и подели со 2, и дека ќе ни даде средина.
Ајде да видиме.
Може ли да има некој напише ова и зачувајте ја во вселената?
Како за Лејла?
Можам да си пишувам ова во?
Напиши на првата линија, каде што се должината на низата и да добијат средина
и таа продавница во нова променлива.
Јас ќе ви даде неколку секунди. Дали сте подготвени?
[Студентски нечујни]
Секако, би можеле да ви се пресмета средина
на стогот низа во внатрешноста на функцијата за пребарување
користење на должината на стогот низа, што е големината променлива?
Ништо слабо тука.
[Лејла] Само големина / 2 и само-
И го спаси, и кликнете на копчето Зачувај се тука на врвот,
и ние ќе го повлече нагоре.
Совршена.
Таму ќе одиме. Страшни.
>> Како што е, ова ќе ги собере?
[Лејла] Не, тоа треба да биде повисок.
[Нејт] Да, па што ние треба да направам?
[Лејла] Како int средина или нешто.
Страшни. Да, ајде да го направат тоа, int средина = големина.
Ова ќе ги собере?
Да избришете овој коментар и да го надвор од патот.
Она што не ќе ги собере околу ова?
Ние не правиме ништо со број,
па ние треба да го испечатите или нешто слично.
Да, точно.
Ќе добиете неискористени променлива.
Што друго не се случува да работат за ова?
Мислам дека рече нешто, Сем. Semicolons.
Да, јас сум недостасува оние semicolons.
Тоа се случува да биде постојана работа во текот на мандатот.
Конечниот нешто што ќе направите е јас ќе се стави некои бел простор на двете страни
на овој оператор тука, бидејќи тоа е типично како што го направи тоа
според нашиот стил водич.
Имаме средина на нашата низа.
Сега ако ние сеќавам назад кон нашите алгоритам,
она што беше вториот чекор што моравме да се направи еднаш имаме средина?
[Студентски] Ако е поголема [недоловим].
Да, па ние треба да направите некој вид на споредба, и она што сме ние во споредба тука?
Ти рече ако е поголема од. Што е тоа во оваа реченица се однесуваат на?
Бројот што доаѓа до, ако тоа е поголема од средината, а потоа оди до низа?
Точно, па бројот што доаѓа до кога ние-
На игла, па ние сме во споредба со игла,
и она што сме ние во споредба против игла?
Бидејќи иглата е она што го барате.
Ние сме тоа споредување да се дојде до средина.
>> Но, дали има смисла да се провери да се види
ако игла = средина?
Дали тоа има смисла?
Дали некој се согласувате?
Ајде да пробвам, ако (игла == средина).
[Студентски] Дали printf ќе го најде.
[Нејт] printf ("Ние го пронајде \ n!");
Инаку-I'm ќе почнете да правите нешто различно тука.
Одам да се започне со загради околу, ако изјавите цело време
само затоа што ако ние додадете повеќе работи, тогаш
ние не се добие компајлери.
Да, Сем. Имаш точка.
Проблемот е во тоа средина претставува позиција во низа,
но може да се добие тоа да претставуваат вредност во таа позиција на низата.
Тоа е голема точка.
Дали сите слушаат она Сем рече?
Тој рече дека средина како што е
претставува само позиција во низа, но тоа не е вистински елемент во низа.
Ако мислите дека за кодот како што е напишана токму сега,
ако гледаме во оваа низа долу тука, кој има 8 елементи во него,
она што е вредноста на средината ќе биде во оваа функција?
[Студентски] 4.
[Нејт] 4.
Ако ги погледнеме за број 4 -
а ние само може да работи овој код и стави малку тажно лице во тука
затоа што ние не најде за-ако трчаме овој код
како што е во моментов, подигнете, зграда, дозволете ми да дојдете долу,
и ако гледаме за бројот 4,
ние го најде, но ние не го добивате ова да printf да.
Една од причините е тоа што ние не се врати точно,
но ние навистина се најде бројот 4?
И Сем вели бр.
Што ќе најдеме?
Ние навистина се најде средина, кој ако гледаме во низа тука долу,
тоа нема да биде елемент на индекс 4 дека ние сме во потрага на,
кој е 23.
>> Како ние всушност тој елемент на средината
а не само на средината себе?
[Студентски] Ние ќе влезе знак или нешто?
Што би кои го прават тоа, само од љубопитност?
Можеш да кажеш нешто повеќе?
Мора да се трансформира позиција во бројот,
па имаш да се направи некаква врска-Мислам дека тоа е знак, но тоа не може да биде.
Да, тоа е добра точка.
Ние сме биле прави многу на овој конвертирање позиции во карактери, овие ликови,
во првите два проблем комплети.
Излегува дека тука, ова е речиси слична на
пристап до ith карактер во стрингот, ако тоа има смисла.
Еве ние сакаме да пристапите до средината елемент.
Како го правиме тоа?
Кевин, дали имате било какви предлози како да го направите тоа?
Можете да го направите стогот, отворен заградата, средината, затворена заграда.
Можете да напишете дека за нас?
Зачувај го тука, а ние ќе се повлече дека до.
Ние сме во потрага на оваа линија 9,
и ние сме свесен дека ние не сакаме да се споредат игла до средина,
но наместо тоа, ние сакаме да се споредат игла
на елементот на позицијата средина во рамките на нашите стогот низа.
Кул.
Таму ќе одиме.
Да, тоа изгледа прилично добро, ако (игла == стогот [средина]).
Ние ја најдов.
Сега ако ние се кандидира на кодот we'll врати малку-
Се компајлира, работи, и сега ако гледаме за 4,
ние не го најдете, бидејќи сега ние сме всушност добивање на број 23.
Ние сме добивање на вредност 23, и тоа е она што ние во споредба со нашите игла.
Но, тоа е добро. Тоа е чекор во вистинската насока.
>> Тоа е она што ние се обидуваме да се направи.
Ние не се обидуваме да се споредат игла против позиции во низа
туку против вистинските елементи во низа.
Ако ги погледнеме назад сега на следниот чекор во нашата алгоритам,
она што е следниот чекор?
Лејла веќе го спомна тоа кратко.
[Студентски] Проверете за да видат дали тоа е поголема или помала од и потоа да одлучи на кој начин да се движат.
[Нејт] Да, па како ние би го сториле тоа?
Може да се стави во некои-I'll спаси оваа ревизија,
а потоа, ако се стави во некои линии кои ќе го направат тоа.
Да, Шарлот. >> Имам едно прашање.
Треба да не би било средина - 1 бидејќи првото нешто е
тоа е 0 индексирани, па ако стави 4, тоа не е всушност ликот што го барате?
Да, и друг проблем со тоа е-
тоа е голем улов, бидејќи она што се случува да се заокружи случува можеби
ако продолжат и ние никогаш не се прилагоди на почетокот?
Претпоставувам дека она што ние би можеле да завршат прави се обидува да пристапите
елементот на 8 позиција на низата,
кој во овој случај не постои.
Ние ќе сакате да направите некои вид на сметководството за фактот
дека ние имаме некои нула индексирање.
[Шарлот] Извини, мислев средина - 1 во квадратни загради.
Ние можеме да го направи тоа.
Ние ќе се врати на ова прашање во само малку.
Откако ќе почнат да се дојде до вистински looping,
тоа е кога ние навистина ќе видите оваа доаѓаат во игра.
За тоа време, ние може да го направите ова, но ти си сосема во право.
Тоа нула Кешот ќе имаат ефект дека ние треба да сметка за.
Ајде да видиме.
>> Како е поголема од и помалку од-?
[Студентски] Јас добиете како да го направите поголема од и помалку од дел.
Јас само не беше сигурен што да се печати ако најде дека тоа е помалку од стогот средина или поголема од.
Тука можам да ги зачувам она I've-
[Нејт] Да, ако те спаси она што имаш, и ние ќе го повлече нагоре.
Таму ќе одиме.
[Студентски] И јас се стави прашалници за она што не знаев.
[Нејт] Тоа изгледа одлично.
Тука имаме прашалници, бидејќи ние се уште не знаеме
она што ние ќе треба да доста направи уште.
Она што ние би сакале да се направи-Упс, ние го добивме некои загради сите фанки врз нас.
Ние ќе ги поправи овие загради.
Таму ќе одиме.
И уште па што сакаме да го направиме, според нашите алгоритам,
ако не се најде игла?
Велат во случај дека иглата е помалку од она што ние барате. Кевин.
Само погледнете во левата половина.
Право, па ќе стави коментар овде во која се вели "се погледне во левата половина."
И ако иглата е поголема од стогот на средината, она што сакаме да направам?
[Студентски] Потоа ќе се погледне на десната половина.
Погледни го десната половина ", погледнете во десната половина."
Не е премногу излитена.
Океј, па во овој момент, работите се гледа прилично добар.
Проблемот со кодот како што е напишано е она?
[Студентски] Вие немате крајни точки за половини.
Право, ние немаме крајни точки за половини.
Ние, исто така, се случува само да одат преку овој еднаш.
Ние сме само ќе се погледне една средина.
Или елемент е таму, или тоа не е.
Со цел да се заврши ова, ние ќе треба да се направи некој вид на повторување.
Ние треба да ги повторува се додека сметаме дека
или елемент е таму, бидејќи ние сме сведени и конечно го најде,
или тоа не е таму, бидејќи ние погледна низ сите нешта
во соодветните половини на низата и сфатив дека ништо не е таму.
>> Секогаш кога ние го добивме ова повторување случува, што ќе се дојде да се користи?
[Студентски] А јамка.
Некој вид на јамка. Да.
[Студентски] Може ли да се направи не-додека јамка и да го имаат сторат тоа, а потоа додека
иглата не не е еднакво на-I'm сигурни каде ќе одам со тоа.
Но, нешто како го стори тоа се додека тоа не се еднакви на вредноста што корисникот влез.
Да, па ајде да видиме, како тоа може да се напише?
Ти рече ајде да го користат на не-додека јамка.
Каде да почне?
[Студентски] Веднаш по големина / 2.
[Нејт] Океј, а што се ќе правиме?
Ние ќе пополните додека подоцна.
Што ќе правиме?
[Студентски] Не сакаме да направиме сите нешта што ја имаме во ако дел?
[Нејт] Дали сите овие работи, одлично.
Копирај ја и залепи.
О, човеку.
Ајде да видиме дали тоа функционира, ако можеме да табот овој свет.
Убава.
Океј, и ние го спаси ова, па вие момци го имаат.
Добро, и ние ќе се обидеме да го направите ова време-
она што беше додека состојбата сте биле по?
[Студентски] Додека иглата не еднакви, па како извичник.
Но не сум сигурен точно што е уште.
[Нејт] Да, ова е еден начин да го направи тоа.
Сем, имаш ли коментар?
[Сем] сетив кога гледав на видео клипови,
Зедов слика од екранот од еден од-како кога ние го сторивме на pseudocode за тоа,
имаше некаква врска меѓу максимум и мин.
Мислам дека тоа беше нешто како ако макс е секогаш помалку од мин.
Добив тоа.
[Сем] Или како ако макс не е помалку од мин или нешто слично,
бидејќи тоа би значело дека сте бараа сè.
>> Да, па што звучи сето тоа максимум и мин се однесуваат на?
[Сем] Вредности дека-броеви дека се ќе се смени
во однос каде што ќе стави средина.
Точно.
[Сем] Во тој момент, тоа нема да [недоловим] пресмета максимум и мин.
Средина е оваа максимум и мин идеја.
Дали тоа има смисла да се луѓе?
Ако бевме да почнат да бараат во тоа како ние ќе го направите ова повторување,
ти си сосема во право дека сакате да користите некој вид на не-додека јамка.
Но, претпоставувам дека доколку се присетиме што се случува на местото на оваа низа
и она што е навистина се случува-I'm ќе пишувам овде-
на самиот прв повторување на бинарни пребарување, имаме-
Одам да се користи б и д да го означи почетокот.
А потоа на крајот на низата.
Ние знаеме дека на почетокот е на 4 право овде,
и знаеме дека на крајот е на 108.
Велат ние сме во потрага по број 15.
Прв пат ќе го направите ова, како што видовме претходно,
средина е или ќе биде 16 или 23
во зависност од тоа како ние се пресмета работи надвор.
Од рамномерно поделба во средината ќе ни даде овој простор
помеѓу 16 и 23, не може рамномерно да го подели
или ја делат и да добијат во вистинска средина.
Ние ќе се погледне во 16.
Ќе се реализира "Еј, 16> 15 што го барате."
Да потоа да се погледне на левата половина од низата
она што ние ќе завршуваат прави е отфрлајќи
целата оваа горниот дел
и рече: "Добро, сега нашата крајна точка ќе биде тука."
Следниот повторување на нашата телефонска линија, ние сме сега се гледа во оваа низа,
ефикасно ја исфрли овој дел, бидејќи сега
ако ние сме преземање на средина да биде разликата помеѓу почеток и крај,
ќе најдеме нашата средина да биде 8,
кои потоа може да го тестира 8 да се види каде тоа е во однос на бројот што го барате,
15, најде дека 15 е поголема,
така што мораме да се движи на десно дел од листата,
што знаеме, бидејќи ние сме луѓе, а ние може да се види.
Ние знаеме дека право дел ќе биде таму каде што ја најде,
но компјутерот не знае дека, така што ќе направите е ние ќе всушност
се тоа оди нагоре, а сега на почетокот и на крајот
се на истото место, па средина станува само број во списокот во тој момент,
што е 15, а ние сме го најде.
Дали тоа фрли малку повеќе светло врз каде што целата оваа максимум и мин нотација се случува,
следење на крајни точки на низата со цел да дознаам
како да се намали работи надолу?
>> Што ќе се случи ако ова не беа рамноправни до 15 часот?
Што ако бевме во потрага за 15 и, наместо тоа, овој број исто така беа 16?
Ние би рекол: "О, тоа е поголем.
Сакаме да се вратиме на лево. "
И ние ќе се движи нашата e на правото,
на која точка имаме крајната точка што ќе биде спротивставени.
Тоа не би било во можност да пребарувате за повеќе елементи
бидејќи сега имаме крајната точка и нашата почетна точка,
нашите максимум и нашата мин, сега се превртува.
Ние пребарувате низ целата низа. Ние не можат да најдат ништо.
Тоа е точката во која ние би сакале да се каже, "Добро, ние ќе го запре овој алгоритам.
Ние не најде ништо. Ние знаеме дека не е тука. "
Како е тоа?
[Студентски] Како точно се на компјутерот се префрлиш на крајот?
Како не на крајот заврши пред почетокот?
На крајот завршува пред почетокот
бидејќи на математика што ние ќе треба да се направи секој пат кога ќе го направите ова.
Начинот на кој ние трампа е ако гледаш прв пат правиме оваа swap
каде што имаме почетокот на 4 и на крајот
сите патот надолу во 108 и нашата средина, да речеме, на 16 -
Одам да го ресетирате оваа назад кон 15-ако ние сме во потрага по 15,
знаевме дека она што го правевме кога проверив 16 и виде дека е поголема
и сакаше да ја отфрли целата правото дел на листата,
видовме дека она што сакав да го направам е се помести ова е токму тука.
Ефикасно, e доби пресели во еден пред средина.
Исто така, кога го направивме ова повторување на алгоритмот
и средишна точка беше во 8,
ние откривме дека 8 <15 па сакаме да се преселат на б
еден минатото средина.
Сега, на почетокот и на крајот се и двете заедно во ова 15.
>> Ако би се случува да се погледне за некои други, а не 15,
или ако тоа имала 15 наместо е 16,
ние ќе се најде дека е ние сакаме да се преселат еден пред средина.
Сега е ќе биде таму flipped помалку од б.
Ајде да одиме преку тоа како ние всушност заврши кодирање овој алгоритам.
Знаеме дека сакате да ја имаат оваа средина пресметка.
Ние знаеме исто така, дека ние сакаме да ги пратите на почетокот и на крајот на низата
на нашите сегашни низа за да можеме да дознаам
каде што оваа левата половина на листата е и каде десната половина на листата е.
Тоа го правиме со било започне и ќе заврши,
или можеме да ги наречеме мин и макс.
Ќе се користи започне и ќе заврши тоа време.
Кога ќе започнете, ако се погледне назад во нашиот пример овде долу,
нашите почетокот беше поставен на самиот почеток на низата, како природна.
Што индекс беше ова? Она што нашите треба да започне да се?
Даниел.
[Даниел] haystack [0].
[Нејт] Да, па ние би можеле да го поставите еднаква на стогот [0].
Проблемот, сепак, е дека ова ни дава не на позицијата на првиот елемент.
Тоа ни дава индексот на првиот елемент или вистинската вредност на таа првата позиција.
[Студентски] Тоа ќе се претворат во 0,20?
[Нејт] Што тоа ќе го направите е-Па, тоа не ќе да било конвертирање на.
Што тоа ќе го стори тоа ќе се сместат 4 во започнете,
и тогаш тоа ќе биде тешко да се прават споредби против почне
бидејќи Бегин ќе одржи вредноста на 4,
кое е почеток на нашата низа,
но ние сакаме да ги пратите на индекси во низа
што е спротивно на вредностите.
Ние всушност ќе се користи 0, како што.
За крај на низата-Шарлот донесе оваа по малку порано.
Ова е местото каде што ќе се земат предвид нула индексирање.
>> Шарлот, што е крај на низата?
Што е индексот на крајот?
[Шарлот] Големина - 1.
Да, и која големина треба да се користи?
Ние треба да го користи капитал големина или мали големина?
Капитал големина.
Во овој случај, можеме да го користите главниот град големина.
Ако сакаме оваа функција да биде пренослив
и да го користите оваа функција во други програми,
ние всушност може да го користите мали големина.
Тоа е во ред.
Но Шарлот е сосема во право дека сакаме да имаме големина - 1.
Во овој момент-
[Студентски] Како е тоа што можете да го користите големи големина?
Како е тоа што ние може да се користи големи букви големина?
Излегува дека овие # дефинира се, навистина,
под хауба, текст како пронаоѓање и заменување, ако тоа го прави смисла.
Кога ќе компајлирате вашиот код, препроцесирачка фаза
на компајлерот оди преку датотека,
и тоа изгледа за секаде онаму каде што сте го напишале капитал големина,
и го заменува тој текст буквално со 8, исто како што.
Во таа смисла, ова е многу различно од една променлива.
Тоа не преземат која било од простор во меморијата.
Тоа е едноставен текст замена трик.
Во овој случај, ние ќе треба да користите големина.
Од тука можеме да сакате да направите некои вид на повторување,
и ние сме на вистинскиот пат со нашите не-додека јамка.
Ние сакаме да се направи нешто додека состојбата не држи повеќе,
и како што видовме претходно, видовме дека тој услов
беше навистина дека не сакаме на крајот
да биде помал од почнете.
>> Ова е нашиот запирање состојба.
Ако тоа се случи, ние сакаме да се запре и декларираат како "Еј, ние не пронашле ништо."
Да го изразат ова, ние сакаме да се користи некој вид на јамка.
Во овој случај, тоа ќе биде не-додека јамка, а за телефонска линија, додека јамка?
Ние имаме не-додека јамка тука.
Дали вие момци како што пристап?
Дали мислите дека треба да се обидеме поинаков пристап?
Кевин, секој мисли?
Ние би можеле да имаат време јамка, затоа што знаеме максимална
ќе биде поголема од мин во почетокот относнотова.
Да, па нема иницијализација што треба да се случи.
Оние не-додека петелки се големи кога треба да се иницијализира нешто
пред потоа тестирање, а тука
знаеме дека ние нема да се задржи реиницијализирање двете започне и ќе заврши
секој круг на јамка.
Ние знаеме дека ние сакаме да ги иницијализира, тогаш проверете нашата состојба.
Во овој случај, јас всушност ќе одиме со едноставен додека јамка.
Излегува дека не се прави додека петелки се користи прилично ретко.
А многу места дури и не ги учат се додека петелки.
Тие се добри за ракување со корисник влез, па видовме многу од нив досега.
Но нормално и додека петелки се многу почести.
Излегува дека оваа состојба како што е напишана
ќе не навистина ни направи многу добро, и зошто е тоа така?
Жал ми е, јас не знам вашето име.
Јас сум Џери. >> Извини?
Тоа е Б-О-R-У-I.
О, во ред.
Јас не те гледам на мојата листа.
Ох, тоа е затоа што, ох, тоа има смисла.
Дали имате идеја зошто ова додека јамка не би можеле да работат како што треба,
како што е напишано со состојба?
[Џери] Сакаш да кажеш како сакате сите работи откако во-?
Да, па тоа е еден.
Ние можеби ќе мора да се стави сите овие работи во додека јамка, што е сосема точно.
Од друга работа што е малку повеќе проблематични, сепак, е дека оваа состојба не функционира.
[Студентски] Вие треба да го флип.
Право, па овој услов не некогаш ќе биде вистина првично начинот на кој ние разговаравме за тоа.
Ние сакаме да се направи нешто до крајот <започне,
но ние сакаме да направиме нешто додека
започне ≤ крај.
>> Тука е дека пресврт на логиката таму.
Јас сум виновен за правење на овие грешки цело време.
[Студентски] Зошто тоа мора да биде помала или еднаква на?
Бидејќи се сеќаваш случај дека ние мора да
каде што имаше само еден елемент, и бевме долу,
и ние се гледа во само 15 во нашата низа?
И нашиот почеток и нашиот крај беа исти елемент.
Ние сакаме да бидете сигурни дека ние се справи со тој случај.
Ако ние не директно помалку од,
ние само ќе бидат во можност да се фаќате за 2-елемент низа.
Откако стигнавме до тој последен елемент, ако тоа беа нашите елемент, ние никогаш нема да го најдете.
Сега тука, можеме да направиме токму како што велеа.
Можеме да почнеме plopping работи во право во средината на нашата додека јамка.
Ние можеме одеднаш во нашата средина.
Ние можеме да ги преземе сите на овие ако извештаи,
повлечете ги од ова не-време јамка,
одеднаш нив,
чисти работите малку,
и јас ќе одам напред и да ја зачувате оваа ревизија.
И во овој момент, ние сме добивање прилично блиску.
Сем.
Мислам дека, исто така, треба да имаат int средина = големина - 1/2.
Добив тоа, големината - 1/2.
Дали има нешто друго што треба да се промени за таа линија?
Тоа беше добар улов.
>> Што големина направам? Дали сме постојано менување на големина?
Со цел да се задржи на линија како ова, ние мора да се промени големината.
Ние треба да ја смените големината секој пат кога ние одиме околу за телефонска линија.
Но, се сеќавам кога ние се случува преку нашиот пример само малку порано,
и имавме на почетокот на 4
и на крајот на целиот пат во текот на 108?
Како ја пресмета средната точка?
Бевме користење на големина?
Или бевме користење започне и ќе заврши наместо неа?
Тоа е разликата помеѓу крајот и почетокот.
Точно, и како точно треба да се напише тоа, Шарлот?
Само заврши - започнете.
Вие не ќе треба да се направи - 1
бидејќи - 1 е вклучена во крајот и да започне веќе.
[Нејт] Велики, ти си сосема во право.
Ние не треба да направите - 1 затоа што - 1 е вклучен
и изнесува кога ќе се иницијализира на крајот променлива.
>> Дали има нешто друго што треба да направите синтаксички да ја имаат оваа линија има смисла?
[Студентски] Плус започне. >> Плус започнете?
[Студентски] На крајот.
Бидејќи тоа е само пресметува половина од должината.
Ви треба за да додадете започне.
[Нејт] Што тоа ќе се пресмета за нас?
Ако мислиме за крајот на овој прв повторување на јамка,
крајот ќе биде во позиција индекс 7.
Започнете е во позиција 0.
Запомнете, ние сме во потрага за или
положба 3 или позиција 4.
Ако ги погледнеме во оваа математика, само за да се направи тоа малку повеќе материјални,
стави некои броеви тука, имаме 7, 0,
па 7-0, а потоа / 2
е 3 во број поделба, тоа е.
Потоа не ни треба да потоа додадете назад нашите започнете?
Ние не го направи во овој случај.
На првата итерација, тоа ќе биде во ред, бидејќи се започне е 0.
Но, како што напредок, тоа го правиме навистина сите треба само
крајот - почнат / 2.
Има една друга трик тука, а тоа е имено еден од приоритет.
[Студентски] Дали ни е потребна голема заграда?
[Нејт] Точно, а тоа е затоа што ако ние не се стави овие загради,
тогаш оваа линија ќе се толкува наместо
како (на крајот) - (почнат / 2), која дефинитивно не сакам.
Внимавај за оние предност правила.
[Студентски] Зошто не е крај + започнете?
Зошто не е крај + започнете?
[Студентски] Зошто не е тоа тоа?
Зошто тоа ќе биде +?
Мислам дека си во право.
[Студентски] Поради тоа што е просек?
[Нејт] Крајот + почне, ти си сосема во право.
Леле, јас целосно goofed. Во право си.
Ако бевме прави минус, ние би сакале да додадете започне назад внатре
Во овој случај, ти си многу во право дека ние сакаме да се земе просекот од две,
па ние сакаме да ги додадете, за разлика од нив одземе.
[Студентски] Исто така, ќе работи ако не завршуваат - почнат / 2 + започне.
Тоа би, ако правиме-јас верувам дека е така.
>> На пример, ако бевме во потрага по почне,
и ние го префрли овде
до 15.
Сега почнуваат е во положба 2.
Крајот е на позиција 7.
Ако ги одземе, да добиеме 5.
Поделете дека со 2, добиваме 2.
И потоа додадете 2 назад во,
и дека ни добива на 4-то место,
кој е во право тука, што е на средина.
[Студентски] Дали треба да се грижи за завиткување?
Во која смисла ние треба да се грижи за завиткување?
Ако збирот или разликата помеѓу
зависност од тоа како го правиме тоа не е парен број.
А потоа на компјутерот добива збунет дали кога е 2,5;
ви се движи кон лево или кон десно за да се утврди што е на средина?
Добив тоа.
Излегува дека со целобројни поделба,
ние никогаш не се добијат овие броеви со подвижна запирка.
Ние никогаш не го добиете децимални.
Тоа е целосно отфрлена.
Ако имате компјутер се делат две int променливи,
а еден е 7, а другиот е 2,
нема да добие 3,5, како резултат.
Тоа ќе добијат 3.
Остатокот ќе бидат отфрлени, па тоа е ефикасно заокружување-
не е круг, туку кат, ако вие момци се запознаени со тоа во математика,
каде што целосно ја отфрли децимала,
и така си во суштина тоа truncating спушти до најблискиот
целата позиција, до најблискиот цел број.
[Студентски] Но, тогаш тоа е проблематично, бидејќи ако имате низа од 7 елементи
тогаш тоа автоматски ја зема 3 елемент од средината, наместо на 4.
Како да се справиме со тоа?
Тоа е проблематично, бидејќи ако ние имавме низа од 7,
тоа ќе го избере 3 наместо на 4.
Може да се објасни малку повеќе?
[Студентски] Бидејќи ако имате 7 елементи потоа на 4 елементи
ќе биде средишна точка, нели?
Запомни твојот коментар за да се биде нула индексирани, иако.
[Студентски] Да, па во положба 3. Тоа ќе биде на средина.
Да.
О, во ред. Гледам што мислиш.
Тоа е вид на чудно, како што се користи за целата оваа идеја за
да се ослободиме од децимали.
Тоа е голема точка.
Ајде да ја завршиме ова.
Ние пресметува нашата средина.
>> Ние сме тестирање за да видиме дали нашите игла е еднаква на средната вредност.
Ние сме печатење дека ние го најде, но, навистина, она што сакаме да се направи во оваа ситуација?
Ние го најде, затоа сакаме да ги споделите со повикувачот знаат дека ние ја најдов.
Имаме функција која е рационален внесе функција.
Начинот на кој ние се сигнал за повикувачот на нашата функција која ние сме подготвени да одат
е ние велиме, "Еј, тоа е точно."
Како ќе го направите тоа, Кевин?
Ти си одобруваат вашата глава. >> [Кевин] Додај враќање вистина.
[Нејт] Точно, враќање вистина.
Сега, ако тоа не е еднаква, како ние ќе се погледне на левата половина?
Сите идеи?
Стела, сите идеи?
Вие треба да поставите нова позиција за крај.
Да.
Значи ние треба да направите положба на средина - на крајот.
Велики.
Ние треба да се постави нова позиција за на крајот
да се погледне на левата половина.
Ова е она што ние разговаравме за пред каде што
Јас продолжувам да одам назад во овој пример.
Имам започне овде, и тогаш сум на крајот на целиот пат овде.
>> Повторно, ако ние сме во потрага за 15, а нашите средина е на 16,
и сфаќаме, "Упс, 16 е поголема.
Ние сакаме да се преселат на левата половина. "
Ние тогаш ќе се движи на крајот на 15,
и тоа го правиме со преземање на еден далеку од средина
и поставување дека нашата нова цел.
Исто така, ако сакаме да се погледне на десната половина, колку ние би го сториле тоа?
Дали имате идеја?
[Студентски] Вие само го поставите почнат да Средина + 1.
[Нејт] Велики.
И сега и во случај дека ние не најде ништо,
дали тоа се згрижени за нас?
Даниел, дали тоа се згрижени за нас?
[Даниел] бр
[Нејт] Ако го направите преку целата низа и ние не најде ништо,
каде што ќе бидат згрижени, или ние треба да се грижи за неа?
[Даниел] На време состојба.
[Нејт] Да, а состојба, точно.
Тоа ќе се грижи за минува низ целата низа, ако ние не најде ништо.
Овој додека јамка ќе заврши.
Ние никогаш нема да се соочуваат со овој услов,
и ние може да се врати лажни.
Ние, исто така може да го оставите ова ако тука се допаѓа ова
затоа што ако ова ако изјава е точно,
и нашата функција ќе се врати,
и така ние ќе суштина ја прекинете оваа функција во овој момент
кога ќе се вратиме точно.
Но, она што се случува со оваа структура овде?
Ова ќе работи во целост, или има некои логички мааната таму?
>> Има некои логички пропустот во таму, со начинот на кој се поставени.
Што тоа би можело да биде?
[Студентски] Зошто ви е потребна - и + 1s?
Што ги поставува нашата низа за да биде нашиот нов левата половина и десната половина.
[Студентски] Но, зошто да не може да го направи тоа без - 1s и + 1s?
[Нејт] Можеме да го постави еднаква на средина?
Што може да биде проблематична за тоа?
[Студентски] Претпоставувам дека тоа е неефикасен, бидејќи сте проверка на вредност, која веќе се проверени.
[Нејт] Точно, така Сем е сосема во право.
Ако ја поставите на крајот и да започне еднаква средина
наместо - 1 и + 1 reflectively,
во одреден момент во иднина ќе заврши проверка средина повторно.
[Студентски] почнав pset, а потоа морав нешто слично
каде го заборавив + 1, и заглавил во бесконечна јамка.
Право, затоа што во одреден момент никогаш не се случува да се започне и да заврши
за да всушност се преклопуваат.
Кул.
Има уште една логичка мааната, а тоа е дека ова дефинитивно треба да биде
на друго место ако.
Зошто тоа може да биде?
>> Причината е, ако тоа не е друго ако-видовте тоа, Кевин?
[Кевин] Да, затоа што ти си промена на крајната точка.
[Нејт] Токму така.
Ние сме промена на крајната точка,
и ако тоа е напишано вака-we'll направи простори меѓу-
тоа ќе го провери овој случај.
Овој случај, ако тоа успее, ќе ја прекине надвор од функција.
Тогаш тоа ќе го провериме следниот случај,
и ако тоа успее, ќе се приспособат на крајната точка,
и тогаш тоа ќе продолжи и да го провери овој случај.
Но, во овој момент, ние не сакаме да продолжи проверка.
За среќа, не сме го ресетирате средина тука,
и знаеме дека овој случај нема да успее.
Но, ние дефинитивно сакате да се стави на друго ако таму
иако тоа можеби во овој случај
бидејќи ние не сме за адаптација на средина, би дека се направи разлика?
Не, затоа што овие случаи се исклучуваат.
Повторно, мојата лоша.
Ние не, мислам, треба оваа друго ако.
Ние може да го даде, се обиде и да ја стартувате и да видиме што се случува.
Зграда, се јави грешка.
Тоа е веројатно затоа заминав овие б и д е тука.
Дали имате било какви повеќе од оние на врвот?
Тоа не изгледа како неа.
Ние одзумирате, изградба,
таму оди, па сега ако барате 15,
Да.
Дозволете ми да зумирате внатре
15, да. Ние можеме да се кандидира повторно.
Качувањето на изворниот код, градење, трчање.
Ние може да пребарувате за нешто како 13,
и ние не добиваме ништо печатење, така што не е утврди дека за нас.
Тоа е одлично, бидејќи тоа не е во нашата листа.
>> Ние сме сега надвор од времето.
Тоа ќе биде тоа за оваа недела.
Ви благодариме за приклучувањето и се гледаме подоцна.
>> [CS50.TV]