DAVID Malan: Gerai.
Taigi tai yra CS50, ir tai yra dabar savaitės trijų pradžia.
>> Taigi iki šiol, mes buvo raštu programas C
kad atrodo šiek tiek kažkas panašaus į tai čia.
Taigi mes turime porą aštrus apima viršuje.
Mes turime int pagrindinis, negaliojančiu, ir tada kažką daryti per vidurį,
kai šiek tiek kodo viduje tos funkcijos.
Tačiau raktas buvo tai, kad mes kalbėjome negaliojančiu čia.
Taigi negaliojančiu, visą šį laiką, nurodoma, kad ši programa, kai paleisti,
galima paleisti tik per savo vardu.
Jūs negalite įvesti bet kokius kitus žodžius ar Skaičiai po programos vardą kai
paleisti jį.
Taigi, pavyzdžiui, jei programa buvo surinkti į failą pavadinimu Sveiki,
galite padaryti ./hello, bet kad tai.
>> Vienintelis būdas, kad galėtumėte prisidėti prie šios programos
yra paskambinus funkciją.
Pavyzdžiui, kokią funkciją mes buvo iki šiol, naudojant
gauti informacijos iš vartotojo?
>> PUBLIKA: Gauk eilutę.
DAVID Malan: Norėdami gauti eilutę, arba gauti int, ar jūs matėte kitus,
, net jei jūs dar naudojo juos, kaip gauti ilgai, ilgai ir pan.
Bet tarkime, kad mes tikrai norite pradėti
rašymo programos, kurios yra šiek tiek daugiau universalus, ir, tiesą sakant, šiek tiek daugiau
kaip komandas jūs buvo gauti, tikiuosi,
šiek tiek pripratę.
Kaip kompaktinio disko erdvės Dropbox.
Tai, žinoma, pokyčiai Jūsų katalogas, darant prielaidą,
Jūs esate John Harvardo namuose katalogas, į savo Dropbox aplanką.
Tuo tarpu, komanda, kaip tai sukuria naują katalogą, pavadintą pset2,
kaip jūs galbūt jau arba netrukus už problemos nustatyti du.
Padaryti Sveiki, žinoma, yra komanda kad stato programą "labas
iš failo pavadinimu labas taškas c.
Ir kiekvienas iš jų atvejai, dabar mes jau
pateikti argumentą vadinamasis komandinės eilutės, mirksi greitai,
kad gamintojas žino, ką statyti ir tt kad mkdir žino, ką aplanko kurti,
ir taip, kad cd žino ten, kur norite eiti.
Tačiau iki šiol, mes nuolat sako kad pagrindinis jūsų numatytasis funkcija,
turi void išraiška viduje šių skliausteliuose,
tai reiškia, kad jai negali imtis jokių argumentų.
>> Taigi pradedant šiandien ką mes ketiname daryti,
yra, mes ketiname pradėti remti tokius dalykus kaip šis net.
Tiesą sakant, šiuo atveju, kuris jums paprastai nėra rankiniu būdu įvesti,
Padaryti tai daro jau už mus, ten nėra
vienas, bet vienas, du, trys papildomos stygos po programa pavadinta
Zaszczękać.
Taigi, kaip mes tai pasiekti?
>> Na, pradedant šiandien tais atvejais, kai mes norime
siekiant prisidėti per Vadinamasis komandinės eilutės,
mes ketiname pradėti pridedant čia kas yra yellow--
pakeičiant negaliojančiu su int argc kableliu styginių argv atviras laikiklis skliaustai uždaromi.
Dabar tai įdomu už keleto priežasčių.
Vienas iš jų, jis ketina pranešti mums rašyti programos, kurios yra šiek tiek labiau dinamiškas.
Tačiau, daugiau įtikinamai, jis ketina atverti
dabar pokalbis būtų kas masyvai tikrai gali
būti naudojamas, kas eilutę tikrai yra po gaubtu,
iki kitos savaitės, kai mes pradedame nardymas į dar giliau, kaip mašina
kad visi iš šių dalykų darbe.
Bet dabar, tegul piešia, galbūt, nuotraukos.
>> Rašydami programą su pagrindinis paskelbė
Tokiu būdu, pavyzdžiui, kad pagrindinis trunka du argumentus, int
and-- kas duomenų tipas yra antrasis argumentas?
>> PUBLIKA: Array.
DAVID Malan: Array.
Taigi atrodo iš pirmo žvilgsnio, kaip tai eilutė, bet pastebėsite, skliaustus.
Prisiminkite paskutinį kartą pristatėme masyvo sąvoka.
Ir masyvai naudoti skliaustus, kontekstuose pora.
Galite naudoti aikštėje skliausteliuose eiti į masyvą
ir gauti tam tikrą elementą, pavyzdžiui, laikiklis 0 arba laikiklis 1 arba laikiklis 2.
Bet mes matėme, jei trumpai, praeitą savaitę, kad jūs taip pat
naudoti šiuos skliaustus, į paskelbti dydį masyvo,
jei iš anksto žinoti, kiek ints arba kiek stygos arba ką
iš tikrųjų nori.
Taigi paaiškėja, ten trečioji kontekstas čia
kad neturi skaičių viduje iš laužtiniuose skliaustuose.
Kai nurodote, kaip aš čia kažką panašaus argv vardas,
kuri yra tik išgalvotas būdas sakydamas argumentas vektorių, kuris
yra dar vienas išgalvotas būdas sakydamas savo argumentų masyvo,
atviras laikiklis skliaustai uždaromi tik reiškia, kad jūs nebūtinai
iš anksto žinoti, kaip didelis masyvas bus,
bet jūs žinote, jis ketina būti masyvas.
Taigi, jei jūs nežinote, skaičius nedėkite ten,
atviro kronšteino glaudžiai laikiklio reiškia, kad argv nėra eilutė,
bet eilučių masyvas.
Taigi sintaksiškai, jei jums prisiminkite praėjusią savaitę,
tai labai panašus į sakydamas kažkas panašaus į int amžiaus atviras laikikliu
ir tada kažkas vėliau.
Taigi, ką tai atrodo?
Leiskite tikrųjų atkreipti nuotrauką.
Taigi, kai jūs paleisti šią programą su pagrindiniais Turinčios dvi argumentai apibrėžta viduje
tų skliausteliuose, jūs iš esmės turi bent du gabaliukus
atminties įteikė jums po gaubtu.
Vienas iš jų, kaip aš jums atkreipia kaip stačiakampio, ketina būti vadinamas argc.
Ir lygiai taip pat greitai Priminti, kas yra duomenų tipas, argc?
Taigi, tai vid.
Taigi skaičius nuolat eiti argc-- posūkių
, kad stovi argumentų skaičius.
Tuo tarpu, aš sudarytas argv kaip masyvą.
Ir aš tikrai nežino, kaip ilgai jis bus,
taip šiandienos tikslais dot dot dot.
Ji gali gauti tam tikros trukmės.
Bet aš čia nuotraukoje bent keturi stačiakampiai.
Taigi argv iš atminties, kuri saugo riekė Styga Styga Styga dot dot dot,
ir argc yra tik vienas gabalas iš atminties sveikasis skaičius.
>> Taigi dabar, būkime truputį tikslesnis.
Jei kai turiu stygos šiame masyve, vadinamas
argv, aš noriu gauti į juos atskirai, kaip praeitą savaitę,
mes ketiname naudoti žymėjimo kaip argv laikiklio 0
gauti pirmas dalykas masyvą.
Argv laikiklis 1 gauti Antras dalykas, ir taip toliau.
Svarbiausias čia yra, mes vis dar 0 indexed-- mes vis dar skaičiuojant nuo 0.
Taigi dabar tegul iš tikrųjų įdėti kažką tai.
Jei aš būčiau sudaryti programą, pavadintą labas iš failo pavadinimu labas taškas c,
ir tada aš paleisti šią programą dot slash Sveiki,
ką mano kompiuterio, mano nešiojamas, atrodo po gaubtu
Šiuo metu aš paleisti taškas velniop labas ir paspauskite "Enter"?
Na, tai turbūt ką galėtume apibūdinti
kaip kompiuteris turinį atminties arba RAM-- Random Access Memory.
Kitaip tariant, kompiuteris, kažkaip jums stebuklingai,
kelia numeris 1 argc, AKA argcount, ir tai kelia tiesiog eilutę
./hello į argv laikiklio 0.
Neįsivaizduoju, tiesą sakant, tai, kas į argv laikikliu 1, 2 arba 3,
nes jei vartotojas turi ne įvedėte nieko be ./hello,
mes ketiname daryti prielaidą, kad šie yra labiausiai tikėtina, šiukšlių vertybes,
taip sakant.
Šie atminties gabaliukus egzistuoja, bet tai ne mums
pažvelgti į juos, nes argcount yra tik vienas.
>> Dabar, tuo tarpu, jei aš rašyti paleisti kitą programą,
CD, kuri yra daugiau tinkamai komandą, Jūsų mirksi prompt-- cd erdvę
Dropbox-- kai aš paleisti, kad efektyviai, kai cd programa paleisti, argc,
viduje mano kompiuterio atmintyje, yra Patys trumpiausią antras skaičius 2.
Ir tada argv laikiklis o turi CD, argv laikiklis 1 turi Dropbox,
ir tada, žinoma komanda baigia, todėl visą šį atminties
esmės nueina ir naudojama kažkas.
Ir štai kodėl aš sakau, tik sekundės.
>> Tuo tarpu, jei mes mkdir pset2, vaizdas atrodo beveik tą patį,
bet su skirtingais stygos viduje argv.
Jei aš Zaszczękać brūkšnys labas labas taškas c, pačią idėją.
Daugiau stuff užpildytas argv ir argc, žinoma, yra 4.
Taigi, kitaip tariant, nors šio masyvo
gali būti dot dot dot, kai kintamo ilgio, taip sakant,
jūs visada žinoti, kur jo pabaigos yra, nes argc ketina pasakyti jums
momentas, kada turite nustoti žiūri elementų argv.
Jūs galite ieškoti tik keturių iš viso šiuo atveju.
>> Tad dabar pats pažvelgti, galbūt, paprasta programa.
Vienas, kad tiesiog sako labas kad kažkas panašaus Zamyla.
Taigi, aš teigti aš ruošiuosi parašyti programą vos akimirką, per kurią galėčiau padaryti
./hello erdvė Zamyla, tada aš noriu mano programa atsispausdinti kažką
super paprasta, kaip "Labas, Zamyla."
Dabar praeityje mes naudojamas getstring.
Taigi praeityje, net jei esate naujas programavimo,
šansai yra jums gali pakelti programa, kuri naudoja getstring
ir tada naudoja printf pasisveikinti su Zamyla.
Bet tegul ne naudoti getstring šį kartą.
Leiskite vietoj eiti į Appliant o apima standartinį I O dot val.
Leiskite taip pat CS50 dot val.
Dabar int main, ir dabar aš nesiruošia daryti negaliojančiu šiandien.
Vietoj to, aš ruošiuosi daryti int argc styginių argv atviras laikiklis skliaustai uždaromi,
nenurodant numerį.
Ir dabar čia yra mano vadinamasis daryti.
Ką aš ruošiuosi padaryti dabar yra, aš tikiu, ketinate daryti apie tikėjimo šuolis truputį,
Aš ruošiuosi daryti prielaidą, kad vartotojo vyksta teisingai naudoti šią programą,
ir aš tiesiog ketinate padaryti printf Sveiki,% sn.
Taigi nieko naujo ten.
Bet aš noriu dabar įdėti, ką žodis vartotojas įveda Po programos pavadinimą.
Taigi, jei aš ./hello erdvę Zamyla, aš noriu kažkaip programiškai prieiga
citata citatos "Zamyla." todėl aš gali eiti į mano argumentas vektorių,
mano masyvo eilučių ir jei komandą, vėl buvo ./hello erdvė Zamyla,
kokiu numeriu aš noriu įdėti į argv čia?
PUBLIKA: 1.
DAVID Malan: 1, nes laikiklis 0 paaiškėja,
bus Programos pavadinimas, kaip matėme.
Taigi laikiklis 1 yra pirmasis žodis kad I, vartotojas, įvedėte.
Aš ruošiuosi eiti į priekį ir išsaugoti tai.
Aš ruošiuosi eiti į mano aplanką kur aš pateikti šį failą.
Aš ruošiuosi daryti, kad Hello 3.
Comp IO yra Gerai.
./hello Zamyla Enter.
Ką man daryti negerai?
Aš sugauti netikėtai aš tik už akimirką ten.
Ką man daryti negerai?
>> PUBLIKA: Vardas.
>> DAVID Malan: failo tikrųjų vadinamas hello3.c.
Ir aš padariau, kad tik nuoseklumas, nes mes
turėjo hello.c 's praeities internetinėje kodą.
Taigi leiskite išspręsti šią ./hello laikiklis brūkšnys 3 Zamyla.
Įveskite.
Ir dabar mes turime labas, Zamyla.
Tuo tarpu, aš galiu jį pakeisti būti Robas, arba tikrai bet koks kitas žodis.
>> Tačiau aptarkime kampe bylą.
Kas gali tikitės atsitiks, jei Nemanau tipo niekieno vardą ne visi?
>> PUBLIKA: Klaida.
>> DAVID Malan: klaida kažkoks, galbūt.
Pažiūrėkime.
Įveskite.
Null.
Taigi printf iš tikrųjų yra mažai saugo mus
čia, ir tiesiog spausdinti atvirų paren null, bet dar blogiau dalykų gali atsitikti.
Ir tik parodyti ką jūs visiškai
neturėtų daryti, eikime į čia ir pradėti išnyra aplink.
Teisė?
Jei aš žinau, kad į paveikslėlį atmintis iš esmės yra tai,
argv laikiklis 1 turi Zamyla, argv laikiklis 0 turi ./hello arba ./hello-3.
Kas yra laikiklis 2?
Taigi aš galiu atsakyti, kad klausimą sau, ar ne?
Galiu tiesiog pakeisti 1 iki 2.
Dabar galiu perkompiliuoti labas 3, ./hello3 Leiskite padidinti ir paspauskite "Enter".
Oi.
Nėra kabutes.
Įdomu.
Štai kokios cool pamatyti, ką dar yra čia.
>> Taigi, ką dar yra viduje mano nešiojamas?
Leiskite išsaugokite jį su laikikliu 3.
Padaryti hello3, ./hello-3.
Keistas.
O dabar galime gauti tikrai bold-- 50.
Taigi, kad tikrai nardymo giliai į mano kompiuterio atmintyje.
50 indeksus.
Todėl įsitikinkite, Hello 3 ./hello-3.
Keistas.
Gerai, dabar aš tiesiog ketina gauti neapgalvotas.
Vykime į 5000.
Viskas gerai.
Taigi leiskite man perkompiliuoti.
Padaryti hello3, ./hello-3.
Gerai.
Dabar kai kurie iš jūsų, gali būti lemputė nenukryptų.
Kiek turite matė šį pranešimą prieš?
Gerai.
Taigi, kodėl?
>> Kursai are-- ir ten skiriasi dalykų, kurie gali sukelti tai,
ir aiškiai esate geras draugija turime aiškiai
sukėlė tai, kas vadinama segmentavimo kaltės.
Ir ilga istorija trumpa šiandien, aš jau palietė atminties segmentą
kad aš ne turėti.
Kur segmentas tiesiog reiškia, riekė atminties, kad aš neturiu.
Dabar kompiuteris užtikrina, kad, jei aš paleisti ./helloZamyla kad galiu paliesti argv
būti laikiklis 0 ir argv laikiklis 1.
Bet argc yra vertė 2, tai reiškia, kad aš esu tik allowed-- tai tarsi garbės
system-- liesti laikiklis 0 ir laikiklis 1.
Jeigu aš eiti toliau, ten visiškai bus atminties ten.
Mano RAM egzistuoja fiziškai kompiuteryje.
Bet kas žino, kas ten?
Iš tiesų, aš bėgu kartotinis programos vienu metu.
Aš gali turėti seen-- jei aš būčiau ne Tokiu būdu į Appliant
bet mano Mac ar PC-- galiu turėti matė elektroniniu paštu turinį.
Galėčiau mačiau akimirksniu žinutė Aš neseniai išsiųstas.
Viskas, kas gali būti išlikęs aplink atminties
galėjo būti atvertas būdu tai savavališkas kvadratinių laikiklis notacija.
Arba, dar blogiau, jums gali tekti rasti vieną iš mano slaptažodžius
kad aš neseniai įvestas, kad programa buvo saugomi atmintyje taip
autentifikuoti mane, tada tiesiog rūšies paliko jį
RAM, kol aš mesti tą programą.
>> Ir iš tiesų, tai yra vienas iš pavojus ir vienas įgaliojimai
naudojant panašų C kalbą Jūs turite užtikrinti nekliudomą prieigą
į visą turinį iš programos atminties,
ir ką blogi vaikinai gali net daryti tose cases--
ypač kai mes gauti interneto programavimo
link semestro pabaigos, mes peržiūrėti šį topic-- yra baksnoti aplink,
potencialiai kažkieno kompiuterio atminties ir rasti tokių smalsių dalykų
kaip matėme ten.
Arba net dar blogiau, slaptažodžius, kad jis arba ji gali tada naudoti daryti blogus dalykus.
>> Taigi aišku aš ne tai padarysite, nes keistam dalykų pradėti atsitikti.
Iš tiesų, tai yra programa, genda.
Tai būtų lygiavertis Mac OS arba Windows
programa langas tiesiog nyksta.
Netikėtas įvyko klaida.
Be komandų eilutės aplinka matome kažką panašaus į tai.
Bet tai, kodėl yra aš tiesiog palietus atmintis, kuris nepriklauso man.
>> Taigi leiskite gintis nuo šio a šiek tiek kitaip
, žiūrėdamas šią programą čia.
Taigi, dar kartą, skeletas kad mes matėme earlier--
ir aš atkreipė dėmesį į šią laiko int.
Ir visą šį laiką pagrindinis yra iš tikrųjų grąžino vertę.
Nors daugumoje mūsų paskaitos pavyzdžių mes niekada kadaise
grįžti nieko pagrindinis.
Mes tiesiog parašyti printf close garbanotas petnešomis ir viskas.
Bet nemokamai, kas kompiliatorius buvo padaryti už jus,
efektyviai, grįžta 0 už jus.
Pasirodo out-- ir tai mažai counterintuitive-- kad 0 yra gera.
Tai nereiškia, kad klaidingas savaime.
0 yra gera, ir nors ne 0 vertė, pasaulis nusprendė,
gali reikšti klaidą.
Taigi, jei jūs kada nors messed kažkas ant jūsų kompiuterio,
ar programa tik mirė nuo jūsų ir jūs Dotarłeś šiek tiek klaidingą langą
ekrane, sakydamas klaida neigiamas 49 ar klaida 23--
kai, atrodytų, savavališkas value-- tai nes programuotojas sunkiai koduojami
vertė, kaip neigiamas arba teigiamas 49 23 atstovauti bet koks skaičius, išdrįstų pasakyti,
iš 4 milijardų galimų dalykų kad gali suklysti programą.
>> Taigi, kaip galėčiau imtis privalumas tai pats?
Na, leiskite man atverti programą kad aš parašiau iš anksto,
ir baksnoti aplink internete vadinamas Hello 4.
Ir tai beveik identiškos, išskyrus tai, kad jos gavo truputį Klaidų tikrinimas.
Šiuo atveju, aš vėl paskelbė Pagrindinis pat atsižvelgiant du argumentus,
bet šį kartą, on line 17 pranešimas Darau tam normalumas patikrinti tiek.
Aš įsitikinkite, kad argc lygi lygi 2.
Nes jei jis yra, kad tai aš galiu saugiai
paliesti ne tik laikiklį 0, bet laikiklį 1.
Ir aš einu į priekį ir atsispausdinti, šiuo atveju Zamyla arba Rob
ar kokia žodis įvedžiau iš.
O dabar tik gauti šiek tiek daugiau tinkamas,
Aš ruošiuosi aiškiai grįžti 0, reiškia viskas yra gerai.
Nieko blogo neatsitiko.
>> Tačiau pagal susitarimą, aš ruošiuosi grįžti 1, arba atvirai bet ne 0 vertė,
jei kažkas negerai.
Dabar vartotojas nesiruošia tikrai pastebėsite, kas vyksta.
Iš tiesų, jei aš einu į šį katalogą, mes priartinti ir padarysiu Hello 4,
./hello-4 Zamyla elgiasi kaip aš tikėtis.
Bet jei aš vietoj ne tipo nieko, nieko, atrodo, kad taip atsitiktų,
tačiau ji nėra gedimų.
Ir jei aš vietoj kažką kaip Rob yra Proctor
į Thayer-- pasidalijimo savavališkas informacija.
Tačiau pranešimas, argv 1, 2, 3, 4 ir 5 dabar turėtų egzistuoti atmintyje.
Tai taip pat yra ne tai, kas mano programa tikisi,
nes aš patikrinti, ar argc lygus lygus 2 ar ne.
Taigi, aš dabar ginti prieš tai.
>> Dabar, kaip žemę, mes programmer-- ar veikiau mes users--
niekada matyti, kad 0 arba 1, tačiau naudojant įrankis, vadinamas Debugger, arba kitas priemones,
kaip matysime prieš ilgas, galite programuotojas
iš tikrųjų gali pamatyti, kas gali būti negerai viduje savo programą.
>> Taigi, kokių nors klausimų apie argc?
Taip.
>> PUBLIKA: aš mačiau, kur jie neturėjo charakterį, [nesigirdi]
tik pasakė styginių žvaigždė r, pavyzdžiui, charakteris žvaigždutė kablelis.
Ar jie atitinka čia?
>> DAVID Malan: Jie yra.
Taigi klausimas yra, jūs turite kartais matė programos
kaip tai, kad ne sako styginių argv laikiklį
bet vietoj to ką nors pasakyti kaip char žvaigždė argv laikiklio.
Ir ten net kita variantai, kad jūs galite pamatyti.
Jie iš tiesų yra lygiavertis.
Nes dabar, mes turime tai rūšiuoti mokymo ratų
ant į eilutę į CS50 formos biblioteka, tačiau vos per savaitę
ar taip mes ketiname pašalinti, kad obstrukcija visiškai ir iš tikrųjų
pažvelgti, kas char ir žvaigždės , ir kaip tie susiję su atminties
atstovavimas apskritai.
Taigi mes grįžti prie to.
>> Kiti klausimai apie mūsų argv ar argc?
Taip.
PUBLIKA: Kodėl jis grįžta klaida [nesigirdi]?
DAVID Malan: Kodėl tai padariau grąžina klaidos jei jums reikia oh!
Be ankstesnėje byloje, kai mes buvo futzing aplink su atmintim,
kodėl jis tik grąžina klaidos kai aš tikrai įvedėte didelį skaičių?
Trumpas atsakymas yra, mes tiesiog pasisekė.
Apskritai, kompiuterio paskirsto atmintį gabaliukus,
ir jis man davė pakankamai didelis riekė, kad Aš toli, nepastebimai,
paliesti laikiklio 2, laikiklis 3 laikiklis 50, bet kaip tik aš stumdosi
mano laimė, aš peržengė ribos atminties riekė
operacinė sistema davė man.
Ir tai, kai jį prispaustas ir sakė, ne.
Segmentavimas klaida.
Taip.
>> PUBLIKA: Kaip veikia kompiuteris žinoti argc vertę?
>> DAVID Malan: Kaip veikia kompiuteris žinoti argc vertę?
Paleidus programą, kad programa, pagal pobūdį mirksi eilutę
perduodamas iš masyvo žodžiai, kurie buvo įvestas
ne greitai, kad buvo įvedėte eilutėje.
Ir todėl jis yra jūsų operacinė sistema, kuri iš esmės
užpildo pagrindinių argumentų už jus.
Štai viena iš paslaugų kad jūs gaunate, tarsi slapta
prispaudžia gaubtu operacinė sistema.
Kiti klausimai?
Taip.
>> PUBLIKA: Ką branduolys sąvartynas reiškia?
DAVID Malan: Ką branduolys sąvartynas reiškia?
Štai geras klausimas.
Ir leiskite man grįžti į Šis katalogas čia.
Ir jūs pastebėsite, kad Turiu naują failą ten.
Tai iš tiesų vadinamas branduolys, ir tai iš tikrųjų paprastai padoraus dydžio failą.
Tai iš esmės yra fotografiją įrodymas, kad mano programos atminties turinį
arba RAM, kai jis sudužo.
Ir tai bus naudinga, potencialiai diagnostiniu,
kai mes kalbame būsimos paskaitos ir skyriuje apie derinimo,
nes jūs iš tikrųjų galite padaryti ekvivalentas skaitmeninio skrodimo
dėl šios bylos, kad padėtų išsiaiškinti ką padarė negerai savo programą.
Taip.
>> PUBLIKA: Ar argc komandą į pati, ar galite įvardyti tai nieko?
>> DAVID Malan: Geras klausimas.
Ar argc komandą savaime, ar galite pavadinti jį ką nors?
Tai tikrai ne komanda.
Tai tiesiog kintamasis s Vardas ir pavardė arba argumentas vardą,
ir taip absoliučiai mes galima pavadinti šį foo,
galėtume vadinti šią juostą, kuri yra linkę būti eiti į žodžius, kad kompiuterių
mokslininkas eina į.
Tačiau pagal susitarimą, mes naudojame argc ir argv.
Bet tai tik žmogaus konvencija, nieko daugiau.
Viskas gerai.
Taigi pasirodo, aš buvau pasakoja balto lie-- tiek
ir tiesą sakant, ateityje, pamatysite mes jau pasakojo kitas baltas melas.
Bet dabar, mes ketiname žievelės atgal vieną iš šių.
Šiuo atveju čia kai aš anksčiau vyko kaip ./hello arba ./hello-3 programos
Zamyla, mes turėjome turinyje mano Kompiuterio atminties ieško beveik kaip
tai.
Bet prisiminti, kas eilutė.
Ką mes galime pasakyti prieš savaitę, kas eilutė iš tikrųjų yra po kapotu?
PUBLIKA: Array simbolių.
DAVID Malan: Tai masyvas simbolių, tiesa?
Taigi, mes galime turėti iš masyvo stygos, bet, savo ruožtu, seka
yra simbolių masyvas.
Taigi, jei aš tikrai noriu būti analinis kai piešiu šią nuotrauką,
Aš tikrai turėtų būti brėžinys tai šiek tiek daugiau, kaip šis,
, pagal kurį kiekvienas iš jų indeksus mano argv masyvo,
yra pati visa eilutė kad pati yra masyve.
Ir dabar baltas melas mes sakau šiandien
yra tai, kad vaizdas nėra atrodo gana panašus į šį.
Iš tiesų, mažai kvadratų yra paprastai už didelių stačiakampių
ten.
Bet mes grįžti į, kad iki ilgai.
Bet tai ./hello Backslash 0, kad yra specialus simbolis, kad
atriboja styginių pabaigą, ir mes turime dar vieną po
Zamyla pavadinimas.
Taigi, ką tai reiškia?
>> Na, leiskite man eiti į priekį ir atverti kitus du pavyzdžius
, kurie yra prieinami internete.
Vienas iš jų yra vadinamas argv1.c ir kitas argv2.
Tai super paprasta programa, kuri skiriasi nuo ankstesniųjų programų
tuo, kad dabar aš naudoju argc ir argv čia.
Ir dabar aš integruojant su už linijos į 0 linijos 18, nuo i = d iki argc.
Ir ką aš ketinu daryti su šio kodo čia linijos?
Anglų kalba.
Tai akivaizdžiai rodo, naudojimą argc.
Bet anglų kalba, ką tai daryti, jei aš paleisti šią programą?
Taip?
>> PUBLIKA: Jis ketina spausdinti ekrano tiek kartų, kiek norite.
DAVID Malan: Būtent.
Taigi ką aš žodžiai įrašykite bent eilutę, tai
ketina atryti juos man po vieną eilutėje.
Taigi eikime į priekį ir tai padaryti.
Leiskite man eiti į mano katalogą ir padarysiu argv1 ./argv1.
Ir dabar, tegul laikyti jį paprasta.
Darom nieko ne pirmas.
Jis padarė spausdinti vieną dalyką, ir tai tikrai programos pavadinimas,
nes tai yra laikiklis 0.
Jeigu aš dabar pasakyti foo, jis ketina padaryti tie du, ir, jei aš sakau, foo bar,
jis ketina pasakyti šiuos tris dalykus.
Dabar tai šiek tiek įdomus, gal.
Bet prisiminti, kad argv yra eilučių masyvas,
bet eilutė yra iš simbolių masyvas, todėl galime imtis dalykų vienu žingsniu
ir taikyti, kad pagrindinė logika ir padaryti kodą
atrodo šiek tiek daugiau paslaptingas, tiesa.
Tačiau turėdami įdėtos kilpa, kažką panašaus
ką jūs tikriausiai pamenate, kad iš Mario, Pavyzdžiui, jei tu jį šiuo būdu.
>> Taigi, dabar pastebėsite on line 19, aš vėl Iteracja per mano argumentus,
nuo 0 nuo iki argc.
Ir dabar atitinka 21-- aš skolindamasi iš paskutinio week-- triuką
Aš patikrinti, kas yra ilgis argv laikiklio i.
Aš saugoti, kad n atsakymą.
Ir tada aš integruojant iš j ant iki n, kur j yra inicializuoti 0.
Taigi, Konvencija skaičiavimui.
Kai jūs naudojote i, jei turite įdėtos kilpos, jūs negalite naudoti i vėl,
kitaip jums Bylų, potencialiai vertė ne vidinės kilpos.
Taigi aš naudoju j pagal susitarimą.
Mes galime naudoti k.
Jei turite daugiau nei k, tikriausiai per daug lizdus, ​​paprastai.
Bet dabar, pastebės mano printf linija yra šiek tiek kitoks.
Aš nespausdina% s, aš spausdinti% C, kuris, žinoma,
yra už char vietos rezervavimo ženklas.
>> Ir dabar pastebėsite šį sintaksė.
Nauja.
Mes nematėme anksčiau.
Bet logiškai, tai tiesiog reiškia, gauti osios eilutę argv
ir gauti jth ką?
PUBLIKA: Personažo.
DAVID Malan: Simbolių toje eilutę.
Taigi, naudojant skliaustus, po laužtiniuose skliaustuose,
tai yra nardymo pirmas į argv yra stygos,
ir tada antra Kvadrātiekavas su j
yra nardymo į simbolių kad visų pirma eilutę argv.
Ir tada, tik gera priemonė, Aš spausdinant naują eilutę čia.
Taigi dabar leiskite man eiti į priekį ir atidaryti iki šiek tiek didesnio lango
todėl mes galime pamatyti šį veiksmą.
Leiskite man eiti į tą aplanką.
O dabar padarysiu argv-2-- whoops-- padaryti argv-2, ./argv 2.
Įveskite.
Ir tai šiek tiek sunku vertikaliai skaityti,
bet tai iš tiesų iš vardo programa, po tuščią eilutę.
Dabar leiskite man eiti į priekį ir daryti foo.
Panašiai sunku skaityti, bet tai Iš tiesų spausdinti vieną simbolį eilutėje.
Ir jei aš juostą, tai dabar spausdinti tuos eilutė po eilutės.
Taigi Takeaway čia yra ne tiek , kad wow, pažvelgti į šią tvarkingas naujos triukas
kur galima gauti prie turinio masyvo specifinių simbolių,
o kaip mes atsižvelgiant šiuos pagrindinius idėjos, kaip indeksavimo į masyvą,
ir tada indeksavimo į masyvas buvo tame masyve,
ir tik taikant tokias pačias idėjas šiek tiek sudėtingesni pavyzdžiai.
Tačiau pagrindai tikrai ne pasikeitė, net nuo praėjusios savaitės.
>> Dabar tai yra tarsi laiku, tuo, kad, žinote, nulinės savaitę
mes grojo su telefonų knygoje, kaip šis.
Ir nors tai yra žinoma, fiziniai popieriaus gabaliukai,
galite rūšies galvoti Telefonų knyga kaip masyvą.
Žinoma, jei jums buvo reimplement tai gabalai šie popieriaus gabalėliai
kompiuteryje, turbūt jums būtų naudoti kažką
kaip masyvas saugoti visus tuos vardai ir numeriai nuo A visą kelią
per Z. Taigi, tai yra gražus, nes jis leidžia mums galimybę,
ko gero, apsvarstyti, kaip jums gali realiai įgyvendinti kažką panašaus, kad.
Kaip su durimis serijos čia.
Taigi, jei aš could-- turime vieną savanoriškai ateiti iki.
Pažiūrėkime.
Nepažįstamas veidas galbūt, nepažįstamas veidas galbūt.
Kaip apie oranžine spalva?
Čia.
Oranžinė palaidinė, nagi iki.
>> Vykime į priekį dabar ir judėti šios durys šalikelėje,
perkelti juos iš už akimirką būdu.
Koks tavo vardas?
>> AJAY:
>> DAVID Malan: Ajay.
Davidas.
Nice to meet you.
Viskas gerai.
Taigi, mes turime už šių šešių durys skaitmeniniu į screen--
arba, tiksliau sakant, septynios durelės screen-- visa krūva skaičių.
Ir aš Jums sakė nieko į advance-- sutiko?
AJAY: Nieko iš anksto.
DAVID Malan: Viskas, ką aš noriu jums padaryti dabar yra rasti už mane, ir už mus,
tikrai, skaičius 50, vienas žingsnis metu.
>> AJAY: Taškų 50?
>> DAVID Malan: skaičius 50.
Ir jūs galite atskleisti, kas yra Už kiekvieną iš šių durų
tiesiog paliesdami jį pirštu.
Velnias. [Juokas]
>> [Plojimai]
>> Labai gerai padaryta.
Gerai.
Mes turime mielą dovaną premija už jus čia.
Jūsų pasirinkimas filmų mes aptarė praėjusią savaitę.
>> AJAY: O, žmogau.
O, aš niekada nemačiau Spaceballs.
>> DAVID Malan: Spaceballs.
Viskas gerai.
Taigi laikykis tik vieną akimirką.
How-- padarykime tai būti mokomi moment--
kaip gi tu apie rasti skaičių 50?
AJAY: Aš pasirinkau atsitiktinai.
DAVID Malan: Taigi jūs pasirinkote atsitiktinai ir pasisekė.
AJAY: Taip.
DAVID Malan: Gerai.
Puikus.
Taigi dabar, turėjo jums ne Dotarłeś pasisekė, ką dar
galėjo atsitikti už šių durų?
Taigi, jei aš einu į priekį ir atskleisti šiuos numerius čia,
jie iš tikrųjų yra atsitiktine tvarka.
Ir geriausia, ką gali turėti padaryta, tiesą sakant, yra iš, galiausiai,
blogiausiu atveju, tikrinti juos visus.
Taigi jūs turite super laimingas, kuris yra ne tai, ką mes norime skambinti algoritmą.
Taip, sveikinimai.
Bet dabar let's-- Humoras man, jei gali.
Vykime į šį skirtuką čia.
Ir čia yra aiškiai numeriai kas atrodo atsitiktine tvarka,
ir jie buvo.
Bet dabar, jei aš vietoj teiginys kad už šių durų
yra skaičiai, kurie yra rūšiuojami.
Tikslas dabar yra taip pat mus rasti skaičių 50.
Bet tai padaryti algoritmiškai ir papasakoti, kaip jūs ketinate apie tai.
Ir jei jūs ją rasti, jūs nuolat filmą.
Jūs nerandate tai, jūs suteikiate jai atgal.
AJAY: Taigi, aš ruošiuosi patikrinti galus pirma, siekiant nustatyti, ar there's--
[Juokas ir plojimai]
DAVID Malan: Here you go.
Paimkime bent vieną išvaizdą iš Ajay pirmtakai,
Sean, kuris buvo ne visai taip pasisekė.
Gerai, kad savo užduotį čia Sean, yra taip.
Aš paslėpti už tai durys septynetas,
bet nuošalioje kai kuriose iš šių durų taip pat yra ir kitų ne neigiami skaičiai.
Ir jūsų tikslas yra galvoti apie tai, viršutinėje eilutėje numerius kaip tik masyvą.
Užtenka tik vienetų seka popieriaus su skaičiais už jų.
Ir jūsų tikslas yra, tik naudojant viršų masyvas čia mane surasti skaičių septyni.
Ir mes tada ketiname kritika kaip jums eiti apie tai daro.
Kaip mus rasti skaičių septyni, prašau.
Ne
5, 19, 13.
Tai ne triukas klausimas.
1.
Šiuo metu jūsų rezultatas nėra labai gerai, todėl jūs galite taip pat nuolat vyksta.
3.
Eiti į.
Atvirai kalbant, aš negaliu padėti, bet įdomu ką jūs net galvoti apie tai.
>> Sean: Gebu tik iš viršutinėje eilutėje.
DAVID Malan: Tik viršutinėje eilutėje.
Taigi, jūs turite tris kairę.
Taigi mane surasti 7.
>> [PUBLIKA šūksniai PASIŪLYMAI]
Taigi abu tai buvo nuostabu dėl labai skirtingų priežasčių.
Taigi, tai yra, kai mes nerašomas prieš akimirką,
ir svarbiausia įžvalga čia buvo šios durys buvo numerius
už jų, kurie buvo surūšiuoti, idealus Takeaway, dėl kurių yra tai, kad jūs galite padaryti
iš esmės geriau šis antrasis example--
ir, tiesą sakant, tai buvo Seano pirmasis bandymas su atsitiktinių skaičių
kaip before-- bet kaip tik kaip šie skaičiai yra rūšiuojamos,
panašiai kaip telefonų knygoje, ką jūs akivaizdžiai daryti?
Arba, kaip jūs galite sverto, kad žinios?
Taip.
>> PUBLIKA: Nueini pusiaukelėje [nesigirdi].
DAVID Malan: Taip.
Būtent.
Taigi Ajay pradinis instinktas buvo Tikrinti galus, kaip prisimenu,
ir tada mes tarsi užbaigtas pavyzdys greitai.
Bet jei mes pradėjome tai daryti daugiau metodiškai palei tas linijas,
bet pradedant galbūt viduryje, nes jie rūšiuojami,
kaip greitai, kaip mes atskleisti skaičius 16, todėl mes know--
ir darykime tiksliai that-- mes Todėl žinau, kad 50, šiandienos atveju,
jau turiu būti į dešinę.
Taigi, kaip ir nulinės kai savaitę mes sudraskė telefonų knygą per pusę
ir išmetė pusę problema toli, pati idėja čia.
Mes galime mesti šį pusę problemos toli.
Ir tikriausiai tai, ką jums gali padaryti algoritmiškai,
kai jūs žinote, kad 50 turi būti į dešinę, jei tai bet kur,
tai pabandyti ten, viduryje likusių durų.
Žinoma, 50 yra didesnis nei 42, o mes galime
mesti šį likusį ketvirtį problemos toli,
ir, galiausiai, nustatyti kažkas panašaus į 50.
Bet kaip su telefonų knyga, šie skaičiai
buvo suteikta mums jau Rūšiuoti užsakymas, kuris palieka mus
su klausimu, kaip jums gauti dalykų į surūšiuotas tam?
Ir, tiesą sakant, kokia kaina?
Tai vienas dalykas, kad būtų įteikė telefonų knyga
ir tada nustebinti savo draugus ieškant telefono numeris tikrai greitai, tiesa?
Tearing 32 puslapių iš rasti asmuo iš 4 milijardų puslapių,
sakėme vienas kraštutinis pavyzdys.
Bet kiek laiko prireikė "Verizon" rūšiuoti, kad telefono knygą?
Kiek laiko tai užtruks mus Jei norite surūšiuoti šių septynis numerius?
Štai klausimas, kad mes Iki šiol visiškai ignoruojami.
>> Taigi leiskite atsakyti į šį klausimą dabar.
Ir mes visi iš filmų dabar bet mes turime keletą streso kamuolius.
Jei, tarkim, aštuoni savanoriai ne tai kad sutikote su mumis čia?
Vykime į priekį ir daryti, kaip apie iš jūsų keturių, trys iš jūsų čia?
Gauk keletą naujų veidų.
Ir iš jūsų keturių ten?
Ir now-- tegul ne šališkumas here-- ir skaičius aštuonių per čia galo.
Nagi iki.
Viskas gerai.
Taigi, ką mes turime čia kiekvienas iš jūsų yra skaičius.
Jei norite eiti į priekį, priimti šį numerį.
Koks tavo vardas?
>> Artie: Artie.
>> DAVID Malan: Artie, gerai.
Jūs esate numeris 1.
>> AMIN: Amin.
DAVID Malan: Amin.
Davidas.
Jūs esate numeris 2.
Ir eiti į priekį, nes aš ranka Jūs popierių lapų,
išsirikiuoti save priešais muzikos stovi ta pačia tvarka, kaip iki ten.
>> Andy: Sveiki, Andy.
>> DAVID Malan: Andy, tai malonu matyti jus.
3 numeris.
>> JACOB: "Jokūbas".
>> DAVID Malan: Jokūbas, numeris 4.
Sveiki atvykę į laivą.
GRANT: Grantas.
DAVID Malan: Grantas.
5 numeris.
>> Alanna: Alanna.
>> DAVID Malan: Alanna, numeris 6.
>> FRANCES: Frances.
DAVID Malan: Frances, skaičius 7.
Ir?
>> RACHEL: Rachel.
>> DAVID Malan: Rachelė, numeris 8.
Viskas gerai.
Eiti į priekį ir gauti sau tokia tvarka.
Leiskite įdėti vieną likusį muzika stovėti vietoje.
Jeigu jums reikia stendas?
Gerai.
Eiti į priekį ir tiesiog įdėti savo numerius kur auditorija gali juos matyti,
muzika stovėti susiduria išorę.
Ir tikiuosi, mūsų pirmasis normalumas patikrinti here-- 4, 2, 6.
Oh-oh.
Palaukit.
Mes neturime 8.
Man reikia iškeldinti jus iš pavyzdys kažkaip.
Ne
Ne, tai viskas OK.
Pažiūrėkime.
Mes galime tai padaryti.
Budėjimo.
Čia mes eiti.
Teisinga.
Viskas gerai.
Taigi, dabar mes turime 8, 1, 3 7, 5.
Gerai.
Puikus.
>> Taigi po ranka klausimas yra, ne kokia kaina, ir per kokį metodą,
mes galime iš tikrųjų rūšiuoti šiuos numerius čia kad galėtume rūšies darbą atgal,
galiausiai, ir decide-- tai tikrai įspūdingas, tai tikrai veiksminga,
kad galiu padalinti ir užkariauti telefono knygą?
Ar ji tikrai veiksminga, kad Galiu padalinti ir užkariauti
tie skaitmeniniai kūriniai popieriaus ant lentos,
jei gal tai vyksta mums kainavo likimo laiko ar energijos arba centrinio procesoriaus ciklų
faktiškai gauti mūsų duomenis į kai rūšiuotų tvarka?
Taigi leiskite paklausti šį klausimą.
>> Taigi, pirmiausia išjungti, šie skaičiai yra į gana daug atsitiktine tvarka,
ir aš ruošiuosi pasiūlyti vienas algoritmas, ar procesas
, pagal kurią mes galime rūšiuoti šie žmonės.
Aš ruošiuosi kreiptis tai gana naiviai.
Ir aš ruošiuosi pripažinti kad tai tipo daug už mane
wrap savo mintis apie visų duomenų iš karto.
Bet žinote ką?
Aš ruošiuosi padaryti kai labai paprasti ribiniai pataisymai.
4 ir 2 yra iš tam, jei tikslas yra pereiti nuo 1 d iki 8.
Taigi jūs žinote, ką?
Aš ruošiuosi jums vaikinai apsikeitimo, jei įjungsite
fiziškai pozicijos ir jūsų popieriaus lapų.
Dabar 4 ir 6, tai eilės tvarka.
Aš ruošiuosi palikti tie būti.
6 ir 8, jie yra tvarkingi.
Ėjimas palikti jiems būti.
8 ir1, iš tam.
Jei du neprieštarausiu Swapping.
Dabar 8 ir 3, jei jus vaikinai gali sukeisti.
8 ir 7, jei jus vaikinai gali sukeisti.
Ir 8 ir 5, jei jus vaikinai gali sukeisti.
>> Dabar, aš padariau?
Ne, žinoma, ne.
Bet aš padariau situacija geriau, tiesa?
Koks buvo tavo vardas, numeris 8?
>> RACHEL: Rachel.
DAVID Malan: Rachelė turi efektyviai burbuliukais iki gana toli,
visą kelią iki pabaigos mano masyvas numerius čia.
Ir taip, kad problema yra rūšies išspręsta.
Dabar, be abejo, 2 dar turi perkelti šiek tiek, ir 4 ir 6 ir 1.
Bet man atrodo, kad Dotarłeś šiek tiek arčiau į tirpalą.
Taigi leiskite taikyti tas pats naivus euristinis dar kartą.
2 ir 4, Gerai.
4 ir 6, Gerai.
6 ir 1, mm mm.
Leiskite apsikeitimo.
6 ir 3 mm mm.
Leiskite apsikeitimo.
6 ir 7 yra geras.
7 ir 5, nope.
Leiskite apsikeitimo.
O dabar 7 ir 8.
Ir koks tavo vardas dar kartą?
FRANCES: Frances.
DAVID Malan: Frances.
Taigi dabar Frances yra net geriau pozicija, nes dabar 7 ir 8
teisingai burbuliukais iki viršaus.
Taigi 2 ir 4 Gerai.
4 ir 1, tegul apsikeitimo.
4 ir 3, tegul apsikeitimo.
4 ir 6, esate Gerai.
6 ir 5, tegul apsikeitimo.
Ir dabar tie vaikinai yra geri.
Mes beveik ten.
2 ir 1, neveikia, todėl apsikeitimo.
O dabar leiskite man padaryti normalumas patikrinti.
2 ir 3, 3 ir 4, 4 ir 5, 5 ir 6, 6 ir 7, 8.
Gerai, kad mes baigsime.
>> Bet kokia kaina aš rūšiuoti šiuos numerius čia?
Na, kiek žingsnių aš potencialiai imtis, kai rūšiavimas šie žmonės?
Na, mes grįžti į šį klausimą.
Bet, tiesą sakant, jei turite tiek nuobodu, tai
rūšies atskleisti tuo, kad tai buvo ne gal efektyviausias algoritmas.
Ir iš tiesų, tiesą sakant, aš prakaitavimas visi daugiau vaikščioti pirmyn ir atgal.
Tai nesijautė itin efektyvus.
Taigi pabandykime ką nors kita.
Jei vaikinai galėtų iš naujo patys šių aštuonių vertybių.
Geras darbas.
>> Paimkime pažvelgti skaitmeniniu, nes tik akimirka prieš mums pabandyti kažką kita,
ką tik atsitiko.
Iki čia, jūs ketinate pamatyti vizualizacija šių aštuonių žmonių
, kai mėlyna ir raudona barai atstovauti numerius.
Aukštesni baras, didesnis skaičius.
Trumpesnis baras, mažesnis skaičius.
Ir ką jūs ketinate pamatyti yra atsitiktine tvarka daugiau nei aštuoni iš jų.
Jūs ketinate žiūrėti šiuos barai gauti surūšiuoti pagal tą patį algoritmą,
arba nustatyti nurodymų, kurie mes paskambinsime šiol burbulas rūšiuoti.
Taigi pastebėti, kas antras, arba tiek, du barai, yra apšviesti raudonai,
yra palyginti kompiuteriu.
Ir tada, jei didelis baras, mažai baras neveikia,
jie yra pavertė mane.
>> Dabar tai yra neįtikėtinai varginantis žiūrėti tai, žinoma,
labai ilgai, bet pastebėsite, takeaway-- stambių barų persikelia į dešinę,
mažai barai juda į kairę.
Leiskite nutraukti šį procesą, ir pagreitinti tai padaryti
bus daug greičiau, todėl mes galime gauti aukšto lygio jausmą, ką,
Iš tiesų, burbulas tarsi daro.
Iš tiesų, tai burbuliuoja iki dešinė pusė sąrašo
arba masyvas, didesnių barai.
Ir atvirkščiai, mažai barai burbuliuoja savo kelią žemyn į kairę,
nors ir sparčiau kaip mes anksčiau padarė.
Taigi, sunkiau pamatyti su žmonėmis, bet vizualiai tai tikrai ką
vyksta.
>> Bet pabandykime iš esmės Kitoks požiūris dabar.
Pabandykime skiriasi algoritmas, pagal kurį mes turime jums
vaikinai pradėti jų originalus pozicijos, kurios buvo šis įsakymas čia.
Ir tegul eiti į priekį dabar.
Ir aš ruošiuosi daryti kažką dar paprasčiau, tiesa?
Žvelgiant atgal, keičiant poromis vėl ir vėl, beveik tiek protingas.
Padarykim ką dar naiviai, kur, jei aš noriu sutvarkyti šie žmonės,
leiskite man tiesiog nuolat ieško už mažiausio elemento.
Taigi dabar, 4 yra Mažiausiai aš mačiau.
Aš ruošiuosi prisiminti.
Ne, 2 yra geriau, ir prisiminti, kad.
1 yra dar mažesnė.
3, 7, 5.
Gerai.
One-- koks tavo vardas dar kartą?
>> Artie: Artie.
>> DAVID Malan: Artie.
Taigi, Artie, eiti į priekį.
Aš ruošiuosi traukti jus iš linijos.
Jei galėtumėte grįžti čia.
Ir man reikia, kad paliktume jį.
Mes turime sprendimą tašką čia.
Kaip mes galime padaryti kambarį už Artie čia pradžioje, kur skaičius 1 priklauso?
>> PUBLIKA: Shift ".
>> DAVID Malan: Gerai, mes galėtų perkelti visus.
Bet siūlyti optimizavimas.
Tai jaučiasi šiek tiek erzina man užduoti keturi žmonės
pereiti visą kelią žemyn.
Ką dar galėčiau padaryti?
>> PUBLIKA: juos Switch.
>> DAVID Malan: Perjungti juos.
Ir koks tavo vardas dar kartą?
>> JACOB: "Jokūbas".
DAVID Malan: Jokūbas, judėti.
Daug efektyviau tiesiog turėti Jokūbas apsikeitimo vietų su Artie,
, palyginti su verčia visi keturi šių žmonių,
labai ačiū, kad jų teisinga pozicija.
Kas malonu apie Artie dabar jis savo teisingą padėtį.
Leiskite tai padaryti dar kartą.
2, tai mažiausias skaičius Mačiau.
3, 7, 5.
Gerai.
2 yra tikrai mažiausios.
Negalima daryti bet kokį darbą.
Darom vėl.
6.
Mažiausias?
8.
Nope.
4?
Ooh.
Leiskite man prisiminti 4.
3.
Leiskite man prisiminti 3.
7, 5.
Mažiausias skaičius aš matyti šį perdavimą yra 3.
Jei norite ateiti iš.
Kur mes einame, kad Jums?
Ir koks tavo vardas?
>> Alanna: Alanna.
>> DAVID Malan: Alanna, mes teks iškeldinti jus.
Bet tai yra efektyvesnis, tiesiog sukeisti du žmones,
nei turėti kelis žmones iš tikrųjų išsisukti daugiau.
Dabar galime tai padaryti dar kartą.
Aš ruošiuosi pasirinkti 4, todėl ateiti iš.
Ir kas vyksta judėti?
Taškų 8, žinoma.
Jeigu aš dabar rasti skaičių 5, nagi iš.
Taškų 8 ketina gauti iškeldinti dar kartą.
Aš dabar ketina rasti skaičių 6 vietoje.
7 vietoje.
8 vietoje.
>> Ką mes tiesiog padarė dabar kažkas vadinamas atranka tarsi,
ir jei mes vizualizuoti tai, tai ketina jaustis šiek tiek skiriasi.
Vykime į priekį ir iš to meniu čia, tai visualization--
tegul tai pakeisti to-- Nagi, Firefox.
Leiskite jį pakeisti atrankos rūšiuoti.
Ir tegul jį pagreitinti, kaip ir anksčiau, ir pradėti vizualizuoti dabar.
Ir tai algoritmas yra skiriasi feel it.
Dėl kiekvienos iteracijos, tiesą sakant, tai dar labiau paprasta.
Aš tiesiog pasirinkdami mažiausias elementas.
Dabar, tiesą sakant, aš turiu šiek tiek pasisekė, kad kartą, kad ji rūšiuojami super greitai.
Elementai buvo atsitiktinis.
Tai nėra, kaip mes galų gale matyti, iš esmės greičiau.
Bet pažiūrėkime, trečiasis ir paskutinis požiūris čia, kaip į tai, kas vyksta.
Taigi eikime į priekį ir iš naujo jums, vaikinai vienas galutinis laikas būtų tokia tvarka čia.
>> Ir dabar, aš ruošiuosi būti šiek tiek daugiau protingas,
tiesiog baigia savo algoritmus.
Aš ruošiuosi tai padaryti.
Aš ruošiuosi ne eiti pirmyn ir atgal tiek daug.
Atvirai kalbant, aš pavargau visa tai važiuojantiems.
Aš tik ketina imtis, ką aš duotas sąrašo pradžioje
ir aš ruošiuosi rūšiuoti kad tada ir ten.
Taigi čia mes esame.
Taškų 4.
Aš ruošiuosi įdėti skaičių 4 į rūšiuojami sąraše.
Atlikta.
Aš teigia ir dabar, o tik, kad tai daugiau aišku, tai mano sąrašo dalis rūšiuojamos.
Tai koks kvailas reikalavimo, tačiau iš tiesų 4 yra rūšiuojami nuo dydžio vieną sąrašą.
Dabar aš ruošiuosi imtis numeris 2.
Taškų 2 Aš dabar ketina įdėti į tinkamą vietą.
Taigi, kur veikia 2 priklauso?
Akivaizdu, kad čia.
Taigi pirmyn ir judėti pirmyn, jei gali.
Ir kodėl gi ne jums, vaikinai tiesiog jūsų muzika išsiskiria su jumis šį kartą.
Ir tegul prievarta įrašyti jums į Sąrašo pradžioje.
Taigi šiek tiek daugiau darbo.
Turėjau pereiti Jokūbą aplink, ir koks tavo vardas?
>> AMIN: Amin.
>> DAVID Malan: Amin.
Bet bent jau aš ne eiti į priekį ir atgal.
Aš tik atsižvelgiant dalykų, kaip aš einu.
Aš tiesiog įdėti juos į tinkamą vietą.
6, iš tikrųjų tai yra gana lengva.
Leiskite įdėti tave ten, jei tiesiog norėjau šiek tiek peržengti.
Taškų 8, taip pat gana lengva.
Teisė ten.
Velnias.
Skaičius 1, mes galime ne tik apsikeitimo su Amin čia
nes tai vyksta bałagan užsakymo.
Taigi, mes turime būti šiek tiek daugiau protingas.
Taigi, Artie, jei galėtų atsarginę kopiją akimirką.
Vykime į priekį ir pereiti dabar skirtingai nuo mūsų ankstesnių algoritmų,
padaryti kambarį Artie čia pradžioje.
Taigi tuo dienos pabaigoje, aš natūra daryti tai, ką aš norėjau, kad būtų išvengta anksčiau.
Ir taip mano algoritmas yra tarsi iš atstatomi, intelektualiai,
iš to, ką jis iš pradžių buvo.
Aš tiesiog daro perjungti kitu klausimu.
Dabar aš ne 3.
O damn.
Turime vėl padaryti daugiau darbo.
Taigi leiskite stumti jums.
Pereikime 8, 6, 4-- oh oh-- ir 3 ketina eiti tiesiai ten.
Taigi bent šiek tiek sutaupyti šį laiką.
7, o ne per daug darbo turi būti padaryta.
Taigi, jei norite, kad pop atgal, tegul įdėti ".
Ir galiausiai, 5, jei jums norite pop atgal, mes
reikia perkelti jus, jus, tu, kol penkių yra vietoje.
>> Taigi dabar tai pamatyti adresu aukšto lygio grafiškai,
darykime šį algoritmą vizualizacija vienas papildomas laikas.
Taigi, tai mes vadiname įterpimo rūšiuoti.
Mes paleisti jį kaip greitai, ir pradėti jį čia.
Ir tai taip pat turi skirtingą įspūdį.
Tai tarsi vis geriau ir geriau, bet tai niekada tobula
kol aš eiti ir sklandžiai tose spragas.
Nes, vėlgi, aš tik atsižvelgiant, kas Aš skiriant iš kairės į dešinę.
Taigi, aš negavau taip pasisekė kad viskas buvo tobula.
Štai kodėl mes turėjome tai mažai mispositions kad ilgalaikis laikui bėgant.
>> Taigi visų šių algoritmų atrodo paleisti šiek tiek skirtingais tempais.
Tiesą sakant, kuri jums pasakyti geriausias ar sparčiausiai iki šiol?
Burbulas rūšiuoti, pirmas?
Atrankos tarsi, antrasis?
Insertion sort, trečia?
Girdžiu kai atrankos rūšių.
Kitos mintys?
>> Taigi paaiškėja, kad visų šių algoritmų
yra iš esmės toks pat efektyvus, kaip kiekvienas other-- arba, atvirkščiai, kaip
neefektyvus, nes viena nuo kitos, nes mes galime padaryti iš esmės
geriau nei visi trys Šių algoritmų.
Ir tai iš balto melo tiek, per daug.
kai aš sakau, kaip efektyvus arba kaip neefektyvus,
tai bent super didelės vertės n.
Kai mes turime tik aštuoni žmonės čia o gal 50 ar panašiai barai ekrane,
jūs visiškai pastebėsite skirtumus tarp šių trijų algoritmų.
Bet kaip n, žmonių skaičius, arba numerių skaičius,
arba žmonių skaičius telefoną knyga, arba tinklalapių skaičius
"Google" duomenų bazėje gauna didesni ir didesni,
matysime, kad visi šie trys algoritmai yra tikrai gana prasta.
Ir mes galime padaryti iš esmės geriau nei tai.
>> Leiskite pažvelgti, pagaliau, ką šie algoritmai might
skamba kaip iš kontekstas keletą kitų
taip pat taikant šį vizualizacija čia
kad bus pristatyti mums algoritmų skaičius.
Vykime į priekį ir pasveikinti mūsų dalyviai čia, visi iš jų
rūšiuoti save labai gerai.
Jei norite imtis atsisveikinimo dovaną.
Jūs galite laikyti savo numerius, taip pat.
Ir tai, ką jūs pamatysite, ar veikiau išgirsti, dabar,
yra tas, kad mes įdėti garsai Kiekvieną iš šių barų
ir susieti ją su programine įranga, skiriasi dažnis garso,
galite wrap savo proto daugiau audioly aplink tai, ką kiekvienas iš šių dalykų
atrodyti.
Iš kurių pirmasis yra įterpimo rūšiuoti
>> [TONES]
>> Tai burbulas rūšiuoti.
>> [TONES]
>> Atrankos rikiuoti.
>> [TONES]
>> Kažkas pavadino sujungti rūšiuoti.
>> [TONES]
>> Gnome rikiuoti.
>> [TONES]
>> Štai jį CS50.
Pamatysime jus trečiadienį.
>> Narrator: O dabar, "Deep Mintys ", pagal Daven Farnham.
Kodėl tai už linijos?
Kodėl gi ne padaryti jį geriau?
Norėčiau padaryti penkis kilpą.
>> [Juokas]