ДАВИД Малан: У реду.
Тако да је ово ЦС50, и то је сада почетак недеље три.
>> Па до сада, ми смо писао програме у Ц
да изгледају мало овако нешто овде.
Дакле, имамо пар оштар обухвата на врху.
Имамо инт, главни, празнина, а онда нешто да уради у средини,
неки део кода у те функције.
Али кључни је чињеница да смо говорили воид овде.
Дакле празнина, све ово време, прецизира да је овај програм, када покренете,
може да се покрене само преко његовог имена.
Не можете да откуцате речи или било које друге Бројеви после имена програма када
руннинг то.
Тако, на пример, ако су програм саставио у фајл под називом Хелло,
можете да урадите ./хелло, али то је то.
>> Једини начин да би могли дају допринос овом програму
је позивањем функције.
На пример, шта функција смо користили до сада
да се унос од корисника?
>> Публика: Гет стринг.
ДАВИД Малан: Да бисте добили стринг, или добити ИНТ, или сте видели друге,
чак и ако их нисте користили још, као и да дуго, дуго и слично.
Али претпоставимо да смо заправо желите да започнете
пишу програме који су мало више свестран, и, искрено, мало више
попут команде које сте Добијам, надамо се,
мало навикли на.
Као и цд простора Дропбок.
Ово, наравно, промена Ваш директоријум, под претпоставком
ти си у Јохн Харвард кући директоријум, у фасциклу Дропбок.
У међувремену, команда овако креира нови директоријум под називом псет2,
као што сте можда већ и ускоро за проблем подесити два.
Направите Здраво, наравно, команда који гради програм под називом Поздрав
из датотеке под називом Здраво тачка ц.
И у сваки од ових случајева, сада смо имали
обезбеди аргумент тзв командна линија, трепери брз,
па који чине зна шта да се изгради, и тако да мкдир зна шта фасциклу да створи,
и тако да цд зна где желите да идете.
Али до сада, ми смо стално говорим да је главни, подразумевани функција,
има празнина израз унутар тих заграда,
што значи да не може предузимати никакве аргументе.
>> Тако од данас, шта ћемо да радимо
је, идемо да почне подржава овакве ствари још.
У ствари, у овом случају, што вас обично не ручно куцате,
Чине је ово радим за нас, не постоји
један, али један, два, три додатна Стрингс после програма је назван
цланг.
Па како да се то постигне?
>> Па, од данас, у случајевима где желимо
да обезбеди улаз преко тзв командној линији,
ћемо почети додавање овде шта је у иеллов--
замене празнину са инт аргц зарезом стринг аргв отворена конзола затворене заграде.
Сада ово је интересантно за неколико разлога.
Један, то ће да нам пишу Програми који су мало више динамичнији.
Али, више убедљив, то ће да се отвори
сада разговор како би се оно што заиста може низови
да се користи, за оно стринг заиста је испод хаубе,
до следеће недеље, када почнемо Дивинг у још дубље како машина
чинећи све ове ствари рада.
Али за сада, хајде да цртају, можда, слика.
>> Када пишете програм са главном проглашен
на овај начин, тако да главни узима два аргумента, инт
и-- шта тип података је други аргумент?
>> Публика: Арраи.
ДАВИД Малан: Арраи.
Тако да изгледа на први поглед као да је стринг, али приметио средњој загради.
Подсетимо се последњи пут смо увели појам низа.
И низови Користите угласте заграде у неколико контекстима.
Можда користите трг заграде да иду у низу
и добити одређени елемент, као што конзола 0 или конзола 1 или 2 конзола.
Али видели смо, ако је кратко, прошле недеље да ви
користите ове угласте заграде у прогласи величине низа,
ако знате унапред колико интс или колико Стрингс или шта год
заправо желим.
Тако испада постоји Трећи контекст овде
која има унутра нема број од угластим заградама.
Када одредите, као што сам овде, име нешто попут аргв,
што је само фенси начин рекавши аргумент вектор, који
је још један начин Фанци рекавши низ аргумената,
Отвори конзола затворене заграде само значи да не мора
знају унапред колики низ ће бити,
али знате да ће бити низ.
Дакле, ако не знате број не стави у ту,
за отворене заграде затворене заграде значи да аргв није ниска,
већ низ низова.
Дакле синтаксички, вама ако сетите прошле недеље,
то је веома сличан говорећи нешто попут инт векова отворена заграда,
а онда нешто касније.
Па шта ти ово личи?
Хајде да заправо нацртати слику.
Дакле, када покренете овај програм са главним има два аргумента дефинисан унутар
тих заграда, ви у суштини имају најмање два дела
меморије уручио за вас испод хаубе.
Један, као што ћу црта као овај правоугаоника, ће да се зове аргц.
И баш као с ногу, Који је тип података аргц?
Тако да је Инт.
Па број иде да иде у аргц-- наизменично
да се залаже за аргумената бројање.
У међувремену, ја сам нацртана аргв као низа.
И ја стварно не знам Колико ће то бити,
тако да је за данашње потребе Дот Дот Дот.
Ит Мигхт Гет неке дужине.
Али ја сам овде на слици најмање четири правоугаоника.
Па аргв комад меморије која сторес Стринг стринг Дот Дот Дот,
а аргц је само један комад меморије за цео број.
>> Тако да сада, будимо мало прецизнији.
Ако, када имам жице у овом низу, под називом
аргв, ја желим да се на њих појединачно, као и прошле недеље,
ћемо користити нотацију као аргв брацкет 0
добити први ствар низ.
Аргв носач 1 да Друга ствар, и тако даље.
Кључ овде је још смо 0 индекед-- ми још увек броји од 0.
Па је сада нека ствари стави нешто у томе.
Ако бих да састави програм под називом Поздрав из датотеке зове Хелло дот Ц,
а онда сам покренути тај програм са тачком сласх Хелло,
шта мој рачунар, мој лаптоп, изгледа као испод хаубе
тренутка кад сам дот покренути сласх Поздрав и ударио Ентер?
Па, ово је можда оно што смо могли да описати
као садржај рачунара Меморија, или РАМ-- Рандом Аццесс Мемори.
Другим речима, рачунар, некако за вас магично,
ставља број 1 у аргц, звани аргцоунт, и то буквално ставља стринг
./хелло у аргв конзолу 0.
Немам појма, искрено, шта је у аргв конзолу 1 или 2 или 3,
јер ако корисник нема откуцан ништа осим ./хелло,
ћемо претпоставити да они су највероватније вредности за смеће,
тако да говори.
Те комади меморије постоје, али то није на нама
да их погледам, јер је аргцоунт је само један.
>> Сада, у међувремену, ако ја пишу покренути други програм,
ЦД, што је више правилно команда, у трепери промпт-- цд простора
Дропбок-- кад трчим да, ефикасно, када се покрене ЦД програм, аргц,
унутар меморије мог рачунара, је за највише најкраће други број 2.
А онда аргв Кронштејн О има ЦД, аргв носач 1 има Дропбок,
а онда, наравно, команда заврши, тако да све ово меморије
суштини одлази и се користи за нешто друго.
И зато кажем само делић секунде.
>> У међувремену, ако урадимо мкдир псет2, слика изгледа скоро исто,
али са различитим жицама унутар аргв.
Ако урадим цланг цртицу Хелло Здраво тачка ц, иста идеја.
Више ствари се попуњава за аргв, и аргц, наравно, 4.
Другим речима, иако Овај низ
можда Дот Дот Дот, неких променљиве дужине, да тако кажем,
увек знате где је крај њега је, јер је аргц ће вам рећи
У ком тренутку морате да зауставите гледа на елементе у аргв.
Можете само да погледате четири у укупно у овом предмету.
>> Дакле, хајде сада да погледамо, можда, једноставан програм.
Онај који само каже хелло некоме попут Замила.
Тако да тврдим да ћу написати програм у само једном тренутку преко које сам могао да урадим
./хелло простор Замила, а онда хоћу мој програм да одштампате нешто
Супер Симпле попут "Здраво, Замила."
Сада у прошлости смо користили гетстринг.
Дакле, у прошлости, чак и ако сте нови у програмирању,
квоте су могли распалити Програм који користи гетстринг
а затим користи принтф поздравити Замила.
Али хајде да не користимо гетстринг овај пут.
Пусти ме уместо тога одем у Апплиант и да укључују стандардну по моему дот х.
Дозволите ми такође укључују ЦС50 дот х.
Сада маин, а сад сам неће учинити неважећим данас.
Уместо тога, ја ћу да урадим инт аргц стринг аргв отворена заграда затворене заграде,
не прецизирајући број.
И сада овде је мој тзв да уради.
Оно што ћу сада да радим јесте, ја сам да уради мало скок вере,
Идем да се претпостави да је корисник ће да правилно користе овај програм,
а ја само идем да урадите принтф Здраво,% Сн.
Дакле, ништа ново тамо.
Али желим да сада стави шта год реч типови корисника након имену програма.
Дакле, ако ја ./хелло простор Замила, ја Желим да некако програмски приступ
под знацима навода "Замила." па сам може да иде у мој аргумент вектор,
Моја низ жица, а ако команде, опет, био ./хелло простор Замила,
Који број желим ставити у аргв овде?
Публика: 1.
ДАВИД Малан: 1, јер носач 0 испада
ће бити назив програма, као што смо видели.
Па носач 1 је прва реч да сам ја, корисник, куцања.
Идем да иде напред и сачувајте ово.
Идем да одем у моју фасциклу где сам смештен овај фајл.
Ја ћу да урадим да здраво 3.
Цомп Ио је ОК.
./хелло Замила Ентер.
Шта сам урадио погрешно?
Био сам затечен сам за само тренутак.
Шта сам урадио погрешно?
>> Публика: Име.
>> ДАВИД Малан: Филе је заправо зове хелло3.ц.
И ја сам то урадио само за доследност, јер смо
имали хелло.ц у прошлост у онлине коду.
Дакле, хајде да поправимо овај ./хелло брацкет Дасх 3 Замила.
Ентер.
А сада имамо здраво, Замила.
У међувремену, можете да промените у бити Роб, или стварно било коју другу реч.
>> Али хајде да размотрите угла случај.
Шта се може очекивати ће се десити ако Не откуцајте ничији име уопште?
>> Публика: Грешка.
>> ДАВИД Малан: грешка неке врсте, можда.
Да видимо.
Ентер.
Нулл.
Па принтф се заправо мало заштитна нас
овде, и буквално штампање отворене парен нулл, али чак и горе ствари може да се деси.
И само да покаже нешто што апсолутно
не би требало да, идемо у овде и почети боде око.
Зар не?
Ако ја знам да је слика у Меморија је у суштини то,
аргв носач 1 има Замила, аргв носач 0 има ./хелло или ./хелло-3.
Шта је у конзолу 2?
Тако да могу да одговорим питање сам, зар не?
Ја само да променим 1 до 2.
Ја сада могу рекомпајлирате хелло 3, ./хелло3 Хајде да зумирате и ударио Ентер.
Упс.
Не цитат Марк.
Занимљиво.
Тако да је то кул да видимо шта је још овде.
>> Дакле, шта је још унутра мој лаптоп?
Хајде да сачувате са држачем 3.
Направите хелло3, ./хелло-3.
Радознали.
А сада хајде да стварно болд-- 50.
Дакле, то је стварно Дивинг Дееп у меморију мог рачунара.
50 индекса у.
Па будите Хелло 3 ./хелло-3.
Радознали.
У реду, сад сам само ће добити несмотрено.
Идемо на 5.000.
У реду.
Дакле, дозволите ми рецомпиле.
Направите хелло3, ./хелло-3.
У реду.
Сада неки од вас, можда бити сијалица одлутају.
Колико имате видели ову поруку раније?
У реду.
Дакле, зашто?
>> Квоте аре-- и тамо је другачији ствари које могу да изазову ово,
и јасно ти си у добру компанији-- ми јасно имају
изазвало оно што се зове Сегментатион фаулт.
И скратим причу за данас, ја дотакли сегмент меморије
да не би требало.
Где сегмент само значи комад меморије да не би требало.
Сада рачунара гарантује да ако ја рун ./хеллоЗамила да могу додирнути аргв
бити носач 0 и аргв носач 1.
Али аргц је вредност 2, што значи да сам ја само алловед-- то је нека врста части
систем-- на додир конзола и конзола 0 1.
Ако одем било даље, ту је апсолутно ће бити тамо меморију.
Мој РАМ постоји физички у компјутеру.
Али ко зна шта је тамо?
Заиста, ја користи више Програми у једном тренутку.
Можда имам сеен-- да нисам била ради ово на Апплиант
али на мом Мац или ПЦ-- ја можда има Видео садржај е-поште.
Можда сам видели тренутак Порука сам недавно послао.
Ништа што би могло да буде дуготрајни око у меморији
могло приступити путем Ова произвољна квадрат носач нотација.
Или, још горе, можда имате пронашао један од мојих лозинки
да сам недавно да унесе, да Програм је чувају у меморији тако
да ме аутентификује, и онда некако је оставио
у РАМ док сам престао тај програм.
>> И заиста, ово је један од опасност и један силе
коришћења језика као Ц. Имате неометан приступ
на целом садржају меморије програму је,
и какве лоши момци чак учинити у тим торбе--
поготово када се доћи до веб програмирање
крајем семестра, ми ћемо поново ову топиц-- се џаку око,
потенцијално, неко је компјутер је Меморија и наћи такве необичне ствари
као што смо видели тамо.
Или још горе још, лозинке које је он или она тада могу да користе да раде лоше ствари.
>> Тако јасно да не би требало да уради, јер чудне ствари почињу да се деси.
Заиста, ово је програм Црасхинг.
Ово ће бити еквивалент Мац ОС или Виндовс
прозор програма само нестају.
Неочекиване грешке.
У окружењу командне линије видимо нешто овако.
Али то је зато, ја се једноставним додиром меморија која не припада мени.
>> Дакле, хајде да се одбрани од ово мало на другачији начин
гледајући на овом програму овде.
Дакле, опет, скелет да смо видели еарлиер--
и ја сам нагласио ову временску инт.
А све ово време главни је заиста вратила вредност.
Иако у већини наших предавања примери никада нисмо некада користили
ништа Маин врате.
Ми само писати принтф цлосе Цурли Браце и то је то.
Али за бесплатно, што компајлер радили за вас,
ефикасно, се враћа 0 за вас.
Окреће оут-- и то је мало цоунтеринтуитиве-- то 0 је добро.
То не значи само по себи лажна.
0 је добра, и било не-0 вредност, свет је одлучио,
могу да означавају грешку.
Дакле, ако сте икада забрљао нешто на вашем рачунару,
или програм управо умро на вас и сте стечен неким погрешним прозор
на екрану, рекавши грешка негативан 49 или грешке 23--
неки наизглед произвољна валуе-- то је јер програмер има хард-цодед
вредност као негативна 49 или позитиван 23. да представља било који број, усуђујем се рећи,
4 милијарде могућих ствари да може кренути наопако у програму.
>> Па како да узмем Предност овога сам?
Па, дозволите ми да отвори програм што сам написао у унапред,
и џаку око на мрежи зове здраво 4.
И то је готово идентичан, осим што има добро мало грешака проверу.
У овом случају, ја сам опет прогласио Главни и узимање два аргумента,
али овај пут, на линији 17, Нотице Радим мало проверу исправности.
Правим сигуран да аргц једнака једнако 2.
Јер ако је, да значи да могу безбедно да
додирујте не само носач 0, али БРАЦКЕТ 1.
И ја идем напред и штампате, у овом случају, Замила или Роб
или шта год реч сам откуцао напоље.
А сада само да би мало правилније,
Идем да експлицитно се врате 0 да значи све је добро.
Ништа лоше десило.
>> Али конвенционално, ја ћу врати 1, или искрено свака не-0 вредност,
ако нешто крене наопако.
Сада корисник неће стварно приметили шта се дешава.
Заиста, ако одем у овом директоријуму, ми смо увећали и правим Хелло 4,
./хелло-4 Замила понаша као што сам очекивао.
Али ако сам уместо тога не типа ништа, ништа се не чини да се догоди,
али не пада.
И ако сам уместо тога нешто као Роб је Процтор
у Тхаиер-- дељење произвољна информација.
Али обавештење, аргв 1, 2, 3, 4, и 5 треба да сада постоје у меморији.
То је, такође, није оно што мој програм очекује,
јер сам проверио да ли је аргц једнака износи 2 или не.
Па ја сада браним против тога.
>> Сада, као на страну, ми смо программер-- односно ми усерс--
никада видети да је 0 или 1, али користећи алатку за отклањање грешака, или других средстава,
као што ћемо видети раније дуго, програмер
може заправо видети шта може да буде иде наопако унутар вашег програма.
>> Дакле, има ли питања о аргц?
Да.
>> Публика: Видео сам где су нису имали карактер, [неразумљиво]
Само је рекао стринг звезда д, као карактер астериск зарез.
Да ли су еквивалент овде?
>> ДАВИД Малан: Они су.
Дакле, питање је, ви имате повремено сеен програми
овако то не кажу стринг аргв брацкет
већ да кажем нешто као цхар звезда аргв носач.
А ту је чак Друго варијанте које можете да видите.
Они заиста су еквивалентни.
За сада, имамо ове врста обуке точкова
на у облику стринга у ЦС50 Библиотека, али у нешто више од недељу дана
или тако ћемо уклонити да опструкција и заправо сасвим
Погледајте шта угљенисаног и звезде су, и како они који се односе на меморију
репрезентација уопште.
Па ћемо се вратити на то.
>> Остала питања о нашој аргв и аргц?
Да.
ПУБЛИКА: Зашто се вратити грешка [неразумљиво]?
ДАВИД Малан: Зашто је то урадио врати грешку само-- Ох!
У претходном случају, када смо около су стално притискате са меморијом,
зашто је само вратили грешку када сам заиста откуцао велики број?
Кратак одговор је, управо смо добили среће.
Уопштено говорећи, компјутер алоцира меморију у кришкама,
и то ми је дало довољно велики комад који Побегао сам, непримећено,
додирујете носач 2, брацкет 3, носач 50, али чим сам гурнуо
Моја срећа, отишао сам даље Границе комад меморије
Оперативни систем ми је дао.
И то кад је у сузбије и рекао, не.
Сегментација грешка.
Да.
>> ПУБЛИКА: Како рачунар знају вредност аргц?
>> ДАВИД Малан: Како компјутер зна вредност аргц?
Када покренете програм, тај програм, по природи на коме трепери линији,
је предао низ речи које су укуцани
на брз, који је био откуцан на линији.
Па то је ваш оперативни систем који у суштини
попуњава МАИН аргументе за вас.
Дакле, то је једна од услуга да сте добили, некако тајно
испод хаубе оперативни систем.
Остала питања?
Да.
>> ПУБЛИКА: Шта језгро депонија значи?
ДАВИД Малан: Шта језгро депонија значи?
Дакле, то је добро питање.
И пусти ме да се вратим у Овај директоријум овде.
А ви ћете приметити да Имам нову датотеку тамо.
То се заиста зове језгро, и то је заправо типично пристојан величине Филе.
То је у суштини снимак Садржај меморије мог програма је
или РАМ при паду.
И то ће бити корисно, потенцијално, дијагностички,
кад говоримо у будућем предавању и одељак о отклањање грешака,
зато што стварно можете да урадите еквивалент дигиталног аутопсије
на тај фајл да помогну схватим шта си урадио погрешно у свом програму.
Да.
>> Публика: Да ли је аргц команде у сама, или можете да пожелите нешто?
>> ДАВИД Малан: Добро питање.
Је аргц команде у себи, или можете да пожелите нешто?
То дефинитивно није команда.
То једноставно променљиве име или назив аргумент је,
и тако апсолутно ми могао назвати ову фоо,
бисмо могли назвати овај бар, који имају тенденцију да се Го-да речи које рачунарске
научник иде.
Али конвенционално, користимо аргц и аргв.
Али то је само људско Конвенција, ништа више.
У реду.
Тако испада, ја сам био говори мало беле лие--
и искрено, у будућности, видећете смо говорили и друге беле лажи.
Али за сада, идемо да се љушти врати један од ових.
У овом случају овде када сам раније водио програма као ./хелло или ./хелло-3
Замила, имали смо садржај мог меморија рачунара гледа отприлике као
ово.
Али подсетимо шта стринг.
Оно што смо рекли пре недељу дана како стринг је заправо испод хаубе?
ПУБЛИКА: Низ карактера.
ДАВИД Малан: То је низ карактера, зар не?
Тако да смо могли имати низ Стрингс, али заузврат, стринг
је низ знакова.
Дакле, ако заиста желим да будем Анални када сам извући ову слику,
Ја заиста треба да буде цртеж то мало више овако,
при чему у сваком од тих индекси моје аргв низа,
постоји сама читав низ која је сама у низу.
И сада Вхите Лие ми говориш данас
је да слика не изгледа баш овако.
У ствари, мали тргови су обично ван великих правоугаоника
тамо.
Али ћемо се вратити на то убрзо.
Али ово је обрнута коса црта ./хелло 0, да бити посебан знак који
разграничава крај низа, а имамо још један после
Замила име.
Дакле, шта то значи?
>> Па, дозволите ми само напред и отвори још два примера
који су доступни онлине.
Једна се зове аргв1.ц а други је аргв2.
То је супер једноставан програм који се разликује од претходних програма
у да сада ја користим аргц и аргв овде.
И сада интегрише са за петљу у складу са 18, и = 0 о до аргц.
И шта ћу да радим са овом линијом код овде?
На енглеском језику.
Ово очигледно показује коришћење аргц.
Али на енглеском језику, шта то учинити ако сам покренути овај програм?
Да?
>> ПУБЛИКА: Иде да одштампате сцреен онолико пута колико желите.
ДАВИД Малан: Тачно.
Тако да без обзира на речи укуцајте на линији, то је
ће подригивати их на мене једну по линији.
Па идемо напред и урадите то.
Пусти ме у мој директоријум и праве аргв1 ./аргв1.
А сада, хајде да буде једноставно.
Хајде да урадимо ништа на први поглед.
Јесте одштампати једну ствар, а То је заиста име програма,
зато што је то у конзолу 0.
Ако ја сада кажем фоо, то ће да уради та два, а ако кажем фоо бар,
то ће рећи те три ствари.
Сада када је нешто занимљиво, можда.
Али се сећате тог аргв је низ низова,
али стринг је низ карактера, тако да можемо узети ствари у усек
и примењују тај основни логика и да код који
изгледа мало загонетан, признајем.
Али има нестед петља, нешто слично
ономе што се сећате из Марио, На пример, ако сте то урадили на овај начин.
>> Тако да сада приметити на линији 19, ја сам Поново итератинг преко мојих аргумената,
од 0 о до аргц.
И сада у складу 21-- сам позајмљивање трик од прошлог Недељу
Ја проверавам шта је Дужина од аргв држача И.
Ја складиштење тај одговор у Н.
А онда сам интегрише са Ј На до н, где је ј испрва на 0.
Дакле, Конвенција за бројање.
Када сте сам, ако имате угњеждену петља, не могу да користим опет,
иначе ћете разбије, потенцијално, вредност изван унутрашњег петље.
Тако да сам помоћу Ј конвенцијом.
Могли бисмо користимо К.
Ако имате више од к, вероватно имају превише гнежђење, обично.
Али сада, приметио мој принтф линија је мало другачија.
Нећу штампање% с, ја сам штампање% Ц, који, наравно,
је чувар места за цхар.
>> И сада приметити овај синтаксу.
Нови.
Нисмо видели раније.
Али логично, то само значи да добити ИТХ стринг у аргв
и добити ЈТХ ШТА?
Публика: Цхарацтер.
ДАВИД Малан: лик у том низу.
Па користећи угласте заграде затим угластим заградама,
Ово је први роњење у стрингс аргв-а,
а затим други квадратних конзоле са Ј
је роњење у ликовима та конкретна стринг у аргв.
А онда, само за добру меру, Ја штампање нову линију овде.
Тако да сада пусти ме само напред и отворите до мало већег прозора
тако да можемо да видимо у акцији.
Пусти ме у тај фолдер.
А сад да аргв-2-- вхоопс-- да аргв-2, ./аргв 2.
Ентер.
И то је мало тешко на вертикално читати,
али то је заиста име програм, следи празан ред.
Сад ме пусти напред и урадите фоо.
Слично тешко за читање, али је Заиста штампање један знак по линији.
И ако ја бар, то је сада штампање оне ред по ред.
Па Такеаваи овде није толико то, Вов, погледај ову уредним нови трик
где можете добити на садржају специфичних знакова низа а,
већ како водимо ових основних идеје попут индексирање у низу,
а потом на индексирање низа који је био у том низу,
и само применом исте идеје нешто више софистициране примере.
Али основе заиста нису променила, чак и од прошле недеље.
>> А ово је врста благовремено, у томе, подсетимо, у недељу нула
смо играли са именику овако.
И иако је ово очигледно физички комада папира,
можете некако мислим Телефонски именик као низа.
Наравно, ако сте били да реимплемент Овај комада овим папирићима
у рачунару, вероватно можете да користите нешто
као низ за складиштење свима имена и бројеве из све начин
кроз З. Дакле, ово је лепо, јер је што нам омогућава прилику,
можда, да се размотри како можете да заиста спроведу тако нешто.
Као са низом врата овде.
Дакле, ако ми могао-- нам треба један добровољно да се горе.
Да видимо.
Непознатим лице можда, непознато лице можда.
Како о томе у наранџасто?
Ево.
Наранџаста мајица, хајде горе.
>> Идемо напред сада и потез Ова врата са стране,
мове то ван начин за тренутак.
Како се зовеш?
>> АЈАИ:
>> ДАВИД Малан: Ајаи.
Дејвид.
Драго ми је да вас упознам.
У реду.
Дакле, имамо иза ових шест врата дигитално на сцреен--
Односно, седам врата на сцреен-- гомилу бројева.
А ја сам вам рекао ништа у адванце-- договорено?
АЈАИ: Ништа унапред.
ДАВИД Малан: Све што желим да урадите Сада је да се пронађе за мене, и за нас,
Заиста, број 50, један корак у исто време.
>> АЈАИ: Број 50?
>> ДАВИД Малан: Број 50.
И можете открити шта је иза сваке од ових врата
једноставно га додиром прстом.
Проклетство. [СМЕХ]
>> [АППЛАУСЕ]
>> Врло добро урађено.
У реду.
Имамо диван поклон Награда за тебе.
Ваш избор филмова ми разговарали прошле недеље.
>> АЈАИ: Ох, човече.
Ох, никада нисам видео Спацебаллс.
>> ДАВИД Малан: Спацебаллс.
У реду.
Тако држе на само један тренутак.
Како-- хајде да ово научити тренутак--
како идете о проналажење број 50?
АЈАИ: Изабрао сам насумично.
ДАВИД Малан: Па сте одабрали насумично и посрећило.
АЈАИ: Да.
ДАВИД Малан: У реду.
Одлична.
Тако сада, није имала стечен Луцки, шта још
можда се догодило иза ових врата?
Дакле, ако одем напред и откривају ове бројеве овде,
они заправо су у случајним редоследом.
А најбоље што може имати учињено, искрено, јесте, у крајњој линији,
у најгорем случају, проверавајући их све.
Па имаш супер-Луцки, који није оно што бисмо назвати алгоритма.
Да, цеститам.
Али сада хајде-- хумор ме, ако можеш.
Идемо на овој картици овде.
И овде су бројеви у јасно оно што изгледа да је случајном избору,
и они су били.
Али сада, ако уместо тога ја тврдим да иза ових врата
су бројеви који су сортиране.
Циљ сада је да се нађемо број 50.
Али то учинити алгоритамски, и реците нам како ћеш о томе.
А ако га пронађете, задржите филм.
Не сматрају да је, ви га вратити.
АЈАИ: Зато ћу да проверим крајеви Прво, да се утврди да ли ту је--
[Смех и аплауз]
ДАВИД Малан: Изволи.
Хајде да погледамо једну од Ајаи претходника,
Шон, који није био толико среће.
У реду, тако да ваш задатак овде, Шон, је следеће.
Ја сам скривен иза њих Врата број седам,
али ушушкан у неким од ових врата као и други не-негативни бројеви.
И ваш циљ је да се мисли о овоме Горњи ред бројева као само низ.
Ми смо само низ комада папира са бројевима иза њих.
И ваш циљ је, само помоћу врх Арраи овде, нађи ми број седам.
И ми смо онда ће критиковати Како идете о томе ради.
Нађи нам број седам, молим те.
Бр
5, 19, 13.
То није трик питање.
1.
У овом тренутку је ваш резултат није много добро, тако да можда и настави.
3.
Хајде.
Искрено, ја не могу да се не запитам чему још размишљате о.
>> СЕАН: Ја могу да са само горњем реду.
ДАВИД Малан: Само горњи ред.
Тако да имаш три лево.
Па ми наћи 7.
>> [ПУБЛИКА Схоутс Предлози]
Тако да обе су биле невероватно из врло различитих разлога.
Дакле, ово је место где смо стао малопре,
а кључ Инсигхт овде Ова врата су имале бројеве
иза њих који су сортирани, идеална Такеаваи за то је да си могао
фундаментално боље у Ова друга екампле--
и, заиста, то је Сеан Први покушај са случајних бројева
баш као пре-- али чим јер су поредани ови бројеви,
слично као у именику, Шта можете да урадите оцигледно?
Или како можеш полуге тог сазнања?
Да.
>> ПУБЛИКА: Иди на пола пута [неразумљиво].
ДАВИД Малан: Да.
Тачно.
Па Инитиал инстинкт Ајаи био да проверите крајеве, колико се сећам,
а онда некако Завршена пример брзо.
Али, ако смо почели да радимо ово више методично том смислу,
али почевши можда у Средњи, јер они сортирају,
чим смо открили број 16, ми смо дакле Знам--
и хајде да урадимо управо то-- смо ми Стога знају да 50, у данашњој случају,
има да буде са десне стране.
Дакле, само као у недељи нулу када смо поцепао телефонски именик на пола
и бацио пола Проблем Аваи, иста идеја овде.
Можемо бацити ову половину проблема у гостима.
И вероватно вам шта могли да ураде алгоритамски,
Једном када знате да 50 мора да буде са десне стране, ако је то било где,
је пробати тамо, у средини преосталих врата.
Наравно, 50 је већа од 42, тако да можемо
баци ово преосталих четвртина проблема гостима,
и, најзад, идентификовати нешто као 50.
Али, баш као и са именик, ови бројеви
добили су за нас већ у сортиране Ред, који нас оставља
питањем, како ти се добити ствари у сортиране Ред?
И, искрено, по коју цену?
То је једна ствар да буде предао телефонски именик
а затим импресионирати своје пријатеље проналажењем број телефона веома брзо, зар не?
Кидање 32 странице се да пронађе Лице од 4 милијарде страница,
смо рекли је један екстреман пример.
Али колико времена им је требало Веризон да сортирате ту именик?
Колико времена се то нас да реши ове седам бројева?
То је питање које смо до сада потпуно игнорисао.
>> Па хајде да одговорим на ово питање.
И ми смо сви из филмова сада, али ми имамо неку врсту стреса муда.
Ако, рецимо, осам волонтера не би сметало нам се придружити овде?
Идемо напред и учинити, како би било Четири вас, троје од вас овде?
Гет нека нова лица.
И четворо вас тамо?
И сада-- да не пристрасност овде-- и Број осам овде на крају.
Дођи горе.
У реду.
Дакле, оно што овде имамо свако од вас је број.
Уколико желите да идете напред, да овај број.
Како се зовеш?
>> Арти: Арти.
>> ДАВИД Малан: Арти, у реду.
Ти си број 1.
>> Амин: Амин.
ДАВИД Малан: Амин.
Дејвид.
Ви сте број 2.
И само напред, као што сам руку ти листови папира,
построје себе испред музике стоји у истом редоследу као и тамо.
>> Анди: Здраво, Енди.
>> ДАВИД Малан: Енди, то је лепо да те видим.
Број 3.
>> Јацоб: Јацоб.
>> ДАВИД Малан: Јаков, број 4.
Добродошлицу.
Грант: Грант.
ДАВИД Малан: Грант.
Број 5.
>> Аланна: Алана.
>> ДАВИД Малан: Алана, број 6.
>> ФРАНЦЕС: Францес.
ДАВИД Малан: Францес, број 7.
И?
>> Рацхел: Рацхел.
>> ДАВИД Малан: Рејчел, број 8.
У реду.
Само напред и да се у овом редоследу.
Дозволи ми да ставим један преостали Мусиц стоје у месту.
Где ти је потребан став?
У реду.
Само напред и само ставите своје бројеве где публика може да их види у,
музичко постоље окренут ка споља.
И надам се, наш први разум провера овде-- 4, 2, 6.
Ох-ох.
Чекај мало.
Ми немамо 8.
Морам да вас избаци из Пример некако.
Бр
Не, то је у реду.
Да видимо.
Можемо да урадимо ово.
Станд би.
Ту идемо.
Исправна.
У реду.
Дакле, сада имамо 8, 1, 3 7, 5.
У реду.
Одлична.
>> Па се поставља питање при руци је, у коју цену, и преко онога што метод,
можемо заправо сложити бројеве овде тако да можемо врсту посла уназад,
На крају крајева, и то је заиста дециде-- импресиван, то је заиста ефикасна,
да могу поделити и освојити телефонски именик?
Да ли је заиста ефикасна да Ја могу да завади па владај
Те дигиталне комада папира на табли,
ако можда то ће нас коштати Срећа у времену енергија или ЦПУ циклуса
да заиста добију наше податке у неку сортиране?
Па хајде да поставим то питање.
>> Дакле, прво се, ови бројеви су у скоро случајним редоследом,
а ја ћу да предложим један алгоритам, или процес
којим можемо сложити људе.
Идем да се обрате Ова лепа наивно.
И ја ћу препознати да је то нека врста много за мене
да заврши мој ум око цела подаци сет одједном.
Али знаш шта?
Идем да се неке веома једноставне маргиналне исправке.
4 и 2 су ван реда, уколико Циљ је да се иде 1 на до 8.
Тако да знате шта?
Ја ћу да те имам момци Свап, ако пребаците
физички позиције и Твоји комада папира.
Сада 4 и 6, то су у реду.
Ја ћу оставити онима буде.
6 и 8, који су у реду.
Отићи их.
8 АНД1, од реда.
Ако вас двојица не би сметало замене.
Сада 8 и 3, ако ви момци могли да замене.
8 и 7, ако ви момци могли да замене.
И 8 и 5, ако ви момци могли да замене.
>> Сада, ја урадио?
Не, очигледно није.
Али сам направио Ситуација боља, зар не?
Који је поново ваше име, број 8?
>> Рацхел: Рацхел.
ДАВИД Малан: Тако је Рејчел ефективно у мехурићима се прилично далеко,
све до краја Моја низ бројева овде.
И тако тај проблем је некако решен.
Сада, очигледно, 2 и даље треба да померите мало, и 4 и 6 и 1.
Али изгледа да су постали мало ближе решењу.
Па хајде да применимо исти Поново Наивни хеуристички.
2 и 4, у реду.
4 и 6, у реду.
6 и 1, мм-мм.
Хајде замену.
6 и 3, мм-мм.
Хајде замену.
6 и 7 је у реду.
7 и 5, Не.
Хајде замену.
И сада 7 и 8.
А шта је зовеш?
ФРАНЦЕС: Францес.
ДАВИД Малан: Францес.
Дакле, сада Френсис је још бољи положај, јер сада 7. и 8.
правилно пуштан до врха.
СО 2 и 4, у реду.
4 и 1, свап хајдемо.
4 и 3, свап хајдемо.
4 и 6, ти си ОК.
6 и 5, свап хајдемо.
И сада ови момци су добри.
Скоро смо стигли.
2 и 1, из реда, тако замене.
А сада дозволите ми да урадим проверу исправности.
2 и 3, 3 и 4, 4 и 5, 5 и 6, 6 и 7, 8.
У реду, тако да смо урадили.
>> Али по коју цену зар не сложити бројеве овде?
Па, колико корака И Дид потенцијално предузети када је сортирање ове људе?
Па, ми ћемо се вратити на то питање.
Али, искрено, ако имаш мало досадно, то је
врста откривајући у томе то није Можда најефикаснији алгоритам.
И заиста, искрено, ја сам знојење све више хода напред и назад.
То није осећао нарочито ефикасно.
Па хајде да пробамо нешто друго.
Ако ви могли ресет себи да ових осам вредностима.
Добар посао.
>> Хајде да погледамо дигитално, за само тренутак пре него што пробамо нешто друго,
шта се управо догодило.
Овде, ти си о томе да видиш визуелизација ових осам људи
при чему плава и црвена Барови представљају бројеве.
Виши Бар, већи број.
Краће Бар, мањи број.
А шта ћеш видети у Рандом Ордер више од осам њих.
Идеш да виде ове шипке узимајући поредани према том истом алгоритму,
или сет инструкција, које ћемо од сада звати Буббле Сорт.
Дакле приметите, сваког другог или тако, два бара су осветљење у црвено,
се однос компјутер.
А онда, ако велики бар и Мало Бар су ван реда,
они су заменили за мене.
>> Сада ово је невероватно досадан да гледају ово, свакако,
дуго, али приметио такеаваи-- велике решетке померање удесно,
Литтле барова Прелазак на лево.
Хајде да прекинете тај процес и убрзамо
да буде много бржи, тако да можемо добити на високом нивоу смислу онога што,
Заиста, мехур врста ради.
Заиста, то је бистрим до десна страна листе,
или низ, све веће шипке.
И обрнуто, мале шипке су бистрим свој пут доле лево,
мада бржим темпом него што смо раније радили.
Дакле, теже да виде са људима, али то је заиста визуелно оно
се дешавало.
>> Али хајде да покушамо фундаментално Другачији приступ сада.
Хајде да покушамо другачији Алгоритам чиме вас имамо
момци почињу у овим оригиналу позиције, што је ово наређење овде.
И идемо напред сада.
И ја ћу да урадим нешто чак и једноставније, зар не?
У ретроспективи, опет замене паровима и опет, скоро мало паметан.
Хајде да урадимо ствари још више наивно, где, ако желим да сортирате ове људе,
само да настави да тражи за најмањи елемент.
Тако сада, 4 је Најмање сам видео.
Идем да се сетим тога.
Не, 2 је боља, и не заборавите да.
1 је још мањи.
3, 7, 5.
У реду.
--виберите-- Шта је зовеш?
>> Арти: Арти.
>> ДАВИД Малан: Арти.
Дакле, Арти, само напред.
Ја ћу да вас извуче из линије.
Ако би могао да се вратиш овамо.
И морам да би направили места за њега.
Овде имамо одлуку тачку.
Како бисмо могли направити простор за Артијем овде на почетку где број 1 припада?
>> Публика: Схифт.
>> ДАВИД Малан: У реду, ми смо могао да смени све.
Али предлаже оптимизацију.
То се осећа помало досадна да питам четворо људи
да померите скроз доле.
Шта сам друго могао да урадим?
>> Публика: их Свитцх.
>> ДАВИД Малан: их Свитцх.
А шта је зовеш?
>> Јацоб: Јацоб.
ДАВИД Малан: Јаков, помери.
Много ефикасније само да имају Јацоб свап локације са Арти,
насупрот присиљавајући ова четири људи,
хвала вам пуно, да се њихов тачан положај.
Оно што је лепо у вези Артијем сада, он је у свом правилном положају.
Хајде да поновимо ово.
2, то је најмањи број сам видео.
3, 7, 5.
У реду.
2 је дефинитивно најмања.
Не морате да урадите било који посао.
Хајде да то урадимо поново.
6.
Најмањи?
8.
Јок.
4?
Оох.
Дозволите ми да се сетим 4.
3.
Дозволите ми да се сетим 3.
7, 5.
Најмањи број Имам видети на овом пролазу је 3.
Ако би се напоље.
Где ћемо да те ставим?
А како се ти зовеш?
>> Аланна: Алана.
>> ДАВИД Малан: Алана, ми смо ће морати да вас избаци.
Али, то је ефикаснији, само замене две особе,
него да има више људи заправо корак у страну преко.
Хајде сада да поновимо ово.
Идем да изаберете 4, па хајде напоље.
А ко ће да се крећу?
Број 8, наравно.
Ако ми је сада број 5, хајде напоље.
Број 8 ће се поново избачен.
Сада ћу наћи број 6 на месту.
7 у месту.
8 в месту.
>> Оно што смо урадили сада нешто што се зове селекција Сорт,
и ако смо Смештен, то је ће да се осећају мало другачије.
Идемо напред и од овог мени овде, ово висуализатион--
хајде да промените ово да-- хајде, Фирефок.
Хајде да променимо ово избор врсте.
И хајде да га убрзамо као и раније, и сада почети визуелизацију.
И ово је алгоритам другачији осећај.
На свакој итерацији, искрено, то је још једноставно.
Ја само изабрати најмањи елемент.
Сада, искрено, имам мало среће која време, у смислу да поредани супер брз.
Елементи су били случајни.
То није, као што смо на крају ћу види, у основи бржи.
Али хајде да видимо трећи и коначни приступ овде шта се дешава.
Па идемо напред и ресет вас момци једном крајње време да се у овој наредби овде.
>> И сад, ја ћу да бити мало паметнији,
само да заокружимо наше алгоритме.
Ја ћу да урадим.
Идем да се не иде назад толико.
Искрено, ја сам уморан од све ово попречно.
Само ћу узети оно што сам дата на почетку листе,
и ја ћу за сортирање да тада и тамо.
Дакле, ту смо.
Број 4.
Идем да унесете број 4 у сортиране листе.
Доне.
Ја сада тврде, и само да се то уради много Цлеар, овај део мог Листа је сортирана.
То је нека врста глупог захтева, али заиста 4 се разврстава на листи величине једног.
Сада ћу да се на број 2.
Број 2 Сада ћу да убаците на правом месту.
Дакле, где се 2 припада?
Очигледно, овамо.
Зато само напред и вратили се назад, ако можеш.
А зашто не ви само узми ваша музика стоји са вама овај пут.
И хајде да уметнете вас у почетку листе.
Па мало више посла.
Морао сам да се креће око Јакова, а како се зовеш?
>> Амин: Амин.
>> ДАВИД Малан: Амин.
Али бар нисам ишао напред и назад.
Само узимам ствари као идем.
Само сам их уметање на правом месту.
6, то је заправо прилично лако.
Хајде да убаците тамо, ако Само сам желео да се пресели у мало.
Број 8, такође прилично једноставно.
Тамо.
Проклетство.
Број 1 Не можемо само заменити са Амина овде,
јер то иде да поквари реда.
Тако да морамо да будемо мало паметнији.
Дакле, Арти, ако можеш резервну копију за тренутак.
Идемо напред и схифт сада, за разлику од наших претходних алгоритама,
да би се направио простор за Артијем овде на почетку.
Тако да је на крају дана, ја сам некако раде оно што сам хтео да избегне раније.
И тако да је мој алгоритам је некако од обрнута, интелектуално,
од онога што је првобитно било.
Ја само радим мењање брзина на другом месту.
Сада сам на 3.
Ох, проклетство.
Морамо поново да раде више.
Дакле, хајде да те избацимо.
Кренимо 8, 6, 4-- ох Ох-- и 3 ће ићи тамо.
Дакле, барем малим штедње овај пут.
7, не превише посла да се уради.
Дакле, ако желите да поп назад, хајде да убаците.
И на крају, 5, ти ако желе да поп назад, ми смо
треба да вас смени, ти, ви, до пет је на месту.
>> Па сад да видимо ово на висок ниво графички,
хајде да урадимо ово алгоритам визуелизација једном додатно време.
Дакле, ми ћемо звати уметања врсте.
Ми ћемо га покренете као брз, и покрените га овде.
И то, такође, има другачији осећај.
То је нека врста све боље и боље, али никада није савршена
док не одем у и глатко у тим празнине.
Зато што, опет, ја сам само узимајући оно Ја сам се даје са лева на десно.
Па нисам толико среће да је све било савршено.
Зато смо имали ове мало миспоситионс да фиксне током времена.
>> Дакле, све ових алгоритама изгледа да раде на мало различитим корака.
У ствари, што би рекао је најбољи или најбржи до сада?
Буббле сорт, први?
Избор врста, други?
Инсертион Сорт, трећи?
Чујем неке селекције сорти.
Друге мисли?
>> Тако испада да је свих ових алгоритама
су фундаментално подједнако ефикасна као Свака отхер-- или, насупрот томе, баш као
неефикасна као међусобно, јер можемо да урадимо суштински
боље од све три ових алгоритама.
И то је мало белог лажи, превише.
када кажем као ефикасан или као неефикасан,
То је бар за Супер-велике вредности н.
Када имамо само осам људи овде, или можда 50 или тако шипке на екрану,
апсолутно ћете приметити разлике између ове три алгоритама.
Али као Н, број људи, или број бројева,
односно број људи у телефону књига, или број веб страница
у Гоогле бази података постаје све већа и већа,
ћемо видети да сва три од ових алгоритми су заправо прилично лош.
И можемо да урадимо суштински боље од тога.
>> Хајде да погледамо, на крају, шта ови алгоритми би могао
звук као у контексту неколико других
као и путем овог визуализација овде
који ће нас упознати са број алгоритама.
Идемо напред и честитам Наши учесници овде, од којих
поредани су јако добро.
Ако желите да се поклон за растанак.
Можете да држите бројеве као добро.
И оно што ћете видети, односно чује, сад,
је у томе што смо ставили звуке свакој од ових шипки
и повезати га са софтвером, различите фреквенције звука,
можете окружити ваш ум више аудиоли око тога шта свака од ових ствари
изгледа.
Први од којих је убацивање врста
>> [ТОНЕС]
>> То је врста Буббле.
>> [ТОНЕС]
>> Избор врста.
>> [ТОНЕС]
>> Нешто што се зове спајање врста.
>> [ТОНЕС]
>> ГНОМЕ Сорт.
>> [ТОНЕС]
>> То је то за ЦС50.
Видимо се у среду.
>> НАРАТОР: А сада, "Дубоко Мисли ", по Давен Фарнхам.
Зашто је је за петљу?
Зашто не би било боље?
Ја бих направити пет петљу.
>> [СМЕХ]