DAVID Malan: Dobre.
Tak toto je CS50, a to je Teraz štart troch týždni.
>> Takže až do teraz, máme bolo písanie programov v jazyku C
ktoré vyzerajú trochu niečo ako toto.
Takže máme pár ostré obsahuje v hornej časti.
Máme int, hlavné, void, a potom sa niečo urobiť v stredu,
niektorá časť kódu vnútri tejto funkcie.
Ale kľúč je skutočnosť, že sme sa tu hovorí neplatné.
Takže neplatné, všetky z tejto doby, špecifikuje že tento program pri spustení,
možné spustiť len pomocou jeho názvu.
Nedá zadať žiadne iné slová alebo Čísla za menom programu, ak
spustením.
Tak napríklad, ak program bol zostavené do súboru s názvom Dobrý deň,
by ste mohli urobiť ./hello, ale to je všetko.
>> Jediný spôsob, ako by ste mohli prispievať k tomuto programu
je volaním funkcie.
Napríklad, čo sa funkcie sme používali doteraz
získať vstup od užívateľa?
>> Divákov: Získať reťazec.
DAVID Malan: Ak chcete získať reťazec, alebo dostať int, alebo ste videli ostatné,
aj keď ste používali doteraz, ako sa dlhé, dlhé a podobne.
Ale dajme tomu, že sme naozaj chcete začať
písanie programov, ktoré sú len o málo viac univerzálny, a, úprimne povedané, trochu viac
ako príkazy, ktoré ste Dostali, dúfajme,
trochu zvyknutí.
Rovnako ako cd priestoru Dropbox.
To, samozrejme, zmeny adresár, za predpokladu, že
ste na Johna Harvarde domova adresár, do vášho Dropbox zložky.
Medzitým sa príkaz ako je tento vytvorí nový adresár s názvom pset2,
Ako ste si možno už ani bude čoskoro problém nastaviť dva.
Uistite sa Dobrý deň, samozrejme, je príkaz že vytvára program s názvom ahoj
zo súboru s názvom ahoj bodka c.
A v každom z nich prípady, teraz sme mali
poskytnúť argument na takzvaný príkazový riadok, blikanie rýchle,
takže make vie, čo stavať, a tak že mkdir vie, čo zložku, ktorú chcete vytvoriť,
a aby cd vie kam chcete ísť.
Ale až do teraz, máme stále hovoríš že hlavným Vaša predvolené funkcie,
má void výraz vnútri týchto zátvorkách,
čo znamená, že nemôže mať žiadne argumenty.
>> Tak začína dnes, čo budeme robiť
sa, ideme na začiatok podporovať také veci ešte.
V skutočnosti, v tomto prípade, ktorý vám nie sú zvyčajne ručne zadať,
Uistite sa robí pre nás nie sú
jeden, ale jeden, dva, tri ďalšie struny Po skončení programu je pomenovaný
zvonenie.
Tak ako to dosiahnuť?
>> No, začína dnes, v prípadoch, keď chceme
poskytovať prostredníctvom vstupu takzvaný príkazový riadok,
budeme začať pridávať tu to, čo je v yellow--
výmenou za neplatné s int argc čiarkou string argv zátvorka zátvorka.
Teraz je to zaujímavé pár dôvodov.
Po prvé, bude to nám napísať programy, ktoré sú o niečo väčšiu dynamiku.
Ale viac presvedčivo, bude to otvoriť
teraz rozhovor, aby sa čo poľa môže naozaj
byť použité, za to, čo reťazec Naozaj je pod kapotou,
až do budúceho týždňa, kedy začneme potápanie v ešte hlbšie, ako je stroj
aby všetky tieto veci práce.
Ale teraz, poďme kresliť, Možno, obraz.
>> Keď napíšete program s hlavným vyhlásil,
týmto spôsobom, tak, že hlavný prijíma dva argumenty, int
a-- aký typ dát je druhý argument?
>> DIVÁKOV: Array.
DAVID Malan: Array.
Takže to vyzerá na prvý pohľad ako by to string, ale všimnite si hranatých zátvoriek.
Pripomeňme, minule sme uviedli na trh Pojem poľa.
A polia používajú hranaté zátvorky v niekoľkých súvislostiach.
Môžete použiť na námestí držiaky ísť do poľa
a získanie určitého prvku, ako je držiak 0 alebo 1 alebo držiak držiak 2.
Ale videli sme, ak je krátko, minulý týždeň, že je tiež
použiť tieto hranaté zátvorky pre deklarovať veľkosť poľa,
ak vopred viete, koľko ints alebo koľko reťazca alebo čokoľvek
vlastne chcú.
Tak to dopadá tu tretina kontext tu
ktorá nemá číslo vnútri z hranatých zátvorkách.
Ak zadáte, ako som sa tu, názov niečo ako argv,
čo je len ozdobný spôsob, ako hovorí argument, vektor, ktorý
je ďalší ozdobný spôsob, ako hovorí niekoľko argumentov,
zátvorka zátvorka len Znamená to, že nemusíte nutne
vedieť vopred, ako veľký pole bude,
ale viete, že to bude pole.
Takže ak neviete, číslo nedávajte to tam,
pre zátvorka zátvorka znamená, že argv nie je reťazec,
ale pole reťazcov.
Takže syntakticky, ak máte spomínať minulý týždeň,
je to veľmi podobné, ako keby sme povedali niečo ako int veku otvorený držiak,
a potom niečo neskôr.
Takže to, čo to vyzerá?
Poďme sa vlastne nakresliť obrázok.
Takže pri spustení tohto programu s hlavnými mať dva argumenty sú definované vo vnútri
z tých zátvoriek, je v podstate najmenej dva kusy
pamäte podal na vás pod kapotou.
Raz, keď som si kreslí ako tento obdĺžnik, sa bude nazývaný argc.
A rovnako ako rýchlu rekapituláciu, čo je typ dát argc?
Takže je to int.
Takže číslo bude ísť argc-- zákrutách
na to, že je skratka pre počet argumentov.
Medzitým som vypracované argv ako pole.
A ja naozaj neviem ako dlho to bude,
takže pre dnešné účely dot dot dot.
To by mohlo dostať nejaké dĺžky.
Ale ja som tu na obrázku najmenej štyri obdĺžniky.
Takže argv kus pamäte, ktorá uchováva string string string dot dot dot
a argc je len jeden kus pamäte na celé číslo.
>> Takže buďme trochu presnejšie.
Ak keď mám struny v tomto poli, nazvaný
argv, chcem, aby si na ne individuálne, rovnako ako minulý týždeň,
budeme používať notáciu ako argv držiaku 0
Ak chcete získať prvá vec poľa.
Argv držiak 1, aby si Druhá vec, a tak ďalej.
Kľúčom je tu je, že sme stále 0 indexed-- stále počítať od 0.
Takže teraz poďme skutočne dať niečo na to.
Ak by som mal zostaviť program s názvom Dobrý deň zo súboru s názvom Dobrý deň bodka c,
a potom som sa spustiť tento program s bodkou lomka Dobrý deň,
to, čo robí môj počítač, notebook, vyzerať ako pod kapotou
v okamihu, keď som bežať bodka lomítko ahoj a stlačte Enter?
Tak, to je možno čo by sme mohli popísať
ako obsah počítača pamäte alebo na pamäťové RAM-- Random Access.
Inými slovami, počítač, nejako pre vás ako mávnutím čarovného prútika,
uvádza číslo 1 v argc, AKA argcount, a to dá doslova reťazec
./hello v argv držiaku 0.
Nemám tušenie, úprimne povedané, to, čo je v argv držiaku 1 alebo 2 alebo 3,
preto, že v prípade, že používateľ nemá napísal čokoľvek okrem ./hello,
budeme predpokladať, že tieto sú s najväčšou pravdepodobnosťou hodnoty na odpadky,
aby som tak povedal.
Tieto kúsky pamäti existujú, ale nie je to na nás
pozerať sa na ne, pretože argcount je len jedna.
>> Teraz, medzitým, keď som napísať spustiť iný program,
cd, čo je viac vhodne príkaz, v blikajúcim prompt-- cd priestoru
Dropbox-- pri spustení, že efektívne, pri spustení cd program argc,
vnútornej pamäte svojho počítača, je pre najviac najkratšia druhé číslo dva.
A potom argv držiak o má cd, argv držiak 1 má Dropbox,
a potom samozrejme príkaz dokončí, takže všetky tieto pamäte
v podstate zmizne a sa používa pre niečo iné.
A to je dôvod, prečo hovorím, len zlomok sekundy.
>> Medzitým, keď to urobíme mkdir pset2, obrázok vyzerá takmer rovnaký,
ale s rôznymi šnúrky, vnútri argv.
Ak sa mi zvonenie pomlčka ahoj ahoj bodka c, rovnaký nápad.
Ďalšia vec je vyplnený pre argv a argc, samozrejme, je 4.
Takže inými slovami, aj keď tohto poľa
môžu byť dot dot dot niektorých premennej dĺžky, aby som tak povedal,
budete vždy vedieť, kde je jeho koniec je, pretože argc sa ti to povedať
na akom mieste budete musieť prestať pri pohľade na prvky argv.
Môžete sa pozrieť len na štyri celkom v tejto veci.
>> Takže poďme sa teraz pozrieť na, Možno, jednoduchý program.
Jeden, ktorý len hovorí, ahoj s niekým, ako je Zamyla.
Takže tvrdím, budem písať program za chvíľu, cez ktorý by som mohol urobiť
./hello priestor Zamyla, a potom chcem môj program vytlačiť niečo
super-jednoduchý ako "ahoj, Zamyla."
Teraz, v minulosti sme použili getString.
Takže v minulosti, a to aj v prípade, ste k programovaniu nové,
pravdepodobné, môžete vybičovať program, ktorý používa getString
a potom pomocou printf pozdraviť Zamyla.
Ale poďme nepoužívajte getString tentoraz.
Dovoľte mi, aby som namiesto toho ísť do Appliant a to vrátane štandardného Aj O dot hodín.
Dovoľte mi, aby som tiež zahŕňať CS50 dot hodín.
Teraz int main, a teraz som nebudem robiť neplatné dnes.
Namiesto toho, budem robiť int argc string argv zátvorka zátvorka,
nie je ani číslo.
A teraz je môj takzvaný robiť.
Čo budem robiť teraz, je, že som robiť trochu skok viery,
Budem predpokladať, že užívateľ je bude správne používať tento program,
a ja som jednoducho ísť do to printf Dobrý deň,% Sn.
Takže nič nové tam.
Ale ja chcem, aby sa dal čo slovo užívateľ zadá za menom programu.
Takže keď som to ./hello priestor Zamyla som Chcete nejako programovo prístup
citovať koniec citátu "Zamyla." tak som môže ísť do môjho argumentu vektora,
moje pole reťazcov, a ak je príkaz, opäť, bol ./hello priestor Zamyla,
aké číslo to chcem , Aby tu v argv?
Divákov: 1.
DAVID Malan: 1, pretože držiak 0 dopadá
bude názov programu, ako sme videli.
Takže držiak 1 je prvé slovo že ja, ako užívateľ zadali.
Chystám sa ísť dopredu a ušetrite to.
Chystám sa ísť do mojej zložky kde som umiestnil tento súbor.
Budem robiť, aby ahoj 3.
Comp IO je v poriadku.
./hello Zamyla Enter.
Čo som urobil zle?
Bol som chytený prekvapením ja len na chvíľu tam.
Čo som urobil zle?
>> DIVÁKOV: Name.
>> DAVID Malan: Súbor je vlastne volal hello3.c.
A ja som to len pre konzistencia, pretože sme
mali hello.c je v minulosť v on-line kódu.
Takže poďme vyriešiť tento ./hello Držiak pomlčka 3 Zamyla.
Enter.
A teraz máme ahoj, Zamyla.
Zatiaľ môžem zmeniť na je Rob, alebo naozaj iné slovo.
>> Ale uvažujme rohový prípad.
Čo môžete očakávať, ak sa stane, Nechcem písať názov niečí vôbec?
>> DIVÁKOV: Chyba.
>> DAVID Malan: chyba nejakého druhu, snáď.
Poďme sa pozrieť.
Enter.
Null.
Takže printf je skutočne malý ochranný nás
tú, a doslova tlač otvorené zátvorka null, ale aj horšie veci sa môže stať.
A práve na preukázanie niečo, čo absolútne
nemali robiť, ideme na tu a začať vŕtať.
Je to tak?
Pokiaľ ja viem, že obraz v pamäť je v podstate to,
argv držiak 1 má Zamyla, argv Držiak 0 je ./hello, alebo ./hello-3.
Čo je v držiaku 2?
Takže môžem odpovedať, že pýtať sám seba, že jo?
Môžem len zmeniť 1 na 2.
Teraz môžem prekompilovať ahoj 3, ./hello3 Poďme priblížiť a stlačte Enter.
Och.
No quote značka.
Zaujímavé.
Tak to je celkom v pohode vidieť, čo ešte je tu.
>> Takže čo iného je vnútri môjho notebooku?
Zachráňme s držiakom 3.
Uistite sa hello3, ./hello-3.
Zvedavý.
A teraz poďme naozaj bold-- 50.
Tak to je naozaj potápanie hlboko do pamäte svojho počítača.
50 indexy v.
Tak, aby ahoj 3 ./hello-3.
Zvedavý.
Tak jo, teraz som len dostane bezohľadné.
Poďme do 5000.
V poriadku.
Takže mi dovoľte prekompilovať.
Uistite sa hello3, ./hello-3.
OK.
Teraz niektorí z vás, môže sa byť žiarovka bude vypnuté.
Koľko z vás má videl túto správu?
OK.
Tak prečo?
>> Kurzy jsou-- a tam je iný veci, ktoré môžu spôsobiť to,
a jasne, že ste v dobrej company-- máme jasne
spôsobil, čo sa nazýva poruchy segmentácie.
A dlhý príbeh krátky pre dnešok, som sa dotkli segment pamäte
že som nemal.
V prípade segmente jednoducho znamená kus pamäti, že by som nemal mať.
Teraz je počítač zaručuje, že keď som spustiť ./helloZamyla, že môžem dotknúť argv
byť držiak 0 a argv držiak 1.
Ale argc je hodnota 2, to znamená, že som iba allowed-- je to trochu cti
system-- na dotyk držiak 0 a 1 držiak.
Ak mám ísť ďalej, je tu absolútne bude existovať pamäti.
Môj RAM existuje fyzicky v počítači.
Ale kto vie, čo je to?
V skutočnosti, ja som beh viac programy naraz.
Možno som seen-- keby som nebol robí na Appliant tento
ale na mojom počítači Mac alebo PC-- by som mohol mať vidieť obsah e-mailu.
Možno som videl na okamih Správa Nedávno som poslal.
Čokoľvek, čo by mohlo byť pretrvávajúce okolo v pamäti
mohli byť prístupné prostredníctvom Tento svojvoľný hranatá zátvorka notáciu.
Alebo ešte horšie, pravdepodobne budete musieť našiel jeden z mojich hesiel
že som nedávno napísal v roku, ktorý Program sa uloží do pamäte tak, aby
mi overiť, a potom len tak nechal
v pamäti RAM, až som prestal tento program.
>> A skutočne, to je jeden z nebezpečenstvo a jeden právomoci
používanie jazyka, ako je C Máte neobmedzený prístup
na celý obsah pamäti programu je,
a čo protivníci môžu dokonca robiť v týchto cases--
zvlášť keď sme dostať do programovania pre web
ku koncu semestra, budeme znovu túto topic-- sa hrabať okolo seba,
potenciálne niekto počítača pamäte a nájsť také čudné veci
ako sme tam videli.
Alebo dokonca ešte horšie, heslá, že alebo ona potom môžu použiť na robiť zlé veci.
>> Tak jasne som nemal robiť to, pretože divné veci začnú diať.
Naozaj, toto je program zhadzovať.
To by bolo ekvivalentné Mac OS alebo Windows
okno programu práve mizne.
Došlo k neočakávanej chybe.
V prostredí príkazového riadku vidíme niečo také.
Ale to je dôvod, prečo sa mi jednoduchým dotykom pamäti, že nepatrí ku mne.
>> Takže poďme sa brániť proti tomuto A trochu inak
pri pohľade na tento program nájdete tu.
Takže, opäť, kostra že sme videli earlier--
a ja som sa zvýrazní tentoraz int.
A celú tú dobu hlavná má naozaj vrátil hodnotu.
Aj keď sa vo väčšine našej prednášky Príklady sme ani raz použité
vrátiť niečo v main.
Práve sme sa napísať printf zavrieť zložená zátvorka a je to.
Ale zadarmo to, čo kompilátor robil pre vás,
efektívne, sa vracia 0 pre vás.
Ukázalo out-- a je to trochu counterintuitive--, že 0 je dobrá.
To neznamená, že falošný sebe.
0 je dobrá, a všetky non-0 hodnota, sa svet rozhodol,
môže znamenať chybu.
Takže ak ste niekedy zmätok niečo, čo sa na vašom počítači,
alebo program, ktorý práve zomrel na vás a ste sa dostali nejaké chybné okno
na obrazovke, hovorí chyba Negatívny 49 alebo chyba 23--
niektoré zdanlivo ľubovoľný value-- to pretože programátor sa pevne
hodnoty ako negatívne alebo pozitívne 49 23 predstavujú ľubovoľný počet, trúfam tvrdiť,
4 miliardy možných vecí ktoré by mohli pokaziť v programe.
>> Tak ako by som mohol vziať Výhodou sám?
No, dovoľte mi, aby som otvoriť program že som napísal v predstihu,
a hrabať okolo on-line s názvom Hello 4.
A je to takmer totožné, okrem toho, že jeho dostal trochu kontrolu chýb.
V tomto prípade som sa znova vyhlásil Hlavné as ohľadom dva argumenty,
ale tentoraz na linke 17, oznámenie Robím trochu kontroly sanity.
Ja uistite sa, že argc rovná sa rovná 2.
Vzhľadom k tomu, je-li, že znamená, že môžete bezpečne
dotknúť nielen držiaku 0, ale držiak 1.
A ja som do toho pustite a vytlačiť, v tomto prípade, Zamyla alebo Rob
alebo čo slovo, ktoré som napísal von.
A teraz len preto, aby trochu správny,
Chystám sa výslovne návrat 0 znamenať všetko je v poriadku.
Nič zlé sa nestalo.
>> Ale konvencií, budem vráti 1, alebo úprimne nejaké non-hodnota 0,
keby sa niečo pokazilo.
Teraz sa užívateľ nebude naozaj všimnete, čo sa deje.
V skutočnosti, keď pôjdem do tohto adresára, sme sa priblížiť a robiť, aby ahoj 4,
./hello-4 Zamyla chová, ako som očakávať.
Ale keby som miesto nezadávajte nič, sa zdanlivo nič nedeje,
ale to nie je krach.
A keby som namiesto toho urobiť niečo ako Rob je prokurista
v Thayer-- zdieľania ľubovoľné informácie.
Ale oznámenia, argv 1, 2, 3, 4, a 5 by teraz existovať v pamäti.
To tiež nie je to, čo môj program očakáva,
pretože som skontrolovať, či argc rovná rovný 2 alebo nie.
Takže som teraz brániť proti tomu.
>> Teraz, rovnako ako stranou, sme programmer-- alebo skôr sme users--
nikdy vidieť, že 0 alebo 1, ale s použitím nástroj s názvom Debugger alebo iné nástroje,
ako uvidíme pred dlho ste programátor
môžete skutočne vidieť, čo by mohlo byť zle vnútri programu.
>> Takže nejaké otázky týkajúce sa argc?
Jo.
>> Divákov: Videl som, kde nemal charakter, [nepočuteľné]
práve povedal string hviezda d, ako je Znak hviezdička čiarka.
Sú ekvivalentné tu?
>> DAVID Malan: Sú to.
Takže otázka je, máte občas vidieť programy
takto, že nie povedať, string argv držiak
ale niečo povedať ako char hviezda argv držiaku.
A je tu ešte ďalší varianty, ktoré môžete vidieť.
Oni sú naozaj ekvivalentné.
Teraz máme tieto druh koliesok
na vo forme reťazca v CS50 knižnica, ale len niečo málo cez týždeň
alebo tak budeme odstrániť, aby dohromady a vlastne obštrukcie
Pozrite sa, čo char a hviezdy sú, a ako tie sa týkajú pamäti
zastúpenie všeobecne.
Takže sa vrátime k tomu.
>> Ďalšie otázky týkajúce sa našej argv alebo argc?
Jo.
Divákov: Prečo sa to vráti Chyba [nepočuteľné]?
DAVID Malan: Prečo to urobil vráti chybu only-- oh!
V predchádzajúcom prípade, kedy boli futzing okolo s pamäťou,
prečo sa to len vráti chybu keď som naozaj napísal veľký počet?
Stručná odpoveď je, že sme len mali šťastie.
Všeobecne povedané, počítač prideľuje pamäť v kusoch,
a to mi dal dosť veľký kus, ktorý Som preč, bez toho aby si všimol,
dotyku držiaku 2, držiak 3, držiak 50, ale akonáhle som sa tlačil
moje šťastie, išiel som za Hranice kus pamäti
operačný systém dal mi.
A to je, keď je zakročil a povedal, nie.
Chyba segmentácie.
Jo.
>> Divákov: Ako funguje počítač poznať hodnotu argc?
>> DAVID Malan: Ako funguje počítač poznať hodnotu argc?
Pri spustení programu, tento program, podľa povahy blikajúce riadku
je podal rad slová, ktoré boli zadané
na výzvu, ktorá bola zadali na príkazovom riadku.
A tak to je váš operačný systém, ktorý v podstate
naplní argumenty Hlavné je pre vás.
Takže to je jedna zo služieb, že dostanete, tak nejako tajne
pod kapotou operačný systém.
Ďalšie otázky?
Jo.
>> Divákov: Čo core dump znamená?
DAVID Malan: Čo core dump znamená?
Tak to je dobrá otázka.
A dovoľte mi vrátiť sa do tento adresár tu.
A všimnite si, že Mám nový súbor tam.
Je to naozaj nazýva jadro a to je v skutočnosti zvyčajne slušnej veľkosti súboru.
To je v podstate snímka obsah pamäte môjho programu
alebo RAM, keď havaroval.
A to bude užitočné, potenciálne diagnosticky,
akonáhle budeme hovoriť v ďalšej prednáške a sekcie o ladenie,
pretože môžete skutočne robiť ekvivalent digitálny pitvy
v tomto súbore pomôže zistiť, to, čo ste urobili zle vo vašom programe.
Jo.
>> DIVÁKOV: Je argc príkazu v sama o sebe, alebo môžete ju pomenovať niečo?
>> DAVID Malan: Dobrá otázka.
Je argc príkaz sám o sebe, alebo môžete ju pomenovať niečo?
Rozhodne to nie je príkaz.
Je to proste premenná je alebo názov argument je,
a tak úplne sme mohli nazvať túto foo,
by sme mohli nazvať tento bar, ktoré majú tendenciu ako go-to slovami, že počítač
vedec ide.
Ale konvencie, budeme používať argc a argv.
Ale to je len človek konvencie, nič viac.
V poriadku.
Tak sa ukázalo, bol som rozprávanie trochu bieleho lie--
a úprimne povedané, v budúcnosti uvidíte sme hovorili ostatní White Lies.
Ale teraz ideme lúpať sa po jednom z nich.
V tomto prípade je tu, keď som predtým bežal program, ako je ./hello alebo ./hello-3
Zamyla sme mali obsah môjho pamäte počítača pri pohľade zhruba ako
to.
Ale spomenúť, čo je reťazec.
Čo sme si povedali pred týždňom, čo Reťazec je vlastne pod kapotou?
Divákov: Pole znakov.
DAVID Malan: Je to rad znakov, nie?
Takže môžeme mať celý rad reťazca, ale na druhú stranu, reťazec
je pole znakov.
Takže či naozaj chcem byť análny keď kreslím tento obrázok,
Mal by som naozaj kreslenie to trochu ako je tento,
, Pričom v každom z nich indexy môjho argv poľa,
je sama o sebe celý reťazec ktorý sám o sebe je v matici.
A teraz nevinná lož hovoríme dnes
je, že obraz nie je vyzerajú celkom takto.
V skutočnosti, malé štvorce sú zvyčajne mimo veľkých obdĺžnikov
tam.
Ale vrátime sa k tomu onedlho.
Ale to je ./hello spätné lomítko 0, že je špeciálny znak, ktorý
vymedzuje koniec reťazca, a máme ešte jeden po
Zamyla meno.
Takže čo to znamená?
>> No, nechaj ma ísť napred a otvoriť ďalšie dva príklady
ktoré sú k dispozícii on-line.
Jeden sa nazýva argv1.c a druhý je argv2.
To je super-jednoduchý program, ktorý sa líši od predchádzajúcich programov
v tom, že teraz som pomocou argc a argv tu.
A teraz som integráciu s pre sláčiky v súlade 18, od i = 0 až na argc.
A čo mám robiť tento riadok kódu tu?
V angličtine.
To samozrejme ukazuje použitie argc.
Ale v angličtine to, čo robí to robiť, keď som spustiť tento program?
Jo?
>> Divákov: Bude k tlači Obrazovka toľkokrát, koľkokrát chcete.
DAVID Malan: Presne tak.
Takže bez ohľadu na slová, ktoré som zadajte na príkazový riadok, je to
bude opakovať je na mňa jeden na riadok.
Tak poďme do toho a to.
Nechaj ma ísť do môjho zoznamu a robiť, aby argv1 ./argv1.
A teraz poďme držať to jednoduchý.
Poďme robiť nič na prvom mieste.
To predsa vytlačiť na jednu vec, a to je naozaj názov programu,
pretože to je v zátvorke 0.
Keby som teraz povedal foo, že to bude robiť tí dvaja, a keď poviem, foo bar,
to bude hovoriť tie tri veci.
Tak to je trochu zaujímavé, možno.
Ale pripomenúť, že argv je pole reťazcov,
ale reťazec je pole znakov, takže môžeme vziať veci do zárezu
a platí, že základné logika a vykonať kód, ktorý
Vyzerá trochu záhadné, nepochybne.
Ale tým, že vnorený slučka, niečo ako
na to, čo by mohlo vyvolať od Mario, Napríklad, ak ste to urobil takto.
>> Takže teraz zistíte na linke 19, som znovu iterácia cez moje argumenty,
z 0 až na argc.
A teraz v súlade 21-- som zapožičanie trik z minulého week--
Ja som kontrolu toho, čo je Dĺžka argv držiaka i.
Ja ukladanie, že odpoveď v n.
A potom som integrácii z j na až n, kde je inicializovaný na hodnotu 0 j.
Takže, konvencie pre počítanie.
Potom, čo ste použili aj ak máte vnorené slučky, nemôžete aj znovu použiť,
inak budete handry, prípadne, hodnota mimo vnútornú slučku.
Takže som pomocou j konvencií.
Mohli by sme použiť k.
Ak máte viac ako k, budete pravdepodobne príliš veľa hniezdenia, typicky.
Ale teraz si všimnite, môj printf linka sa mierne líšia.
Nejsem tlače% s, ja som tlač% C, ktorý, samozrejme,
je zástupný symbol pre char.
>> A teraz všimnete túto syntax.
Nové.
Nevideli sme už skôr.
Ale logicky, to len znamená, že sa tej reťazec argv
a dostať j-tej, čo?
DIVÁKOV: Character.
DAVID Malan: Znak v tomto reťazci.
Takže pomocou hranatých zátvoriek nasleduje v hranatých zátvorkách,
To je prvý potápanie do reťazca argv je,
a potom druhý hranaté zátvorky s j
je potápanie do postáv že konkrétny reťazec v argv.
A potom, len pre istotu, Som tu tlače nový riadok.
Takže teraz nechaj ma ísť napred a otvoriť až mierne väčšie okne
a tak môžeme vidieť v akcii.
Nechaj ma ísť do tejto zložky.
A teraz to, aby argv-2-- whoops-- aby argv-2, ./argv 2.
Enter.
A je to trochu ťažké čítať vertikálne,
ale to je naozaj meno Program, nasledovaný prázdnym riadkom.
A teraz ma nechaj ísť ďalej a robiť foo.
Podobne zle čitateľný, ale je to naozaj tlače jeden znak na každom riadku.
A keď to urobím bar, je to teraz tlač tých riadok po riadku.
Takže stánok s jedlom tu nie je toľko že wow, pozrite sa na tento elegantný nový trik
kde môžete získať na obsah špecifických znakov poľa, je,
ale ako sme sa s ohľadom na tieto základné nápady, ako je indexácia do poľa,
a indexovanie do pole, ktoré je v tomto poli,
a práve použití rovnakej myšlienky na trochu zložitejšie príklady.
Ale základy naozaj nie je zmeniť, a to aj od minulého týždňa.
>> Teraz je to trochu načas, v tom, že spomínam, v týždni nula
sme hrali s telefónnom zozname, ako je táto.
A aj keď je to samozrejme fyzickej kusy papiera,
môžete trochu myslieť telefónny zoznam ako pole.
Iste, ak ste boli reimplement tento kúsky Tieto kúsky papiera
v počítači, pravdepodobne mali by ste použiť niečo
ako pole pre uloženie všetkých tých mená a čísla od A po každej ceste,
vďaka Z. Tak to je pekné, pretože umožňuje nám príležitosť,
Možno, aby zvážila, ako by ste mohli skutočne realizovať niečo také.
Ako s radom dverí tu.
Takže keď som mohli-- budeme potrebovať dobrovoľne prísť hore.
Poďme sa pozrieť.
Neznáma tvár snáď, možno neznáma tvár.
Ako sa o oranžovou farbou?
Tu.
Oranžová košeľa, poď hore.
>> Poďme ďalej teraz a pohyb tieto dvere na stranu,
presunúť to z cesty na chvíľu.
Ako sa voláte?
>> Ajay:
>> DAVID Malan: Ajay.
David.
Teší ma.
V poriadku.
Takže máme za týchto šesť Dvere digitálne na screen--
Alebo skôr sedem dvere na screen-- veľa čísel.
A ja som ti nič v advance-- súhlasil?
Ajay: Nič dopredu.
DAVID Malan: Všetko, čo chcem, aby si Teraz je potrebné nájsť pre mňa a pre nás,
Naozaj, číslo 50, jeden krok v čase.
>> Ajay: Počet 50?
>> DAVID Malan: číslo 50.
A vy môžete odhaliť, čo je Za každú z týchto dverí
jednoducho tým, že sa jej dotknete prstom.
Sakra. [SMIECH]
>> [APPLAUSE]
>> Veľmi dobre.
OK.
Máme krásny darček cena pre Vás.
Vyberte si z filmov sme diskutovali minulý týždeň.
>> Ajay: Oh, chlape.
Oh, som nikdy nevidel Spaceballs.
>> DAVID Malan: Spaceballs.
V poriadku.
Takže držať len na okamih.
Jak-- urobme to učenlivý moment--
ako sa vám ísť o nájsť číslo 50?
Ajay: Vybral som náhodne.
DAVID Malan: Takže ste si vybrali náhodne a mal som šťastie.
Ajay: Áno.
DAVID Malan: OK.
Výborne.
Takže teraz, mal ťa dostal šťastie, čo ešte
by sa stalo, za týmito dverami?
Takže keď som sa do toho pustite a ukazujú tieto čísla tu,
v skutočnosti sú v náhodnom poradí.
A to najlepšie, čo mohol mať urobil, úprimne povedané, nie je v konečnom dôsledku
v najhoršom prípade, kontrola ich všetky.
Takže máš super-šťastie, ktoré nie je to, čo by sme zavolať algoritmus.
Áno, gratulujeme.
Ale teraz let's-- humor mi, keby si mohol.
Poďme sa na tejto karte tu.
A tu sú čísla v jasne čo sa zdá byť náhodné poradie,
a oni boli.
Ale teraz, ak namiesto toho som nárok že za týmito dverami
sú čísla, ktoré sú zotriedené.
Cieľom je teraz tiež kde nás nájdete číslo 50.
Ale to algoritmickým a Povedzte nám, ako budete o tom.
A ak si ho nájsť, budete mať film.
Nenájdete to, môžete dať späť.
Ajay: Tak idem skontrolovať konca najprv zistiť, či there's--
[Smiech a APPLAUSE]
DAVID Malan: Tu to je.
Poďme sa pozrieť na jeden z Ajay predchodcov,
Sean, ktorý nebol tak šťastný.
OK, takže vašou úlohou tu, Sean, je nasledujúci.
Som schovaný za týchto dvere číslo sedem,
ale zastrčený v niektorej z týchto dverí ako aj iné non-záporné čísla.
A vaším cieľom je myslieť na to, horný rad čísel len ako pole.
Sme len sled kusov papiera s číslami za sebou.
A vaším cieľom je, iba pomocou hornej Pole tú, nájdite mi číslo sedem.
A my sa potom bude kritika ako sa vám ísť o to robí.
Kde nás nájdete číslo sedem, prosím.
Nie
5, 19, 13.
To nie je chyták.
1.
V tomto okamihu je vaše skóre nie je príliš dobre, takže si pokojne ďalej.
3.
Choď na.
Úprimne povedané, nemôžem si pomôcť, ale zaujímalo, to, čo ste ešte myslieť.
>> SEAN: Dokážem sa iba z horného radu.
DAVID Malan: iba horný riadok.
Takže máš tri vľavo.
Tak mi nájsť 7.
>> [Publikum kričí Návrh]
Takže obaja to boli úžasné z veľmi rozdielnych dôvodov.
Tak toto je miesto, kde sme sa skončili pred chvíľou,
a Kľúčovou myšlienkou tu sa tieto dvere mali čísla
za nimi, ktoré boli triedené, ideálne stánok s jedlom, pre ktorú je to, že by ste mohli urobiť
podstatne lepšie Táto druhá example--
a, naozaj, to bol Sean Prvý pokus s náhodnými číslami
rovnako before-- ale akonáhle ako tieto čísla sú triedené,
podobne ako v telefónnom zozname, čo môžete samozrejme urobiť?
Alebo ako môžete využiť, že vedomosti?
Jo.
>> Divákov: Idete na polceste [nepočuteľné].
DAVID Malan: Jo.
Presne tak.
Takže prvotný inštinkt Ajay bol skontrolovať koncov, ak si dobre spomínam,
a potom sme sa trochu hotové Príklad rýchlo.
Ale keď sme začali robiť to viac metodicky v tomto smere,
ale vychádzajúc možná v stredná, pretože sú triedené,
akonáhle sa odhalí číslo 16, preto vím--
a poďme robiť presne že-- my Preto vieme, že 50, v dnešnom prípade,
má byť doprava.
Tak ako v prvom týždni, kedy nula sme sa roztrhol telefónneho zoznamu na polovicu
a hodil polovicu problém preč, rovnaký nápad tu.
Môžeme hodiť to polovica problému preč.
A pravdepodobne to, čo vás mohol urobiť algoritmickým,
Akonáhle budete vedieť, že 50 musí byť vpravo, ak je to kdekoľvek,
je skúsiť tam, uprostred zo zostávajúcich dverí.
Samozrejme, 50 je vyššia ako 42, takže môžeme
hodiť to zostávajúce Štvrtina problému preč,
a, konečne, aké niečo ako 50.
Ale rovnako ako u telefónny zoznam, tieto čísla
bola nám daná už v triedený poradí, čo nám ponecháva
s otázkou, ako sa vám dať veci do zoradené poriadku?
A úprimne povedané, za akú cenu?
To je jedna vec, že ​​je podal telefónneho zoznamu
a ohromiť svojich priateľov tým, že nájde telefónne číslo naozaj rýchlo, že jo?
Trhacie 32 strán za účelom zistenia osoba z 4000000000 strán,
sme si povedali, bol jeden extrémny príklad.
Ale ako dlho to trvalo Verizon triediť, že telefónny zoznam?
Koľko času to trvalo nám zoradiť týchto sedem čísel?
To je otázka, ktorú máme doteraz úplne ignoroval.
>> Takže poďme odpovedať na túto otázku teraz.
A všetci sme z filmov teraz, ale máme nejaké stresové gule.
Ak je, povedzme, osem dobrovoľníkov Nevadilo by nám pripojila tu?
Poďme ďalej a robiť, čo štyri z vás, vy traja tu?
Získať nejaké nové tváre.
A štyria z vás tam?
A teď-- nesmieme zaujatosť tady-- a číslo osem sem na konci.
Poď hore.
V poriadku.
Takže to, čo sme tu Každý z vás je číslo.
Ak by ste chceli ísť dopredu, aby toto číslo.
Ako sa voláte?
>> ARTIE: Artie.
>> DAVID Malan: Artie, v poriadku.
Si číslo jedna.
>> AMIN: Amin.
DAVID Malan: Amin.
David.
Vy ste číslo dva.
A do toho, ako som ruku si listy papiera,
zoradiť sami sa pred hudby stoja v rovnakom poradí, ako tam.
>> ANDY: Ahoj, Andy.
>> DAVID Malan: Andy, to je pekné, že ťa vidím.
Číslo 3.
>> JACOB: Jacob.
>> DAVID Malan: Jacob, číslo 4.
Vitajte na palube.
GRANT: Grant.
DAVID Malan: Grant.
Číslo 5.
>> Alanna: Alanna.
>> DAVID Malan: Alanna, číslo 6.
>> FRANCES: Frances.
DAVID Malan: Frances, číslo 7.
A?
>> Rachel: Rachel.
>> DAVID Malan: Rachel, číslo 8.
V poriadku.
Nehanbite sa a dostať sa v tomto poradí.
Dovoľte mi, aby som dal jeden zostávajúce hudba stojí na mieste.
Kde budete potrebovať stojan?
OK.
Choďte do toho a len dať svoje číslo kde publikum je vidieť na,
hudobný stojan smerom von.
A dúfajme, že naše prvé Kontrola rozum tady-- 4, 2, 6.
Oh-oh.
Počkaj chvíľu.
Nemáme k 8.
Musím k vám vypudiť zo Príklad nejako.
Nie
Nie, to je v poriadku.
Poďme sa pozrieť.
Môžeme to urobiť.
Stand by.
Ideme na to.
Správne.
V poriadku.
Tak, teraz máme 8, 1, 3, 7 5.
OK.
Výborne.
>> Takže otázka po ruke, je na akú cenu, a pomocou aké metódy,
môžeme vlastne tieto čísla tu triedenie takže môžeme trochu pospiatky,
nakoniec, a decide-- je to naozaj pôsobivé, je to naozaj efektívne,
že môžem rozdeliť a dobyť telefónny zoznam?
Je to naozaj efektívnejšie, že Môžem rozdeľ a panuj
tieto digitálne ks papiera na palube,
pokiaľ možno, že to bude stáť nás šťastie v čase alebo energie, alebo CPU cyklov
skutočne získať naše dáta do nejakého triedenom poriadku?
Takže poďme sa spýtať na túto otázku.
>> Takže prvé, tieto čísla sú vo skoro náhodnom poradí,
a budem navrhovať jeden algoritmus, alebo proces
, Podľa ktorého môžeme radiť týchto ľudí.
Chystám sa blíži to celkom naivne.
A ja si uvedomiť že je to tak trochu veľa pre mňa
zabaliť moju myseľ okolo celý dátový súbor naraz.
Ale viete čo?
Chystám sa urobiť nejaký veľmi jednoduché marginálne opravy.
4 a 2 mimo prevádzku, v prípade, že Cieľom je prejsť od 1 až na 8.
Tak vieš čo?
Budem mať vás chlapci vymeniť, ak prepnete
fyzicky pozície a vaše kúsky papiera.
Teraz 4 a 6, to sú v poradí.
Chystám sa odísť ti byť.
6 a 8, tie sú v poriadku.
Chystáte sa nechať je byť.
8 a1, mimo prevádzku.
Ak vy dvaja to nebude vadiť, že vymení.
Teraz 8 a 3, ak by ste mohli vymeniť.
8 a 7, ak by ste mohli vymeniť.
A 8 a 5, ak by ste mohli vymeniť.
>> Teraz som to urobil?
Nie, samozrejme že nie.
Ale ja som robil situácia lepšie, že jo?
Aká bola Vaša meno znova, číslo 8?
>> Rachel: Rachel.
DAVID Malan: Takže Rachel má účinne bublala pekne ďaleko,
celú cestu až do konca moje pole čísel tu.
A tak, že problém je trochu vyriešený.
Teraz, jasne, 2 stále potrebuje pohybovať trochu, 4 a 6 a 1.
Ale ja som zdá sa, že sa dostali trochu bližšie k riešeniu.
Takže poďme sa vzťahujú tá istá opäť naivné heuristickej.
2 a 4, OK.
4 a 6, OK.
6 a 1, mm-mm.
Poďme výmenu.
6 a 3, mm-mm.
Poďme výmenu.
6 a 7 je v poriadku.
7 a 5, ani náhodou.
Poďme výmenu.
A teraz 7 a 8.
A čo sa voláš?
FRANCES: Frances.
DAVID Malan: Frances.
Takže teraz Frances je ešte lepšie postavenie, pretože teraz 7 a 8
sú správne bublala až na vrchol.
Tak 2 a 4, OK.
4 a 1, swap poďme.
4 a 3, swap poďme.
4 a 6, si v poriadku.
6 a 5, swap poďme.
A teraz tí chlapi sú dobré.
Už sme skoro tam.
2 a 1, mimo prevádzky, tak vymeniť.
A teraz ma nechaj robiť kontrolu zdravý rozum.
2 a 3, 3 a 4, 4 a 5, 5 a 6, 6 a 7, 8.
OK, takže sme hotoví.
>> Ale za akú cenu urobil ja Tieto čísla zoradiť tu?
No, koľko krokov alebo jo potenciálne sa pri radení týchto ľudí?
No, tak sa vrátime na túto otázku.
Ale, úprimne povedané, ak máte nudiť, je to
druh odhaľuje v tom, že to nie je najefektívnejšie algoritmus.
A skutočne, úprimne povedané, potím všetky ďalšie chôdzu sem a tam.
To sa necítil zvlášť efektívna.
Tak poďme skúsiť niečo iné.
Ak by ste mohli obnoviť sami do týchto ôsmich hodnôt.
Dobrá práca.
>> Poďme sa pozrieť digitálne, len za pred chvíľou sme sa skúsiť niečo iné,
na to, čo sa práve stalo.
Tu hore, ty si asi vidieť vizualizácie z týchto ôsmich ľudí
pričom modrej a červenej stĺpce predstavujú čísla.
Je stĺpec vyšší, Čím vyššie je číslo.
Čím kratšia je bar, menší počet.
A čo budete vidieť, je v náhodnom poradí viac ako osem z nich.
Budeš vidieť tieto tyče dostať radené podľa rovnakého algoritmu,
alebo sadu inštrukcií, ktoré zavoláme naďalej bubble sort.
Tak všimnúť, každý druhý alebo tak, dva bary sa rozsvieti na červeno,
sú porovnávané s počítačom.
A potom sa v prípade, že veľký bar a malý bar sú mimo prevádzky,
oni sú vymenené za mňa.
>> Teraz je to neuveriteľne únavné sa pozerať na to, iste,
veľmi dlho, ale všimnete takeaway-- veľké tyče pohybujúce sa doprava,
malé bary pohybujúce sa doľava.
Poďme zrušiť tento proces a urýchlite
je oveľa rýchlejší, takže môžeme si o tom, čo na vysokej úrovni,
naozaj, bublina trochu robí.
V skutočnosti, je to buble až pravá strana zoznamu,
alebo pole, tým väčšia barov.
A naopak, malé bary sú bublajúce cestu dole na ľavej strane,
aj keď v rýchlejšom tempe než sme doteraz urobili.
Takže ťažšie vidieť s ľuďmi, ale vizuálne to je naozaj to, čo
sa deje.
>> Ale skúsme to zásadne Odlišný prístup teraz.
Skúsme iný algoritmus, kedy sme ťa
chlapci začať v týchto pôvodných miesta, v ktorom bol tento príkaz tu.
A poďme do toho hneď.
A ja idem niečo robiť ešte jednoduchšie, že jo?
V spätnom pohľade, vymieňať po dvoch znova a znovu, skoro trochu šikovný.
Poďme robiť veci ešte viac naivne, kde, keď chcem radiť týchto ľudí,
dovoľte mi, aby som ďalej Pre najmenších prvok.
Takže teraz, 4 je Najmenšie číslo som kedy videl.
Budem si to pamätať.
Nie, dva je lepšie, a pamätajte, že.
1 je ešte menšia.
3, 7, 5.
OK.
One-- čo sa voláš?
>> ARTIE: Artie.
>> DAVID Malan: Artie.
Takže, Artie, choďte do toho.
Chystám sa ťa vytiahnuť z linky.
Ak by ste mohli prísť sem.
A ja potrebujem, aby sa priestor pre neho.
Máme bodu rozhodnutia tu.
Ako môžeme vytvoriť priestor pre Artie tu na začiatku, kde číslo 1 patrí?
>> DIVÁKOV: Shift.
>> DAVID Malan: OK, mohli presunúť všetky.
Ale navrhnúť optimalizáciu.
Že sa cíti trochu nepríjemné pre mňa opýtať štyroch ľudí
presunúť celú cestu dole.
Čo iného som mohol robiť?
>> Divákov: Prepínač je.
>> DAVID Malan: je spínač.
A čo sa voláš?
>> JACOB: Jacob.
DAVID Malan: Jacob, pohybovať.
Oveľa efektívnejšie, len aby mali Miesta swapové Jacob s Artie,
na rozdiel núti všetky štyri z týchto ľudí,
ďakujem moc, aby ich správna poloha.
Čo je pekné o Artie teraz, že je vo svojej správnej polohe.
Poďme to urobiť znova.
2, to je najmenšie číslo, čo som videl.
3, 7, 5.
OK.
2 je určite najmenší.
Nemusíte robiť žiadnu prácu.
Urobme to znova.
6.
Najmenší?
8.
Nie.
4?
Ooh.
Dovoľte mi, aby som pamätať 4.
3.
Dovoľte mi, aby som pamätať 3.
7, 5.
Najmenšie číslo som vidieť na tomto priechode je 3.
Ak by ste poď von.
Kam ideme, aby vám?
A Ako sa voláte?
>> Alanna: Alanna.
>> DAVID Malan: Alanna sme bude musieť vysťahovať.
Ale to je efektívnejšie, len vymeniť dvoch ľudí,
než mať viac ľudí v skutočnosti vyhnúť všetkým.
Teraz sa poďme to urobiť znova.
Idem vybrať 4, tak poď von.
A kto to bude pohybovať?
Číslo 8, samozrejme.
Keby som teraz nájsť číslo 5, poď von.
Číslo 8 sa dostane opäť vypudený.
Ja som teraz bude nájsť číslo 6 na mieste.
7 na mieste.
8 v mieste.
>> To, čo sme práve urobili je niečo, čo nazýva výber triediť,
a keď si to predstaviť, je to bude cítiť trochu inak.
Poďme do toho a z toho Ponuka tu tento visualization--
zmeňme to na-- poď, Firefox.
Poďme to zmeniť do výberu druhu.
A poďme urýchli ako predtým, a spustite vizualizáciu teraz.
A tento algoritmus iný pocit k tomu.
V každej iterácii, úprimne povedané, je to ešte jednoduchšie.
Ja som len výberom najmenší prvok.
A teraz, úprimne povedané, som trochu šťastie, že čas, v tom, že radené super-rýchlo.
Tieto prvky boli náhodné.
Nie je to, ako sme si nakoniec vidieť, zásadne rýchlejší.
Ale pozrime sa tretia a posledná prístup, ktorý tu o tom, čo sa deje.
Tak poďme do toho pustite a znova vám chlapci jeden posledný čas, aby sa v tomto poradí tu.
>> A teraz, budem byť trochu múdrejší,
len završujú naše algoritmy.
Chystám sa to urobiť.
Chystám sa ísť tam a späť tak.
Úprimne povedané, už ma nebaví všetko pojazdu.
Idem len, aby sa to, čo som uvedený na začiatku zoznamu,
a budem triediť že vtedy a tam.
Tak sme tu.
Číslo 4.
Idem vložiť číslo 4 do zoradený zoznam.
Hotovo.
Tvrdím teraz, a len preto, aby to viac jasné, táto časť môjho zoznamu je radený.
Je to trochu hlúpe tvrdenie, ale v skutočnosti 4 je zoradený v zozname veľkosť jedného.
Teraz, budem trvať na počte 2.
Číslo 2 Ja som teraz bude vložiť na správne miesto.
Takže tam, kde sa dvaja patrí?
Je zrejmé, že tu.
Takže choďte do toho a vrátiť, ak mohol.
A prečo nie vy len sa vaša hudba stojí s vami tentoraz.
A poďme násilne vložiť vás do začiatku zoznamu.
Tak trochu viac práce.
Musel som sa pohybovať okolo Jacoba, a Ako sa voláte?
>> AMIN: Amin.
>> DAVID Malan: Amin.
Ale aspon som sa tam a späť.
Len som s vecou, ​​ako som ísť.
Ja som len vložením na správnom mieste.
6, je to vlastne celkom jednoduché.
Poďme vložiť ťa tam, ak si chcel prejsť cez mierne.
Číslo 8, a to aj celkom jednoduché.
Tamto.
Sakra.
Číslo 1 môžeme nielen zameniť s Amin tu
pretože, čo sa deje pokaziť objednávky.
Takže musíme byť trochu múdrejší.
Takže, Artie, keby si mohol zálohovať na chvíľu.
Poďme ďalej a posunúť sa, Na rozdiel od našich predchádzajúcich algoritmov,
aby sa vytvoril priestor pre Artie tu na začiatku.
Takže na konci dňa, som trochu robiť to, čo som chcel, aby sa zabránilo pred.
A tak sa môj algoritmus je trochu z obrátenej, intelektuálne,
z toho, čo to pôvodne bolo.
Robím len presun na inom mieste.
Teraz som na tri.
Oh, sakra.
Musíme urobiť viac práce znova.
Takže poďme tlačiť von.
Poďme 8, 6, 4-- oh Oh-- a 3 sa chystá ísť práve tam.
Tak aspoň nepatrné úspory tentoraz.
7, nie je príliš veľa práce je potrebné urobiť.
Takže ak chcete, aby pop späť, poďme vložte vás.
A konečne, 5, ak máte chcem zabehnúť staré sme
Potrebujem ťa posunúť, tie, tie, do piatich, je na mieste.
>> Teraz tak vidieť na Vysoká úroveň graficky,
poďme tento algoritmus vizualizácia jeden ďalší čas.
Takže to budeme nazývať vloženie druhu.
Urobíme to rovnako ako rýchlo, a spustite ho sem.
A tiež má iný pocit.
Je to trochu lepšie a lepšie, ale nikdy to nie je dokonalý
kým som ísť a hladké v týchto medzier.
Vzhľadom k tomu, znovu, ja som len s tým, čo Som daná zľava doprava.
Tak som sa nedostal toľko šťastia , Že všetko bolo perfektné.
To je dôvod, prečo sme sa to trochu mispositions že pevné v priebehu času.
>> Takže všetky tieto algoritmy sa zdajú beží na mierne rôznym tempom.
V skutočnosti, ktoré by vám povedať, najlepší a najrýchlejší tak ďaleko?
Bubble sort, prvý?
Výber triedenie druhého?
Vloženie triedenie, tretí?
Počul som, že niektoré druhy výberu.
Iné myšlienky?
>> Takže sa ukazuje, že všetkých týchto algoritmov
sú v zásade rovnako účinný ako každý other-- alebo, naopak, rovnako ako
neefektívne ako každý iný, pretože môžeme robiť zásadne
lepšie ako všetky tri z týchto algoritmov.
A to je trochu bielej lži, taky.
keď hovorím, že ako účinný alebo ako neúčinné,
To je aspoň pre super-veľké hodnoty n.
Keď máme len osem ľudí tu, alebo možno 50 alebo tak pruhy na obrazovke,
budete úplne všimnete rozdielov Medzi týmito tromi algoritmov.
Ale ako n, počet osôb, alebo počet čísel,
alebo počet osôb v telefóne kniha, alebo počet webových stránok
v databáze Google dostane väčšie a väčšie,
uvidíme, že všetky tri z nich algoritmy sú vlastne celkom zlé.
A čo môžeme urobiť v podstate lepšie ako to.
>> Poďme sa pozrieť, konečne, na to, čo tieto algoritmy by mohli
zvuk ako v kontexte niekoľkých ďalších
ako aj prostredníctvom tejto vizualizácia tu
ktorá nás zavedie do počet algoritmov.
Poďme ďalej a pogratulovať naši účastníci tu, z ktorých
radené sami veľmi dobre.
Ak by ste chceli, aby sa darček na rozlúčku.
Môžete ponechať svoje číslo rovnako.
A to, čo uvidíte, alebo skôr počuť, teraz,
je to, že ako dať zvuky Do každej z týchto tyčí
a spojiť ju so softvérom, rôzne frekvencie zvuku,
môžete zabaliť svoju myseľ viac Audiola okolo toho, čo každá z týchto vecí
vyzerať.
Prvý z nich je vloženie druh
>> [TONES]
>> Je to bublina druh.
>> [TONES]
>> Výber sort.
>> [TONES]
>> Niečo, čo nazýva merge sort.
>> [TONES]
>> Gnome sort.
>> [TONES]
>> To je pre CS50.
Uvidíme sa v stredu.
>> Rozprávač: A teraz, "Hlboká Myšlienky, "od Daven Farnham.
Prečo je to pre sláčiky?
Prečo nie, aby to lepšie?
Ja by som urobiť päť slučku.
>> [SMIECH]