>> [Muusika mängimine]
>> SPEAKER 1: Olgu, see on CS50, ja see on algusest nädalas neli,
ja nagu te võib-olla kuulnud või lugeda, maailm on lõppemas.
Minnes üle kogu internet on teadmiste ja teadlikkuse
on viga programmi programmeerimiskeelt nimega Bash.
See on imeliselt kaubamärgiga kui Shellshock või Bash uks,
kuid artikleid nagu need ei ole ebatavaline.
Ja tegelikult, paljud neist toovad tagasi mälestused Heartbleed,
mida te võib-olla märganud vajutage tagasi möödunud kevadel, mis
oli samamoodi üsna dramaatiline.
Nüüd need, mis te siin täna, kui palju sul on,
isegi kui sa ei saa aru, mida see on kõik umbes, kuulnud Shellshock?
Olgu, ja kui palju te on arvutid, mis on tundlikud?
OK, seal peaks olema palju, palju rohkem kätte üles just nüüd, et põhjus, miks me näeme.
>> Võtame pilk on kestnud meedias
ja siis selgitan natuke siin meie jaoks tehniliselt.
>> SPEAKER 2: Security eksperdid hoiatas, et tõsine viga saanud
umbes mõjutada sadu miljonid maailma veebi kasutajatele.
Mis täpselt on viga, mis on olnud dubleeritud Shellshock ja mida see teeb?
Noh, Shellshock on tuntud ka kui Bash viga, tarkvara ta kasutab.
Häkkerid kasutavad viirus skannida haavatav süsteeme töötab Linux ja Unix
operatsioonisüsteemide ja seejärel nakatavad neid.
Bash on käsurea kesta.
See võimaldab kasutajatel anda käske käivitada programmid ja funktsioonid, tarkvara
kirjutades teksti.
See on tavaliselt kasutatakse programmeerijad ja ei tohiks olla avatud laiemale maailmale,
kuigi Shellshock muudab seda.
>> Noh, worringly mõned analüütikud hoiatada, võiks olla suurem oht,
sest Shellshock lubab täielikku kontrolli nakatunud masin,
samas Heartbleed lubatud ainult häkkerid luurama arvutid.
See on nii tõsine, et see on hinnatud 10 10st
tõsiduse Riiklik Haavatavus andmebaas.
2/3 kõigist veebiserverite juures riski, kaasa arvatud mõned Mac arvuteid.
Noh, veenduge, et olete plaaster oma süsteemi nüüd.
Igaüks hosting veebileht töötab mõjutatud operatsioonisüsteemide
peaks võtma nii kiiresti kui võimalik.
Igaüks, kes saab endale see peaks välja nägema nende jälgimine ja veebirakenduse
tulemüüride tutvu rünnaku.
SPEAKER 3: Halvim mis võib juhtuda, on
et keegi oleks kirjutada kood, mis automaatselt minna ja skaneerida
Internet ja mõjutaks kõik need arvutid.
Ja kui nad seda teevad, et, noh, kõige hullem asi, mida nad võiks teha
lihtsalt kustutada kõik, või suletud alade alla.
Nii et me ei näe kahju sellest seisukohast,
kui meil oleks pahatahtlik inimesed kes lihtsalt otsustavad põhjustada häireid
tuues süsteemi alla või kustutamine failid ja asjad niimoodi.
SPEAKER 2: Mõned ütlevad, et see on üks kõige raskem mõõta
vead aastat ja võib kesta nädalaid või isegi
kuud, et teha kindlaks selle lõplik mõju.
>> SPEAKER 1: Nii see kõik on tõsi, kuid naljakas asi on peaaegu kõik
kujundid sa nägid, välja arvatud ehk klaviatuur,
on midagi pistmist viga üldse.
Serverid ja juhtmed ja nii edasi, See on omamoodi riivamisi seotud,
aga keskmes see on tegelikult päris tuttav, mis toimub siin.
Tegelikult, las ma minna meie CS50 seade.
Lubage mul minna ja maksimeerida terminal window siin.
Ja te ei kasutanud seda, või sisseehitatud versioon sellest,
aastal gedit, et kirjutada programme, käske, ja nii edasi,
ja see on tegelikult, ja tal olnud nädalaid, Bash, B--S-H.
See on Bourne-uuesti laduma, mis on lihtsalt fancy viis öelda,
see on programm, mis on vilgub kiiresti, tõhusalt,
et istub seal ootab sisendi jaoks.
Ja see käsk line liides, mille kaudu
Te olete käinud käsud ja lõpuks koostada ja siis töötab
programme.
>> Aga Bash on ka programmeerimine keeles järgmised mõttes.
Sa tead, et on olemas käsud nagu CD ja LS ja ka ripu ja teised,
kuid saate määrata oma käsud rakendades neid Bash.
Nüüd me ei kavatse väga üksikasjalik
nagu bash programmeerimiskeelt, kuid tean näiteks, et hetkel,
seal ei ole käsu nimeks "tere".
Seega võib leida üks neist pakette.
See ei ole arvutisse installitud.
Küsige oma administraatori poole.
Aga kui ma tahan, et oleks olemas programm nimega "Hello" Bash või minu kiire,
Ma ei saa tegelikult kasutada süntaks, mis on päris C. See ei ole päris sama,
kuid see tundub üsna sarnane funktsioon, kuid puuduvad mõned detailid.
Miski tundub juhtuda, kuid nüüd, kui ma tüüpi "tere"
tegelikult võite kirjutada programmi, mitte C, mitte Java
ole teise programmeerimine keeles, kuid Bash ise.
>> Nüüd võti on selles, et ma kirjutasin nimi tahtsin anda uue käsu,
ja sulgudes on ka sümboliseerib see on funktsioon.
Nagu kõrvale, võite teha nalja asju ja tegelikult isegi Mac OS
see on programm nimega Terminal.
Ravim ehitatud kellegi arvuti, mis on Mac selles ruumis,
ja mida saate teha sarnaseid asju Mac OS, aga sa ei lähe enam kaugemale.
Ja see on natuke tangentsiaalne, aga see on omamoodi lõbus.
Meenus mulle täna hommikul, kui mõelda selle kaudu,
on väike mäng ma kasutasin mängida ühe CS50 endine TFs
kusjuures iga kord, kui ta oleks jalutuskäigu kaugusel oma klaviatuuri oma ekraani lukustamata,
Ma käsu nagu see-- "tere öelda."
Ja nüüd iga kord, kui ta tuli tagasi oma klaviatuuri pärast I heaks ekraan
ja ta oleks istuda, proovige teha mõned tööd,
list sisu oma directory--
>> [AUDIO PLAYBACK]
>> Halloo.
Tere.
>> SPEAKER 1: Niisiis, õiglus, Tegelikult polnud see "tere".
See oli tavaliselt midagi sarnaneb rohkem et--
[AUDIO PLAYBACK]
-Beep.
SPEAKER 1: --that I would-- nii tema arvuti oleks
vannun teda iga kord, kui ta tegelikult istus oma klaviatuuri.
Ja väga kiiresti ta arvasin mitte lahkuda oma ekraani lukustamata.
Kuid see näitab omamoodi loll lõbus, et sa
võib olla midagi nagu Bash.
Aga see on natuke rohkem tõsine, et olla kindel, kui see.
Ja tõepoolest, see on üks kõige ohtlikum ja kauakestvad vead
mis on tõesti tabanud maailma kogu maailmas.
See viga on olnud juba umbes 20 aastat,
ja sul tuleb leida vaid Praegu selle suhteline lihtsus.
>> Nii et see on tüüpiline käsu, et kui sa
oma Mac, sõna otseses mõttes kohe kui sul on oma kaas avatud,
võite proovida kirjutades, et programmi nimega Terminal.
Terminal on all Rakendused Utilities--
kordki Windowsi kasutajad ei pea muretsema selle konkreetse threat--
kuid need teile Mac tippida Selle aknasse nagu ma teen siin,
ja kui sa ei kirjuta et sellesse programmi
nimega Terminal, nagu ma teen nüüd, kui näed sõna "haavatav"
arvuti on kaitsetud ekspluateerimise.
>> Nüüd mida see tegelikult tähendab?
Ja see on tõsi päris hull süntaks,
kuid olgem vähemalt venitama mõned huvitavaid aspekte.
Nii et siin on mõned süntaks, mis näeb natuke tuttav, vähemalt C
ja programmeerimine üldisemalt.
Ma näen mõned sulud semikoolonit, looksulg, ja selline,
kuid selgub, et käesoleva loll asi siin kollasega
sisuliselt funktsiooni et ei tee midagi.
Koolon vahenditega midagi teha, ja semikoolon tähendab enam ei tee midagi.
Nii seest neist looksulg asjaolu,
et mul on võrdsed kirjutada vasakule, seda
on sisuliselt luua käsu või muutuja
nimetatakse x ja antakse see et kollane natuke kood seal.
See võiks olla midagi "kaja tere "või" öelda piiks "või midagi
mis sarnaneks.
Aga teate, kui silmad tiir veelgi paremale,
seal on rohkem seda joont kui lihtsalt lõpuks, et semikoolon.
"Kaja haavatav," ja seejärel pärast, et seal on isegi rohkem.
Teine semikoolon, bash-c :.
>> Nii pikk lugu lühike, see koodirida on
piisab mõjuvatel arvuti, mis on
tundlikud midagi et sa tahad seda teha,
sest seal on viga Bash mille kuigi Bash pidi lõpetama
lugemist ridade käsu õigus seal peale kollane tekst
20-pluss aastat vana viga, Bash on tegelikult lugemine
kaugemale, et semikoolon ja päris palju seda, mida ta ütles.
>> Mis siis kaudselt Selle lõpuks?
Ma ütlesin "echo tere" või "echo haavatav,"
aga mis siis, kui sa tegid midagi tegelikult pahatahtlik, nagu rm -rf
mida sa ei pruugi on kunagi kirjutatud enne,
ja ausalt öeldes sa ilmselt ei tohiks liiga kiiresti,
sest sa võid teha palju kahju ta.
Miks?
rm mida teeb, muidugi?
Eemaldab.
* Tähendab mida?
Kõik.
Nii et see on n-ö jokker, nii et see tähendab,
kustutada kõik jooksvasse kataloogi.
r juhtub tähenda rekursiivne, mis tähendab, kui see, mida sa kustutamine
on kataloog, ja seal sees on muid faile ja teisi katalooge,
rekursiivselt sukelduda seal ja kustutada kõik, et.
Ja -f on halvim neist kõigist.
Kas keegi teab, mida -f tähendab siin?
Force.
Nii sunnib vahendeid, isegi kui see on halb mõte,
seda küsimata mind Täiendava kinnituse.
Niisiis, sa tead, me naerma , aga ausalt, ma ilmselt
tüüp seda mitu korda päev, sest reaalsus
on see kiireim viis kustutada terve hunnik asju.
Aga isegi olen teinud mõningaid kahjustusi.
>> Aga kui sa olid trikk arvuti määratlemisest mõned loll muutuja
või funktsiooni nimetatakse x, kuid siis petab arvuti täidesaatva
piiridest väljapoole, et funktsioon peale selle, semikoolon,
siis võiks tõesti trikk arvuti arvesse täidesaatva midagi rm -rf
või E-mail käsk või Copy käsk.
Midagi sõna-sõnalt, mida saate teha koos arvuti, kas see kustutab faile,
failide loomine, spämmi keegi, rünnata mõned server eemalt,
kui saate seda väljendada käsu peale, siis
saab trikk arvuti tehes.
>> Nüüd sellest, mis on näide sellest, kuidas te võite seda teha?
Noh, seal on palju arvuteid Internetis töötab Bash.
Kõik meist Mac kasutajad on nende seas.
Palju Linux serverite vahel neid hästi ja Unix serverite.
Windows uuesti saab suhteliselt pigist
arvatud juhul, kui olete installinud spetsiaalne tarkvara.
Nüüd palju servereid eest Näiteks veebiserverite käitamine,
ja tegelikult Linux on ehk Populaarseim operatsioonisüsteemi
sõitma arvutid internetis mis teenindavad up veebilehti.
Nüüd, kui me näeme hiljem aastal semester, kui
saadate taotluse Sinu browser-- Chrome,
Internet Explorer, whatever-- serveritega,
Selgub, et kuigi sa lihtsalt kirjutada www.example.com,
Teie brauser saadab sõnumi et see on natuke rohkem keerulisse, niimoodi.
>> Aga teate natuke midagi imelikku.
Esimesed kaks rida Ma pole kunagi varem näinud,
kuid nad ei vaata eriti hirmutav.
Aga teate, mida ma olen varastatud kolmandat rida siia.
Kui paha poiss olnud, et saata sõnum Taoline tema arvuti
haavatavasse Mac või haavatavamad Linux server,
Naljakas on see, et Bash, Nii lihtne vähe käsureale
on kõikjal ja on sageli Kasutatud sisuliselt täita
sisu sõnumi, et ta saab.
Ja selle loogika, saate trikk veebiserver, mistõttu
saates midagi User-agent, mis tavaliselt
peaks ütlema nime oma brauserisse.
Kasutaja agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, see
on lihtsalt oma brauseri välja selgitada ise.
Aga kui paha poiss väga kavalalt ütleb, mm-mm, ma olen
ei ütle teile, Mis minu brauser on,
Ma asemel läheb teile saata see segasena ilmega asi rm -rf
* See, võite sõna otseses mõttes petta haavatav veebiserver internetis
arvesse täidesaatva täpselt, et seal kustutate kõik failid.
Ja ausalt öeldes, see ei ole isegi kõige hullem.
Te ei saa midagi teha.
Võiksite alustada laiali teenuste keelamise rünnak
kui te läkitas Kogu kimpu veebiserverite
ja siis oli neid kõiki laskuda jaoks Näiteks on Harvard.edu serverid,
ja saate sortida bang kuradit välja neid
poolt võrguliiklust, mis oli muidu vallandas see paha poiss.
>> Nii, pikk lugu lühike, peaaegu kõik selles ruumis, kes omab Mac
on tundlikud seda.
Hõbedane vooder on see, et kui sa oled töötab veebiserver oma sülearvuti,
ja kui sa oled tegelikult on seadistatud ta lubada midagi SSH sinna,
sa oled tegelikult ohutu.
See on haavatav, kuid seal ei ole üks üritab saada oma sülearvuti,
nii saab omamoodi kindel.
Kuid Apple varsti Uuendame fix selle eest.
Maailma Linux on juba vabastatud arv määratakse Fedora ja Ubuntu
ja muid versioone Linux, ja tõepoolest kui sa jooksed uuendatud 50 seadet,
isegi, et liiga on ajakohastada ja parandada.
Aga et liiga ei ole tegelikult on haavatavad,
sest kui sa oled tinkered seadme
ja teha oma sülearvuti avalikult kättesaadavaks Internetis, mis ei ole
vaikimisi olete tegelikult häda olnud, sest
kohta firewalling ja muud tehnikat.
>> Aga see on äärmuslik näide viga et me oleme elanud sõna otseses mõttes 20
aastat, ja kes teab, kui keegi Kogu selle aja on teada seda?
Ja tegelikult on see üks oluliste probleemidega,
et me näeme hiljem semester turvalisus,
on see, et just nagu reaalses maailmas, head poisid on hetkel kahjuks.
Et hoida halvad poisid välja, me peame veenduge, et iga uks on lukus,
et iga aken on turvaline, et iga sisenemise kohas kodus
on turvaline hoida halvad poisid välja.
Aga mida see paha poiss on teha, et tegelikult ohustavad teie kodus
ja varastada sinult?
Ta lihtsalt on leida üks lukustamata uks, üks katkine aken või midagi
selles suunas, ning see on sama asi arvuti turvalisust.
Me võime kirjutada miljoneid rida programmeerimine kood
ja kulutada sadu või tuhandeid tundi üritavad seda parandada,
kuid kui sa teed ainult üks viga õigsust,
võite panna kogu süsteemi ja tõepoolest sel juhul kogu Interneti
ja maailm ohus.
>> Niisiis, kui soovite rohkem teada saada sellest, minge selle URL siia.
Ei ole mingit vajadust võtta meetmeid täna, kui sa oled
nende seas mugavam, et käinud oma veebilehe
server, mille puhul teil peaks Tegelikult uuendada oma tarkvara.
>> Ja ka see on tiitel kõnes ja nüüd paberi,
et me oleme seotud kohta Muidugi kodulehel täna.
See oli poolt kaaskodanike nimega Ken Thompson, kes
oli nõustudes väga kuulus auhinna infotehnoloogia,
ja ta andis selle kõne mõned aastad tagasi sisuliselt seda sama teemat.
Küsid inimesed küsimus, peaks tõesti
usaldus lõppkokkuvõttes tarkvara olete saanud?
Näiteks on meil kõigil Enda kirjutatud programme,
ja oleme kogunud neid rõkkama.
Ja kui te teate, olete kirjutanud kõikides programmides CS50 kus on
tagaukse kehvasti, ei tee et paha poiss, kui töötab oma programmi
võiks üle võtta oma arvuti?
Tõenäoliselt mitte, eks?
Mario ja ahne ja Credit.
Need kõik on üsna väikesed programmid.
Sa pead olema üsna Halb, kui sa tegelikult
tegi kogu oma arvuti haavatavaks pärast kirjalikult 10 või 20 rida koodi,
või vähemalt teadlikud mõned Euroopa julgeolekut.
Sest ma ütlen, et naljatades, aga me näeme täna
ja sel nädalal, see on tegelikult tõesti väga lihtne
olla halb ja teha veelgi lühike programmid haavatav.
>> Aga nüüd, vähemalt, mõistma et küsimus küsitakse siin
on umbes rõkkama in tõlkija.
Miks ei ole meid usaldades rõkkama viimase kahe või kolme nädala jooksul?
Kes on öelda, et igaüks, kes kirjutas rõkkama ei ole "kas" seisund on
et sisuliselt süstida mõned nullid ja need igasse programmi koostades
mis ei lase tal juurdepääs arvuti, kui sa magad
ja sülearvuti kaas on avatud ja arvuti töötab?
Eks ole?
Meil on selline au süsteemi paremale Nüüd, kus me usume, et rõkkama on legit.
Sa usaldad, et seade on legit.
Sa kindel, et sõna otseses mõttes iga programmi Mac või PC on usaldusväärne.
Ja seda lihtsat viga näitab, isegi kui see ei ole pahatahtlik,
see on absoluutselt mitte tõenäoliselt olla.
>> Nii et sa peaksid olema hirmul nagu põrgu.
Ausalt öeldes, ei ole lihtne Lahendus sellele teisi
kui omamoodi ühiskondlikku teadlikkust kasvavat keerukust
et me oleme hoone peal meie arvutisüsteemid,
ja kuidas üha haavatavamaks me võiks väga hästi olla.
>> Nüüd seda öelnud, Breakout.
Nii Breakout on probleem seatud kolm, ja Breakout on mäng Läinud
et te võite meelde tuletada, kuid meie jaoks probleem seatud kolm,
see võimaldab meil võtta asjad varundada piir
nii, et kui me kirjutame programmide isegi Terminal aknas niimoodi,
saame reaalselt sõita, lõpuks graafilise programmid ei
erinevalt meil oli juurdepääsu Scratch.
Nii et see on töötajate rakendamise Breakout,
mis on just see telliskivi purustamine mäng, et sa liikuda oma mõla tagasi
edasi, ja sa lüüa palli nende vastu, värvi tellised üleval.
Nii et see toob meid omamoodi tagasi sinna, kus
suutsime väga kiiresti Scratch ja nüüd C,
rakendamiseks oma graafilised kasutajaliidesed.
>> Kuid üle, et see probleemi set kujutab esimest
milles me anname sa hunnik koodi.
Ja tegelikult, ma toon selgesõnaline tähelepanu sellele, sest eriti
neile vähem mugav, see probleem määrata, vähemalt esmapilgul,
läheb tunne, oleme võtnud it up pügala.
Sest me oleme teile, mõnede otsing
ja sorteerimine probleeme pset, hunnik koodi, et me kirjutasime,
ja paar kommentaari et öelda "teha"
kus sa pead täitma lüngad.
Nii et mitte liiga hirmutav, kuid see on esimene kord,
me teisaldus sa kood, mis teil on vaja kõigepealt lugeda, mõista ja seejärel lisada
ja täiendab seda.
>> Ja siis koos Breakout, me ei kavatse teha sama,
andes sulle mõnikümmend rohkem ridu kood, mis ausalt öeldes teile
palju raamistiku mängu, kuid peatuda
rakendamise tellised ja palli ja mõla,
aga meil rakendada mõningaid muid funktsioone.
Ja isegi, et esmapilgul jällegi eriti kui see on vähem mugav,
Võib tunduda, eriti hirmuäratav ja sa arvad, et on nii palju uusi funktsioone
peate wrap meelt ümber, ja see on tõsi.
Kuid pidage meeles, et see on päris nullist.
Koefitsiendid on, et sa ei kasuta kõiki puzzle tükki Scratch.
Koefitsiendid on, et sa ei hooli pakkima meelt umbes neid kõiki
sest selleks oli kiire pilgu mõista, oh,
see on, mida ma teha saan selle puzzle tükk.
Ja tõepoolest, probleemide seatud 3 spec, näitame me sulle
dokumentatsiooniga, mis tutvustada teile mõned uued funktsioonid,
ja lõpuks programmeerimine konstrueerib, mida kasutate.
Tingimused, silmad, muutujate ja funktsioonide
mis on identne mida me oleme näinud siiani.
>> Nii et tõesti, mida me anname sa on mõned proovi kood, mis
saate luua aknas , mis näeb välja mitte nagu see,
ja lõpuks muuta see midagi väga meeldib see.
Nii et ära CS50, arutada tööaega ja rohkem,
ja lohutama selles, et kogus kood, mida on vaja kirjutada
tegelikult ei ole kõik, et palju.
Esimene väljakutse on lihtsalt aklimatiseeruda ennast mingi kood oleme kirjutanud.
>> Kõik küsimused on pset3, Shellshock või muul viisil?
>> Sihtrühm: Tundus läbimas Breakout
et kood on peaaegu objektorienteeritud stiilis
aga ma arvasin, et C oli objektorienteeritud programmi.
SPEAKER 1: väga hea küsimus.
Nii et vaadata läbi XXX koodi, koodi
me kirjutas pset3, Neile, kes teavad, et
Tundub, et see on vähe objektorienteeritud.
Lühike vastus on, see on.
See ühtlustamine, kuidas võiks teha objektorienteeritud koodi kasutades
keeles nagu C, kuid see on ikka lõpuks menetluslikke.
Puuduvad meetodite sees muutujad, nagu näete.
Aga see meenutab seda.
Ja me näeme, et funktsiooni uuesti kui saame PHP ja JavaScript
lõpu poole semestri.
Aga nüüd, ma arvan et kui vihje, mis on tulemas.
Hea küsimus.
Olgu.
Nii Merge sort oli, kuidas me Vasakul asjad viimast korda.
Ja ühendada sort oli jahe selles mõttes, et see oli nii palju kiiremini,
vähemalt põhineb põgus testid me tegime eelmisel nädalal, kui, ütleme, mull
Sorteeri valiku sorteerida, sisestamise omamoodi.
Ja mis oli puhas liiga lihtsalt kuidas lühidalt ja puhtalt
saab väljendada.
Ja mida me ütleme, et see oli ülemine seondunud sõiduaega ühendamine
sorteerida?
Jah?
>> Sihtrühm: n log n?
>> SPEAKER 1: n log n, eks. n log n.
Ja me tuleme tagasi, mida see tegelikult tähendab või kui see pärineb,
kuid see oli parem kui see, mida sõiduaega
et nägime mull valik ja sisestamine sort?
Nii n ruudus. n ruudus on suurem kui see,
ja isegi kui see ei ole päris selge, tean, et log n on väiksem kui n,
nii et kui sa seda n korda midagi väiksem n
see saab olema väiksem kui n ruudus.
See on natuke intuitsiooni seal.
Aga me makstud hind selle eest.
See oli kiirem, aga teema, mis algas tekkima eelmisel nädalal oli see kompromiss.
Ma sain parema tulemuse ajaliselt, kuid mida
Kas ma pean kulutama muude poolt, et saavutada seda?
>> Sihtrühm: Memory.
SPEAKER 1: Ütle uuesti?
Sihtrühm: Memory.
SPEAKER 1: Memory, või ruumi üldisemalt.
Ja see ei olnud super ilmselged meie inimestel
aga meelde tuletada, et meie vabatahtlikud oli samm edasi ja samm-
tagasi, nagu oleks seal massiivi siin, ja nagu oleks seal
Teise massiivi siin, et nad võivad kasutada, sest me
vajalikku kuhugi ühendada need inimesed.
Me ei saanud lihtsalt vahetada neid olemas.
Nii liita omamoodi finantsvõimenduse on rohkem ruumi, mis
me ei pea koos teiste algoritmide
kuid tagurpidi, et see on palju kiirem.
Ja ausalt öeldes, reaalses maailmas ruumi Nende days-- RAM, kõvaketas space--
on suhteliselt odav, ja nii see on ole tingimata halb asi.
>> Võtame pilgu, vähe rohkem metoodiliselt, mida me tegime
ja miks me ütlesime see oli n log n.
Nii et siin on kaheksa numbrid ja kaheksa vabatahtlike oli meil viimast korda.
Ja esimene asi, mis ühinevad Sorteeri käskis meil teha oli mis?
Sihtrühm: jagatakse kaheks.
SPEAKER 1: Ütle uuesti?
Sihtrühm: jagatakse kaheks.
SPEAKER 1: jagatakse kaheks, paremale.
See on väga meenutab telefoniraamatust jaga
ja vallutada üldisemalt.
Nii et me vaatasime vasakule poole.
Ja siis, kui me ütlesime, sort vasakul poolel elementide
mida me järgmiseks öelda?
Sorteeri vasakul pool vasakut pool, mis võimaldas meil,
Pärast jagamisel kaheks keskendub neljale ja kaks.
>> Kuidas sa saad nimekirja nüüd kollane, suurus kaks, kasutades Merge järgi?
Noh jagada see pooleks, ja sorteeri vasakul pool.
Ja see oli koht, kus asjad sain natuke loll lühidalt.
Kuidas sa saad loend, mis on kohta suurus ühe, nagu see number neli here?
See on järjestatud.
Sa oled teinud.
>> Aga kuidas sa saad nimekirja suurus ühe kui see on number kaks?
Noh, sama asi, kuid nüüd, mis oli Kolmas ja oluline samm Merge järgi?
Sul oli ühendada vasakul pool ja paremal pool.
Ja kui me tegime, et me vaatasime neli, me vaatasime kaks.
Me otsustasime kõik korras, ilmselt kaks on esimesel kohal,
Niisiis panime kaks oma koht, millele järgnes neli.
Ja nüüd on selline tagasikerimine, ja see on omamoodi iseloomulik
algoritmi nagu Merge Sort, tagasi kerida mälus.
Mis oli järgmisel real loo?
Mida ma peaksin keskenduma edasi?
Paremal pool vasakul poole, mis on kuus kuni kaheksa.
>> Lubage mul samm selle kaudu ilma belaboring punkti liiga palju.
Kuus kuni kaheksa, siis kuus on sorteeritud, kaheksa sorteeritakse.
Liita need kokku niimoodi, ja nüüd on järgmine suur samm
on muidugi sorteerida õige pool Esimene samm selle algoritmi.
Nii et me keskendume üks, kolm, seitse, viis.
Seejärel keskendutakse vasakul pool.
Vasakul pool, et õige pool seda ja seejärel ühendada ühe ja kolm.
Siis paremal pool, siis vasakule poole seda, siis parem pool sellest.
Merge seda, ja nüüd, mida etapp jääb?
Merge suur vasakul pool ja suur paremale poole, nii et üks läheb sinna,
siis kaks, siis kolm, siis neli, siis viis, siis kuus, siis seitse, siis kaheksa.
>> Nii et nüüd, miks on see lõpuks paljastavad, eriti siis, kui n ja logaritmid rohkem
üldiselt pigem põgeneda sa, vähemalt viimastel mälu?
Noh, teate kõrgust see asi.
Meil oli kaheksa elemente, ja me jagatakse see kahega, kaks, kaks.
Nii logige baasi kaks kaheksast annab meile kolm.
Ja usu mind, et kui natuke udune sellel.
Aga log alusega kaks kaheksa kolm, nii me oleme teinud kolm kihti ühendamiseks.
Ja kui me ühendada elemente, kui palju elemente
Kas me vaatame iga nende ridade?
Kokku n, eks?
Kuna ühendada esirea, kuigi me tegime seda tükkhaaval,
me lõpuks puudutanud iga number üks.
Ja teises reas, et ühendada need nimekirjad suurus kaks,
meil oli puudutada iga element ühe korra.
Ja siis siin tõesti selgelt viimases reas,
meil oli puudutada iga nimetatud elemendid kord, kuid ainult üks kord
nii siin on siis meie n log n.
>> Ja nüüd lihtsalt teha asju veidi ametlikum hetkeks, kui te
olid nüüd analüüsida seda juures omamoodi kõrgema
ja proovida, et otsustada, ka kuidas võiks minna umbes väljendades
sõiduaega Selle algoritmi lihtsalt vaadates seda mitte
kasutades kunstlik näide?
Noh, kui palju aega sa ütleksid samm niimoodi kollane võtaks,
kui n <2 edasi-tagasi?
See on suur O mida?
Nii et ma näen ühte, nii et üks samm, võibolla kaks sammu, sest see on kui
ja siis tagasi, kuid see on konstantset aega, eks?
Nii me ütlesime O (1), ja see on kuidas ma väljendada seda.
T, lihtsalt sõiduaega.
n on suurus sisendi nii T (n), lihtsalt fancy viis
öelda jooksvate aeg antud sisendi suuruse n
saab olema järjekorras konstantse aja O (1).
>> Aga muidu, mis sellest?
Kuidas te väljendada töötamise aeg see kollane joon?
T, mis?
Võite liiki petta siin ja mu küsimusele vastata tsükliliselt.
Nii et kui töötab aeg üldiselt me ​​lihtsalt öelda, on T (n).
Ja nüüd sa oled omamoodi punting siin ja ütles ka, justkui vasakule poole,
ja siis saad õige pool.
Kuidas võiks me sümboolselt esindama töötamise aeg see kollane joon?
T, mis?
Mis suurus sisend?
n üle kahe.
Miks ma ei lihtsalt öelda, et?
Ja siis see on teine ​​T (n / 2) ja siis uuesti, kui ma ühendada kaks sorteeritud pooleks,
kui palju elemente ma lähen on puudutada kokku?
n.
Nii et ma ei saa väljendada seda, lihtsalt olla selline fancy,
kui jooksvat aega üldiselt.
T (n) on just töötamise aeg T (n / 2), pluss T (n / 2), vasakule poole ja paremale poole,
pluss O (n), mis on ilmselt n samme aga võib-olla, kui ma kasutan kahte sõrme,
see on kaks korda nii palju samme, kuid see on lineaarne.
See on teatud arv samme see tegur n,
nii me saame väljendada seda kui see.
Ja see on koht, kus nüüd me punt kuni tagasi meie keskkooli matemaatika õpik
me oleme selle kordumise lõpuks jõuab võrdub see, n korda log n,
kui seda tegelikult välja matemaatika ametlikumalt.
>> Nii et see on lihtsalt kahest aspektist.
Üks arvuliselt koos kodeeritud tüüpilise näite
kasutades kaheksat numbreid ja rohkem üldiselt vaadata, kuidas me sinna jõudsime.
Aga mis on tõesti huvitav siin on jällegi see mõiste jalgrattaga.
Ma ei kasuta jaoks silmuseid.
Ma olen selline määratlemine midagi nii ennast,
mitte ainult käesoleva matemaatiline funktsioon,
vaid ka selle pseudo kood.
See pseudo kood on rekursiivne et selle kaks rida
sisuliselt ütleb, et minna kasutada ise lahendada väiksemaid
probleem väiksuse ja siis uuesti ja uuesti
ja uuesti, kuni me nikerdama see alla selle nn aluspõhimõtted.
>> Nii et olgem tegelikult teha rohkem kaalukaid kaasavõetavateks selle järgmiselt.
Lubage mul minna gedit ja võtta mõningaid tänapäeva lähtekoodi,
eriti see näide siin.
Sigma 0, mis ilmselt lisab numbreid ühest n.
Nii et vaatame, mis on tuttav ja võõras siin.
Esiteks on meil paar hõlmab nii midagi uut.
Prototype.
Olen natuke udune kohta Selle pärast paar päeva,
kuid mida me öelda prototüüp funktsioon on?
Sihtrühm: [kuuldamatu].
SPEAKER 1: Mis see on?
Sihtrühm: Me kuulutab selle välja.
SPEAKER 1: Me kuulutab selle välja.
Nii et sa õpetad rõkkama, hei, tegelikult rakendatakse seda veel,
kuid kuskil seda pilti, arvatavasti, läheb funktsiooni nimetatakse mida?
Sigma.
Ja see on ainult lubadus, et see saab välja nägema selline.
See saab võtta täisarv kui input-- ja võin olla selgem
ja öelda, int n --and see läheb tagasi int,
kuid semikoolon vahendid, mm, ma saan ümber rakendada seda veidi hiljem.
Jällegi rõkkama on loll.
See on ainult kavatse tea, mida sa ütled seda ülevalt alla,
nii et me peame vähemalt anda see vihje, mis on tulemas.
>> Nüüd vaatame, peamine siin.
Olgem keri siin ja vaata, mis peamine teeb.
See ei ole nii pikk funktsiooni ja tegelikult konstrukt siin on tuttav.
Kinnitan muutuja n, ja seejärel Ma vaevama kasutaja ikka ja jälle
jaoks positiivne täisarv kasutades getInt, ja ainult väljumist läbi selle silmuse
kui kasutaja on järginud.
Kas Kuigi oleme harjunud vaevama kasutaja niimoodi.
Nüüd see on huvitav.
Kinnitan int nimetatakse "vastus."
Ma määrata selle tagastamise väärtus ning funktsiooni nimetatakse "sigma."
Ma ei tea, mida see veel, kuid Mäletan, kuulutatakse ta hetk tagasi.
Ja siis ma möödaminnes Väärtus, mille kasutaja tipitud, n,
ja siis ma aru vastus.
Noh olgem liikuge tagasi hetkeks.
Lähme edasi sellesse kataloogi, teha Sigma 0, ja tegelikult programmi käivitada
ja vaata, mis juhtub.
Nii et kui ma edasi minna ja joosta Selle programmi ./sigma-0,
ja ma kirjuta positiivne täisarv nagu kaks, Sigma,
nagu Kreeka sümbol viitab, on lihtsalt läheb küündivad kõiki numbreid
null kuni kaks.
Nii 0 pluss 1 pluss 2.
Nii et see peaks loodetavasti annab mulle 3.
See on kõik see teeb.
Ja samamoodi, kui ma saan seda uuesti ja ma annan see number kolm,
see on 3 pluss 2, nii et see 5 + 1 peaks mulle 6.
Ja siis, kui ma saan tõesti hull ja hakake suuremad numbrid,
see peaks mulle suuremaks summad.
Nii et see on kõik.
>> Mis siis sigma välja näeb?
Noh, see on üsna lihtne.
See, kuidas me võiksime rakendanud see on viimase paari nädala jooksul.
"Väravavahi" saab olema tagasipöördumine tüüp.
Sigma on nimi, ja see võtab Muutuja m asemel n.
Ma muudan selle üleval.
Siis on see lihtsalt mõistuse kontroll.
Eks me näe, miks hetkel.
Nüüd Kinnitan muu muutuja, mis summa, initsialiseerida see nulli.
Siis ma pean seda loop iterating ilmselt selgust,
alates i = 1 kuni = m, mis on olenemata kasutaja tipitud, ja siis ma
juurdekasvu summa niimoodi.
Ja siis tagasi summa.
>> Nii paar küsimust.
Üks, ma väita, minu kommentaar, et see väldib riski lõputu silmuse.
Miks möödaminnes negatiivne arv esile kutsuda potentsiaalselt lõputu silmuse?
>> Sihtrühm: Sa ei jõua kunagi m.
>> SPEAKER 1: Mitte kunagi jõuda m.
Aga m on vastu võetud, nii et olgem kaaluda lihtsa näite.
Kui m on möödas poolt kasutaja on negatiivne.
Sõltumata peamine.
Main kaitseb meid Ka see, et ma olen lihtsalt
on tõesti anal sigma ka veenduda,
et sisend ei saa olla negatiivne.
Nii et kui m on negatiivne, midagi negatiivsed.
Mis siis juhtub?
Noh, ma ei kavatse saada vormindatud ühe,
ja siis ma ei kavatse olla väiksem või võrdne m?
>> Olge valmis.
See oli-- ärgem, olgem NIX see lugu.
Ma ei küsinud seda küsimust, sest risk, et ma olen vihjates
ei juhtu, sest ma ei alati saab olema suurem kui-- OK,
Ma tõmbuda, et küsimus.
OK.
Olgem keskenduda ainult see osa siin.
Miks ma kuulutada mõned väljaspool loop?
Teatis line 49 ma olen deklareeritud i sees silmus,
kuid online-48 Olen deklareeritud mõned väljaspool.
Jah.
Sihtrühm: [kuuldamatu].
SPEAKER 1: Muidugi.
Nii et ennekõike ma kindlasti ei tahan kuulutada ja initsialiseerida summa
nulli sees silmus iga iteratsiooni
sest see oleks selgelt lüüa eesmärk summeerida numbrid.
Ma hoiaks muutes raha tagasi nulli.
Ja ka, mis on veel üks kauge Põhjus sama disain otsus?
Jah.
>> Sihtrühm: [kuuldamatu].
SPEAKER 1: Täpselt.
Ma tahan kasutada seda väljaspool loop liiga, mida joon?
On 53.
Ja põhineb meie rusikareegel mõnest loenguid tagasi
muutujad scoped tõesti, et looksulg, mis hõlmavad neid.
Nii et kui ma ei deklareeri summa sees Nende välimise looksulg,
Ma ei saa seda kasutada vastavalt 53.
Teisisõnu, kui ma tunnistada summa sisse, või isegi
Silmus, ma ei saanud seda kasutada 53.
Muutuja tõhusalt läinud.
Nii paar põhjust seal.
Aga nüüd lähme tagasi ja vaata, mis juhtub.
Nii sigma saab nn.
See lisab kuni 1 pluss 2 või 1 pluss 2 pluss 3 ja seejärel tagastab väärtuse,
salvestab selle vastuse ja printf siin Sellepärast ma näen ekraanil.
Nii et see on see, mida me kutsume iteratiivne lähenemist, kus iteratsiooni lihtsalt
tähendab silmust kasutades.
For loop, samas silmus, Do Kuigi loop, siis midagi jälle
ja uuesti ja uuesti.
>> Aga sigma on selline puhas funktsiooni et ma võiks rakendada seda erinevalt.
Aga see, mis lihtsalt olla selline lahe,
las ma tõesti vabaneda on palju tähelepanu kõrvale
kuna see funktsioon on tegelikult üsna lihtne.
Olgem nikerdama maha lihtsalt oma nelja sisekihte
ja vabaneda kõik Kommentaarid ja lokkis traksid.
See on omamoodi Häkellyttävä alternatiiv rakendamist.
Olgu, võib-olla ei pahanda puhub, aga see on selline seksikam, eks,
vaadata seda nii palju lühidalt.
Vaid neli rida koodi, Ma pean kõigepealt selle meelerahu kontrolli.
Kui m on väiksem või võrdne null, Sigma ei ole mõtet.
See on ainult pidi olema Sel juhul positiivse numbrid,
nii et ma olen lihtsalt läheb tagasi nulli meelevaldselt
nii et meil on vähemalt mõned nn aluspõhimõtted.
>> Aga siin on ilu.
Kogu see mõte, lisades numbritega 1 kuni n või m sel juhul
saab teha sellist kulgeb Buck.
Noh, mis on summa, 1 m?
Noh, sa tead, mida?
See sama summa m pluss summa 1 kuni m miinus 1.
Noh tead mis?
Mis sigma m miinus 1?
Noh, kui sa omamoodi jälgida seda loogiliselt, see on sama nagu m miinus 1
pluss sigma m miinus 2.
Nii saate liiki lihtsalt-- see on nagu, kui sa oled lihtsalt
üritab tüütama sõbrale ja nad küsivad sult
sa omamoodi vastata küsimusele, te võite seda hoida kulgeb Buck.
Aga mis peamine on see, et kui te ei hoia tegemise küsimuse väiksemaid
ja väiksemate, sa oled ei küsi, mis on sigma
n, mis on sigma kohta n, mis on sigma n?
Sa küsid, mis on Sigma n, mis on sigma
n miinus 1, mis on sigma n miinus 2?
Lõpuks oma küsimus hakkab muutuma mis?
Mis on sigma ühe või null, mõned väga väike väärtus,
ja niipea kui saada, et su sõber,
te ei kavatse küsida sama küsimust uuesti,
sa oled lihtsalt kavatse öelda, oh see on null.
Me oleme valmis mängima selline loll tsükliline mängu.
>> Nii rekursioon on tegu programmeerimine Funktsiooni kutsudes ise.
See programm, kui kompileerida ja tööle, on kavatse käituda täpselt samamoodi,
aga mis peamine on see, et sees ning funktsiooni nimetatakse sigma
on rida koodi kusjuures et me nimetame end,
mis on tavaliselt halb.
Näiteks, mis siis, kui ma esimest korda koostas selle, nii et sigma--
teha sigma 1 ./sigma-1.
Positiivne täisarv, siis 50 1275.
Mida funktsioon tundub olema, mis põhineb ühel test, õige.
Aga mis siis, kui ma saan natuke ohtlik kustutada niinimetatud baas juhul
ja lihtsalt öelda, hästi ma lihtsalt tegemise seda keerulisem see on.
Ütleme lihtsalt arvutada sigma võttes m ja seejärel lisades
Sigma m miinus üks?
Noh, mis juhtub siin?
Lähme välja suumida.
Olgem kompileerida programmi salvestada, kompileerida programmi
ja siis valmis ./sigma-1 Suurendamine sisestage positiivne täisarv palun, 50.
Kui paljud teist on valmis et fess kuni näeme, et?
>> OK.
Nii et see võib juhtuda mitmeid põhjuseid,
ja ausalt öeldes sel nädalal oleme umbes teile rohkem neist.
Kuid sel juhul proovida mõelda tagasi
mis oleks võinud juhtuda siin?
Segmenteerimine süü, me ütles eelmisel ajal, viitab segmendi mälu.
Midagi halba ei juhtunud.
Aga mis oli see mehaaniliselt, mis läks viltu
siin, sest mu eemaldamine Selle niinimetatud baas juhul
kui ma tagasi kodeeritud väärtus?
Mis sa arvad valesti läks?
Jah.
>> Sihtrühm: [kuuldamatu].
SPEAKER 1: Ah.
Hea küsimus.
Nii suuruse arvu et olin summeerida
sain nii suur, et see ületas suurus mälu.
Hea mõte, aga mitte oluliselt läheb põhjustada krahhi.
See võib põhjustada täisarv overflow, kus bitti lihtsalt flip üle
ja siis viga on tõesti suur number nagu negatiivne arv,
kuid mis ise ei põhjusta krahhi.
Sest lõpuks päev int on veel 32 bitti.
Sa ei kavatse kogemata varastada 33. bit.
Aga hea mõte.
Jah.
>> Sihtrühm: [kuuldamatu].
SPEAKER 1: meetod kunagi seiskumist
ja tõepoolest see kutsub ennast jälle ja uuesti ja uuesti ja uuesti
ja uuesti, ja mitte ükski neid ülesandeid kunagi
lõpetada, sest nende ainus rida kood nõuab iseenda ja jälle
ja jälle.
Ja mis on tegelikult siin toimub, ja nüüd me
saab omamoodi teha seda piltlikult.
Lubage mul minna üle pilt hetkeks.
See on pilt, mis lõpuks täpsustada
üksikasjalikumalt, mis toimub sees oma arvuti mällu.
Ja selgub, et põhjas seda pilti
on midagi, mida nimetatakse pinu.
See on patakas mälu, patakas RAM,
et lihtsalt kasutada igal ajal funktsiooni nimetatakse.
Iga kord, kui sa, programmeerija, helistada funktsioon,
operatsioonisüsteemi, nagu Mac OS, Windows või Linux,
haarab kamp baiti, ehk paari kilobaiti, võibolla paar megabaiti
mälu, ulatab neile teile ja võimaldab
sa käivitada oma funktsiooni abil olenemata muutujad, mida vajate.
Ja kui te siis helistada teise funktsioon ja teine ​​funktsioon,
saad veel tükk mälu ja teise viilu mälu.
>> Ja tõesti, kui need rohelised plaadid alates Annenberg esindavad seda mälu
siin on, mida juhtub esimesel kord, kui helistada funktsioon sigma.
See on nagu pannes aluse niimoodi kohta, mis on algselt tühi pinu.
Aga siis, kui salv nimetab ennast niiöelda,
kutsudes teise astme Sigma, mis on
nagu paludes operatsioonisüsteemi ooh, vaja natuke rohkem mälu,
anna mulle see.
Ja siis ta saab kuhjatakse peal.
Aga mis peamine on see, et Esimene plaat on ikka veel seal,
sest ta tugines selle teise salve.
Nüüd vahepeal sigma helistada sigma, see on nagu nõuavad rohkem mälu.
Gets kuhjatakse siin.
Sigma helistada sigma, see on teine salve, et saab kuhjatakse siin.
Ja kui sa ikka seda teed, lõpuks, millist kaarti selle visuaalne
selle diagrammi, mis hakkab juhtuda virna?
See saab ületada summat mälu arvutil on.
Ja niipea, kui see roheline plaat üle horisontaaljoone
üle korstna ja üle selle sõna hunnik, mis me tuleme tagasi tulevikus
mis on halb.
Hunnik on erinevad segment mälu
ja kui sa lased neid plaate kuhi ja vaia,
sa lähed, et ületada oma segmendi mälu
ja programm on tõepoolest kukku.
>> Nüüd kui kõrvale, selle idee kohta rekursioon, seega
selgelt põhjustada probleeme, kuid see ei ole tingimata halb asi.
Kuna kaaluda pärast kõik, kuidas-- ja võibolla
see võtab veidi harjumist et --how elegantne või kuidas lihtsate
et rakendamise sigma oli.
Ja me ei kavatse kasutada rekursioon kõik, et palju on CS50,
kuid CS51, ja tõesti iga klassi kus sa manipuleerida andmestruktuurid
nagu puud või pere puud, et mõned hierarhia,
see on super, super kasulik.
Nüüd, kui kõrvale, nii et sa kui ambitsioonikaid infotehnoloogid
tunnevad mõned Google sees nalja, kui te lähete Google
ja sa näed seda, mida on mõiste, ütleme, rekursioon, siseneda.
Uh-huh.
Nagu kõrvale, ma tõmmata paar.
See oli nagu 10 minutit Viivitamine hommikul.
Kui te ka Google "viltu" teade kallutades oma pead slightly--
ja siis see üks on võib-olla Kõige jõle kõik
kuna keegi veetis nagu nende päev rakendamisel
mõned aastad ago-- tule.
Oh, Oota- see on viga.
>> Nii töötab üks Maailma suurim veebilehed
need tobedalt lihavõttemunad.
Nad ilmselt tarbima nontrivial arv ridu koodi
just nii, et meil on natuke nalja asjad niimoodi.
Aga vähemalt nüüd sa mõned nendest inside nalju.
>> Nüüd võtame pilk mõned White Lies oleme rääkinud hilja,
ja alustada koorida tagasi mõned kihid tehniliselt
nii et sa tõesti aru mis on kestnud
ja te saate aru, mõned ohud,
nagu Shellshock, et on nüüd hakanud muutuma
esirinnas igaühe tähelepanu, vähemalt meedias.
Nii et siin on väga lihtne ülesanne mis tagastab midagi, tühine.
Tema nimi on swap.
See võtab kahe muutuja ja ta naaseb midagi.
Võtab ja b.
Nii kiire demonstratsioon.
Tõime need üles.
Me võiksime sama hästi võtta veidi murda siin hetkeks
ja on natuke midagi juua.
Kui keegi ei pahanda ühendab mind siia hetkeks.
Kuidas sa maroon särk?
Tule.
Lihtsalt üks täna.
Aitäh, kuigi.
Olgu, ja meil on tulemas, kes siin on?
Mis su nimi on?
>> SPEAKER 4: Laura.
>> SPEAKER 1: Laura.
Tule.
Nii Laura, väga lihtne ülesanne täna.
Meeldiv kohtuda yo.
Olgu.
Nii et meil on mõned piima siia ja meil on mõned apelsinimahl siia
ja mõned tassid, et me laenatud Annenberg täna.
>> SPEAKER 4: Laenatud.
SPEAKER 1: Ja läheb minna ja teile pool klaasi seda.
Olgu.
Ja me anname teile pool klaas piima.
Oh, ja just nii, et saate mäleta, mis see oli nagu,
Mulle meenus, et tuua see üles ja täna.
Okei.
Kui sa ei pahanda, vaatame, me ei pane neid üle oma prillid
kui soovite.
Sellest saab maailma Laura silmis.
Olgu.
Nii et teie eesmärk, kuna kaks tassi vedel siin, piim ja apelsinimahl,
on swap kaks sisu nii, et apelsinimahl läheb piim tassi
ja piim läheb apelsinimahla tassi.
>> SPEAKER 4: Kas ma saan veel ühe tassi?
SPEAKER 1: ma olen nii rõõmus, et sa palusid, kuigi see oleks olnud palju parem kaadrid
Kui te ei palunud.
Aga jah, me võime pakkuda sulle kolmandat tass, mis on muidugi tühi.
Olgu.
Nii swap sisu olemas.
Väga kena.
Väga hea.
Sa teed seda märkimisväärselt hoolikalt.
Ja kolmas samm.
Olgu.
Suurepärane.
Suur aplaus oleks hea Laura.
Olgu.
Meil on väike jumalagajätt kingitus teid, kuid lubage mul võtta neid.
Tänan sind nii palju.
Nii lihtne näide, kuigi näidata, et kui sa seda teed
tahan vahetada sisu kahest konteinerist,
või olgem nimetame neid muutujaid, teil on vaja mõned ajutine ladustamine
lavastada üks sisu nii et tegelikult võite seda teha swap.
Nii et tõesti, see lähtekoodi siia üles C on tüüpiline just nii.
Kui apelsinimahla ja piim oli b, ja me tahtsime vahetada kaks,
võid proovida midagi loomingulist valades ühest teise,
kuid ilmselt ei lõpuks eriti hästi.
Ja nii me kasutada kolmanda tassi, kõne see tmp, T-M-P, kokkuleppeliselt
ja pane sisu ELT selles, siis vahetada üks tass,
Seejärel pange ELT sisse originaal tassi, seega
saavutamiseks, täpselt nii, nagu Laura tegi, swap.
>> Teeme just nii.
Lubage mul minna ja avada kuni näiteks see
tegelikult nn "no vaheta ", sest see ei ole
nii lihtsalt teha, kui võite arvata.
Nii et selles programmis, märkate, et Ma kasutan stdio.h, meie vana sõber.
Mul on prototüüp swap seal, mis
tähendab selle rakendamine on ilmselt allapoole,
ja vaatame, mis see peamine Programmi saab teha minu jaoks.
Ma esimest kuulutada int x saab üks ja int y saab kaks.
Nii et mõtle neist kui ELT ja piima, vastavalt.
Ja siis ma lihtsalt printf öeldes x on see
ja y on see, just nii ma ei visuaalselt näha, mis toimub.
Siis olen printf väites et ma vahetada kaks,
ja siis ma välja printida väidavad, et nad vahetasid,
ja ma välja printida x ja y uuesti.
Nii et siin on swap on täpselt, mida Laura tegi,
ja täpselt, mida nägime ekraan hetk tagasi.
>> Nii et lähme edasi ja väga pettunud.
Tee ei swap ja joosta ei swap, suumides väljund siia.
Sisesta x on 1, y 2, vahetades vahetaks.
x on endiselt 1 ja y on endiselt 2.
Nii et kuigi ausalt öeldes, see näeb täpselt nagu, kuigi tehniliselt,
mida Laura tegi, ei tundu töö.
Miks see nii on?
Noh, tuleb välja, et kui me kirjutame programmi niimoodi
, mis on nii põhi-, siin esile, ja siis teine ​​funktsioon, nagu swap,
siin esile, mis see nõuab, maailma
tundub veidi midagi Nende plaate hetk tagasi.
Kui peamine esimene saab nimetada, see on nagu paludes operatsioonisüsteemi
natuke mälu ja kõik kohalikud muutujad nagu x ja y, et peamine on,
ja nad lõpuks sinna.
Kuid kui peamine kõnesid vahetada ning peamised möödub vahetada kaks argumenti a ja b,
apelsinimahl ja piim, see ei meeldi jagab apelsinimahl ja piim
Laura.
Mis arvuti teeb, on see läbib koopiad apelsinimahl
ja koopiate piima Laura, et mis lõppkokkuvõttes sees selle salve
on väärtus üks ja kaks või ELT ja piima, kuid nende koopiad,
nii, et selles kohas lugu, seal
on ELT ning piima iga plaate.
Seal on üks ja kaks Kõigis neis plaate,
ja swap funktsiooni tõepoolest töötab.
See on nende vahetamisest sees Teise tähtsaim salve,
kuid vahetada ei mõjuta.
Ja põhinevad vaid mõned põhiprintsiip me oleme
rääkis enne, ja tõepoolest vaid paar minutit tagasi, mida
võib selgitada, miks muutuvad ja b sees swap
puudub toime x ja y, kuigi Ma veetsin x ja y swap funktsiooni.
Mis on siin võtmesõna, mis võib lihtsustatult seletada?
Ma arvan, et ma kuulsin, et see siin on?
Sihtrühm: Return.
SPEAKER 1: Return?
Ei tagasta.
Lähme koos ühe teise.
Mis see on?
>> Sihtrühm: [kuuldamatu].
>> SPEAKER 1: OK, nii return-- saime tagasipöördumine tööd lugu,
kuid seal on isegi lihtsam seletus.
Sihtrühm: Reguleerimisala.
SPEAKER 1: Reguleerimisala.
Ma võtan ulatust.
Nii ulatus, mäletan, kui meie x ja y kuulutatud.
Nad kuulutatud sees Peamiste siin üleval.
ja b, vahepeal on tõhusalt deklareeritud
sees swap, mitte päris looksulg kuid siiski
üldises ala swap.
Ja nii tõepoolest ja b olemas ainult selles salves
alates Annenberg see teine ​​patakas kood.
Nii et me tõesti muutumas koopia, kuid see ei ole tõesti kõik, mis kasulik.
>> Võtame pilk Selle veidi madalamale tasemele.
Ma lähen tagasi Allikas Directory
ja ma lähen esimesena suumimiseks siin ja lihtsalt
kinnitada, et ma olen selles suurem terminali aknas
Programmi ikka käituvad niimoodi.
Oletame nüüd, et see ei ole tahtlik.
Ilmselgelt tahtsin vahetus tööd, nii et tundub, nagu putukas.
Nüüd ma võiks alustada lisades palju printf on minu kood,
väljatrükk x siia, y üle siin, siin, b siia.
Aga ausalt öeldes, see on ilmselt, mida olete teinud paar nädalat
nüüd tööaega ja kodus töötades
aasta psets püüdes leida mõned vead.
Aga näete, kui te pole seda juba teinud, et probleem seatud kolm tutvustab teile
et käsu nimeks GDB, kus GDB, GNU siluri,
ise on terve hunnik funktsioone, mis tegelikult
mõistkem olukordades meeldib see, kuid rohkem compellingly,
lahendada probleeme ja leida vigu.
Nii et ma teen seda.
Selle asemel, et ./noswap, ma olen selle asemel jooksegi GDB ./noswap.
Teisisõnu, ma saan oma Programm ei ole Bash, et meie uus sõber
täna.
Ma saan oma Programmi noswap sees
selle teise programmi nimega GDB, mis on siluri, mis
on programm, mis on mõeldud selleks, et sa inimene leida ja eemaldada putukaid.
Nii et kui ma tabanud Jooks siin, seal jõle summa teksti
et sa tõesti ei pea lugema.
See on sisuliselt häiritud alates kiire, mis
Ma lähen lüüa kontroll-L ärkama ülaosas on.
See on GDB kiire.
Kui ma tahan, et programmi käivitada kohe, kui see väike cheat sheet tänapäeva
slaid näitab, Run on esimene käske, mida me eesmärk on tutvustada.
Ja ma lihtsalt kirjutada eel siin sees GDB,
ja tõepoolest see jooksis mu programmi.
Nüüd on mõned täiendavad väljundid ekraani niimoodi,
aga see GDB lihtsalt anal ja ütleb meile, mis toimub.
Sa tõesti ei pea muretsema umbes need andmed kohe.
Aga mis on tõesti lahe kohta GDB, kui ma teen seda again--
Kontroll-L puhastab screen-- lase mul minna ees ja tüüp "murda peamine," seega,
kui ma vajuta Enter, milles mis nn murdepunkti juures noswap.c,
real 16, mis on kui GDB arvasin, mu programm tegelikult
on minu funktsioon tegelikult on.
Seda me eirame nüüd aga see aadress
mällu konkreetselt selle funktsiooni.
Nüüd, kui ma tüüpi joosta, teate, mis on lahe siin.
Minu programm katkeb line I ütles GDB peatamiseks täitmise juures.
Nii et ma ei pea nüüd muuta oma koodi, lisada mõned printf-ndatel, kompileerida see, kordamisega
see, muuta, lisada mõned printf-ndatel, salvestada, kompileerida see, käivitage see.
Ma ei saa lihtsalt kõndida läbi minu programm samm-samm-sammult inimesel kiirus,
mitte Intel-sees selline kiirus.
>> Nüüd teate selle rea Siia ilmub, ja kui ma lähen tagasi
minu programmi gedit, märgata, et see on tegelikult
Kõige esimene rida koodi.
On line 16 gedit.
On line 16 jooksul GDB, ja isegi kuigi see musta ja valge pesaga
ei ole kaugeltki nii kasutaja sõbralik, see tähendab,
et liin 16 ei ole täidetud veel, kuid see on umbes olema.
Nii tõesti kui ma tüüpi print x, mitte printf, lihtsalt print x,
Ma saaksin võlts väärtus on null, sest x ei ole vormindatud veel.
Nii et ma lähen järgmisena, või kui sa tahad olla väljamõeldud, vaid n järgmisel.
Aga kui ma järgmisena siseneda, nüüd teate see liigub edasi line 17.
Seega loogiliselt, kui ma olen täide line 16 ja nüüd kirjuta print x,
Mida ma peaksin vaatama?
Üks.
>> Ja nüüd on see küll segadusse.
$ 2 on lihtsalt fancy viis, kui te tahan viidata, et väärtus hiljem
sa ei saa öelda "dollar kirjutama kaks."
See on nagu tagasi alles.
Aga nüüd, lihtsalt ignoreerida.
Mis huvitav on see, mida on paremal võrdusmärki.
Ja nüüd, kui ma järgmisena uuesti ja printida y, ma näha 2.
Võin ka nüüd printida x taas, ja ausalt öeldes,
kui ma saan natuke segaduses, kus ma olen, ma ei kirjuta nimekirjast nimekirja
ja lihtsalt vaadata mõned kontekstis ümber hetkel ma olen ka tegelikult.
Ja nüüd ma ei kirjuta Järgmise, ja seal x on 1.
Nüüd ma järgmisena.
Oh, y 2.
Ja veel, see on segane, sest GDB väljund
on segatud oma toodangut.
Aga kui te meeles pidama, mida põrkav edasi-tagasi oma koodi
või milles see välja poole kõrval olla, siis saad
näha, et tegelikult ma olen lihtsalt astutakse läbi minu programmi.
>> Aga teate, mis juhtub, sõna otseses mõttes.
Siin on line 22.
Lubage mul minna üle, mis liigub 23 ja kui ma print x nüüd, veel üks.
Ja kui ma printida y nüüd, veel üks.
Nii et see ei ole kasulik kasutada.
Nii et olgem uuesti seda.
Lubage mul minna tagasi üles top ja tüüp run uuesti.
Ja ta ütleb programm mis kuramuse silumisel
on alanud juba, alustas algusest peale.
Jah, teeme seda jälle.
Ja seekord teeme järgmise, Next kõrval kõrval, kõrval,
kuid nüüd asjad huvitavad.
Nüüd ma tahan astuda swap, nii et ma ei kirjuta järgmine.
I tüüpi samm, ja nüüd märgata hüppas mulle noswap.c line 33.
Kui ma lähen tagasi gedit, mis on line 33?
See on esimene tegelik koodirida sees swap.
Mis on kena, sest nüüd ma saan liiki tuhnima ja uudishimulik
selle kohta, mis toimub tõeliselt olemas.
Lubage mul printida tmp.
Vau.
Miks tmp on mõned hull, võltsi prügi väärtus?
Sihtrühm: See ei ole vormindatud.
SPEAKER 1: See ei ole vormindatud.
Ja tõepoolest, kui sa jooksed programmi sulle antakse terve hunnik mälu
operatsioonisüsteemi, kuid sa pole vormindatud tahes väärtusi,
nii et mida iganes bitti oled näeme siin, kuigi see
see hull suur negatiivne number, vaid seda,
et need on jäänuseid mõne varasema kasutuse, et RAM,
kuigi ma ei ole ise vaja seda veel.
Nii et nüüd ma lähen edasi minna ja tüüp Järgmise, ja kui ma nüüd kirjuta print tmp,
Mida ma peaksin vaatama?
Ükskõik väärtus oli on esimene argument, vaid
nagu x oli esimese asi on vastu võetud,
nii ja x peaks olema sama, nii printida tmp peaks printida mulle üks.
>> Niisiis, mida te näete probleemi komplekt kolm on juhendaja kehvasti on GDB,
kuid mõistab, et see on algusest on pilk vahend, mis tegelikult
aidata teil lahendada probleeme nii palju efektiivsemalt.
Mida me oleme lõpuks teeme kolmapäeval
on alustada koorida tagasi paar kihti ja kõrvaldada mõned abirattad.
See asi, mida nimetatakse stringi Me oleme mõnda aega kasutatud,
me aeglaselt ära võtta sinult ja hakata rääkima
midagi esoterically tuntakse paalia *
kuid me teeme seda kena ja esmalt ettevaatlikult, kuigi vihjeid,
nagu neid kutsutakse, on võimalik teha mõningaid väga halbu asju, kui kuritarvitanud,
vaadates veidi claymation alates meie sõber Nick Parlante Stanfordi
Ülikooli professor arvuti teadust, kes pani koos Selle eelvaate
ja mis tulemas sel kolmapäeval.
>> [VIDEO PLAYBACK]
Hei, Binky.
Ärka üles.
On aeg pointer lõbus.
>> Mis see on?
Lugege vihjeid?
Oh, tüdruk!
[END VIDEO PLAYBACK]
SPEAKER 1: mis ootab sind kolmapäeval.
Näeme siis.
[VIDEO PLAYBACK]
Ja nüüd, Deep Mõtted, poolt Daven Farnham.
>> Miks on meil õppida C?
Miks mitte +?
>> [Naer]
>> [END VIDEO PLAYBACK]