[Musika jotzen] HIZLARIA: 1 Ondo da, hau CS50 da, eta aste honetan lau hasiera da, eta entzun duzu edo irakurtzen, mundua bukatzen dira. Interneten inguruan guztiak joatean Izan ezagutza eta kontzientzia ditu bat programa, batean akatsen bat Bash izeneko programazio hizkuntza. Hau izan da wonderfully markako Shellshock, edo Bash atea gisa, baina horrelako artikuluak Ez al da arraroa izan da. Eta hain zuzen ere, horietako asko ekarri atzera Heartbleed oroitzapenak, eta horrek ere izango duzu konturatuko sakatu atzera iragan udaberri honetan, eta horrek era berean, nahiko dramatikoa izan zen. Duten of Orain hemen gaur egun, zenbat duzu behar, ez duzu ulertzen bada ere, zer guztiak buruz, Shellshock entzun? Guztiak eskubidea, eta zuetako zenbatek duten zaurgarria ordenagailuak dute? Ados, eskuak urrun, askoz hor egon behar du oraintxe sortu, arrazoiak direla ikusiko dugunez. Ikus dezagun zer da begirada bat gertatzen da komunikabideetan eta, ondoren, azaldu du pixka bat Hemen guretzat teknikoki. SPEAKER 2: Segurtasun adituek ohartarazi akats larria izan dela ehunka eraginik zorian egon munduko web milioika erabiltzaileei. Beraz, zer zehazki hori izan da akatsen da bikoiztutako Shellshock, eta zer egin? Beno, Shellshock da ere gisa ezaguna Bash bug, software da ustiatzen. Hackers birusa erabili vulnerable eskaneatzeko sistemen Linux eta Unix exekutatzen Sistema eragile eta orduan kutsatzen ditu. Bash komando lerroa da. Honen bitartez erabiltzaileak alea komandoak abiarazteko programak eta eginbideak software barruan testu idatziz. Honez normalean programatzaileek erabiltzen dituzten, eta ez luke open mundu zabalagoa izateko, Shellshock aldatzen den arren. Beno, worringly, analista batzuek abisatu mehatxua handiagoa izan zitekeen, Shellshock ahalbidetzen osoa duelako makina kutsatutako baten kontrola, Heartbleed berriz, soilik onartzen hacker ordenagailuak zelatatzeko. Ez da hain larria, oso dira oraindik 10 kanpo 10 Nazionalak larritasuna for Vulnerabilidad Database. Web zerbitzari guztiak 2/3 daude arriskua, Mac ordenagailuak batzuk barne. Beno, ziurtatu duzula Zure sistemen adabakia orain. Edonork hosting web entzierro bat Kaltetutako sistema eragileak ekintza hartu behar da ahalik eta azkarren. Edonork ordaindu ahal begiratu behar da haien jarraipena eta web aplikazio to suebakien bilatzeko edozein hegaletatik. HIZLARIA: 3 Okerrena izan gertatuko da norbaiti kodea idatzi nahi duen automatikoki joango litzateke eta eskaneatzeko internet eta eragingo luke ordenagailuak horiek guztiak. Eta behin, ez, hori ondo egiten dute, gauzarik txarrena egin izan dute besterik ez da ezabatu guztia, edo itzali guneak. Beraz, kalteak ikusi ahal izan genuen Ikuspegi horretatik abiatuta, non asmo txarreko pertsona izango genuke nor besterik erabakitzen hondamena eragin jarriz sistemen behera edo ezabatu fitxategiak, eta horrelako gauzak. SPEAKER 2: Batzuek diote hau da, inork zailenetako neurtzeko urteetan bugs, eta horri asteak iraun ditzake, edo are hilabeteetan bere azken inpaktua zehazteko. HIZLARIA: 1 Beraz, hori guztia egia da, baina gauza dibertigarria da, ia guztiak irudiak ikusi besterik ez duzu, beharbada, teklatua izan ezik, ezer egin ditu bug inolako. Zerbitzariak eta hariak eta abar, nik Ordena zeharka erlazionatuta, baina muina, egia esan, nahiko ezagutzen zer gertatzen da hemen. Izan ere, let me go sartu gure CS50 tresna. Dezagun aurrera eta maximizatzeko terminal-leihoa hemen. Eta duzu guys dute hau erabiliz, edo kapsulatutako bertsioa kontratuan, gedit ordena programak idazteko, komando idatzi, eta abar, eta hori da, benetan, eta ditu asteetan, Bash, B-A-S-H izan da. Hau da, Bourne-shell berriro, bertan esaten modu fancy bat besterik ez da, honek dituen programa bat da, gonbita keinukariak, eraginkortasunez, han esertzen zain zuretzat sarrera. Eta komandoa da line interface que bidez you guys komandoak exekutatzen dira eta azken batean bildu eta gero exekutatzen programak. Baina Bash ere bada programazio bat honako zentzuan hizkuntza. Badakizu badirela bezalako komandoak cd eta ls eta ere astintzen, eta beste batzuek, baina zeure komandoak defini dezakezu horiek gauzatzeko Bash-ek. Orain ez gara joan zehaztasun handiz sartu programazio lengoaia Bash den bezala, baina jakin, esate baterako, une honetan, ez dago komandoa deitzen da "kaixo". Beraz, aurki daiteke paketeak horietako bat. Ez da nire ordenagailuan instalatu. Galdetu zure administratzailearekin. Baina ez nahi badut programa bat izan behar du "kaixo" Bash edo nire gonbita at deitzen, Benetan I sintaxia erabili ahal izango da Nahiko C. bezala, ez da gauza bera nahiko, baina nahiko baten antzeko itxura du funtzioa, xehetasun batzuk falta izan arren. Ezer gutxi gertatzen, baina orain badut idatzi "kaixo" benetan idatzi dezakezu programa, ez C, ez Java, Ez programazio bestean hizkuntza, baina Bash berez. Orain gakoa da hemen dela idatzi nuen izendatzeko komando berri hau eman nahi izan dut, eta parentesi ere gaude horren sinboliko funtzioa izateaz. Bat alde batera utzita, ere egin dezakezu fun , eta hain zuzen ere, nahiz eta Mac OS gauzak, hau Terminal izeneko programa bat da. Dator inoren txertatutako Mac bat du gela honetan ordenagailu, eta Mac-en antzerako gauza egin dezakezu OS, baina haratago joan gehiago dezakezu. Eta hau da, pixka bat tangentzial, baina fun-mota da. Gaur goizean gogorarazi nintzen, denean bitartez honetan pentsatzen, Joko apur bat jolasteko erabiltzen dut CS50 ohia TFS bat batera Horren bidez noiznahi urruntzen oinez egingo zuen bere bere pantailako teklatua desblokeatu, Exekutatu komando bat nuke "esan kaixo." hau bezalako Eta orain edonoiz itzuli zen bere teklatua pantaila garbitu dut ondoren eta eseri zuen, saiatu lan batzuk egin, bere, direktorioa edukiak zerrendatu [AUDIO erreprodukzioa] -Hello. Hello. HIZLARIA: 1 Beraz, zuzentasuna, egia esan ez zen "kaixo". Zerbait izan ohi izan zen gehiago betean horrelako [AUDIO erreprodukzioa] -Beep. HIZLARIA: 1 --that I would-- beraz, bere ordenagailu litzateke zion zin edonoiz zen benetan esertzen zen, teklatua at. Eta oso azkar hurrena zuen ez du bere pantaila desblokeatu uztea. Baina hau sort dioen ergelak fun duzula Bash antzeko zerbait izan daiteke. Baina pixka bat gehiago da larriak, ziur, hori baino. Eta hain zuzen ere, hau da, bat arriskutsu eta iraupen luzeko bugs gehien benetan hit mundu globalean. Inguruan bug Hau izan da 20 urtez, eta zuk justu batean zaizu deigarria Bere sinpletasun erlatiboa unea. Beraz, honen ordezkari bat da errac baduzu jabea Mac bat, literalki, oraintxe zure tapa irekita dituzunean, horretan idazten saiatu dezakezu programa Terminal izeneko. Terminal azpian dagoen Eskaerak Utilities-- behin, Windows erabiltzaileek ez dute threat-- zehatz honetan kezkatu baina zuk horiek Macs batera idatz dezakezu hau leiho batean bezala egin dut hemen, eta zuk idatzi ez bada Programa honetan sartu duen Terminal deitzen, bezalako egin dut, gaur egun, hitza ikusten baduzu, "ahul" Zure ordenagailua da esplotazioa zaurgarria. Orain zer benetan esan nahi du? Eta hau da admittedly batzuk nahiko zoroa sintaxia, baina dezagun gutxienez marrazteko alderdi interesgarri batzuk. Beraz, ez dagoela itxura sintaxia batzuk Pixka bat ezagutzen, gutxienez C-tik eta, oro har programazioa. Parentesi batzuk ikusten ditut, puntu, kizkur giltza, eta, besteak beste, baina bihurtzen da hori ergelak gauza hemen horiz funtzioa da, funtsean, dagoela ezer ez. Colon bitartekoak ez dute ezer egiten, eta koma esan nahi gelditu, ezer egin gabe. Beraz, horien barruan kizkur giltza, hain zuzen, berdina izango duten I utzi, hau sinatzeko funtsean sortzeko komando bat, edo aldagai bat, x deitu, eta hura esleitzea Kode bit horia dagoela. Hori "oihartzun antzeko zerbait izan liteke kaixo "edo" esan bip "edo zerbait duten betean. Baina zure begiak bada nabarituko aurrerago ibiltzeko eskubidea, ez da lerro hori baino gehiago besterik ez koma horren amaieran. "Echo zaurgarria", eta, ondoren, Haratago ez, are gehiago. Beste puntu eta koma, bash -c :. Beraz, ipuin luze, kode-lerro hau da, sinesgarria nahikoa hori da ordenagailu bat zerbait egiten zaurgarria egin nahi duzula, ez Bash Horren bidez, akats bat delako Bash nahiz gelditu zen ustezko irakurtzen komando eskuin-ildoak ez du testu horia ondoren, 20-plus urteko bug zahar bat, Bash benetan izan du irakurtzen koma hori baino haratago, eta nahiko zer den kontatzen da askoz ere egiten. Beraz, zer inplikazio dela, azken finean? Esan besterik ez dut "echo kaixo" edo "echo zaurgarria" baina zer zerbait egin baduzu benetan maltzurren, rm -rf * bezala, eta horrek agian ez duzu inoiz idatzi aurretik, eta Egia, seguruenik duzu beharko lukete, ez goizegi, duzu bat egin ahal izango delako Berarekin kalte asko. Zergatik? rm du zer, nola ez? Kentzen ditu. * Esan nahi du zer? Guztiak. Beraz, bat deiturikoak eta bietan, esan nahi du, beraz, Guztia ezabatu uneko direktorioa. recursive esan gertatzen -r, horrek esan nahi du zer ezabatzen ari bazara Direktorio bat da, eta hor barruan Beste fitxategi eta beste directories da, errekurtsiboki ez murgiltzea eta ezabatu hori guztia. Eta f denak txarrena da. Edonork ezagutzen hemen zer esan nahi du-f? Force. Beraz behartzeko bide, are gehiago, hau ideia txarra bada, al zidan galdetu gabe berrespena gehiagorako. Beraz, badakizu, barre at dugu honetan, baina Egia, I seguruenik idatzi hau hainbat aldiz Egun batean, errealitatea delako da modurik azkarrena da stuff sorta osoa ezabatzeko. Baina, nahiz eta kalte batzuk egin ditut. Baina ordenagailu bat engainatu zinen ergelak aldagai batzuk definituz sartu edo x izeneko funtzioa du, baina gero ordenagailua tricking exekutatzean sartu duten mugak haratago funtzioa, koma hori baino haratago, hain zuzen ere, ezin duzu ordenagailu bat engainatu rm antzeko zerbait exekutatzean sartu -rf edo Email komandoa edo Kopiatu komandoa. Ezer literalki egin dezakezu ordenagailua, nik fitxategiak ezabatuz ala ez, fitxategiak sortzeko, norbaiten spamming, zerbitzari batzuk urrunetik erasotzen, duzun adierazi ahal bada komando batekin, zuk ordenagailu bat engainatu egiten duenean. Orain zer da adibide bat Hau nola egin dezakezu? Beno, ez ordenagailuak asko da internet lasterka Bash gainean. Gurekin Mac erabiltzaile guztiek haien artean daude. Linux zerbitzari asko dira, besteak beste baita, eta Unix zerbitzariak. Windows berriro lortzen kako nahiko off instalatu ezean software berezia. Orain bat zerbitzari asko, for Esate baterako, exekutatu web zerbitzariak, eta hain zuzen ere Linux da, beharbada, popular sistema eragilea gehien Interneten ordenagailuetan exekutatu diren web orriak sortu zerbitzatu. Orain dugun bezala, geroago ikusiko seihilekoan, noiz hasi eskaera bat bidali duzu Zure browser-- Chrome, Internet Explorer, dena delakoa urruneko zerbitzari batean, bihurtzen da, nahiz kurtsorea kokatuta www.example.com, Zure nabigatzaileak mezu bat bidaltzen hori da apur bat gehiago arcane, honela. Baina zerbait apur bat arraroa nabarituko. Lehen bi lerroak Ez dut inoiz ikusi aurretik, baina ez dute itxura bereziki arriskuan. Baina zer lapurtu dut nabarituko hirugarren lerroan hemen da. Tipo txarra balitz mezu bat bidali honek bere ordenagailutik bezala Mac edo zaurgarria bati vulnerable Linux zerbitzari, gauza dibertigarria Bash, hau da, komando gutxi simple gonbita dela, nonahikoa da eta askotan used to funtsean exekutatu baten edukia Mezu bitartean jasotzen dituen. Eta logika hori, ahal duzun web zerbitzari bat engainatu, beraz, antzeko zerbait bidalita Erabiltzaile-agentea, ohi esateko suposatzen da Zure nabigatzailean izena. Erabiltzaile-agentea Chrome, Erabiltzaile-agentea Internet Explorer, Erabiltzaile-agentea Firefox, hau besterik ez da zure nabigatzailean bera identifikatzeko bide. Baina bada tipo txarra oso cleverly dio, mm-mm, naiz Ez duzu esango zer nire nabigatzailea da, Naiz ordez bidal hau joan críptica begira rm -rf batekin gauza * Bertan, dezakezu literalki trick vulnerable Interneteko web-zerbitzari zehazki hori exekutatzean sartu han fitxategi guztiak ezabatzeko. Eta Egia, ez da hori nahiz eta txarrena. Ezer egin ahal izango duzu. Hasteko ezin duzu banatu bat zerbitzu erasoa ukatzea Mezu hau bidaltzen baduzu web zerbitzariak sortak osoa eta gero izan denak, jaitsi for Esate baterako, Harvard.edu zerbitzarietan, eta bang ordena ditzakezu Horietako out demontre sareko trafikoa bat zela arabera bestela txarra lasaia hau aktibatzen. Beraz, ipuin luze, ia Gela honetan Mac bat norenak guztiontzat honen aurrean. Zilarrezko estaldura da hori ez baduzu Oraindik Zure ordenagailu eramangarria web zerbitzari bat exekutatzen ari da, eta benetan duzun konfiguratuta ezean SSH antzeko zerbait egin ahal izateko bertan sartu, Oraindik benetan segurua. It zaurgarria da, baina ez dago Bat eramangarria lortu nahian, beraz ordenatzeko gainerako ziurtaturik duzu. Hala eta guztiz ere, Apple laster izan hau fix bat eguneratzeko. Linux munduan dagoeneko kaleratu du Fedora eta Ubuntu konponketak kopuru bat eta beste Linux bertsio, eta halaxe aparatuaren update 50 exekutatu baduzu, gehiegi, nahiz eta hori izango da eguneratu eta zuzendu. Baina hori ere ez dauka Benetan dira zaurgarria, duzun ezean delako aparatuaren tinkered eta eramangarria egiten publikoki Interneten, eta hori ez da eskuragarria lehenespenez, duzun benetan izan fina delako firewalling eta beste teknika. Baina muturreko bug baten adibidea da dugun bizi literalki 20 urteetan, eta nork daki norbait bada Denbora horretan guztian du ezagutzen? Eta hain zuzen ere, hau da, bat dituen funtsezko erronkak geroago dugula ikusiko batean segurtasunaren inguruan seihilekoan, dela besterik ez mundu errealean bezala, zintzoak desabantaila daude. Txarra guys mantentzeko, behar dugu ziurtatu ate bakoitzean blokeatuta, hau da, leiho guztietan segurua dela, eta, sarrera-puntu guztietan hasiera batean seguru txarra guys mantentzeko da. Baina zer du txarra lasaia izateko Egin zure etxean benetan hondatu eta zuk lapurtu? Zuen besterik ez du bat desblokeatu aurkitu ate, leiho bat apurtuta, edo zerbait lerro horiek batera, eta da segurtasun informatikoa ere gauza bera. Milioika idatzi ahal dugu programazio kode lerro eta ehunka edo milaka pasatzeko da zuzena lortu nahian orduko, baina bakar bat egiten baduzu zuzentasun akats, sistema osoa jarri dezakezu eta hain zuzen ere, kasu honetan, internet osoa eta arriskuan dauden munduko. Beraz, gehiago ikasi nahi baduzu honi buruz, joan URL hau hemen. Ez dago ekintza beharra Gaur gauean Oraindik ezean erosoago duten etxeetan izan zeure web abian aldi zerbitzariak, eta kasu egin beharko lukete zuk ere, Izan ere, softwarea eguneratzeko. Eta hau ere izenburua da hitzaldi bat, eta gaur egun, paper bat, Nik dugula on lotuta Jakina da gaur egun webgunean. Ikaskide batek izan zen izeneko Ken Thompson, nor zen oso ospetsua onartuz informatikako saria, eta eman zuen hitzaldian, urte batzuk ago, funtsean gai honen beraren gainean. Folks eskatuz galdera, behar duzu benetan konfiantza, azken finean, software Zuk eman? Esate baterako, denok daukagu dira programak idazteko, eta dira konpilatzen dugu Clang dituzten horiek. Eta zure ezagutza, idatzi duzue CS50 programak edozein non dago atzera ordenatzen ate bat, ez dago modu bat da tipo txarra dela, zure programa exekutatzen bada, Zure ordenagailuan baino gehiago hartu daiteke? Seguruenik, ez da, ezta? Mario eta Greedy, eta Kreditu. Hauek programak nahiko txikiak dira. Polita izan nahi duzu txarra izanez gero, egia esan, zure ordenagailu osoa vulnerable egin 10 edo 20 kode lerro idatzi ondoren, edo, gutxienez, zenbait ezjakin segurtasun inplikazio. Orain dela umorez esaten dut, baina ari gara, gaur egun ikusteko joan eta aste honetan, egia esan, benetan, oso erraza txarra izan eta nahiz eta egin programa laburrak zaurgarria. Baina, oraingoz, behintzat, konturatzen eskatzen ari hemen galdera Clang buruz konpiladore batean. Zergatik fidatu izan dugu Clang Azken bi edo hiru aste? Nor duenak idatzi Clang esateko ez dute "gero" ez diren baldintza bat funtsean zero batzuk injektatu eta programa guztietan sartu direnak biltzen noiz utzi zion edo bere sarbidea Zure ordenagailuan lo zara eta eramangarria tapa irekita dago eta ordenagailuan exekutatzen ari da? Eskuin? Ohore sistema eskuineko sort hau daukagu orain non fidatzen gara Clang dela egiaztatzeko. Fidagarriak aparatuaren dela egiaztatzeko. Konfiantzazko literalki programa guztietan zure Mac edo PC fidagarriak da. Eta bug sinple honek dioen bezala, Ez da asmo txarreko bada ere, hori erabat ez litekeena da kasua izan. Beraz, infernua bezala beldur izan behar duzu. Egia, ez da ez sinple beste honen konponbidea gizarte-sentsibilizazio moduko bat baino handituz konplexutasun ari garela gainean eraikitzen gure sistema informatikoak, nola zaurgarria, gero eta Oso ondo izango genuke. Orain esan, Breakout. Beraz Breakout arazoa da ezarritako hiru, eta Breakout antaño batetik joko bat da baliteke gogoratzen duzu, baina guretzat arazoa hiru ezarri, hartu digu gauzak atzera Notch bat sortu denean programak idazten ari gara, beraz, are gehiago hau bezalako Terminal leiho batean, benetan dugu exekutatu daiteke, azken finean, programak grafikoa ez horiek ez bezala, izan dugu Scratch sarbidea. Beraz, hau da langileak hamarkadan Breakout ezartzeko, besterik adreiluzko-haustura hau da Jokoan, zure pala atzera mugitu duzula eta aurrera, eta baloia hit duzu sortu top koloretako adreilu horiek aurka. Beraz, hau da gurekin harremanetan jarriz Ordena atzera nora Oso azkar izan ahal izan dugu Scratch-ekin, eta orain C-rekin, gure kabuz gauzatzeko interfaze grafiko. Baina hori baino gehiago, hau Arazo multzo bat irudikatzen lehenengoa bertan ematen ari gara you kodea sorta bat. Eta hain zuzen ere, esplizituak ekarri dut hau, bereziki, zeren gutxiago dutenentzat erosoa, hau arazo multzo, behintzat hasiera batean, da behar bezala sentitzen joan Nik hartu dugu sortu Notch. Eman dugu delako, bilaketa batzuk eta arazoak ordenatzeko pset batean, idatzi dugun kodea sorta bat, eta komentario pare bat dagoela esan "egin" nora hutsuneak bete behar duzu. Beraz, ez oso scary, baina lehen aldia da you kodea gozamenerako ari garela behar duzu Lehenengo irakurri, ulertu, eta, ondoren gehitzeko eta osatuko da. Eta gero Breakout batera, Gauza bera egin behar dugu, you batzuk dozena bat lerro gehiago emanez kodea duten, Egia, emango dizu esparrua asko Jokoaren baina gelditu labur adreilu gauzatzeko eta pilota eta pala, baina beste ezaugarri batzuk ezartzeko egiten dugu. Eta nahiz eta hasiera batean, berriz, batez ere gutxiago erosoa bada, bereziki Beraz, badirudi daiteke eta Uste duzu funtzio berria ez da hainbeste your mind itzulbiratu behar duzu inguruan, eta hori egia da. Baina kontuan hartu, hori Nahiko Scratch bezala. Odds dira, ez duzu guztia Scratch, puzzle pieza. Odds dira ez duzu axola biltzeko papera denak inguruan zure kontuan guztiak ere hartu zen delako bat begiratu azkar ulertzen, oi, hori da, zer egin ahal dut puzzle pieza horrekin. Eta hain zuzen ere, arazo ezarri 3 zehaztapenak, seinalatu egingo dugu dokumentazio ekarri duten borondatea aurkeztu funtzio berri batzuk behar duzu, eta, azken finean, programazioa erabiltzen duzun eraikitzen. Baldintzak, begiztak, aldagaiak eta funtzioak berdina izango da zer horrela ikusten dugu orain arte. Beraz, hain zuzen ere, zer eman dugu lagin kodea batzuk duzula aukera ematen dizu leiho bat sortzean hori ez itxura hau ez bezala, eta azken batean sartu zerbait nahiko honetan bezala. Beraz, aprobetxatu CS50, bulego orduetan eta gehiago eztabaidatu, eta erosotasuna hartu duela, hain zuzen ere kodea zenbatekoa idatzi behar duzu da, benetan ez da asko. Aurreneko erronka besterik acclimate da zeuk kodea batzuk idatzi dugu. Pset3 edozein galdera, Shellshock, edo bestela? IKUSLEEN: zirudien bezalakoa da igaro Breakout batera kodea Ia objektuei zuzendutako estilo bat, baina pentsatu nuen C izan zen objektuei zuzendutako programa. HIZLARIA: 1 galdera bikaina. Beraz bitartez bilatzen hasi banaketa kodea, kodea pset3 idatzi dugu, ezagutzen dutenentzat, it itxura bat bezala objektuetara bideratutako gutxi. Erantzun laburra da, hau da. How you hurbilketa bat da objektuei zuzendutako kodea egin dezake erabiliz C bezalako hizkuntza bat, baina ez da Oraindik ere, azken finean, prozedurazkoa. Badira barruan metodoak ez aldagaiak, hala duzu ikusteko. Baina hori gogorarazten da. Eta berriro ikusiko dugu, eta ezaugarri hori denean lortu PHP eta JavaScript nahi dugu amaieran seihileko aldera. Baina orain, pentsatu bezala zer da iradokizun bat etorri. Ona galdera. Guztiak eskubidea. Beraz, batu sort zen nola garen ezker gauzak azken aldiz. Eta batu sort zen cool Zentzu zela hainbeste azkarrago, Gutxienez oinarritutako cursory probak azken astean egin dugu, adibidez, baino burbuila ordenatu, ordenatu, txertatzeko sort. Eta zer neat zen oso besterik ez da nola succinctly eta garbi Adierazteko dezakezu. Goiko bat izan zen eta zer ez esaten dugu Merge denbora lotuak ordenatzeko? Bai? IKUSLEEN: n log n? HIZLARIA: 1 n log n, eskuinera. n log n. Eta berriro itzuliko gara, zer esan nahi du Benetan esan nahi du, edo non den, baina hau hobea izan zen zer iraupena baino ikusi dugun burbuila for aukeraketa eta txertatzeko sort? Beraz, n karratu. n karratu hau baino handiagoa da, eta ez da, nahiko begi-bistakoa bada ere, jakin log n n baino txikiagoa da, beraz, n aldiz egiten baduzu Zerbait n baino txikiagoa, nik gutxiago n karratu baino izango. Intuizio pixka bat da han. Baina prezio bat ordaindu dugu horretarako. Azkarragoa izan zen, baina gai bat hasi azken astean azaleratzen denerako zen. Errendimendu hobea lortu nuen denbora jakintsua, baina zer zuen bestea pasatzeko daukat alde batetik, ordena hori lortzeko? IKUSLEEN: Memoria. HIZLARIA: 1 Esan berriro? IKUSLEEN: Memoria. HIZLARIA: 1 Memoria, edo Leku gehiago, oro har. Eta ez zen super Gure gizakiak bistako, baina gogoratzen gure boluntarioek ziren aurrera joatea eta zapaltzeko atzera bagina bezala ez array bat hemen, eta badirudi ez dago bigarren array bat hemen erabili izan dute, garelako beharrezko someplace Folks horiek batzeko. Ezin dugu besterik gabe trukatzeko horiek lekuan. Beraz batu sort leverage leku gehiago dago, eta horrek ez genuen behar Beste algoritmoak, baina hankaz da askoz azkarragoa dela. Eta Egia, benetako mundua espazioan RAM days-- horiek, disko gogorrean espazio nahiko merkea, eta, beraz, hori ez du zertan txarra. Beraz, dezagun begirada bat, apur bat gehiago metodikoki, zer egin genuen at eta zergatik izan zen n log n esan genuen. Hortaz, hona hemen zortzi zenbakiak eta zortzi boluntario azken aldiz izan genuen. Eta Batu duten lehenengo gauza Sort esan zigun zer zen? IKUSLEEN: bitan zatituta. HIZLARIA: 1 Esan berriro? IKUSLEEN: bitan zatituta. HIZLARIA: 1 bitan zatituta, eskuinera. Hau oso gogorarazten telefono liburua, arrail of eta agindu gehiago, oro har. Beraz, begiratu ezkerreko erdia dugu. Eta gero berriro, esan dugun moduko elementuak ezkerreko erdia, zer datorren esan genezake? Sort ezker ezker erdia erdia, eta horri esker, guretzat, bitan zatituz ondoren, lau eta bi ardatz. Zelan zerrenda ordenatzeko duzu orain, in horia, tamaina bi, batu sort erabiliz? Beno zatitzeko erdia, eta ezkerreko erdia ordenatzeko. Eta hori izan zen, non gauzak ergelak laburki txiki bat lortu. Zelan zerrenda horren da ordenatzean tamaina bat, lau zenbaki hau hemen bezala? Honez ordenatuta. Bukatutakoan. Baina orduan, nola ez, zerrenda ordenatzean tamaina bat denean bi zenbakia da? Beno, gauza bera, baina orain zer zen Hirugarren eta gako-batzea mota urratsa? Ezker batu behar izan duzu erdia eta eskuineko erdia. Eta behin egin duguna, begiratu dugu lauretan, begiratu bi at dugu. Guztiak ondo erabaki genuen, jakina bi dator lehen, beraz, bi jarri ditugu bere lekuan, lau jarraian. Eta orain, mota horretako atzeratzeko aukera izango duzu, eta honen ezaugarri sort da Batu bezalako algoritmo bat Sort, oroimenean atzera egiteko. Zein izan zen hurrengo istorioa lerroa? Zer behar da, hurrengo bideratua dut? Eskuinetik ezkerrera erdia erdia, Zein da sei eta zortzi. Hargatik honen bidez urratsa besterik puntuan gehiegi belaboring gabe. Sei eta zortzi, gero sei dago ordenatuta, zortzi ordenatuko da. Batu itzazu elkarrekin duten bezala, eta orain hurrengo pausoa da, noski, eskuinera erdia ordenatzeko Algoritmo honen lehen urratsa. Beraz, bat, hiru, zazpi, bost ardatz dugu. Ondoren, ezkerreko erdia dugu aztergai. Ezker duten erdia, eskuineko erdia dela, eta, ondoren, bat eta hiru ere batu. Ondoren, eskuineko erdia, gero erdi utzi Da, ondoren, eskuineko erdia. Batu bertan, eta orain zer pauso geratzen da? Batu the big ezkerreko erdia eta big eskuineko erdia, beraz, bat jaisten badira, ondoren, bi, hiru, lau, eta ondoren, bost, ondoren, sei, zazpi, ondoren, ondoren, zortzi. Beraz, gaur egun zergatik da hau, azken finean, agerian utziz, batez ere, n eta logaritmoak gehiago oro har, baizik eta ihes egiten duzu, gutxienez azken memoria? Beno, nabarituko gauza hau altuera. Zortzi elementu izan genuen, eta guk bi banatzen da, bi, bi. Zortzi bi ematen Beraz log base digu hiru. Eta konfiantza me horretan bada Horretan hazy apur bat. Baina saioa base hiru zortzi bi, beraz, hiru batuz geruzak egin dugu. Eta noiz batu ditugu elementuak, elementu zenbat zuen itxura errenkada horietako bakoitzean at dugu? N guztira, ezta? Goiko errenkadan batzea delako, it piecemeal egin dugu, nahiz eta, azken finean, ukitu kopurua behin dugu. Eta bigarren lerroan, to zerrendak horiek batu tamaina bi, elementu bakoitzaren ukitu behin izan genuen. Eta gero hemen benetan argi eta garbi, azken lerroan, horietako bakoitzak ukitzeko aukera izan genuen elementuen behin, baina behin bakarrik, beraz, dokumentu honetan gure n log n datza, ondoren,. Eta orain, besterik ez gauzak apur bat gehiago formal une bat besterik ez, nahi baduzue ziren, orain aztertuko honetan maila handiagoa moduko batean eta saiatu, erabaki behar baita nola Baliteke adierazteko buruz joan beharko duzu exekutatzen algoritmo honen denbora besterik ez da, eta ez begira Adibidez contrived bat erabiliz? Tira, zenbat denbora litzateke bat esan eta hau horiz hartuko luke bezala zapaldu, n <2 bueltan bada? Hori zer O handi bat da? Bat, beraz, beraz, urrats bat ikusten dut, agian, bi urrats egiten bada delako eta gero itzuli, baina hemen denbora etengabe, ezta? Beraz, esan dugu O (1), eta hori, hau nola adierazi dut. T, kontuz denbora exekutatzen. n sarrera-tamaina da, beraz, T (n), besterik ez fancy modu bat lasterka esaten Denbora-tamaina n sarrera eman da ordena, izango etengabeko denbora, O (1). Baina bestela, honi buruz, zer? Nola nahi den adierazteko lerro horiak honen iraupena? T zer? Mota egin ahal hemen iruzur eta nire galdera ziklikoki erantzun. Beraz, korrika denbora bada Oro esatea besterik ez dugu T (n) da. Eta orain zu mota hemen punting duzu eta , esaten baita, besterik gabe, ezkerreko erdia ordenatzeko, eta, ondoren, eskuineko erdia ordenatzeko. Nola liteke sinbolikoki adierazten dugu exekutatzen lerro horiak honen denbora? T zer? Zer da sarrera tamaina? n bi baino gehiago. Zergatik ez esan dut hori? Eta gero, hau da, beste T (n / 2) eta, ondoren, berriz ere, sailkatutako bi erdi batzea badut, zenbat elementu dut guztira ukitzeko izatea? n. Beraz, hau adieraziko dut, Mota besterik ez fancy, exekutatzen orokorrean ordua. T (n) besterik ez exekutatzen T (n / 2) denbora da, plus T (n / 2), erdia eta eskuineko erdia utzi, plus O (n), hau da, ziurrenik n urratsak, baina agian, nik bi behatzak erabiltzen ari bada, bi aldiz da askotan bezala urratsak, baina lineala da. Urrats kopuru batzuk da Horren n faktore bat, beraz, hau adierazi dugu agian horixe. Eta hori da, non orain arte egingo dugu punt gure batxilergoko matematika testuliburua atzealdean Oraindik dugu errepikapena, azken finean, bukatzen hau lortzea, n aldiz log n, baduzu benetan egiten out matematika gehiago formalki. Beraz, perspektiba bi besterik ez. Zenbakiaren One batekin hard-kodetuak ordezkari adibidez zortzi zenbakiak, eta gehiago erabiliz nola iritsi garen begirada orokorra. Baina zer da benetan interesgarria hemen da, berriro ere, txirrindularitza nozioa. Ez dut loops erabiliz. Motatako naiz definituz beraren aldetik zerbait, Ez honekin bakarrik Funtzio matematiko, baina baita ere sasi kode hau dagokionez. Sasi Kode hau recursive Bere lerro bik horretan funtsean hura kontatzea joan bera erabili txikiago bat konpontzeko tamaina txikiagoa arazoa, eta, ondoren, behin eta berriro eta berriz arte whittle egiten dugu base kasuan deiturikoak honetan behera. Hargatik marraztu benetan gehiago sinesgarria hartu-urrun honetatik honela. Let me go gedit sartu eta bat hartu Gaur egungo iturburu-kodea batzuk begiratu, bereziki, hemen adibide honetan. Sigma 0, itxuraz gehitzen n bidez zenbakiak. Beraz, ikus dezagun zer da ezaguna eta ezagunenak hemen. Lehen pare bat behar dugu sartzen dira, beraz, ez da ezer berria. Prototype. On hazy apur bat naiz hau, egun batzuk ondoren, baina, zer egin dute bat esaten dugu Funtzio baten prototipoa da? IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 Zer da hori? IKUSLEEN: iragarriko ditugu. HIZLARIA: 1 iragarriko ditugu. Beraz, irakasten ari zaren Clang, hey, Ez, egia esan, horretan ere gauzatzeko, baina, nonbait, fitxategi horretan, ustez, hau da, zer deitzen funtzio batera joan? Sigma. Eta hori besterik ez da promesa bat dela ez da eta hau itxura. Honez osoko bat hartu nahi bezala joan sarrera eta gehiago esplizitua izan daiteke I eta esan int n --eta da, int bat itzuli du, baina koma bitartez, mm, inguruan lortu dut hau pixka bat beranduago gauzatzeko. Berriz ere, Clang mutu da. Honez bakarrik, zer ezagutzen joan top esango dizu behera, beraz, gutxienez eman behar dugu hura zer da iradokizun bat etorri. Orain dezagun hemen nagusian. Dezagun behera joan Hemen eta ikusi zer nagusia egiten ari da. Ez da funtzio baten luzera du, eta Izan ere, eraikuntza hemen ezagutzen. Deklaratzen dut aldakorreko n bat, eta, ondoren, Erabiltzaileak pester dut behin eta berriro zenbaki oso bat getInt erabiliz, eta irteera bakarra begizta honen kanpo Behin erabiltzaileak bete du. Egin bitartean, gara erabiltzen ditudan horrela erabiltzaileak pester. Orain hau interesgarria da. Izeneko int bat deklaratzen dut "erantzun." Dut itzulera balioa esleitzea izeneko funtzio baten "sigma". Ez dakit zer egiten duen oraindik, baina Deklaratzen duela une bat gogoratzen dut. Eta gero pasatzen naiz balioa Erabiltzaile idatzitako ere, n, eta ondoren, erantzuna berri dut. Beno dezagun atzera korritu Momentu bat besterik ez da. Dezagun aurrera direktorio honetan sartu, egiteko sigma 0, eta egia esan, programa hau exekutatu eta ikusi zer gertatzen den. Beraz, aurrera joan nintzen eta korrika bada Programa honetan, ./sigma-0, eta idazten dudanean positiboa bi bezala osokoa, Sigma, Greziako sinbolo gisa dakar, besterik ez da gehitzeko zenbaki guztiak aurrera joan zero bi gehienez. Beraz, 0 plus 1 gehi 2. Beraz, hau, zorionez, eman behar dit 3. Hori guztia egiten ari da. Eta, era berean, korrika egin dut hau berriro bada eta hiru kopuruan dut eman, hori da 3 gehi 2, beraz, hori da 5, plus 1 eman behar dit 6. Eta benetan ero lortu dut gero eta hasteko handiagoa zenbakiak idazten, Niri eman behar da zenbateko handiagoa eta handiagoa da. Beraz, hori da dena. Beraz, zer sigma itxura? Beno, nahiko erraza da. It nola inplementatu dugu agian da iragan aste pare dagoen honetan. "Int" da bueltan mota izango da. Sigma izena da, eta bertan hartzen m aldagai baten n ordez. Top aldatu dut sortu. Ondoren, hori besterik ez behatu check da. Ikusiko dugu zergatik une batean. Orain beste aldagai bat deklaratzen dut, batuketa, hasieratu zero. Orduan izan nuen hau loop For , errepikatzean itxuraz argitasuna, i = 1 on gehienez = m bat, hau da, edozein dela ere, erabiltzaileak idatzitako, eta, ondoren, I Kontatzailea hau atsegin batuketa. Eta gero itzuli batuketa. Beraz, galdera pare bat. One, aldarrikatzen dut nire iruzkin hau horretan begizta amaigabea arriskua saihesten du. Zergatik litzateke zenbaki negatiboa igaroz bultzatu, potentzialki, begizta amaigabea? IKUSLEEN: Ez duzu inoiz iritsiko m. HIZLARIA: 1 Never iristeko m. Baina m pasatu da, eta, beraz dezagun kontuan hartu adibide erraz bat. M pasa bada ere berak Erabiltzaile bat negatibo gisa. Nagusiak kontuan hartu gabe. Babesten gaituen nagusitik too hau, beraz, besterik ez naiz Benetan batera anal izateaz sigma ere ziurtatu sarrera ezin dela negatiboa. Beraz, m negatiboa bada, Alde negatiboak antzeko zerbait. Zer gertatuko da? Beno, hau da i joan get bat hasieratu, eta, ondoren, i izan da joan baino gutxiago edo m berdina? Stand by. Hori dezagun was-- ez, dezagun nix istorio hau. Nik ez dut galdera hori, zeren naizela aipamenak arriskua ez da i delako gertatuko Beti than-- OK handiagoa izan joan, Galdera hori atzera botatzeko dut. Ados. Gatozen orain zati hau soilik hemen. Zergatik batzuk deklaratzen dut Begizta kanpo? Oharra on line 49 dut Begizta barruan deklaratu i, baina online 48 dut kanpo batzuk izendatu. Bai. IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 Noski. Beraz, lehenengo eta behin, zalantzarik ez dut aldarrikatu eta abiarazi batura nahi zero-barrutik to begizta iterazio bakoitzean, Argi eta garbi hau litzateke garaitzeko delako Zenbakiak gora summing helburua. Aldatzen jarraituko nuke balioa zero itzuli. Eta, gainera, zer da, beste bat gehiago arcane bera diseinua erabaki horren arrazoia? Bai. IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 Zehazki. Kanpo da sartu nahi dut Begizta too zer line on? 53 On. Eta gure thumb araua an Duela hitzaldiak pare bat, aldagai scoped dira, benetan, joan giltza kizkur biltzen duten horiek. Beraz ez badut batura deklaratzen barruan kanpoaldeko kizkur giltza horien, Ezin ditut lerro 53 urtean. Beste era batera esanda, I deklaratu bada batura hemen, edo, are barnean Begizta, ezin izan dut sartzeko 53 urtean. Aldagaia eraginkorrean desagertu egingo litzateke. Beraz, arrazoi han pare bat. Baina orain, goazen atzera eta ikusi zer gertatzen den. Beraz sigma lortzen izeneko. Gehitzen da 1 gehi 2, edo 1 gehi 2 plus 3, eta, ondoren, balioa itzuliko du, dendetan da erantzuna, eta printf hemen Horregatik dut pantailan ikusten ari naiz. Beraz, hau da iteratibo bat zer deitu dugu hurbilketa, non iterazio besterik esan nahi du, begizta bat erabiliz. A loop, berriz, begizta bat, Do a bitartean For begizta, zerbait berriro egiten eta behin eta berriro. Baina sigma ere funtzio neat mota da ezberdina ezartzeko izan dut. Honi buruz, Zer, zein Mota besterik ez cool izan nahi du, let me benetan get rid distrakzio asko funtzio hori delako benetan oso erraza da. Dezagun whittle behera, besterik gabe, bere lau core lerroak eta kendu guztia iruzkinak eta kizkur giltza. Hau kontuan-Herrigintza baten antzeko zerbait da ezartzeko alternatiba. Ondo da, agian, ez da kontuan-Herrigintza, baina sexier, eskubidea mota da, beraz, askoz gehiago succinctly to honi begira. Kode lerro lau batera, Lehenengoa daukat behatu kontrol hau. M baino txikiagoa edo berdina bada zero, sigma ez du zentzurik. Honez soilik izango da ustezko Kasu honetan zenbaki positiboak egiteko, beraz, besterik ez dut joan itzultzeko zero arbitrarioki gutxienik behar dugu, beraz, Zenbait deiturikoak base kasuan. Baina hemen edertasuna. Ideia hau oso-osorik, gehituz 1etik n zenbakiak, edo kasu honetan, m, egon Buck igarotzean mota egin daiteke. Beno, zer 1 batuketa m da? Beno, zer ezagutzen duzu? It m batuketa berdina da plus 1 batuketa m minus 1era. Beno zer ezagutzen duzu? Zer da m ken 1 sigma? Beno, zuk motatako jarraitu bada hau logikoki, m ken 1 berdina da plus m minus 2ko sigma. Beraz, mota horretako just ahal duzun hau bezalakoa da, zaren besterik ez bada Lagun bat amorrarazten eta zuk galdera bat egin dute, motatako galdera bat erantzuteko, mota egin ahal mantendu dezakezu Buck igarotzean. Baina zer da gakoa dela mantentzen baduzu galdera eta txikiago egiten eta txikiagoa, zaren Ez zer da sigma galdetuz n, zer da sigma n, zer da n sigma? Zer galdetzen ari zara n sigma, zer da sigma n ken 1, zer da n ken 2 sigma? Azkenean zure galdera zer bihurtu da? Zer da bat edo sigma zero, balio oso txiki batzuk, eta gisa laster duzun bezala duten, zure laguna lortzeko, ez zaren galdetu joan galdera bera berriz ere, Zu besterik esateko, joan oi da zero. Bukatutakoan moduko honetan jolasten ari gara ergelak Joko ziklikoa. Beraz errekurtsio programazioan ekintza da Funtzio bat bera deituz. Programa hau, noiz bildu eta korrika egin, da zehazki modu berean portatzen da joan, baina zer da gakoa da barruan duten sigma izeneko funtzio bat, Han kodea dua-lerro bat da geure buruari deitzen ari gara, horrek normalean txarra izan. Esate baterako, zer bada dut lehenengo konpilatu hau, beraz, sigma-- sigma 1 ./sigma-1 egin. Zenbaki oso, mesedez, 50 1275. Beraz, zer funtzioaren badirudi izan, oinarritutako proba bat, zuzena. Baina zer gertatzen da pixka bat, arriskutsua izan banu eta oinarri-kasu deiturikoak ezabatu, eta besterik gabe, esan, ondo besterik ez dut egiten ari hau zailagoa da baino. Let kalkulatzeko, besterik gabe sigma m hartuz eta ondoren, gehituz m minus baten sigma batean? Beno, zer gertatuko da? Dezagun zooma. Dezagun konpilatu programa, gorde, programa konpilatu, eta, ondoren, prest ./sigma-1 zooma handitzea, idatzi zenbaki mesedez, 50. Nola asko daude prest sortu Fess hori ikustea? Ados. Beraz, hau ezin gerta arrazoi zenbaki bat, eta Egia aste honetan gaude emateko horietako gehiago buruz. Baina kasu honetan, saiatu atzeraka arrazoia zer gertatuko zatekeen hemen? Segmentaziuo hutsegitea, azken esan genuen denbora, memoria segmentu bat aipatzen. Zerbait txarra gertatu. Baina, zer izan zen mekanikoki duten awry joan hemen ere, nire kentzea oinarri duten kasuan deiturikoak, non balio zatekeen bat itzuli dut? Zer uste duzu oker joan? Bai. IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 Ah. Ona galdera. Beraz kopurua tamainaren eta neu summing zen hain handia da gainditu duten lortu memoria espazioa tamaina. Ideia ona da, baina ez funtsean hutsegite bat eragin behar. Hori zenbaki oso gainezkatze eragin dezake, bit besterik ez irauli baino gehiago eta, ondoren, benetan big akatsa dugu Zenbaki negatibo baten antzera zenbakia, baina horrek ez du berez hutsegite bat eragin. The amaieran delako Egun int 32 bits da oraindik. Oraindik ez duzu joan ustekabean 33 bit bat lapurtzen. Baina pentsamendu onak. Bai. IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 metodoa inoiz exekutatzen etengo dira, eta hain zuzen ere, bera deitzen da berriro eta, eta behin eta berriro eta, berriro ere, eta bakar bat ere ez inoiz funtzio horiek beren ildo bakartzat delako amaitzeko kodea, behin eta berriro deitzen themself eta berriro. Eta zer da benetan hemen gertatzen ari dena, eta, gaur egun dugun motatako marraztu daiteke hau pictorially. Let baino gehiago joan me bati une bat besterik ez irudi. Hau irudi bat da, hau azkenean haragia egingo xehetasun gehiago, zer ari den gertatzen zure ordenagailuaren memorian barruan. Eta bihurtzen da hori Argazki hau beheko pila izeneko zerbait da. Hau zatia da memoria, RAM zatia, hori besterik erabiltzen noiznahi funtzio bat deitzen da. Edonoiz zuk, programatzaile, funtzio bat deitu, sistema eragilea, atsegin Mac OS, Windows edo Linux, ase byte-sorta bat, agian, kilobyte gutxi, megabyte, agian batzuk memoriaren, eskuak duzu, eta gero aukera ematen dizu erabiliz, zure funtzioa exekutatzen baduzu edozein dela aldagai behar duzu. Eta zuk orduan deitzen badu beste funtzioa eta funtzio bat, memoria beste xerra lortuko duzu eta memoria xerra beste. Eta, hain zuzen, erretiluak berde horiek gero Annenberg memoria duela adierazten, hemen zer gertatzen den lehenengoa denboraren funtzio sigma deitu. Da bandeja bat jarriz hau atsegin bezalakoa da zer da hasiera batean, pila bat hutsik. Baina gero bada bandeja duten deiak bera, nolabait esateko, instantzia bat deituz sigma-ko, hori da sistema eragilearen eskatuz bezala, ooh, behar apur bat gehiago, memoria, ematen dit hori. Eta gero lortzen jarririk gainean gainean. Baina zer da gakoa hemen da, Lehenengo bandeja hantxe jarraitzen du, bigarren erretilu hau Deitua duelako. Orain berriz, sigma deitu sigma, duten memoria gehiago eskatuz bezala. Lortzen jarririk hona. sigma deitu sigma, hori beste lortzen jarririk hemen erretiluan. Eta hori egiten jarraitzen baduzu, azkenean, mapa mota entzunezko honetan taula horretan, zer ari den gertatzen erretiluak pila gertatuko da? Da zenbatekoa gainditzen joan oroimenaren zure ordenagailua dauka. Eta ahalik eta azkarren bandeja berde hau bezalako lerro horizontal gainditzen pila batez eta hitza arazoak izaten ari dela, batez ere, bertan itzuli dugu etorkizunean ere, hori gauza txarra da. Zeure desberdina da memoria segmentu, eta horiek utzi baduzu erretiluak pila eta pila gainean, to gainditzen ari zaren joan Zure memoria segmentu egin, eta programa bat da, hain zuzen ere huts egingo. Orain bat alde batera utzita, ideia hau bezala errekurtsio, beraz, Duda arazoak ekarriko du, baina ez da nahitaez txarra. Delako kontuan, ondoren guztiak, nola eta, agian, hau hartzen du zenbait ohitu erabiltzen to Nola sortu zen dotore edo nola simple sigma ezartzeko zela. Eta ez gaude erabili joan errekurtsio guztiak CS50 askoz, baina CS51 da, eta benetan, edozein klase non datu-egitura manipulatzeko duzu zuhaitzak, edo familia zuhaitz bezala, duten hierarkia batzuk izan, super, super erabilgarria da. Orain, bat alde batera utzita, duzun bezala, beraz, informatikariak aspirante gisa daude Google-ren batzuk ezagutzen txiste barruan, bazoaz Google arte eta gora begiratzen duzu zer da ren, definizioa esan, errekurtsio, sartu. Uh-huh. Bat alde batera utzita, gutxi gora bota dut. Honek 10 minutu bezalakoa zen procrastination goizean. Halaber Google "askew," baduzu oharra Zure burua okertu slightly-- eta gero, hau da, beharbada, denetan atrocious Norbait atsegin igaro zenetik bere egun hau gauzatzeko urte batzuk ago-- goazen. Oh, wait-- bug bat da. Beraz, bat exekutatzen munduko webgune handiena ergelak gutxi Pazko arrautza hauek dira. Ziurrenik kontsumitzen dute bat nontrivial kode lerro kopurua besterik ez da izan dezakegu beraz little fun horrelako gauzak. Baina, gutxienez, orain lortu duzun barruan txiste horietako batzuk. Orain dezagun begirada bat batzuk zuri gezurrak izan dugu berandu kontatzea Nik, eta hasteko atzera zuritu geruza batzuk teknikoki benetan ulertzen duzu, beraz, zer gertatzen da eta ulertu ahal izango duzu mehatxuak batzuk, Shellshock bezala, jada hasi bihurtu Guztion abangoardian arreta, behintzat komunikabideetan. Beraz, hemen funtzioa oso erraza da dagoela ezer hutsune itzultzen,. Bere izena swap da. Hartzen du bi aldagai ditu eta ez da ezer itzultzen du. A eta b tartekatzen dira. Beraz manifestazio azkar bat. Horiek ekarri dugu sortu. Dugu agian baita hartu apur bat apurtu hemen une bat besterik ez eta edateko zerbait apur bat. Norbaitek axola ez balu batu me up hemen une bat besterik ez da. Nola buruz egin marroia kamiseta? Goazen sortu. Gaur Just bat. Eskerrik asko, baina. Guztiak eskubidea, eta dugu datozen hemen nor? Zein da zure izena? HIZLARIA 4: Laura. HIZLARIA: 1 Laura. Goazen sortu. Beraz, Laura, gaur erronka oso erraza. Nice yo asetzeko. Guztiak eskubidea. Beraz, esnea batzuk ditugu hemen baino gehiago eta laranja-zukua batzuk hemen baino gehiago behar dugu eta edalontziak batzuk garela Annenberg maileguan gaur. HIZLARIA: 4 Besteren. HIZLARIA: 1 Eta aurrera joan eta honek baso erdi bat emango dizu. Guztiak eskubidea. Eta erdi ematen dizugu esne edalontzi bat. Oh, eta, besterik gabe, ahal izango duzu, beraz gogoratu zer hau bezalakoa zen, Ekarri gogoratu dut hau sortu eta gaur egun on. Ongi da. Litzateke ez baduzu axola, ikus dezagun, ditugun jar ditzakezu zure betaurrekoak egin baino gehiago Nahi izanez gero. Hau Laura begiak mundua izango. Guztiak eskubidea. Beraz, zure helburua, emandako bi katilu likido hemen, esnea eta laranja zukua, da trukatu bi edukietan, beraz, laranja zukua esnea Kopako doa eta esnea sartzen da laranja zukua kopa. HIZLARIA 4: Egin kopa beste lortu dut? HIZLARIA: 1 Beraz, pozik nago zuk eskatu, nahiz eta izan litzateke metrajea askoz hobeto izan ez bada galdetu. Baina bai, eskaintzen dizugu herena kopa duten hutsa da, noski. Guztiak eskubidea. Beraz, swap edukiak han. Oso polita. Oso ona. Hau nabarmen arretaz egiten ari zara. Eta hiru zapaldu. Guztiak eskubidea. Bikain. Txalo bero bat Laura ona izango litzateke. Guztiak eskubidea. Little parting opari bat daukagu zuretzat, baina utzi hartu me horiek. Eskerrik asko. Beraz, adibide erraz bat, nahiz eta, Hori egin ezkero erakusteko edukiak trukatu nahi bi edukiontziak, edo dezagun aldagai deitu, Aldi baterako biltegiratze batzuk behar duzu edukiekin bat eszenaratzeko beraz in Benetan egin ahal izango duzu duten swap. Beraz, hain zuzen ere, honen iturburu-kodea hemen C zehazki duen ordezkaria da. Laranja zukua eta esnea zen bada zen b, eta bi aldaketa bat izan dugu, zerbait sormen saiatu izan duzu elkarren artean botatzen, baina hori ziurrenik ez litzateke azkenean bereziki ondo. Eta, beraz, hirugarren kopa, dei bat erabiltzen dugu gordetzean da, T-M-P konbentzio, eta edukiak jarri AO horretan, ondoren trukatzeko kopa bat, orduan jarri AO du sartu irabazleari, horrela , lortzea bezalaxe Laura egin, swap. Beraz, egin zehazki hori utzi. Dezagun aurrera eta ireki Adibide hori sortu benetan izeneko "no trukatu, "hau ez delako gisa besterik egin pentsatzea. Beraz, programa honetan, nabarituko Stdio.h, gure lagun zaharra erabiltzen ari naiz. Prototipoa behar dut swap egiteko han, eta horrek bere ezarpena horrek esan nahi du ziurrenik behera beheko, eta ikus dezagun zer honek nagusia programa da niretzat egingo. Lehenengo deklaratzen dut int x lortzen bata, eta int y lortzen bi. Beraz AO gisa horiek uste eta esnea, hurrenez hurren. Eta gero, besterik ez dut bat printf x da hau esanez eta y da hau, besterik gabe, beraz, ezin dut begiz ikusi zer gertatzen den. Ondoren printf dut erreklamatzeko aldaketa naiz bi dela, eta, ondoren, inprimatu dut bat diotenez, trukatu ari, eta I out x eta y berriz ere inprima. Beraz, hemen behera swap da zehazki Laura zer egin, eta zehazki zer ikusi dugu pantailan une bat duela. Beraz, dezagun aurrera eta sorely etsita. Egin swap ez, eta exekutatu swap ez, zoom irteera hemen. Idatzi x 1, y 2 da, aldaketa trukatu. x dago oraindik 1 eta y oraindik 2. Beraz, nahiz eta, Egia, hau itxura zehazki gustatzen, teknikoki arren, Laura zer egin, ez dirudi lan egiteko. Beraz, zergatik da hori? Beno, bihurtzen da orduan; Horrelako programa bat idatzi dugu dela bai nagusia, hemen nabarmendu, eta, ondoren, funtzio bat, swap bezala, hemen nabarmendu egiten dira, deitzen da, munduko antzeko zerbait apur bat itxura erretiluak horiek duela une bat. Nagusiak Aurreneko lortzen izeneko, duten sistema eragilearen eskatuz bezala memoria pixka bat tokiko edozein egiteko x eta duela nagusia y bezalako aldagaiak, eta amaituko dute bertan. Baina nagusia deiak trukatu bada, eta nagusiak igarotzen da bi argumentu, a eta b trukatu, laranja zukua eta esnea, ez da izan bezala laranja zukua eta esnea ematea Laura da. Zer ordenagailu bat du, da laranja zukua kopiak pasatzen eta Laura esne kopiak, beraz, zer da, azken finean, bandeja honen barruan baliorik bat eta bi, edo AO da eta esnea, baina kopiak ere, beraz, puntu honetan Ipuinean, han AO eta esnea erretiluak horietako bakoitzean dagoen. Badira bat eta bi bat erretiluak horietako bakoitzean, eta swap funtzioa da, hain zuzen ere lan egiten du. Honez horien barruan aldaketa bandeja bigarren goreneko du, baina aldaketa duten eragina ez du. Eta oinarritutako besterik batzuk oinarrizko printzipioa dugu aurretik buruz hitz egin zuen, eta halaxe Duela minutu batzuk, zer zergatik aldatzen azaldu dezake a eta b swap barruan du x eta y ez du eraginik, nahiz eta X eta y gainditu dut swap funtzioa. Zer da gako-hitza hemen Simplistically azaldu dezake? Uste dut entzun nuen hemen? IKUSLEEN: Return. HIZLARIA: 1 Return? Ez itzultzeko. Goazen bata bestearekin. Zer da hori? IKUSLEEN: [INAUDIBLE]. HIZLARIA: 1 OK, ezin izan dugu itzulkinaren beraz bueltan lan egin istorio batean, baina ez dago azalpen askoz sinpleagoa da. IKUSLEEN: Eremua. HIZLARIA: 1 Eremua. Esparrua hartuko dut. Beraz, esparrua, gogoratu non Gure x eta y deklaratu. Barruan deklaratu ari dira nagusiaren eskubidea sortu hemen. a eta b, bestalde, ez dira eraginkortasunez deklaratu swap barruan, ez da nahiko in kizkur giltza, baina oraindik swap arloan orokorrean ere. Eta hain zuzen ere, a eta b bakarrik bandeja honen barruan existitzen Annenberg aurrera, hau kodea bigarren zatia. Beraz, hain zuzen ere kopia aldatuz, baina ez da hori benetan hori guztia lagungarria. Beraz, dezagun begirada bat apur bat txikiagoa da maila honetan. Atzera joan sartu noa Iturburu direktorioa, eta noa lehenengo hemen gerturatzeko, eta, besterik gabe, naiz ez dut horretan berresteko handiagoa terminal leihoa, Programaren oraindik duten bezala Portaera. Demagun orain hori Ez da nahita. Bistan swap nahi dut lana, beraz, akatsen bat bezala sentitzen da. Orain bat gehituz hasteko izan nuen printf nire kodeari en asko, inprimatzeko x hona, y gorako hemen, bat baino gehiago hemen, hemen baino gehiago b. Baina, Egia, ziurrenik zer egin duzun aste pare bat orain, bulego orduetan eta etxean lan egiten denean psets zenbait akats aurkitu nahian. Baina ikusiko duzu, ez baduzu dagoeneko, arazo hori ezar hiru aurkezten GDB izeneko komando batera, non GDB, GNU araztaileak, sorta oso bat du bere baitan eginbideak benetan utzi egoerak ulertzeko Hau atsegin, baina gehiago egunkariak, arazoak konpontzeko eta bugs aurkitu. Beraz, ez dut hori egin behar. ./noswap Ordez, beharrean nago GDB ./noswap exekutatu. Bestela esanda, naiz korrika joan nintzen nire programa ez Bash ere, gure lagun berria gaur. Exekutatu noa nire programa noswap barruan izeneko beste programa honen GDB, araztaile bat da, eta horrek hori laguntzeko diseinatutako programa bat da gizakiak aurkituko duzu eta bugs kendu. Beraz hit I Run hemen bada, ez da testu kopuru atrocious bat Benetan inoiz ez dute irakurtzen. Funtsean distrazio bat gonbitan, eta horrek Kontrol-L sakatu noa jaiki goialdean dago. Hau GDB gonbitean da. Programa hau exekutatu orain nahi badut, little Cheat gaurko buruzko fitxa hau bezalako diapositiba iradokitzen, Run da lehena komandoak aurkeztu nahi genuela. Eta besterik ez dut idazten joan exekutatu sortu hemen GDB barruan, eta hain zuzen ere, nire programa ran. Gaur egun, gehigarri batzuk Hau atsegin pantailaren irteerak, baina hori da GDB anal besterik ez izatea eta gurekin kontatzea zer gertatzen den. Ez benetan ez duzu kezkatu datu horiek oraintxe buruz. Baina zer da benetan cool GDB, ez dut hau berriro Kontrol-L garbitu pantaila let me joan Animatu eta idatzi "apurtu nagusia," horrela, Sartu hit I, ezarriz zer da break noswap.c at puntu bat deitu, 16 linea, hau da, non GDB hurrena nire programa benetan da, nire funtzioa benetan da. Honek alde batetara utzi dugu oraingoz baina hori helbidea da zehazki, funtzio honen memorian. Beraz, orain idazten exekutatu I, nabarituko zer cool hemen. Nire programa linea dut at hausten GDB esan exekuzioa eteteko at. Beraz, ez daukat nire kodeari orain aldatu, gehitu printf batzuk, konpilatu da, berrabiarazi da, aldatu, printf batzuk gehitu, gorde, konpilatu da, exekutatu. Nire programaren bidez besterik ez dut oinez dezakezu pausoz pausoz pauso giza abiaduran, Ez abiadura moduko Intel-barrutik at. Beraz, orain lerro hau nabarituko agertzen da hemen, eta atzera egin badut gedit nire programa, nabarituko dela benetan kodea oso lehen lerroan. Badira 16 linea da gedit. Ez da GDB barruan linea 16, eta are interface zuri-beltzeko honetan nahiz ez da ia erabiltzaile gisa errespetatzen, horrek esan nahi du 16 linea ez dela exekutatu oraindik, baina nahi izan dugu gaurkoa. Beraz, hain zuzen ere inprimatu idazten I x, ez printf, inprimatu besterik ez x, Akastunak balio batzuk lortu nuen han zero, x ez da hasieratu oraindik delako. Beraz, ez dut aurrera idazten joatea, edo, nahi baduzue fancy, besterik hurrengo n nahi. Baina idatzi dut hurrengo sartu, orain nabarituko mugitzen line 17 da. Beraz, logikoki, I exekutatu bada 16 lerro eta orain idazten dut inprimatu x, zer ikusi behar dut? One. Eta orain, hau da admittedly nahasia. $ 2 fancy modu bat besterik ez da, nahi baduzue geroago arte balio duten erreferentzia nahi, esan dezakezu "dolarrak bi sinatzeko." Itzuli da erreferentzia bat bezalakoa da. Baina, oraingoz, besterik ez ikusi egingo dio. Zer da interesgarria da, zer da berdin ikurra eskuinaldean. Eta orain, hurrengo berriro idazten I eta inprimatu y, 2 ikusi beharko dut. Era berean, ezin dut orain inprimatu x berriro, eta Egia, I nahi bezala apur bat nahastu dut lortzean bada non nagoen, zerrenda zerrenda idatzi dut eta besterik ez testuinguru batzuk ikusten inguruan puntuan nago at benetan. Eta orain idatzi dut hurrengo, eta ez x 1 da. Orain aurrera idazten dut. Oh, y 2 da. Eta berriro ere, nahasgarria da, GDB irteera delako hau da nire irteera propioa commingled ari. Baina kontuan hartu duzu bada, by atzera eta aurrera zure kodea glancing edo bigarren mailako erruleen ezazu albo agian ek, duzu Ikusten benetan besterik ez naiz nire programaren bidez hurrats. Baina konturatu zer gertatzen den hurrengo, literalki. Hona hemen line 22 da. Let me go haren gainean, eta, horrela, mugitzen 23ra, eta inprima I x da gaur egun, oraindik ere bada. Eta y inprimatu badut orain, oraindik inork. Beraz, hau ez da ariketa erabilgarria. Hargatik berregin hau. Let me back igo izateko Gora eta mota run berriro. Eta programa esaten da duten arazten ari ditu dagoeneko hasi, hasieratik hasi. Bai, Berriro egin dezagun. Eta une honetan, egin hurrengo utzi, hurrengo, hurrengo, hurrengo, hurrengo, baina orain gauzak interesgarri. Orain arte urratsa egin nahi dut swap, beraz, ez dut idazten hurrengo. Urratsa idatzi dut, eta orain konturatu da du salto me noswap.c line 33 arte. Atzera egin dut gedit ez badu, zer da lerro 33? Hori da lehenengo benetako Kode-lerro swap barruan. Hau da, polita, orain ahal dudalako motatako Poke inguruan eta bitxi gisa zer ari den benetan gertatzen ari badira ere. Dezagun inprimatu me tmp. Tira. Zergatik ez dute tmp batzuk ero, akastunak zabor balioa? IKUSLEEN: Ez da hasieratu. HIZLARIA: 1 Ez da hasieratu egin dira. Eta hain zuzen ere, programa bat exekutatzen baduzu, memoria sorta osoa eman zu sistema eragilearen arabera, baina zuk ez dute inolako balioak hasieratu, beraz, edozein bit Oraindik Hemen ikusten da, nahiz eta crazy negatibo handi honetan zenbakia, besterik gabe esan nahi du horiek aurrera aztarnak dira aurreko RAM duten erabilera batzuk, Ez daukat nahiz hala ere, behar neure burua. Beraz, orain aurrera eta mota joan hurrengo, eta orain idazten dut inprimatu tmp bada, zer ikusi behar dut? Whatever baten balioa izan zen, baten lehen argumentua da, besterik gabe, x bezalakoa izan zen lehena Gauza ari gainditu zuen, beraz, eta a x bera izan beharko luke, beraz, inprimatu tmp me inprimatu behar. Beraz, zer arazo multzo ikusiko dituzu Hiru GDB buruzko era askotako tutorial bat da, baina konturatzen hori ez da hasieratik tresna bat begirada bat izango dela benetan lagundu arazoak konpontzeko beraz, askoz gehiago eraginkortasunez. Zer azken batean gaude asteazkenean egingo itzuli zuritu geruzak batzuk hasiko da eta prestakuntza-gurpil batzuk kendu. Gauza izeneko kate hori denbora pixka bat dugu erabiltzen, poliki-poliki hartu duten urruntzen goaz duzu eta hasi buruz hitz zerbait gehiago Esoterikoki char * gisa ezagutzen, baina ari gara polit hau egin nahi dugu eta lehenik poliki-poliki, nahiz eta erakusleak nahiz eta, deitzen ari dira, batzuk egin ahal oso gauza txarrak neurriz bada, tik claymation pixka bat begira gure lagun Nick Parlante Stanford Unibertsitatea, informatika irakaslea zientzia nor Aurreikuspen honen bildu zer da asteazken honetan, etorri da. [Bideo-erreprodukzioa] -Aizu, Binky. Wake up. Erakuslea fun denbora da. -Zer da hori? Erakusleak buruz ikasi? Oh, GOODY! [END bideo-erreprodukzioa] HIZLARIA: 1 That zain dago asteazkenean. Gero ikusiko dugu. [Bideo-erreprodukzioa] -Eta Orain, Deep pentsamenduak, Daven Farnham arabera. Zergatik dira C ikasteko dugu? Zergatik ez + A? [Barreak] [END bideo-erreprodukzioa]