[Jwe mizik] Oratè 1: Tout dwa, sa a se CS50, ak sa a se kòmansman an nan semèn kat, ak jan ou ka tande deja oswa li, mond lan te fini. Ale tout alantou entènèt la Èske yo te konesans ak konsyantizasyon nan yon ensèk nan yon pwogram, yon lang programmation rele bach. Sa ki te bèl marque kòm Shellshock, oswa pòt la bach, men atik tankou sa yo pa te estraòdinè. Ak nan reyalite, anpil nan yo pote memwa tounen nan Heartbleed, ki ou ka remake gen nan la peze tounen sa a sezon prentan sot pase yo, ki te Menm jan an tou san patipri dramatik. Koulye a, nan moun nan nou isit la jodi a, ki jan anpil nan ou gen, menm si ou pa konprann sa li tout sou, tande pale de Shellshock? Tout dwa, ak ki jan anpil nan nou gen òdinatè ki vilnerab? OK, ta dwe gen lwen, byen lwen plis men moute kounye a, pou rezon nou pral wè. Se pou nou pran yon gade nan sa ki nan te ale sou nan medya yo ak Lè sa a eksplike li yon ti jan isit la pou nou teknikman. Oratè 2: ekspè sekirite yo gen te avèti ke yon defo ki grav te kapab dwe sou yo afekte dè santèn de dè milyon de itilizatè entènèt nan mond lan. Se konsa, ki sa egzakteman se pinèz la ki te gen ame Shellshock, epi ki sa li fè? Oke, Shellshock se tou konnen kòm nan Ensèk bach, lojisyèl an li eksplwate. Entru itilize viris la bay analysis vilnerab sistèm kouri Linux ak UNIX sistèm operasyon ak Lè sa a enfekte yo. Bach se yon koki liy lòd. Sa a pèmèt itilizatè pwoblèm kòmande yo lanse pwogram ak karakteristik ki nan lojisyèl lè ou tape nan yon tèks. Li nan tipikman itilize pa pwogramasyon, ak pa ta dwe louvri nan mond lan pi laj, menm si Shellshock chanje sa. Oke, worringly, gen kèk analis avèti li te kapab fè yon menas pi gwo, paske Shellshock pèmèt konplè kontwòl nan yon machin ki enfekte, Lè nou konsidere ke Heartbleed sèlman pèmèt entru al rekonèt sou òdinatè. Li nan tèlman grav, li nan te rated yon soti nan 10 10 pou gravite pa National la Vilnerabilite baz done. 2/3 nan tout serveurs entènèt yo nan risk, ki gen ladan kèk òdinatè Mac. Oke, asire w ke ou plak sistèm ou an kounye a. Nenpòt moun ki òganize yon kouri sou sit wèb sistèm yo opere afekte ta dwe pran aksyon le pli vit ke posib. Nenpòt ki moun ki kapab peye li ta dwe gade nan aplikasyon siveyans ak wèb yo firewall yo gade deyò pou nenpòt ki atak. Oratè 3: Pi move bagay ki ta ka rive se ke yon moun ta ekri kòd ki ta otomatikman ale ak ekografi entènèt la ak ta ka afekte tout nan òdinatè sa yo. E yon fwa yo fè sa, byen, bagay ki pi mal yo te ka fè se jis efase tout bagay, oswa fèmen sit sa yo desann. Se konsa, nou te kapab wè domaj soti nan pwen sa a de vi, kote nou ta gen moun ki move ki moun ki jis deside lakòz tap fè ravaj pa pote sistèm desann oswa efase dosye, ak bagay sa yo tankou sa. Oratè 2: Gen moun ki di sa a se youn nan ki pi difisil nan ki mezire pinèz nan ane, e li ka pran semèn oubyen menm mwa detèmine enpak ultim li yo. Oratè 1: Se konsa, nan tout sa se vre, men bagay la komik se, prèske tout nan simagri a ou jis te wè, eksepte pou petèt klavye a, pa gen anyen fè ak pinèz la tou. Servers ak fil kouran ak pou fè, li nan sòt de nòmalman ki gen rapò, men nan nwayo a li a aktyèlman trè abitye sa k ap pase isit la. An reyalite, kite m 'ale nan aparèy CS50 nou an. Kite m 'ale pi devan epi maksimize fenèt la tèminal isit la. Epi ou mesye yo te lè l sèvi avèk sa a, oswa embedded a vèsyon ladan l ', nan jdi yo nan lòd yo ekri pwogram, tape kòmandman, ak pou fè, ak sa a se aktyèlman, epi ki gen te pou semèn, bach, B-A-S-H. Sa a se Bourne a-ankò koki, ki se jis yon fason anpenpan nan di, sa a se yon pwogram ki gen yon kliyote rapid, efektivman, ki chita ap tann pou D 'pou ou. Lè li nan yo lòd, ki liy koòdone via ki ou nèg yo te kouri kòmandman ak finalman konpile ak Lè sa a kouri pwogram yo. Men, bach se tou yon pwogram lang nan sans sa a. Ou konnen ke gen kòmandman tankou CD ak ls epi tou sonnen ak lòt moun, men ou ka defini kòmandman pwòp ou a pa mete ann aplikasyon yo nan bach. Koulye a, nou pa ap ale nan ale nan gwo detay kòm Bash lang nan pwogram, men konnen, pou egzanp, ki nan moman sa a, gen nan pa gen lòd ki rele "hello." Se konsa, li ka jwenn nan youn nan sa yo pakè. Li pa nan enstale sou òdinatè mwen an. Mande administratè ou. Men, si mwen vle gen yo dwe yon pwogram rele "hello" nan bach oswa nan èd memwa mwen, Mwen ka aktyèlman sèvi ak sentaks sa a, se byen tankou C. Li pa byen menm bagay la, men li sanble trè menm jan ak yon fonksyon, kwake manke kèk detay. Pa gen anyen sanble rive, men kounye a si mwen tape "hello," ou ka aktyèlman ekri yon pwogram nan, pa nan C, pa nan Java, pa nan yon lòt pwogram lang, men nan bach tèt li. Koulye a, kle a isit la se ke mwen te ekri a non mwen te vle bay lòd sa a nouvo, ak parantèz yo yo tou senbolik nan sa a ke yo te yon fonksyon. Kòm yon sou kote, ou ka tou fè plezi bagay sa yo, ak an reyalite, menm sou Mac OS, sa a se yon pwogram ki rele Tèminal. Li vini bati nan nenpòt moun ki an òdinatè ki gen yon Mac nan sal sa a, epi ou ka fè bagay sa yo menm jan an nan Mac Eksplwatasyon, men ou ka ale pi plis pi lwen pase sa. Lè sa a se yon ti kras tanjansyèl, men li la kalite plezi. Sa te raple sa a maten, lè panse sa a nan, nan yon jwèt ti kras mwen itilize yo jwe ak youn nan TFs ansyen CS50 nan ak lese pase 'nenpòt ki lè li t ap mache lwen klavye li yo ak ekran l 'klete, Mwen ta egzekite yon lòd tankou this-- "di alo." Epi, koulye a nenpòt ki lè li te tounen vin jwenn l ' klavye apre mwen otorize ekran an epi li ta chita, eseye fè kèk travay, lis sa ki nan anyè l ' [AUDIO lèktur] -Hello. Hello. Oratè 1: Se konsa, nan etidye ekite Règleman, li pa t 'aktyèlman "hello." Li te anjeneral yon bagay plis analogue nan that-- [AUDIO lèktur] -Beep. Oratè 1: --that mwen would-- se konsa òdinatè l 'ta fè sèman nan l 'nenpòt ki lè li aktyèlman chita bò tab la nan klavye l 'yo. Ak trè byen vit li te kalkile konnen pa kite ekran l 'kle. Men, sa a sijere sòt nan nan plezi estipid ke ou ka gen ak yon bagay tankou bach. Men, li la yon ti kras plis grav, yo dwe asire, pase sa. Ak nan reyalite, sa a se youn nan la pi pinèz danjere e ki dire lontan ki te reyèlman frape mond lan globalman. Te ensèk sa a te alantou pou kèk 20 ane, epi ou pral frape nan jis yon moman sa pa senplisite relatif li yo. Se konsa, sa a se yon reprezantan lòd ke si ou posede yon Mac, literalman kounye a lè ou gen kouvèti ou louvri, ou ka eseye sezisman nan ki pwogram yo rele Tèminal. Tèminal se anba Aplikasyon Utilities-- pou yon fwa, Windows itilizatè pa oblije enkyete sou threat-- sa a an patikilye men moun nan nou ak Macs ka tape sa a nan yon fenèt tankou mwen pral fè isit la, epi si ou tape ki nan pwogram sa a rele Tèminal, tankou mwen pral fè kounye a, si ou wè pawòl Bondye a "vilnerab," òdinatè w lan se vilnerab a eksplwatasyon. Kounye a ki sa ki aktyèlman vle di? Lè sa a se Byensir kèk sentaks trè fou, men kite a omwen trase soti kèk nan aspè yo ki enteresan. Se konsa, gen nan kèk sentaks ki sanble yon ti kras yo konnen yo, omwen soti nan C ak pwogramasyon plis jeneralman. Mwen wè kèk parantèz, virgules, aparèy òtopedik Curly, ak sa yo, men li vire soti ke sa a estipid bagay isit la nan jòn se esansyèlman se yon fonksyon ki fè pa gen anyen. Kolon vle di la pa fè anyen, ak nan virgules vle di sispann fè pa gen anyen. Se konsa, andedan nan sa yo aparèy òtopedik Curly, reyalite a ke mwen gen yon egal siyen a gòch, sa a nan se esansyèlman kreye yon lòd, oswa yon varyab, rele x, ak plase li ki ti jan jòn nan Kòd la. Yo ki te kapab yon bagay tankou "eko alo "oswa" di BEEP "oswa yon bagay analogue nan sa. Men, remake si je ou moute desann plis a dwat la, gen an plis nan liy sa a pase jis nan fen ki virgules. "Echo vilnerab," ak Lè sa a, pi lwen pase sa a, gen nan menm plis. Yon lòt virgules, frape -c :. Se konsa, istwa long kout, liy sa a nan kòd se ase pou irezistib yon òdinatè sa a, se vilnerab a fè yon bagay ke ou vle li fè, paske gen nan yon ensèk nan bach ak lese pase ' menm si bach te sipoze sispann lekti liy nan dwat lòd gen apre tèks la jòn, pou yon 20-plis ane fin vye granmoun ensèk, Bach gen aktyèlman te lekti pi lwen pase sa virgules ak bèl anpil ap fè sa li se te di. Se konsa, sa ki nan enplikasyon la nan ki finalman? Mwen jis di "eko alo" oswa "eko vilnerab," men ki sa si ou te fè yon bagay aktyèlman move, tankou RM -RF *, ki ou ka pa te janm tape anvan, ak franchman pwobableman ou pa ta dwe twò bonè, paske ou kapab fè yon anpil nan domaj ak li. Poukisa? RM fè sa, nan kou? Retire. * Vle di ki sa? Tout. Se konsa, li nan yon sa yo rele kat nan bwa, se konsa li vle di efase tout bagay nan anyè aktyèl la. -r k ap pase nan vle di repetitif, ki vle di si sa w ap efase se yon anyè, ak andedan nan gen se lòt dosye ak lòt repèrtwar, recursive plonje nan gen ak efase tout nan sa. Epi -f se pi move a nan yo tout. Nenpòt moun ki konnen ki sa -f vle di isit la? Fòs. Se konsa, fòse vle di, menm si sa a se yon lide move, fè li san yo pa sa ki pouse m ' pou plis konfimasyon. Se konsa, ou konnen, nou ri nan sa a, men franchman, mwen pwobableman tape sa a plizyè fwa yon jou, paske reyalite a se li nan fason ki pi rapid efase yon pakèt antye nan bagay. Men, menm bagay mwen te fè kèk domaj. Men, si ou te fè je chèch ak yon òdinatè nan defini kèk varyab estipid oswa fonksyon rele x, men Lè sa a, tricking òdinatè a nan pwomenad pi lwen pase limit yo nan ki fonksyon, pi lwen pase sa virgules, ou ta ka tout bon je chèch yon òdinatè nan egzekite yon bagay tankou RM -RF oswa lòd la Imèl oswa lòd la Kopi. Nenpòt bagay literalman ou kapab fè avèk nan òdinatè, si wi ou non li nan efase dosye, kreye dosye, abu yon moun, atake kèk sèvè distance, si ou ka eksprime li ak yon lòd, ou ka je chèch yon òdinatè nan fè sa. Koulye a, sa ki nan yon egzanp sou ki jan ou ta ka fè sa? Oke, gen nan yon anpil nan òdinatè sou bach la kouri entènèt. Tout moun nan nou Mac itilizatè yo nan mitan yo. Yon anpil nan Linux serveurs se yo ki pami yo kòm byen, ak UNIX serveurs. Windows ankò vin relativman nan zen an sof si ou te enstale lojisyèl espesyal. Koulye a, yon anpil nan serveurs, pou egzanp, kouri serveurs entènèt, ak nan reyalite Linux se petèt a pi sistèm opere popilè nan kouri sou òdinatè sou entènèt la ki ap sèvi moute paj wèb. Koulye a, kòm nou pral wè pita nan semès la, lè ou voye yon demann soti nan Chrome navigatè ou a, Internet Explorer, kèlkeswa sa nan yon sèvè aleka, li vire soti ke menm si ou jis tape www.example.com, navigatè ou a ap voye yon mesaj sa a, se yon ti kras plis Esoteric, tankou sa a. Men, remake yon yon bagay ti kras etranj. De premye liy ki Mwen pat janm wè anvan, men yo pa gade patikilyèman menase. Men, remake sa m 'te yo vòlè li pou liy nan twazyèm isit la. Si yon nèg move yo te voye yon mesaj tankou sa a nan òdinatè li oswa li nan yon Mac vilnerab oswa yon vilnerab Linux sèvè, bagay la komik se ke bach, sa ki senp èd memwa ti kras lòd, se omniprezant ak se souvan itilize esansyèlman egzekite sa ki nan yon mesaj ke li resevwa. Ak pa ki lojik, ou kapab je chèch ak yon sèvè sit entènèt, Se poutèt sa, pa voye yon bagay tankou Itilizatè-Agent, ki se nòmalman se ta sipoze di a non nan navigatè ou a. Itilizatè-Agent Chrome, Itilizatè-Agent Entènèt Explorer, Itilizatè-Agent Firefox, sa a se jis navigatè ou a fason pou idantifye tèt li. Men, si yon nèg move anpil malen di, mm-mm, mwen pa pral di ou sa ki navigatè mwen an se, Mwen olye pou ale nan voye ba ou sa a skre-kap bagay ak yon -RF RM * Nan li, ou ka literalman je chèch yon vilnerab sèvè wèb sou entènèt la nan egzekite egzakteman ke nan gen pou efase tout dosye yo. Ak franchman, sa a pa menm pi move a nan li. Ou ka fè anyen. Ou te kapab kòmanse yon distribiye refi nan atak sèvis si ou voye mesaj sa a bay grap antye nan serveurs entènèt ak Lè sa a te gen yo tout desann, pou egzanp, sou Harvard.edu serveurs, epi ou ka sòt nan bang èk an soti nan yo pa yon rezo trafik ki te otreman deklannche pa nèg sa a move. Se konsa, istwa long kout, prèske tout moun nan sal sa a ki moun ki posede yon Mac se vilnerab a sa a. Pawa an ajan an se ke sof si w ap kouri yon sèvè sit entènèt sou konpitè pòtatif ou, ak sof si ou te aktyèlman configuré li yo ki pèmèt yon bagay tankou SSH nan li, w ap aktyèlman ki an sekirite. Li nan vilnerab, men gen nan pa gen youn ap eseye jwenn nan konpitè pòtatif ou, konsa ou ka sòt de rès asire. Sepandan, Apple pral byento gen à yon ranje pou sa a. Gen mond lan nan Linux deja lage yon nimewo nan fikse pou Fedora ak Ubuntu ak lòt vèsyon an Linux, ak tout bon si ou kouri aktyalizasyon 50 nan aparèy la, menm ki twò yo pral mete ajou ak korije. Men, sa tou pa gen anyen reyèlman te vilnerab, paske sof si ou te tinkered ak aparèy la yo e te fè laptop ou piblikman aksesib sou entènèt la, ki se pa pa default, ou te aktyèlman te amann paske nan firewalling ak lòt teknik. Men, li la yon egzanp ekstrèm nan yon ensèk ke nou te viv pou pou literalman 20 ane, ak moun ki konnen si yon moun te tout tan sa a li te ye sou li? Ak nan reyalite, sa a se youn nan defi yo fondamantal ki nou pral wè pita nan la semès sou sekirite, se ke jis tankou nan mond reyèl la, mesye yo bon yo se nan dezavantaj la. Pou kenbe mesye yo move soti, nou gen yo asire w ke se chak pòt fèmen, ke chak fenèt se an sekirite, ki chak pwen nan antre nan yon kay se an sekirite kenbe mesye yo move deyò. Men, sa ki fè nèg la move gen fè yo aktyèlman konpwomi lakay ou ak vòlè nan men ou? Li oswa li te jis gen jwenn youn kle pòt, yon fenèt kase, oswa yon bagay ansanm liy sa yo, epi li nan menm bagay an sekirite òdinatè. Nou ka ekri dè milyon de liy nan kòd pwogramasyon ak depanse dè santèn oswa dè milye nan èdtan ap eseye jwenn li kòrèk, men si ou fè jis yon sèl erè nan Correct, ou ka mete sistèm nan tout antye ak tout bon nan ka sa a, tout antye entènèt la ak mond a risk. Se konsa, si ou ta renmen aprann plis sou sa a, ale nan URL sa a isit la. Gen nan pa gen bezwen pou aksyon aswè a sof si w ap nan mitan moun pi alèz ki yo te kouri sou sit wèb pwòp ou a sèvè, nan ka ou ta dwe ki, an reyalite, mete ajou lojisyèl ou. Lè sa a tou se tit la nan yon diskou, epi kounye a yon papye, ke nou te lye sou la sit entènèt kou a pou jodi an. Li te pa yon parèy yo te rele Ken Thompson, ki moun ki te aksepte yon pi popilè trè prim nan syans konpitè, ak li te bay diskou sa a kèk ane de sa, esansyèlman sou sijè sa a menm. Poze jan kesyon an, ou ta dwe reyèlman konfyans, finalman, nan lojisyèl ou ve yo te bay? Pou egzanp, nou tout gen te ekri pwogram yo, ak nou ve yo te konpile yo ak sonnen. Men, konesans ou, èske ou te ekri nenpòt pwogram pou CS50 kote gen nan yon pòt tounen nan kalite, gen nan yon fason ke yon nèg move, si kouri pwogram ou an, te kapab pran sou òdinatè w lan? Pwobableman pa, dwa? Mario, ak visye, ak Kredi. Sa yo se tout pwogram trè piti. Ou ta gen yo dwe trè move si ou aktyèlman geri òdinatè w lan vilnerab apre ekri 10 oswa 20 liy nan kòd, oswa omwen inyorans nan kèk nan enplikasyon yo sekirite. Koulye a, mwen di ke fasesyezman, men nou ap ale nan wè jodi a ak semèn sa a li la aktyèlman reyèlman, reyèlman fasil yo dwe move, epi fè menm pwogram kout vilnerab. Men, pou kounye a, omwen, reyalize ke yo te kesyon an mande isit la se sou sonnen nan yon du. Poukisa yo te nou te mete konfyans sonnen pou de ou twa semèn ki sot pase? Ki moun ki nan yo di ke moun ki va ekri sonnen pa t 'gen yon "si" kondisyon nan gen ki esansyèlman sou fòm piki kèk zewo ak moun yo nan tout pwogram li compiles ki ta kite l 'oswa aksè l' lè òdinatè w lan ou se dòmi ak kouvèti laptop ou se ouvè epi li se òdinatè w lan kouri? Dwa? Nou gen sa a sòt de dwa sistèm onè kounye a kote nou mete konfyans nou ki sonnen se legi. Ou fè konfyans ki aparèy la se legi. Ou fè konfyans ki literalman chak pwogram sou Mac ou a oswa PC se konfyans. Epi kòm ensèk sa a ki senp sijere, menm si li pa move, sa a, se absoliman pa chans yo dwe ka a. Se konsa, ou ta dwe pè kòm lanfè. Franchman, gen nan pa gen senp solisyon a sa a lòt pase yon sòt de konsyans sosyete nan konpleksite nan ogmante ke nou ap bati sou tèt nan sistèm konpitè nou an, ak ki jan de pli zan pli vilnerab nou ta ka trè byen se. Koulye a, ak ki te di, pti. Se konsa, pti se pwoblèm mete twa, ak Levasyon se yon jwèt soti nan pase ke ou ta ka sonje, men pou nou nan pwoblèm mete twa, li pèmèt nou pran bagay do moute yon Notch se konsa ke lè nou ap ekri pwogram yo, menm nan yon fenèt Tèminal tankou sa a, nou ka aktyèlman kouri, finalman, pwogram grafik pa kontrèman ak sa yo nou te gen aksè a nan grate. Se konsa, sa a se nan yo anplwaye aplikasyon nan levasyon, ki se jis sa a brik-kase jwèt, ke ou deplase pedal ou tounen , yo soti, epi ou frape boul la kont moun brik ki gen koulè pal moute tèt. Se konsa, sa an, ap mennen nou sòt de tounen nan kote nou te kapab yo dwe trè byen vit ak grafouyen, e kounye a, ak C, mete ann aplikasyon pwòp nou grafik itilizatè interfaces. Men, plis pase sa, sa a seri pwoblèm reprezante premye a nan ki nou ap bay ou yon pakèt moun sou kòd. Ak nan reyalite, mwen pote eksplisit atansyon a sa a, paske espesyalman pou moun mwens konfòtab, sa a pwoblèm mete, omwen nan premye gade, ki pral santi tankou nou te pran l 'kanpe yon Notch. Paske nou te ban nou, pou kèk nan rechèch la ak Fouye pwoblèm nan pset a, yon pakèt moun sou kòd ki nou te ekri, ak yon koup la kòmantè ki di "fè," kote ou kapab ranpli nan espas vid yo. Se konsa, pa twò pè, men li nan premye fwa a nou ap remèt ou yon kòd ke ou bezwen premye li, konprann, ak Lè sa a ajoute nan epi konplete li. Lè sa a, ak pti, nou ap ale nan fè menm bagay la, ban nou yon douzèn kèk plis liy nan kòd ki, franchman, ba ou yon anpil nan fondasyon an pou jwèt la men sispann kout nan mete ann aplikasyon brik yo ak boul la ak pedal la, men nou fè aplike kèk lòt karakteristik. E menm ki nan premye gade, ankò, espesyalman si mwens konfòtab, ta ka sanble patikilyèman redoutable ak ou panse gen nan anpil fonksyon nouvo ou bezwen vlope tèt ou alantou li, e ke sa a vre. Men, kenbe nan tèt ou, li nan byen tankou grafonyen moun. Chans yo se ou pa t 'sèvi ak tout moso yo devinèt nan grafonyen moun. Chans yo se ou pa t 'pran swen yo vlope lide ou otou tout nan yo paske tout li te pran se te yon ti koutje sou rapid yo konprann, o, sa a, se ki sa mwen kapab fè ak ki moso devinèt. Ak tout bon, nan pwoblèm mete 3 espèk, nou pral pwen ou nan dokiman an ki pral entwodui ou nan kèk fonksyon nouvo, ak finalman pwogram lan konstwi ou itilize. Kondisyon yo, pasan, varyab, ak fonksyon yo pral ki idantik ak sa nou te wè konsa byen lwen. Se konsa, tout bon, ki sa nou pral bay ou se kèk kòd echantiyon ki pèmèt ou kreye yon fenèt ki sanble pa kontrèman ak sa a, ak finalman vire l 'nan yon bagay byen tankou sa a. Se konsa, pran avantaj de CS50, diskite sou lè biwo ak plis ankò, epi pran konfò nan lefèt ke kantite lajan an nan Kòd ou gen yo ekri se aktyèlman pa tout sa ki anpil. Defi a an premye se jis aklimate tèt ou bay kèk kòd nou te ekri. Nenpòt kesyon sou pset3, Shellshock, oswa otreman? ODYANS: Li te sanble tankou ale atravè tout ak pti ke kòd la se prèske yon style objè-oryante, men mwen te panse C se te yon pwogram objè-oryante. Oratè 1: Yon kesyon ekselan. Se konsa, nan kap nan la kòd distribisyon a, kòd a nou te ekri pou pset3, pou moun ki abitye, li sanble li nan yon ti kras objè-oryante. Kout repons se, li se. Li nan yon apwoksimasyon nan ki jan ou ta ka fè objè-oryante Kòd lè l sèvi avèk yon lang tankou C, men li se toujou finalman pwosedi. Pa gen okenn metòd andedan nan varyab yo, menm jan ou pral wè. Men, li se okoumansman de sa. Epitou, n ap wè ke karakteristik ankò lè nou jwenn nan PHP ak JavaScript nan direksyon nan fen semès la. Men, pou kounye a, panse a li kòm yon allusion nan sa ki nan ap vini yo. Bon kesyon. Tout dwa. Se konsa, rantre sòt te ki jan nou bagay gòch dènye tan. Ak rantre sòt te fre nan la sans ke konsa sa te pase anpil pi vit, omwen ki baze sou ki egzamen yo supèrfisyèl nou te fè semèn pase a, pase, di, ti wonn sòt, sòt seleksyon, sòt ensèsyon. Ak sa ki te byen òdone twò se jis ki jan suksen ak propr ou ka eksprime li. Ak sa ki nou te di li te yon anwo mare l 'sou tan an kouri nan rantre sòt? Yeah? ODYANS: n boutèy demi lit n? Oratè 1: n boutèy demi lit n, dwat. n boutèy demi lit n. Epitou, n ap tounen vin jwenn ki sa sa vrèman vle di oswa kote ki soti nan, men sa a te pi bon pase sa ki tan kouri ke nou te wè pou ti wonn seleksyon ak sòt ensèsyon? Se konsa, n okib. n okib se pi gwo pase sa a, e menm si li pa byen evidan, konnen ke n boutèy demi lit se pi piti pase n, Se konsa, si ou fè fwa n yon bagay ki pi piti pase n, li a pral dwe mwens pase n okib. Li se yon ti jan nan entwisyon la. Men, nou peye yon pri pou sa. Li te pi vit, men yon tèm ki te kòmanse sòti semèn pase a te arbitraj sa a. Mwen te resevwa pi bon pèfòmans tan ki gen bon konprann, men sa ki mwen te gen yo ap depanse sou lòt la men, yo nan lòd reyalize sa? ODYANS: memwa. Oratè 1: Di ankò? ODYANS: memwa. Oratè 1: memwa, oswa espas plis jeneralman. Epi li pa t 'super evidan ak moun nou yo, men sonje ke volontè nou yo te kite pou pi devan ak kite tounen tankou si gen nan yon etalaj isit la, ak tankou si gen nan yon dezyèm etalaj isit la ke yo ta ka itilize, paske nou yon sél kote dekwa nesesè nan amalgame moun jan. Nou pa te kapab jis swap yo an plas. Se konsa, rantre sòt ogmante se pi plis espas, ki nou pa t 'bezwen ak lòt algoritm yo, men tèt la se ke li nan anpil pi vit. Ak franchman, nan espas ki la mond reyèl sa yo RAM days--, ki gen kapasite difisil space-- se relativman bon mache, epi konsa sa a, se pa nesesèman yon move bagay. Se konsa, kite a pran yon gade rapid, yon ti kras plis metodikman, nan sa nou te fè e poukisa nou te di li te n boutèy demi lit n. Se konsa, isit la yo se uit nimewo yo, epi nan uit volontè nou te gen dènye tan. Ak nan premye bagay ki Rantre Triye te di nou fè te ki sa? ODYANS: Divize an de. Oratè 1: Di ankò? ODYANS: Divize an de. Oratè 1: Divize an de, dwat. Sa a se trè okoumansman de liv telefòn nan, nan divize ak konkeri plis jeneralman. Se konsa, nou te gade mwatye gòch la. Lè sa a, yon fwa nou te di, sòt mwatye nan bò gòch nan eleman yo, nou sa nou te pwochen di nou fè? Sòt mwatye a gòch nan bò gòch la mwatye, ki pèmèt nou, apre divize an de, yo konsantre sou kat ak de. Ki jan ou fè sòt yon lis koulye a, nan jòn, nan gwosè de, lè l sèvi avèk rantre sòt? Oke divize l 'nan mwatye, ak sòt mwatye gòch la. Lè sa a te kote bagay sa yo te resevwa yon ti kras yon ti tan estipid. Ki jan ou fè sòt yon lis sa a, se nan gwosè yon sèl, tankou nimewo sa a kat isit la? Li nan Ranje. W ap fè. Men, Lè sa a, ki jan ou sòt yon lis gwosè yon sèl lè li nimewo a de? Oke, menm bagay, men kounye a sa ki te nan twazyèm ak etap la kle nan rantre sòt? Ou te gen yo rantre bò gòch la mwatye ak mwatye nan dwa. Epi yon fwa nou te fè sa, nou te gade nan kat, nou te gade de. Nou te deside tout dwa, evidamman de rive anvan, se konsa nou mete de nan li yo plas, ki te swiv pa kat. Epi, koulye a ou gen kalite remonte, ak sa a se sòt de karakteristik nan yon algorithm tankou Merge Triye, remonte nan memwa. Ki sa ki te liy nan pwochen nan istwa a? Kisa mwen ta dwe dwe konsantre sou vin apre a? Mwatye nan dwa nan bò gòch la mwatye, Ki se sis ak uit. Se konsa, kite m 'jis etap nan sa a san yo pa belaboring pwen an twòp. Sis ak uit, Lè sa a, sis a se Ranje, uit se Klase. Rantre yo ansanm tankou sa yo, e kounye a, pwochen etap la gwo se, nan kou, sòt mwatye nan dwa soti nan etap la trè premye nan algorithm sa a. Se konsa, nou konsantre sou yon sèl, twa, sèt, senk. Nou Lè sa a, konsantre sou mwatye nan bò gòch. Mwatye nan bò gòch de sa, mwatye nan dwa nan sa, ak Lè sa a rantre nan yon sèl ak twa. Lè sa a, mwatye nan dwa, lè sa a kite mwatye nan li, Lè sa a, mwatye nan dwa nan li. Rantre l 'nan, epi kounye a sa ki etap rete? Rantre gwo mwatye nan bò gòch ak gwo a mwatye dwa, se konsa yon sèl ale desann la, Lè sa a, de, Lè sa a, twa, lè sa a kat, Lè sa a, senk, Lè sa a, sis, Lè sa a, sèt, Lè sa a, uit. Se konsa, kounye poukisa se sa a finalman revele, espesyalman si n ak logaritm plis jeneralman olye chape ou, omwen nan memwa ki resan? Oke, remake wotè a nan bagay sa a. Nou te gen uit eleman yo, epi nou divize li pa de, pa de, pa de. Se konsa, ale baz de nan uit ban nou twa. Ak konfyans m 'sou ke si yon ti kras vwale sou sa. Men, journal baz de nan uit se twa, se konsa nou te fè twa kouch nan fusion. Men, lè nou fizyone eleman, konbyen eleman t 'nou gade nan sou chak nan sa yo ranje? Yon total de n, dwa? Paske nan amalgame tèt ranje a, menm si nou te fè li parselèr, nou finalman manyen chak nimewo yon fwa. Ak nan dezyèm ranje a, rantre lis sa yo ki nan gwosè de, nou te manyen chak eleman yon fwa. Lè sa a, isit la reyèlman klèman nan dènye ranje a, nou te manyen chak nan sa yo eleman yon fwa, men sèlman yon fwa, se konsa nan dokiman sa a bay manti, lè sa a, nou n boutèy demi lit n. Epi, koulye a jis fè bagay sa yo yon ti kras pi fòmèl pou jis yon ti moman, si ou yo te kounye a analize sa a nan yon sòt de pi wo nivo epi eseye deside, byen ki jan ta ka ou ale sou eksprime tan an kouri nan sa a algorithm jis pa gade li epi li pa lè l sèvi avèk yon egzanp parvenus? Oke, ki jan anpil tan ou ta di yon etap tankou sa a nan jòn ta pran, si n <2 retou? Sa a se yon gwo O nan ki sa? Se konsa, mwen wè yon sèl, se konsa yon sèl etap, petèt de etap paske li nan si ak Lè sa a retounen, men li la tan konstan, dwa? Se konsa, nou te di O (1), epi ki nan ki jan mwen pral eksprime sa a. T, jis pou kouri tan. n se gwosè a nan opinyon an, se konsa T (n), jis yon fason anpenpan pou li di kouri a tan bay yo opinyon nan gwosè n a pwal sou lòd la nan tan konstan, nan O (1). Men, otreman, sa ki sou sa a? Kouman ou ta eksprime nan kouri tan nan liy jòn sa a? T nan ki sa? Ou ka kalite tronpe isit la ak reponn kesyon m 'siklik. Se konsa, si tan an kouri nan jeneral nou jis di se T (n). Epi, koulye a ou ap kalite punting isit la ak li di yo: byen, jis sòt mwatye nan bò gòch, ak Lè sa a sòt mwatye a dwat. Ki jan nou ka senbolik reprezante tan an kouri nan liy jòn sa a? T nan ki sa? Ki sa ki nan gwosè a nan D 'a? n plis pase de. Poukisa nou pa mwen jis di sa? Lè sa a, sa a se yon lòt T (n / 2) ak Lè sa a, ankò, si mwen rantre de mwatye Ranje, konbyen eleman mwen pral gen lè ou manyen manm? n. Se konsa, mwen ka eksprime sa a, jis yo dwe kalite anpenpan, kòm tan an kouri an jeneral. T (n) se jis tan an kouri nan T (n / 2), plis T (n / 2), kite mwatye ak mwatye dwat, plis O (n), ki se pwobableman n etap, men petèt, si mwen sèvi ak de dwèt, li nan de fwa tankou anpil etap, men li la lineyè. Li nan kèk nimewo nan etap sa a, se yon faktè de n, se konsa nou ta ka eksprime sa a tankou sa a. Lè sa a se kote kounye a nou pral bote nan la tounen nan liv matematik nan lekòl segondè nou an nou ap ki repetition finalman fini moute egal sa a, n fwa boutèy demi lit n, si ou aktyèlman fè soti matematik la plis fòmèlman. Se konsa, sa se sèlman de pèspektiv. Youn numériquement ak yon difisil-kode reprezantan egzanp lè l sèvi avèk uit nimewo, ak yon plis gade jeneral nan ki jan nou te la. Men, sa ki nan vrèman enteresan isit la se, ankò, sa a nosyon nan monte bisiklèt. Mwen pa lè l sèvi avèk pou pasan. Mwen kalite defini yon bagay nan tèm nan tèt li, pa sèlman ak sa a fonksyon matematik, men tou, an tèm de sa a Kòd pseudo. Sa a Kòd pseudo se repetitif nan ke de nan liy li yo se esansyèlman di li ale sèvi ak tèt li yo rezoud yon pi piti pwoblèm nan pi piti gwosè, ak Lè sa a ankò e ankò epi ankò jouk nou réduir li desann nan sa a sa yo rele ka baz. Se konsa, kite a aktyèlman trase yon plis irezistib pran-lwen sa a jan sa a. Kite m 'ale nan jdi epi pran yon gade nan kèk nan kòd sous jodi a, an patikilye egzanp sa a isit la. Sigma 0, ki aparamman ajoute nimewo yo youn atravè n. Se konsa, kite la wè sa ki nan abitye ak abitye isit la. Premye nou gen yon koup nan gen ladan, se konsa pa gen anyen nouvo la. Pwototip. Mwen se yon ti kras vwale sou sa a apre kèk jou, men nou sa nou te di yon pwototip nan yon fonksyon se? ODYANS: [fèbl]. Oratè 1: Ki sa ki nan sa? ODYANS: Nou anonse li. Oratè 1: Nou anonse li. Se konsa, w ap anseye rezone, hey, pa aktyèlman mete ann aplikasyon sa a ankò, men yon kote nan sa a ranpli, prezimableman, yo pral yon fonksyon rele ki sa? Sigma. Lè sa a se jis yon pwomès ki li a pral gade tankou sa a. Li nan pral pran yon nonb antye relatif kòm input-- ak mwen ka gen plis eksplisit ak di Int n --and li a pral retounen yon int, men vle di virgules, mm, mwen pral jwenn alantou nan aplikasyon sa a yon ti kras pita. Yon fwa ankò, Sonnen se bèbè. Li nan sèlman pral konnen ki sa ou di li anwo jouk anba, konsa nou bezwen omwen bay li yon allusion nan sa ki nan ap vini yo. Koulye a, kite pou yo gade nan prensipal isit la. Se pou yo desann isit la ak wè sa ki prensipal ap fè. Li pa ke long nan yon fonksyon, ak an reyalite konstwi a isit la se yo konnen yo. Mwen deklare yon n varyab, ak Lè sa a, Mwen enportune itilizatè a ankò e ankò pou yon nonm antye ki pozitif lè l sèvi avèk getInt, ak sèlman sòti soti nan sa a riban yon fwa ke itilizatè a respekte. Èske Pandan ke, nou te itilize yo enportune itilizatè a nan fason sa a. Koulye a, sa a se enteresan. Mwen deklare yon int rele "repons." Mwen bay li valè a retounen nan yon fonksyon rele "sigma." Mwen pa konnen sa ki fè ankò, men Mwen sonje deklare li yon ti moman de sa. Lè sa a, mwen pase nan a valè ki itilizatè a tape nan, n, ak Lè sa a mwen rapòte repons lan. Oke, kite a woulo liv tounen sèlman pou moman yon. Ann al pi devan nan anyè sa a, fè sigma 0, ak aktyèlman kouri pwogram sa a ak wè sa ki rive. Se konsa, si m 'ale pi devan epi kouri pwogram sa a, ./sigma-0, ak mwen tape nan yon pozitif nonb antye ki pè tankou de, Sigma, kòm senbòl la grèk implique, se jis ale nan ajoute jiska tout nimewo yo ki soti nan zewo sou jiska de. Se konsa, 0 plis 1 plis 2. Se konsa, sa a ta dwe èspere ke ban m '3. Sa a tout li a fè. Epi Menm jan an tou, si mwen kouri sa a ankò ak mwen bay li nimewo a twa, sa a, se 3 plis 2, pou ki nan 5, plis 1 ta dwe ban m '6. Lè sa a, si mwen jwenn vrèman fou ak kòmanse sezisman nan pi gwo nimewo, li ta ban m ' pi gwo ak pi gwo montan lajan. Se konsa, ki nan nou tout. Se konsa, sa sigma sanble? Oke, li la trè senp. Li nan ki jan nou ta ka yo te aplike sa a pou koup ki sot pase a semèn. "Int" a pwal kalite a retounen. Sigma se non an, epi li pran yon m varyab olye pou yo n. Mwen pral chanje sa moute tèt. Lè sa a, sa a se jis yon chèk saniti. Nou pral wè poukisa nan yon moman. Koulye a, mwen deklare yon lòt varyab, sòm, inisyalize li a zewo. Lè sa a, mwen gen sa a pou riban iteration, aparamman pou klè, soti nan mwen = 1 sou jiska yon = m, ki se kèlkeswa sa itilizatè a tape nan, ak Lè sa a, mwen kantite sòm la tankou sa a. Lè sa a, retounen sòm la. Se konsa, yon koup nan kesyon yo. Youn, mwen reklame nan kòmantè mwen ke sa a evite risk pou yo yon riban enfini. Poukisa ta pase nan yon chif negatif pwovoke, ki kapab, yon riban enfini? ODYANS: Ou pa janm pral rive nan m. Oratè 1: Pa janm rive jwenn m. Men, se m te pase nan, kidonk kite a konsidere yon egzanp ki senp. Si yo m te pase nan pa la itilizatè kòm youn negatif. Endepandaman de prensipal la. Main pwoteje nou soti nan sa a tou, se konsa mwen jis ke yo te reyèlman nan dèyè ak sigma tou asire w ki D 'a pa ka negatif. Se konsa, si m se negatif, yon bagay tankou yon sèl negatif. Ki sa ki nan pral rive? Oke, mwen ki pral jwenn initialisé nan yon sèl, ak Lè sa a mwen a pwal mwens pase oswa egal a m? Kanpe bò. Sa was-- kite a pa, kite a Nix istwa sa a. Mwen pa t 'mande kesyon sa a, paske risk pou ke mwen ou evoke a pa pral rive paske mwen se toujou ale pi grannèg OK than--, Mwen retire kesyon sa a. OK. Se pou yo konsantre sèlman sou pati sa a isit la. Poukisa mwen deklare kèk deyò nan bouk la? Avi sou liy 49 Mwen te deklare mwen andedan nan riban an, men sou entènèt 48 Mwen te te deklare kèk deyò. Yeah. ODYANS: [fèbl]. Oratè 1: Asire w. Se konsa, premye ak surtout Mwen sètènman pa fè sa vle deklare ak inisyalize sòm a zewo andedan nan la riban sou chak iterasyon, paske sa a ta defèt la byen klè objektif nan adisyon moute nimewo yo. Mwen ta kenbe chanje valè a tounen nan zewo. Epi tou, sa ki nan yon lòt plis Esoteric rezon pou ke desizyon konsepsyon menm? Yeah. ODYANS: [fèbl]. Oratè 1: Egzakteman. Mwen vle gen aksè a li deyò nan riban an twò sou sa ki liy? Sou 53. Ak ki baze sou règ nou an nan gwo pous ki sòti nan yon koup nan konferans de sa, varyab yo scoped, reyèlman, nan aparèy òtopedik Curly ki kouvri yo. Se konsa, si mwen pa deklare sòm andedan nan sa yo aparèy òtopedik deyò Curly, Mwen pa ka sèvi ak li nan liy 53. Mete yon lòt fason, si mwen te deklare sòm nan isit la, oswa menm nan la Pou riban, mwen pa t 'kapab jwenn aksè li nan 53. Varyab la ta efektivman fè wout nou. Se konsa, yon koup nan rezon la. Men koulye a, se pou yo tounen ak wè sa ki rive. Se konsa, sigma vin rele. Li ajoute moute 1 plis 2, oswa 1 plis 2 plis 3, ak Lè sa a, retounen valè a, magazen li nan repons, ak printf isit la se poutèt sa mwen ap wè sou ekran an. Se konsa, sa a se sa nou pral rele yon repete apwòch, kote iteration jis vle di lè l sèvi avèk yon riban. Yon Pou riban, yon bouk Pandan ke, yon fè pandan riban, jis ap fè yon bagay ankò epi ankò epi ankò. Men, sigma se kalite yon fonksyon pwòp nan ke mwen te ka aplike li yon lòt jan. Ki sa ki sou sa a, ki jis yo dwe kalite fre, kite m 'vrèman debarase m nan yon anpil nan distraksyon paske fonksyon sa a se vrèman byen senp. Se pou nou réduir li desann jis nan kat liy nwayo li ak debarase m de tout nan kòmantè ak aparèy òtopedik Curly. Sa a se kalite yon lide-mouche altènatif aplikasyon. Tout dwa, petèt pa lide-mouche, men li nan kalite sexier, tout dwa, fè yon gade nan sa a anpil plis suksen. Ak jis kat liy nan kòd, M 'premye gen sa a chèk saniti. Si m se mwens pase oswa egal a zewo, sigma pa fè okenn sans. Li nan sèlman sipoze nan ka sa a pou nimewo pozitif, se konsa mwen jis ale nan retounen zewo abitrèman se konsa ke nou omwen gen kèk sa yo rele ka baz. Men, isit la bote a. Antye a nan ide sa a, pandan l ajoute a nimewo nan 1 rive nan n, oswa m nan ka sa a, ka fè pa kalite pase Buck la. Oke, sa a se sòm total la nan 1 rive nan m? Oke, ou konnen ki sa? Li nan menm bagay la kòm sòm total la nan m plis sòm total la nan 1 rive nan m mwens 1. Byen ou konnen ki sa? Ki sa ki nan sigma nan 1 m mwens? Oke, si ou kalite swiv sa a lojikman, li nan menm bagay la kòm m mwens 1 plis sigma nan m mwens 2. Se konsa, ou kapab kalite just-- sa a se tankou, si ou se jis ap eseye anbete yon zanmi epi yo mande w yon kesyon, ou kalite reponn ak yon kesyon, ou ka kalite kenbe pase Buck la. Men, sa ki nan kle a se ke si ou kenbe fè kesyon an ki pi piti ak pi piti ak pi piti, w ap pa mande sa ki nan sigma nan n, sa ki nan sigma nan n, sa ki nan sigma nan n? W ap mande sa ki nan sigma nan n, sa ki nan sigma nan n mwens 1, sa ki nan sigma nan 2 n mwens? Evantyèlman kesyon ou ki pral vin ki sa? Ki sa ki se sigma nan youn oswa zewo, kèk trè ti valè, ak le pli vit ke ou jwenn sa, zanmi ou, ou pa pral mande kesyon an menm ankò, w ap sèlman pral di, oh li a zewo. Nou ap fè ap jwe sa a sòt nan estipid jwèt conjoncture. Se konsa, rkursyon se zak la nan pwogram nan yon fonksyon rele tèt li. Pwogram sa a, lè konpile epi kouri, se ale nan konpòte egzakteman menm jan an, men sa ki nan kle a se ke andedan nan yon fonksyon rele sigma, gen yon liy nan kòd dans nou ap rele tèt nou, ki ta nòmalman ka move. Pou egzanp, sa ki si m 'premye konpile sa a, se konsa fè sigma-- fè sigma 1 ./sigma-1. Nonm antye ki pozitif, tanpri, 50 1275. Se konsa, sa ki fonksyon an sanble dwe, ki baze sou yon sèl tès, kòrèk. Men, sa ki si mwen jwenn yon ti kras danjere ak efase sa yo rele ka a baz, ak jis di, byen mwen jis fè sa a pi plis konplike pase sa li se. Se pou nou jis kalkile sigma la pa pran m ak Lè sa a, pandan l ajoute nan sigma nan youn m mwens? Oke, sa ki pral rive isit la? Se pou nou rale soti. Se pou nou compile pwogram nan, sove li, compile pwogram nan, ak Lè sa a pare ./sigma-1 zoum nan, antre nan nonm antye ki pozitif tanpri, 50. Konbyen nan ou yo vle fess jiska wè sa? OK. Se konsa, sa ka rive pou yon kantite rezon, ak franchman semèn sa a nou ap sou yo ba ou plis nan yo. Men, nan ka sa a, eseye di rezon bak sa ki ka te rive isit la? Fay segmentation, nou te di yè tan, refere a yon segman nan memwa. Yon move bagay ki te pase. Men, sa ki te li mekanikman ki te ale courbe isit la paske nan retire m ' nan ki sa yo rele ka baz, kote mwen tounen yon valè difisil-kode? Ki sa ou panse ale mal? Yeah. ODYANS: [fèbl]. Oratè 1: Ah. Bon kesyon. Se konsa, gwosè a nan nimewo a ke mwen te adisyon moute te tèlman gwo ke li depase gwosè a nan espas ki la memwa. Bon lide, men se pa fondamantalman ale nan koze yon kolizyon. Ki ta ka lakòz nonb antye relatif debòde, ki kote Bits yo jis baskile sou ak Lè sa a nou erè yon reyèlman gwo Nimewo pou tankou yon chif negatif, men sa li menm pa pral lakòz yon aksidan. Paske nan fen a jou yon int se toujou 32 miyèt moso. Ou pa ap ale nan aksidantèlman vòlè yon ti jan 33rd. Men, yon bon te panse. Yeah. ODYANS: [fèbl]. Oratè 1: Metòd la pa janm sispann kouri, ak tout bon li rele tèt li ankò , li ankò e ankò e ankò e ankò, e pa youn nan moun ki fonksyon tout tan tout tan fini paske liy sèl yo nan Kòd rele themself ankò e ankò e ankò. Ak sa ki nan vrèman pase isit la, epi kounye a nou ka kalite trase sa a pictorially. Kite m 'ale sou nan yon foto sèlman pou moman yon. Sa a se yon foto, ki pral evantyèlman vyann soti nan plis detay, nan sa ki k ap pase sou andedan nan memwa òdinatè ou a. Epi li vire soti ke sou pati anba a nan foto sa a se yon bagay yo rele pil la. Sa a se yon ti moso nan memwa, yon ti moso nan RAM, sa se sèlman itilize nenpòt ki lè se yon fonksyon rele. Nenpòt ki lè w, yon pwogramè, rele yon fonksyon, sistèm nan fonksyone, tankou Mac OS, Windows, oswa Linux, bèn yon pakèt moun sou bytes, petèt yon kilookte kèk, petèt kèk megabit nan memwa, men yo nou la a, ak Lè sa a pèmèt ou kouri fonksyon ou lè l sèvi avèk kèlkeswa sa varyab ou bezwen. Men, si ou Lè sa a, rele yon lòt fonksyon ak yon lòt fonksyon, ou jwenn yon lòt tranch nan memwa ak yon lòt tranch nan memwa. Ak tout bon, si plato vèt sa yo soti nan Annenberg reprezante ki memwa, isit la nan sa k ap pase premye a fwa ou rele sigma fonksyon. Se tankou mete yon plato tankou sa a sou sa ki nan okòmansman yon chemine vid. Men, Lè sa a, si sa plato rele tèt li, se konsa pale, rele yon lòt egzanp nan sigma, ki nan tankou mande sistèm nan fonksyone, Ooh, bezwen yon ti kras pi plis memwa, ban m 'sa. Lè sa a, li vin anpile sou sou tèt. Men, sa ki nan kle isit la se ke plato an premye se toujou la, paske li envoke dezyèm plato sa a. Koulye a, pandan se tan, sigma rele sigma, sa a, se tankou mande pou plis memwa. Vin anpile sou sou isit la. sigma rele sigma, ki nan yon lòt plato ki vin ranmase kò l sou isit la. Men, si ou kontinye ap fè sa a, evantyèlman, kalite kat jeyografik sa a vizyèl ak sa yo ki tablo, sa k ap pase rive ak chemine a nan plato ki anba po? Li se ale nan depase kantite lajan an nan memwa òdinatè w lan te genyen an. Ak le pli vit ke plato vèt sa a depase liy orizontal la pi wo a chemine ak pi wo a mo sa a pil wòch, ki nou pral tounen vin jwenn nan lavni an, ki se yon move bagay. Pil wòch la se yon diferan segman nan memwa, epi si ou kite moun sa plato pil ak pil sou li a, w ap ale nan depase pwòp segman ou nan memwa, ak yon pwogram se vre ale nan aksidan. Koulye a, kòm yon sou kote, ide sa a nan rkursyon, Se poutèt sa, ka byen klè mennen nan pwoblèm, men li a pa nesesèman yon move bagay. Paske konsidere, apre yo fin tout, how-- e petèt sa a pran kèk trape itilize --how elegant oswa ki jan senp ke aplikasyon nan sigma te ye a. Epi nou pa ap ale nan sèvi ak rkursyon tout sa ki anpil nan CS50, men nan CS51, ak reyèlman nenpòt ki klas kote ou manipile estrikti done tankou pye bwa, oswa pye bwa fanmi, ki gen kèk yerachi, li nan super, super itil. Koulye a, kòm yon sou kote, se konsa ke ou kòm aspiran syantis konpitè yo abitye avèk kèk nan Google la blag andedan, si ou ale nan Google epi ou gade moute ki sa ki nan definisyon nan, di, rkursyon, antre. Uh-huh. Kòm yon sou kote, mwen rale moute yon kèk. Sa a te tankou 10 minit nan atèrmwaman maten sa a. Si ou tou Google "krochi," avi pa inclinaison tèt ou slightly-- ak Lè sa a yon sèl sa a se petèt pi atròs nan tout depi yon moun te pase tankou jou yo mete ann aplikasyon sa a kèk ane ago-- vin sou. Oh, wait-- sa a, se yon ensèk. Se konsa, kouri sou youn nan la pi gwo sit mond lan yo se sa yo estipid ti kras Pak ze. Yo pwobableman konsome yon Nimewo nontrivial nan liy nan kòd jis pou ke nou ka gen ti kras plezi bagay sa yo tankou sa. Men, nan omwen kounye a ou jwenn kèk nan moun blag anndan an. Koulye a, kite a pran yon gade nan kèk nan la blan bay manti nou ve yo te di nan an reta, epi yo kòmanse kale tounen kèk kouch teknikman pou ke ou reyèlman konprann sa ki te ale sou epi ou ka konprann kèk nan menas yo, tankou Shellshock, ki gen kounye a te kòmanse vin sou forefront de tout moun nan atansyon, nan omwen nan medya yo. Se konsa, isit la se yon fonksyon trè senp ki retounen pa gen anyen, anile. Non li se swap. Li pran nan de varyab ak li retounen pa gen anyen. Pran nan yon ak b. Se konsa, yon demonstrasyon rapid. Nou pote l 'sa yo moute. Nou ta ka kòm byen pran yon ti kras kraze isit la pou jis yon ti moman epi yo gen yon ti kras yon bagay yo bwè. Si yon moun pa ta lide rantre nan m 'isit la sèlman pou moman yon. Kouman sou ou nan chemiz lan wouj grena? Vini non sou yo. Jis youn jodi a la. Mèsi poutèt ou, menm si. Tout dwa, e nou gen vini ki isit la? Ki sa ki nan non ou? Oratè 4: Laura. Oratè 1: Laura. Vini non sou yo. Se konsa, Laura, trè senp defi jodi a. Bèl al kontre Yo. Tout dwa. Se konsa, nou gen kèk lèt ​​sou isit la ak nou gen kèk ji zoranj sou isit la ak kèk tas ke nou prete nan men Annenberg jodi a. Oratè 4: Prete. Oratè 1: Epi pral ale pi devan ak ba ou mwatye yon vè sa a. Tout dwa. Epitou, n ap ba ou mwatye yon vè lèt la. Oh, ak jis pou ke ou kapab sonje ki sa sa a te tankou, Mwen vin chonje yo pote sa a moute ak sou jodi an. Okay. Si ou pa ta lide, kite a wè, nou ka mete yo sou linèt pwòp ou a si ou vle. Sa a pral mond lan soti nan je Laura a. Tout dwa. Se konsa, objektif ou, yo bay de tas likid isit la, lèt ak ji zoranj, se swap de sa ki se konsa ke nan ji zoranj ale nan gode a lèt ak lèt ​​a ale nan gode a ji zoranj. Oratè 4: Èske mwen jwenn yon lòt tas? Oratè 1: Mwen se konsa kontan ou te mande, menm si li ta yo te pi bon pye si ou pa t 'mande. Men, repons lan se wi, nou ka ofri w yon twazyèm tas sa a, se vid, nan kou. Tout dwa. Se konsa, swap sa ki la. Trè bèl. Li bon anpil. Ou ap fè sa a konsiderableman ak anpil atansyon. Ak etap twa. Tout dwa. Ekselan. Yon wonn gwo nan aplodisman ta bon pou Laura. Tout dwa. Nou gen yon ti kado louvri pou ou, men kite m 'pran sa yo. Mèsi anpil. Se konsa, yon egzanp ki senp, menm si, yo demontre ke si ou fè vle swap sa ki nan de kontenè ki, oswa kite a rele yo varyab, ou bezwen kèk depo pou yon ti tan nan etap youn nan sa ki nan sa ke ou ka aktyèlman fè swap la. Se konsa, tout bon, sa a kòd sous moute isit la nan C se reprezantan nan egzakteman sa. Si ji a zoranj te yon ak lèt ​​la te b, epi nou te vle swap de a, ou ta ka eseye yon bagay ki kreyatif pa vide yon sèl nan lòt la, men sa pwobableman pa ta fini patikilyèman byen. Se konsa, nou sèvi ak yon tas twazyèm, rele li tan, T-M-P pa konvansyon, epi li mete sa ki nan la OJ nan sa, Lè sa a, swap yon tas, Lè sa a, mete OJ a nan la orijinal tas, kidonk akonplisman, egzakteman jan Laura te fè, swap la. Se konsa, kite a fè egzakteman sa. Kite m 'ale pi devan epi louvri moute yon egzanp sa a, se aktyèlman rele "pa gen okenn swap, "paske sa a se pa kòm tou senpleman fè jan ou ta ka panse. Se konsa, nan pwogram sa a, remake ke Mwen sèvi ak stdio.h, zanmi fin vye granmoun nou yo. Mwen gen pwototip a pou swap moute a, ki vle di aplikasyon an li yo pwobableman desann anba a, ak kite la wè ki sa sa a prensipal pwogram nan pral fè pou mwen. M 'premye deklare Int x vin yon sèl, ak Int y vin de. Se konsa, panse a sa yo kòm OJ ak lèt, respektivman. Lè sa a, mwen jis gen yon printf di x se sa a ak y se sa a, jis pou mwen ka vizyèlman wè sa ki k ap pase sou. Lè sa a, mwen te printf reklame ke mwen échanjé de a, ak Lè sa a mwen enprime soti yon reklamasyon yo ke yo ap échanges, ak mwen enprime soti x ak y ankò. Se konsa, desann isit la nan swap se ekzakteman ki sa Laura te fè, ak ekzakteman ki sa nou te wè sou ekran an yon ti moman de sa. Se konsa, kite a ale pi devan epi gen gravman wont. Pa fè okenn swap, epi kouri pa gen okenn swap, zoum nan sou pwodiksyon an isit la. Antre nan x se 1, y se 2, échanjé échanges. x se toujou 1, ak y se toujou 2. Se konsa, menm si, franchman, sa a sanble egzakteman renmen, kwake plis teknikman, sa Laura te fè, pa t 'sanble nan travay. Se konsa, poukisa se sa? Oke, li sanble ke lè nou ekri yon pwogram tankou sa a ki te tou de prensipal la, make isit la, ak Lè sa a yon lòt fonksyon, tankou swap, make isit la, ki li rele, mond lan sanble yon ti kras yon bagay tankou plato sa yo yon ti moman de sa. Lè prensipal premye vin rele, sa a, se tankou mande sistèm opere pou yon ti jan nan memwa pou nenpòt ki lokal varyab tankou x ak y ki gen prensipal yo, epi yo fini dwa gen. Men, si apèl prensipal boukante, ak prensipal pase swap de agiman, A ak B, ji zoranj ak lèt, li pa tankou Distribiye ji a zoranj ak lèt ​​la Laura. Ki sa ki yon òdinatè fè sa, se li pase kopi nan ji an zoranj ak kopi lèt la Laura, se konsa ke sa ki nan finalman andedan nan plato sa a se youn nan valè ak de, oswa OJ ak lèt, men kopi ladan l ', se konsa ke nan pwen sa a nan istwa a, gen se OJ ak lèt ​​nan chak nan plato ki anba po sa yo. Genyen nan yon sèl ak yon de nan chak nan plato ki anba po sa yo, ak fonksyon an swap se vre travay. Li nan échanjé yo anndan nan plato a dezyèm topmost, men sa échanjé pa gen okenn enpak. Ak ki baze sou sèlman kèk prensip debaz nou te te pale osijè de anvan, ak tout bon de sa jis yon kèk minit, sa ta ka eksplike poukisa chanje a ak b andedan nan swap gen okenn efè sou x ak y, menm si Mwen te pase x ak y nan fonksyon an swap. Ki sa ki nan pawòl Bondye a kle isit la ke ta ka senplist eksplike? Mwen panse ke m 'te tande l' isit la? ODYANS: Retounen. Oratè 1: Retounen? Pa retounen. Ann al ak yon sèl lòt. Ki sa ki nan sa? ODYANS: [fèbl]. Oratè 1: OK, se konsa return-- nou te kapab fè retounen travay nan istwa a, men gen nan yon eksplikasyon menm ki pi senp. ODYANS: Dimansyon. Oratè 1: Dimansyon. M ap pran dimansyon. Se konsa, dimansyon, sonje kote x nou an ak y deklare. Yo ap deklare andedan nan prensipal dwa moute isit la. a ak b, pandan se tan, se efektivman deklare andedan nan swap, pa byen nan aparèy òtopedik yo Curly men yo toujou nan zòn an jeneral nan swap. Se konsa, tout bon, a ak b sèlman egziste nan plato sa a soti nan Annenberg, sa a dezyèm ti moso nan kòd. Se konsa, nou ap tout bon chanje kopi a, men sa a pa vrèman tout sa ki itil. Se konsa, kite a pran yon gade nan sa a nivo yon ti kras pi ba yo. Mwen pral ale tounen nan Sous Anyè a, ak mwen pral nan premye rale nan isit la, ak jis kapab konfime si ke mwen se nan sa a pi gwo fenèt tèminal, pwogram lan la toujou konpòte tankou sa. Sipoze kounye a ke sa a se pa entansyonèl. Klèman mwen te vle swap travay, se konsa li santi l tankou yon ensèk. Koulye a, mwen te kapab kòmanse ajoute yon anpil nan printf a nan kòd m 'yo, enprime soti x sou isit la, y sou isit la, yon sou isit la, b sou isit la. Men, franchman, ke sa ka petèt sa ki ou ve yo te fè pou yon koup la semèn koulye a, nan lè biwo ak nan kay lè w ap travay sou psets ap eseye jwenn kèk pinèz. Men, ou ap wè, si ou pa gen deja, ki pwoblèm mete twa entwodui ou yon lòd yo rele gdb, ki kote gdb, GNU debugjeur, gen tèt li yon pakèt antye nan karakteristik ki ka aktyèlman se pou nou konprann sitiyasyon tankou sa a, men li plis irezistibleman, rezoud pwoblèm epi jwenn pinèz. Se konsa, mwen pral fè sa. Olye pou yo ./noswap, mwen olye pou ale nan kouri gdb ./noswap. Nan lòt mo, mwen pral kouri mwen pwogram pa nan bach, nouvo zanmi nou an jodi a. Mwen pral kouri mwen noswap pwogram andedan nan lòt pwogram sa a rele Gdb, ki se yon debugjeur, ki se yon pwogram ki nan fèt ede ou lèzòm te jwenn ak retire pinèz. Se konsa, si mwen frape Kouri isit la, gen nan yon kantite lajan atròs nan tèks ke ou reyèlman pa janm gen yo li. Li nan esansyèlman yon distraksyon soti nan èd memwa a, ki Mwen pral frape Kontwòl-L yo ka resevwa leve nan tèt la a. Sa a se èd memwa a gdb. Si m 'vle kouri pwogram sa a kounye a, tankou sa a fèy twonpe ti kras sou jodi a nan glise sijere, Run se premye a kòmande ke nou vle di ke yo prezante. Apre sa, mwen jis ale nan tape kouri moute isit la andedan nan gdb, ak tout bon li kouri pwogram mwen an. Koulye a, gen nan kèk adisyonèl sorti nan ekran an tankou sa a, men sa a gdb jis ke yo te nan dèyè epi pou di nou sa ki pral sou. Ou pa reyèlman gen enkyete sou detay sa yo kounye a. Men, sa ki nan vrèman fre sou Gdb, si mwen fè sa again-- Kontwòl-L efase ekran kite nan m 'ale devan yo ak kalite "kraze prensipal," kidonk, lè m 'frape Antre, mete sa ki nan rele yon pwen kraze nan noswap.c, liy 16, ki se kote gdb kalkile konnen pwogram mwen aktyèlman se, fonksyon m 'aktyèlman se. Sa a nou pral inyore pou kounye a men sa a adrès la nan memwa espesyalman nan fonksyon sa a. Se konsa, kounye a lè mwen tape kouri, remake sa ki nan fre isit la. Pwogram m 'kase nan liy mwen an te di gdb pran yon poz ekzekisyon an. Se konsa, mwen pa gen yo kounye a chanje kòd m 'yo, ajoute kèk printf a, compile li, relance li, chanje, ajoute kèk printf a, sove li, compile li, kouri li. Mwen ka jis mache nan pwogram mwen an etap pa etap pa etap nan vitès imen, pa nan Intel-andedan kalite vitès. Se konsa, kounye avi liy sa a parèt isit la, epi si mwen tounen nan pwogram mwen an jdi, remake ke ki se aktyèlman liy an trè premye nan kòd. Genyen nan liy 16 nan jdi. Genyen nan liy 16 ki nan gdb, e menm menm si koòdone nwa ak blan sa a se pa prèske kòm itilizatè zanmitay, sa vle di ki liy 16 pa te egzekite ankò, men li la sou yo dwe. Se konsa, tout bon si mwen tape ekri an lèt detache x, pa printf, jis ekri ak lèt ​​detache x, Mwen jwenn kèk valè fos gen nan zewo, paske x pa te initialisé ankò. Se konsa, mwen pral tape pwochen, oswa, si ou vle yo dwe anpenpan, jis n pou vini an. Men, lè mwen tape pwochen antre nan, kounye a remake l ap deplase sou nan liy 17. Se konsa, lojikman, si mwen te egzekite liy 16 ak mwen kounye a tape ekri an lèt detache x, kisa pou m wè? Yon sèl. Epi, koulye a sa a se Byensir konfizyon. $ 2 a se jis yon fason anpenpan nan, si ou vle al gade nan ki valè pita, ou ka di "dola siyen de." Se tankou yon referans tounen. Men, pou kounye a, jis inyore li. Ki sa ki nan enteresan an se sa ki nan sou bò dwat la nan siy lan egal-ego. Epi, koulye a si mwen tape pwochen ankò epi enprime y, m 'ta dwe gade 2. Mwen ka tou kounye a enprime x ankò, ak franchman, si mwen resevwa yon ti kras konfonn kòm kote m'a ye, mwen ka tape lis pou lis ak jis wè kèk kontèks alantou pwen an Mwen se aktyèlman nan. Epi, koulye a mwen ka tape vini an, epi gen x se 1. Koulye a, mwen tape pwochen. Oh, y se 2. Epi ankò, li se konfizyon, paske pwodiksyon gdb a se ke yo te melanje avèk pwodiksyon pwòp mwen. Men, si ou kenbe nan tèt ou, pa ensidan retounen ak lide nan kòd ou a oubyen mete li soti bò pa bò petèt, ou pral wè ke reyèlman Mwen jis kite nan pwogram mwen an. Men, remake sa k ap pase pwochen, literalman. Isit la nan liy 22. Kite m 'ale sou li, kidonk k ap deplase sou a 23, epi si mwen enprime x kounye a, toujou youn. Men, si mwen enprime y kounye a, toujou youn. Se konsa, sa a se pa yon egzèsis itil. Se konsa, kite a refè sa a. Kite m 'ale tounen jiska la tèt ak kalite kouri ankò. Epi li di pwogram lan ki k ap debogaj te kòmanse deja, te kòmanse depi nan konmansman an. Wi, se pou yo fè sa ankò. Ak tan sa a kite a fè pwochen, apre, pwochèn nan, apre, pwochèn nan, men kounye a bagay sa yo jwenn ki enteresan. Koulye a, mwen vle etap antre nan swap, se konsa mwen pa tape pwochen. Mwen tape etap, e kounye a, remake li te vole m 'nan liy noswap.c 33. Si m 'tounen nan jdi, sa ki nan liy 33? Sa a premye aktyèl la liy nan kòd andedan nan swap. Ki se bèl, paske koulye a, mwen kapab kalite pike alantou epi pou yo jwenn kirye tankou sa ki k ap pase sou se vre wi: nan la. Kite m 'enprime tan. Ola. Poukisa tan gen kèk fou, fos valè fatra? ODYANS: Li pa te initialisé. Oratè 1: Li pa te initialisé. Ak tout bon, lè ou kouri nan yon pwogram, w ap bay yon pakèt antye nan memwa pa sistèm nan fonksyone, men ou pa gen initialisé nenpòt ki valè, se konsa tou sa Bits w ap wè isit la, menm si li nan sa a fou gwo negatif nimewo, jis vle di ke sa yo se sold yo nan kèk l 'anvan an ki RAM, menm si mwen pa gen tèt mwen bezwen li ankò. Se konsa, koulye a mwen pral ale pi devan ak kalite vini an, epi si mwen kounye a tape ekri an lèt detache tan, kisa pou m wè? Kèlkeswa valè a nan yon te, yon se agiman an premye, jis tankou x te premye a bagay ke yo te pase a, se konsa yon ak x ta dwe menm bagay la, se konsa enprime tan ta dwe enprime m 'yon sèl. Se konsa, sa ou pral wè nan seri pwoblèm twa se yon leson patikilye nan kalite sou gdb, men mwen reyalize ke sa a se nan konmansman an nan yon gade nan yon zouti ki pral aktyèlman ede ou rezoud pwoblèm pou pi plis efektivman. Ki sa nou ap finalman pral fè nan Mèkredi se kòmanse kale tounen yon kèk kouch epi retire kèk wou fòmasyon. Ke bagay yo rele kòd ki nou te itilize pou kèk tan, nou ap ale nan tou dousman pran ki lwen nan men ou epi yo kòmanse ap pale de yon bagay ki pi Esoterically li te ye kòm Char *, men nou ap ale nan fè sa bèl ak dousman nan premye, menm si endikasyon, menm jan yo ap rele, ka fè kèk trè move bagay si viktim abi, pa gade nan yon ti kras claymation soti nan zanmi nou an Nick Parlante soti nan Stanford University, yon pwofesè nan òdinatè syans ki mete tèt yo ansanm aperçu sa a nan sa ki nan vini sa a Mèkredi. [Lèktur VIDEO] -Hey, Binky. Reveye. Li lè pou plezi konsèy. -Ki Nan sa? Aprann sou pwent? Oh, chokola! [Lèktur videyo END] Oratè 1: Sa ap tann ou nan Mèkredi. Nou pral wè ou lè sa a. [Lèktur VIDEO] -Epi Kounye a, Deep Refleksyon, pa Daven Farnham. -Poukisa Yo nou aprann C? Poukisa nou pa A +? [Ri] [Lèktur videyo END]