1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Nedēļa 6, Turpinājums] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Hārvarda] 3 00:00:04,160 --> 00:00:08,720 [Tas ir CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Tas ir CS50 un tas ir beigu 6 nedēļas. 5 00:00:12,970 --> 00:00:17,970 Tātad CS50x, viens no Hārvardas pirmajiem kursiem, kas iesaistītas EDX iniciatīvā 6 00:00:17,970 --> 00:00:20,590 tiešām debitēja pagājušajā pirmdienā. 7 00:00:20,590 --> 00:00:23,460 Ja jūs vēlētos, lai iegūtu ieskatu par to, ko citiem internetā 8 00:00:23,460 --> 00:00:27,180 tagad pēc kopā ar, jūs varat doties uz x.cs50.net. 9 00:00:27,180 --> 00:00:30,350 Kas būs novirzīt jūs uz attiecīgā vietā edx.org, 10 00:00:30,350 --> 00:00:34,160 kas bija, kad šo un citiem kursiem no MIT un Berklijā tagad dzīvot. 11 00:00:34,160 --> 00:00:38,140 Jums ir pierakstīties uz kontu, jūs atradīsiet, ka materiāls ir lielā mērā tas pats 12 00:00:38,140 --> 00:00:42,170 kā jūs esat bijusi šī semestrī, gan dažas kavējas nedēļu, kā mēs viss gatavs. 13 00:00:42,170 --> 00:00:46,930 Bet ko studenti CS50x tagad redzēt ir saskarne gluži kā šis. 14 00:00:46,930 --> 00:00:50,040 Tas, piemēram, ir Zamyla vadot walkthrough par problēmu kopumu 0. 15 00:00:50,040 --> 00:00:54,230 Pēc piesakoties uz edx.org, CS50x students redz lietas veidu 16 00:00:54,230 --> 00:00:57,170 jūs varētu sagaidīt, lai redzētu kursos: lekciju par pirmdienā, 17 00:00:57,170 --> 00:01:01,650 lekcija trešdien, dažādi šorti, problēma komplekti, walkthroughs, PDF. 18 00:01:01,650 --> 00:01:04,459 Turklāt, kā jūs redzēt šeit, mašīntulkojumi 19 00:01:04,459 --> 00:01:08,390 no angļu stenogrammas uz ķīniešu, japāņu, spāņu, itāļu, 20 00:01:08,390 --> 00:01:12,810 un viss ķekars citu valodu, kas noteikti būs nepilnīga 21 00:01:12,810 --> 00:01:15,840 kā mēs roll tos programmatiski, izmantojot kaut ko sauc API, 22 00:01:15,840 --> 00:01:18,360 vai lietojumprogrammu saskarne, no Google 23 00:01:18,360 --> 00:01:21,360 kas ļauj mums, lai pārvērstu angļu šīm citām valodām. 24 00:01:21,360 --> 00:01:24,100 Bet, pateicoties brīnišķīgo garu dažiem simtiem plus brīvprātīgajiem, 25 00:01:24,100 --> 00:01:26,940 izlases cilvēki internetā, kuri ir laipni piedāvāja iesaistīties 26 00:01:26,940 --> 00:01:30,180 šajā projektā, mēs pakāpeniski uzlabojot šo tulkojumu 27 00:01:30,180 --> 00:01:35,790 , ņemot cilvēki labotu kļūdas, ka mūsu datori ir izgatavoti. 28 00:01:35,790 --> 00:01:42,330 >> Tātad izrādās, mums bija vēl dažas studentu parādās pirmdien, nekā mēs sākotnēji gaidīts. 29 00:01:42,330 --> 00:01:48,980 Patiesībā, tagad CS50x ir 100,000 cilvēki pēc kopā mājās. 30 00:01:48,980 --> 00:01:54,430 Tātad saproti, jūs esat daļa no šī inaugurācijas klase padarot šo kursu datorzinātnēs 31 00:01:54,430 --> 00:01:57,370 izglītību kopumā, plašāk, pieejamāku. 32 00:01:57,370 --> 00:02:00,130 Un realitāte ir tagad, ar dažiem no šiem masveida tiešsaistes kursu, 33 00:02:00,130 --> 00:02:04,070 viņi visi sāk ar šo ļoti liela skaita, kā mēs, šķiet, ir darīts šeit. 34 00:02:04,070 --> 00:02:08,759 Bet mērķis, galu galā, lai CS50x ir patiešām iegūt tik daudz cilvēku uz finiša līniju, kā iespējams. 35 00:02:08,759 --> 00:02:12,000 Pēc konstrukcijas, CS50x gatavojas piedāvāt no šīs pagātnes pirmdiena 36 00:02:12,000 --> 00:02:17,430 visu ceļu cauri 15 aprīlis 2013, lai ļaudīm, kas ir skolas saistības citur, 37 00:02:17,430 --> 00:02:20,990 darbs, ģimene, citi konflikti un tamlīdzīgi, ir nedaudz lielāka elastība 38 00:02:20,990 --> 00:02:23,640 ar kuru nodoties šo kursu, kas, pietiek pateikt, 39 00:02:23,640 --> 00:02:30,540 ir diezgan ambiciozi darīts, ja vien gaitā tikai trīs mēnešus parastā semestrī. 40 00:02:30,540 --> 00:02:34,190 Bet šie skolēni būs novērst to pašu problēmu kopas, skatot pašu saturu, 41 00:02:34,190 --> 00:02:36,350 kam ir piekļuve tām pašām šorti un tamlīdzīgi. 42 00:02:36,350 --> 00:02:38,990 Lai saprastu, ka mēs visi esam patiesi šajā kopā. 43 00:02:38,990 --> 00:02:42,360 Un viens no gala mērķiem CS50x ir ne tikai, lai saņemtu tik daudz ļaudīm 44 00:02:42,360 --> 00:02:45,720 uz finiša līnijas un dot viņiem šo jauniegūto izpratni par datorzinātnes 45 00:02:45,720 --> 00:02:49,000 un programmēšanas bet arī tos ir šo kopīgo pieredzi. 46 00:02:49,000 --> 00:02:52,010 Viens no noteicošajām iezīmēm no 50 uz pilsētiņu, mēs ceram, 47 00:02:52,010 --> 00:02:56,260 ir bijusi šāda veida komunālo pieredzi, lai labāk vai sliktāk, dažkārt 48 00:02:56,260 --> 00:02:59,480 bet kam šie cilvēki vērsties pa kreisi un pa labi, 49 00:02:59,480 --> 00:03:01,830 un biroja stundas un hackathon un taisnīga. 50 00:03:01,830 --> 00:03:04,560 Tas nedaudz grūtāk darīt, ka cilvēks ar ļaudīm tiešsaistē, 51 00:03:04,560 --> 00:03:10,580 bet CS50x noslēgsies aprīlī ar pirmo kādreiz CS50 Expo, 52 00:03:10,580 --> 00:03:13,630 kas būs tiešsaistes pielāgošanu mūsu ideju par patiesā 53 00:03:13,630 --> 00:03:18,250 ja šie studenti tūkstošiem visi tiks aicināti iesniegt 1 - līdz 2 minūšu video, 54 00:03:18,250 --> 00:03:22,480 nu to galīgās projekta vai video no tiem screencast vicinot sveiki 55 00:03:22,480 --> 00:03:24,490 un runā par savu projektu un demoing to, 56 00:03:24,490 --> 00:03:27,610 līdzīgi saviem priekšgājējiem ir darīts šeit Campus gadatirgū, 57 00:03:27,610 --> 00:03:31,400 lai līdz semestra beigām, cerība ir, lai būtu pasaules izstādi 58 00:03:31,400 --> 00:03:37,080 no CS50x studentu gala projektiem, līdzīgi tas, kas jūs sagaida šā gada decembrī šeit par Campus. 59 00:03:37,080 --> 00:03:39,680 Tā vairāk par to nākamajos mēnešos. 60 00:03:39,680 --> 00:03:43,640 >> Ar 100,000 studentu, lai gan, nāk par nepieciešamību vēl dažus SI. 61 00:03:43,640 --> 00:03:47,590 Ņemot vērā, ka jūs guys ir degošs taka šeit un ņemot CS50 62 00:03:47,590 --> 00:03:51,630 vairākas nedēļas pirms materiāla izmantošanas atklājama par EDX ļaudīm, 63 00:03:51,630 --> 00:03:55,330 saproti, mēs labprāt vēlētos, lai iesaistītu jo daudzi no mūsu pašu studentu iespējas šajā iniciatīvā, 64 00:03:55,330 --> 00:03:58,720 gan semestra laikā, kā arī šajā ziemā, un tas nāk pavasarī. 65 00:03:58,720 --> 00:04:01,620 Tātad, ja jūs vēlaties iesaistīties CS50x, 66 00:04:01,620 --> 00:04:07,450 īpaši pievienojās uz CS50x diskutēt, EDX versija CS50 diskutēt, 67 00:04:07,450 --> 00:04:10,140 kuru daudzi no jums ir bijis, izmantojot uz Campus, tiešsaistes dēļa, 68 00:04:10,140 --> 00:04:13,040 lūdzu galvu uz šo URL, dodiet mums zināt, kas jūs esat, 69 00:04:13,040 --> 00:04:16,450 jo mēs labprāt veidot studentu un mācībspēku komanda un fakultātē gan 70 00:04:16,450 --> 00:04:19,630 par Campus kuri vienkārši spēlē kopā un palīdzot. 71 00:04:19,630 --> 00:04:21,720 Un kad viņi redz jautājumu, kas ir pazīstami ar tiem, 72 00:04:21,720 --> 00:04:25,320 Jūs dzirdat students ziņošanas dažas bug kaut kas tur kādu valsti internetā, 73 00:04:25,320 --> 00:04:27,450 un ka gredzeni bell, jo jums arī bija, ka pašu jautājumu 74 00:04:27,450 --> 00:04:32,620 Jūsu d-zālē, kādu laiku atpakaļ, cerams tad jūs varat piebalsot un dalīties ar savu pieredzi. 75 00:04:32,620 --> 00:04:37,300 Tāpēc, lūdzu, piedalīties, ja jūs vēlētos. 76 00:04:37,300 --> 00:04:39,360 >> Datorzinību kursi Hārvardas ir mazliet tradīcijas, 77 00:04:39,360 --> 00:04:44,730 CS50 starp tiem, par kuru daži apģērbu, dažas drēbes, ka jūs varat valkāt ar lepnumu 78 00:04:44,730 --> 00:04:49,090 pēc semestra beigās, sakot diezgan lepni, ka esat pabeidzis CS50 79 00:04:49,090 --> 00:04:51,830 un ņēma CS50 un tamlīdzīgi, un mēs vienmēr cenšamies iesaistīt studentus 80 00:04:51,830 --> 00:04:54,540 Šajā procesā pēc iespējas vairāk, kad mēs aicinām, 81 00:04:54,540 --> 00:04:56,900 ap šo laiku semestra studenti iesniegt projektus 82 00:04:56,900 --> 00:04:59,330 izmantojot Photoshop, vai kāds instrumentu izvēle vēlaties izmantot 83 00:04:59,330 --> 00:05:02,330 ja tu esi dizainers, iesniegt dizainu T-krekli un sporta krekli 84 00:05:02,330 --> 00:05:06,100 un lietussargi un maz bandanas suņiem mums tagad ir un tamlīdzīgi. 85 00:05:06,100 --> 00:05:09,370 Un viss ir, tad - uzvarētāji katru gadu tam tiek izstādīti 86 00:05:09,370 --> 00:05:12,700 par kursu mājas lapā store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 Viss ir pārdots izmaksās tur, bet mājas lapā tikai iet sevi 88 00:05:15,790 --> 00:05:18,330 un ļauj cilvēkiem izvēlēties krāsas un dizainu, kas viņiem patīk. 89 00:05:18,330 --> 00:05:20,420 Tāpēc es domāju, ka mēs gribētu tikai dalīties dažas no pagājušā gada dizainu 90 00:05:20,420 --> 00:05:25,130 kas bija mājas lapā turklāt šo vienu šeit, kas ir ikgadēja tradīcija. 91 00:05:25,130 --> 00:05:29,410 "Katru dienu es esmu SEG Faultn" bija viens no apsvērumiem pagājušajā gadā, 92 00:05:29,410 --> 00:05:32,290 kas joprojām ir pieejams tur absolventiem. 93 00:05:32,290 --> 00:05:35,820 Mums bija šo vienu, "CS50, reģistrēts 1989." 94 00:05:35,820 --> 00:05:39,010 Viens no mūsu Bowdens, Robs, bija ļoti populāra pagājušā gadā. 95 00:05:39,010 --> 00:05:43,480 "Komandas Bowden" piedzima, šis dizains tika iesniegts, starp top pārdevējiem. 96 00:05:43,480 --> 00:05:49,040 Kā tas bija šo vienu šeit. Daudzi cilvēki bija "Bowden Fever" saskaņā ar pārdošanas baļķiem. 97 00:05:49,040 --> 00:05:52,650 Saprast, ka tagad varētu būt jūsu dizaina tur, līdzi internetā. 98 00:05:52,650 --> 00:05:57,510 Sīkāka informācija par šo in nākamo problēmu kopas nākt. 99 00:05:57,510 --> 00:06:00,330 >> Vēl viens instruments: jūs esat bijusi zināma ekspozīciju un cerams tagad 100 00:06:00,330 --> 00:06:02,350 kādu praktisku pieredzi ar gdb, 101 00:06:02,350 --> 00:06:04,570 kas ir, protams, atkļūdotājs un ļauj manipulēt 102 00:06:04,570 --> 00:06:09,500 Jūsu programma pie diezgan zemā līmenī, darot to, ko veida lietas? 103 00:06:09,500 --> 00:06:13,030 Kāda Gdb jums darīt? 104 00:06:13,030 --> 00:06:15,030 Yeah? Dodiet man kaut ko. [Studentu atbilde, nesaprotami] 105 00:06:15,030 --> 00:06:18,120 Good. Solis funkcija, tāpēc jums nav vienkārši ir veids palaistu 106 00:06:18,120 --> 00:06:22,310 un ir programma izpūš kopumā, izdrukāt lietas standarta produkciju. 107 00:06:22,310 --> 00:06:25,190 Drīzāk, jūs varat soli caur to pozīcijai, nu rakstīt nākamo 108 00:06:25,190 --> 00:06:30,300 lai iet pozīcijai pa līniju vai līmenī, kā nodoties funkciju, parasti viens, ka jūs wrote. 109 00:06:30,300 --> 00:06:35,240 Ko vēl Gdb jums darīt? Yeah? [Studentu atbilde, nesaprotami] 110 00:06:35,240 --> 00:06:38,100 Drukāt mainīgos. Tātad, ja jūs vēlaties darīt nedaudz pašanalīze iekšpusē jūsu programmā 111 00:06:38,100 --> 00:06:41,500 bez ķerties pie rakstīšanas printf paziņojumus visas vietas, 112 00:06:41,500 --> 00:06:44,600 Jūs varat vienkārši izdrukāt mainīgo vai parādīt mainīgo. 113 00:06:44,600 --> 00:06:46,710 Ko vēl jūs varat darīt ar atkļūdotājs kā gdb? 114 00:06:46,710 --> 00:06:49,170 [Studentu atbilde, nesaprotami] 115 00:06:49,170 --> 00:06:52,080 Tieši tā. Jūs varat iestatīt pārtraukumpunktus, jūs varat teikt break izpildi 116 00:06:52,080 --> 00:06:54,020 pie galvenās funkcijas vai foo funkciju. 117 00:06:54,020 --> 00:06:56,800 Jūs varat teikt, break izpildi pie 123 līnijas. 118 00:06:56,800 --> 00:06:58,950 Un kontrolpunkti ir ļoti jaudīga tehnika 119 00:06:58,950 --> 00:07:01,110 jo, ja jums ir vispārēju sajūtu kur jūsu problēma 120 00:07:01,110 --> 00:07:05,360 iespējams, ir, jums nav jātērē laiks pastiprināšanu, izmantojot programmas kopumā. 121 00:07:05,360 --> 00:07:08,250 Jūs varat būtiski lēkt tieši tur un tad sāciet rakstīt - 122 00:07:08,250 --> 00:07:10,970 pastiprināšanu caur to ar soli vai nākamo vai līdzīgi. 123 00:07:10,970 --> 00:07:14,340 Bet ar kaut ko līdzīgu gdb nozveju, ka tas palīdz jums, cilvēku, 124 00:07:14,340 --> 00:07:16,940 atrast savas problēmas un atrast savu bugs. 125 00:07:16,940 --> 00:07:19,470 Tas ne vienmēr atrast viņiem tik daudz par jums. 126 00:07:19,470 --> 00:07:23,070 >> Tāpēc mēs iepazīstināja citu dienu style50, kas ir īss komandrindas rīks 127 00:07:23,070 --> 00:07:27,500 kas mēģina Stylize savu kodu nedaudz vairāk tīri nekā jums, cilvēku, varētu būt izdarīts. 128 00:07:27,500 --> 00:07:29,530 Bet tas arī ir patiešām vienkārši estētisku lieta. 129 00:07:29,530 --> 00:07:34,110 Bet izrādās, tur ir šis cits rīks sauc Valgrind kas ir nedaudz vairāk arcane izmantot. 130 00:07:34,110 --> 00:07:36,860 Tās produkcija ir atrociously mistisks pirmā acu uzmetiena. 131 00:07:36,860 --> 00:07:39,420 Bet tas ir lieliski noderīgi, jo īpaši tagad, ka mēs esam pie daļu no termiņa 132 00:07:39,420 --> 00:07:43,080 kur jūs sāk izmantot malloc un dinamisko atmiņas sadalījumu. 133 00:07:43,080 --> 00:07:45,420 Lietas var iet tiešām, tiešām nepareizi ātri. 134 00:07:45,420 --> 00:07:49,320 Jo, ja esat aizmirsis, lai atbrīvotu savu atmiņu, vai jūs dereference kādu NULL rādītājs, 135 00:07:49,320 --> 00:07:55,770 vai jūs dereference kādu atkritumu rādītāju, kas ir parasti simptoms, kas izraisa? 136 00:07:55,770 --> 00:07:59,470 SEG vaina. Un jūs saņemsiet šo fundamentālo failu kādu skaita kilobaiti vai megabaitiem 137 00:07:59,470 --> 00:08:02,990 kas pārstāv valsti no jūsu programmas atmiņā, kad tas avarēja, 138 00:08:02,990 --> 00:08:05,730 bet jūsu programma galu galā SEG kļūdas, segmentēšanas vaina, 139 00:08:05,730 --> 00:08:08,450 kas nozīmē, kaut kas slikts noticis gandrīz vienmēr ir saistīta 140 00:08:08,450 --> 00:08:11,750 uz atmiņas saistītas kļūda, ka jūs veicāt kaut kur. 141 00:08:11,750 --> 00:08:14,100 Tātad Valgrind palīdz atrast lietas, kā šis. 142 00:08:14,100 --> 00:08:17,720 Tas ir instruments, kas jūs izmantojat, piemēram gdb, kad esat apkopojusi savu programmu, 143 00:08:17,720 --> 00:08:20,330 bet nevis palaist savu programmu tieši, palaižot Valgrind 144 00:08:20,330 --> 00:08:23,960 un jums iet uz to savu programmu, tāpat kā jūs darīt ar gdb. 145 00:08:23,960 --> 00:08:26,220 Tagad, izmantošana, lai iegūtu labāko veida produkciju, 146 00:08:26,220 --> 00:08:30,410 ir diezgan garš, tāpēc tieši tur novietotas uz ekrāna jūs redzēsiet Valgrind-V. 147 00:08:30,410 --> 00:08:35,350 "-V" gandrīz visur nozīmē runīgs, ja jūs izmantojat programmas uz Linux datorā. 148 00:08:35,350 --> 00:08:38,770 Tātad tas nozīmē, izspļaut vairāk datu nekā jūs varētu pēc noklusējuma. 149 00:08:38,770 --> 00:08:45,510 "- Noplūde pārbaudīt = pilns." Tas ir vienkārši sakot čeku par visiem iespējamiem atmiņas noplūdes, 150 00:08:45,510 --> 00:08:49,430 kļūdas, kas man varētu būt veikti. Arī tas ir kopīgs paradigma ar Linux programmām. 151 00:08:49,430 --> 00:08:52,710 Parasti, ja jums ir komandrindas argumentu, ka tas "slēdzis", 152 00:08:52,710 --> 00:08:55,830 kas ir paredzēts, lai mainītu programmas uzvedību, un tas ir viens burts, 153 00:08:55,830 --> 00:09:00,310 tas ir-pret, bet, ja tas ir ieslēgts, tikai ar dizainu programmētājs, 154 00:09:00,310 --> 00:09:05,150 ir pilna vārdu vai vārdu sērija, komandrindas arguments sākas ar -. 155 00:09:05,150 --> 00:09:08,190 Šie ir tikai cilvēka konvencijas, bet jūs redzēsiet tos aizvien. 156 00:09:08,190 --> 00:09:12,410 Un tad, beidzot, "a.out" ir patvaļīgs nosaukums programmas šajā piemērā. 157 00:09:12,410 --> 00:09:14,640 Un šeit ir daži pārstāvis produkciju. 158 00:09:14,640 --> 00:09:22,890 >> Pirms mēs apskatīt to, kas varētu nozīmēt, ļaujiet man iet vairāk nekā uz nelielā koda nekā šeit. 159 00:09:22,890 --> 00:09:26,390 Un ļaujiet man pāriet šis no tā, Drīzumā, 160 00:09:26,390 --> 00:09:32,120 un pieņemsim to apskatīt memory.c, kas šajā īsajā piemērs šeit. 161 00:09:32,120 --> 00:09:36,290 Tāpēc šajā programmā, ļaujiet man tuvinātu funkcijām un jautājumiem. 162 00:09:36,290 --> 00:09:39,430 Mums ir funkcija galvenais, kas prasa funkciju, F, 163 00:09:39,430 --> 00:09:45,590 un tad ko tas f turpināt darīt, jo nedaudz tehniskajā angļu valodā? 164 00:09:45,590 --> 00:09:49,760 Kāda f turpināt darīt? 165 00:09:49,760 --> 00:09:53,680 Kā par Es sāktu ar 20 līniju, un zvaigzne atrašanās nav svarīgi, 166 00:09:53,680 --> 00:09:56,720 bet es ņemšu tikai jāsaskan šeit ar pēdējo lekciju. 167 00:09:56,720 --> 00:09:59,910 Kas līnija 20 darīt mums? Kreisajā pusē. Mēs sadalīt tālāk. 168 00:09:59,910 --> 00:10:02,410 Int * x: ko tas dara? 169 00:10:02,410 --> 00:10:04,940 Labi. Tas atzīst rādītāju, un tagad būsim vēl vairāk tehniska. 170 00:10:04,940 --> 00:10:10,230 Ko tas nozīmē, ļoti konkrēti, atzīt rādītāju? Kāds cits? 171 00:10:10,230 --> 00:10:15,050 Yeah? [Studentu atbilde, nesaprotami] Pārāk tālu. 172 00:10:15,050 --> 00:10:17,060 Tātad jūs lasāt uz labajā pusē vienādības zīmi. 173 00:10:17,060 --> 00:10:20,290 Pieņemsim koncentrēties tikai uz kreisi, tikai uz int * x. 174 00:10:20,290 --> 00:10:24,700 Tas "deklarēt" rādītāju, bet tagad pieņemsim ienirt dziļāk šai definīcijai. 175 00:10:24,700 --> 00:10:28,330 Ko tas konkrēti, tehniski nozīmē? Yeah? 176 00:10:28,330 --> 00:10:31,940 [Studentu atbilde, nesaprotami] 177 00:10:31,940 --> 00:10:35,090 Labi. Tas ir gatavojas saglabāt adresi atmiņā. 178 00:10:35,090 --> 00:10:40,680 Good. Un pieņemsim šo vienu soli tālāk, tas ir atzīta par mainīgo x, kas ir 32 biti. 179 00:10:40,680 --> 00:10:44,440 Un es zinu, tas ir 32 biti, jo -? 180 00:10:44,440 --> 00:10:47,390 Tas nav tāpēc, ka tas ir int, jo tas ir rādītājs šajā gadījumā. 181 00:10:47,390 --> 00:10:49,650 Sakritība, ka tas ir viens un tas pats ar int, 182 00:10:49,650 --> 00:10:51,970 bet fakts, ka tur ir zvaigzne tur nozīmē tas ir rādītājs 183 00:10:51,970 --> 00:10:57,300 un iekārtas, kā ar daudziem datoriem, bet ne visi, norādes ir 32 biti. 184 00:10:57,300 --> 00:11:01,850 Uz vairāk mūsdienu aparatūru, tāpat vēlāk Mac, jaunākās datoriem, jums varētu būt 64-bit norādes, 185 00:11:01,850 --> 00:11:04,160 bet ierīci, šīs lietas ir 32 biti. 186 00:11:04,160 --> 00:11:08,380 Tāpēc mēs standartizēt to. Konkrētāk, stāsts iet šādi: 187 00:11:08,380 --> 00:11:10,820 Mēs "deklarēt" rādītāju, ko tas nozīmē? 188 00:11:10,820 --> 00:11:12,810 Mēs sagatavojam uzglabāt atmiņas adresi. 189 00:11:12,810 --> 00:11:15,530 Ko tas nozīmē? 190 00:11:15,530 --> 00:11:19,810 Mēs izveidot mainīgo sauc x, kas aizņem 32 bitus 191 00:11:19,810 --> 00:11:23,810 ka drīz uzglabāt adresi veselam skaitlim. 192 00:11:23,810 --> 00:11:26,470 Un tas ir iespējams, apmēram tikpat precīzi kā mēs varam iegūt. 193 00:11:26,470 --> 00:11:31,810 Tas ir jauki virzās uz priekšu, lai vienkāršotu pasauli un tikai teikt atzīt rādītāju sauc x. 194 00:11:31,810 --> 00:11:35,380 Atzīt rādītāju, bet saprast un saprast, kas patiesībā notiek 195 00:11:35,380 --> 00:11:38,490 pat tikai tajās nedaudzajās rakstzīmes. 196 00:11:38,490 --> 00:11:42,040 >> Tagad, šis viens ir gandrīz mazliet vieglāk, pat ja tas ir ilgāks izpausme. 197 00:11:42,040 --> 00:11:48,160 Kas tad ir šī dara, ka ir iezīmēts tagad: "malloc (10 * sizeof (int));" Jā? 198 00:11:48,160 --> 00:11:52,350 [Studentu atbilde, nesaprotami] 199 00:11:52,350 --> 00:11:58,250 Good. Un es ņemšu to tur. Tas piešķirot rieciens atmiņas desmit integers. 200 00:11:58,250 --> 00:12:02,190 Un tagad pieņemsim pikējošais nedaudz dziļāk, tas ir piešķirot rieciens atmiņas desmit integers. 201 00:12:02,190 --> 00:12:05,390 Kas ir malloc tam atgriežas? 202 00:12:05,390 --> 00:12:10,390 Adrese ka rieciens, vai, konkrētāk, adrese pirmās baits šī rieciens. 203 00:12:10,390 --> 00:12:14,080 Kā tad es esmu, programmētājs, kas zina, kur tas rieciens atmiņas galiem? 204 00:12:14,080 --> 00:12:18,340 Es zinu, ka tas ir blakus. Malloc, pēc definīcijas, sniegs jums blakusesošo rieciens atmiņas. 205 00:12:18,340 --> 00:12:21,240 Nav spraugu tajā. Jums ir pieeja katru baitu šajā rieciens, 206 00:12:21,240 --> 00:12:26,760 atpakaļ atpakaļ uz muguras, bet kā es varu zināt, kur šī rieciens atmiņas gals ir? 207 00:12:26,760 --> 00:12:28,850 Kad jūs izmantot malloc? [Studentu atbilde, nesaprotami] Laba. 208 00:12:28,850 --> 00:12:30,670 Jums nav. Jums ir jāatceras. 209 00:12:30,670 --> 00:12:35,960 Man ir jāatceras, ka es izmantoti vērtību 10, un man nav pat šķiet, ir izdarīts, ka šeit. 210 00:12:35,960 --> 00:12:41,000 Bet pienākums ir pilnīgi par mani. Strlen, ko mēs esam kļuvuši nedaudz atkarīga virknes, 211 00:12:41,000 --> 00:12:45,860 strādā tikai tāpēc, ka šīs konvencijas, kam \ 0 212 00:12:45,860 --> 00:12:48,840 vai šis īpašais Nul raksturs, NUL, beigās virknes. 213 00:12:48,840 --> 00:12:51,740 Tas nenozīmē, ka tur, lai tikai patvaļīgi gabalos atmiņas. 214 00:12:51,740 --> 00:12:58,590 Tas ir atkarīgs no jums. Tātad 20 līnijas, tad, piešķir rieciens atmiņas 215 00:12:58,590 --> 00:13:02,590 kas var uzglabāt 10 naturālus skaitļus, un tas saglabā adresi pirmo baitu 216 00:13:02,590 --> 00:13:05,610 Šī rieciens atmiņas mainīgo sauc x. 217 00:13:05,610 --> 00:13:11,140 ERGO, kas ir rādītājs. Tātad 21 līnija, diemžēl, bija kļūda. 218 00:13:11,140 --> 00:13:16,110 Bet vispirms, kas ir tā dara? Tā saka veikalu pie 10 vietā, indeksē 0, 219 00:13:16,110 --> 00:13:19,480 no atmiņas rieciens sauc x vērtība 0. 220 00:13:19,480 --> 00:13:21,510 >> Tāpēc pamanīt pāris lietas notiek. 221 00:13:21,510 --> 00:13:25,420 Pat ja x ir rādītājs, atceros no pāris nedēļas atpakaļ 222 00:13:25,420 --> 00:13:29,440 ka jūs joprojām varat izmantot masīvu stila kvadrātiekava notācija. 223 00:13:29,440 --> 00:13:36,180 Jo tas tiešām īstermiņa roku nošu par daudz noslēpumains izskata šautriņu aritmētika. 224 00:13:36,180 --> 00:13:40,320 kur mēs varētu darīt kaut kas līdzīgs šim: Veikt adrese X, pārvietot 10 plankumi pāri, 225 00:13:40,320 --> 00:13:44,550 tad iet tur, lai kāds adrese ir saglabāta šajā vietā. 226 00:13:44,550 --> 00:13:48,090 Bet godīgi sakot, tas ir tikai šausmīgs lasīt un iegūt apmierināti ar. 227 00:13:48,090 --> 00:13:52,900 Tātad pasaule parasti izmanto kvadrātiekavas tikai tāpēc, ka tas ir tik daudz cilvēku draudzīgu lasīt. 228 00:13:52,900 --> 00:13:55,140 Bet tas, ko īsti notiek zem pārsega; 229 00:13:55,140 --> 00:13:58,190 x ir adrese, nevis masīvs, per se. 230 00:13:58,190 --> 00:14:02,410 Tātad šis ir uzglabātu 0 pie in x 10 vietā. 231 00:14:02,410 --> 00:14:06,120 Kāpēc tas ir slikti? Yeah? 232 00:14:06,120 --> 00:14:17,370 [Studentu atbilde, nesaprotami] Tieši tā. 233 00:14:17,370 --> 00:14:21,100 Mēs tikai piešķirti 10 Ints, bet mēs paļaujamies no 0 plānojot C, 234 00:14:21,100 --> 00:14:25,690 tāpēc jums ir piekļuve 0 1 2 3 4 5 6 7 8 9, bet ne 10. 235 00:14:25,690 --> 00:14:30,270 Tātad vai nu programma ir gatavojas SEG vaina vai tā nav. 236 00:14:30,270 --> 00:14:32,900 Bet mēs īsti nezinām, tas ir sava veida nondeterministic uzvedību. 237 00:14:32,900 --> 00:14:35,600 Tas patiešām ir atkarīgs no tā, vai mēs laimīgs. 238 00:14:35,600 --> 00:14:40,650 Ja izrādās, ka operētājsistēma nav prātā, ja es izmantot šo papildu baitu, 239 00:14:40,650 --> 00:14:43,360 pat ja tā nav devusi to uz mani, mana programma varētu crash. 240 00:14:43,360 --> 00:14:46,780 Tas ir neapstrādātas, tas ir bagijs, bet jūs nevarēsiet redzēt, ka simptoms, 241 00:14:46,780 --> 00:14:48,960 vai jūs varētu redzēt to tikai reizi brītiņa. 242 00:14:48,960 --> 00:14:51,230 Bet realitāte ir tāda, ka kļūda ir, faktiski, tur. 243 00:14:51,230 --> 00:14:54,320 Un tas ir patiešām sarežģīti, ja jūs esat uzrakstījis programmu, kas jūs vēlaties būt pareizs, 244 00:14:54,320 --> 00:14:58,840 ka esat pārdevis, ka cilvēki izmanto, ka katru reizi brītiņa avārijās programmu 245 00:14:58,840 --> 00:15:02,450 jo, protams, tas nav labi. Patiesībā, ja jums ir Android tālruni vai iPhone 246 00:15:02,450 --> 00:15:05,550 un jums lejupielādēt progr šajās dienās, ja jūs esat kādreiz bija app vienkārši atmest, 247 00:15:05,550 --> 00:15:10,040 visi pēkšņi tā pazūd, tas gandrīz vienmēr rezultāts kaut atmiņas saistītu jautājumu, 248 00:15:10,040 --> 00:15:12,830 kuru programmētājs ieskrūvē augšu un dereferenced rādītāju 249 00:15:12,830 --> 00:15:18,670 ka viņš vai viņa nedrīkst būt, un par iOS vai Android rezultāts ir tikai nogalināt programmu vispār 250 00:15:18,670 --> 00:15:23,080 nevis riska nenoteiktu uzvedību vai kādu drošības kompromisu veida. 251 00:15:23,080 --> 00:15:25,950 >> Ir viena cita kļūda šajā programmā turklāt šo vienu. 252 00:15:25,950 --> 00:15:30,180 Kas vēl man ieskrūvē šajā programmā? 253 00:15:30,180 --> 00:15:32,740 Man nav praktizēta, ko es esmu sludināja. Yeah? 254 00:15:32,740 --> 00:15:34,760 [Studentu atbilde, nesaprotami] Laba. 255 00:15:34,760 --> 00:15:36,880 Man nav atbrīvojušies atmiņu. Tāpēc īkšķis tagad 256 00:15:36,880 --> 00:15:43,150 ir jābūt jebkurā laikā jūs aicinu malloc, jums ir zvanīt bez kad tas ir paveikts, izmantojot šo atmiņu. 257 00:15:43,150 --> 00:15:45,610 Tagad, kad es gribu, lai atbrīvotu šo atmiņu? 258 00:15:45,610 --> 00:15:49,780 Droši vien, pieņemot, ka tas pirmajā rindā bija pareizs, es gribētu to darīt šeit. 259 00:15:49,780 --> 00:15:55,710 Tā kā es nevarēju, piemēram, darīt to šeit. Kāpēc? 260 00:15:55,710 --> 00:15:57,860 Tikai no jomas. Tātad, pat ja mēs runājam par norādes, 261 00:15:57,860 --> 00:16:04,830 tas ir nedēļa 2 vai 3 jautājums, kur x ir tikai joma iekšpusē cirtaini bikšturi, kur tas tika pasludināts. 262 00:16:04,830 --> 00:16:11,000 Tātad, jūs noteikti nevar atbrīvot to tur. Mana vienīgā iespēja, lai atbrīvotu to ir aptuveni pēc 21 līniju. 263 00:16:11,000 --> 00:16:15,170 Tas ir diezgan vienkārša programma, tas bija diezgan viegli, kad jūs veida ietin savu prātu 264 00:16:15,170 --> 00:16:17,870 ap ko programma dara, kur kļūdas bija. 265 00:16:17,870 --> 00:16:20,500 Un pat ja jūs neredzat to sākumā, cerams tas maz skaidrs tagad 266 00:16:20,500 --> 00:16:23,870 ka šīs kļūdas ir diezgan viegli atrisināt, un viegli veikt. 267 00:16:23,870 --> 00:16:28,720 Bet, kad programma ir vairāk nekā 12 līnijas ilgi, tas ir 50 pozīcijas garš, 100 līnijas ilgi, 268 00:16:28,720 --> 00:16:31,150 ejot caur savu kodu pozīcijai, domājot ar to loģiski, 269 00:16:31,150 --> 00:16:35,110 ir iespējams, bet nav īpaši jautri darīt, pastāvīgi meklē bugs, 270 00:16:35,110 --> 00:16:38,340 un tas ir arī grūti izdarīt, un tāpēc līdzīgi Valgrind līdzeklis pastāv. 271 00:16:38,340 --> 00:16:40,900 Ļaujiet man iet uz priekšu un darīt: ļaujiet man atvērt manu termināļa logu, 272 00:16:40,900 --> 00:16:45,400 un ļaujiet man ne tikai palaist atmiņu, jo atmiņas, šķiet, ir labi. 273 00:16:45,400 --> 00:16:49,180 Es saņemu laimīgs. Dodas uz šo papildu baitu beigās masīva 274 00:16:49,180 --> 00:16:51,060 nešķiet pārāk problemātiska. 275 00:16:51,060 --> 00:16:56,370 Bet ļaujiet man, tomēr, do veselība pārbaudītu, kas nozīmē tikai pārbaudīt 276 00:16:56,370 --> 00:16:58,320 vai tas ir faktiski pareiza. 277 00:16:58,320 --> 00:17:04,690 >> Tātad, pieņemsim do Valgrind-V - noplūdes pārbaudīt = pilns, 278 00:17:04,690 --> 00:17:07,520 un tad programmas šajā gadījumā vārds ir atmiņa, nevis a.out. 279 00:17:07,520 --> 00:17:10,760 Tāpēc ļaujiet man iet uz priekšu un darīt to. Hit Enter. 280 00:17:10,760 --> 00:17:14,109 Dārgais Dievs. Tas ir tā produkcija, un tas ir tas, ko es pieminēja agrāk. 281 00:17:14,109 --> 00:17:17,550 Bet, ja jūs uzzinātu izlasīt visu muļķības šeit, 282 00:17:17,550 --> 00:17:20,760 lielākā daļa no tā ir tikai diagnostikas izeja tas nav tik interesanti. 283 00:17:20,760 --> 00:17:24,829 Kāds jūsu acu īsti grib, lai meklē, ir ne vārda par kļūdu vai nederīgu. 284 00:17:24,829 --> 00:17:26,800 Vārdi, kas liecina problēmas. 285 00:17:26,800 --> 00:17:29,340 Un tiešām, pieņemsim redzēt, kas notiek nepareizi leju šeit. 286 00:17:29,340 --> 00:17:35,230 Man ir kopsavilkums par sava veida, "lietojamo izeju:. 40 baiti 1 blokos" 287 00:17:35,230 --> 00:17:38,750 Es neesmu īsti pārliecināts, ko bloks ir vēl, bet 40 baiti 288 00:17:38,750 --> 00:17:41,260 patiesībā jūtas kā es varētu izdomāt, kur tas nāk no. 289 00:17:41,260 --> 00:17:45,030 40 baiti. Kāpēc ir 40 baiti lietošanai izejas? 290 00:17:45,030 --> 00:17:48,780 Un jo īpaši, ja mēs ritiniet uz leju šeit, 291 00:17:48,780 --> 00:17:54,520 kāpēc es noteikti zaudējuši 40 baiti? Yeah? 292 00:17:54,520 --> 00:17:59,520 [Studentu atbilde, nesaprotami] Perfect. Jā, tieši tā. 293 00:17:59,520 --> 00:18:03,540 Tur bija desmit veseli skaitļi, un katrs no tiem ir izmērs 4, 32 vai bitiem, 294 00:18:03,540 --> 00:18:08,300 tāpēc es esmu zaudējis precīzi 40 baiti, jo, kā jūs ierosināts, man nav sauc par bezmaksas. 295 00:18:08,300 --> 00:18:13,460 Tas ir viens bug, un tagad pieņemsim skatīties uz leju nedaudz tālāk un redzēt blakus tam, 296 00:18:13,460 --> 00:18:16,900 "Nederīgs rakstīt 4 lielumu." Tagad to, kas ir šis? 297 00:18:16,900 --> 00:18:21,150 Šī adrese ir izteikta kāda bāze notāciju, acīmredzot? 298 00:18:21,150 --> 00:18:23,640 Tas ir heksadecimālajā un jebkurā laikā jūs redzēsiet vairākas sākot ar 0x, 299 00:18:23,640 --> 00:18:29,410 tas nozīmē heksadecimālajā ko mēs darījām ceļu atpakaļ, es domāju, PSET 0 s sadaļā jautājumiem, 300 00:18:29,410 --> 00:18:34,090 kas bija tikai darīt warmup izmantot, pārvēršot decimal, lai Hex uz bināro un tā tālāk. 301 00:18:34,090 --> 00:18:39,220 Heksadecimālajā tikai ar cilvēka konvencija, parasti izmanto, lai pārstāvētu norādes 302 00:18:39,220 --> 00:18:41,570 vai, plašākā nozīmē, adreses. Tas ir tikai konvencija, 303 00:18:41,570 --> 00:18:45,340 jo tas ir mazliet vieglāk lasīt, tas ir nedaudz kompaktāka nekā kaut ko līdzīgu decimālzīmei, 304 00:18:45,340 --> 00:18:47,720 un bināro ir bezjēdzīgi lielākā daļa cilvēku izmantot. 305 00:18:47,720 --> 00:18:50,840 Tātad tagad, ko tas nozīmē? Nu, izskatās, ka tur ir nederīgs rakstīt 306 00:18:50,840 --> 00:18:54,480 punktā par gada memory.c 21 līnijas 4 izmērs. 307 00:18:54,480 --> 00:18:59,180 Tāpēc iesim atpakaļ uz 21 līnijas, un, protams, šeit ir tas, ka nederīgs rakstīt. 308 00:18:59,180 --> 00:19:02,640 Tāpēc Valgrind nav gatavojas pilnībā turēt manu roku un man noteikt ir, 309 00:19:02,640 --> 00:19:05,520 bet tas ir atklāt, ka es esmu dara nederīgu rakstīt. 310 00:19:05,520 --> 00:19:08,800 Es esmu aizkustinošs 4 baitus, ka man vajadzētu būt, un acīmredzot tas ir tāpēc, 311 00:19:08,800 --> 00:19:13,960 kā jūs norādīja, es esmu dara [10], nevis [9] maksimāli 312 00:19:13,960 --> 00:19:16,660 vai [0] vai starp kaut ko. 313 00:19:16,660 --> 00:19:19,690 Ar Valgrind, realizēt jebkurā laikā jūs tagad rakstot programmu 314 00:19:19,690 --> 00:19:24,190 kas izmanto norādes un izmanto atmiņu, un malloc konkrētāk, 315 00:19:24,190 --> 00:19:27,080 noteikti nokļūt ieradumos darbojas šī ilgi 316 00:19:27,080 --> 00:19:30,890 bet ļoti viegli nokopēt un ielīmēt komandu Valgrind 317 00:19:30,890 --> 00:19:32,650 lai redzētu, vai tur ir dažas tur kļūdas. 318 00:19:32,650 --> 00:19:34,820 Un tas būs milzīgs katru reizi, kad jūs redzēt rezultātu, 319 00:19:34,820 --> 00:19:39,430 bet tikai izanalizēt caur vizuāli visa saražotā produkcija un redzēt, ja jūs redzat piemin kļūdas 320 00:19:39,430 --> 00:19:43,190 vai brīdinājumi vai nederīgs vai pazaudēti. 321 00:19:43,190 --> 00:19:46,200 Jebkurš vārds, kas skaņu kā jūs ieskrūvē up kaut kur. 322 00:19:46,200 --> 00:19:48,580 Lai saprastu, ka tas jaunais rīks jūsu rīkkopa. 323 00:19:48,580 --> 00:19:51,270 >> Tagad pirmdien, mums bija viss ķekars ļaudīm nākt klajā šeit 324 00:19:51,270 --> 00:19:53,150 un pārstāvēt jēdzienu saistītu sarakstu. 325 00:19:53,150 --> 00:20:00,970 Un mēs ieviesa saistīts saraksts kā risinājumu kāda problēma? 326 00:20:00,970 --> 00:20:04,590 Yeah? [Studentu atbilde, nesaprotami] Laba. 327 00:20:04,590 --> 00:20:06,530 Masīvi nevar būt atmiņas pievienots tiem. 328 00:20:06,530 --> 00:20:09,440 Ja jūs piešķirt masīvs 10 izmēra, kas ir viss jums. 329 00:20:09,440 --> 00:20:13,690 Jūs varat zvanīt funkcija ir līdzīga realloc ja sākotnēji sauc malloc, 330 00:20:13,690 --> 00:20:17,580 un kas var mēģināt augt masīvs, ja ir telpa uz beigām tā 331 00:20:17,580 --> 00:20:21,610 ka neviens cits izmanto, un, ja tur nav, tas būs vienkārši atrast jums lielāku gabalu kaut kur citur. 332 00:20:21,610 --> 00:20:25,040 Bet tad tas būs kopija visu šo baitu jaunajā masīvā. 333 00:20:25,040 --> 00:20:28,310 Tas izklausās ļoti pareizs risinājums. 334 00:20:28,310 --> 00:20:34,790 Kāpēc tas ir nepievilcīga? 335 00:20:34,790 --> 00:20:36,940 Es domāju tas darbojas, cilvēki ir atrisināt šo problēmu. 336 00:20:36,940 --> 00:20:40,710 Kāpēc mums ir nepieciešams, lai atrisinātu to pirmdien ar saistītas sarakstiem? Yeah? 337 00:20:40,710 --> 00:20:44,060 [Studentu atbilde, nesaprotami] Tas varētu aizņemt ilgu laiku. 338 00:20:44,060 --> 00:20:49,260 Patiesībā, jebkurā laikā jūs zvanāt malloc vai realloc vai calloc, kas ir vēl otrs, 339 00:20:49,260 --> 00:20:52,470 jebkurā laikā jūs, programmas, runā ar operētājsistēmu, 340 00:20:52,470 --> 00:20:54,310 Jums ir tendence palēnināt programmas leju. 341 00:20:54,310 --> 00:20:57,470 Un, ja jūs darāt šāda veida lietām cilpas, jūs tiešām kavē lietas leju. 342 00:20:57,470 --> 00:21:00,740 Jūs neesat gatavojas nepamanīt par vienkāršāko "Hello World" tipa programmām, 343 00:21:00,740 --> 00:21:04,300 bet daudz lielākām programmām, lūdzot operētājsistēmu atkal un atkal atmiņas 344 00:21:04,300 --> 00:21:07,520 vai sniedzot to atkal un atkal mēdz nebūt laba lieta. 345 00:21:07,520 --> 00:21:11,210 Plus, tas ir tikai sava veida intelektuāli - tas ir pilnīga laika izšķiešana. 346 00:21:11,210 --> 00:21:16,490 Kāpēc piešķirt vairāk un vairāk atmiņas, riska kopēšana viss uz jauno bloku, 347 00:21:16,490 --> 00:21:21,980 ja jums ir alternatīva, kas ļauj piešķirt tikai tik daudz atmiņu, kā jums tiešām ir nepieciešams? 348 00:21:21,980 --> 00:21:24,130 Tātad tur ir plusi un mīnusi, kas šeit. 349 00:21:24,130 --> 00:21:26,730 Viens no plusiem ir tāda, ka mums ir dinamismu. 350 00:21:26,730 --> 00:21:29,100 Nav svarīgi, kur atmiņas gabalos ir, ka ir bezmaksas, 351 00:21:29,100 --> 00:21:32,070 Es varu tikai veida radītu šīs maizes drupatas pa šautru 352 00:21:32,070 --> 00:21:34,470 lai piesietu visa mana saistīts saraksts kopā. 353 00:21:34,470 --> 00:21:36,470 Bet man ir jāmaksā vismaz vienu cenu. 354 00:21:36,470 --> 00:21:40,060 >> Kas man ir jāatsakās gūstot saistītas sarakstus? 355 00:21:40,060 --> 00:21:42,470 Yeah? [Studentu atbilde, nesaprotami] Laba. 356 00:21:42,470 --> 00:21:45,650 Jums ir nepieciešams vairāk atmiņas. Tagad man vajag telpa šiem šautru, 357 00:21:45,650 --> 00:21:47,900 un attiecībā uz šo super vienkāršu saistīts saraksts 358 00:21:47,900 --> 00:21:51,410 kas ir tikai cenšas saglabāt veselus skaitļus, kas ir 4 baiti, mēs turpinām sakot 359 00:21:51,410 --> 00:21:54,240 labi, rādītājs ir 4 baiti, tāpēc tagad es esmu burtiski dubultojies 360 00:21:54,240 --> 00:21:57,290 atmiņas daudzums man vajag tikai, lai saglabātu šo sarakstu. 361 00:21:57,290 --> 00:21:59,680 Bet atkal, tas ir nemainīgs tradeoff datorzinātnēs 362 00:21:59,680 --> 00:22:03,440 starp laiku un telpu un attīstības, pūļu un citu resursu. 363 00:22:03,440 --> 00:22:06,630 Kas cits, izmantojot saistītu sarakstu negatīvie? Yeah? 364 00:22:06,630 --> 00:22:10,150 [Studentu atbilde, nesaprotami] 365 00:22:10,150 --> 00:22:12,600 Good. Nav tik viegli piekļūt. Mēs vairs nevar sviras 366 00:22:12,600 --> 00:22:15,530 nedēļā 0 principus, piemēram, skaldi un valdi. 367 00:22:15,530 --> 00:22:18,220 Un konkrētāk, binārā meklēšana. Jo, pat ja mēs cilvēkiem 368 00:22:18,220 --> 00:22:20,400 var redzēt aptuveni kur šā saraksta vidu ir, 369 00:22:20,400 --> 00:22:25,840 dators tikai zina, ka tas saistīts saraksts sākas pēc adreses sauc pirmās. 370 00:22:25,840 --> 00:22:28,250 Un tas ir 0x123 vai kaut kas tamlīdzīgs. 371 00:22:28,250 --> 00:22:30,990 Un vienīgais veids, kā programma var atrast vidusceļu elements 372 00:22:30,990 --> 00:22:33,350 ir faktiski meklēt visu sarakstu. 373 00:22:33,350 --> 00:22:35,500 Un pat tad, tas burtiski ir meklēt visu sarakstu, jo 374 00:22:35,500 --> 00:22:38,950 pat tad, kad jūs sasniegsiet vidējo elementu, izpildot norādes, 375 00:22:38,950 --> 00:22:42,380 Jūs, programma, nav ne jausmas, cik ilgi šis saraksts ir, iespējams, 376 00:22:42,380 --> 00:22:45,250 līdz sasniegsiet beigām par to, un kā jūs zināt programmiski 377 00:22:45,250 --> 00:22:48,600 ka tu esi beigās saistītajā sarakstā? 378 00:22:48,600 --> 00:22:51,120 Tur īpašs NULL rādītājs, lai atkal, konvencija. 379 00:22:51,120 --> 00:22:53,870 Nevis izmantot šo rādītāju, mēs noteikti negribam, lai to dažas atkritumu vērtība 380 00:22:53,870 --> 00:22:57,750 norādot off stadijā kaut, mēs gribam, lai būtu roku uz leju, null, 381 00:22:57,750 --> 00:23:01,530 tāpēc, ka mums ir šis Terminus šajā datu struktūru, lai mēs zinām, kur tas beidzas. 382 00:23:01,530 --> 00:23:03,410 >> Ko darīt, ja mēs vēlamies, lai manipulēt šo? 383 00:23:03,410 --> 00:23:05,980 Mēs to darījām lielākā daļa šo vizuāli, un ar cilvēkiem, 384 00:23:05,980 --> 00:23:07,630 bet ko tad, ja mēs vēlamies darīt ievietošanu? 385 00:23:07,630 --> 00:23:12,360 Tātad sākotnējā sarakstā bija 9, 17, 20, 22, 29, 34. 386 00:23:12,360 --> 00:23:16,730 Ko darīt, ja mēs pēc tam vēlējāmies malloc vietu skaita 55 mezglu par to, 387 00:23:16,730 --> 00:23:20,730 un tad mēs vēlamies ievietot 55 uz sarakstu tāpat kā mēs to darījām pirmdien? 388 00:23:20,730 --> 00:23:23,690 Kā mēs to darām? Nu, Anita nāca klajā un viņa būtībā gāja sarakstu. 389 00:23:23,690 --> 00:23:27,500 Viņa sāka pie pirmā elementa, tad nākamo, nākamais, nākamais, nākamais, nākamais. 390 00:23:27,500 --> 00:23:29,500 Beidzot hit kreiso galam 391 00:23:29,500 --> 00:23:34,480 un sapratu, ak, tas ir NULL. Tātad, ko rādītājs manipulācijas vajadzēja darīt? 392 00:23:34,480 --> 00:23:37,980 Persona, kas bija uz beigām, numurs 34, nepieciešama viņa kreiso roku izvirzīts 393 00:23:37,980 --> 00:23:46,220 līdz punktam 55, 55 bija nepieciešams viņu kreiso roku uz leju, lai jaunais NULL Terminator. Darīts. 394 00:23:46,220 --> 00:23:49,540 Diezgan viegli ievietot 55 par šķiroto sarakstā. 395 00:23:49,540 --> 00:23:51,800 Un kā tas varētu izskatīties? 396 00:23:51,800 --> 00:23:55,690 >> Ļaujiet man iet uz priekšu un atvērt dažas koda piemērs šeit. 397 00:23:55,690 --> 00:23:58,120 Es atvērt gedit, un ļaujiet man atvērt divus failus pirmās. 398 00:23:58,120 --> 00:24:02,050 Viens no tiem ir list1.h, un ļaujiet man tikai atgādināt, ka tas bija rieciens kodu 399 00:24:02,050 --> 00:24:04,920 ka mēs izmantot, lai pārstāvētu mezglu. 400 00:24:04,920 --> 00:24:13,040 Mezgls ir gan int sauc n un rādītāju sauc blakus kas tikai norāda uz nākamo lieta sarakstā. 401 00:24:13,040 --> 00:24:15,450 Tas tagad ir. H failu. Kāpēc? 402 00:24:15,450 --> 00:24:19,090 Tur šī konvencija, un mēs neesam izmantojuši šo milzīgu paši, 403 00:24:19,090 --> 00:24:22,220 bet persona, kas rakstīja printf un citas funkcijas 404 00:24:22,220 --> 00:24:27,150 deva kā dāvanu pasaulei visus šīm funkcijām, rakstot failu sauc stdio.h. 405 00:24:27,150 --> 00:24:30,950 Un tad tur ir string.h, un tad tur map.h, un tur ir visi šie h faili 406 00:24:30,950 --> 00:24:34,410 ka Jums varētu būt redzējis vai izmanto termiņa laikā raksta citiem cilvēkiem. 407 00:24:34,410 --> 00:24:38,470 Parasti tie h faili ir. Tikai lietas, piemēram typedefs 408 00:24:38,470 --> 00:24:42,310 vai deklarācijas par pasūtījuma veidiem vai deklarācijās konstantes. 409 00:24:42,310 --> 00:24:47,890 Jums nav likts funkcijas "implementācijas header failus. 410 00:24:47,890 --> 00:24:50,570 Jūs likts vietā, tikai savu prototipu. 411 00:24:50,570 --> 00:24:53,050 Jūs nodot lietas, ko vēlaties dalīties ar pasauli, kas tiem nepieciešams 412 00:24:53,050 --> 00:24:55,640 lai apkopotu savu kodu. Tik vienkārši, lai iegūtu šajā ieradums, 413 00:24:55,640 --> 00:24:59,110 mēs nolēmām darīt to pašu. Tur nav daudz list1.h, 414 00:24:59,110 --> 00:25:02,070 bet mēs esam likts kaut kas varētu būt interesanta cilvēkiem pasaulē 415 00:25:02,070 --> 00:25:05,030 kas vēlas izmantot mūsu saistīts saraksts īstenošanu. 416 00:25:05,030 --> 00:25:08,040 Tagad, list1.c, es neiešu cauri visu šo lietu 417 00:25:08,040 --> 00:25:11,390 jo tas ir nedaudz par garu, šī programma, bet pieņemsim palaist to reālā ātri uzvednē. 418 00:25:11,390 --> 00:25:15,720 Ļaujiet man apkopot List1, ļaujiet man tad palaist List1, un ko jūs redzēsiet, ir 419 00:25:15,720 --> 00:25:18,070 Mēs esam modelētiem vienkāršu maz programmu šeit 420 00:25:18,070 --> 00:25:20,990 kas notiek, lai ļauj man pievienot un noņemt numurus sarakstā. 421 00:25:20,990 --> 00:25:24,310 Tāpēc ļaujiet man iet uz priekšu un rakstīt par izvēlnes iespējas 3 3. 422 00:25:24,310 --> 00:25:27,880 Es gribu ievietot numuru - pieņemsim do pirmais numurs, kas bija 9, 423 00:25:27,880 --> 00:25:30,550 un tagad es esmu teicis saraksts ir tagad 9. 424 00:25:30,550 --> 00:25:33,760 Ļaujiet man iet uz priekšu un darīt citas ievietošanu, tāpēc es hit izvēlnes iespēju 3. 425 00:25:33,760 --> 00:25:36,760 Ko skaits vēlos ievietot? 17. 426 00:25:36,760 --> 00:25:39,220 Enter. Un es darīšu tikai viens. 427 00:25:39,220 --> 00:25:41,720 Ļaujiet man ievietot numuru 22. 428 00:25:41,720 --> 00:25:45,850 Tāpēc mums ir aizsākumu saistītajā sarakstā, kas mums bija slaida kā pirms brīža. 429 00:25:45,850 --> 00:25:48,740 Kā tas ievietošanas patiesībā notiek? 430 00:25:48,740 --> 00:25:52,000 Patiešām, 22 ir tagad pie saraksta beigās. 431 00:25:52,000 --> 00:25:55,050 Tātad stāsts mēs teicis uz skatuves pirmdien un recapped tikai tagad 432 00:25:55,050 --> 00:25:57,460 patiešām tiek notiek kodu. 433 00:25:57,460 --> 00:25:59,700 Pieņemsim to apskatīt. Ļaujiet man ritiniet uz leju šajā failā. 434 00:25:59,700 --> 00:26:01,720 Mēs spīdums pār kādu no funkcijām, 435 00:26:01,720 --> 00:26:05,630 bet mēs iesim uz leju, lai, teiksim, ievietot funkciju. 436 00:26:05,630 --> 00:26:11,720 >> Let 's redzēt, kā mēs iet par ievietojot jaunu mezglu saistībā ar šo saistīts saraksts. 437 00:26:11,720 --> 00:26:14,550 Kur ir saraksts deklarēta? Nu, pieņemsim ritiniet visu ceļu augšā, 438 00:26:14,550 --> 00:26:19,970 un ievēroju, ka mana saistīts saraksts būtībā deklarēta kā viens rādītājs, kas ir sākotnēji NULL. 439 00:26:19,970 --> 00:26:23,180 Tāpēc es esmu, izmantojot globālo mainīgo šeit, kas kopumā mēs esam sludināja pret 440 00:26:23,180 --> 00:26:25,280 jo tas padara jūsu kods nedaudz netīrs, lai saglabātu, 441 00:26:25,280 --> 00:26:29,080 tas ir sava veida slinks, parasti, bet tas nav slinks un tas nav nepareizi, un tas nav slikti 442 00:26:29,080 --> 00:26:33,660 Ja programma ir vienīgais mērķis dzīvē ir simulēt viens saistīts sarakstu. 443 00:26:33,660 --> 00:26:35,460 Kas ir tieši tas, ko mēs darām. 444 00:26:35,460 --> 00:26:39,100 Tātad, nevis pasludināt to galvenais un tad ir nodot to uz katru funkciju 445 00:26:39,100 --> 00:26:42,640 mēs esam rakstīts šajā programmā, mēs tā vietā saprotam ak, pieņemsim tikai padara to globālo 446 00:26:42,640 --> 00:26:47,060 jo viss, lai šīs programmas mērķis ir demonstrēt tikai viena vienīga saistīts saraksts. 447 00:26:47,060 --> 00:26:50,700 Tāpēc, ka jūtas labi. Te ir manas prototipi, un mēs ne iet cauri visiem šiem, 448 00:26:50,700 --> 00:26:55,800 bet es uzrakstīju dzēst funkciju, atrast funkciju, baseins ievietot funkcija, un traversa funkciju. 449 00:26:55,800 --> 00:26:59,080 Bet pieņemsim tagad iet atpakaļ uz leju, lai ievietošanas funkciju 450 00:26:59,080 --> 00:27:01,490 un redzēt, kā tas viens strādā šeit. 451 00:27:01,490 --> 00:27:09,940 Ieliktnis ir uz līnijas - šeit mēs iet. 452 00:27:09,940 --> 00:27:12,850 Ievietot. Tāpēc tas neveic nekādus argumentus, jo mēs ejam lūgt 453 00:27:12,850 --> 00:27:15,930 lietotājs iekšpuses šo funkciju skaitu viņi vēlas ievietot. 454 00:27:15,930 --> 00:27:19,410 Bet vispirms mēs sagatavot dot viņiem dažas vietas. 455 00:27:19,410 --> 00:27:22,050 Tas ir sava veida kopēt un ielīmēt no citām piemērs. 456 00:27:22,050 --> 00:27:25,110 Šajā gadījumā mēs piešķirot int, šoreiz mēs piešķirot mezglu. 457 00:27:25,110 --> 00:27:27,910 Man nav īsti atcerēties, cik baiti mezgls ir, bet tas ir jauki. 458 00:27:27,910 --> 00:27:30,460 Sizeof var izdomāt par mani. 459 00:27:30,460 --> 00:27:33,340 Un kāpēc es esmu pārbaudot NULL ar 120 līniju? 460 00:27:33,340 --> 00:27:37,530 Kas varētu iet greizi 119 rindā? Yeah? 461 00:27:37,530 --> 00:27:40,530 [Studentu atbilde, nesaprotami] 462 00:27:40,530 --> 00:27:43,440 Good. Vienkārši varētu būt gadījums, ka es esmu lūdza pārāk daudz atmiņu 463 00:27:43,440 --> 00:27:47,020 vai kaut kas ir nepareizi, un operētājsistēma nav pietiekami daudz baitus, lai dotu man, 464 00:27:47,020 --> 00:27:50,640 tāpēc tas signalizē par daudz, atgriežoties null, un, ja man nav pārbaudīt, ka 465 00:27:50,640 --> 00:27:54,710 un es tikai akli turpināt izmantot adresi atgriezās, tas varētu būt nulle. 466 00:27:54,710 --> 00:27:58,400 Tas varētu būt daži nezināms vērtība, nav laba lieta, ja es - 467 00:27:58,400 --> 00:28:00,590 faktiski nebūs zināms vērtību. Tas varētu būt nulle, tāpēc es nevēlos 468 00:28:00,590 --> 00:28:02,550 ļaunprātīgi to un riskēt dereferencing to. 469 00:28:02,550 --> 00:28:07,410 Ja tas notiks, es tikai atgriezties un mēs izlikties, piemēram, es nedabūju atpakaļ jebkuru atmiņu vispār. 470 00:28:07,410 --> 00:28:12,270 >> Citādi, es pateikt lietotājam dod man numuru, lai ievietotu, es aicinu mūsu vecais draugs GetInt, 471 00:28:12,270 --> 00:28:15,530 un tad tas bija jaunā sintakse mēs iepazīstināja pirmdien. 472 00:28:15,530 --> 00:28:20,320 "Newptr-> n 'nozīmē veikt adresi, kas jums tika dota ar malloc 473 00:28:20,320 --> 00:28:23,490 kas ir pirmais baits jaunu mezglu objektu, 474 00:28:23,490 --> 00:28:26,860 un tad doties uz lauka sauc n. 475 00:28:26,860 --> 00:28:35,270 Mazliet nieki jautājums: Tas ir līdzvērtīgi tam, ko vairāk mistisks līniju kodu? 476 00:28:35,270 --> 00:28:38,110 Kā vēl es varētu būt rakstīts šo? Vēlaties veikt stab? 477 00:28:38,110 --> 00:28:41,480 [Studentu atbilde, nesaprotami] 478 00:28:41,480 --> 00:28:44,870 Good. Izmantojot. N, bet tas nav gluži tik vienkārši, kā šis. 479 00:28:44,870 --> 00:28:47,090 Kas man vispirms ir nepieciešams darīt? [Studentu atbilde, nesaprotami] 480 00:28:47,090 --> 00:28:52,730 Good. Man vajag darīt * newptr.n. 481 00:28:52,730 --> 00:28:55,610 Tātad tas ir saprotams jaunais rādītājs acīmredzot adresi. Kāpēc? 482 00:28:55,610 --> 00:28:59,520 Jo tas bija atpakaļ ar malloc. Iesaistoties * newptr sakot "iet tur," 483 00:28:59,520 --> 00:29:02,970 un tad, kad tu esi tur, tad jūs varat izmantot vairāk pazīstams. N, 484 00:29:02,970 --> 00:29:05,730 bet tas tikai izskatās mazliet neglīts, jo īpaši, ja mēs cilvēki ir gatavojas 485 00:29:05,730 --> 00:29:10,360 sagatavo norādes ar bultiņām visu laiku, pasaule ir standartizēts uz šo arrow apzīmējums, 486 00:29:10,360 --> 00:29:12,320 kas dara tieši to pašu. 487 00:29:12,320 --> 00:29:16,070 Tātad jums tikai izmantot -> notation kad pa kreisi lieta ir rādītājs. 488 00:29:16,070 --> 00:29:18,790 Pretējā gadījumā, ja tas ir faktiskā struktūrai, izmantojiet. N. 489 00:29:18,790 --> 00:29:25,800 Un tad šis: Kāpēc es sāktu newptr-> blakus uz NULL? 490 00:29:25,800 --> 00:29:28,610 Mēs nevēlamies dangling kreiso roku nost no beigām skatuves. 491 00:29:28,610 --> 00:29:31,630 Mēs vēlamies, norādot taisni uz leju, kas nozīmē beigas šā saraksta 492 00:29:31,630 --> 00:29:34,980 iespējams, varētu būt šo mezglu, lai mēs labāk pārliecinieties, ka tā ir NULL. 493 00:29:34,980 --> 00:29:38,460 Un, vispār, inicializēšana jūsu mainīgos vai jūsu datu locekļiem un structs 494 00:29:38,460 --> 00:29:40,470 lai kaut kas ir vienkārši laba prakse. 495 00:29:40,470 --> 00:29:45,170 Vienkārši ļaujot atkritumu pastāv un turpina pastāvēt parasti izpaužas jums nepatikšanas 496 00:29:45,170 --> 00:29:48,650 ja esat aizmirsis kaut ko darīt vēlāk. 497 00:29:48,650 --> 00:29:51,590 >> Lūk dažas lietas. Tas atkal ir ievietot funkcija, 498 00:29:51,590 --> 00:29:54,930 un pirmā lieta, ko es pārbaudītu, ir, ja mainīgais sauc par pirmo, 499 00:29:54,930 --> 00:29:58,240 ka globālā mainīgais ir NULL, tas nozīmē, ka nav saistīts saraksts. 500 00:29:58,240 --> 00:30:02,460 Mums nav ievietota nekādus skaitļus, tāpēc tas ir niecīgs, lai ievietotu šo pašreizējo skaitu 501 00:30:02,460 --> 00:30:05,240 šajā sarakstā, jo tas vienkārši pieder sākumā sarakstā. 502 00:30:05,240 --> 00:30:08,100 Tātad tas bija, kad Anita bija tikai stāvus šeit vien, izliekoties 503 00:30:08,100 --> 00:30:11,390 neviens cits bija šeit uz skatuves, kamēr mēs piešķirts mezglā, 504 00:30:11,390 --> 00:30:13,940 tad viņa varēja paaugstināt savu roku pirmo reizi, 505 00:30:13,940 --> 00:30:17,420 ja ikviens cits bija atbraukusi līdzi skatuves viņai pakaļ pirmdien. 506 00:30:17,420 --> 00:30:22,900 Tagad šeit, tas ir maz pārbaude, kur man ir ko teikt, ja jaunā mezgla vērtība n 507 00:30:22,900 --> 00:30:27,370 ir 00:30:29,930 tas nozīmē, ka ir saistīts saraksts, kas ir sācies. 509 00:30:29,930 --> 00:30:32,330 Tur ir vismaz viens mezgls sarakstā, taču šī jaunā puisis 510 00:30:32,330 --> 00:30:37,230 pieder pirms tā, tāpēc mums ir nepieciešams, lai pārvietotu lietas apkārt. 511 00:30:37,230 --> 00:30:43,450 Citiem vārdiem sakot, ja sarakstā ir sākusies tikai ar, teiksim, 512 00:30:43,450 --> 00:30:48,100 tikai skaitlis 17, tas ir - patiesībā, mēs varam izdarīt daudz skaidrāk. 513 00:30:48,100 --> 00:30:56,010 Ja mēs sāktu mūsu stāsts ar rādītāju šeit sauc par pirmo, 514 00:30:56,010 --> 00:30:59,870 un sākotnēji tas ir NULL, un mēs ievietojiet numuru 9, 515 00:30:59,870 --> 00:31:02,510 numuru 9, noteikti pieder sākumā sarakstā. 516 00:31:02,510 --> 00:31:07,400 Tāpēc pieņemsim izlikties mēs vienkārši malloced adresi vai numuru 9 un nodot to šeit. 517 00:31:07,400 --> 00:31:13,170 Ja pirmās ir 9 pēc noklusējuma, Pirmais scenārijs mēs apspriedām tikai nozīmē pieņemsim punkts šis puisis šeit, 518 00:31:13,170 --> 00:31:15,790 atstāt šo kā NULL, tagad mums ir skaitli 9. 519 00:31:15,790 --> 00:31:18,280 Nākamais numurs mēs vēlamies ievietot ir 17. 520 00:31:18,280 --> 00:31:22,420 17 pieder vairāk nekā šeit, tāpēc mēs esam gatavojas darīt kādu loģisku pastiprināšanu caur šo. 521 00:31:22,420 --> 00:31:26,060 Tāpēc pieņemsim vietā, pirms mēs to darām, pieņemsim izlikties, ka mēs vēlējāmies ievietot numuru 8. 522 00:31:26,060 --> 00:31:28,650 >> Tik vienkārši ērtības labad labad, es esmu gatavojas izdarīt šeit. 523 00:31:28,650 --> 00:31:30,760 Bet atceries, malloc var nodot to visvairāk jebkur. 524 00:31:30,760 --> 00:31:33,460 Bet Zīmēšanas labad, es nolikšu to šeit. 525 00:31:33,460 --> 00:31:38,440 Tāpēc izlikties es esmu tikko piešķirta mezglu skaita 8; tas ir NULL pēc noklusējuma. 526 00:31:38,440 --> 00:31:42,800 Kas tagad ir noticis? Pāris lietas. 527 00:31:42,800 --> 00:31:47,090 Mēs veicām šo kļūdu uz skatuves pirmdien kur mēs atjaunināt rādītāju kā šis, 528 00:31:47,090 --> 00:31:51,890 tad to izdarīja, un tad mēs apgalvoja - mēs bāreņi visi pārējie uz skatuves. 529 00:31:51,890 --> 00:31:54,350 Jo jūs cant - darbību šeit kārtība ir svarīga, 530 00:31:54,350 --> 00:31:58,760 jo tagad mēs esam zaudējuši šo mezglu 9, ka ir tikai sava veida peldošs kosmosā. 531 00:31:58,760 --> 00:32:01,150 Tātad tas nebija pareizā pieeja pirmdien. 532 00:32:01,150 --> 00:32:03,330 Mums vispirms ir jādara kaut kas cits. 533 00:32:03,330 --> 00:32:06,280 No pasaules valsts izskatās šādi. Sākumā, 8 ir piešķirti. 534 00:32:06,280 --> 00:32:10,550 Kas būtu labāks veids, ievietojot 8? 535 00:32:10,550 --> 00:32:14,720 Tā vietā, lai atjauninātu šo rādītāju, pirmkārt, vienkārši atjaunināt šo vienu šeit vietā. 536 00:32:14,720 --> 00:32:17,720 Tāpēc mums līnijas kodu, kas notiek, lai ieslēgtu šo NULL raksturs 537 00:32:17,720 --> 00:32:22,020 uz faktisko rādītāju, kas ir vērsts uz 9 mezglā, 538 00:32:22,020 --> 00:32:27,970 un tad mēs varam droši jāmaina vispirms norādīt uz šo puisis šeit. 539 00:32:27,970 --> 00:32:31,330 Tagad mums ir saraksts, saistīts saraksts, no diviem elementiem. 540 00:32:31,330 --> 00:32:33,580 Un ko tas patiesībā izskatās šeit? 541 00:32:33,580 --> 00:32:36,900 Ja mēs apskatīt kodu, ievēroju, ka es esmu darījusi tieši tā. 542 00:32:36,900 --> 00:32:41,970 Man teica newptr, un šajā stāstā, newptr tika norādot uz šo puisi. 543 00:32:41,970 --> 00:32:45,520 >> Tāpēc ļaujiet man pievērst vēl viena lieta, un es būtu atstājis nedaudz vairāk vietas par šo. 544 00:32:45,520 --> 00:32:48,540 Lai piedod tiny maz zīmējumu. 545 00:32:48,540 --> 00:32:52,140 Šis puisis sauc newptr. 546 00:32:52,140 --> 00:32:57,940 Tas ir mainīgs mēs paziņoja dažas rindiņas agrāk, jo rindā - nedaudz virs 25. 547 00:32:57,940 --> 00:33:03,430 Un tas norāda uz 8. Tātad, kad es saku newptr-> blakus, tas nozīmē, ka iet uz struct 548 00:33:03,430 --> 00:33:07,910 kas ir tiek norādīja ko newptr, tāpēc šeit mēs esam, iet tur. 549 00:33:07,910 --> 00:33:13,990 Tad bultiņa saka saņemtu nākamo lauku, un tad = saka likts kāda vērtība tur? 550 00:33:13,990 --> 00:33:17,280 Vērtība, kas bija pirmais; kāda vērtība bija pirmais? 551 00:33:17,280 --> 00:33:21,930 Pirmais bija norādot šajā mezglā, lai tas nozīmē, tas tagad norāda šajā mezglā. 552 00:33:21,930 --> 00:33:25,660 Citiem vārdiem sakot, kāda izskatās kaut smieklīgs haoss ar manu rokrakstu, 553 00:33:25,660 --> 00:33:28,620 kāda ir vienkārša ideja vienkārši pārvietojas šīs bultiņas apkārt 554 00:33:28,620 --> 00:33:31,560 pārveido uz kodu ar tikai šo vienu slāni. 555 00:33:31,560 --> 00:33:38,110 Uzglabāt to, kas ir pirmais nākamajā laukā un pēc tam atjaunot to, kas vispirms patiesībā ir. 556 00:33:38,110 --> 00:33:40,900 Iesim uz priekšu un ātri uz priekšu caur kādu no šo, 557 00:33:40,900 --> 00:33:44,220 un apskatīt tikai šajā asti ievietošanas tagad. 558 00:33:44,220 --> 00:33:51,210 Pieņemsim, ka es nokļūt līdz vietai, kur man šķiet, ka nākamais lauks kādu mezglā ir NULL. 559 00:33:51,210 --> 00:33:53,410 Un šajā brīdī stāsts, detalizēti, ka es esmu glossing pār 560 00:33:53,410 --> 00:33:58,170 ir tas, ka es esmu ieviesusi citu rādītāju šeit 142 rindā, priekšgājējs rādītāja. 561 00:33:58,170 --> 00:34:01,320 Būtībā, šajā brīdī stāsts, tiklīdz saraksts kļūst garš, 562 00:34:01,320 --> 00:34:04,800 Es veida nepieciešams staigāt to ar diviem pirkstiem, jo, ja man iet pārāk tālu, 563 00:34:04,800 --> 00:34:08,219 atceros vienas garuma sarakstu, jūs nevarat iet atpakaļ. 564 00:34:08,219 --> 00:34:13,659 Tātad šis predptr ideja ir mana kreisā pirkstu, un newptr - ne newptr. 565 00:34:13,659 --> 00:34:17,199 Vēl rādītājs, kas ir šeit ir mana pirkstu, un es esmu tikai veida pastaigas sarakstu. 566 00:34:17,199 --> 00:34:22,179 Tieši tāpēc, ka pastāv. Bet pieņemsim tikai uzskatīt par vienu no vienkāršāku gadījumu šeit. 567 00:34:22,179 --> 00:34:26,620 Ja šīs rādītāju nākamās lauks ir NULL, kāda ir loģisks netieši? 568 00:34:26,620 --> 00:34:30,840 Ja Jums ir šķērsot šo sarakstu un jūs hit NULL rādītāju? 569 00:34:30,840 --> 00:34:35,780 Tu esi pie saraksta beigās, un tā kods, lai pēc tam pievienot šo vienu papildu elementu 570 00:34:35,780 --> 00:34:41,230 ir sava veida intuitīvs būs veikt šo mezglu, kura nākamais rādītājs ir NULL, 571 00:34:41,230 --> 00:34:46,120 tāpēc tas ir šobrīd NULL, un mainīt to, lai gan, lai būtu adrese jaunu mezglu. 572 00:34:46,120 --> 00:34:52,260 Tāpēc mēs esam tikai zīmējumu kodu bultiņai, ka mēs vērsa uz skatuves, paaugstinot kādu kreiso roku. 573 00:34:52,260 --> 00:34:54,070 >> Un lieta, ka es ņemšu vilnis savu roku pie tagad, 574 00:34:54,070 --> 00:34:58,020 tikai tāpēc, ka es domāju, ka tas ir viegli pazust, kad mēs to varam izdarīt šāda veida vidē, 575 00:34:58,020 --> 00:35:00,600 tiek pārbaudīti ievietošanai uz sarakstu s vidū. 576 00:35:00,600 --> 00:35:03,220 Bet tikai intuitīvi, kas nepieciešams, lai notiktu, ja jūs vēlaties, lai noskaidrotu 577 00:35:03,220 --> 00:35:06,600 kur daži numurs pieder vidū ir jums ir staigāt tā 578 00:35:06,600 --> 00:35:09,510 ar vairāk nekā vienu pirkstu, vairāk nekā viens rādītājs, 579 00:35:09,510 --> 00:35:12,920 izdomāt, kur tā pieder ar pārbaudi ir elements 00:35:15,450 > Pašreizējo, un, kad jūs atradīsiet šo vietu, 581 00:35:15,450 --> 00:35:20,400 tad jums ir jādara šāda veida čaulas spēle, kur jūs pārvietot norādes ap ļoti rūpīgi. 582 00:35:20,400 --> 00:35:23,850 Un ka atbilde, ja jūs vēlaties, lai tādēļ caur šo mājās par savu, 583 00:35:23,850 --> 00:35:28,340 aprobežojas tikai ar šīm divām līnijām kodu, bet kā šo līniju, lai ir super svarīgi. 584 00:35:28,340 --> 00:35:31,390 Jo, ja jūs piliens kādu roku un paaugstināt kāds cits nepareizā secībā, 585 00:35:31,390 --> 00:35:34,580 atkal, jūs varētu nonākt orphaning sarakstu. 586 00:35:34,580 --> 00:35:39,500 Apkopot vairāk konceptuāli, pie astes ievietošana ir samērā vienkārša. 587 00:35:39,500 --> 00:35:42,940 Pie galvas ievietošana ir arī salīdzinoši vienkārši, 588 00:35:42,940 --> 00:35:45,580 bet jums ir nepieciešams atjaunināt par papildus rādītāju šo laiku 589 00:35:45,580 --> 00:35:47,930 izspiest skaits 5 uz sarakstu šeit, 590 00:35:47,930 --> 00:35:51,560 un tad ievietošanas vidū ietver vēl vairāk pūļu, 591 00:35:51,560 --> 00:35:56,130 līdz ļoti uzmanīgi ievietot skaits 20 pareizā vietā, 592 00:35:56,130 --> 00:35:58,350 kas ir starp 17 un 22. 593 00:35:58,350 --> 00:36:02,700 Tātad jums ir nepieciešams kaut ko darīt, piemēram, ir jauna mezgla 20 punktu līdz 22, 594 00:36:02,700 --> 00:36:08,470 un tad, kura mezgla rādītājs ir jāatjaunina pēdējais? 595 00:36:08,470 --> 00:36:10,630 Tas ir 17, lai faktiski ievietotu. 596 00:36:10,630 --> 00:36:14,080 Tātad vēlreiz, es ņemšu atlikt faktisko kodu par konkrēto īstenošanu. 597 00:36:14,080 --> 00:36:17,280 >> No pirmā acu uzmetiena, tas mazliet milzīgs, bet tas patiešām ir tikai bezgalīgs cilpas 598 00:36:17,280 --> 00:36:21,770 kas ir looping, looping, looping, looping, un pārkāpj tiklīdz jūs hit NULL rādītāju, 599 00:36:21,770 --> 00:36:24,590 kurā brīdī jūs varat darīt nepieciešamo ievietošanu. 600 00:36:24,590 --> 00:36:30,960 Tas, tad, tiek uzrādīts saistīts saraksts ievietošanas kodu. 601 00:36:30,960 --> 00:36:34,590 Tas bija sava veida partijas, un tā uzskata, tāpat kā mēs esam atrisināta viena problēma, 602 00:36:34,590 --> 00:36:36,940 bet mēs esam ieviesa pilnīgi citu. Atklāti sakot, mēs esam pavadījuši visu šo laiku 603 00:36:36,940 --> 00:36:40,540 uz lielā O un Ω un darba laika, mēģinot risināt problēmas ātrāk, 604 00:36:40,540 --> 00:36:43,270 un šeit mēs speram lielu soli atpakaļ, tā uzskata. 605 00:36:43,270 --> 00:36:45,380 Un tomēr, ja mērķis ir glabāt datus, 606 00:36:45,380 --> 00:36:48,010 tā uzskata, tāpat kā Svētais Grāls, kā mēs teicām pirmdien, būtu patiešām 607 00:36:48,010 --> 00:36:50,470 uzglabāt lietas uzreiz. 608 00:36:50,470 --> 00:36:53,930 >> Faktiski, pieņemsim, ka mēs malā saistīts saraksts uz brīdi 609 00:36:53,930 --> 00:36:56,000 un mēs tā vietā ieviesa jēdzienu galda. 610 00:36:56,000 --> 00:36:59,110 Un pieņemsim tikai domā par galda uz brīdi kā masīvs. 611 00:36:59,110 --> 00:37:03,790 Šis masīvs un šis gadījums ir apmēram 26 elementi, 0 līdz 25, 612 00:37:03,790 --> 00:37:07,940 un pieņemsim, ka jūs vajag kādu gabalu uzglabāšanu nosaukumiem: 613 00:37:07,940 --> 00:37:10,350 Alise un Bobs un Čārlijs un līdzīgi. 614 00:37:10,350 --> 00:37:12,880 Un jums ir nepieciešams zināms datu struktūru, lai saglabātu šos nosaukumus. 615 00:37:12,880 --> 00:37:15,000 Nu, jūs varētu izmantot kaut kas līdzīgs saistīts saraksts 616 00:37:15,000 --> 00:37:20,260 un jūs varētu staigāt sarakstu ievietojot Alise pirms Bobs un pēc Bob Čārliju un tā tālāk. 617 00:37:20,260 --> 00:37:23,850 Un, patiesībā, ja jūs vēlaties redzēt kodu, piemēram, ka malā, 618 00:37:23,850 --> 00:37:27,230 zinu ka list2.h, mēs tieši tā. 619 00:37:27,230 --> 00:37:30,610 Mēs ne iet caur šo kodu, bet tas ir variants no pirmā piemērs 620 00:37:30,610 --> 00:37:34,640 kas ievieš vienu citu struct mēs esam redzējuši pirms sauktā studentu, 621 00:37:34,640 --> 00:37:40,330 un tad kāda tā faktiski uzglabā saistītajā sarakstā ir rādītājs, lai studentu struktūru 622 00:37:40,330 --> 00:37:44,520 nevis vienkārši nedaudz skaitlim, n. 623 00:37:44,520 --> 00:37:46,900 Tātad saprast, ka kods, tur, kas ietver faktiskos stīgas, 624 00:37:46,900 --> 00:37:49,940 bet, ja pie rokas mērķis tiešām tagad ir risināt efektivitātes problēmas, 625 00:37:49,940 --> 00:37:53,380 tas nebūtu jauki, ja mēs esam dota objektu sauc Alise, 626 00:37:53,380 --> 00:37:56,020 Mēs vēlamies, lai viņas uz pareizā vietā datu struktūru, 627 00:37:56,020 --> 00:37:58,860 tā uzskata, tāpat kā tas lūdzu būt tiešām jauki, tikai likt Alice, 628 00:37:58,860 --> 00:38:01,180 kura vārds sākas ar, pirmajā vietā. 629 00:38:01,180 --> 00:38:05,270 Un Bobs, kura vārds sākas ar B, otrajā vietā. 630 00:38:05,270 --> 00:38:09,580 Ar masīvu, vai sāksim aicinot to tabulu, hash tabulas tajā, 631 00:38:09,580 --> 00:38:13,650 mēs varam darīt tieši to. Ja mums ir dots nosaukums, piemēram, Alice, 632 00:38:13,650 --> 00:38:16,700 piemēram Alise virkne, kur jūs nodot A-L-i-C-e? 633 00:38:16,700 --> 00:38:20,540 Mums vajag hueristic. Mums ir nepieciešams funkciju veikt kādu ieguldījumu, piemēram, Alice 634 00:38:20,540 --> 00:38:24,610 un atgriezties atbildi, "Put Alise šajā vietā." 635 00:38:24,610 --> 00:38:28,720 Un šī funkcija, šī melnā kaste, gatavojas saukt jaucējfunkciju. 636 00:38:28,720 --> 00:38:32,330 >> Jaucējfunkciju ir kaut kas ņem ievade, piemēram, "Alice", 637 00:38:32,330 --> 00:38:38,080 un atgriežas jums parasti, ciparu atrašanās kāda datu struktūra, kurā Alise pieder. 638 00:38:38,080 --> 00:38:40,830 Šajā gadījumā mūsu jaucējfunkciju būtu samērā vienkāršs. 639 00:38:40,830 --> 00:38:47,510 Mūsu jaucējfunkciju būtu teikt, ja Jums ir dota "Alise", kura raksturs man rūp? 640 00:38:47,510 --> 00:38:55,660 Pirmais. Tāpēc es skatos [0], un tad es saku, ja [0] raksturs ir, atgriešanās numuru 0. 641 00:38:55,660 --> 00:39:01,130 Ja tas ir B atgriezties 1. Ja tas ir C, atgriezties 2, un tā tālāk. 642 00:39:01,130 --> 00:39:05,940 Visi 0 indeksu, un kas ļautu man ievietot Alise un tad Bob un tad Čārlijs un tā tālāk 643 00:39:05,940 --> 00:39:10,960 šajā datu struktūra. Bet tur ir problēma. 644 00:39:10,960 --> 00:39:13,060 Ko darīt, ja Anita nāk kopā vēlreiz? 645 00:39:13,060 --> 00:39:17,510 Kur mēs ieliekam Anita? Viņas vārds, arī sākas ar burtu A, 646 00:39:17,510 --> 00:39:20,330 un tā uzskata, tāpat mēs esam padarījuši vēl lielāks haoss šo problēmu. 647 00:39:20,330 --> 00:39:24,380 Mums tagad ir tūlītēja ievietošanu, pastāvīga laika ievietošanas, par datu struktūru 648 00:39:24,380 --> 00:39:27,100 nevis nelabvēlīgākā lineāra, 649 00:39:27,100 --> 00:39:29,510 bet ko mēs varam darīt ar Anita šajā gadījumā? 650 00:39:29,510 --> 00:39:34,110 Kādas ir divas iespējas, tiešām? Yeah? 651 00:39:34,110 --> 00:39:37,410 [Studentu atbilde, nesaprotami] Labi, lai mēs varētu būt vēl viens aspekts. 652 00:39:37,410 --> 00:39:42,320 Tas ir labi. Lai mēs varētu veidot lietas 3D piemēram, mēs runājām par mutiski pirmdien. 653 00:39:42,320 --> 00:39:46,700 Mēs varētu pievienot vēl pieejami šeit, bet pieņemsim, ka nē, es cenšos, lai saglabātu šo vienkāršo. 654 00:39:46,700 --> 00:39:50,160 Visa mērķis šeit ir, lai būtu nekavējoties nemainīga laikā piekļūt, 655 00:39:50,160 --> 00:39:52,170 tā ka ir pievienojot pārāk daudz sarežģītību. 656 00:39:52,170 --> 00:39:55,970 Kādas ir citas iespējas, mēģinot ievietot Anita šajā datu struktūra? Yeah? 657 00:39:55,970 --> 00:39:58,610 [Studentu atbilde, nesaprotami] Laba. Lai mēs varētu virzīties ikvienam citam leju, 658 00:39:58,610 --> 00:40:03,040 piemēram leju Bobs un Alise, Charlie nudges un tad mēs uzdodam Anita kur viņa patiešām vēlas būt. 659 00:40:03,040 --> 00:40:05,660 >> Protams, tagad, tur ir blakusparādība šo. 660 00:40:05,660 --> 00:40:09,000 Šī datu struktūra ir iespējams noderīgs ne tāpēc, ka mēs gribam, lai ievietotu cilvēkus reizi 661 00:40:09,000 --> 00:40:11,250 bet tāpēc, ka mēs gribam, lai pārbaudītu, vai viņi tur vēlāk 662 00:40:11,250 --> 00:40:13,600 ja mēs gribam, lai izdrukātu visus to datu struktūras nosaukumiem. 663 00:40:13,600 --> 00:40:15,850 Mēs ejam, lai kaut ko darīt ar šiem datiem beidzot. 664 00:40:15,850 --> 00:40:20,810 Tāpēc tagad mēs esam veida ieskrūvē vairāk Alice, kas vairs, kur viņa ir vajadzēja būt. 665 00:40:20,810 --> 00:40:23,880 Nedz Bobs, ne Čārlijs. 666 00:40:23,880 --> 00:40:26,060 Tāpēc varbūt tas nav tik laba ideja. 667 00:40:26,060 --> 00:40:28,830 Bet tiešām, tas ir viens variants. Mēs varētu novirzīt ikvienam leju, 668 00:40:28,830 --> 00:40:32,240 vai heck, Anita ieradās vēlu, lai spēli, kāpēc nav mēs tikai izvirzīti Anita 669 00:40:32,240 --> 00:40:35,870 ne šeit, ne šeit, ne šeit, pieņemsim tikai nodot viņas nedaudz zemāks sarakstā. 670 00:40:35,870 --> 00:40:38,680 Bet tad šī problēma sāk pāriet no jauna. 671 00:40:38,680 --> 00:40:41,630 Jums varētu būt iespēja atrast Alise uzreiz, balstoties uz viņas vārda. 672 00:40:41,630 --> 00:40:44,320 Un Bobs uzreiz, un Čārlijs. Bet tad jūs meklēt Anita, 673 00:40:44,320 --> 00:40:46,360 un jūs redzat, hmm, Alise ir ceļā. 674 00:40:46,360 --> 00:40:48,770 Nu, ļaujiet man pārbaudiet zemāk Alice. Bobs ir ne Anita. 675 00:40:48,770 --> 00:40:51,850 Čārlijs nav Anita. Ak, tur ir Anita. 676 00:40:51,850 --> 00:40:54,720 Un, ja jūs turpināt šī vilciena loģikas visu ceļu, 677 00:40:54,720 --> 00:41:00,690 kāda ir vissliktākā lieta darbības laiks atrast vai ievietojot Anita šo jauno datu struktūra? 678 00:41:00,690 --> 00:41:03,280 Tas ir O (n), vai ne? 679 00:41:03,280 --> 00:41:06,280 Jo sliktākajā gadījumā, tur ir Alise, Bobs, Čārlijs. . . 680 00:41:06,280 --> 00:41:10,150 visu ceļu uz leju, lai kāds ar nosaukumu "Y", tāpēc tur ir tikai viena vieta pa kreisi. 681 00:41:10,150 --> 00:41:13,950 Par laimi, mums nav viens sauc par "Z", tāpēc mēs uzdodam pašā apakšā Anita. 682 00:41:13,950 --> 00:41:16,040 >> Mums nav īsti atrisināt šo problēmu. 683 00:41:16,040 --> 00:41:19,890 Tāpēc varbūt mums ir nepieciešams, lai ieviestu šo trešo dimensiju. 684 00:41:19,890 --> 00:41:22,230 Un izrādās, ja mēs ieviestu šo trešo dimensiju, 685 00:41:22,230 --> 00:41:25,240 mēs nevaram izdarīt perfekti, bet Svētais Grāls gatavojas iegūt 686 00:41:25,240 --> 00:41:28,370 pastāvīga laika ievietošanas un dinamisku ievietošanas lai 687 00:41:28,370 --> 00:41:30,960 Mums nav grūti kods masīvs 26 izmēra. 688 00:41:30,960 --> 00:41:34,400 Mēs varam ievietot tik daudz vārdus, kā mēs gribam, bet pieņemsim mūsu 5 minūšu pārtraukumu šeit 689 00:41:34,400 --> 00:41:38,790 un tad darīt pareizi. 690 00:41:38,790 --> 00:41:46,020 Labi. Es noteikti stāstu izveidota diezgan mākslīgi tur 691 00:41:46,020 --> 00:41:48,670 izvēloties Alise un tad Bob un tad Čārlijs un tad Anita, 692 00:41:48,670 --> 00:41:51,000 kura vārds bija acīmredzami gatavojas saduras ar Alice. 693 00:41:51,000 --> 00:41:54,120 Bet jautājums, mēs beidzās pirmdien ar ir, cik ticams ir tas 694 00:41:54,120 --> 00:41:56,370 ka jūs varētu saņemt šāda veida sadursmēs? Citiem vārdiem sakot, 695 00:41:56,370 --> 00:42:00,490 ja mēs sāktu lietot šo tabulāru struktūra, kas ir patiešām vienkārši masīvs, 696 00:42:00,490 --> 00:42:02,460 Šajā gadījumā 26 vietām, 697 00:42:02,460 --> 00:42:05,740 Ko darīt, ja mūsu izejvielas tiek nevis vienmērīgi sadalīti? 698 00:42:05,740 --> 00:42:09,620 Tas nav mākslīgi Alise un Bobs un Čārlijs un Deivids un tā tālāk pēc alfabēta, 699 00:42:09,620 --> 00:42:12,380 tas vienmērīgi sadalīta pa cauri Z. 700 00:42:12,380 --> 00:42:15,220 >> Varbūt mēs vienkārši saņemt laimīgs un mēs nebrauksim ir divas vai divu B darbības 701 00:42:15,220 --> 00:42:17,640 ar ļoti lielu varbūtību, bet kā kāds norādīja, 702 00:42:17,640 --> 00:42:20,730 ja mēs vispārināt šo problēmu, nevis darīt 0-25 703 00:42:20,730 --> 00:42:26,060 bet, teiksim, no 0 līdz 364 vai 65, bieži dienu skaits Parastā gadā 704 00:42:26,060 --> 00:42:31,170 un uzdeva jautājumu: "Kas ir varbūtība, ka divi no mums šajā telpā ir tāds pats dzimšanas diena?" 705 00:42:31,170 --> 00:42:34,600 Citiem vārdiem sakot, kāda ir varbūtība, ka divi no mums ir nosaukums sākas ar? 706 00:42:34,600 --> 00:42:37,190 No jautājuma kārtošanas ir tas pats, bet šī adrese telpa, 707 00:42:37,190 --> 00:42:39,940 šo meklējumu telpa, ir lielāks gadījumā dzimšanas dienas, 708 00:42:39,940 --> 00:42:42,820 jo mums ir tik daudz vairāk dienas gadā nekā burtiem alfabēta. 709 00:42:42,820 --> 00:42:44,910 Kas par sadursmes iespējamība? 710 00:42:44,910 --> 00:42:48,410 Nu, mēs varam domāt par to, ko norādītas math pretējā virzienā. 711 00:42:48,410 --> 00:42:50,580 Kas no ne sadursmes iespējamība? 712 00:42:50,580 --> 00:42:53,970 Nu, šis izteiciens šeit saka, ka to, kas ir varbūtība 713 00:42:53,970 --> 00:42:58,770 ja tur ir tikai viens cilvēks šajā telpā, ka tie ir unikāla dzimšanas dienu? 714 00:42:58,770 --> 00:43:01,190 Tas ir 100%. Jo, ja tur ir tikai viens cilvēks telpā, 715 00:43:01,190 --> 00:43:03,940 viņa vai viņas dzimšanas dienā, var būt jebkurš no 365 dienas no gada. 716 00:43:03,940 --> 00:43:08,650 Tātad 365/365 varianti dod man vērtību 1. 717 00:43:08,650 --> 00:43:11,250 Tātad attiecīgais varbūtība šobrīd ir tikai 1. 718 00:43:11,250 --> 00:43:13,270 Bet, ja tur ir otrā persona telpā, 719 00:43:13,270 --> 00:43:16,490 kāda ir varbūtība, ka to dzimšanas diena ir atšķirīgs? 720 00:43:16,490 --> 00:43:20,680 Ir tikai 364 possible dienas, ignorējot garajos gados, 721 00:43:20,680 --> 00:43:23,580 par savu dzimšanas dienu nav saduras ar citām personām. 722 00:43:23,580 --> 00:43:31,920 Tātad 364/365. Ja trešā persona nāk, tas ir 363/365, un tā tālāk. 723 00:43:31,920 --> 00:43:35,790 Lai mēs saglabātu reizinot kopā šos frakcijas, kas kļūst mazākas un mazākas, 724 00:43:35,790 --> 00:43:40,720 lai saprastu, kas ir varbūtība, ka visi no mums ir unikālas dzimšanas dienas? 725 00:43:40,720 --> 00:43:43,570 Bet tad mēs varam, protams, vienkārši ņem šo atbildi un uzsist tā ap 726 00:43:43,570 --> 00:43:47,210 un darīt 1 mīnus visu, ka izteiksmes mēs beidzot nokļūt 727 00:43:47,210 --> 00:43:51,250 ja jūs atceraties atpakaļ jūsu math grāmatas, tas izskatās mazliet kaut kas līdzīgs šim, 728 00:43:51,250 --> 00:43:54,590 kas ir daudz vieglāk interpretēt grafiski. 729 00:43:54,590 --> 00:43:57,820 Un šī grafiskā šeit ir uz x ass skaits dzimšanas dienas, 730 00:43:57,820 --> 00:44:02,030 vai cilvēku skaits ar dzimšanas dienas, un uz y asi ir varbūtība maču. 731 00:44:02,030 --> 00:44:06,060 Un ko tas saka, ka, ja jums ir, teiksim, pat, 732 00:44:06,060 --> 00:44:10,860 pieņemsim izvēlēties kaut ko līdzīgu 22, 23. 733 00:44:10,860 --> 00:44:13,160 Ja tur ir 22 vai 23 cilvēki telpā, 734 00:44:13,160 --> 00:44:17,100 varbūtība, ka divi no tiem ļoti maz cilvēku gatavojas ir pats jubileju 735 00:44:17,100 --> 00:44:19,560 ir faktiski super augsts, combinatorially. 736 00:44:19,560 --> 00:44:23,450 50% izredzes, ka klasē ir tikai 22 cilvēku, seminārs, praktiski, 737 00:44:23,450 --> 00:44:25,790 2 no tiem cilvēkiem būs tādas pašas dzimšanas dienu. 738 00:44:25,790 --> 00:44:28,520 Jo tur ir tik daudz veidi, kā jūs varat būt pats jubileju. 739 00:44:28,520 --> 00:44:31,110 Vēl sliktāk, ja paskatās labajā pusē diagrammas, 740 00:44:31,110 --> 00:44:34,040 ar laiku jums ir klasi ar 58 skolēniem tajā, 741 00:44:34,040 --> 00:44:39,270 no 2 cilvēkiem, kam ir dzimšanas diena varbūtība ir super, super augsts, gandrīz 100%. 742 00:44:39,270 --> 00:44:41,880 Tagad tas ir sava veida fun faktu par reālo dzīvi. 743 00:44:41,880 --> 00:44:45,850 >> Bet sekas, tagad, datu struktūras un glabāta informācija 744 00:44:45,850 --> 00:44:51,100 nozīmē, ka tikai pieņemot, ka jums ir jauka, tīru, vienotu datu izplatīšanu 745 00:44:51,100 --> 00:44:53,650 un jums ir pietiekami lielas masīvs, lai ietilptu ķekars lietas 746 00:44:53,650 --> 00:44:59,360 nenozīmē, ka jūs gatavojas saņemt cilvēkus unikālu vietās. 747 00:44:59,360 --> 00:45:03,810 Jūs esat nāksies sadursmes. Tātad šis sajaukšanai jēdziens, jo tā sauc, 748 00:45:03,810 --> 00:45:07,450 lietojat ievade, piemēram, "Alise" un masāžas to kaut kādā veidā 749 00:45:07,450 --> 00:45:10,190 un tad saņemt atpakaļ atbildi, piemēram 0 vai 1 vai 2. 750 00:45:10,190 --> 00:45:17,500 Getting atpakaļ kādu izeju no šī funkcija ir plagued ar šo varbūtību sadursmes. 751 00:45:17,500 --> 00:45:19,530 Tātad, kā mēs varam realizēt tās sadursmes? 752 00:45:19,530 --> 00:45:21,940 Nu, par vienu gadījumu, mēs varam pieņemt ideju, kas tika ierosināts. 753 00:45:21,940 --> 00:45:25,100 Mēs varam vienkārši novirzīt ikvienam, vai varbūt, mazliet vienkāršāk, 754 00:45:25,100 --> 00:45:29,870 nevis kustībā ikvienam citam, pieņemsim tikai pāriet Anita uz apakšu no pieejamā vietā. 755 00:45:29,870 --> 00:45:32,810 Tātad, ja Alise ir 0, Bobs ir 1, Čārlija ir 2, 756 00:45:32,810 --> 00:45:35,260 mēs tikai izvirzīti Anita pie 3 vietā. 757 00:45:35,260 --> 00:45:38,860 Un tas ir arī datu struktūras tehniku ​​sauc lineāra zondēšana. 758 00:45:38,860 --> 00:45:41,310 Lineārs jo jūs esat tikai ejot šo līniju, un jūs esat veida zondēšana 759 00:45:41,310 --> 00:45:43,640 pieejamās plankumi datu struktūru. 760 00:45:43,640 --> 00:45:46,210 Protams, tas devolves uz O (n). 761 00:45:46,210 --> 00:45:49,590 Ja datu struktūra ir patiešām pilns, tur ir 25 cilvēki, kas tajā jau ir, 762 00:45:49,590 --> 00:45:54,120 un tad Anita nāk kopā, viņa beidzas līdz plkst kādi būtu vieta Z, un tas ir jauki. 763 00:45:54,120 --> 00:45:56,540 Viņa joprojām der, un mēs varam atrast viņas vēlāk. 764 00:45:56,540 --> 00:46:00,100 >> Bet tas ir pretrunā ar mērķi paātrināt lietas uz augšu. 765 00:46:00,100 --> 00:46:02,530 Tātad, ko tad, ja mēs tā vietā ieviesa šo trešo dimensiju? 766 00:46:02,530 --> 00:46:06,400 Ka šis paņēmiens ir parasti sauc atsevišķi ķēžu rādītāju, vai ar ķēdēm. 767 00:46:06,400 --> 00:46:10,030 Un ko hash tabulu tagad ir, tas tabulveida struktūra, 768 00:46:10,030 --> 00:46:13,450 jūsu galda ir tikai masīvs norādes. 769 00:46:13,450 --> 00:46:18,230 Bet kādi ir šie norādes norādīt, ir minējums, ko? 770 00:46:18,230 --> 00:46:21,970 Saistīts saraksts. Tātad, ko tad mēs labāko no abām šīm pasaulēm? 771 00:46:21,970 --> 00:46:26,500 Mēs izmantojam masīvi uz pirmajiem rādītājiem 772 00:46:26,500 --> 00:46:32,070 uz datu struktūru, lai mēs varētu uzreiz doties uz [0] [1], [30] vai tā tālāk, 773 00:46:32,070 --> 00:46:36,480 bet tā, ka mums ir zināma elastība, un mēs varam fit Anita un Alise un Adam 774 00:46:36,480 --> 00:46:38,630 un jebkuru citu vārdu, 775 00:46:38,630 --> 00:46:43,470 Mēs nevis ļaut citiem ass augt patvaļīgi. 776 00:46:43,470 --> 00:46:47,340 Un mēs beidzot, jo pirmdien, ir, ka ekspresīvā iespējas ar saistītajā sarakstā. 777 00:46:47,340 --> 00:46:49,530 Mēs varam augt datu struktūra patvaļīgi. 778 00:46:49,530 --> 00:46:52,450 Alternatīvi, mēs varētu tikai milzīga 2 dimensiju masīvs, 779 00:46:52,450 --> 00:46:57,190 bet tas būs šausmīgs situācija, ja viens no 2-dimensiju masīvs rindās 780 00:46:57,190 --> 00:47:01,280 nav pietiekami liels, lai nākamo personu, kuras vārds notiek, lai sāktu ar A. 781 00:47:01,280 --> 00:47:04,200 Dievs pasarg mums ir pārdalīt milzīgs 2 dimensiju struktūra 782 00:47:04,200 --> 00:47:06,600 tikai tāpēc, ka ir tik daudz cilvēku nosaukts, 783 00:47:06,600 --> 00:47:09,480 it īpaši, ja tur ir tik maz cilvēku nosaukti Z kaut. 784 00:47:09,480 --> 00:47:12,170 Tas tikai būs ļoti rets datu struktūra. 785 00:47:12,170 --> 00:47:15,400 Tātad, tas nav perfekts ar jebkādiem līdzekļiem, bet tagad mums vismaz ir iespēja 786 00:47:15,400 --> 00:47:19,090 lai uzreiz atrast, kur Alise vai Anita pieder, 787 00:47:19,090 --> 00:47:21,090 vismaz attiecībā uz vertikālo asi, 788 00:47:21,090 --> 00:47:25,850 un tad mums vienkārši ir izlemt, kur likt Anita vai Alise šajā saistīts saraksts. 789 00:47:25,850 --> 00:47:32,480 Ja mums nav jārūpējas par šķirošanas lietām, cik ātri mēs varētu ievietot Alise par struktūru, kā šī? 790 00:47:32,480 --> 00:47:35,370 Tas ir nemainīgs laika. Mēs indekss par [0], un, ja neviens ir tur, 791 00:47:35,370 --> 00:47:37,550 Alise dodas sākumā minētā saistīts saraksts. 792 00:47:37,550 --> 00:47:40,000 Bet tas nav milzīgs galā. Jo, ja Anita tad nāk kopā 793 00:47:40,000 --> 00:47:42,160 daži virkne pasākumu vēlāk, kad tas Anita pieder? 794 00:47:42,160 --> 00:47:45,140 Nu, [0]. OOP. Alise ir jau minētajā saistītas sarakstā. 795 00:47:45,140 --> 00:47:47,760 >> Bet, ja mums nav jārūpējas par šķirošanas šos vārdus, 796 00:47:47,760 --> 00:47:53,580 mēs varam vienkārši pārvietot Alice pāri, ievietot Anita, bet pat tas ir nemainīgs laika. 797 00:47:53,580 --> 00:47:57,010 Pat ja tur ir Alise un Ādams un visi šie pārējie A nosaukumi, 798 00:47:57,010 --> 00:47:59,410 tas nav īsti novirzot tos fiziski. Kāpēc? 799 00:47:59,410 --> 00:48:04,090 Jo mēs tikko bija šeit ar saistīts saraksts, kas zina bija šie mezgli ir vienalga? 800 00:48:04,090 --> 00:48:06,550 Viss, kas Jums jādara, ir pārvietot maizes drupatas. 801 00:48:06,550 --> 00:48:10,930 Pārvietot bultiņas apkārt, jums nav, lai fiziski pārvietot datus apkārt. 802 00:48:10,930 --> 00:48:14,610 Tātad, mēs varam ievietot Anita, šajā gadījumā, uzreiz. Nemainīgs laiks. 803 00:48:14,610 --> 00:48:20,250 Tāpēc mums ir pastāvīga laika lookup un pastāvīga laika ievietošana kāds, piemēram, Anita. 804 00:48:20,250 --> 00:48:22,740 Bet sava veida oversimplifying pasauli. 805 00:48:22,740 --> 00:48:28,510 Ko darīt, ja mēs vēlāk vēlaties atrast Alise? 806 00:48:28,510 --> 00:48:31,050 Ko darīt, ja mēs vēlāk vēlaties atrast Alise? 807 00:48:31,050 --> 00:48:35,690 Cik soļus ir tas, ka gatavojas veikt? 808 00:48:35,690 --> 00:48:37,850 [Studentu atbilde, nesaprotami] 809 00:48:37,850 --> 00:48:40,950 Tieši tā. Cilvēku skaits pirms Alise saistītajā sarakstā. 810 00:48:40,950 --> 00:48:45,420 Tātad, tas nav gluži ideāls, jo mūsu datu struktūra, atkal, ir šī vertikālā pieeja 811 00:48:45,420 --> 00:48:50,240 un tad tas ir šīs saistītos sarakstus nokarājas - patiesībā, nemaz nav izdarīt to masīvu. 812 00:48:50,240 --> 00:48:56,020 Tas ir šie saistītie saraksti karājās pie tā, ka izskatās mazliet kaut kas līdzīgs šim. 813 00:48:56,020 --> 00:48:59,110 Bet problēma ir, ja Alise un Ādams un visi šie pārējie A nosaukumi 814 00:48:59,110 --> 00:49:01,720 galu galā vairāk un vairāk nekā tur, 815 00:49:01,720 --> 00:49:04,810 atrast kādu varētu beigties, ņemot ķekars soļus, 816 00:49:04,810 --> 00:49:06,670 bcause jums ir, lai šķērsotu saistīts saraksts, 817 00:49:06,670 --> 00:49:08,090 kas ir lineāra operācija. 818 00:49:08,090 --> 00:49:14,270 Tik tiešām, tad, ievietošanas laiks beidzot ir O (n), kur n ir elementu skaits sarakstā. 819 00:49:14,270 --> 00:49:21,780 Dala ar pieņemsim patvaļīgi sauc to m, kur m ir vairāki saistīti sarakstos 820 00:49:21,780 --> 00:49:24,500 ka mums ir šīs vertikālās ass. 821 00:49:24,500 --> 00:49:27,180 Citiem vārdiem sakot, ja mēs patiesi pieņemam vienotu sadalījumu nosaukumiem, 822 00:49:27,180 --> 00:49:30,150 pilnīgi nereāli. Tur acīmredzot vairāk dažas vēstules, nekā citi. 823 00:49:30,150 --> 00:49:32,580 >> Bet, ja mēs pieņemam uz brīdi vienota izplatīšanas, 824 00:49:32,580 --> 00:49:37,350 un mēs esam N Kopējais cilvēku, un m Kopējais ķēdes 825 00:49:37,350 --> 00:49:40,630 pieejamas mums, tad ilgums katrā no šīm ķēdēm 826 00:49:40,630 --> 00:49:44,380 diezgan vienkārši būs kopā, n dalīts ar skaitu ķēdēm. 827 00:49:44,380 --> 00:49:48,900 Tātad N / m. Bet šeit, kur mēs varam būt visi matemātiski gudrs. 828 00:49:48,900 --> 00:49:53,030 m ir konstants, jo tur ir noteikts skaits no tiem. 829 00:49:53,030 --> 00:49:54,620 Jūs gatavojas atzīt savu masīvs sākumā, 830 00:49:54,620 --> 00:49:58,450 un mēs esam ne izmēru vertikālo asi. Pēc definīcijas, kas paliek nemainīgi. 831 00:49:58,450 --> 00:50:01,220 Tas ir tikai horizontālā ass, tā sakot, situācija mainās. 832 00:50:01,220 --> 00:50:04,760 Tātad tehniski, tas ir nemainīgs. Tāpēc tagad, ievietošanas laiks 833 00:50:04,760 --> 00:50:09,700 ir diezgan daudz O (N). 834 00:50:09,700 --> 00:50:12,410 Lai nejūtas tik daudz labāk. 835 00:50:12,410 --> 00:50:14,940 Bet kāda ir patiesība šeit? Nu, visu šo laiku, lai nedēļas, 836 00:50:14,940 --> 00:50:20,640 Mēs esam teicis O (n ²). O (N), 2 x n ², - N, dalīts ar 2. . . ech. 837 00:50:20,640 --> 00:50:23,580 Tas ir tikai N ². Bet tagad, šajā daļā semestrī, 838 00:50:23,580 --> 00:50:25,560 mēs varam sākt runāt par reālo pasauli vēlreiz. 839 00:50:25,560 --> 00:50:31,520 Un n / m ir absolūti ātrāk nekā tikai n atsevišķi. 840 00:50:31,520 --> 00:50:35,170 Ja jums ir tūkstoš vārdu, un jūs pauze tās vairākos segmentos 841 00:50:35,170 --> 00:50:37,820 tāpēc, ka jums ir tikai desmit vārdus katru no šīm ķēdēm, 842 00:50:37,820 --> 00:50:41,670 absolūti meklējot desmit lietas būs ātrāk nekā tūkstotis lietas. 843 00:50:41,670 --> 00:50:43,740 Un tā viens no gaidāmo problēmu kopas gatavojas apstrīdēt jums 844 00:50:43,740 --> 00:50:46,100 domāt par to, tieši tas, lai gan, jā, 845 00:50:46,100 --> 00:50:49,520 asimptotiski un matemātiski, tas joprojām ir tikai lineārs, 846 00:50:49,520 --> 00:50:51,700 kas iesūc vispār mēģinot atrast lietas. 847 00:50:51,700 --> 00:50:54,530 Patiesībā, tas būs ātrāk nekā 848 00:50:54,530 --> 00:50:56,520 jo šī dalītājs. 849 00:50:56,520 --> 00:50:58,310 Un tā tur atkal būs šis kompromiss 850 00:50:58,310 --> 00:51:01,390 un šis konflikts starp teoriju un realitāti, 851 00:51:01,390 --> 00:51:03,550 un viens no pogām sāksies pagrieziena šajā punktā semestrī 852 00:51:03,550 --> 00:51:07,510 ir vairāk par realitāti, viens, kā mēs veida sagatavotos semster beigām, 853 00:51:07,510 --> 00:51:09,280 jo mēs ieviest pasaulē web programmēšanas, 854 00:51:09,280 --> 00:51:11,530 ja tiešām, sniegums ir gatavojas rēķināties, jo lietotāji gatavojas 855 00:51:11,530 --> 00:51:14,880 sāk justies un novērtēt slikts dizains lēmumus. 856 00:51:14,880 --> 00:51:19,950 >> Tātad, kā jūs iet par īstenojot saistītas - hash tabulu ar 31 elementiem? 857 00:51:19,950 --> 00:51:22,600 Un iepriekšējais piemērs bija patvaļīgi par dzimšanas dienas. 858 00:51:22,600 --> 00:51:26,190 Ja kādam ir dzimšanas diena 1 janvārī vai februārī 1, mēs viņus šajā spainī. 859 00:51:26,190 --> 00:51:28,960 Ja tas ir gada 2 februāris 2, marts 2 mēs viņus šajā spainī. 860 00:51:28,960 --> 00:51:32,220 Tieši tāpēc tas bija 31. Kā jūs atzīt hash tabulu? 861 00:51:32,220 --> 00:51:37,480 Tas var būt diezgan vienkāršs, mezglu * galds ir mans patvaļīgs vārds par to, [31]. 862 00:51:37,480 --> 00:51:42,400 Tas dod man 31 norādes uz mezgliem, 863 00:51:42,400 --> 00:51:45,370 un kas ļauj man ir 31 palīglīdzekļi saistītas sarakstos 864 00:51:45,370 --> 00:51:48,800 pat ja šie ķēdes ir sākotnēji NULL. 865 00:51:48,800 --> 00:51:54,860 Ko es gribu, lai, ja es gribu, lai saglabātu "Alise", "Bobs", "Čārlijs"? 866 00:51:54,860 --> 00:51:57,010 Nu, mums ir nepieciešams, lai aplauzt tās lietas, kas struktūrā 867 00:51:57,010 --> 00:52:00,530 jo mums Alise norādīt uz Bob, norādīt uz Charlie, un tā tālāk. 868 00:52:00,530 --> 00:52:04,940 Mēs nevaram vienkārši ir vārdi vien, lai es varētu izveidot jaunu struktūru sauc mezglā šeit. 869 00:52:04,940 --> 00:52:08,310 >> Kas ir faktiskais mezglu? Kas ir šajā jaunajā saistīts saraksts mezgls? 870 00:52:08,310 --> 00:52:11,840 Pirmā lieta, ko sauc par vārdu, ir personas vārda. 871 00:52:11,840 --> 00:52:14,340 GARUMS, iespējams, attiecas uz maksimālo garumu cilvēka vārdu, 872 00:52:14,340 --> 00:52:18,210 kāds tas ir, 20, 30, 40 rakstzīmes traks stūra gadījumos, 873 00:52:18,210 --> 00:52:22,680 un +1 ir par ko? Tas ir tikai papildu NULL raksturs, \ 0. 874 00:52:22,680 --> 00:52:27,410 Tātad šis mezgls ir ietīšana "kaut kas" iekšā no sevis, 875 00:52:27,410 --> 00:52:29,640 bet tas arī deklarē rādītāju sauc nākamo 876 00:52:29,640 --> 00:52:32,580 lai mēs varētu ķēde Alise Bobam lai Čārlijs un tā tālāk. 877 00:52:32,580 --> 00:52:36,700 Var būt nulle, bet ne obligāti jābūt. 878 00:52:36,700 --> 00:52:40,110 Visus jautājumus par šīm hash tabulu? Yeah? 879 00:52:40,110 --> 00:52:46,190 [Studentu lūdzot jautājumu, nesaprotami] masīvs - labs jautājums. 880 00:52:46,190 --> 00:52:50,120 Kāpēc tas ir char vārds masīvā nevis tikai char *? 881 00:52:50,120 --> 00:52:53,830 Šajā nedaudz patvaļīgi Piemēram, es negribēju būt spiesta 882 00:52:53,830 --> 00:52:56,190 līdz malloc katram no sākotnējiem nosaukumiem. 883 00:52:56,190 --> 00:52:59,530 Es gribēju paziņot maksimālo summu atmiņas par virkni 884 00:52:59,530 --> 00:53:06,020 lai es varētu kopēt uz struktūru Alise \ 0 un nav jātiek galā ar malloc un bezmaksas un līdzīgu. 885 00:53:06,020 --> 00:53:11,710 Bet es varētu darīt, ja es gribēju būt vairāk apzinās kosmosa izmantošanu. Labs jautājums. 886 00:53:11,710 --> 00:53:14,780 Tāpēc pieņemsim mēģināt vispārināt prom no šīs 887 00:53:14,780 --> 00:53:18,350 un koncentrēties uz atlikušo šodienu datu struktūrām kopumā 888 00:53:18,350 --> 00:53:21,170 un citas problēmas, kas mēs varam atrisināt, izmantojot tos pašus pamatus 889 00:53:21,170 --> 00:53:24,590 lai gan datu struktūras pašas var atšķirties to detaļās. 890 00:53:24,590 --> 00:53:27,910 >> Tātad izrādās, datorzinātnēs, koki ir ļoti bieži. 891 00:53:27,910 --> 00:53:29,760 Un jūs varat domāt par koku veida, piemēram, ģimenes koku, 892 00:53:29,760 --> 00:53:31,830 ja tur ir dažas saknes, daži matriarch vai patriarhs 893 00:53:31,830 --> 00:53:34,540 vecmāmiņa vai grandpa vai agrāk muguras, 894 00:53:34,540 --> 00:53:38,880 zem kura ir mamma un tētis vai dažādu vecvecākus vai tamlīdzīgi. 895 00:53:38,880 --> 00:53:42,500 Tātad koka struktūru ir mezglu un tas ir bērni, 896 00:53:42,500 --> 00:53:45,260 parasti 0 vai vairāk bērni uz katru mezglu. 897 00:53:45,260 --> 00:53:47,320 Un daži no žargonu, ka jūs redzēt šajā attēlā šeit 898 00:53:47,320 --> 00:53:50,630 ir kāds no mazajiem bērniem vai grandkids par malām 899 00:53:50,630 --> 00:53:52,330 kam nav bultas, kas izriet no tiem, 900 00:53:52,330 --> 00:53:55,070 tie ir tā saucamie lapas, un no iekšpuses ikviens 901 00:53:55,070 --> 00:53:58,790 ir iekšējais mezgls, jūs varat zvanīt tā neko pa šo līniju. 902 00:53:58,790 --> 00:54:01,430 Bet šī struktūra ir diezgan bieži. Šis viena ir nedaudz patvaļīgs. 903 00:54:01,430 --> 00:54:04,930 Mums ir viens bērns pa kreisi, mums ir trīs bērni par tiesībām, 904 00:54:04,930 --> 00:54:06,830 divi bērni apakšā pa kreisi. 905 00:54:06,830 --> 00:54:10,740 Lai mēs varētu būt dažādi izmēra koki, bet, ja mēs sākam standartizēt lietas, 906 00:54:10,740 --> 00:54:15,330 un jūs varētu atcerēties šo no Patrika video par binārā meklēšanas no iepriekšējā īss 907 00:54:15,330 --> 00:54:19,490 tiešsaistē, binārā meklēšana nav jāīsteno ar masīvu 908 00:54:19,490 --> 00:54:21,410 vai papīra gabalus uz tāfeles. 909 00:54:21,410 --> 00:54:25,490 Pieņemsim, ka jūs vēlētos, lai saglabātu savus numurus, kas ir vairāk sarežģītu datu struktūru. 910 00:54:25,490 --> 00:54:27,680 Jūs varētu izveidot koku, kā šis. 911 00:54:27,680 --> 00:54:35,290 Jums varētu būt mezglu deklarēto C, un tas mezgls var būt vismaz divi elementi iekšpusē no tā. 912 00:54:35,290 --> 00:54:39,470 Viens no tiem ir numurs, kuru vēlaties saglabāt, un otrs ir - labi, mums vajag vēl vienu. 913 00:54:39,470 --> 00:54:41,540 Otrs ir tā bērni. 914 00:54:41,540 --> 00:54:45,150 Tātad, šeit ir vēl viens datu struktūra. Šoreiz, mezglu ir definēts kā uzglabāt vairākus n 915 00:54:45,150 --> 00:54:49,060 un tad divas norādes, kreisajā bērnu un labi bērnam. 916 00:54:49,060 --> 00:54:52,100 Un viņi nav patvaļīgs. Kas ir interesanti par šo koku? 917 00:54:52,100 --> 00:55:00,550 >> Kas, kā mēs esam, kas šo veic vai kā Patriks kas to veic viņa video modelis? 918 00:55:00,550 --> 00:55:02,790 Tas ir sava veida skaidrs, ka tur ir daži šķirošanas notiek šeit, 919 00:55:02,790 --> 00:55:04,460 bet kāda ir vienkāršs noteikums? Yeah? 920 00:55:04,460 --> 00:55:08,350 [Studentu atbilde, nesaprotami] 921 00:55:08,350 --> 00:55:12,040 Perfekta. Ja jūs skatienu, jūs redzēt nelielu skaitu kreisajā pusē, 922 00:55:12,040 --> 00:55:14,690 lielie skaitļi par kreisi, bet tas ir taisnība par katru mezglu. 923 00:55:14,690 --> 00:55:20,370 Par katru mezglu, tās kreisajā bērnam ir mazāk par to un tās tiesības bērns lielāks nekā to. 924 00:55:20,370 --> 00:55:25,210 Ko tas nozīmē, tagad ir, ja es gribu, lai meklētu šo datu struktūru, teiksim, numurs 44, 925 00:55:25,210 --> 00:55:29,320 Man ir jāsāk pie saknes, jo, kā ar visām šīm vairāk sarežģītu datu struktūras tagad, 926 00:55:29,320 --> 00:55:31,910 mums ir tikai rādītāju uz vienu lietu, sākums. 927 00:55:31,910 --> 00:55:35,010 Un šajā gadījumā, sākums ir sakne. Tas nav pa kreisi beigas, 928 00:55:35,010 --> 00:55:39,530 tas saknes par šo struktūru. Tāpēc es redzu šeit ir 55, un es esmu meklē 44. 929 00:55:39,530 --> 00:55:41,430 Kurā virzienā vēlos aiziet? 930 00:55:41,430 --> 00:55:45,680 Nu, es gribu iet pa kreisi, jo acīmredzot, ar tiesībām būs pārāk liels. 931 00:55:45,680 --> 00:55:49,050 Tātad paziņojums šeit, tu esi veida konceptuāli cirst koku uz pusēm 932 00:55:49,050 --> 00:55:51,700 jo jūs nekad iet uz leju, labajā pusē. 933 00:55:51,700 --> 00:55:55,410 Tāpēc tagad es iet no 55 līdz 33. Tas ir pārāk mazs skaitlis. 934 00:55:55,410 --> 00:56:01,590 Es meklēju 44, bet tagad es zinu, ja 44 ir šajā kokā, es varu iet protams uz labo pusi. 935 00:56:01,590 --> 00:56:04,460 Tātad vēlreiz, es esmu atzarošana koku pusi. 936 00:56:04,460 --> 00:56:06,780 Tas ir diezgan daudz identiski konceptuāli uz telefona grāmatu. 937 00:56:06,780 --> 00:56:09,510 Tas ir identisks tam, ko mēs izdarījām ar uz tāfeles dokumentiem, 938 00:56:09,510 --> 00:56:13,940 bet tas ir vēl sarežģītākas struktūra, kas ļauj mums patiesībā darīt 939 00:56:13,940 --> 00:56:16,880 šis skaldi un valdi ar dizainu algoritmu, 940 00:56:16,880 --> 00:56:19,420 un patiesībā, šķērsojot struktūru, kā šis - whoops. 941 00:56:19,420 --> 00:56:22,870 Šķērso struktūru, piemēram, tas, kur tas ir tikai "iet šo ceļu vai iet šo ceļu," 942 00:56:22,870 --> 00:56:26,870 nozīmē visu šo kodu, ieliektām jūsu prātā pirmais, kad to īsteno sadaļā 943 00:56:26,870 --> 00:56:31,270 vai ejot caur to mājās, lai bināro meklēšanu, izmantojot rekursija vai iterācijas, 944 00:56:31,270 --> 00:56:35,060 tas sāpes kaklā. Atrast vidējo elementu, tad darīt savu noapaļošana uz augšu vai leju. 945 00:56:35,060 --> 00:56:39,230 >> Tur skaistumu, jo mēs tagad var izmantot rekursijas atkal, 946 00:56:39,230 --> 00:56:43,760 bet daudz vairāk tīri. Patiešām, ja jūs esat pie numura 55 un jūs vēlaties, lai atrastu 44, 947 00:56:43,760 --> 00:56:48,450 Jums iet pa kreisi, šajā gadījumā, tad ko jūs darīt? Jūs palaist tieši tādu pašu algoritmu. 948 00:56:48,450 --> 00:56:51,560 Jūs pārbaudītu vērtību mezglā, tad jums iet pa kreisi vai pa labi. 949 00:56:51,560 --> 00:56:53,670 Tad jūs pārbaudītu vērtību mezglā, iet pa kreisi vai pa labi. 950 00:56:53,670 --> 00:56:56,710 Tas ir lieliski piemērots, lai recursion. 951 00:56:56,710 --> 00:57:00,920 Tātad, pat ja agrāk mēs esam darījuši dažas diezgan patvaļīgi piemērus iesaistot rekursija 952 00:57:00,920 --> 00:57:03,430 ka nav nepieciešams būt rekursīvs, ar datu STUCTURES, 953 00:57:03,430 --> 00:57:07,820 īpaši koki, tas ir ideāls pieteikumu par šo ideju par ņemot problēmu, 954 00:57:07,820 --> 00:57:12,920 sarūk, un tad risinot tāda paša veida, taču mazākus programmu. 955 00:57:12,920 --> 00:57:14,590 >> Tātad tur ir cits datu struktūra, kas mēs varam ieviest. 956 00:57:14,590 --> 00:57:18,760 Tas viens ir paredzēts pirmajā brīdī izskatās noslēpumains, bet tas viens ir pārsteidzošs. 957 00:57:18,760 --> 00:57:25,090 Tātad šī ir datu struktūra sauc Trie, Trie, kas ir mantots no vārda iegūšanai, 958 00:57:25,090 --> 00:57:30,210 kas nav izrunāts atkārtoti izmēģināt-val, bet tas, ko pasaule prasa šīs lietas. Mēģina. T-R-i-e. 959 00:57:30,210 --> 00:57:35,190 Tas ir koks struktūru dažu šķirot, bet katra no kādas Trie mezgliem 960 00:57:35,190 --> 00:57:41,280 Šķiet, ko? Un tas ir nedaudz maldinošs, jo tas ir sava veida saīsināts. 961 00:57:41,280 --> 00:57:45,960 Bet izskatās, ka katrs šajā Trie mezgls ir faktiski masīvs. 962 00:57:45,960 --> 00:57:48,840 Un pat ja šīs shēmas autors nav pierādījusi to, 963 00:57:48,840 --> 00:57:54,130 Šajā gadījumā, tas Trie ir datu struktūra, kuras mērķis dzīvē ir uzglabāt vārdus 964 00:57:54,130 --> 00:57:57,330 Like A-L-i-c-e vai B-o-B. 965 00:57:57,330 --> 00:58:02,480 Un kādā veidā šie dati veikali Alise un Bobs un Čārlijs un Anita un tā tālāk 966 00:58:02,480 --> 00:58:06,970 ir tā izmanto masīvu, kurā glabāt Alice in a Trie, 967 00:58:06,970 --> 00:58:09,820 mēs sākam pie saknes mezgla, kas izskatās masīvs, 968 00:58:09,820 --> 00:58:12,080 un tas ir bijis rakstīts saīsināts pierakstā. 969 00:58:12,080 --> 00:58:15,070 Autore izlaist abcdefg jo nav ar, ka nosaukumus. 970 00:58:15,070 --> 00:58:19,150 Viņi tikai parādīja M un P un T, bet šajā gadījumā, 971 00:58:19,150 --> 00:58:22,780 pieņemsim virzīties prom no Alice un Bob un Čārlijs dažiem nosaukumiem, kas šeit. 972 00:58:22,780 --> 00:58:25,670 Maxwell faktiski šajā diagrammā. 973 00:58:25,670 --> 00:58:29,570 Tātad, kā to darīja autors veikalā M--x-W-e-l-l? 974 00:58:29,570 --> 00:58:36,990 Viņš vai viņa sāka pie saknes mezgla, un devās uz [M], lai aptuveni 13 13 atrašanās masīvā. 975 00:58:36,990 --> 00:58:40,750 Tad no turienes, tur rādītājs. 976 00:58:40,750 --> 00:58:42,760 Rādītājs noved pie citu masīvu. 977 00:58:42,760 --> 00:58:47,880 No turienes autors indeksēti vērā, ka masīva atrašanās vietā A, kā attēlots tur augšā pa kreisi, 978 00:58:47,880 --> 00:58:52,250 un tad viņš vai viņa sekoja šim rādītāju uz citu masīvu, 979 00:58:52,250 --> 00:58:55,460 un devās uz Bultiņas atrašanās X. 980 00:58:55,460 --> 00:58:59,840 Tad nākamajā masīva atrašanās W, E, L, L, un tā tālāk, 981 00:58:59,840 --> 00:59:03,090 un visbeidzot, pieņemsim faktiski mēģina ievietot attēlu ar šo. 982 00:59:03,090 --> 00:59:05,380 Ko nozīmē mezglu izskatīsies kodu? 983 00:59:05,380 --> 00:59:11,820 Ir Trie mezgls ietver masīvu norādes uz vairāk punktiem. 984 00:59:11,820 --> 00:59:16,090 Bet tur ir arī tagad ir sava veida Būla vērtība, vismaz šajā īstenošanā. 985 00:59:16,090 --> 00:59:18,770 Es notikt, lai izsauktu to is_word. Kāpēc? 986 00:59:18,770 --> 00:59:22,670 Jo, kad jūs Ievietojot Maxwell, jūs ne ievietojot 987 00:59:22,670 --> 00:59:25,300 kaut šajā datu struktūra. 988 00:59:25,300 --> 00:59:27,480 Jūs neesat rakstiski M. Tu ne rakstiski X. 989 00:59:27,480 --> 00:59:30,240 Visi jūs darāt, ir šādas norādes. 990 00:59:30,240 --> 00:59:33,360 Rādītājs, kas atspoguļo m, tad rādītāju, kas pārstāv, 991 00:59:33,360 --> 00:59:36,310 tad rādītājs, kas pārstāv X, tad W, E, L, L, 992 00:59:36,310 --> 00:59:41,950 bet to, kas jums jādara, beigās ir veida iet, pārbaudiet, es sasnieguši šo vietu. 993 00:59:41,950 --> 00:59:45,560 Tur bija vārds, kas beidzas šeit datu struktūru. 994 00:59:45,560 --> 00:59:48,190 >> Tātad, kādi Trie ir patiešām piepildīta ar un autors izvēlējās pārstāvēt 995 00:59:48,190 --> 00:59:51,880 šie terminuses ar nelielu trīsstūri. 996 00:59:51,880 --> 00:59:56,470 Tas tikai nozīmē, ka tas tas trīsstūris ir šeit, tas Būla vērtība patiess 997 00:59:56,470 --> 00:59:59,200 nozīmē, ja jums iet atpakaļ kokā, 998 00:59:59,200 --> 01:00:02,420 tas nozīmē, ka vārdu nosaukts Maksvels ir šis. 999 01:00:02,420 --> 01:00:04,870 Bet vārds foo, piemēram, 1000 01:00:04,870 --> 01:00:07,970 nav koku, jo, ja es sāktu pie saknes mezgla šeit augšā, 1001 01:00:07,970 --> 01:00:14,030 Nav f rādītājs, ne o rādītājs, ne o rādītājs. Foo nav vārdu šajā vārdnīcā. 1002 01:00:14,030 --> 01:00:22,460 Bet tieši pretēji, Turing, t-U-R-i-n-g. Atkal, man nebija glabāt t vai u vai R vai es vai N vai g. 1003 01:00:22,460 --> 01:00:29,820 Bet es tomēr veikalu šajā datu struktūru vērtību patieso ceļu uz leju šeit šajā mezglā - kokā 1004 01:00:29,820 --> 01:00:33,030 nosakot šo boolean vērtību is_word taisnība. 1005 01:00:33,030 --> 01:00:35,740 Tātad Trie ir veida šo ļoti interesanto meta struktūru, 1006 01:00:35,740 --> 01:00:39,810 kur jūs neesat īsti glabāšanai vārdi paši par šāda veida vārdnīcas. 1007 01:00:39,810 --> 01:00:45,100 Lai būtu skaidrs, jūs vienkārši uzglabāt jā vai nē, ir vārds, kas beidzas šeit. 1008 01:00:45,100 --> 01:00:46,430 >> Tagad to, kas ir saistība? 1009 01:00:46,430 --> 01:00:51,120 Ja jums ir 150,000 vārdus vārdnīcā, ka jūs mēģināt saglabāt atmiņā 1010 01:00:51,120 --> 01:00:53,400 izmantojot kaut kā saistīts saraksts, 1011 01:00:53,400 --> 01:00:56,870 Jums nāksies 150,000 punktiem savā saistīts saraksts. 1012 01:00:56,870 --> 01:01:00,250 Un atrast vienu no šiem vārdiem alfabēta varētu veikt O (n) laiks. 1013 01:01:00,250 --> 01:01:04,370 Lineārā laika. Bet šajā gadījumā par Trie, 1014 01:01:04,370 --> 01:01:09,210 kāda ir darbības laiks atrast vārdu? 1015 01:01:09,210 --> 01:01:17,390 Izrādās skaistums ir tas, ka pat tad, ja jums ir 149.999 vārdus jau šajā vārdnīcā, 1016 01:01:17,390 --> 01:01:20,170 kas īstenota ar šo datu struktūru, 1017 01:01:20,170 --> 01:01:25,560 cik daudz laika tas veic, lai atrastu vai ievietot vēl vienu personu vērā, ka, piemēram, Alice, Alice? 1018 01:01:25,560 --> 01:01:30,640 Nu, tas ir tikai 5, varbūt 6 soļi par trailing raksturs. 1019 01:01:30,640 --> 01:01:32,880 Sakarā presense ar citiem nosaukumiem struktūrā 1020 01:01:32,880 --> 01:01:35,340 nesaņem ceļā ievietojot Alice. 1021 01:01:35,340 --> 01:01:39,640 Turklāt, meklējot Alise reiz ir 150,000 vārdus šajā vārdnīcā 1022 01:01:39,640 --> 01:01:41,960 nav iegūt savā veidā, lai atrastu Alise vispār, 1023 01:01:41,960 --> 01:01:46,880 jo Alise ir. . . . . šeit, jo es atklāju boolean vērtību. 1024 01:01:46,880 --> 01:01:50,920 Un, ja nav Būla taisnība, tad Alise nav šajā datu struktūru vārdiem. 1025 01:01:50,920 --> 01:01:56,220 Citiem vārdiem sakot, darbības laiks atrast lietas un ievietojot lietas vērā šo jauno 1026 01:01:56,220 --> 01:02:01,920 datu struktūra Trie ir O no - tas nav n. 1027 01:02:01,920 --> 01:02:05,730 Sakarā 150,000 cilvēku presense nav nekādas ietekmes uz Alise, šķiet. 1028 01:02:05,730 --> 01:02:11,560 Tāpēc sauksim to k, kur k ir maksimālais garums vārdu angļu valodā 1029 01:02:11,560 --> 01:02:14,050 kas parasti ir ne vairāk kā 20 kaut rakstzīmes. 1030 01:02:14,050 --> 01:02:17,940 Tātad k ir nemainīgs. Tātad Svētais Grāls mēs, šķiet, esam atraduši tagad 1031 01:02:17,940 --> 01:02:26,000 ir, ka Trie, pastāvīgu laiku iestarpinājumus, lookups, lai svītrojumiem. 1032 01:02:26,000 --> 01:02:29,170 Jo vairākas lietas jau struktūrā, 1033 01:02:29,170 --> 01:02:32,600 kas nav pat fiziski tur. Atkal, viņi vienkārši veida pārbauda off, jā vai nē, 1034 01:02:32,600 --> 01:02:35,050 neietekmē tās turpmāko darba laika. 1035 01:02:35,050 --> 01:02:37,940 >> Bet tur ir nokļuvis būt nozvejas, citādi mēs nebūtu veltīgi tik daudz laika 1036 01:02:37,940 --> 01:02:41,460 uz visiem šiem citiem datu struktūrās tikai, lai beidzot iegūtu uz slepeno vienu, kas ir pārsteidzošs. 1037 01:02:41,460 --> 01:02:46,410 Tātad kādu cenu mēs maksāt, lai sasniegtu šo diženumu šeit? Telpa. 1038 01:02:46,410 --> 01:02:49,010 Šī lieta ir milzīgi. Un iemesls tam, ka autors 1039 01:02:49,010 --> 01:02:52,400 nesniedza to šeit, ievērosiet, ka visas šīs lietas, kas izskatās masīvi, 1040 01:02:52,400 --> 01:02:55,400 viņš nav vērst pārējo koka, pārējā Trie, 1041 01:02:55,400 --> 01:02:58,060 tāpēc, ka viņi vienkārši nav saistīti ar stāstu. 1042 01:02:58,060 --> 01:03:01,870 Bet visi šie mezgli ir super plašs, un katrs koks mezgls aizņem 1043 01:03:01,870 --> 01:03:07,780 26 vai tiešām, varētu būt 27 rakstzīmes, jo šajā gadījumā man bija tostarp kosmosa par apostrofam 1044 01:03:07,780 --> 01:03:09,980 lai mēs varētu būt apostrophized vārdus. 1045 01:03:09,980 --> 01:03:14,450 Šajā gadījumā tie ir platas masīvi. Tātad, pat ja viņi nav picutured, 1046 01:03:14,450 --> 01:03:18,190 Tas aizņem milzīgu summu RAM. 1047 01:03:18,190 --> 01:03:20,670 Kas varētu būt labi, especilly mūsdienu aparatūru, 1048 01:03:20,670 --> 01:03:25,650 bet tas tradeoff. Mēs saņemt mazāk laika tērējot vairāk vietas. 1049 01:03:25,650 --> 01:03:28,580 Tātad, ja ir tas viss notiek? 1050 01:03:28,580 --> 01:03:32,640 Nu, pieņemsim do - pieņemsim skatīt šeit. 1051 01:03:32,640 --> 01:03:39,510 Darīsim lēkt uz šo puisis šeit. 1052 01:03:39,510 --> 01:03:43,450 >> Ticiet vai ne, tik daudz prieka kā C ir kādu laiku tagad, 1053 01:03:43,450 --> 01:03:48,130 mēs sasniedzot punktu semestra kur tas ir laiks, lai pārietu uz lietām vairāk mūsdienu. 1054 01:03:48,130 --> 01:03:50,950 Lietas, par augstākā līmenī. Un, pat ja par nākamo pāris nedēļu laikā 1055 01:03:50,950 --> 01:03:54,580 mēs joprojām turpina iegremdēt sevi pasaulē norādes un atmiņas vadība 1056 01:03:54,580 --> 01:03:57,210 lai iegūtu, ka komfortu, ar kuru mēs varam veidot uz, 1057 01:03:57,210 --> 01:04:01,270 beigās spēle galu galā ir ieviest, ironiskā kārtā, nevis šī valoda. 1058 01:04:01,270 --> 01:04:03,330 Mēs tērēt, piemēram, 10 minūtes runā par HTML. 1059 01:04:03,330 --> 01:04:05,950 Viss HTML ir ir iezīmēšanas valoda, un kāda iezīmēšanas valoda ir 1060 01:04:05,950 --> 01:04:10,220 ir šie sērijas atvērtām iekavām un slēgtās kronšteini, kas saka "padara šo bold" 1061 01:04:10,220 --> 01:04:12,000 "Padarīt šo kursīvā '' padara šo centrēts." 1062 01:04:12,000 --> 01:04:14,250 Tas vēl nav viss, kas intelektuāli interesanti, bet tas ir super noderīga. 1063 01:04:14,250 --> 01:04:16,650 Un tas noteikti visuresošs šajās dienās. 1064 01:04:16,650 --> 01:04:19,450 Bet kas ir spēcīgs par pasaules HTML, un web programmēšana kopumā, 1065 01:04:19,450 --> 01:04:25,910 būvē dinamisko lietas; rakstot kodu valodās, piemēram, PHP vai Python vai Ruby vai Java vai C #. 1066 01:04:25,910 --> 01:04:30,360 Tiešām, neatkarīgi no jūsu valodu izvēle ir, un radot HTML dinamiski. 1067 01:04:30,360 --> 01:04:32,960 Radīt kaut ko sauc CSS dinamiski. 1068 01:04:32,960 --> 01:04:35,810 Kaskādes stila lapas, kas arī ir par estētiku. 1069 01:04:35,810 --> 01:04:41,360 Un tā pat, šodien, ja es eju uz kādu tīmekļa vietni, piemēram iepazinušies Google.com, 1070 01:04:41,360 --> 01:04:46,100 un es iet, lai apskatītu, attīstītājs, apskatīt avota, kas varbūt jūs esat darījuši agrāk, 1071 01:04:46,100 --> 01:04:49,800 bet iet apskatīt avotu, šī stuff droši vien izskatās diezgan noslēpumains. 1072 01:04:49,800 --> 01:04:55,320 Bet tas ir pamatā kods, kas īsteno Google.com. 1073 01:04:55,320 --> 01:04:57,940 Uz priekšējā galā. Un patiesībā tas viss ir pūkains estētika sīkumi. 1074 01:04:57,940 --> 01:05:01,740 Tas ir CSS šeit. Ja es glabāt ritinot uz leju mēs iegūt kādu krāsu kodēta sīkumi. 1075 01:05:01,740 --> 01:05:06,890 Šis ir HTML. Google koda izskatās haoss, bet, ja es tiešām atvērt citu logu, 1076 01:05:06,890 --> 01:05:09,380 mēs varam redzēt dažus struktūru šo. 1077 01:05:09,380 --> 01:05:12,640 Ja es atveru šo augšu, pamanīt šeit, tas ir mazliet vieglāk saprotamus. 1078 01:05:12,640 --> 01:05:16,850 Mēs ejam, lai redzētu, pirms ilgi šo tagu, [vārds] ir tag, 1079 01:05:16,850 --> 01:05:23,520 HTML, galvas, ķermeņa, div, skripts, teksta apgabals, standarta, centrēts, div. 1080 01:05:23,520 --> 01:05:26,770 Un tas ir arī sava veida mistisks izskatīgs pēc pirmā acu uzmetiena, 1081 01:05:26,770 --> 01:05:30,890 bet visu šo putru šādi noteiktiem modeļiem un atkārtojamiem modeļus, 1082 01:05:30,890 --> 01:05:33,850 tāpēc, ka, tiklīdz mēs iegūt pamatus uz leju, jūs varēsiet rakstīt kodu, kā šis 1083 01:05:33,850 --> 01:05:37,550 un tad manipulēt kodu, piemēram, tas, izmantojot vēl vienu valodu, ko sauc JavaScript. 1084 01:05:37,550 --> 01:05:40,440 Un JavaScript ir valoda, kas darbojas iekšpusē pārlūku 1085 01:05:40,440 --> 01:05:44,380 ka šodien mēs izmantot par Hārvardas kursus, par kursu iepirkšanās rīks, ka Google Maps izmanto 1086 01:05:44,380 --> 01:05:48,660 lai dotu jums visu ķekars dinamismu, Facebook dod jums, lai parādītu instant statusa atjauninājumus, 1087 01:05:48,660 --> 01:05:51,430 Twitter to izmanto, lai parādītu jums tweets uzreiz. 1088 01:05:51,430 --> 01:05:53,820 Tas viss mēs sāksim iegremdēt sevi collas 1089 01:05:53,820 --> 01:05:57,190 Bet tur nokļūt, mums ir jāsaprot, mazliet kaut ko par internetu. 1090 01:05:57,190 --> 01:06:01,130 Šis klips šeit ir tikai minūti gara, un pieņemsim, tagad tas ir, faktiski, 1091 01:06:01,130 --> 01:06:08,380 kā internets darbojas kā teaser par to, kas ir apmēram nāk. Es jums "Warriors no tīkla." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Lēna koris mūzika ♫] 1093 01:06:14,720 --> 01:06:20,450 [Vīrietis stāstītājs] Viņš atnāca ar ziņu. 1094 01:06:20,450 --> 01:06:23,770 Ar protokolu viss viņa paša. 1095 01:06:23,770 --> 01:06:37,270 [♫ Ātrāk elektroniskās mūzikas ♫] 1096 01:06:37,270 --> 01:06:41,330 Viņš nāca pasaulē atdzist ugunsmūru, uncaring maršrutētājiem, 1097 01:06:41,330 --> 01:06:45,690 un briesmas daudz sliktāk nekā nāvi. 1098 01:06:45,690 --> 01:06:55,400 Viņš ir ātrs. Viņš ir spēcīgs. Viņš TCP / IP, un viņš ieguva savu adresi. 1099 01:06:55,400 --> 01:06:59,250 Karavīri no Net. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Nākamnedēļ, tad. Interneta. Web programmēšana. Tas ir CS50. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]