1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Nädal 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvardi Ülikool] 3 00:00:04,000 --> 00:00:08,000 [See on CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> See on CS50, ja see on alguse 6. nädalal 5 00:00:12,000 --> 00:00:16,000 nii paar uut vahendid on nüüd olemas, kus saab ära kasutada, 6 00:00:16,000 --> 00:00:19,000 millest esimene on nn CS50 Stiil. 7 00:00:19,000 --> 00:00:22,000 Koefitsiendid on, kui sa oled nagu mina või mõni õpetamise stipendiaatide 8 00:00:22,000 --> 00:00:26,000 olete ilmselt näinud programmi, kelle stiil paistab pisut midagi sellist. 9 00:00:26,000 --> 00:00:30,000 Ehk hakkate lõikamine mõned nurgad hilja õhtul, või saad sellega tegeleda hiljem 10 00:00:30,000 --> 00:00:32,000 ja siis TF või CA tuleb üle tööajal. 11 00:00:32,000 --> 00:00:34,000 Siis on meil raske lugeda. 12 00:00:34,000 --> 00:00:38,000 Noh, see kood on süntaktiliselt õige, ja see kompileerib, ja see reaalselt sõita. 13 00:00:38,000 --> 00:00:40,000 Aga see on kindlasti mitte 5 stiil. 14 00:00:40,000 --> 00:00:45,000 >> Aga nüüd, kui me astume sellesse kataloogi- 15 00:00:45,000 --> 00:00:48,000 ja märkate, et mul on conditions2.c- 16 00:00:48,000 --> 00:00:55,000 ja ma saan selle uue käsu, style50, seda faili conditions2.c, Enter, 17 00:00:55,000 --> 00:00:57,000 märgata, et see on mind informeerinud, et ta on olnud stiliseeritud. 18 00:00:57,000 --> 00:01:00,000 Gedit märganud, et fail on muutunud kettal, 19 00:01:00,000 --> 00:01:08,000 ja kui ma nuppu reload, kõik teie probleemid on nüüd automatiseeritud. 20 00:01:08,000 --> 00:01:15,000 [Aplaus] 21 00:01:15,000 --> 00:01:17,000 See on üks asju, mida me tegime sel nädalavahetusel. 22 00:01:17,000 --> 00:01:20,000 Aru, et see on puudulik, sest seal on mingi kood 23 00:01:20,000 --> 00:01:23,000 et see lihtsalt ei saa Tyylitellä ideaalselt, 24 00:01:23,000 --> 00:01:26,000 aga aru, et see on nüüd vahend, mida saab ära kasutada 25 00:01:26,000 --> 00:01:33,000 kui ainult koristama mõned rohkem errantly paigutatud looksulg jms. 26 00:01:33,000 --> 00:01:36,000 >> Aga selgem nüüd on CS50 Kontrolli. 27 00:01:36,000 --> 00:01:39,000 Mis CS50 Kontrolli, saab tegelikult teha samu õigsuse testid 28 00:01:39,000 --> 00:01:42,000 ise koodi, et õpetamise stipendiaatide suudavad. 29 00:01:42,000 --> 00:01:44,000 See on käsurea utiliit, mis tuleb nüüd seadme 30 00:01:44,000 --> 00:01:46,000 niipea kui sa update50 ühe 31 00:01:46,000 --> 00:01:49,000 pset 4 näitajad, ja te kasutate seda sisuliselt niimoodi. 32 00:01:49,000 --> 00:01:51,000 Sa käivitada käsk check50. 33 00:01:51,000 --> 00:01:56,000 Siis viiakse käsurea argument, või üldisemalt tuntud kui lüliti või lipp. 34 00:01:56,000 --> 00:01:58,000 Üldiselt asjad, mis on sidekriipsud nimetatakse lüliti 35 00:01:58,000 --> 00:02:02,000 et käsurea programm, nii-c täpsustatakse 36 00:02:02,000 --> 00:02:04,000 kontrollide kohta, mida soovite käivitada. 37 00:02:04,000 --> 00:02:07,000 >> Teste, mida soovite käivitada identifitseeritakse individuaalselt selle stringi, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Teisisõnu, see on lihtsalt suvaline, kuid unikaalne string 40 00:02:13,000 --> 00:02:18,000 et me kasutame üheselt identifitseerida pset 4 őigsuse testid. 41 00:02:18,000 --> 00:02:21,000 Ja siis täpsustada tühikutega eraldatud loetelu faili, mida soovite üles laadida 42 00:02:21,000 --> 00:02:24,000 kuni CS50 Kontrolli analüüsiks. 43 00:02:24,000 --> 00:02:29,000 Näiteks, kui ma minema minu lahendus siin resize.c- 44 00:02:29,000 --> 00:02:31,000 lubage mul avada suurem terminaliakent- 45 00:02:31,000 --> 00:02:42,000 ja ma edasi minna ja käivitada oletame check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 ja siis ma minna ja täpsustada failide nimed, 47 00:02:46,000 --> 00:02:49,000 resize.c ja siis Enter, see surub, 48 00:02:49,000 --> 00:02:53,000 see lisatud, siis kontrolli, ja ma lihtsalt ei suutnud terve hunnik teste. 49 00:02:53,000 --> 00:02:59,000 Üks punane top vasakule ütleb, et resize.c ja bmp olemas. 50 00:02:59,000 --> 00:03:01,000 See oli test. See oli küsimus palusime. 51 00:03:01,000 --> 00:03:04,000 Ja see on õnnetu, sest vastus oli vale. 52 00:03:04,000 --> 00:03:08,000 Valge tekst ütleb oodata bmp.h olemas, ja see on lihtsalt minu süü. 53 00:03:08,000 --> 00:03:11,000 Ma unustasin laadida selle, et mul on vaja üles laadida nii faile, 54 00:03:11,000 --> 00:03:14,000 resize.c ja bmp.h. 55 00:03:14,000 --> 00:03:17,000 Aga nüüd tähele kõik teised testid on kollane, sest nad ei jookse, 56 00:03:17,000 --> 00:03:21,000 ja nii naerusuu on vertikaalne, sest ta on kumbki õnnelik ega kurb, 57 00:03:21,000 --> 00:03:25,000 kuid me peame hüvitamise et küsimus punane enne nende muude kontrollide kestab. 58 00:03:25,000 --> 00:03:27,000 >> Las ma lahendan selle. 59 00:03:27,000 --> 00:03:30,000 Lubage mul välja suumida ja uuesti seda, seekord bmp.h ka 60 00:03:30,000 --> 00:03:34,000 kohta käsurealt, Enter, ja nüüd, kui kõik hästi läheb, 61 00:03:34,000 --> 00:03:38,000 see saab vaadata ja siis tagasi tänu-hoidke hinge- 62 00:03:38,000 --> 00:03:42,000 kõik roheline, mis tähendab, ma teen tõesti hästi pset 4 siiani. 63 00:03:42,000 --> 00:03:44,000 Võite näha ja järeldada kirjeldav tekst siia 64 00:03:44,000 --> 00:03:47,000 Just see on meil testitud. 65 00:03:47,000 --> 00:03:49,000 Me kõigepealt katsetada ei failid on olemas? 66 00:03:49,000 --> 00:03:51,000 Siis katsetatakse ei resize.c kompileerida? 67 00:03:51,000 --> 00:03:58,000 Siis me katsetatud see ei resize 1x1 piksli BMP kui n, resize tegur, 1. 68 00:03:58,000 --> 00:04:01,000 Nüüd, kui te ei tea, mida n on, siis kui sa sukelduda pset 4, 69 00:04:01,000 --> 00:04:04,000 kuid see lihtsalt on meelerahu veenduge, et te ei ole saneerimist 70 00:04:04,000 --> 00:04:08,000 pilt üldse, kui resize tegur on 1. 71 00:04:08,000 --> 00:04:14,000 Kui seevastu seda suurust muuta 1x1 piksli 1x1 pixel BMP 2x2 õigesti 72 00:04:14,000 --> 00:04:19,000 kui n on 2, siis samamoodi minu moodustab vastavalt. 73 00:04:19,000 --> 00:04:22,000 >> Lühidalt, see on mõeldud ühe, võtab ületamisel sõrmed 74 00:04:22,000 --> 00:04:25,000 välja võrrandi paremale enne kui saadate oma pset. 75 00:04:25,000 --> 00:04:28,000 Te teate täpselt, mida teie TF varsti teada 76 00:04:28,000 --> 00:04:30,000 kui lähete umbes esitades mõned neist probleemi komplekti, 77 00:04:30,000 --> 00:04:34,000 ja ka pedagoogiline motivatsioon on tõesti panna 78 00:04:34,000 --> 00:04:37,000 võimalus teie ees, nii et kui sa tead priori 79 00:04:37,000 --> 00:04:39,000 et seal on vigu koodi ja katsed, et ei jõua, 80 00:04:39,000 --> 00:04:43,000 võite panna tõhusam aega, kuni ees, et nende probleemide lahendamiseks 81 00:04:43,000 --> 00:04:45,000 mitte kaotada punkte, saada tagasisidet oma TF, 82 00:04:45,000 --> 00:04:48,000 ja siis minna, "Ahh," nagu ma oleks pidanud seda taipama. 83 00:04:48,000 --> 00:04:50,000 Nüüd vähemalt seal on vahend, mis aitab leida seda. 84 00:04:50,000 --> 00:04:52,000 Ta ei kavatse märkida, kus viga on, kuid ta ütleb sulle 85 00:04:52,000 --> 00:04:54,000 Mis on iseloomulik see. 86 00:04:54,000 --> 00:04:57,000 >> Nüüd mõistame testid ei ole tingimata ammendav. 87 00:04:57,000 --> 00:04:59,000 Lihtsalt, sest sa saad ekraan täis roheline smiley nägu 88 00:04:59,000 --> 00:05:02,000 ei tähenda, et teie kood on täiuslik, kuid see ei tähenda 89 00:05:02,000 --> 00:05:06,000 et ta on läbinud teatud analüüsid ettenähtud spec. 90 00:05:06,000 --> 00:05:08,000 Vahel me ei vabasta kontrolli. 91 00:05:08,000 --> 00:05:10,000 Näiteks Dekkari, üks aspekte pset 4, 92 00:05:10,000 --> 00:05:15,000 on selline pettumus, kui anname 93 00:05:15,000 --> 00:05:18,000 vastus küsimusele, mis see on, ja seal on mitmeid viise, kuidas paljastada 94 00:05:18,000 --> 00:05:21,000 kes inimene on, et punane müra. 95 00:05:21,000 --> 00:05:24,000 Spec alati täpsustada tulevikus pset 5 edasi 96 00:05:24,000 --> 00:05:26,000 mida kontrollib olemas sinu jaoks. 97 00:05:26,000 --> 00:05:28,000 Märkad seal on see valge link allosas. 98 00:05:28,000 --> 00:05:30,000 Sest nüüd, see on lihtsalt diagnostika väljund. 99 00:05:30,000 --> 00:05:33,000 Kui külastad et URL, saad terve hunnik hull, salasõnumeid 100 00:05:33,000 --> 00:05:36,000 et sa oled teretulnud vaatama läbi, aga see on enamasti töötajad 101 00:05:36,000 --> 00:05:41,000 nii et me saame diagnoosida ja siluda vigu check50 ise. 102 00:05:41,000 --> 00:05:46,000 >> Ilma jututa, liigume edasi, kus pooleli jäime. 103 00:05:46,000 --> 00:05:48,000 CS50 raamatukogu võtsime ette antud mõned nädalad, 104 00:05:48,000 --> 00:05:52,000 aga siis eelmisel nädalal alustasime rebides üks kiht seda. 105 00:05:52,000 --> 00:05:55,000 Alustasime jätma kõrvale string kasuks mida mitte? 106 00:05:55,000 --> 00:05:57,000 [Õpilased] Char. 107 00:05:57,000 --> 00:05:59,000 Char *, mis on char * kogu see aeg, 108 00:05:59,000 --> 00:06:03,000 aga nüüd me ei pea teesklema, et see on tegelik andmetüüp String. 109 00:06:03,000 --> 00:06:06,000 Pigem on see olnud sünonüümiks kehvasti char *, 110 00:06:06,000 --> 00:06:09,000 ja string on märgijada, 111 00:06:09,000 --> 00:06:14,000 miks see loogiline esindama stringe nagu char * s? 112 00:06:14,000 --> 00:06:20,000 Mis char * esindama kontekstis see mõiste string? 113 00:06:20,000 --> 00:06:23,000 Jah. >> [Student] esimene märk. 114 00:06:23,000 --> 00:06:25,000 Hea, esimene märk, kuid mitte päris esimene märk. 115 00:06:25,000 --> 00:06:27,000 See-[õpilased] Aadress. 116 00:06:27,000 --> 00:06:29,000 Hea, aadress esimene märk. 117 00:06:29,000 --> 00:06:33,000 Kõik see on vajalik, et esindada stringi arvuti mällu 118 00:06:33,000 --> 00:06:36,000 on lihtsalt aadressi oma väga esimene bait. 119 00:06:36,000 --> 00:06:38,000 Sa isegi ei pea teadma, kui kaua see on 120 00:06:38,000 --> 00:06:42,000 sest kuidas sa saad aru, et läbi dünaamiliselt? 121 00:06:42,000 --> 00:06:44,000 [Student] String pikkusega. 122 00:06:44,000 --> 00:06:48,000 Teil on võimalik helistada stringi pikkus, suurepärased, aga kuidas stringi pikkuse töö? 123 00:06:48,000 --> 00:06:50,000 Mida see teeb? Jah. 124 00:06:50,000 --> 00:06:52,000 [Student] Liigu edasi kuni jõuad null iseloomu. 125 00:06:52,000 --> 00:06:54,000 Jah, täpselt, see lihtsalt kordab koos loop, samas silmus, 126 00:06:54,000 --> 00:06:57,000 mis iganes alates * lõpuni, ja lõpuks on esindatud 127 00:06:57,000 --> 00:07:01,000 poolt \ 0, nn nul iseloomu, nul, 128 00:07:01,000 --> 00:07:05,000 ei tohi segi ajada null, mis on pointer, 129 00:07:05,000 --> 00:07:07,000 mis tulevad üles vestlus täna jälle. 130 00:07:07,000 --> 00:07:11,000 >> Me kooritud tagasi kiht GetInt ja siis võtsime pilk getString, 131 00:07:11,000 --> 00:07:14,000 ja meenutada, et need mõlemad ülesanded või tõesti, 132 00:07:14,000 --> 00:07:18,000 GetString, oli kasutades teatud funktsiooni 133 00:07:18,000 --> 00:07:21,000 tegelikult sõeluda, et on, lugeda ja analüüsida, kasutaja sisendit. 134 00:07:21,000 --> 00:07:25,000 Ja mis see oli uus funktsioon? 135 00:07:25,000 --> 00:07:27,000 Scanf või sscanf. See tegelikult jõuab mõne erineva maitsega. 136 00:07:27,000 --> 00:07:31,000 Seal on scanf, seal on sscanf, seal on fscanf. 137 00:07:31,000 --> 00:07:35,000 Praegu, kuigi, olgem keskenduda üks kõige kergemini illustreeritud 138 00:07:35,000 --> 00:07:38,000 ja las ma edasi minna ja avada ka seadme 139 00:07:38,000 --> 00:07:41,000 faili niimoodi, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 See on super lihtne programm, 141 00:07:43,000 --> 00:07:46,000 kuid mis teeb midagi, et me pole kunagi teinud 142 00:07:46,000 --> 00:07:48,000 abita CS50 raamatukogu. 143 00:07:48,000 --> 00:07:51,000 See saab int alates kasutaja. Kuidas see toimib? 144 00:07:51,000 --> 00:07:53,000 Noh, rida 16 seal, 145 00:07:53,000 --> 00:07:56,000 märgata, et me kuulutame int nimetatakse x ja siinkohal lugu, 146 00:07:56,000 --> 00:07:58,000 Mis on x väärtus? 147 00:07:58,000 --> 00:08:00,000 [Kuuldamatu õpilase vastus] 148 00:08:00,000 --> 00:08:02,000 [David M.] Just, kes teab, mõned prügi väärtus potentsiaalselt nii 17, me lihtsalt öelda kasutaja 149 00:08:02,000 --> 00:08:06,000 anna mulle number, palun, ja 18. samm läheb asi huvitavaks. 150 00:08:06,000 --> 00:08:11,000 Scanf tundub laenata idee printf, et ta kasutab neid vormingu tähistamine jutumärkides. 151 00:08:11,000 --> 00:08:13,000 % D on muidugi kümnendmurruna. 152 00:08:13,000 --> 00:08:21,000 Aga miks ma möödaminnes & x asemel lihtsalt x? 153 00:08:21,000 --> 00:08:24,000 Esimene neist on õige. Jah. 154 00:08:24,000 --> 00:08:26,000 [Kuuldamatu õpilase vastus] 155 00:08:26,000 --> 00:08:31,000 Täpselt, kui eesmärk on see programm, nagu funktsioon GetInt ise, 156 00:08:31,000 --> 00:08:34,000 on saada int kasutaja ma ei liigu funktsioonid 157 00:08:34,000 --> 00:08:38,000 kõik muutujad ma tahan, aga kui ma ei liigu need tooted 158 00:08:38,000 --> 00:08:41,000 või aadressi või pointer, kõik sünonüümid tänapäeva eesmärkidel, 159 00:08:41,000 --> 00:08:46,000 siis see funktsioon puudub võime muuta sisu, et muutuja. 160 00:08:46,000 --> 00:08:49,000 See viiakse koopia nagu lollakas versioon swap 161 00:08:49,000 --> 00:08:51,000 et me rääkisime paar korda nüüd. 162 00:08:51,000 --> 00:08:54,000 >> Kuid selle asemel, tehes & x, ma sõna otseses mõttes möödaminnes mida? 163 00:08:54,000 --> 00:08:57,000 [Student] aadress. >> Aadress x. 164 00:08:57,000 --> 00:09:01,000 See on nagu joonistus kaardi funktsioon nimega scanf ja ütlen, 165 00:09:01,000 --> 00:09:04,000 need suunad patakas mälu arvuti 166 00:09:04,000 --> 00:09:07,000 et võid minna salvestada mõned täisarv sisse 167 00:09:07,000 --> 00:09:10,000 Et sscanf et nüüd seda teha 168 00:09:10,000 --> 00:09:13,000 mis operaator, mis tükk süntaks see saab olema kasutada 169 00:09:13,000 --> 00:09:19,000 kuigi me seda ei näe, sest keegi teine ​​kirjutas selle funktsioon? 170 00:09:19,000 --> 00:09:21,000 Teisisõnu - mis see on? 171 00:09:21,000 --> 00:09:23,000 [Student] X lugeda. 172 00:09:23,000 --> 00:09:27,000 Seal saab olema mõned lugemine, kuid ainult seoses x siin. 173 00:09:27,000 --> 00:09:30,000 Kui scanf on läbinud aadress x, 174 00:09:30,000 --> 00:09:35,000 süntaktiliselt, mida ettevõtja on kohustatud olemas kuskil 175 00:09:35,000 --> 00:09:38,000 sees scanf rakendamise, nii et scanf 176 00:09:38,000 --> 00:09:42,000 saab tegelikult kirjutada number 2 selle aadressi? 177 00:09:42,000 --> 00:09:44,000 Jah, nii *. 178 00:09:44,000 --> 00:09:47,000 Tuletame meelde, et * Meie dereference operaator, mis tähendab sisuliselt seda sinna minna. 179 00:09:47,000 --> 00:09:50,000 >> Kui olete antud ettevõttele aadress, nagu see siin, 180 00:09:50,000 --> 00:09:53,000 scanf on ilmselt-kui me tegelikult vaatasin ringi oma lähtekoodi- 181 00:09:53,000 --> 00:09:59,000 teeb * x või samaväärne tegelikult minna sellele aadressile ja panna mõned raha olemas. 182 00:09:59,000 --> 00:10:02,000 Nüüd on vaja teada kui scanf saab sisend klaviatuur, 183 00:10:02,000 --> 00:10:04,000 me laine oma käsi välja täna. 184 00:10:04,000 --> 00:10:07,000 Oletame, et operatsioonisüsteem võimaldab sscanf rääkida 185 00:10:07,000 --> 00:10:11,000 kasutaja klaviatuur, kuid siinkohal nüüd kooskõlas 19. 186 00:10:11,000 --> 00:10:14,000 kui me lihtsalt välja printida x näib, et antud juhul 187 00:10:14,000 --> 00:10:17,000 et scanf on pannud int X. 188 00:10:17,000 --> 00:10:19,000 See on täpselt, kuidas scanf töötab, ja meenutada möödunud nädalal 189 00:10:19,000 --> 00:10:25,000 see on täpselt, kuidas getString ja GetInt ja oma teiste pere funktsioonid 190 00:10:25,000 --> 00:10:28,000 lõpuks töötab, kuigi veidi dispersioon nagu sscanf, 191 00:10:28,000 --> 00:10:31,000 mis tähendab skaneerida stringi asemel klaviatuuri. 192 00:10:31,000 --> 00:10:33,000 Aga võtame pilk veidi vastuolus käesoleva. 193 00:10:33,000 --> 00:10:37,000 Aastal scanf2, ma tegelikult silmamunad. 194 00:10:37,000 --> 00:10:42,000 Mis on valesti ja ma varjata kommentaar, mis seletab nii palju- 195 00:10:42,000 --> 00:10:47,000 Mis on valesti selle programmi versioon 2? 196 00:10:47,000 --> 00:10:55,000 Ole nii tehnilise kui võimalik seekord. 197 00:10:55,000 --> 00:10:57,000 Tundub päris hea. 198 00:10:57,000 --> 00:11:03,000 See on kenasti liigendatud, kuid- 199 00:11:03,000 --> 00:11:07,000 Olgu, kuidas olgem ploomi see allapoole lühem küsimusi? 200 00:11:07,000 --> 00:11:17,000 Line 16. Mis on line 16 teed täpne, kuid tehniline inglise keelt? 201 00:11:17,000 --> 00:11:20,000 Kuidas veidi ebamugav. Jah, Michael. 202 00:11:20,000 --> 00:11:25,000 [Student] See osutab esimene täht string. 203 00:11:25,000 --> 00:11:27,000 >> Okei, lähedal. Las ma näpistama, et natuke. 204 00:11:27,000 --> 00:11:33,000 Osutades esimene täht string, siis kuulutame muutuja nimega puhver 205 00:11:33,000 --> 00:11:36,000 mis suunavad esimese aadress string, 206 00:11:36,000 --> 00:11:39,000 või pigem, mis suunavad täpsemalt char. 207 00:11:39,000 --> 00:11:42,000 Teade see ei ole tegelikult suunatud kuhugi, sest seal ei ole loovutamise operaator. 208 00:11:42,000 --> 00:11:46,000 Ei ole võrdusmärk, et kõik me teeme, on eraldades muutuja nimega puhver. 209 00:11:46,000 --> 00:11:49,000 See juhtub olema 32 bitti, sest see on pointer, 210 00:11:49,000 --> 00:11:52,000 ja sisu puhver ilmselt lõpuks 211 00:11:52,000 --> 00:11:57,000 sisaldab aadress char, kuid nüüd, mida see puhver sisaldab? 212 00:11:57,000 --> 00:11:59,000 Lihtsalt mõned võlts, kes teab, mõned prügi väärtus, 213 00:11:59,000 --> 00:12:03,000 sest me ei ole selgesõnaliselt käivitub see, et me ei tohiks endale midagi. 214 00:12:03,000 --> 00:12:06,000 Okei, nii et nüüd joon 17-mida see rida 17 teha? 215 00:12:06,000 --> 00:12:08,000 Võibolla see on soe see üles. 216 00:12:08,000 --> 00:12:10,000 Ta prindib string, eks? 217 00:12:10,000 --> 00:12:12,000 Ta prindib String palun. 218 00:12:12,000 --> 00:12:15,000 >> Rida 18 on kuidagi tuttav nüüd, et me just nägime vastuolus käesoleva 219 00:12:15,000 --> 00:12:18,000 kuid erineva vormi koodi, nii et liin 18, 220 00:12:18,000 --> 00:12:23,000 Me ütleme scanf siin on aadress patakas mälu. 221 00:12:23,000 --> 00:12:27,000 Ma tahan, et sa helisema string, nagu võiks eeldada% s, 222 00:12:27,000 --> 00:12:32,000 kuid probleem on selles, et me ei ole teinud paar asja siin. 223 00:12:32,000 --> 00:12:35,000 Mis on üks probleemidest? 224 00:12:35,000 --> 00:12:38,000 [Student] Ta püüab dereference nullviida. 225 00:12:38,000 --> 00:12:41,000 Hea, null või lihtsalt muidu teadmata suunanäitajaks. 226 00:12:41,000 --> 00:12:45,000 Sa teisaldus scanf aadress, kuid sa lihtsalt ütles hetk tagasi 227 00:12:45,000 --> 00:12:49,000 et see on aadress on mõned prügi väärtus, sest me tegelikult ei anna see midagi, 228 00:12:49,000 --> 00:12:53,000 ja nii sa räägid scanf tõhusalt minema panna stringi siin, 229 00:12:53,000 --> 00:12:56,000 kuid me ei tea, kus siin veel on, 230 00:12:56,000 --> 00:12:59,000 nii et me ei ole tegelikult eraldatud mälu puhver. 231 00:12:59,000 --> 00:13:03,000 Lisaks, mida sa ka ei ole isegi öelnud scanf? 232 00:13:03,000 --> 00:13:06,000 Oletame, et see oli patakas mälu, ja see ei olnud prügi väärtus, 233 00:13:06,000 --> 00:13:09,000 kuid sa ikka ei ütle scanf midagi olulist. 234 00:13:09,000 --> 00:13:12,000 [Student] Kui see tegelikult on, ampersand. 235 00:13:12,000 --> 00:13:15,000 Ampersand, nii sel juhul, see on okei. 236 00:13:15,000 --> 00:13:18,000 Sest puhver on juba deklareeritud pointer 237 00:13:18,000 --> 00:13:22,000 koos * tükk süntaks, meil ei ole vaja kasutada ampersand 238 00:13:22,000 --> 00:13:25,000 sest see on juba aadress, kuid ma arvan, et ma kuulsin seda siin. 239 00:13:25,000 --> 00:13:27,000 [Student] Kui suur see on? 240 00:13:27,000 --> 00:13:29,000 Hea, et me ei räägi scanf kui suur see puhver on, 241 00:13:29,000 --> 00:13:32,000 mis tähendab, isegi kui puhver oli pointer, 242 00:13:32,000 --> 00:13:35,000 me ütleme scanf, pane nöör siin, 243 00:13:35,000 --> 00:13:38,000 kuid siin võiks olla 2 baiti, see võiks olla 10 baiti, see võiks olla megabaidi. 244 00:13:38,000 --> 00:13:41,000 Scanf pole aimugi, ja kuna see on patakas mälu 245 00:13:41,000 --> 00:13:43,000 arvatavasti, see ei ole string veel. 246 00:13:43,000 --> 00:13:48,000 See on ainult stringi kui sa kirjutada märke ja \ 0 et patakas mälu. 247 00:13:48,000 --> 00:13:51,000 Nüüd on vaid mõned patakas mälu. 248 00:13:51,000 --> 00:13:55,000 Scanf ei tea, millal lõpetada kirjalikult, et aadress. 249 00:13:55,000 --> 00:13:59,000 >> Kui te mäletate mõned näited viimase, kus ma juhuslikult tipitud klaviatuuri 250 00:13:59,000 --> 00:14:03,000 üritab ülevoolu puhver, ja me rääkisime reedel umbes just nii. 251 00:14:03,000 --> 00:14:07,000 Kui vastane kuidagi süstib oma programmi palju suurem sõna 252 00:14:07,000 --> 00:14:10,000 või lause või fraas siis ootasid saab ületatud 253 00:14:10,000 --> 00:14:13,000 patakas mälu, mis võib olla halbu tagajärgi, 254 00:14:13,000 --> 00:14:15,000 nagu võttes kogu programm ise. 255 00:14:15,000 --> 00:14:17,000 Meil on vaja määrata see kuidagi. 256 00:14:17,000 --> 00:14:20,000 Lubage mul välja suumida ja lähevad versioon 3 on see programm. 257 00:14:20,000 --> 00:14:22,000 See on natuke parem. 258 00:14:22,000 --> 00:14:24,000 Selles versioonis, märka erinevust. 259 00:14:24,000 --> 00:14:27,000 Kooskõlas 16, ma olen jälle kuulutab muutuja nimega puhver, 260 00:14:27,000 --> 00:14:29,000 aga mis siis nüüd? 261 00:14:29,000 --> 00:14:33,000 See on array 16. tähemärki. 262 00:14:33,000 --> 00:14:36,000 See on hea, sest see tähendab ma saan nüüd öelda scanf 263 00:14:36,000 --> 00:14:39,000 siin on tegelik patakas mälu. 264 00:14:39,000 --> 00:14:42,000 Te saate peaaegu mõelda massiivid nagu oleks osuti nüüd, 265 00:14:42,000 --> 00:14:44,000 kuigi nad ei ole tegelikult samaväärne. 266 00:14:44,000 --> 00:14:47,000 Nad käituvad erinevalt erinevates kontekstides. 267 00:14:47,000 --> 00:14:50,000 Aga see on kindlasti nii, et puhver on viitamine 268 00:14:50,000 --> 00:14:53,000 16 külgnevas tähemärki sest see on, mida massiiv on 269 00:14:53,000 --> 00:14:55,000 ja on nüüd mõne nädala jooksul. 270 00:14:55,000 --> 00:14:59,000 >> Siin ma räägin scanf siin on patakas mälu. 271 00:14:59,000 --> 00:15:01,000 Seekord see on tegelikult tüki mälu, 272 00:15:01,000 --> 00:15:07,000 kuid miks on see programm ikka kasutatavuse? 273 00:15:07,000 --> 00:15:11,000 Mis viga ikka? 274 00:15:11,000 --> 00:15:14,000 Ma olen öelnud mulle 16 baiti vaid- 275 00:15:14,000 --> 00:15:16,000 [Student] Mis siis kui nad kirjuta rohkem kui 16? 276 00:15:16,000 --> 00:15:20,000 Täpselt, mis siis, kui kasutaja liigid 17 tähemärki või 1700 tähemärki? 277 00:15:20,000 --> 00:15:23,000 Tegelikult vaatame, kui me ei saa komistada seda viga nüüd. 278 00:15:23,000 --> 00:15:25,000 On parem, kuid mitte täiuslik. 279 00:15:25,000 --> 00:15:28,000 Lubage mul minna ja joosta teha scanf3 koostada selle programmi. 280 00:15:28,000 --> 00:15:34,000 Ma jooksen scanf3, String palun: tere, ja me ilmselt kõik korras. 281 00:15:34,000 --> 00:15:37,000 Las ma proovin veidi pikem, Tere. 282 00:15:37,000 --> 00:15:42,000 Okei, teeme Tere, kuidas sul täna, Enter. 283 00:15:42,000 --> 00:15:54,000 Kuidas selline õnnelik siin, ütleme Tere kuidas läheb. 284 00:15:54,000 --> 00:15:56,000 Kurat. 285 00:15:56,000 --> 00:16:03,000 Okei, nii et meil vedas. Vaatame, kas me ei saa seda parandada. 286 00:16:03,000 --> 00:16:06,000 Ei, see ei lase mind kopeerida. 287 00:16:06,000 --> 00:16:09,000 Proovime seda uuesti. 288 00:16:09,000 --> 00:16:12,000 Olgu, valmis olla. 289 00:16:12,000 --> 00:16:20,000 Eks näis, kui kaua ma ei pretendeeri keskenduma samas teevad seda. 290 00:16:20,000 --> 00:16:23,000 Kurat. See on pigem sobiv, tegelikult. 291 00:16:23,000 --> 00:16:26,000 Nii juba läheb. 292 00:16:26,000 --> 00:16:30,000 Point tehtud. 293 00:16:30,000 --> 00:16:34,000 >> See, piinlik küll see ka on, see on ka üks allikatest suur segadus 294 00:16:34,000 --> 00:16:38,000 kirjutamise ajal programme, mis on vigu, sest nad avalduvad 295 00:16:38,000 --> 00:16:40,000 ainult üks kord samal ajal mõnikord. 296 00:16:40,000 --> 00:16:43,000 Reaalsus on see, et isegi kui teie kood on täiesti katki, 297 00:16:43,000 --> 00:16:46,000 see võib ainult täiesti katki kord samal ajal 298 00:16:46,000 --> 00:16:49,000 sest mõnikord sisuliselt mis juhtub on operatsioonisüsteem eraldab 299 00:16:49,000 --> 00:16:52,000 natuke rohkem mälu kui sa tegelikult vaja mingil põhjusel 300 00:16:52,000 --> 00:16:57,000 ja nii et keegi teine ​​kasutab mälu kohe pärast oma patakas 16 märki, 301 00:16:57,000 --> 00:17:01,000 nii et kui te lähete 17, 18, 19, mis iganes, see ei ole nii suur asi. 302 00:17:01,000 --> 00:17:04,000 Nüüd arvuti, isegi kui see ei ole viga selles punktis, 303 00:17:04,000 --> 00:17:09,000 võib lõpuks kasutada baidi number 17 või 18 või 19 midagi muud, 304 00:17:09,000 --> 00:17:14,000 mille ületamisel oma andmed, et sa paned sinna, kuigi liiga pikk, 305 00:17:14,000 --> 00:17:18,000 ei hakka kirjutatakse potentsiaalselt mõne muu funktsiooni. 306 00:17:18,000 --> 00:17:21,000 See ei ole tingimata positiivsed jääma puutumata, 307 00:17:21,000 --> 00:17:23,000 kuid see ei pruugi põhjustada SEG süü. 308 00:17:23,000 --> 00:17:26,000 Aga sel juhul, ma lõpuks ette piisavalt tähemärki 309 00:17:26,000 --> 00:17:29,000 et ma sisuliselt ületas minu segment mälu, ja bam, 310 00:17:29,000 --> 00:17:33,000 operatsioonisüsteemi ütles: "Vabandust, et pole hea, killustatust süü." 311 00:17:33,000 --> 00:17:38,000 >> Ja vaatame nüüd, kui see, mis jääb siin minu kataloog- 312 00:17:38,000 --> 00:17:40,000 märgata, et mul on see fail siin, tuum. 313 00:17:40,000 --> 00:17:42,000 Pange tähele, et see on taas kutsutud krahh tabab. 314 00:17:42,000 --> 00:17:46,000 See on sisuliselt fail, mis sisaldab sisu oma programmi mällu 315 00:17:46,000 --> 00:17:48,000 kohas, kus ta kukkus, 316 00:17:48,000 --> 00:17:51,000 ja lihtsalt proovida veidi näide lase mul minna siin 317 00:17:51,000 --> 00:17:57,000 ja joosta gdb kohta scanf3 ja seejärel määrata kolmas argument nimega tuum, 318 00:17:57,000 --> 00:18:01,000 ja teate siin, et kui lisan koodi, 319 00:18:01,000 --> 00:18:06,000 me suutma nagu tavaliselt koos gdb alustada jalgsi läbi selle programmi, 320 00:18:06,000 --> 00:18:10,000 ja ma saan käivitada see ja niipea, kui ma tabanud-nagu samm käsk gdb- 321 00:18:10,000 --> 00:18:13,000 niipea kui ma tabanud potentsiaalselt lollakas rida pärast kirjutama tohutu jada, 322 00:18:13,000 --> 00:18:16,000 Ma saaks tegelikult tuvastada siit. 323 00:18:16,000 --> 00:18:19,000 Veel selle, kuigi punktis poolest tuum puistab 324 00:18:19,000 --> 00:18:22,000 ja meeldib nii, et saate tegelikult tuhnima sees krahh tabab 325 00:18:22,000 --> 00:18:27,000 ja vaata mida line programm sind alt vedanud. 326 00:18:27,000 --> 00:18:32,000 Kõik küsimused siis suunanäitajaks ja aadressid? 327 00:18:32,000 --> 00:18:36,000 Sest täna me ei kavatse hakata võtma enesestmõistetavana, et need asjad on olemas 328 00:18:36,000 --> 00:18:40,000 ja me teame täpselt, mida nad on. 329 00:18:40,000 --> 00:18:42,000 Jah. 330 00:18:42,000 --> 00:18:46,000 >> [Student] Miks sa ei pea panna märk kõrval osa- 331 00:18:46,000 --> 00:18:48,000 Hea küsimus. 332 00:18:48,000 --> 00:18:51,000 Miks ma ei pea panna märk kõrval iseloomu array nagu mina tegin varem 333 00:18:51,000 --> 00:18:53,000 enamik meie näiteid? 334 00:18:53,000 --> 00:18:55,000 Lühike vastus on, massiivid on veidi eriline. 335 00:18:55,000 --> 00:18:59,000 Te saate peaaegu arvan puhver kui tegelikult on aadress, 336 00:18:59,000 --> 00:19:03,000 ja see just nii juhtub olema nii, et nurksulg märke 337 00:19:03,000 --> 00:19:06,000 on mugavuse nii et me saame minna sulg 0, 1 rühma, 338 00:19:06,000 --> 00:19:10,000 Rühma 2, ilma et peaksid kasutama * märke. 339 00:19:10,000 --> 00:19:13,000 See on natuke hädavale sest massiivid ja viiteid 340 00:19:13,000 --> 00:19:17,000 on tegelikult natuke teistsugune, kuid need võivad sageli, kuid mitte alati kasutada sünonüümidena. 341 00:19:17,000 --> 00:19:21,000 Ühesõnaga, kui funktsioon ootab kursor patakas mälu, 342 00:19:21,000 --> 00:19:24,000 võite edastada see aadress, mis tagastati malloc, 343 00:19:24,000 --> 00:19:29,000 ja me näeme malloc uuesti enne pikk, või saate andke seda nime massiivi. 344 00:19:29,000 --> 00:19:32,000 Sa ei pea tegema ampersand massiivid, sest nad on juba 345 00:19:32,000 --> 00:19:34,000 sisuliselt nagu aadressid. 346 00:19:34,000 --> 00:19:36,000 See on üks erand. 347 00:19:36,000 --> 00:19:39,000 Nurksulgudes need erilist. 348 00:19:39,000 --> 00:19:41,000 >> Kas paned märgi kõrval puhver? 349 00:19:41,000 --> 00:19:43,000 Mitte selles asjas. 350 00:19:43,000 --> 00:19:46,000 See ei tööta, sest jällegi, selle nurga korral 351 00:19:46,000 --> 00:19:49,000 kus massiivid ei ole päris tegelikult aadresse. 352 00:19:49,000 --> 00:19:54,000 Aga me võib-olla tagasi tulla, et enne pikka teiste näidetega. 353 00:19:54,000 --> 00:19:56,000 Proovime lahendada probleem. 354 00:19:56,000 --> 00:20:00,000 Meil on andmestruktuur, et oleme kasutanud juba mõnda aega tuntud kui massiiv. 355 00:20:00,000 --> 00:20:02,000 Asjas, seda me lihtsalt pidin. 356 00:20:02,000 --> 00:20:04,000 Aga massiivid on mõned plussid ja miinused. 357 00:20:04,000 --> 00:20:06,000 Massiivid on kena, miks? 358 00:20:06,000 --> 00:20:11,000 Mis on üks asi, mis sulle meeldib-ulatuses soovite massiivid-umbes massiivid? 359 00:20:11,000 --> 00:20:13,000 Mis mugav nendega on? Mis on kaalukad? 360 00:20:13,000 --> 00:20:18,000 Miks me tutvustada neid üldse? 361 00:20:18,000 --> 00:20:20,000 Jah. 362 00:20:20,000 --> 00:20:27,000 [Student] Neid saab salvestada palju andmeid, ja sa ei pea kasutama kogu asi. 363 00:20:27,000 --> 00:20:29,000 Võite kasutada jagu. 364 00:20:29,000 --> 00:20:32,000 Hea, massiivi saab salvestada palju andmeid, 365 00:20:32,000 --> 00:20:35,000 ja sa ei pea kasutama kõiki see, et saaksite overallocate, 366 00:20:35,000 --> 00:20:39,000 mis võiks olla mugav, kui te ei tea ette, kui palju midagi oodata. 367 00:20:39,000 --> 00:20:41,000 >> GetString on suurepärane näide. 368 00:20:41,000 --> 00:20:44,000 GetString, kirjutada meile, pole aimugi, kui palju tähemärki oodata, 369 00:20:44,000 --> 00:20:48,000 nii et saame eraldada tükkideks sidusmäluplokki on hea. 370 00:20:48,000 --> 00:20:51,000 Massiivid ka lahendada probleemi nägime paar nädalat tagasi nüüd 371 00:20:51,000 --> 00:20:54,000 kus oma koodi hakkab vaimule midagi väga halvasti projekteeritud. 372 00:20:54,000 --> 00:20:57,000 Tuletame meelde, et olen loonud õpilane struktuuri nimetatakse David, 373 00:20:57,000 --> 00:21:00,000 ja siis see oli tegelikult alternatiiv, kuigi 374 00:21:00,000 --> 00:21:04,000 võttes muutuja nimega nimi ja teise muutuja nimega, ma arvan, maja, 375 00:21:04,000 --> 00:21:08,000 ja teise muutuja nimega ID, sest seda lugu ma siis tahtnud midagi muud 376 00:21:08,000 --> 00:21:11,000 nagu Rob võetud programm, nii siis otsustasin oota üks hetk, 377 00:21:11,000 --> 00:21:13,000 Mul on vaja ümber nimetada need muutujad. 378 00:21:13,000 --> 00:21:16,000 Kutsume kaevanduse NAME1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Kutsume Rob nimi2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Aga siis oota natuke, kuidas Tommy? 381 00:21:22,000 --> 00:21:24,000 Siis oli meil veel kolm muutujat. 382 00:21:24,000 --> 00:21:27,000 Me tutvustas keegi teine, neljal muutujad. 383 00:21:27,000 --> 00:21:30,000 Maailm hakkas saada räpane väga kiiresti, 384 00:21:30,000 --> 00:21:33,000 nii et me tutvustas structs, ja mis mõjuvad umbes struct? 385 00:21:33,000 --> 00:21:39,000 Mis C struct lase sul teha? 386 00:21:39,000 --> 00:21:42,000 See on tõesti ebamugav täna. 387 00:21:42,000 --> 00:21:44,000 Mida? >> [Kuuldamatu õpilase vastus] 388 00:21:44,000 --> 00:21:47,000 Jah, just, typedef võimaldab teil luua uus andmetüüp, 389 00:21:47,000 --> 00:21:51,000 ja struktuure, struct märksõna, saab kapseldada 390 00:21:51,000 --> 00:21:54,000 kontseptuaalselt seotud tükki andmeid koos 391 00:21:54,000 --> 00:21:56,000 ja seejärel kutsume neid midagi üliõpilane. 392 00:21:56,000 --> 00:21:58,000 >> See oli hea, sest nüüd saame modelleerida 393 00:21:58,000 --> 00:22:03,000 palju omamoodi põhimõtteliselt samad mõiste üliõpilane muutuja 394 00:22:03,000 --> 00:22:07,000 mitte meelevaldselt võttes üks string, üks ID ja nii edasi. 395 00:22:07,000 --> 00:22:10,000 Massiivid on tore, sest nad võimaldavad meil alustada puhastamisega meie kood. 396 00:22:10,000 --> 00:22:13,000 Aga milline on negatiivsed nüüd massiivi? 397 00:22:13,000 --> 00:22:15,000 Mida saab mitte teha? Jah. 398 00:22:15,000 --> 00:22:17,000 [Student] Sa pead teadma, kui suur see on. 399 00:22:17,000 --> 00:22:19,000 Sa pead teadma, kui suur see on, nii see on selline valu. 400 00:22:19,000 --> 00:22:21,000 Neile, kellel eelnev programmeerimise kogemus teame, et palju keeli, 401 00:22:21,000 --> 00:22:24,000 nagu Java, võite küsida tüki mälu, konkreetselt massiiv, 402 00:22:24,000 --> 00:22:28,000 kui suur sa oled, pikkus, kinnisvara, nii et rääkida, ja see on tõesti mugav. 403 00:22:28,000 --> 00:22:32,000 C, siis ei saa isegi helistada strlen üldistel massiivi 404 00:22:32,000 --> 00:22:35,000 sest strlen, kuna sõna tähendab, on ainult stringe, 405 00:22:35,000 --> 00:22:39,000 ja saate aru saada, pikkus string, sest see inimeste konventsiooni 406 00:22:39,000 --> 00:22:43,000 võttes \ 0, kuid massiivi, rohkem üldmõistena, on vaid patakas mälu. 407 00:22:43,000 --> 00:22:46,000 Kui see on massiiv ints, seal ei kavatse olla mõned erimärgi 408 00:22:46,000 --> 00:22:48,000 aasta lõpus ootab sind. 409 00:22:48,000 --> 00:22:50,000 Te peate meeles pidama pikkus massiivi. 410 00:22:50,000 --> 00:22:54,000 Teine negatiivne külg massiivi kasvatatud oma pea getString ise. 411 00:22:54,000 --> 00:22:59,000 Mis on teine ​​negatiivne külg massiivi? 412 00:22:59,000 --> 00:23:01,000 Sir, ainult sina ja mina täna. 413 00:23:01,000 --> 00:23:04,000 [Kuuldamatu õpilase vastus] >> See on see mida? 414 00:23:04,000 --> 00:23:06,000 See on deklareeritud pinu. 415 00:23:06,000 --> 00:23:09,000 Okei, deklareeritud pinu. Miks sa ei meeldi? 416 00:23:09,000 --> 00:23:13,000 [Student] sest see läheb uuesti. 417 00:23:13,000 --> 00:23:15,000 Läheb uuesti. 418 00:23:15,000 --> 00:23:18,000 Okei, kui te kasutada massiivi eraldada mälu, 419 00:23:18,000 --> 00:23:21,000 sa ei saa näiteks tagasi, sest see on edasi pinu. 420 00:23:21,000 --> 00:23:23,000 Okei, see on kahjuks. 421 00:23:23,000 --> 00:23:25,000 Ja kuidas üks teine ​​massiiv? 422 00:23:25,000 --> 00:23:28,000 Kui sa jaotada see, et sa oled selline kruvitud, kui vajate rohkem ruumi 423 00:23:28,000 --> 00:23:30,000 kui massiiv on. 424 00:23:30,000 --> 00:23:34,000 >> Siis tutvustasime, mäletate, malloc, mis andis meile võime dünaamiliselt mälu eraldada. 425 00:23:34,000 --> 00:23:37,000 Aga kui me püüdsime erinevate maailma kokku? 426 00:23:37,000 --> 00:23:40,000 Mis siis, kui me tahtsime lahendada paar neist probleemidest 427 00:23:40,000 --> 00:23:45,000 nii me selle asemel, minu pliiats on magama jäänud siin- 428 00:23:45,000 --> 00:23:51,000 Mis siis, kui me selle asemel tahtis sisuliselt luua maailma, mis on enam niimoodi? 429 00:23:51,000 --> 00:23:56,000 See on massiiv, ja muidugi selline halveneb kui me tabas lõpuks massiiv, 430 00:23:56,000 --> 00:24:00,000 ja ma nüüd ei pea enam ruumi veel täisarv või teise iseloomu. 431 00:24:00,000 --> 00:24:03,000 Mis siis, kui me justkui ennetavalt öelda ka, miks me ei puhata 432 00:24:03,000 --> 00:24:07,000 see nõue, et kõik need tükkideks mälu olema kõrvuti seljad, 433 00:24:07,000 --> 00:24:10,000 ja miks mitte, kui mul on vaja int või char, 434 00:24:10,000 --> 00:24:12,000 anna mulle ruumi üks neist? 435 00:24:12,000 --> 00:24:14,000 Ja kui mul on veel vaja, anna mulle veel üks ruum, 436 00:24:14,000 --> 00:24:16,000 ja kui mul on veel vaja, anna mulle veel ruumi. 437 00:24:16,000 --> 00:24:19,000 Ära, mis nüüd on, et kui keegi teine 438 00:24:19,000 --> 00:24:21,000 võtab mälu siin, pole hullu. 439 00:24:21,000 --> 00:24:25,000 Ma võtan selle täiendava patakas mälu siin ja siis see üks. 440 00:24:25,000 --> 00:24:28,000 >> Nüüd, ainult saagi siin selles, et peaaegu tundub, nagu mul on 441 00:24:28,000 --> 00:24:30,000 terve hunnik erinevaid muutujaid. 442 00:24:30,000 --> 00:24:33,000 See tunne on viie erineva muutujad potentsiaalselt. 443 00:24:33,000 --> 00:24:36,000 Aga kui me varastada idee stringid 444 00:24:36,000 --> 00:24:41,000 millega me kuidagi siduda need asjad kokku kontseptuaalselt, ja mis siis, kui ma tegin seda? 445 00:24:41,000 --> 00:24:44,000 See on minu väga halvasti koostatud nool. 446 00:24:44,000 --> 00:24:46,000 Aga oletame, et kõik need tükkideks mälu 447 00:24:46,000 --> 00:24:52,000 osutas teisele ning see kutt, kes ei ole vend et tal on õigus, 448 00:24:52,000 --> 00:24:54,000 ei ole sellist nool. 449 00:24:54,000 --> 00:24:56,000 See on tegelikult see, mida nimetatakse seotud nimekirja. 450 00:24:56,000 --> 00:25:00,000 See on uus andmestruktuur, mis lubab meil eraldada tüki mälu, 451 00:25:00,000 --> 00:25:03,000 siis teine, siis teine, siis teine, iga kord kui me tahame 452 00:25:03,000 --> 00:25:07,000 jooksul programmi, ja me mäletame, et nad on kõik kuidagi seotud 453 00:25:07,000 --> 00:25:11,000 sõna otseses mõttes Aheldamise need kokku ja me tegime seda piltlikult siin noolega. 454 00:25:11,000 --> 00:25:15,000 Aga kood, mis oleks mehhanism, mille kaudu sa võiksid kuidagi ühendada, 455 00:25:15,000 --> 00:25:20,000 peaaegu nagu Scratch, üks patakas teise patakas? 456 00:25:20,000 --> 00:25:22,000 Me võiksime kasutada pointer, eks? 457 00:25:22,000 --> 00:25:25,000 Sest tõesti nool, mis läheb ülevalt vasakult ruut, 458 00:25:25,000 --> 00:25:31,000 see kutt siin see võiks sisaldada sees see ruut 459 00:25:31,000 --> 00:25:34,000 mitte ainult mõned ints, mitte ainult mõned char, kuid mis siis, kui ma tegelikult eraldatud 460 00:25:34,000 --> 00:25:37,000 natuke lisaruumi nii et nüüd, 461 00:25:37,000 --> 00:25:41,000 iga mu tükkideks mälu, kuigi see läheb mulle maksma, 462 00:25:41,000 --> 00:25:45,000 nüüd paistab pisut rohkem ristkülikukujuline kus üks mäluhulka 463 00:25:45,000 --> 00:25:47,000 kasutatakse mitmeid, nagu number 1, 464 00:25:47,000 --> 00:25:50,000 ja siis, kui see kutt salvestab number 2, 465 00:25:50,000 --> 00:25:52,000 see teine ​​patakas mälu kasutatakse nool, 466 00:25:52,000 --> 00:25:54,000 või konkreetsemalt, pointer. 467 00:25:54,000 --> 00:25:59,000 Ja arvan, et ma salvestada number 3 siin samas ma kasutan seda juhtida seda kutti, 468 00:25:59,000 --> 00:26:02,000 ja nüüd see mees, oletame, ma tahan ainult kolm sellist mäluhulka. 469 00:26:02,000 --> 00:26:05,000 Ma joonistan läbiv joon, et näitab null. 470 00:26:05,000 --> 00:26:07,000 Ei ole täiendavaid iseloomu. 471 00:26:07,000 --> 00:26:10,000 >> Tõepoolest, see on see, kuidas me saame minna rakendamisel 472 00:26:10,000 --> 00:26:12,000 midagi, mis kutsus seotud nimekirja. 473 00:26:12,000 --> 00:26:18,000 Seotud nimekirja on uus andmestruktuur, ja see on vahepealse poole 474 00:26:18,000 --> 00:26:21,000 palju Kasvataja andmestruktuurid et alustada probleemide lahendamiseks 475 00:26:21,000 --> 00:26:23,000 sarnaselt Facebook-tüüpi probleemide ja Google tüüpi probleeme 476 00:26:23,000 --> 00:26:26,000 kui sul on tohutu andmekogumid, ja see ei ole enam lõikab ta 477 00:26:26,000 --> 00:26:29,000 salvestada kõik contiguously ja kasutada midagi lineaarne otsing 478 00:26:29,000 --> 00:26:31,000 või isegi midagi binaarne otsing. 479 00:26:31,000 --> 00:26:33,000 Sa tahad veel parem töötab korda. 480 00:26:33,000 --> 00:26:37,000 Tegelikult üks Püha Grails me räägime hiljem sel nädalal või järgmisel 481 00:26:37,000 --> 00:26:41,000 on algoritm, kelle tööaeg on konstantne. 482 00:26:41,000 --> 00:26:44,000 Teisisõnu, see võtab alati sama ajaga ükskõik 483 00:26:44,000 --> 00:26:47,000 kui suur panus on, ja et oleks tõesti kaalukad, 484 00:26:47,000 --> 00:26:49,000 isegi rohkem kui midagi logaritmiline. 485 00:26:49,000 --> 00:26:51,000 Mis see on ekraanil siin? 486 00:26:51,000 --> 00:26:55,000 Kõik ristkülikud on täpselt, mida ma just joonistasin käsitsi. 487 00:26:55,000 --> 00:26:59,000 Aga asi kogu tee vasakul on eriline muutuja. 488 00:26:59,000 --> 00:27:02,000 See saab olema üks pointer, kuna üks gotcha 489 00:27:02,000 --> 00:27:04,000 koos seotud nimekirja, kuna need asjad on kutsutud, 490 00:27:04,000 --> 00:27:09,000 on see, et sa pead riputada peale üks ots seotud nimekirja. 491 00:27:09,000 --> 00:27:13,000 >> Just nagu string, sa pead teadma, aadress algustäht. 492 00:27:13,000 --> 00:27:15,000 Sama lahendust lingitud nimekirjad. 493 00:27:15,000 --> 00:27:19,000 Sa pead teadma, aadress esimese tüki mälu 494 00:27:19,000 --> 00:27:25,000 sest sealt saab jõuda iga teine. 495 00:27:25,000 --> 00:27:27,000 Negatiivne. 496 00:27:27,000 --> 00:27:30,000 Mis hinnaga me maksame selle eest mitmekülgsus võttes dünaamiliselt 497 00:27:30,000 --> 00:27:34,000 suurt andmestruktuur, et kui me üldse vajame rohkem mälu, peen, 498 00:27:34,000 --> 00:27:37,000 lihtsalt eraldada veel üks patakas ja juhtida kursorit alates 499 00:27:37,000 --> 00:27:39,000 vana uus saba nimekirja? 500 00:27:39,000 --> 00:27:41,000 Jah. 501 00:27:41,000 --> 00:27:43,000 [Student] See võtab umbes kaks korda nii palju ruumi. 502 00:27:43,000 --> 00:27:45,000 See võtab kaks korda nii palju ruumi, nii et kindlasti negatiivne külg, ja me oleme näinud seda 503 00:27:45,000 --> 00:27:48,000 Miinuseks enne vahelise aja ja ruumi ja paindlikkust 504 00:27:48,000 --> 00:27:51,000 kus nüüd, me ei pea 32 bitti iga nende numbrid. 505 00:27:51,000 --> 00:27:57,000 Meil on tõesti vaja 64, 32 numbrit ja 32 pointer. 506 00:27:57,000 --> 00:27:59,000 Aga hei, Mul on 2 GB RAM. 507 00:27:59,000 --> 00:28:02,000 Lisades veel 32 bitti siin ja siin ei tundu, et suur ja lahendamiseks. 508 00:28:02,000 --> 00:28:05,000 Aga suure andmekogumi, siis kindlasti lisab kuni sõna otseses mõttes kaks korda nii palju. 509 00:28:05,000 --> 00:28:09,000 Mis on veel negatiivsed nüüd, või mis funktsioon me loobuma, 510 00:28:09,000 --> 00:28:12,000 kui me esindame nimekirjad asjad seotud nimekirja ja ei massiivi? 511 00:28:12,000 --> 00:28:14,000 [Student] Sa ei saa läbida seda tahapoole. 512 00:28:14,000 --> 00:28:16,000 Sa ei saa läbida seda tahapoole, nii et sa oled natuke kruvitud kui oled jalgsi 513 00:28:16,000 --> 00:28:19,000 vasakult paremale kasutades loop või samas loop 514 00:28:19,000 --> 00:28:21,000 ja siis sa mõistad, "Oh, ma tahan minna tagasi algusesse nimekirja." 515 00:28:21,000 --> 00:28:26,000 Sa ei saa, sest neid viiteid minna ainult vasakult paremale nagu nooled näitavad. 516 00:28:26,000 --> 00:28:29,000 >> Nüüd sa ei mäleta algust nimekirja teise muutuja, 517 00:28:29,000 --> 00:28:31,000 kuid see keerukus meeles pidada. 518 00:28:31,000 --> 00:28:35,000 Massiiv, ükskõik kui kaugele sa lähed, sa võid alati teha miinus miinus miinus miinus 519 00:28:35,000 --> 00:28:37,000 ja lähevad tagasi sinna, kust sa tulid. 520 00:28:37,000 --> 00:28:40,000 Mis Teine negatiivne külg? Jah. 521 00:28:40,000 --> 00:28:43,000 [Kuuldamatu õpilane küsimus] 522 00:28:43,000 --> 00:28:47,000 Sa võiksid, nii et sa oled tegelikult lihtsalt ettepanek andmestruktuur nimetatakse kahekordselt seotud nimekirja, 523 00:28:47,000 --> 00:28:50,000 ja tõesti, sa oleks lisada veel kursor iga ristkülik 524 00:28:50,000 --> 00:28:53,000 mis läheb teises suunas, tagurpidi millest 525 00:28:53,000 --> 00:28:55,000 Nüüd saate läbida edasi-tagasi, 526 00:28:55,000 --> 00:28:59,000 negatiivne külg, mis on nüüd te kasutate kolm korda rohkem mälu kui me harjunud 527 00:28:59,000 --> 00:29:04,000 ja ka keerulisemaks poolest kood teil on kirjutada, et saan seda paremale. 528 00:29:04,000 --> 00:29:08,000 Aga need on kõik võib-olla väga mõistlik kompromissidega, kui pöördumise on tähtsam. 529 00:29:08,000 --> 00:29:10,000 Jah. 530 00:29:10,000 --> 00:29:12,000 [Student] Sa ka ei saa 2D seotud nimekirja. 531 00:29:12,000 --> 00:29:16,000 Hea, siis ei saa tõesti 2D seotud nimekirja. 532 00:29:16,000 --> 00:29:18,000 Sa võiksid. See ei ole kaugeltki nii lihtne kui massiivi. 533 00:29:18,000 --> 00:29:21,000 Nagu massiiv, sa sulg, suletud sulg, sulg, suletud sulg, 534 00:29:21,000 --> 00:29:23,000 ja siis saaksin 2-mõõtmeline struktuur. 535 00:29:23,000 --> 00:29:26,000 Sa võiksid rakendada 2-mõõtmeline seotud nimekirja 536 00:29:26,000 --> 00:29:29,000 kui sa add-kui ettepanek-1/3 pointer kõik need asjad, 537 00:29:29,000 --> 00:29:34,000 ja kui sa mõtled teisele nimekiri tulevad sind 3D stiil 538 00:29:34,000 --> 00:29:40,000 alates ekraani meile kõigile, mis on lihtsalt üks kett mingisugune. 539 00:29:40,000 --> 00:29:45,000 Me võiksime seda teha, kuid see ei ole nii lihtne kui kirjutades sulg, square bracket. Jah. 540 00:29:45,000 --> 00:29:48,000 [Kuuldamatu õpilane küsimus] 541 00:29:48,000 --> 00:29:50,000 Hea, et see on tõeline kicker. 542 00:29:50,000 --> 00:29:54,000 >> Need algoritmid, et oleme pined üle, nagu oh, binaarne otsing, 543 00:29:54,000 --> 00:29:57,000 saate otsida massiivi numbrid laual 544 00:29:57,000 --> 00:30:01,000 või telefoniraamatust nii palju kiiremini, kui te kasutate jaga ja valitse 545 00:30:01,000 --> 00:30:05,000 ja binaarne otsing algoritm, kuid Kahendotsingupuu vaja kahte eeldust. 546 00:30:05,000 --> 00:30:09,000 Üks, et andmed on järjestatud. 547 00:30:09,000 --> 00:30:11,000 Nüüd saame ilmselt hoida seda sorteeritud, 548 00:30:11,000 --> 00:30:14,000 nii et võibolla see ei ole probleem, kuid Kahendotsingupuu ka eeldada 549 00:30:14,000 --> 00:30:18,000 et sul oli ligi pääsema nimekiri numbrid, 550 00:30:18,000 --> 00:30:21,000 ja array võimaldab teil ligi pääsema ning muutmälu, 551 00:30:21,000 --> 00:30:24,000 Ma mõtlen, kui sa oled antud massiiv, kui palju aega see võtab teid 552 00:30:24,000 --> 00:30:26,000 saada sulg 0? 553 00:30:26,000 --> 00:30:29,000 Üks töö, sa lihtsalt kasutada [0] ja sa oled seal. 554 00:30:29,000 --> 00:30:33,000 Mitu sammu läheb aega, et saada asukoht 10? 555 00:30:33,000 --> 00:30:36,000 Üks samm, siis minge [10] ja sa oled seal. 556 00:30:36,000 --> 00:30:40,000 Seevastu kuidas sa saad 10. täisarv seotud nimekirja? 557 00:30:40,000 --> 00:30:42,000 Sa pead alustama alguses, sest sa oled ainult meeles 558 00:30:42,000 --> 00:30:45,000 aasta algusest seotud nimekirja, nagu string on meeles pidada, 559 00:30:45,000 --> 00:30:48,000 poolt aadressi oma algustäht ja leida, et 10. Väravavahi 560 00:30:48,000 --> 00:30:53,000 või et 10. iseloomu string, teil on otsida kogu kuraditki. 561 00:30:53,000 --> 00:30:55,000 >> Jällegi, me ei lahenda kõiki meie probleeme. 562 00:30:55,000 --> 00:31:00,000 Tutvustame Sulle uusi, aga see tõesti sõltub sellest, mida sa üritad disain. 563 00:31:00,000 --> 00:31:04,000 Seoses rakendamisel, saame laenata idee, et õpilane struktuur. 564 00:31:04,000 --> 00:31:07,000 Süntaks on väga sarnane, välja arvatud nüüd, idee on veidi abstraktsem 565 00:31:07,000 --> 00:31:09,000 kui maja ja nimi ja ID. 566 00:31:09,000 --> 00:31:13,000 Aga teen ettepaneku, et me võiks olla andmestruktuur C 567 00:31:13,000 --> 00:31:17,000 mida nimetatakse sõlme, kui viimane sõna slaid näitab, 568 00:31:17,000 --> 00:31:21,000 sees sõlm ja sõlme on lihtsalt üldine konteiner infotehnoloogia. 569 00:31:21,000 --> 00:31:25,000 See on tavaliselt joonistatud ring või ruut või ristkülik nagu me oleme teinud. 570 00:31:25,000 --> 00:31:27,000 Ja selles andmestruktuur, meil on int n, 571 00:31:27,000 --> 00:31:29,000 nii et see number ma tahan salvestada. 572 00:31:29,000 --> 00:31:36,000 Aga milline on see teine ​​rida, struct tipp * edasi? 573 00:31:36,000 --> 00:31:40,000 Miks on see õige, või mis rolli see asi mängida, 574 00:31:40,000 --> 00:31:42,000 kuigi see on veidi segasena esmapilgul? 575 00:31:42,000 --> 00:31:44,000 Jah. 576 00:31:44,000 --> 00:31:46,000 [Kuuldamatu õpilase vastus] 577 00:31:46,000 --> 00:31:50,000 Täpselt nii * omamoodi rikneb, et see on osuti mingisugune. 578 00:31:50,000 --> 00:31:53,000 Nime see osuti on omavoliliselt kõrval, 579 00:31:53,000 --> 00:32:00,000 kuid võinuks me seda kõike tahame, aga mida see osuti käsk? 580 00:32:00,000 --> 00:32:03,000 [Student] Teine sõlme. >> Täpselt, osutab ta teise sellise sõlme. 581 00:32:03,000 --> 00:32:05,000 >> Nüüd on see omamoodi uudishimu C. 582 00:32:05,000 --> 00:32:09,000 Tuletame meelde, et C on lugeda kompilaator ülevalt alla, vasakult paremale, 583 00:32:09,000 --> 00:32:13,000 mis tähendab kui-see on natuke erinev sellest, mida tegime koos üliõpilane. 584 00:32:13,000 --> 00:32:16,000 Kui me määratletud õpilane, me tegelikult ei pane sõna seal. 585 00:32:16,000 --> 00:32:18,000 See lihtsalt ütles typedef. 586 00:32:18,000 --> 00:32:20,000 Siis oli meil int id, String nimi, String maja, 587 00:32:20,000 --> 00:32:23,000 ja siis üliõpilane allosas struct. 588 00:32:23,000 --> 00:32:26,000 See deklaratsioon on veidi erinev, sest 589 00:32:26,000 --> 00:32:28,000 uuesti, C kompilaator on natuke tobe. 590 00:32:28,000 --> 00:32:30,000 See on ainult loen ülevalt alla, 591 00:32:30,000 --> 00:32:33,000 nii et kui ta jõuab 2. rida siin 592 00:32:33,000 --> 00:32:37,000 kus järgmine on deklareeritud ja ta näeb, oh, siin on muutuja nimega kõrval. 593 00:32:37,000 --> 00:32:39,000 See on kursor struct tipp. 594 00:32:39,000 --> 00:32:42,000 Kompilaator läheb mõistad, mida on struct tipp? 595 00:32:42,000 --> 00:32:44,000 Ma pole kunagi kuulnud seda asja enne, 596 00:32:44,000 --> 00:32:47,000 sest sõna sõlme muidu ei kuvata 597 00:32:47,000 --> 00:32:49,000 kuni põhja, seega on see ülearune. 598 00:32:49,000 --> 00:32:53,000 Sa pead ütlema struct tipp siin, mis saab siis lühendada hiljem 599 00:32:53,000 --> 00:32:56,000 tänu typedef siia alla, kuid selle põhjuseks on 600 00:32:56,000 --> 00:33:02,000 me viitamine struktuur ise sees struktuuri. 601 00:33:02,000 --> 00:33:05,000 See on üks gotcha seal. 602 00:33:05,000 --> 00:33:07,000 >> Mõned huvitavad probleemid hakkavad tekkima. 603 00:33:07,000 --> 00:33:09,000 Meil on nimekiri numbrid. Kuidas lisada see? 604 00:33:09,000 --> 00:33:11,000 Kuidas otsida seda? Kuidas kustutada seda? 605 00:33:11,000 --> 00:33:13,000 Eriti nüüd, et me peame hakkama kõiki neid viiteid. 606 00:33:13,000 --> 00:33:15,000 Sa arvasid, et osuti oli omamoodi Hallutsinatsioone 607 00:33:15,000 --> 00:33:17,000 kui sul oli üks neist lihtsalt üritan lugeda int ta. 608 00:33:17,000 --> 00:33:20,000 Nüüd on meil manipuleerida kogu nimekirja väärt. 609 00:33:20,000 --> 00:33:22,000 Miks me ei võta meie 5-minutilise pausi siin, ja siis me tuua 610 00:33:22,000 --> 00:33:34,000 mõned inimesed lavale teha just nii. 611 00:33:34,000 --> 00:33:36,000 >> C on palju lõbusam, kui ta on tegutsenud läbi. 612 00:33:36,000 --> 00:33:39,000 Kes oleks sõna otseses mõttes meeldib olla esimene? 613 00:33:39,000 --> 00:33:41,000 Okei, tulge siia. Olete esimene. 614 00:33:41,000 --> 00:33:44,000 Kes tahaks olla 9? Okei, 9. 615 00:33:44,000 --> 00:33:46,000 Kuidas umbes 9? 17? 616 00:33:46,000 --> 00:33:51,000 Väike kildkond siin. 22 ja 26, et esireas. 617 00:33:51,000 --> 00:33:53,000 Ja siis kuidas keegi seal on osutanud. 618 00:33:53,000 --> 00:33:57,000 Olete 34. Okei, 34, tulge siia. 619 00:33:57,000 --> 00:33:59,000 Esiteks on seal. Okei, kõik neli kutid. 620 00:33:59,000 --> 00:34:01,000 Ja kes me siis ütleme 9? 621 00:34:01,000 --> 00:34:04,000 Hetkel meie 9? 622 00:34:04,000 --> 00:34:07,000 Kes tõesti tahab olla 9? Olgu, tule, on 9. 623 00:34:07,000 --> 00:34:10,000 Läheb lahti. 624 00:34:10,000 --> 00:34:13,000 34, me sinuga kohtuda seal. 625 00:34:13,000 --> 00:34:17,000 Esimene osa on teha ise näeb välja selline. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, hea. 627 00:34:21,000 --> 00:34:25,000 Kui te ei saa seista välja, et pool, sest me ei kavatse malloc teile kohe. 628 00:34:25,000 --> 00:34:29,000 >> Hea, hea. 629 00:34:29,000 --> 00:34:32,000 Okei, väga hea, niiet küsida paar küsimust siin. 630 00:34:32,000 --> 00:34:34,000 Ja tegelikult, mis su nimi on? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, okei, tule siia. 632 00:34:37,000 --> 00:34:41,000 Anita ei aita meid omamoodi lahendada üks üsna lihtne küsimus esiteks, 633 00:34:41,000 --> 00:34:44,000 mis on, kuidas sa teada, kas raha on nimekirjas? 634 00:34:44,000 --> 00:34:48,000 Nüüd märkate, et esimene, keda esindab siin Lucas 635 00:34:48,000 --> 00:34:52,000 on natuke erinev, ja nii ta paberile on tahtlikult külili 636 00:34:52,000 --> 00:34:55,000 sest see ei ole päris nii pikk ja ei võta nii palju bitti, 637 00:34:55,000 --> 00:34:58,000 kuigi tehniliselt ta on sama suurusega paberile lihtsalt keerutada. 638 00:34:58,000 --> 00:35:01,000 Aga ta on veidi teistsugune, kuna ta on vaid 32-bitise pointer, 639 00:35:01,000 --> 00:35:05,000 ja kõik need kutid on 64 bitti, millest pool on number, millest pool on osuti. 640 00:35:05,000 --> 00:35:08,000 Aga osuti ei ole kujutatud, nii et kui te poisid võiks veidi kohmakalt 641 00:35:08,000 --> 00:35:12,000 kasutada oma vasaku käe juhtida tähelepanu inimene sinu kõrval. 642 00:35:12,000 --> 00:35:14,000 Ja sina oled number 34. Mis su nimi on? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, et tegelikult, hoidke paberit oma parema käe ja vasaku käe läheb otse alla. 645 00:35:19,000 --> 00:35:21,000 Te esindate null vasakul. 646 00:35:21,000 --> 00:35:24,000 >> Nüüd on meie inimeste pilt on väga järjekindel. 647 00:35:24,000 --> 00:35:26,000 See on tegelikult kuidas osuti tööta. 648 00:35:26,000 --> 00:35:29,000 Ja kui sa ei krigin natuke nii et ma ei ole oma teel. 649 00:35:29,000 --> 00:35:34,000 Anita siin, leia mind number 22, 650 00:35:34,000 --> 00:35:40,000 aga eeldada piirang ei inimeste hoidmine paberitükke, 651 00:35:40,000 --> 00:35:43,000 kuid see on nimekiri, ja sul on ainult Lucas alustada 652 00:35:43,000 --> 00:35:46,000 sest ta on sõna otseses mõttes esimene pointer. 653 00:35:46,000 --> 00:35:51,000 Oletame, et te ise ei pointer, ja et sa liiga on võime juhtida midagi. 654 00:35:51,000 --> 00:35:56,000 Miks sa ei alusta osutades täpselt, mida Lucas on osutavad? 655 00:35:56,000 --> 00:35:58,000 Hea ja lubage mul kehtestama seda läbi siin. 656 00:35:58,000 --> 00:36:04,000 Lihtsalt huvides arutelu, las ma tõmba tühi leht siin. 657 00:36:04,000 --> 00:36:06,000 Kuidas seda kirjutada oma nime? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Okei, Anita. 659 00:36:08,000 --> 00:36:18,000 Oletame sõlme * Anita = Lucas. 660 00:36:18,000 --> 00:36:22,000 Noh, me ei tohiks helistada Lucas. Me peaksime kutsuma teid esimesena. 661 00:36:22,000 --> 00:36:25,000 Miks see tegelikult kooskõlas reaalsus siin? 662 00:36:25,000 --> 00:36:27,000 Üks esimene on juba olemas. 663 00:36:27,000 --> 00:36:30,000 Esiteks on eraldatud arvatavasti kuskil siin. 664 00:36:30,000 --> 00:36:35,000 Sõlme * esimene, ja see on eraldatud nimekiri kuidagi. 665 00:36:35,000 --> 00:36:37,000 Ma ei tea, kuidas see juhtus. See juhtus enne klassi algust. 666 00:36:37,000 --> 00:36:40,000 See on seotud nimekirja inimestel on loodud. 667 00:36:40,000 --> 00:36:44,000 Ja nüüd siinkohal lugu-see kõik läheb Facebookis ilmselt hiljem- 668 00:36:44,000 --> 00:36:49,000 siinkohal lugu, Anita on lähtestatud olema võrdne esimese, 669 00:36:49,000 --> 00:36:51,000 mis ei tähenda, et Anita punkte Lucas. 670 00:36:51,000 --> 00:36:53,000 Pigem Ta juhib seda, mida ta osutab 671 00:36:53,000 --> 00:36:57,000 sest sama aadress, mis on seestpoolt Lucase 32 bitti - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 Nüüd on ka sees Anita 32 bitti - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Nüüd uuri 22. Kuidas te minna seda teed? 674 00:37:05,000 --> 00:37:07,000 Mis see on? >> Pointi iganes. 675 00:37:07,000 --> 00:37:11,000 Osutage iganes, nii et edasi minna ja tegutseda selle välja nii hästi kui võimalik siin. 676 00:37:11,000 --> 00:37:15,000 Hea, hea, ja nüüd sa viitaksid-mis su nimi on 22? 677 00:37:15,000 --> 00:37:18,000 Ramon. >> Ramon, nii Ramon hoiab kuni 22. 678 00:37:18,000 --> 00:37:20,000 Sul on nüüd tehtud kontroll. 679 00:37:20,000 --> 00:37:24,000 Kas Ramon == 22, ja kui on, siis näiteks me saame naasta tõsi. 680 00:37:24,000 --> 00:37:26,000 Lubage mul-samas need kutid siin seista mõnevõrra kohmakalt- 681 00:37:26,000 --> 00:37:32,000 las ma teen midagi kiiresti nagu bool leida. 682 00:37:32,000 --> 00:37:37,000 Ma lähen edasi minna ja öelda (node ​​* nimekirja, int n). 683 00:37:37,000 --> 00:37:39,000 Ma tulen kohe tagasi koos teiega. Ma lihtsalt pean kirjutama mingi kood. 684 00:37:39,000 --> 00:37:45,000 Ja nüüd ma lähen edasi minna ja teha seda, sõlme * Anita = nimekirja. 685 00:37:45,000 --> 00:37:51,000 Ja ma lähen edasi minna ja öelda, et kui (Anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> Metafoor siin muutub vähe venitatud, kuid samas (Anita! = NULL), mida ma tahan teha? 687 00:37:57,000 --> 00:38:03,000 Ma pean kuidagi viitamine 688 00:38:03,000 --> 00:38:05,000 täisarv, et Anita on osutavad. 689 00:38:05,000 --> 00:38:08,000 Varem, kui meil oli struktuure, mis sõlme on, 690 00:38:08,000 --> 00:38:11,000 me kasutasime dot märke, ja me ütleks midagi 691 00:38:11,000 --> 00:38:15,000 anita.n, kuid probleem on selles, et Anita ei ole struct iseenesest. 692 00:38:15,000 --> 00:38:17,000 Mis ta on? 693 00:38:17,000 --> 00:38:21,000 Ta on osuti, nii tõesti, kui me tahame seda kasutada dot märke- 694 00:38:21,000 --> 00:38:23,000 ja see läheb otsima sihilikult veidi segasena- 695 00:38:23,000 --> 00:38:28,000 me peame midagi tegema, nagu minema iganes Anita vasak käsi vastakuti 696 00:38:28,000 --> 00:38:31,000 ja siis saad Väli n. 697 00:38:31,000 --> 00:38:35,000 Anita on viit, aga mis on * Anita? 698 00:38:35,000 --> 00:38:38,000 Mida sa leida, kui lähete mida Anita on osutavad? 699 00:38:38,000 --> 00:38:42,000 Struct, sõlm ja sõlme, mäletate, on väli nimega n 700 00:38:42,000 --> 00:38:47,000 sest see on, meenutavad need 2 välja kõrval ja n 701 00:38:47,000 --> 00:38:50,000 et me nägime hetk tagasi siin. 702 00:38:50,000 --> 00:38:53,000 >> Et tegelikult imiteerida seda koodi, 703 00:38:53,000 --> 00:39:02,000 me võiks seda teha ja öelda if ((* Anita). n == n), n et ma otsin. 704 00:39:02,000 --> 00:39:04,000 Pange tähele, et funktsioon võeti vastu mitmeid ma hoolin. 705 00:39:04,000 --> 00:39:10,000 Siis ma saan minna ja teha midagi tagasi tõsi. 706 00:39:10,000 --> 00:39:12,000 Else, kui see ei ole, mida ma tahan teha? 707 00:39:12,000 --> 00:39:19,000 Kuidas tõlkida koodi mida Anita tegi seda intuitiivselt jalgsi läbi nimekirja? 708 00:39:19,000 --> 00:39:26,000 Mida ma peaksin tegema siin simuleerida Anita võttes, et samm vasakule, et samm vasakule? 709 00:39:26,000 --> 00:39:28,000 [Kuuldamatu õpilase vastus] >> Mis see on? 710 00:39:28,000 --> 00:39:30,000 [Kuuldamatu õpilase vastus] 711 00:39:30,000 --> 00:39:34,000 Hea, ei ole halb mõte, kuid varem, kui oleme seda teinud, oleme teinud Anita + + 712 00:39:34,000 --> 00:39:37,000 sest et lisaksin number 1, Anita, 713 00:39:37,000 --> 00:39:40,000 mis tavaliselt osutavad järgmisele inimesele, nagu Ramon, 714 00:39:40,000 --> 00:39:44,000 või isik tema kõrval, või tema kõrval inimene sätestatakse rida. 715 00:39:44,000 --> 00:39:49,000 Aga see ei ole päris hea siin, sest mida see asi välja nägema mälu? 716 00:39:49,000 --> 00:39:54,000 Mitte seda. Meil on keelata seda. 717 00:39:54,000 --> 00:40:00,000 See näeb välja selline mälu, ja kuigi olen juhtinud 1 ja 2 ja 3 lähestikku, 718 00:40:00,000 --> 00:40:03,000 kui me tõesti simuleerida see-Kas te poisid, samas rõhutades samal inimesi, 719 00:40:03,000 --> 00:40:07,000 saab mõned te võtate juhuslikult sammu tagasi, mõned teist juhuslik samm edasi? 720 00:40:07,000 --> 00:40:10,000 >> See jama on ikka seotud nimekirja, 721 00:40:10,000 --> 00:40:13,000 kuid need kutid võiks olla kuskil mälus, 722 00:40:13,000 --> 00:40:15,000 nii Anita + + ei kavatse töötada miks? 723 00:40:15,000 --> 00:40:19,000 Mis kell asukoha Anita + +? 724 00:40:19,000 --> 00:40:21,000 Kes teab. 725 00:40:21,000 --> 00:40:24,000 See on mingit muud väärtust, et just nii juhtub olema interposed 726 00:40:24,000 --> 00:40:28,000 kõigi nende sõlmede juhus, sest me ei kasuta massiivi. 727 00:40:28,000 --> 00:40:30,000 Me eraldatud kõik need sõlmed iseseisvalt. 728 00:40:30,000 --> 00:40:32,000 Okei, kui te võite puhastada ennast varundada. 729 00:40:32,000 --> 00:40:37,000 Las ma ettepaneku, et selle asemel, et Anita + +, me mitte teha Anita saab- 730 00:40:37,000 --> 00:40:42,000 Noh, miks me ei võiks minna mis iganes Anita on osutavad ja tehke. edasi? 731 00:40:42,000 --> 00:40:45,000 Teisisõnu, me läheme Ramon, kes hoiab arv 22, 732 00:40:45,000 --> 00:40:51,000 ja siis. kõrval on justkui Anita oleks kopeerimine vasaku käega osuti. 733 00:40:51,000 --> 00:40:54,000 Aga ta ei läheks kaugemale kui Ramon, sest me leidsime 22. 734 00:40:54,000 --> 00:40:56,000 Aga see oleks mõte. Nüüd on see Kalama jama. 735 00:40:56,000 --> 00:40:59,000 Ausalt, keegi ei mäleta seda süntaksit ja nii õnneks 736 00:40:59,000 --> 00:41:04,000 see on tegelikult natuke tahtlik-oh, sa tegelikult ei vaata, mida ma kirjutasin. 737 00:41:04,000 --> 00:41:08,000 See oleks selgem, kui sa saaksid. Voila! 738 00:41:08,000 --> 00:41:10,000 >> Kulisside taga, olin probleemi lahendamiseks nii. 739 00:41:10,000 --> 00:41:14,000 Anita, selle sammu vasakule, 740 00:41:14,000 --> 00:41:18,000 Esiteks, me minna aadress, et Anita on osutavad 741 00:41:18,000 --> 00:41:23,000 ja kui ta leiad mitte ainult n, mida me lihtsalt kontrollida võrdlus küll, 742 00:41:23,000 --> 00:41:25,000 aga sa leiad ka järgmine - sel juhul 743 00:41:25,000 --> 00:41:28,000 Ramon vasaku käega osutades järgmise sõlme nimekirja. 744 00:41:28,000 --> 00:41:32,000 Aga see on Kalama jama millele viitasin varem 745 00:41:32,000 --> 00:41:34,000 aga tuleb välja, C laseb meil seda lihtsustada. 746 00:41:34,000 --> 00:41:40,000 Selle asemel, et kirjalikult (* Anita), saame selle asemel lihtsalt kirjutada anita-> n, 747 00:41:40,000 --> 00:41:45,000 ja see on täpselt sama asi funktsionaalselt, kuid see on palju intuitiivsem, 748 00:41:45,000 --> 00:41:48,000 ja see on palju rohkem kooskõlas pilt, et oleme olnud joonistus 749 00:41:48,000 --> 00:41:50,000 Kogu selle aja jooksul, kasutades nooli. 750 00:41:50,000 --> 00:41:57,000 >> Lõpuks, mida me peame tegema lõpus selle programmiga? 751 00:41:57,000 --> 00:42:00,000 Seal on üks rida koodi alles. 752 00:42:00,000 --> 00:42:02,000 Tagasi mida? 753 00:42:02,000 --> 00:42:05,000 Vale, sest kui me saame läbi kogu samas loop 754 00:42:05,000 --> 00:42:10,000 ja Anita on tegelikult null, mis tähendab, et ta läks kõik viis lõpuks nimekirja 755 00:42:10,000 --> 00:42:12,000 kus ta vastakuti-mis su nimi oligi? 756 00:42:12,000 --> 00:42:15,000 Ari. >> Ari vasak käsi, mis on null. 757 00:42:15,000 --> 00:42:18,000 Anita on nüüd null, ja ma mõistan, et sa lihtsalt seisad siin kohmakalt segadusse 758 00:42:18,000 --> 00:42:21,000 sest ma lähen maha monoloogi siin, 759 00:42:21,000 --> 00:42:23,000 kuid me kaasata teid jälle üks hetk. 760 00:42:23,000 --> 00:42:27,000 Anita on null sellel hetkel lugu, et samal ajal loop lõpeb, 761 00:42:27,000 --> 00:42:30,000 ja me peame tagasi false, sest kui ta sai kõik viis Ari nullviit 762 00:42:30,000 --> 00:42:34,000 siis ei olnud number, et ta otsis nimekirjas. 763 00:42:34,000 --> 00:42:39,000 Me ei korista see ära ka, aga see on päris hea rakendamise siis 764 00:42:39,000 --> 00:42:43,000 ja läbipääsusüsteemid funktsioon, leida funktsiooni seotud nimekirja. 765 00:42:43,000 --> 00:42:48,000 See on ikka lineaarne otsing, kuid see ei ole nii lihtne kui + + pointer 766 00:42:48,000 --> 00:42:52,000 või + + i muutuja sest nüüd me ei saa vist 767 00:42:52,000 --> 00:42:54,000 kus kõik need sõlmed on mälu. 768 00:42:54,000 --> 00:42:57,000 Me peame sõna otseses mõttes järgida rada riivsai või täpsemalt 769 00:42:57,000 --> 00:43:00,000 suunanäitajaks, et saada ühest tipust teise. 770 00:43:00,000 --> 00:43:02,000 >> Nüüd proovime veel ühe. Anita, sa tahad siia tagasi tulla? 771 00:43:02,000 --> 00:43:06,000 Miks me ei võiks minna edasi ja eraldada veel üks inimene saalist? 772 00:43:06,000 --> 00:43:08,000 Malloc-mis su nimi on? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca on malloced publik, 774 00:43:10,000 --> 00:43:13,000 ja ta on nüüd ladustamiseks number 55. 775 00:43:13,000 --> 00:43:17,000 Ja eesmärk käepärast nüüd on Anita lisada 776 00:43:17,000 --> 00:43:22,000 Rebecca arvesse seotud nimekirja siin oma õige koht. 777 00:43:22,000 --> 00:43:24,000 Tule siia hetkeks. 778 00:43:24,000 --> 00:43:28,000 Ma olen teinud midagi sellist. 779 00:43:28,000 --> 00:43:32,000 Olen teinud sõlme *. Ja mis su nimi oligi? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, eks. 781 00:43:34,000 --> 00:43:41,000 Rebecca saab malloc (sizeof (node)). 782 00:43:41,000 --> 00:43:44,000 Just nagu oleme eraldanud asjad õpilased ja tühi-tähi minevikus, 783 00:43:44,000 --> 00:43:46,000 peame suurus sõlm, nii et nüüd Rebecca 784 00:43:46,000 --> 00:43:49,000 on osutavad mida? 785 00:43:49,000 --> 00:43:52,000 Rebecca on kaks valdkonda tema sees, millest üks on 55. 786 00:43:52,000 --> 00:43:55,000 Teeme mida, rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Aga siis rebecca-> next tuleb-nagu praegu, käsi on selline, kes teab? 788 00:44:00,000 --> 00:44:03,000 See osutavad mõned prügi väärtus, nii et miks mitte hea meede 789 00:44:03,000 --> 00:44:07,000 me vähemalt seda teha nii, et vasak käsi on nüüd tema kõrval. 790 00:44:07,000 --> 00:44:09,000 Nüüd Anita, võtke see siit. 791 00:44:09,000 --> 00:44:11,000 Sul on Rebecca kellele on määratud. 792 00:44:11,000 --> 00:44:20,000 Mine ja leia, kus me peaks Rebecca. 793 00:44:20,000 --> 00:44:25,000 Hea, väga hea. 794 00:44:25,000 --> 00:44:28,000 Okei, hea, ja nüüd me peame teile pakkuda natuke suunda, 795 00:44:28,000 --> 00:44:30,000 nii olete jõudnud Ari. 796 00:44:30,000 --> 00:44:33,000 Tema vasak käsi on null, kuid Rebecca selgelt kuulub õigus, 797 00:44:33,000 --> 00:44:36,000 Niisiis, kuidas me peame muutma seda, mis on seotud nimekirja 798 00:44:36,000 --> 00:44:38,000 et lisada Rebecca õigesse kohta? 799 00:44:38,000 --> 00:44:42,000 Kui võid sõna otseses mõttes liigutada inimeste vasak käsi ümber kui vaja, 800 00:44:42,000 --> 00:44:48,000 me probleemi lahendada nii. 801 00:44:48,000 --> 00:44:52,000 Okei, hea, ja vahepeal Rebecca vasak käsi on nüüd tema kõrval. 802 00:44:52,000 --> 00:44:54,000 >> See oli liiga lihtne. 803 00:44:54,000 --> 00:44:57,000 Proovime eraldamise-oleme peaaegu valmis, 20. 804 00:44:57,000 --> 00:44:59,000 Okei, tulge siia. 805 00:44:59,000 --> 00:45:04,000 20 on eraldatud, seega lubage mul minna ja öelda jälle siin 806 00:45:04,000 --> 00:45:07,000 me oleme lihtsalt teinud sõlme * Saad. 807 00:45:07,000 --> 00:45:11,000 Meil on malloc (sizeof (node)). 808 00:45:11,000 --> 00:45:16,000 Me tehke sama täpne süntaks nagu tegime enne 20, 809 00:45:16,000 --> 00:45:20,000 ja ma teen next = NULL, ja nüüd on see kuni Anita 810 00:45:20,000 --> 00:45:23,000 lisada sind seotud nimekirja, kui sa võiksid mängida, et täpselt sama rolli. 811 00:45:23,000 --> 00:45:30,000 Execute. 812 00:45:30,000 --> 00:45:32,000 Olgu, hästi. 813 00:45:32,000 --> 00:45:38,000 Nüüd mõelge hoolikalt enne kui hakkate liikuma vasakule käed ümber. 814 00:45:38,000 --> 00:45:46,000 Sa kaugelt sai kõige ebamugav roll täna. 815 00:45:46,000 --> 00:45:59,000 Kelle poolt tuleb viia esimesena? 816 00:45:59,000 --> 00:46:02,000 Okei, oota, ma kuulen mõned ei oma. 817 00:46:02,000 --> 00:46:07,000 Kui mõned inimesed oleks viisakalt tahan aidata lahendada ebamugav olukord siin. 818 00:46:07,000 --> 00:46:11,000 Kelle vasaku käe tuleks ajakohastada 1. ehk? Jah. 819 00:46:11,000 --> 00:46:13,000 [Student] Saad oma. 820 00:46:13,000 --> 00:46:15,000 Okei, Saad-ndatel, miks küll? 821 00:46:15,000 --> 00:46:17,000 [Kuuldamatu õpilase vastus] 822 00:46:17,000 --> 00:46:19,000 Hea, sest kui me liigume-mis su nimi on? >> Marshall. 823 00:46:19,000 --> 00:46:22,000 Marshall, kui me liigume oma käe esimese alla null, 824 00:46:22,000 --> 00:46:25,000 nüüd oleme sõna otseses mõttes orvuks neli inimest selles nimekirjas 825 00:46:25,000 --> 00:46:29,000 sest ta oli ainus asi, mis viitaksid Ramon ja kõik vasakule, 826 00:46:29,000 --> 00:46:31,000 nii ajakohastamine, et osuti Esimene oli halb. 827 00:46:31,000 --> 00:46:33,000 Olgem undo seda. 828 00:46:33,000 --> 00:46:37,000 Hea ja nüüd minna ja liikuda asjakohased vasakul osutades Ramon. 829 00:46:37,000 --> 00:46:39,000 See tundub natuke ülearune. 830 00:46:39,000 --> 00:46:41,000 Nüüd on kaks inimest osutades Ramon, kuid sellest pole midagi 831 00:46:41,000 --> 00:46:43,000 sest nüüd, kuidas muidu me ajakohastab nimekirja? 832 00:46:43,000 --> 00:46:48,000 Mis muud käsi liigub? 833 00:46:48,000 --> 00:46:53,000 Suurepärane, nüüd on meil kaotanud mälu? 834 00:46:53,000 --> 00:46:57,000 Ei, nii hea, vaatame, kui me ei suuda murda seda veel korra. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing viimast korda, number 5. 836 00:47:00,000 --> 00:47:04,000 Kõik viis tagasi, tule alla. 837 00:47:04,000 --> 00:47:08,000 See on väga põnev. 838 00:47:08,000 --> 00:47:15,000 [Aplaus] 839 00:47:15,000 --> 00:47:17,000 Mis su nimi on? >> Ron. 840 00:47:17,000 --> 00:47:19,000 Ron, okei, sa oled malloced kui number 5. 841 00:47:19,000 --> 00:47:23,000 Me oleme lihtsalt täide kood, mis on peaaegu identne need 842 00:47:23,000 --> 00:47:26,000 lihtsalt teine ​​nimi. 843 00:47:26,000 --> 00:47:28,000 Suurepärane. 844 00:47:28,000 --> 00:47:38,000 Nüüd, Anita, õnne sisestamist number 5 esitatud loetellu nüüd. 845 00:47:38,000 --> 00:47:43,000 Hea ja? 846 00:47:43,000 --> 00:47:47,000 Suurepärane, nii et see on tõesti üks kolmest kõigist juhtudest. 847 00:47:47,000 --> 00:47:49,000 Meil oli esimest korda keegi lõpus, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Siis tuli keegi keskel. 849 00:47:51,000 --> 00:47:53,000 Nüüd on meil keegi alguses, ja selles näites 850 00:47:53,000 --> 00:47:56,000 nüüd tuli uuendada Lucas esimest korda 851 00:47:56,000 --> 00:48:00,000 sest esimene element nimekirjas on nüüd punkti juures uus sõlm, 852 00:48:00,000 --> 00:48:03,000 kes omakorda on suunaga sõlme number 9. 853 00:48:03,000 --> 00:48:06,000 >> See oli väga ebamugav meeleavaldus, ma olen kindel, 854 00:48:06,000 --> 00:48:08,000 nii suur aplaus on need kutid, kui te saaksite. 855 00:48:08,000 --> 00:48:11,000 Ilusti tehtud. 856 00:48:11,000 --> 00:48:17,000 See on kõik. Sa võid hoida oma paberitükke kui vähe mälu. 857 00:48:17,000 --> 00:48:22,000 Selgub, et teed seda koodi 858 00:48:22,000 --> 00:48:26,000 ei ole päris nii lihtne kui lihtsalt liiguvad käed ümber 859 00:48:26,000 --> 00:48:28,000 ja juhtides viiteid eri asjad. 860 00:48:28,000 --> 00:48:31,000 Aga mõistan, et kui on aeg rakendada midagi 861 00:48:31,000 --> 00:48:34,000 seotud nimekirja või variant see, kui teil keskenduda tõesti 862 00:48:34,000 --> 00:48:38,000 neid põhilisi alustalasid, hammustada suurusega probleeme mul aru saada, 863 00:48:38,000 --> 00:48:43,000 see on selle poolt või selle küljest aru, et mida on muidu üsna keeruline programm 864 00:48:43,000 --> 00:48:47,000 võib tegelikult vähendada üsna lihtne ehitusplokkide niimoodi. 865 00:48:47,000 --> 00:48:51,000 >> Võtame asju keerulisemaks suunas ikka. 866 00:48:51,000 --> 00:48:53,000 Meil on nüüd mõiste seotud nimekirja. 867 00:48:53,000 --> 00:48:57,000 Meil on ka-tänu ettepanek tagasi seal-kahekordselt seotud nimekirja, 868 00:48:57,000 --> 00:49:01,000 mis näeb välja peaaegu sama, kuid nüüd on meil kaks suunanäitajaks sees struct 869 00:49:01,000 --> 00:49:05,000 ühe asemel, ja me võiks ilmselt helistada nendele viiteid eelmise ja järgmise 870 00:49:05,000 --> 00:49:08,000 või vasakule või paremale, kuid me tegelikult vaja kahte neist. 871 00:49:08,000 --> 00:49:10,000 Kood oleks natuke rohkem kaasatud. 872 00:49:10,000 --> 00:49:12,000 Anita oleks pidanud tegema rohkem tööd siin laval. 873 00:49:12,000 --> 00:49:15,000 Aga me võiks kindlasti rakendada sellist struktuuri. 874 00:49:15,000 --> 00:49:19,000 Seoses sõiduaega, aga milline oleks sõiduaega 875 00:49:19,000 --> 00:49:24,000 Anita leida mitmeid n seotud nimekirja nüüd? 876 00:49:24,000 --> 00:49:27,000 Ikka suur O n, seega pole parem kui lineaarne otsing. 877 00:49:27,000 --> 00:49:29,000 Me ei saa Kahendotsingupuu, aga uuesti. 878 00:49:29,000 --> 00:49:34,000 Miks oli nii? Sa ei saa hüpata ringi. 879 00:49:34,000 --> 00:49:36,000 Kuigi me ilmselt näha kõiki inimesi laval, 880 00:49:36,000 --> 00:49:39,000 ja Anita oleks eyeballed ta ja ütles: "Siin on keset nimekirja," 881 00:49:39,000 --> 00:49:42,000 ta ei tea, et kui ta oleks arvutiprogrammi 882 00:49:42,000 --> 00:49:47,000 sest ainus asi, ta pidi jtk alguses stsenaariumi 883 00:49:47,000 --> 00:49:50,000 oli Lucas, kes oli esimene pointer. 884 00:49:50,000 --> 00:49:53,000 Ta oleks tingimata peavad järgima neid sidemeid, 885 00:49:53,000 --> 00:49:56,000 lugedes tema viis kuni ta leidis umbes keskel, 886 00:49:56,000 --> 00:49:58,000 ja isegi siis, ta ei kavatse tea, millal ta jõudis keskel 887 00:49:58,000 --> 00:50:01,000 kui ta läheb kõik viis lõpuks aru saada, kui palju seal on, 888 00:50:01,000 --> 00:50:05,000 siis Backtracks, ja et liiga oleks raske, kui sul oli 889 00:50:05,000 --> 00:50:07,000 kahekordselt seotud nimekirja mingisugune. 890 00:50:07,000 --> 00:50:10,000 >> Lahendada mõned probleemid täna, kuid kasutusele teised. 891 00:50:10,000 --> 00:50:12,000 Aga eri andmestruktuuri kokku? 892 00:50:12,000 --> 00:50:15,000 See on foto plaate Ema House, 893 00:50:15,000 --> 00:50:19,000 ja sel juhul on meil andmestruktuur oleme ka omamoodi juba rääkinud. 894 00:50:19,000 --> 00:50:22,000 Me rääkisime korstnat kontekstis mälu, 895 00:50:22,000 --> 00:50:26,000 ja see on omamoodi tahtlikult nime, sest virna nii mälu 896 00:50:26,000 --> 00:50:31,000 on tõhusalt andmestruktuur, mis on rohkem ja rohkem asju kihiti ta. 897 00:50:31,000 --> 00:50:35,000 Aga huvitav asi korstnat, nagu see tegelikult 898 00:50:35,000 --> 00:50:38,000 et see on eriline andmestruktuur. 899 00:50:38,000 --> 00:50:42,000 See on andmestruktuur, mille esimene element 900 00:50:42,000 --> 00:50:46,000 on viimane osa välja. 901 00:50:46,000 --> 00:50:50,000 Kui te olete esimene plaat tuleb lasta peale virna, 902 00:50:50,000 --> 00:50:53,000 sa lähed olema kahjuks viimane plaat võetakse välja korstnat 903 00:50:53,000 --> 00:50:55,000 ja mis ei ole tingimata hea asi. 904 00:50:55,000 --> 00:50:58,000 Samas võite mõelda teistpidi, 905 00:50:58,000 --> 00:51:02,000 viimane on esimene välja. 906 00:51:02,000 --> 00:51:05,000 >> Nüüd ei ühtegi stsenaariumi pähe tulevad, kui võttes virna 907 00:51:05,000 --> 00:51:08,000 andmestruktuur, kus sa pead, et vara 908 00:51:08,000 --> 00:51:13,000 viimase sisse, esimesena välja, on tegelikult mõjuvad? 909 00:51:13,000 --> 00:51:16,000 Kas see on hea asi? Kas see halb? 910 00:51:16,000 --> 00:51:19,000 See on kindlasti halb, kui plaate ei olnud kõik ühesugused 911 00:51:19,000 --> 00:51:21,000 Ja nad olid kõik eri eri värvi või tühi-tähi, 912 00:51:21,000 --> 00:51:24,000 ja soovitud värvi on kõik viis põhjas. 913 00:51:24,000 --> 00:51:26,000 Muidugi, sa ei saa, et ilma suuri pingutusi. 914 00:51:26,000 --> 00:51:28,000 Sul on alustada tipust ja tööd teed alla. 915 00:51:28,000 --> 00:51:31,000 Samamoodi kui sa olid üks neist fänn poistele 916 00:51:31,000 --> 00:51:34,000 kes ootab terve öö üritavad iPhone ja read üles 917 00:51:34,000 --> 00:51:36,000 kohas nagu see on? 918 00:51:36,000 --> 00:51:40,000 Kas poleks tore, kui Apple Store 919 00:51:40,000 --> 00:51:42,000 olid virnas andmestruktuur? 920 00:51:42,000 --> 00:51:44,000 Jee? Ei? 921 00:51:44,000 --> 00:51:47,000 See on ainult hea, et inimesed, kes näitavad üles viimsel võimalik hetke 922 00:51:47,000 --> 00:51:50,000 ja siis saad kiskunud maha järjekorda. 923 00:51:50,000 --> 00:51:52,000 Ja tegelikult see, et ma olin nii valmis ütlema järjekorda 924 00:51:52,000 --> 00:51:56,000 on tegelikult kooskõlas sellega, mida me nimetame sellist andmestruktuur, 925 00:51:56,000 --> 00:51:59,000 üks reaalsus, kus selleks ei asja, 926 00:51:59,000 --> 00:52:02,000 ja sa tahad esimene üks olla esimene, kes välja 927 00:52:02,000 --> 00:52:04,000 kui ainult huvides inimeste õiglus. 928 00:52:04,000 --> 00:52:07,000 Me tavaliselt nimetame seda järjekorda andmestruktuur. 929 00:52:07,000 --> 00:52:11,000 >> Selgub, lisaks seotud nimekirjad, saame hakata kasutama neid samu ideid 930 00:52:11,000 --> 00:52:15,000 ja alustada luua uusi ja erinevaid lahendusi probleemidele. 931 00:52:15,000 --> 00:52:19,000 Näiteks juhul, kui korstna, me võiks olla korstnat 932 00:52:19,000 --> 00:52:22,000 kasutades andmestruktuur meeldib see, ma teen ettepaneku. 933 00:52:22,000 --> 00:52:26,000 Sel juhul olen deklareeritud struct, ja ma olen öelnud sees selle struktuuri 934 00:52:26,000 --> 00:52:30,000 on array numbrite ja siis muutuja nimega suurus, 935 00:52:30,000 --> 00:52:33,000 ja ma nimetan seda asja pinu. 936 00:52:33,000 --> 00:52:35,000 Nüüd, miks see tegelikult toimib? 937 00:52:35,000 --> 00:52:43,000 Juhul virna, ma võiksin teha seda tõhusalt ekraanile massiiv. 938 00:52:43,000 --> 00:52:47,000 Siin on minu stack. Need on minu numbrid. 939 00:52:47,000 --> 00:52:50,000 Ja me juhtida neid see, see, see, see, see. 940 00:52:50,000 --> 00:52:53,000 Ja siis mul on mõned muud andmed liige siin, 941 00:52:53,000 --> 00:52:58,000 mida nimetatakse suurust, nii et see on suurus, ja see on numbrid, 942 00:52:58,000 --> 00:53:02,000 ja kollektiivselt, kogu iPad siin on üks korstnat struktuur. 943 00:53:02,000 --> 00:53:07,000 Nüüd, vaikimisi suurus on arvatavasti pead olema vormindatud 0, 944 00:53:07,000 --> 00:53:11,000 ja mis seal sees on array numbrite esialgu 945 00:53:11,000 --> 00:53:14,000 kui ma esimest eraldada massiivi? 946 00:53:14,000 --> 00:53:16,000 Prügi. Kes teab? Ja see ei ole tegelikult oluline. 947 00:53:16,000 --> 00:53:20,000 See ei ole tähtis, kas see on 1, 2, 3, 4, 5, täiesti juhuslikult 948 00:53:20,000 --> 00:53:25,000 poolt halb õnn salvestatud minu struktuuri, sest nii kaua, kui ma tean, et suurus pakk 949 00:53:25,000 --> 00:53:29,000 on 0, siis ma tean, programmiliselt, ei vaata ühtegi massiivi elementide. 950 00:53:29,000 --> 00:53:31,000 Ei ole oluline, mis seal on. 951 00:53:31,000 --> 00:53:34,000 Ära vaata neid, nagu oleks tähendus suurus 0. 952 00:53:34,000 --> 00:53:38,000 >> Aga oletame nüüd ma edasi minna ja sisestada midagi korstnat. 953 00:53:38,000 --> 00:53:42,000 Ma tahan sisestada number 5, panin number 5 siin, 954 00:53:42,000 --> 00:53:45,000 ja siis mis ma panen siia alla? 955 00:53:45,000 --> 00:53:48,000 Nüüd ma tegelikult panema 1 suurus, 956 00:53:48,000 --> 00:53:50,000 ja nüüd stack on suurus 1. 957 00:53:50,000 --> 00:53:53,000 Aga kui ma edasi minna ja sisestada number, oletame, 7 järgmine? 958 00:53:53,000 --> 00:53:57,000 See siis saab ajakohastada 2, ja siis me teeme 9, 959 00:53:57,000 --> 00:54:02,000 ja siis see saab ajakohastada 3. 960 00:54:02,000 --> 00:54:05,000 Aga huvitav omadus nüüd selle virna, et 961 00:54:05,000 --> 00:54:09,000 Ma peaksin eemaldada mis element kui ma tahan pop 962 00:54:09,000 --> 00:54:12,000 midagi välja virna, nii rääkida? 963 00:54:12,000 --> 00:54:14,000 9 oleks esimene asi minna. 964 00:54:14,000 --> 00:54:18,000 Kuidas peaks pilt muutuma, kui ma tahan pop element ära pinu, 965 00:54:18,000 --> 00:54:20,000 meelega salve Ema? 966 00:54:20,000 --> 00:54:22,000 Jah. >> [Student] Seadistage suurus 2. 967 00:54:22,000 --> 00:54:27,000 Täpselt, kõik, mida ma tegema, on määrata suurus 2, ja mida ma teha massiivi? 968 00:54:27,000 --> 00:54:29,000 Ma ei pea midagi tegema. 969 00:54:29,000 --> 00:54:32,000 Ma võiks lihtsalt olla anal, pane 0 leidub või -1 või midagi tähendama 970 00:54:32,000 --> 00:54:34,000 et see ei ole legit raha, kuid see ei ole oluline, sest 971 00:54:34,000 --> 00:54:37,000 Võin salvestada väljaspool massiiv ise, kui kaua see on 972 00:54:37,000 --> 00:54:41,000 nii et ma tean ainult pilk esimese kahe elemendi käesolevas massiivi. 973 00:54:41,000 --> 00:54:47,000 Nüüd, kui ma olen läinud ja lisada number 8 selle massiivi, kuidas pilt muutub järgmisel? 974 00:54:47,000 --> 00:54:50,000 See muutub 8, ja see muutub 3. 975 00:54:50,000 --> 00:54:52,000 Ma lõigates mõned nurgad siin. 976 00:54:52,000 --> 00:54:56,000 Nüüd on meil 5, 7, 8, ja me oleme tagasi suurusega 3. 977 00:54:56,000 --> 00:54:58,000 See on üsna lihtne rakendada, 978 00:54:58,000 --> 00:55:06,000 aga kui me hakkame kahetsema disain otsuse? 979 00:55:06,000 --> 00:55:09,000 Millal asjad hakkavad minema väga, väga valesti? Jah. 980 00:55:09,000 --> 00:55:11,000 [Kuuldamatu õpilase vastus] 981 00:55:11,000 --> 00:55:13,000 Kui sa tahad minna tagasi ja saada esimene element paned sisse 982 00:55:13,000 --> 00:55:18,000 >> Tuleb välja, siin isegi virna on massiiv all kapuuts, 983 00:55:18,000 --> 00:55:21,000 Nende andmestruktuurid oleme hakanud rääkima ka üldiselt tuntakse 984 00:55:21,000 --> 00:55:25,000 abstraktne andmestruktuurid mille kuidas nad ellu 985 00:55:25,000 --> 00:55:27,000 on täiesti kõrval punkti. 986 00:55:27,000 --> 00:55:31,000 Andmestruktuuri nagu pinu peaks lisama toetust 987 00:55:31,000 --> 00:55:35,000 toiminguid nagu push, mis lükkab salve peale virna, 988 00:55:35,000 --> 00:55:39,000 ja pop, mis eemaldab elemendi korstnat, ja ongi kõik. 989 00:55:39,000 --> 00:55:43,000 Kui sa alla laadida kellegi teise koodi, kes juba rakendatud 990 00:55:43,000 --> 00:55:46,000 see asi, mida nimetatakse kuhja, et inimene oleks kirjutanud 991 00:55:46,000 --> 00:55:49,000 ainult kaks funktsiooni teile, push ja pop, kelle ainus eesmärk elus 992 00:55:49,000 --> 00:55:51,000 oleks teha just nii. 993 00:55:51,000 --> 00:55:54,000 Sa või teda kes teostas seda programmi 994 00:55:54,000 --> 00:55:58,000 oleks olnud täielikult see, kes otsustab, kuidas rakendada 995 00:55:58,000 --> 00:56:00,000 semantika surudes ja popping all kapuuts 996 00:56:00,000 --> 00:56:03,000 või funktsionaalsust surudes ja popping. 997 00:56:03,000 --> 00:56:07,000 Ja ma olen teinud veidi lühinägelik otsus siin 998 00:56:07,000 --> 00:56:10,000 rakendades mu stack seda lihtne andmestruktuur miks? 999 00:56:10,000 --> 00:56:12,000 Millal see andmestruktuur murda? 1000 00:56:12,000 --> 00:56:18,000 Mis hetkest ma pean tagasi viga kui kasutaja nõuab lükkamiseks, näiteks? 1001 00:56:18,000 --> 00:56:20,000 [Student] Kui ei ole enam ruumi. 1002 00:56:20,000 --> 00:56:23,000 Täpselt, kui pole enam ruumi, kui olen ületanud võimsuse 1003 00:56:23,000 --> 00:56:27,000 mis on kõik mütsid, sest see näitab, et see on mingisugune ülemaailmne pidevalt. 1004 00:56:27,000 --> 00:56:30,000 Noh, siis ma lihtsalt lähen on öelda: "Vabandust, ma ei saa suruda teisele väärtusele 1005 00:56:30,000 --> 00:56:32,000 peale virna, "palju meeldib Ema. 1006 00:56:32,000 --> 00:56:36,000 >> Mingil hetkel, nad ei kavatse tabanud ülaosa et vähe kapis. 1007 00:56:36,000 --> 00:56:39,000 Pole veel ruumi või mahu pakis, kus punkt seal on mingi viga. 1008 00:56:39,000 --> 00:56:42,000 Nad on panna element kusagil mujal, salve kusagil mujal, 1009 00:56:42,000 --> 00:56:44,000 või kuskil üldse. 1010 00:56:44,000 --> 00:56:47,000 Nüüd, kus järjekorda, saame rakendada seda natuke teistmoodi. 1011 00:56:47,000 --> 00:56:50,000 Järjekord on veidi teistsugune, kuna all kapuuts, seda saab rakendada 1012 00:56:50,000 --> 00:56:54,000 massiivina, kuid miks, sel juhul ma ettepaneku 1013 00:56:54,000 --> 00:56:59,000 et ka pea element esindab juhataja nimekiri, 1014 00:56:59,000 --> 00:57:06,000 ees nimekiri, kes esimesena joone Apple poest, lisaks suurus? 1015 00:57:06,000 --> 00:57:14,000 Miks ma pean veel tükk andmed siin? 1016 00:57:14,000 --> 00:57:16,000 Mõtle tagasi sellele, mida numbrid on 1017 00:57:16,000 --> 00:57:18,000 kui olen ära, järgmiselt. 1018 00:57:18,000 --> 00:57:21,000 Oletame, et see on nüüd järjekorda asemel virna, 1019 00:57:21,000 --> 00:57:24,000 Vahe on selles, nagu Apple Store-järjekord on õiglane. 1020 00:57:24,000 --> 00:57:27,000 Esimene inimene kooskõlas alguses nimekirja, number 5 antud juhul 1021 00:57:27,000 --> 00:57:30,000 ta läheb lase poodi esimesena. 1022 00:57:30,000 --> 00:57:32,000 Teeme seda. 1023 00:57:32,000 --> 00:57:35,000 Oletame, et see on riigi oma järjekorda selles ajahetkel, ja nüüd Apple Store 1024 00:57:35,000 --> 00:57:39,000 Avaneb esimene inimene, number 5 on viinud poodi. 1025 00:57:39,000 --> 00:57:43,000 Kuidas muuta pilti nüüd, et ma olen de-sabas esimene inimene 1026 00:57:43,000 --> 00:57:47,000 ees rida? 1027 00:57:47,000 --> 00:57:50,000 Mis see on? >> [Student] Muuda järjekorda. 1028 00:57:50,000 --> 00:57:52,000 Muutus pea, nii 5 kaob. 1029 00:57:52,000 --> 00:57:56,000 Tegelikult, see on justkui-kuidas seda teha? 1030 00:57:56,000 --> 00:58:00,000 Tegelikult, see on nagu see kutt kaob. 1031 00:58:00,000 --> 00:58:03,000 Mis oleks number 7 teha tegeliku hoida? 1032 00:58:03,000 --> 00:58:05,000 Nad võtta suur samm edasi. 1033 00:58:05,000 --> 00:58:08,000 >> Aga mida me hakanud hindama, kui tegemist on massiivid 1034 00:58:08,000 --> 00:58:10,000 ja liikudes asju ümber? 1035 00:58:10,000 --> 00:58:12,000 See on selline raiskamine oma aega, eks? 1036 00:58:12,000 --> 00:58:16,000 Miks sa pead olema nii anaal on esimene inimene 1037 00:58:16,000 --> 00:58:21,000 alguses joone füüsiliselt algust patakas mälu? 1038 00:58:21,000 --> 00:58:23,000 See on täiesti tarbetu. Miks? 1039 00:58:23,000 --> 00:58:26,000 Mida ma lihtsalt mäletan asemel? >> [Kuuldamatu õpilase vastus] 1040 00:58:26,000 --> 00:58:30,000 Täpselt, ma lihtsalt mäletan seda lisaandmed liige peaga 1041 00:58:30,000 --> 00:58:34,000 et nüüd eesotsas nimekirja ei ole enam 0, mis ta oli hetk tagasi. 1042 00:58:34,000 --> 00:58:39,000 Nüüd on tegelikult number 1. Sel moel, saan kerge optimeerimine. 1043 00:58:39,000 --> 00:58:44,000 Lihtsalt sellepärast, et ma olen de-sabas keegi line alguses liin kell Apple Store 1044 00:58:44,000 --> 00:58:47,000 ei tähenda, igaüks peab minema, mis meenutavad on lineaarne operatsioon. 1045 00:58:47,000 --> 00:58:50,000 Võin asemel kulutama pidevalt aega ainult 1046 00:58:50,000 --> 00:58:53,000 ja saavutada siis palju kiiremat reageerimist. 1047 00:58:53,000 --> 00:58:56,000 Aga hind ma maksan on see, mida saada, et täiendava tõhususe 1048 00:58:56,000 --> 00:58:58,000 ja ei ole vaja suunata kõigile? 1049 00:58:58,000 --> 00:59:01,000 Jah. >> [Kuuldamatu õpilase vastus] 1050 00:59:01,000 --> 00:59:04,000 Kas lisada rohkem inimesi, noh, see probleem on ortogonaalne 1051 00:59:04,000 --> 00:59:07,000 asjaolust, et me ei suunates inimeste ümber. 1052 00:59:07,000 --> 00:59:11,000 See on ikka massiivi, nii kas muudame kõik või mitte- 1053 00:59:11,000 --> 00:59:13,000 oh, ma näen, mida sa mõtled, eks. 1054 00:59:13,000 --> 00:59:16,000 Tegelikult olen nõus, mida sa räägid, et see on peaaegu nagu 1055 00:59:16,000 --> 00:59:19,000 me nüüd ei kavatse kasutada alustada selle massiivi enam 1056 00:59:19,000 --> 00:59:22,000 sest kui ma eemaldan 5, siis ma eemaldan 7. 1057 00:59:22,000 --> 00:59:24,000 Aga ma panna ainult inimesed õige. 1058 00:59:24,000 --> 00:59:28,000 >> Tundub, nagu ma olen raiskab ruumi, ja lõpuks minu järjekord laguneb midagi, 1059 00:59:28,000 --> 00:59:31,000 nii et me võiks lihtsalt inimesed Kietaisu, 1060 00:59:31,000 --> 00:59:35,000 ja me võiks mõelda selle massiivi tõesti nagu mingi ümmarguse struktuuri, 1061 00:59:35,000 --> 00:59:38,000 aga me kasutame mida operaator C teha, et omamoodi Kietaisu? 1062 00:59:38,000 --> 00:59:40,000 [Kuuldamatu õpilase vastus] >> moodul operaator. 1063 00:59:40,000 --> 00:59:43,000 Oleks veidi tüütu, et mõelda läbi, kuidas sa teed Kietaisu, 1064 00:59:43,000 --> 00:59:46,000 kuid me ei tee seda, ja me võiksime alustada seab inimesed mida varem joone ees, 1065 00:59:46,000 --> 00:59:52,000 kuid me lihtsalt mäletan seda pea muutuja kes tegelikult juht rida tegelikult on. 1066 00:59:52,000 --> 00:59:57,000 Mis siis, kui selle asemel, meie eesmärk lõppkokkuvõttes, kuigi 1067 00:59:57,000 --> 01:00:00,000 oli otsida numbreid, nagu tegime siin laval Anita, 1068 01:00:00,000 --> 01:00:02,000 kuid me tõesti tahame kõige parem need maailmad? 1069 01:00:02,000 --> 01:00:05,000 Me tahame rohkem rafineeritumalt kui massiivi võimaldab 1070 01:00:05,000 --> 01:00:09,000 sest me tahame võime dünaamiliselt kasvada andmestruktuur. 1071 01:00:09,000 --> 01:00:12,000 Aga me ei taha olla abiks, et midagi, mis me märkisime 1072 01:00:12,000 --> 01:00:15,000 Esimeses loengus ei olnud optimaalne algoritm, 1073 01:00:15,000 --> 01:00:17,000 et lineaarne otsing. 1074 01:00:17,000 --> 01:00:21,000 Selgub, et saate tegelikult saavutada 1075 01:00:21,000 --> 01:00:24,000 või vähemalt lähedal pidevalt aega, mille keegi nagu Anita, 1076 01:00:24,000 --> 01:00:27,000 kui ta seadistab oma andmestruktuur mitte olla seotud nimekirja, 1077 01:00:27,000 --> 01:00:30,000 ei oleks pinu, et tegu pole järjekorda, võib tegelikult 1078 01:00:30,000 --> 01:00:33,000 tulla andmestruktuur, mis võimaldab teda otsida asju, 1079 01:00:33,000 --> 01:00:37,000 isegi sõnu, mitte ainult numbreid, mida me kutsume pidevalt aega. 1080 01:00:37,000 --> 01:00:40,000 >> Ja tegelikult eesolevaid üks psets selles klassis on peaaegu alati 1081 01:00:40,000 --> 01:00:43,000 rakendamise õigekirja, mille 1082 01:00:43,000 --> 01:00:46,000 anname jälle mõned 150000 ingliskeelsed sõnad ja eesmärk on 1083 01:00:46,000 --> 01:00:51,000 laadige need mällu ja kiiresti suutma vastata küsimustele vormi 1084 01:00:51,000 --> 01:00:54,000 on see sõna õigesti kirjutatud? 1085 01:00:54,000 --> 01:00:58,000 Ja see oleks tõesti imeda, kui sa pidid itereerima läbi kõik 150.000 sõnad sellele vastama. 1086 01:00:58,000 --> 01:01:02,000 Aga tegelikult me ​​näeme, et me saame seda teha väga, väga kiire aeg. 1087 01:01:02,000 --> 01:01:06,000 Ja see läheb kaasata rakendamise midagi, mida nimetatakse hash tabelit, 1088 01:01:06,000 --> 01:01:09,000 ja kuigi esmapilgul see asi nimega hash tabelit saab 1089 01:01:09,000 --> 01:01:12,000 lase meil saavutada need super kiire reageerimise aega, 1090 01:01:12,000 --> 01:01:18,000 selgub, et seal on tegelikult probleem. 1091 01:01:18,000 --> 01:01:23,000 Kui on aeg rakendada seda asja nimetatakse-jälle, ma teen seda uuesti. 1092 01:01:23,000 --> 01:01:25,000 Ma olen siin ainuke. 1093 01:01:25,000 --> 01:01:28,000 Kui on aeg rakendada seda asja nimetatakse hash tabelit, 1094 01:01:28,000 --> 01:01:30,000 me lähed on teha otsus. 1095 01:01:30,000 --> 01:01:32,000 Kui suur peaks see asi tegelikult on? 1096 01:01:32,000 --> 01:01:36,000 Ja kui hakkame lisades numbrid sellesse hash tabelit, 1097 01:01:36,000 --> 01:01:38,000 kuidas me hoida neid nii 1098 01:01:38,000 --> 01:01:42,000 et me saame nad tagasi viia nii kiiresti kui saime neid? 1099 01:01:42,000 --> 01:01:45,000 Aga me näeme peagi, et see küsimus 1100 01:01:45,000 --> 01:01:48,000 kui kõik sünnipäev on klass on üsna Sobiv. 1101 01:01:48,000 --> 01:01:51,000 Selgub, et selles toas on meil paarsada inimest, 1102 01:01:51,000 --> 01:01:56,000 nii tõenäosus, et kaks meist on sama sünnipäev on ilmselt päris suur. 1103 01:01:56,000 --> 01:01:58,000 Mis siis, kui seal oli ainult 40 meist siin ruumis? 1104 01:01:58,000 --> 01:02:02,000 Mis on tõenäosus kaks inimest, kellel on sama sünnipäev? 1105 01:02:02,000 --> 01:02:04,000 [Õpilased] Üle 50%. 1106 01:02:04,000 --> 01:02:06,000 Jah, üle 50%. Tegelikult ma isegi tõi diagrammi. 1107 01:02:06,000 --> 01:02:08,000 Selgub-ja see on tõesti ainult vargsi eelvaade- 1108 01:02:08,000 --> 01:02:12,000 kui seal on ainult 58 meist siin ruumis, tõenäosus 2 juures 1109 01:02:12,000 --> 01:02:16,000 millel on sama sünnipäev on väga kõrge, peaaegu 100%, 1110 01:02:16,000 --> 01:02:20,000 ja et läheb põhjustada terve hunnik haiget meile kolmapäeval. 1111 01:02:20,000 --> 01:02:24,000 >> Olles seda öelnud, lähme edasi lükata siin. Näeme kolmapäeval. 1112 01:02:24,000 --> 01:02:28,000 [Aplaus] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]