1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Linggo 6, patuloy na] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Harvard University] 3 00:00:04,160 --> 00:00:08,720 [Ito ay CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Ito ay CS50 at ito ay ang katapusan ng linggo 6. 5 00:00:12,970 --> 00:00:17,970 Kaya CS50x, isa sa Harvard ng mga unang kurso na kasangkot sa edX inisyatiba 6 00:00:17,970 --> 00:00:20,590 katunayan debuted ito nakaraang Monday. 7 00:00:20,590 --> 00:00:23,460 Kung nais mong upang makakuha ng isang sulyap sa kung ano ang iba sa Internet 8 00:00:23,460 --> 00:00:27,180 na ngayon ang mga sumusunod na kasama ng, maaari kang magtungo sa x.cs50.net. 9 00:00:27,180 --> 00:00:30,350 Na-redirect ka sa naaangkop na lugar sa edx.org, 10 00:00:30,350 --> 00:00:34,160 na kung saan ang mga ito at iba pang mga kurso mula sa MIT at Berkeley Live na ngayon. 11 00:00:34,160 --> 00:00:38,140 Magkakaroon ka upang mag-sign up para sa isang account, makikita mo na ang materyal ay higit sa lahat ang parehong 12 00:00:38,140 --> 00:00:42,170 habang ikaw ay nagkaroon semestre na ito, kahit na ng ilang linggo maantala, bilang makuha namin ang lahat handa. 13 00:00:42,170 --> 00:00:46,930 Ngunit ano ay ngayon makita ang mag-aaral sa CS50x ay isang interface medyo tulad ng isang ito. 14 00:00:46,930 --> 00:00:50,040 Ito, halimbawa, Zamyla humahantong ang walkthrough para sa hanay ng problema 0. 15 00:00:50,040 --> 00:00:54,230 Sa pag-log in sa edx.org, CS50x mag-aaral ay nakikita ang mga uri ng mga bagay 16 00:00:54,230 --> 00:00:57,170 gusto mong asahan na makita sa isang kurso: ang panayam para sa Lunes, 17 00:00:57,170 --> 00:01:01,650 panayam para sa Miyerkules, iba't ibang mga shorts, set ang problema, walkthroughs, PDF. 18 00:01:01,650 --> 00:01:04,459 Sa karagdagan, tulad ng nakikita mo dito, machine pagsasalin 19 00:01:04,459 --> 00:01:08,390 ng Ingles transcript sa Chinese, Japanese, Espanyol, Italyano, 20 00:01:08,390 --> 00:01:12,810 at ng buong bungkos ng iba pang mga wika na ay tiyak na hindi lubos na pagsisisi 21 00:01:12,810 --> 00:01:15,840 bilang roll namin sa kanila ang programa gamit ang isang bagay na tinatawag ng isang API, 22 00:01:15,840 --> 00:01:18,360 o application programming interface, mula sa Google 23 00:01:18,360 --> 00:01:21,360 na nagbibigay-daan sa amin upang i-convert ang Ingles sa iba pang mga wika. 24 00:01:21,360 --> 00:01:24,100 Ngunit salamat sa magandang espiritu ng ilang daang-plus na boluntaryo, 25 00:01:24,100 --> 00:01:26,940 random na mga tao sa Internet na Pinapayuhan inaalok sa mga makibahagi 26 00:01:26,940 --> 00:01:30,180 sa proyektong ito, ipapakita namin dahan-dahan na pagpapabuti ng kalidad ng mga pagsasalin 27 00:01:30,180 --> 00:01:35,790 sa pamamagitan ng pagkakaroon ng tao itama ang mga pagkakamali na ang aming mga computer ay ginawa. 28 00:01:35,790 --> 00:01:42,330 >> Kaya ito lumiliko out namin ng ilang higit pang mga mag-aaral ay nagpapakita sa Lunes kaysa sa inaasahan namin simula. 29 00:01:42,330 --> 00:01:48,980 Sa katunayan, ngayon CS50x ay may 100,000 taong sumusunod sa kasama sa bahay. 30 00:01:48,980 --> 00:01:54,430 Kaya Napagtanto ikaw ay ang lahat ng bahagi ng ito pampasinaya klase ng kursong ito sa computer science 31 00:01:54,430 --> 00:01:57,370 edukasyon mas pangkalahatan, mas malawak, naa-access. 32 00:01:57,370 --> 00:02:00,130 At ang katotohanan na ngayon, sa ilan sa mga napakalaking online na kurso, 33 00:02:00,130 --> 00:02:04,070 lahat ng mga ito ay magsimula sa mga napakataas na numero, bilang tila namin nagawa dito. 34 00:02:04,070 --> 00:02:08,759 Ngunit ang layunin, sa huli, para sa CS50x talagang upang makakuha ng maraming mga tao sa ang tapusin linya hangga't maaari. 35 00:02:08,759 --> 00:02:12,000 Sa pamamagitan ng disenyo, CS50x ay pagpunta sa inaalok mula sa nakaraang Monday 36 00:02:12,000 --> 00:02:17,430 ang lahat ng mga paraan sa pamamagitan ng Abril 15, 2013, sa gayon ang mga tao na may pagtuon sa paaralan sa ibang lugar, 37 00:02:17,430 --> 00:02:20,990 trabaho, pamilya, iba pang mga salungatan at tulad, ng kaunti pang kakayahang umangkop 38 00:02:20,990 --> 00:02:23,640 na sumisid sa kursong ito, na, sumapat ito sa sabihin, 39 00:02:23,640 --> 00:02:30,540 ay medyo ambitiously tapos kung lamang sa loob ng tatlong buwan sa panahon ng isang karaniwang semestre. 40 00:02:30,540 --> 00:02:34,190 Subalit ang mga mag-aaral na ito ay tackling ang parehong hanay ng problema, tingnan ang parehong nilalaman, 41 00:02:34,190 --> 00:02:36,350 sa pagkakaroon ng access sa parehong shorts at ang mga tulad ng. 42 00:02:36,350 --> 00:02:38,990 Kaya Napagtanto na namin ang lahat talagang sa ito sama-sama. 43 00:02:38,990 --> 00:02:42,360 At isa sa mga layunin ng pagtatapos ng CS50x ay hindi lamang upang makakuha ng maraming mga tao 44 00:02:42,360 --> 00:02:45,720 sa linya ng tapusin at bigyan sila ito newfound unawa ng computer science 45 00:02:45,720 --> 00:02:49,000 at programming kundi pati na rin sa kanila ang nakabahaging karanasan. 46 00:02:49,000 --> 00:02:52,010 Isa ng mga tumutukoy na katangian na 50 sa campus, inaasahan namin, 47 00:02:52,010 --> 00:02:56,260 ang ganitong uri ng communal karanasan, para sa mas mahusay o para sa mas masahol pa, minsan, 48 00:02:56,260 --> 00:02:59,480 ngunit ang mga taong ito upang i-sa kaliwa at sa kanan, 49 00:02:59,480 --> 00:03:01,830 at mga oras ng opisina at ang hackathon at ng patas. 50 00:03:01,830 --> 00:03:04,560 Ito ay isang maliit na mahirap upang gawin iyon sa taong may mga tao online, 51 00:03:04,560 --> 00:03:10,580 ngunit CS50x ay pagtibayin sa buwan ng Abril sa unang kailanman CS50 Expo, 52 00:03:10,580 --> 00:03:13,630 kung saan ay isang online na paglalapat ng aming mga ideya ng patas 53 00:03:13,630 --> 00:03:18,250 kung saan ang mga libu-libong ng mga mag-aaral ay iniimbitahan upang magsumite ng 1 - sa 2-minutong video, 54 00:03:18,250 --> 00:03:22,480 alinman sa isang screencast sa kanilang panghuling proyekto o video sa kanila waving kumusta 55 00:03:22,480 --> 00:03:24,490 at pakikipag-usap tungkol sa kanilang mga proyekto at demoing ito, 56 00:03:24,490 --> 00:03:27,610 magkano tulad ng iyong mga predecessors ginawa dito sa campus sa patas, 57 00:03:27,610 --> 00:03:31,400 kaya na sa pamamagitan ng pagtatapos ng semestre, ang pag-asa ay upang magkaroon ng isang pandaigdigang exhibition 58 00:03:31,400 --> 00:03:37,080 ang CS50x mga mag-aaral 'panghuling proyekto, tulad ng na kung saan naghihintay sa iyo na ito Disyembre dito sa campus. 59 00:03:37,080 --> 00:03:39,680 Kaya higit pa sa buwan na darating. 60 00:03:39,680 --> 00:03:43,640 >> May mga 100,000 mga mag-aaral, bagaman, ay isang pangangailangan para sa isang ilang higit pang mga Cas. 61 00:03:43,640 --> 00:03:47,590 Given na iyong guys ay nagliliyab ang trail dito at pagkuha CS50 62 00:03:47,590 --> 00:03:51,630 ilang linggo sa bago release ang materyal na ito sa mga tao sa edX, 63 00:03:51,630 --> 00:03:55,330 Napagtanto ibig naming sangkot ng maraming ng aming sariling mga mag-aaral hangga't maaari sa ito inisyatiba, 64 00:03:55,330 --> 00:03:58,720 parehong panahon ng semestre pati na rin ang taglamig na ito at ito darating na tagsibol. 65 00:03:58,720 --> 00:04:01,620 Kaya kung nais mong upang makakuha ng kasangkot sa CS50x, 66 00:04:01,620 --> 00:04:07,450 lalo pagsali sa sa CS50x talakayin, ang edX bersyon ng CS50 talakayin, 67 00:04:07,450 --> 00:04:10,140 kung saan marami sa inyo ay gamit sa campus, ang online bulletin board, 68 00:04:10,140 --> 00:04:13,040 mangyaring pumunta sa URL na iyon, ipaalam sa amin kung sino ka, 69 00:04:13,040 --> 00:04:16,450 dahil gusto namin ibigin upang bumuo ng isang koponan ng mga mag-aaral at kawani at faculty magkamukha 70 00:04:16,450 --> 00:04:19,630 sa campus na lamang sa paglalaro ng kahabaan at pagtulong ang. 71 00:04:19,630 --> 00:04:21,720 At kapag nakita sila ng isang tanong na pamilyar sa kanila, 72 00:04:21,720 --> 00:04:25,320 marinig mo ang isang mag-aaral sa pag-uulat ilang mga bug sa isang lugar out doon sa ilang mga bansa sa Internet, 73 00:04:25,320 --> 00:04:27,450 at na mga singsing ng isang kampanilya dahil masyado kang nagkaroon na parehong isyu 74 00:04:27,450 --> 00:04:32,620 sa iyong d-hall ng ilang oras ang nakalipas, sana pagkatapos maaari mong tugtog ng relos sa at ibahagi ang iyong sariling karanasan. 75 00:04:32,620 --> 00:04:37,300 Kaya mangyaring huwag makibahagi kung nais mong. 76 00:04:37,300 --> 00:04:39,360 >> Computer science courses sa Harvard ay may isang bit ng isang tradisyon, 77 00:04:39,360 --> 00:04:44,730 CS50 kasama ng mga ito, ng pagkakaroon ng ilang mga damit, ilang mga damit, na maaari mong magsuot buong kapurihan 78 00:04:44,730 --> 00:04:49,090 sa pagtatapos ng semestre, na sinasabi medyo buong kapurihan na tapos ka CS50 79 00:04:49,090 --> 00:04:51,830 at kinuha CS50 at tulad, at lagi naming subukan upang makasali ang mga mag-aaral 80 00:04:51,830 --> 00:04:54,540 sa prosesong ito hangga't maaari, kung saan inaanyayahan namin, 81 00:04:54,540 --> 00:04:56,900 sa paligid ng oras na ito ng semestre, ang mga mag-aaral upang isumite ang mga disenyo 82 00:04:56,900 --> 00:04:59,330 gamit ang Photoshop, o anumang tool ng pagpipilian na nais mong gamitin 83 00:04:59,330 --> 00:05:02,330 kung ikaw ay isang designer, upang isumite ang mga disenyo para sa mga T-shirt at sweatshirt 84 00:05:02,330 --> 00:05:06,100 at payong at maliit na bandanas para sa aso na namin ngayon at ang gusto. 85 00:05:06,100 --> 00:05:09,370 At ang lahat ay pagkatapos - ang mga nagwagi ng bawat taon ay exhibited 86 00:05:09,370 --> 00:05:12,700 sa website ng kurso sa store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 Lahat ay ibinebenta sa gastos doon, ngunit ang website tumatakbo lamang sa mismong 88 00:05:15,790 --> 00:05:18,330 at nagbibigay-daan sa mga tao na piliin ang mga kulay at mga disenyo na gusto nila. 89 00:05:18,330 --> 00:05:20,420 Kaya ko naisip lang namin ibahagi ang ilan sa disenyo ng nakaraang taon 90 00:05:20,420 --> 00:05:25,130 na sa website bukod ang isang ito dito, kung saan ay isang taunang tradisyon. 91 00:05:25,130 --> 00:05:29,410 "Bawat Araw ako Seg Faultn" ay isa ng pagsusumite nakaraang taon, 92 00:05:29,410 --> 00:05:32,290 na magagamit pa rin para sa mga alumni. 93 00:05:32,290 --> 00:05:35,820 Nagkaroon kami ng isang ito, "CS50, Itinatag 1989." 94 00:05:35,820 --> 00:05:39,010 Isa ng aming mga Bowdens, Rob, ay napaka-tanyag nakaraang taon. 95 00:05:39,010 --> 00:05:43,480 "Team Bowden" ay ipinanganak, disenyo na ito ay isinumite, kabilang sa mga tuktok na nagbebenta. 96 00:05:43,480 --> 00:05:49,040 Bilang ang isang ito dito. Maraming mga tao ay may "Bowden Fever" ayon sa mga tala ng mga benta. 97 00:05:49,040 --> 00:05:52,650 Napagtanto na na maaaring na ngayong iyong disenyo doon, hanggang sa Internet. 98 00:05:52,650 --> 00:05:57,510 Higit pang mga detalye sa ito sa susunod na problema Nagtatakda darating. 99 00:05:57,510 --> 00:06:00,330 >> Isa pang tool: nagkaroon ka ilang pagkakalantad at sana ngayon 100 00:06:00,330 --> 00:06:02,350 ilang hands-on na karanasan sa GDB, 101 00:06:02,350 --> 00:06:04,570 na, siyempre, isang debugger at nagbibigay-daan sa iyo upang manipulahin 102 00:06:04,570 --> 00:06:09,500 iyong programa sa isang medyo mababa antas, ginagawa kung ano ang mga uri ng bagay? 103 00:06:09,500 --> 00:06:13,030 Ano ang ginagawa ng ng GDB hayaan mong gawin? 104 00:06:13,030 --> 00:06:15,030 Oo? Bigyan mo ako ng isang bagay. [Estudyante sagot, hindi maintindihan] 105 00:06:15,030 --> 00:06:18,120 Mabuti. Hakbang sa function na, kaya hindi mo na lang ay i-type patakbuhin 106 00:06:18,120 --> 00:06:22,310 at sumuntok sa programa sa pamamagitan ng kabuuan nito, pag-print out ng mga bagay sa standard output. 107 00:06:22,310 --> 00:06:25,190 Sa halip, maaari mong hakbang sa pamamagitan ng ito linya sa pamamagitan ng linya, alinman sa mag-type sa tabi 108 00:06:25,190 --> 00:06:30,300 pumunta ng linya sa pamamagitan ng linya sa pamamagitan ng linya o hakbang sa sumisid sa isang function, karaniwang isa na iyong sinulat ni. 109 00:06:30,300 --> 00:06:35,240 Ano pa ang GDB sabihin gagawin mo? Oo? [Estudyante sagot, hindi maintindihan] 110 00:06:35,240 --> 00:06:38,100 I-print variable. Kaya kung gusto mong gawin ang isang maliit na pagsisiyasat ng sarili sa loob ng iyong programa 111 00:06:38,100 --> 00:06:41,500 nang hindi na kinakailangang resort sa pagsusulat ng printf pahayag sa lahat ng dako ng lugar, 112 00:06:41,500 --> 00:06:44,600 Maaari mo lamang i-print ang isang variable o magpakita ng isang variable. 113 00:06:44,600 --> 00:06:46,710 Ano pa ang maaari mong gawin sa isang debugger tulad GDB? 114 00:06:46,710 --> 00:06:49,170 [Estudyante sagot, hindi maintindihan] 115 00:06:49,170 --> 00:06:52,080 Eksakto. Maaari mong itakda ang breakpoints, maaari mong sabihin na ang break na pagpapatupad 116 00:06:52,080 --> 00:06:54,020 sa pangunahing function na o ang foo function na. 117 00:06:54,020 --> 00:06:56,800 Maaari mong sabihin ang pagpapatupad ng pahinga sa line 123. 118 00:06:56,800 --> 00:06:58,950 At mga breakpoints talagang malakas na diskarte 119 00:06:58,950 --> 00:07:01,110 dahil kung mayroon kang isang pangkalahatang pakiramdam ng kung saan ang problema sa iyong 120 00:07:01,110 --> 00:07:05,360 marahil, hindi mo kailangang-aaksaya ng oras sa stepping sa kabuuan ng programa. 121 00:07:05,360 --> 00:07:08,250 Maaari mong mahalagang tumalon doon at pagkatapos ay simulang mag-type - 122 00:07:08,250 --> 00:07:10,970 stepping sa pamamagitan nito na may hakbang o sa tabi o ang tulad ng. 123 00:07:10,970 --> 00:07:14,340 Ngunit ang catch na may isang bagay tulad ng GDB ay tumutulong ito sa iyo, ang mga tao, 124 00:07:14,340 --> 00:07:16,940 mahanap ang iyong mga problema at hanapin ang iyong mga bug. 125 00:07:16,940 --> 00:07:19,470 Ito ay hindi kinakailangang makita ang mga ito kaya magkano para sa iyo. 126 00:07:19,470 --> 00:07:23,070 >> Kaya ipinakilala namin ang iba pang mga araw style50, na kung saan ay isang maigsing command line tool 127 00:07:23,070 --> 00:07:27,500 na sinusubukan sa stylize ang iyong code ng kaunti nang malinis kaysa sa iyo, ang mga tao, ay maaaring magkaroon ng tapos. 128 00:07:27,500 --> 00:07:29,530 Ngunit iyon, masyadong, ay talaga lamang ng isang Aesthetic bagay. 129 00:07:29,530 --> 00:07:34,110 Ngunit ito lumiliko out doon ang iba pang mga tool na tinatawag na Valgrind na ng kaunti pa arcane upang gamitin. 130 00:07:34,110 --> 00:07:36,860 Ang output nito ay misteriyoso atrociously sa unang tingin. 131 00:07:36,860 --> 00:07:39,420 Ngunit kamangha-mangha kapaki-pakinabang, lalo na ngayon na hindi namin sa bahagi ng termino 132 00:07:39,420 --> 00:07:43,080 kung saan ka simula upang gamitin ang malloc at dynamic na paglalaan ng memorya. 133 00:07:43,080 --> 00:07:45,420 Mga bagay na maaari pumunta talaga, talagang mali mabilis. 134 00:07:45,420 --> 00:07:49,320 Dahil kung nakalimutan mo upang magbakante ang iyong memorya, o dereference kang ilang mga null pointer, 135 00:07:49,320 --> 00:07:55,770 o dereference kang ilang mga basura pointer, ano ay karaniwang ang sintomas na mga resulta? 136 00:07:55,770 --> 00:07:59,470 Seg kasalanan. At makakakuha ka ng ito core file ng ilang bilang ng kilobytes o megabytes 137 00:07:59,470 --> 00:08:02,990 na kumakatawan sa estado ng memorya ng iyong programa kapag nag-crash, 138 00:08:02,990 --> 00:08:05,730 ngunit ang iyong programa sa huli seg ng mga faults, segmentation fault, 139 00:08:05,730 --> 00:08:08,450 na nangangahulugan ng isang bagay masamang nangyari halos palaging may kaugnayan 140 00:08:08,450 --> 00:08:11,750 sa isang memory-kaugnay na pagkakamali na iyong ginawa sa isang lugar. 141 00:08:11,750 --> 00:08:14,100 Kaya Valgrind tumutulong sa iyo na mahanap ang mga bagay tulad nito. 142 00:08:14,100 --> 00:08:17,720 Ito ay isang tool na iyong pinapatakbo, tulad ng GDB, pagkatapos mong pinagsama-sama ang iyong programa, 143 00:08:17,720 --> 00:08:20,330 ngunit sa halip na patakbuhin ang iyong programa nang direkta, patakbuhin mo Valgrind 144 00:08:20,330 --> 00:08:23,960 at pumasa ka dito ang iyong programa, tulad ng gagawin mo sa GDB. 145 00:08:23,960 --> 00:08:26,220 Ngayon, ang paggamit, upang makuha ang pinakamahusay na uri ng output, 146 00:08:26,220 --> 00:08:30,410 ay isang maliit na mahaba, kaya doon nasa ibabaw ng screen makikita mo makita ang Valgrind-v. 147 00:08:30,410 --> 00:08:35,350 "-V" sa halos pangkalahatang ay nangangahulugan maligoy kapag gumagamit ka ng mga programa sa isang Linux computer. 148 00:08:35,350 --> 00:08:38,770 Kaya ibig sabihin nito ay sabihin ang lahat ng mga mas maraming data kaysa sa maaari bilang default. 149 00:08:38,770 --> 00:08:45,510 "- Mahayag-check = puno na." Ito ay sinasabi ng tseke para sa lahat ng posibleng mga paglabas ng memorya, 150 00:08:45,510 --> 00:08:49,430 pagkakamali na maaaring ko ginawa. Ito, masyadong, ay isang pangkaraniwang paradaym sa Linux programa. 151 00:08:49,430 --> 00:08:52,710 Sa pangkalahatan, kung mayroon kang isang command line argument na isang "lumipat", 152 00:08:52,710 --> 00:08:55,830 na dapat baguhin ang pag-uugali ng programa, at ito ng isang sulat, 153 00:08:55,830 --> 00:09:00,310 ito-v, ngunit kung na lumipat, lamang sa pamamagitan ng disenyo ng programmer, 154 00:09:00,310 --> 00:09:05,150 ay isang buong salita o serye ng mga salita, ang argument ng linya ng command na nagsisimula sa -. 155 00:09:05,150 --> 00:09:08,190 Ito lamang ang tao convention, ngunit makikita mo ang mga ito nagiging. 156 00:09:08,190 --> 00:09:12,410 At pagkatapos, sa wakas, "a.out" ay ang arbitrary pangalan para sa programa sa partikular na halimbawa. 157 00:09:12,410 --> 00:09:14,640 At narito ang ilang kinatawan output. 158 00:09:14,640 --> 00:09:22,890 >> Bago masaya naming sa kung ano na maaaring ibig sabihin, hayaan mo akong pumunta sa isang snippet ng code sa paglipas dito. 159 00:09:22,890 --> 00:09:26,390 At hayaan mo akong ilipat ito ng paraan, paparating, 160 00:09:26,390 --> 00:09:32,120 at sabihin tingnan sa memory.c, na kung saan ay ang maikling halimbawa dito. 161 00:09:32,120 --> 00:09:36,290 Kaya sa programang ito, hayaan mo akong mag-zoom in sa mga pag-andar at mga tanong. 162 00:09:36,290 --> 00:09:39,430 Mayroon kaming isang function pangunahing na tawag sa isang function, f, 163 00:09:39,430 --> 00:09:45,590 at pagkatapos ay kung ano ang f magpatuloy na gawin, sa bahagyang teknikal na Ingles? 164 00:09:45,590 --> 00:09:49,760 Ano ang f magpatuloy sa ko? 165 00:09:49,760 --> 00:09:53,680 Paano tungkol sa ko makikita magsimula sa linya 20, at hindi mahalaga ang lokasyon ng bituin, 166 00:09:53,680 --> 00:09:56,720 ngunit ko lang maging pare-pareho dito sa huling panayam. 167 00:09:56,720 --> 00:09:59,910 Ano ang linya 20 para sa amin? Sa kaliwang bahagi. Hihimayin namin ito nang higit pa. 168 00:09:59,910 --> 00:10:02,410 Int * x: kung ano ang na gawin? 169 00:10:02,410 --> 00:10:04,940 Okay. Ito ay deklarasyon ng isang pointer, at ngayon sabihin mas teknikal. 170 00:10:04,940 --> 00:10:10,230 Ano ang ibig sabihin, napaka concretely, upang idedeklara ng pointer? Ibang tao? 171 00:10:10,230 --> 00:10:15,050 Oo? [Estudyante sagot, hindi maintindihan] Masyadong malayo. 172 00:10:15,050 --> 00:10:17,060 Kaya ka binabasa sa kanang bahagi ng katumbas sign. 173 00:10:17,060 --> 00:10:20,290 Natin tumutok lamang sa kaliwa, sa int * x. 174 00:10:20,290 --> 00:10:24,700 Ito ay "idedeklara" pointer, ngunit ngayon natin sumisid sa mas malalim na kahulugan. 175 00:10:24,700 --> 00:10:28,330 Ano ang na concretely, ibig sabihin technically? Oo? 176 00:10:28,330 --> 00:10:31,940 [Estudyante sagot, hindi maintindihan] 177 00:10:31,940 --> 00:10:35,090 Okay. Ito ay naghahanda upang i-save ang isang address sa memorya. 178 00:10:35,090 --> 00:10:40,680 Mabuti. At sabihin sa isang hakbang karagdagang; ito deklarasyon ng variable, x, na 32 bit. 179 00:10:40,680 --> 00:10:44,440 At alam ko ito ay 32 bits dahil -? 180 00:10:44,440 --> 00:10:47,390 Hindi ito dahil ito ay isang int, dahil ito ay isang pointer sa kasong ito. 181 00:10:47,390 --> 00:10:49,650 Pagkakataon na ito ay isa at ang parehong may isang int, 182 00:10:49,650 --> 00:10:51,970 ngunit ang katotohanan na may star ang nangangahulugan na ito ay isang pointer 183 00:10:51,970 --> 00:10:57,300 at sa appliance, na may maraming mga computer, ngunit hindi lahat, ng mga payo 32 bit. 184 00:10:57,300 --> 00:11:01,850 Sa mas modernong hardware tulad ng pinakabagong Mac, ang pinakabagong PC, maaaring mayroon ka ng mga 64-bit na payo, 185 00:11:01,850 --> 00:11:04,160 ngunit sa appliance, ang mga bagay na ito ay 32 bit. 186 00:11:04,160 --> 00:11:08,380 Kaya namin ilagay sa pamantayan sa na. Higit pang concretely, kuwento naging tulad ng sumusunod: 187 00:11:08,380 --> 00:11:10,820 Namin ang "idedeklara" ng pointer; kung ano ang na ibig sabihin nito? 188 00:11:10,820 --> 00:11:12,810 Hinahanda namin upang mag-imbak ng address ng memorya. 189 00:11:12,810 --> 00:11:15,530 Ano ang na ibig sabihin nito? 190 00:11:15,530 --> 00:11:19,810 Namin na lumikha ng isang variable na tinatawag na x na tumatagal ng hanggang 32 bit 191 00:11:19,810 --> 00:11:23,810 na madaling iimbak ang address ng isang integer. 192 00:11:23,810 --> 00:11:26,470 At na maaaring tungkol sa bilang tumpak hangga't maaari naming makakuha ng. 193 00:11:26,470 --> 00:11:31,810 Masarap na paglipat ng pasulong upang gawing simple ang mundo at sabihin ipinapahayag ng pointer na tinatawag na x. 194 00:11:31,810 --> 00:11:35,380 Magpahayag ng isang pointer, ngunit mapagtanto at maunawaan kung ano ang aktwal na pagpunta sa 195 00:11:35,380 --> 00:11:38,490 kahit sa mga ilang mga character lamang. 196 00:11:38,490 --> 00:11:42,040 >> Ngayon, ito ang halos isang maliit na mas madali, kahit na ito ang isang na expression. 197 00:11:42,040 --> 00:11:48,160 Kaya kung ano ang ito ginagawa, na naka-highlight na ngayon: "malloc (10 * sizeof (int));" Oo? 198 00:11:48,160 --> 00:11:52,350 [Estudyante sagot, hindi maintindihan] 199 00:11:52,350 --> 00:11:58,250 Mabuti. At Kukunin ko ang mga ito doon. Ito ay paglaan ng isang tipak ng memory para sa sampung integer. 200 00:11:58,250 --> 00:12:02,190 At ngayon sabihin sumisid sa bahagyang mas malalim; paglaan ito isang tipak ng memory para sa sampung integer. 201 00:12:02,190 --> 00:12:05,390 Ano ang malloc pagkatapos bumabalik? 202 00:12:05,390 --> 00:12:10,390 Ang address ng tigkal na, o, mas concretely, ang address ng unang byte ng tigkal na. 203 00:12:10,390 --> 00:12:14,080 Paano Ako, programmer, malaman kung saan na tipak ng mga dulo ng memory? 204 00:12:14,080 --> 00:12:18,340 Alam ko na ito ay magkadikit. Malloc, sa pamamagitan ng kahulugan, ay magbibigay sa iyo ng isang magkadikit na tipak ng memorya. 205 00:12:18,340 --> 00:12:21,240 Walang mga gaps sa loob nito. Mayroon kang access sa bawat byte sa tigkal na, 206 00:12:21,240 --> 00:12:26,760 bumalik upang i-back-back, ngunit paano ko malalaman kung saan ang dulo ng ito tipak ng memory? 207 00:12:26,760 --> 00:12:28,850 Kapag mong gamitin ang malloc? [Estudyante sagot, hindi maintindihan] Magandang. 208 00:12:28,850 --> 00:12:30,670 Hindi mo gusto. Mong matandaan. 209 00:12:30,670 --> 00:12:35,960 Kong tandaan na ginamit ko ang halaga 10, at hindi ko kahit na mukhang nagawa na dito. 210 00:12:35,960 --> 00:12:41,000 Ngunit pananagutan ay ganap na sa akin. Strlen, na kung saan kami maging bahagyang tiwala para sa mga string, 211 00:12:41,000 --> 00:12:45,860 gumagana lamang dahil sa ang convention na ito ng pagkakaroon ng \ 0 212 00:12:45,860 --> 00:12:48,840 o ito espesyal na character na nul, NUL, sa dulo ng isang string. 213 00:12:48,840 --> 00:12:51,740 Na hindi pindutin nang matagal para lamang arbitrary chunks ng memory. 214 00:12:51,740 --> 00:12:58,590 Ito ay hanggang sa iyo. Kaya linya 20, pagkatapos, allocates ng tipak ng memory 215 00:12:58,590 --> 00:13:02,590 na maaaring iimbak ng sampung integer, at iniimbak ang address ng unang byte 216 00:13:02,590 --> 00:13:05,610 ng na tipak ng memory sa variable na tinatawag na x. 217 00:13:05,610 --> 00:13:11,140 Samakatuwid, na kung saan ay isang pointer. Kaya linya 21, sa kasamaang-palad, ng pagkakamali. 218 00:13:11,140 --> 00:13:16,110 Ngunit una, kung ano ang ginagawa? Ito ay sinasabi ng tindahan sa lokasyon 10, 0 na-index, 219 00:13:16,110 --> 00:13:19,480 ng tipak ng memory na tinatawag na x ang halaga 0. 220 00:13:19,480 --> 00:13:21,510 >> Kaya mapansin ng ilang mga bagay ay pagpunta sa. 221 00:13:21,510 --> 00:13:25,420 Kahit na ang isang pointer ang x, isipin ang mula sa ilang linggo na ang nakakaraan 222 00:13:25,420 --> 00:13:29,440 na maaari mo pa ring gamitin ang array-style square bracket pagtatanda. 223 00:13:29,440 --> 00:13:36,180 Dahil na talagang maikling-kamay pagtatanda para sa higit pa misteriyoso mukhang aritmetika pointer. 224 00:13:36,180 --> 00:13:40,320 kung saan gusto naming gawin ang isang bagay tulad nito: Dumaan sa address x, ilipat ang 10 spot sa paglipas ng, 225 00:13:40,320 --> 00:13:44,550 pagkatapos ay pumunta doon sa anumang address ay naka-imbak sa lokasyon na iyon. 226 00:13:44,550 --> 00:13:48,090 Ngunit lantaran, ito ay mabangis na basahin at maging komportable. 227 00:13:48,090 --> 00:13:52,900 Kaya ang mundo ay karaniwang gumagamit ng mga square bracket dahil lang sa ito ay kaya mas tao friendly na basahin ang. 228 00:13:52,900 --> 00:13:55,140 Ngunit iyon lamang ang kung ano talaga ang nangyayari sa ilalim ng hood; 229 00:13:55,140 --> 00:13:58,190 x ay isang address, hindi isang array, per se. 230 00:13:58,190 --> 00:14:02,410 Kaya ito ay ang pag-iimbak ng 0 sa lokasyon 10 sa x. 231 00:14:02,410 --> 00:14:06,120 Bakit ito masama? Oo? 232 00:14:06,120 --> 00:14:17,370 [Estudyante sagot, hindi maintindihan] Mismong. 233 00:14:17,370 --> 00:14:21,100 Inilalaan lamang namin sampung ints, ngunit umaasa kami mula 0 kapag programa sa C, 234 00:14:21,100 --> 00:14:25,690 kaya mayroon kang access 0 1 2 3 4 5 6 7 8 9, ngunit hindi 10. 235 00:14:25,690 --> 00:14:30,270 Kaya ang programa ay pagpunta sa seg kasalanan o hindi. 236 00:14:30,270 --> 00:14:32,900 Ngunit hindi pa namin talaga alam, ito ay uri ng nondeterministic pag-uugali. 237 00:14:32,900 --> 00:14:35,600 Ito talagang depende sa kung makuha namin masuwerteng. 238 00:14:35,600 --> 00:14:40,650 Kung ito ay lumiliko out na ang mga operating system ay hindi tututol kung gagamitin ko na ang dagdag na byte, 239 00:14:40,650 --> 00:14:43,360 kahit na hindi ito ay ibinigay ito sa akin, ang aking programa ay hindi maaaring pag-crash ng. 240 00:14:43,360 --> 00:14:46,780 Ito raw, maraming surot, ngunit hindi mo maaaring makita na sintomas, 241 00:14:46,780 --> 00:14:48,960 o maaari mong makita ang mga ito nang isang beses lamang sa isang habang. 242 00:14:48,960 --> 00:14:51,230 Ngunit ang katotohanan ay na ang bug ay, sa katunayan, may. 243 00:14:51,230 --> 00:14:54,320 At talagang problemang kung ikaw ay nakasulat sa isang programa na nais mong tama, 244 00:14:54,320 --> 00:14:58,840 na iyong ibinebenta ang program na ginagamit ng mga tao ang bawat isang beses sa isang habang nagka-crash 245 00:14:58,840 --> 00:15:02,450 dahil, siyempre, ito ay hindi maganda. Sa katunayan, kung mayroon kang isang Android phone o isang iPhone 246 00:15:02,450 --> 00:15:05,550 at mong i-download ang apps mga araw na ito, kung sakaling mo ay nagkaroon ng isang app lang mag-quit, 247 00:15:05,550 --> 00:15:10,040 ang lahat ng isang biglaang ito mawala, na halos palaging resulta ng ilang mga isyu na nauugnay sa memory, 248 00:15:10,040 --> 00:15:12,830 kung saan programmer screwed up at dereferenced pointer 249 00:15:12,830 --> 00:15:18,670 na siya o hindi siya dapat magkaroon, at ang mga resulta ng iOS o Android pumatay lamang ang programa sa kabuuan 250 00:15:18,670 --> 00:15:23,080 kaysa sa panganib hindi natukoy na pag-uugali o ilang mga uri ng kompromiso sa seguridad. 251 00:15:23,080 --> 00:15:25,950 >> May isa pang bug sa programang ito bukod sa isang ito. 252 00:15:25,950 --> 00:15:30,180 Ano pa ko screwed sa programang ito? 253 00:15:30,180 --> 00:15:32,740 Hindi ko na ensayado kung ano ang ko na ipinangaral. Oo? 254 00:15:32,740 --> 00:15:34,760 [Estudyante sagot, hindi maintindihan] Magandang. 255 00:15:34,760 --> 00:15:36,880 Hindi ko pa napalaya ang memory. Kaya ang pamantayan ngayon 256 00:15:36,880 --> 00:15:43,150 na anumang oras tumawag ka malloc, dapat mong tawagan ang libreng kapag tapos ka na gamit na memory. 257 00:15:43,150 --> 00:15:45,610 Ngayon, kapag Gusto ko nais upang magbakante ito memory? 258 00:15:45,610 --> 00:15:49,780 Marahil, ipagpalagay na ang unang linya na ito ay tama, Gusto ko nais na gawin ito dito. 259 00:15:49,780 --> 00:15:55,710 Dahil hindi ako, halimbawa, gawin ito dito. Bakit? 260 00:15:55,710 --> 00:15:57,860 Lamang sa labas ng saklaw. Kaya kahit pinag-uusapan natin ang tungkol sa mga payo, 261 00:15:57,860 --> 00:16:04,830 ito ay isang linggo 2 o 3 isyu, kung saan ang x ay lamang sa saklaw sa loob ng kulot tirante na kung saan ito ay ipinahayag. 262 00:16:04,830 --> 00:16:11,000 Kaya talagang hindi maaaring magbakante doon. Aking lamang pagkakataon upang magbakante ito ay halos pagkatapos linya 21. 263 00:16:11,000 --> 00:16:15,170 Ito ay isang medyo simpleng programa; ito ay medyo madali sa sandaling uri ng balot ang iyong isip 264 00:16:15,170 --> 00:16:17,870 sa paligid ng kung ano ang programa ng paggawa, kung saan ang mga pagkakamali ay. 265 00:16:17,870 --> 00:16:20,500 At kahit na hindi mo makita ang mga ito sa unang, sana ito ng kaunti halata ngayon 266 00:16:20,500 --> 00:16:23,870 na ang mga pagkakamali na ito ay medyo madaling malutas at madaling ginawa. 267 00:16:23,870 --> 00:16:28,720 Ngunit kapag ang isang programa ay higit sa 12 linya ang haba, 50 linya mahaba, 100 linya ang haba, 268 00:16:28,720 --> 00:16:31,150 paglalakad sa pamamagitan ng iyong linya ng code sa pamamagitan ng linya, iniisip lohikal na sa pamamagitan nito, 269 00:16:31,150 --> 00:16:35,110 ay posible ngunit hindi partikular na masaya na gawin, patuloy na naghahanap para sa mga bug, 270 00:16:35,110 --> 00:16:38,340 at ito ay din mahirap gawin, at na kung bakit umiiral ang isang tool tulad ng Valgrind. 271 00:16:38,340 --> 00:16:40,900 Hayaan akong magpatuloy at gawin ito: hayaan mo akong buksan ang aking terminal na window, 272 00:16:40,900 --> 00:16:45,400 at ipaalam sa akin hindi lamang magpatakbo ng memorya, dahil memorya ay tila na maging fine. 273 00:16:45,400 --> 00:16:49,180 Nakakakuha ako ng masuwerteng. Pagpunta sa na ang karagdagang mga byte sa dulo ng array 274 00:16:49,180 --> 00:16:51,060 ay hindi mukhang masyadong problema. 275 00:16:51,060 --> 00:16:56,370 Ngunit ipaalam sa akin, gayunman, katinuan check, kung saan ay nangangahulugan lamang upang suriin 276 00:16:56,370 --> 00:16:58,320 man o hindi ito ay talagang tama. 277 00:16:58,320 --> 00:17:04,690 >> Kaya sabihin gawin valgrind-v - mahayag-check = buong, 278 00:17:04,690 --> 00:17:07,520 at pagkatapos ay ang pangalan ng programa sa kasong ito ay memory, hindi a.out. 279 00:17:07,520 --> 00:17:10,760 Kaya hayaan mo akong magpatuloy at gawin ito. Pindutin ang Enter. 280 00:17:10,760 --> 00:17:14,109 Minamahal naming Diyos. Ito ay ang output nito, at ito ay kung ano ang ko alluded sa mas maaga. 281 00:17:14,109 --> 00:17:17,550 Ngunit, kung matuto mong basahin ang lahat ng bagay na walang kapararakan dito, 282 00:17:17,550 --> 00:17:20,760 karamihan sa mga ito ay lamang diagnostic output na hindi na kawili-wili. 283 00:17:20,760 --> 00:17:24,829 Ano ang iyong mata ay talagang nais na hinahanap anumang pagbanggit ng error o di-wasto. 284 00:17:24,829 --> 00:17:26,800 Salita na iminumungkahi ng mga problema. 285 00:17:26,800 --> 00:17:29,340 At sa katunayan, sabihin makita kung ano ang nangyayari maling pababa dito. 286 00:17:29,340 --> 00:17:35,230 Mayroon akong isang buod ng mga uri, "sa paggamit sa exit: 40 bytes sa 1 bloke" 287 00:17:35,230 --> 00:17:38,750 Hindi ako talagang sigurado kung ano ang bloke ng pa, ngunit 40 bytes 288 00:17:38,750 --> 00:17:41,260 aktwal na nararamdaman tulad ko maaaring malaman kung saan na nagmumula. 289 00:17:41,260 --> 00:17:45,030 40 bytes. Bakit 40 bytes sa paggamit sa exit? 290 00:17:45,030 --> 00:17:48,780 At higit na partikular, kung mag-scroll pababa namin dito, 291 00:17:48,780 --> 00:17:54,520 bakit ako siguradong nawala 40 bytes? Oo? 292 00:17:54,520 --> 00:17:59,520 [Estudyante sagot, hindi maintindihan] Perpekto. Oo, eksakto. 293 00:17:59,520 --> 00:18:03,540 Mayroong sampung integer, at sa bawat isa ng mga laki ng 4, o 32 bit, 294 00:18:03,540 --> 00:18:08,300 kaya nawala ko ang tiyak 40 bytes dahil, bilang iminungkahi, hindi ko na tinatawag na libreng. 295 00:18:08,300 --> 00:18:13,460 Iyon ay isang bug, at ngayon tingnan natin ang isang maliit na karagdagang at makita sa tabi ito, 296 00:18:13,460 --> 00:18:16,900 "Di-wasto ang sumulat ng laki 4." Ngayon kung ano ito? 297 00:18:16,900 --> 00:18:21,150 Address na ito ay ipinahayag kung ano ang base notation, tila? 298 00:18:21,150 --> 00:18:23,640 Ito ay hexadecimal, at anumang oras nakakita ka ng isang numero na nagsisimula sa 0x, 299 00:18:23,640 --> 00:18:29,410 ito ay nangangahulugan na hexadecimal, na ginawa namin ang paraan pabalik sa, tingin ko, pset 0 seksyon ng mga tanong, 300 00:18:29,410 --> 00:18:34,090 na lang gawin isang warmup ehersisyo, na-convert ng decimal sa hex sa binary at iba pa. 301 00:18:34,090 --> 00:18:39,220 Hexadecimal, sa pamamagitan ng tao na convention, ay karaniwang ginagamit upang kumatawan payo 302 00:18:39,220 --> 00:18:41,570 o, mas pangkalahatan, address. Lang ng convention, 303 00:18:41,570 --> 00:18:45,340 dahil ito ay isang maliit na mas madaling basahin, ito ay isang maliit na mas compact kaysa sa isang bagay tulad ng decimal, 304 00:18:45,340 --> 00:18:47,720 at binary ay walang silbi para sa karamihan ng mga tao upang gamitin. 305 00:18:47,720 --> 00:18:50,840 Kaya ngayon kung ano ang ibig sabihin nito? Well, mukhang may isang di-wastong write 306 00:18:50,840 --> 00:18:54,480 ng laki 4 sa linya 21 ng memory.c. 307 00:18:54,480 --> 00:18:59,180 Kaya sabihin bumalik sa linya 21, at sa katunayan, dito ay ang mga di-wastong write. 308 00:18:59,180 --> 00:19:02,640 Kaya Valgrind ay hindi ganap na hawakan ang aking kamay at sabihin sa akin kung ano ang fix ang, 309 00:19:02,640 --> 00:19:05,520 ngunit ito ay paghanap na ako paggawa ng di-wastong write. 310 00:19:05,520 --> 00:19:08,800 Ako pagpindot 4 bytes na hindi ko dapat na, at tila na dahil, 311 00:19:08,800 --> 00:19:13,960 habang ikaw ay tulis out, ako ginagawa [10] sa halip na [9] maximally 312 00:19:13,960 --> 00:19:16,660 o [0] o isang bagay sa pagitan. 313 00:19:16,660 --> 00:19:19,690 Sa Valgrind, Napagtanto anumang oras ngayon sumusulat ka ng isang programa 314 00:19:19,690 --> 00:19:24,190 na gumagamit ng mga payo at gumagamit ng memory, at malloc higit na partikular, 315 00:19:24,190 --> 00:19:27,080 talagang makakuha sa ang ugali ng tumatakbo ito mahaba 316 00:19:27,080 --> 00:19:30,890 ngunit napaka madaling kopyahin at ilagay ang utos ng Valgrind 317 00:19:30,890 --> 00:19:32,650 upang makita kung mayroong ilang mga error sa doon. 318 00:19:32,650 --> 00:19:34,820 At ito ay napakalaki sa bawat oras na makita mo ang output, 319 00:19:34,820 --> 00:19:39,430 ngunit lamang parse sa pamamagitan ng biswal lahat ng output at makita kung makakita ka pagbanggit ng mga error 320 00:19:39,430 --> 00:19:43,190 o babala o di-wasto o mawawala. 321 00:19:43,190 --> 00:19:46,200 Anumang mga salita na tunog tulad mo screwed up sa isang lugar. 322 00:19:46,200 --> 00:19:48,580 Kaya Napag-alaman na ang isang bagong tool sa iyong toolkit. 323 00:19:48,580 --> 00:19:51,270 >> Ngayon sa Monday, nagkaroon kami ang maramihang mga tao ang dumating dito 324 00:19:51,270 --> 00:19:53,150 at kumatawan sa paniwala ng isang naka-link na listahan. 325 00:19:53,150 --> 00:20:00,970 At ipinakilala namin ang naka-link na listahan bilang isang solusyon sa kung ano ang problema? 326 00:20:00,970 --> 00:20:04,590 Oo? [Estudyante sagot, hindi maintindihan] Magandang. 327 00:20:04,590 --> 00:20:06,530 Array ay hindi maaaring magkaroon ng memory naidagdag sa kanila. 328 00:20:06,530 --> 00:20:09,440 Kung maglaan ka ng isang hanay ng mga laki 10, na ang lahat makakuha ka. 329 00:20:09,440 --> 00:20:13,690 Maaari mong tawagan ang isang katangian tulad realloc kung una mong tinatawag malloc, 330 00:20:13,690 --> 00:20:17,580 at na maaaring subukan upang palaguin ang array kung may puwang patungo sa dulo ng 331 00:20:17,580 --> 00:20:21,610 na walang pang gumagamit, at kung mayroong hindi, ito lang mahanap ka ng mas malaking tipak sa ibang lugar. 332 00:20:21,610 --> 00:20:25,040 Ngunit ito ay kopyahin ang lahat ng mga byte sa bagong array. 333 00:20:25,040 --> 00:20:28,310 Ito tunog tulad ng isang tamang solusyon. 334 00:20:28,310 --> 00:20:34,790 Bakit ito hindi nakaaakit? 335 00:20:34,790 --> 00:20:36,940 Ibig kong sabihin ito gumagana, ang mga tao na malutas ang problemang ito. 336 00:20:36,940 --> 00:20:40,710 Bakit kailangan namin upang malutas ito sa Lunes na may mga naka-link na listahan? Oo? 337 00:20:40,710 --> 00:20:44,060 [Estudyante sagot, hindi maintindihan] Maaaring magtagal. 338 00:20:44,060 --> 00:20:49,260 Sa katunayan, anumang oras sa pagtawag ka malloc o realloc o calloc, na pa isa pa, 339 00:20:49,260 --> 00:20:52,470 anumang oras, ang program, pakikipag-usap sa operating system, 340 00:20:52,470 --> 00:20:54,310 malamang ka upang mapabagal ang program. 341 00:20:54,310 --> 00:20:57,470 At kung gumagawa ka ng mga ganitong uri ng mga bagay sa mga loop, ikaw talaga ay pagbagal bagay. 342 00:20:57,470 --> 00:21:00,740 Hindi ka pagpunta upang mapansin ito para sa pinakasimpleng ng "hoy mundo" na mga programa uri, 343 00:21:00,740 --> 00:21:04,300 ngunit sa mas malaking programa, na humihiling sa operating system na muli at muli para sa memory 344 00:21:04,300 --> 00:21:07,520 o pagbibigay ito muli at muli ay may kaugaliang hindi upang maging isang magandang bagay. 345 00:21:07,520 --> 00:21:11,210 Plus, ito ay uri ng intellectually - ito ay isang kumpletong basura ng oras. 346 00:21:11,210 --> 00:21:16,490 Bakit magtalaga ng higit pa at higit pa memory, panganib ng pagkopya ng lahat sa bagong array, 347 00:21:16,490 --> 00:21:21,980 kung mayroon kang isang alternatibong na hinahayaan maglaan ka lamang ng mas maraming memorya bilang iyong aktwal na kailangan? 348 00:21:21,980 --> 00:21:24,130 Kaya may mga plus at minuses in dito. 349 00:21:24,130 --> 00:21:26,730 Isa ng ang plus na ngayon ay mayroon kaming dynamism. 350 00:21:26,730 --> 00:21:29,100 Hindi mahalaga kung saan ang mga chunks ng memory na libre, 351 00:21:29,100 --> 00:21:32,070 Maaari ko lang ayusin ng lumikha ng mga crumbs ng tinapay sa pamamagitan ng mga payo 352 00:21:32,070 --> 00:21:34,470 string aking buong naka-link na listahan. 353 00:21:34,470 --> 00:21:36,470 Ngunit magbayad ako ng hindi bababa sa isang presyo. 354 00:21:36,470 --> 00:21:40,060 >> Ano ang gagawin ko upang bigyan sa pagkakaroon ng mga naka-link na listahan? 355 00:21:40,060 --> 00:21:42,470 Oo? [Estudyante sagot, hindi maintindihan] Magandang. 356 00:21:42,470 --> 00:21:45,650 Kailangan mo ng karagdagang memorya. Ngayon ay kailangan ko ng espasyo para sa mga payo, 357 00:21:45,650 --> 00:21:47,900 at sa kaso ng mga ito sobrang simple na naka-link listahan 358 00:21:47,900 --> 00:21:51,410 na lamang sinusubukan upang mag-imbak ng mga integer, na 4 bytes, panatilihin namin sinasabi 359 00:21:51,410 --> 00:21:54,240 na rin, ang pointer ng 4 bytes, kaya ngayon literal ko Dinoble 360 00:21:54,240 --> 00:21:57,290 ang halaga ng memory kailangan ko lang-imbak sa listahang ito. 361 00:21:57,290 --> 00:21:59,680 Ngunit muli, ito ay isang patuloy na tradeoff sa computer science 362 00:21:59,680 --> 00:22:03,440 sa pagitan ng oras at space at pag-unlad, pagsusumikap at iba pang mga mapagkukunan. 363 00:22:03,440 --> 00:22:06,630 Ano ang isa pang downside ng paggamit ng isang naka-link na listahan? Oo? 364 00:22:06,630 --> 00:22:10,150 [Estudyante sagot, hindi maintindihan] 365 00:22:10,150 --> 00:22:12,600 Mabuti. Hindi bilang madaling i-access. Aming makakaya na pakikinabangan 366 00:22:12,600 --> 00:22:15,530 linggo 0 prinsipyo tulad hatiin at lupigin. 367 00:22:15,530 --> 00:22:18,220 At higit na partikular, binary paghahanap. Dahil kahit kami tao 368 00:22:18,220 --> 00:22:20,400 makita ang halos kung saan sa gitna ng listahang ito, 369 00:22:20,400 --> 00:22:25,840 computer lamang alam na ito ay naka-link na listahan ay nagsisimula sa address tinatawag na unang. 370 00:22:25,840 --> 00:22:28,250 At na ang 0x123 o isang bagay tulad na. 371 00:22:28,250 --> 00:22:30,990 At ang tanging paraan sa programa hanapin ang gitnang elemento 372 00:22:30,990 --> 00:22:33,350 ay sa aktwal na hanapin ang buong listahan. 373 00:22:33,350 --> 00:22:35,500 At kahit pagkatapos, literal upang maghanap sa buong listahan dahil 374 00:22:35,500 --> 00:22:38,950 kahit na sa sandaling naabot mo na ang gitnang elemento sa pamamagitan ng pagsunod sa mga payo, 375 00:22:38,950 --> 00:22:42,380 mo, ang programa, walang ideya kung gaano katagal ang listahang ito ay, potensyal, 376 00:22:42,380 --> 00:22:45,250 hanggang maabot ang dulo nito, at kung paano alam mo sa programa 377 00:22:45,250 --> 00:22:48,600 na ikaw ay sa dulo ng isang naka-link na listahan? 378 00:22:48,600 --> 00:22:51,120 May isang espesyal null pointer, kaya muli, isang convention. 379 00:22:51,120 --> 00:22:53,870 Sa halip na gamitin ito pointer, tiyak namin ay hindi gusto ang mga ito sa ilang mga halaga ng basura 380 00:22:53,870 --> 00:22:57,750 pagturo off ang yugto sa isang lugar, gusto naming ito sa kamay, null, 381 00:22:57,750 --> 00:23:01,530 kaya mayroon kaming ang terminal na ito sa istraktura ng data na ito upang malaman namin kung saan ito nagtatapos. 382 00:23:01,530 --> 00:23:03,410 >> Ano kung gusto namin upang manipulahin ito? 383 00:23:03,410 --> 00:23:05,980 Ginawa namin karamihan ng ito biswal, at sa mga tao, 384 00:23:05,980 --> 00:23:07,630 ngunit kung ano kung gusto naming gawin ang isang pagpapasok ng? 385 00:23:07,630 --> 00:23:12,360 Kaya ang orihinal na listahan ay 9, 17, 20, 22, 29, 34. 386 00:23:12,360 --> 00:23:16,730 Paano kung gusto namin pagkatapos sa malloc espasyo para sa bilang 55, node para dito, 387 00:23:16,730 --> 00:23:20,730 at pagkatapos ay gusto naming upang ipasok ang 55 sa listahan tulad ng ginawa namin sa Lunes? 388 00:23:20,730 --> 00:23:23,690 Paano namin gawin ito? Well, Anita dumating up at mahalagang lumakad siya sa listahan. 389 00:23:23,690 --> 00:23:27,500 Siya ay nagsimula sa unang elemento, pagkatapos ay sa susunod, sa susunod, sa susunod, sa susunod, sa susunod. 390 00:23:27,500 --> 00:23:29,500 Panghuli pindutin ang kaliwang lahat ang paraan down 391 00:23:29,500 --> 00:23:34,480 at natanto oh, ito ay null. Kaya kung ano ang pointer pagmamanipula kailangan gawin? 392 00:23:34,480 --> 00:23:37,980 Ang taong sa dulo, bilang 34, kailangan ang kanyang kaliwang itinaas 393 00:23:37,980 --> 00:23:46,220 upang ituro sa 55, 55 kailangan kanilang kaliwang braso na nakaturo pababa sa bagong null Terminator. Tapos na. 394 00:23:46,220 --> 00:23:49,540 Medyo madali upang ipasok 55 sa isang pinagsunod-sunod na listahan. 395 00:23:49,540 --> 00:23:51,800 At kung paano ito tumingin? 396 00:23:51,800 --> 00:23:55,690 >> Hayaan akong sige at buksan ang ilang mga halimbawa ng code dito. 397 00:23:55,690 --> 00:23:58,120 Kukunin ko na buksan gedit, at hayaan mo akong magbukas ng dalawang mga file muna. 398 00:23:58,120 --> 00:24:02,050 Isa ay list1.h, at ipaalam sa akin lamang ipaalala na ito ay tipak ng code 399 00:24:02,050 --> 00:24:04,920 na aming ginamit upang kumatawan sa isang node. 400 00:24:04,920 --> 00:24:13,040 Ang isang node ay parehong isang int tinatawag n at pointer na tinatawag na susunod na lang puntos sa susunod na bagay sa listahan. 401 00:24:13,040 --> 00:24:15,450 Na ngayon ang isang file na. H. Bakit? 402 00:24:15,450 --> 00:24:19,090 May convention na ito, at hindi namin kinuha ang bentahe ng ito sa isang malaking halaga ating sarili, 403 00:24:19,090 --> 00:24:22,220 ngunit ang mga tao na sinulat ni printf at iba pang mga function 404 00:24:22,220 --> 00:24:27,150 ibinigay bilang isang regalo sa mundo ang lahat ng mga function sa pamamagitan ng pagsusulat ng isang file na tinatawag na stdio.h. 405 00:24:27,150 --> 00:24:30,950 At pagkatapos ay may string.h, at pagkatapos ay may map.h, at mayroong lahat ng mga h file 406 00:24:30,950 --> 00:24:34,410 na maaari mong nakikita o na ginamit sa panahon ng termino na isinulat ng mga ibang tao. 407 00:24:34,410 --> 00:24:38,470 Karaniwan sa mga h file lamang na mga bagay tulad ng mga typedefs 408 00:24:38,470 --> 00:24:42,310 o pagdeklara ng mga pasadyang uri o pagdeklara ng constants. 409 00:24:42,310 --> 00:24:47,890 Hindi mo ilagay ang function 'pagpapatupad sa mga file ng header. 410 00:24:47,890 --> 00:24:50,570 Mong ilagay, sa halip, lamang ang kanilang modelo. 411 00:24:50,570 --> 00:24:53,050 Ikaw ang maglalagay ng mga bagay na nais mong ibahagi sa mundo kung ano ang kailangan nila 412 00:24:53,050 --> 00:24:55,640 upang makatipon ng kanilang code. Kaya lamang upang makakuha ng sa ito ugali, 413 00:24:55,640 --> 00:24:59,110 napagpasyahan naming gawin ang parehong bagay. Walang mas sa list1.h, 414 00:24:59,110 --> 00:25:02,070 ngunit namin na ilagay ang isang bagay na maaaring ng interes sa mga tao sa mundo 415 00:25:02,070 --> 00:25:05,030 na nais na gamitin ang aming naka-link na listahan ng pagpapatupad. 416 00:25:05,030 --> 00:25:08,040 Ngayon, sa list1.c, hindi ako ay pumunta sa pamamagitan ng buong bagay 417 00:25:08,040 --> 00:25:11,390 dahil ito ay isang bit mahaba, ang programang ito, ngunit sabihin patakbuhin ito real mabilis sa prompt. 418 00:25:11,390 --> 00:25:15,720 Ipaalam sa akin makatipon List1, ipaalam sa akin pagkatapos patakbuhin List1, at kung ano ang makikita mo ay 419 00:25:15,720 --> 00:25:18,070 na namin simulate ng isang simpleng maliit na programa dito 420 00:25:18,070 --> 00:25:20,990 na pagpunta upang payagan ang sa akin upang magdagdag at alisin ang mga numero sa isang listahan. 421 00:25:20,990 --> 00:25:24,310 Kaya hayaan mo akong magpatuloy at i-type ang 3 para sa mga pagpipilian sa menu ng 3. 422 00:25:24,310 --> 00:25:27,880 Gusto kong ipasok ang numero - sabihin gawin ang unang numero, kung saan ay 9, 423 00:25:27,880 --> 00:25:30,550 at ngayon ako sinabi sa listahan na ngayon 9. 424 00:25:30,550 --> 00:25:33,760 Hayaan akong magpatuloy at gawin ang isa pang pagpapasok ng, kaya ko maabot ang opsyon sa menu 3. 425 00:25:33,760 --> 00:25:36,760 Ano ang numero ang gusto kong isingit? 17. 426 00:25:36,760 --> 00:25:39,220 Enter. At makikita ko lamang isa pang. 427 00:25:39,220 --> 00:25:41,720 Hayaan akong ipasok ang numero 22. 428 00:25:41,720 --> 00:25:45,850 Kaya namin ang Beginnings ng naka-link na listahan na nagkaroon kami sa slide anyo ng ilang sandali ang nakalipas. 429 00:25:45,850 --> 00:25:48,740 Paano ang pagpapasok ng ito aktwal na nangyayari? 430 00:25:48,740 --> 00:25:52,000 Sa katunayan, 22 na ngayon sa dulo ng listahan. 431 00:25:52,000 --> 00:25:55,050 Kaya ang kuwento sinabi namin sa yugto sa Lunes at recapped ngayon lang 432 00:25:55,050 --> 00:25:57,460 dapat aktwal na nangyayari sa code. 433 00:25:57,460 --> 00:25:59,700 Natin tingnan. Hayaan ang mag-scroll pababa sa akin sa file na ito. 434 00:25:59,700 --> 00:26:01,720 Susubukan naming pagtakpan ang ilan sa mga pag-andar, 435 00:26:01,720 --> 00:26:05,630 ngunit gagamitin namin down sa, sabihin nating, ang insert function na. 436 00:26:05,630 --> 00:26:11,720 >> Natin makita kung paano namin pumunta tungkol sa pagpasok ng isang bagong node sa ito naka-link na listahan. 437 00:26:11,720 --> 00:26:14,550 Kung saan ay ang listahan ng ipinahayag? Well, sabihin mag-scroll ang lahat ng mga paraan sa itaas, 438 00:26:14,550 --> 00:26:19,970 at mapansin na ang aking naka-link na listahan ay mahalagang ipinahayag bilang isang solong pointer na simula null. 439 00:26:19,970 --> 00:26:23,180 Kaya ako gamit ang isang pandaigdigang variable dito, na sa pangkalahatan namin ang ipinangaral laban 440 00:26:23,180 --> 00:26:25,280 sapagkat ito ay gumagawa ng iyong code ng kaunti magulo upang mapanatili, 441 00:26:25,280 --> 00:26:29,080 uri ng tamad, karaniwan, ngunit hindi tamad at hindi ito mali at ito ay hindi masama 442 00:26:29,080 --> 00:26:33,660 kung ang tanging layunin ng iyong programa sa buhay ay upang gayahin ang isang naka-link na listahan. 443 00:26:33,660 --> 00:26:35,460 Na kung saan ay eksakto kung ano ang ginagawa namin. 444 00:26:35,460 --> 00:26:39,100 Kaya sa halip na idedeklara ito sa pangunahing at pagkatapos ay upang pumasa ito sa bawat function na 445 00:26:39,100 --> 00:26:42,640 namin ang nakasulat sa programang ito, Napagtanto namin sa halip oh, sabihin lamang gawin ito pandaigdigang 446 00:26:42,640 --> 00:26:47,060 dahil ang buong layunin ng programang ito ay upang ipakita ang isa at isa lamang na naka-link listahan. 447 00:26:47,060 --> 00:26:50,700 Kaya na nararamdaman okay. Narito ang aking mga modelo, at hindi namin ay pumunta sa pamamagitan ng lahat ng ito, 448 00:26:50,700 --> 00:26:55,800 ngunit ako ay sinulat ni isang tanggalin ang function, mahanap ang function, isang ipasok ang function na, at pagbagtas function na. 449 00:26:55,800 --> 00:26:59,080 Ngunit sabihin ngayon bumalik pababa upang ipasok ang pag-andar 450 00:26:59,080 --> 00:27:01,490 at makita kung paano ang isang ito gumagana dito. 451 00:27:01,490 --> 00:27:09,940 Ipasok sa linya - dito kami. 452 00:27:09,940 --> 00:27:12,850 Ipasok ang. Kaya hindi ito gumawa ng anumang argumento, dahil kami ay pagpunta sa hilingin 453 00:27:12,850 --> 00:27:15,930 ng gumagamit sa loob ng ang function na ito para sa bilang na nais nilang upang ipasok. 454 00:27:15,930 --> 00:27:19,410 Ngunit una, hinahanda namin upang bigyan ang mga ito ng ilang espasyo. 455 00:27:19,410 --> 00:27:22,050 Ito ay uri ng kopyahin at i-paste mula sa iba pang mga halimbawa. 456 00:27:22,050 --> 00:27:25,110 Sa kasong iyon, tayo ay paglaan ng isang int; oras na ito namin ang paglaan ng node. 457 00:27:25,110 --> 00:27:27,910 Hindi ko talagang tandaan kung gaano karaming mga byte node, ngunit na fine. 458 00:27:27,910 --> 00:27:30,460 Maaaring malaman ng Sizeof na para sa akin. 459 00:27:30,460 --> 00:27:33,340 At bakit ako check para sa null sa linya 120? 460 00:27:33,340 --> 00:27:37,530 Ano ang maaaring pumunta mali sa linya 119? Oo? 461 00:27:37,530 --> 00:27:40,530 [Estudyante sagot, hindi maintindihan] 462 00:27:40,530 --> 00:27:43,440 Mabuti. Lamang ay maaaring ang kaso na tatanungin ko na para sa masyadong maraming memorya 463 00:27:43,440 --> 00:27:47,020 o isang bagay na mali at operating system ay hindi sapat na bytes ninyo ako, 464 00:27:47,020 --> 00:27:50,640 kaya signal ng mas maraming sa pamamagitan ng pagbalik null, at kung hindi ko check para sa 465 00:27:50,640 --> 00:27:54,710 at ko lang nang walang taros magpatuloy upang gamitin ang address ibinalik, maaari itong maging null. 466 00:27:54,710 --> 00:27:58,400 Ito ay maaaring maging ng ilang hindi kilalang halaga; hindi isang magandang bagay maliban kung ko - 467 00:27:58,400 --> 00:28:00,590 aktwal na ay hindi isang hindi kilalang halaga. Ito ay maaaring maging null, kaya hindi ko nais 468 00:28:00,590 --> 00:28:02,550 upang abusuhin ito at ipagsapalaran dereferencing ito. 469 00:28:02,550 --> 00:28:07,410 Kung nangyari iyon, ko lang bumalik at kami na magpanggap tulad ng hindi ako makabalik anumang memorya sa lahat. 470 00:28:07,410 --> 00:28:12,270 >> Kung hindi man, sabihin ko ang user ninyo akong bigyan ng numero upang ipasok, tumawag ako aming lumang kaibigan GetInt, 471 00:28:12,270 --> 00:28:15,530 at pagkatapos ito ay ang bagong syntax ipinakilala namin sa Lunes. 472 00:28:15,530 --> 00:28:20,320 'Newptr-> n' ay nangangahulugan na ang address na ikaw ay ibinigay sa pamamagitan ng malloc 473 00:28:20,320 --> 00:28:23,490 na kumakatawan sa unang byte ng isang bagong bagay node, 474 00:28:23,490 --> 00:28:26,860 at pagkatapos ay pumunta sa patlang na tinatawag n. 475 00:28:26,860 --> 00:28:35,270 Ang isang maliit na mga bagay na walang kabuluhan tanong: Ito ay katumbas sa kung ano ang higit pa misteriyoso linya ng code? 476 00:28:35,270 --> 00:28:38,110 Paano pa ang maaari kong nakasulat na ito? Nais mo bang gumawa ng isang ulos? 477 00:28:38,110 --> 00:28:41,480 [Estudyante sagot, hindi maintindihan] 478 00:28:41,480 --> 00:28:44,870 Mabuti. Paggamit ng n, ngunit ito ay hindi pa kasing simple ng ito. 479 00:28:44,870 --> 00:28:47,090 Ano ang gagawin ko munang gawin? [Estudyante sagot, hindi maintindihan] 480 00:28:47,090 --> 00:28:52,730 Mabuti. Kailangan kong gawin * newptr.n. 481 00:28:52,730 --> 00:28:55,610 Kaya ito ay sinasabi ng bagong pointer malinaw naman ng isang address. Bakit? 482 00:28:55,610 --> 00:28:59,520 Dahil ito ay ibinalik ng malloc. Ang * newptr nagsasabing "pumunta doon," 483 00:28:59,520 --> 00:29:02,970 at pagkatapos ay sa sandaling nandoon ka, maaari mong gamitin ang mas pamilyar. n, 484 00:29:02,970 --> 00:29:05,730 ngunit ito lamang hitsura ng kaunti pangit, lalo na kung namin tao ay pagpunta sa 485 00:29:05,730 --> 00:29:10,360 gumuhit ng mga payo na may mga arrow sa lahat ng oras; mundo ay may Standardized sa arrow pagtatanda na ito, 486 00:29:10,360 --> 00:29:12,320 na ang eksaktong parehong bagay. 487 00:29:12,320 --> 00:29:16,070 Kaya mo lamang gamitin ang -> notation kapag ang mga bagay sa kaliwa ay isang pointer. 488 00:29:16,070 --> 00:29:18,790 Kung hindi man, kung ito ay isang aktwal na struct, gamitin ang. N. 489 00:29:18,790 --> 00:29:25,800 At pagkatapos ay ito: Bakit ko initialize ang newptr-> susunod sa Null? 490 00:29:25,800 --> 00:29:28,610 Hindi namin gusto ang nakalawit kaliwang kamay off ng dulo ng entablado. 491 00:29:28,610 --> 00:29:31,630 Gusto naming pagturo tuwid pababa, na nangangahulugan na ang dulo ng listahang ito 492 00:29:31,630 --> 00:29:34,980 maaaring potensyal sa node, kaya mas mahusay naming tiyakin na ito ay null. 493 00:29:34,980 --> 00:29:38,460 At, sa pangkalahatan, Sinisimulan ang iyong mga variable o ang iyong data ng mga miyembro at structs 494 00:29:38,460 --> 00:29:40,470 sa isang bagay lamang ang mahusay na kasanayan. 495 00:29:40,470 --> 00:29:45,170 Lamang pagpapaalam ng basura umiiral at patuloy na umiiral sa pangkalahatan ay nakakakuha ka sa pag- 496 00:29:45,170 --> 00:29:48,650 kung nakalimutan mo na gawin ang isang bagay sa susunod. 497 00:29:48,650 --> 00:29:51,590 >> Narito ang ilang mga kaso. Ito, muli, ang insert function na, 498 00:29:51,590 --> 00:29:54,930 at ang unang bagay na check ko para sa ay kung ang variable ang tinatawag na unang, 499 00:29:54,930 --> 00:29:58,240 na global variable ay null, ibig sabihin ay hindi naka-link na listahan. 500 00:29:58,240 --> 00:30:02,460 Hindi namin ipinasok ang anumang mga numero, kaya trivia sa isingit ang kasalukuyang numero 501 00:30:02,460 --> 00:30:05,240 sa listahan, dahil ito lamang nabibilang sa simula ng listahan. 502 00:30:05,240 --> 00:30:08,100 Kaya ito ay kapag Anita ay lamang nakatayo dito nag-iisa, nagpapanggap 503 00:30:08,100 --> 00:30:11,390 walang ibang tao ay dito sa entablado hanggang inilalaan namin ang isang node, 504 00:30:11,390 --> 00:30:13,940 maaaring siya itataas ang kanyang kamay sa unang pagkakataon, 505 00:30:13,940 --> 00:30:17,420 kung ang iba ay ay up sa entablado pagkatapos ng kanyang sa Lunes. 506 00:30:17,420 --> 00:30:22,900 Ngayon dito, ito ay isang maliit na check kung saan mayroon akong sasabihin kung sulit ang bagong node ng n 507 00:30:22,900 --> 00:30:27,370 00:30:29,930 ito ay nangangahulugan na may isang naka-link na listahan na nagsimula. 509 00:30:29,930 --> 00:30:32,330 May ng hindi bababa sa isang node sa listahan, ngunit ang bagong tao 510 00:30:32,330 --> 00:30:37,230 nabibilang bago ito, kaya kailangan namin upang ilipat ang mga bagay sa paligid. 511 00:30:37,230 --> 00:30:43,450 Sa ibang salita, kung ang listahan ay nagsimula sa pamamagitan lamang ng, sabihin nating, 512 00:30:43,450 --> 00:30:48,100 ang bilang 17, na ang - aktwal na, maaari naming gawin ito mas malinaw. 513 00:30:48,100 --> 00:30:56,010 Kung simulan namin ang aming mga kuwento na may isang pointer dito tinatawag na unang, 514 00:30:56,010 --> 00:30:59,870 at simula ito null, at namin ipasok ang numero 9, 515 00:30:59,870 --> 00:31:02,510 ang bilang 9 malinaw na nabibilang sa simula ng listahan. 516 00:31:02,510 --> 00:31:07,400 Kaya sabihin magpanggap na lang namin malloced address o numero ng 9 at ilagay ito dito. 517 00:31:07,400 --> 00:31:13,170 Kung ang una ay 9 sa pamamagitan ng default, ang unang sitwasyon na namin tinalakay ay nangangahulugan na natin ang puntong ito tao dito, 518 00:31:13,170 --> 00:31:15,790 iwanan ito bilang null, ngayon mayroon kaming ang bilang 9. 519 00:31:15,790 --> 00:31:18,280 Ang susunod na bilang na gusto naming upang ipasok ay 17. 520 00:31:18,280 --> 00:31:22,420 17 nabibilang sa paglipas dito, kaya kami ay pagpunta sa gawin ang ilang mga lohikal na stepping sa pamamagitan ng. 521 00:31:22,420 --> 00:31:26,060 Kaya sabihin sa halip, bago gawin namin na, sabihin magpanggap na gusto naming ipasok ang numero 8. 522 00:31:26,060 --> 00:31:28,650 >> Kaya para sa alang-alang sa kaginhawahan, ako pagpunta upang gumuhit dito. 523 00:31:28,650 --> 00:31:30,760 Ngunit tandaan, malloc Maaaring ilagay ito sa pinaka-kahit saan. 524 00:31:30,760 --> 00:31:33,460 Ngunit para sa kapakanan ng drawing, makikita ko bang ilagay ito dito. 525 00:31:33,460 --> 00:31:38,440 Kaya magpanggap lamang ko na inilalaan ng node para sa bilang 8, null na ito ay sa pamamagitan ng default. 526 00:31:38,440 --> 00:31:42,800 Ano na ngayon ay mangyayari? Ang ilang mga bagay. 527 00:31:42,800 --> 00:31:47,090 Ginawa namin ang pagkakamaling ito sa yugto sa Lunes kung saan-update namin ang isang pointer tulad nito, 528 00:31:47,090 --> 00:31:51,890 pagkatapos ay ginawa ito, at pagkatapos namin inaangkin - naulila namin lahat tao sa entablado. 529 00:31:51,890 --> 00:31:54,350 Dahil Hindi mai - ang pagkakasunud-sunod ng mga pagpapatakbo dito ay mahalaga, 530 00:31:54,350 --> 00:31:58,760 dahil na namin ngayon ang nawala ito node 9 na uri ng lumulutang sa espasyo. 531 00:31:58,760 --> 00:32:01,150 Kaya ito ay hindi ang tamang diskarte sa Lunes. 532 00:32:01,150 --> 00:32:03,330 Muna namin upang gawin ang iba pa. 533 00:32:03,330 --> 00:32:06,280 Ang estado ng mundo ay ganito ang hitsura. Una, 8 ay inilaan. 534 00:32:06,280 --> 00:32:10,550 Ano ang gusto ng isang mas mahusay na paraan ng pagpasok 8? 535 00:32:10,550 --> 00:32:14,720 Sa halip ng pag-update na ito pointer sa unang, i-update ang isang ito dito sa halip. 536 00:32:14,720 --> 00:32:17,720 Kaya kailangan namin ng isang linya ng code na ito upang i-null na character 537 00:32:17,720 --> 00:32:22,020 sa isang aktwal na pointer na pagturo sa node 9, 538 00:32:22,020 --> 00:32:27,970 at pagkatapos ay maaari naming ligtas na baguhin unang upang ituro sa tao dito. 539 00:32:27,970 --> 00:32:31,330 Ngayon kami ay may isang listahan, sa naka-link na listahan, ng dalawang elemento. 540 00:32:31,330 --> 00:32:33,580 At ano ang aktwal na hitsura dito? 541 00:32:33,580 --> 00:32:36,900 Kung titingnan namin sa code, mapansin na nagawa ko ang eksaktong na. 542 00:32:36,900 --> 00:32:41,970 Ko ang sinabi newptr, at sa kuwentong ito, newptr ay na tumuturo sa ito tao. 543 00:32:41,970 --> 00:32:45,520 >> Kaya ipaalam sa akin gumuhit ng isa pang bagay, at ang dapat kong umalis ng kaunti pa sa room para sa. 544 00:32:45,520 --> 00:32:48,540 Kaya patawarin ang mga maliliit na maliit na guhit. 545 00:32:48,540 --> 00:32:52,140 Tao na ito ay tinatawag na newptr. 546 00:32:52,140 --> 00:32:57,940 Iyon ay ang variable na ipinahayag namin ng ilang linya nang mas maaga, sa linya - sa itaas 25. 547 00:32:57,940 --> 00:33:03,430 At ito na tumuturo sa 8. Kaya kapag sinabi ko newptr-> susunod, na ibig sabihin nito ay pumunta sa struct 548 00:33:03,430 --> 00:33:07,910 na tulis sa sa pamamagitan ng newptr, kaya dito tayo ay, pumunta doon. 549 00:33:07,910 --> 00:33:13,990 Pagkatapos arrow sinasabi na makuha ang susunod na field, at pagkatapos = ang sinasabi na ilagay kung ano ang halaga doon? 550 00:33:13,990 --> 00:33:17,280 Ang halaga na sa unang; kung ano ang halaga sa unang? 551 00:33:17,280 --> 00:33:21,930 Una ay pagturo sa node na ito, kaya na nangangahulugan na dapat ngayon ituro ito sa node. 552 00:33:21,930 --> 00:33:25,660 Sa madaling salita, kung ano ang hitsura kahit na isang katawa-tawa gulo sa aking sulat-kamay, 553 00:33:25,660 --> 00:33:28,620 kung ano ang isang simpleng ideya ng paglilipat ng mga arrow sa paligid 554 00:33:28,620 --> 00:33:31,560 ibig sabihin sa code na may lamang ito isang Liner. 555 00:33:31,560 --> 00:33:38,110 Iimbak ang kung ano ang sa unang sa susunod na patlang at pagkatapos ay i-update kung ano ay aktwal na ang unang. 556 00:33:38,110 --> 00:33:40,900 Natin sige at fast-forward sa pamamagitan ng ilan sa mga ito, 557 00:33:40,900 --> 00:33:44,220 at hanapin lamang sa pagpapasok ng buntot na ito sa ngayon. 558 00:33:44,220 --> 00:33:51,210 Ipagpalagay na ako makakakuha sa punto kung saan nakita ko na ang susunod na patlang ng ilang mga node null. 559 00:33:51,210 --> 00:33:53,410 At sa puntong ito sa kuwento, isang detalye na ako glossing sa paglipas ng 560 00:33:53,410 --> 00:33:58,170 na ipinakilala ko ang pointer ng isa pang dito sa linya 142, hinalinhan pointer. 561 00:33:58,170 --> 00:34:01,320 Mahalaga, sa puntong ito sa kuwento, sa sandaling ang listahan ay nakakakuha ng mahaba, 562 00:34:01,320 --> 00:34:04,800 Ko uri ng kailangang maglakad ang mga ito gamit ang dalawang daliri dahil kung pumunta ako masyadong malayo, 563 00:34:04,800 --> 00:34:08,219 tandaan sa isang solong-haba na listahan, hindi ka maaaring pumunta paurong. 564 00:34:08,219 --> 00:34:13,659 Kaya ito ideya ng predptr ang aking kaliwang daliri, at newptr - hindi newptr. 565 00:34:13,659 --> 00:34:17,199 Isa pang pointer na dito ang aking iba pang mga daliri, at ako lamang ang uri ng paglalakad sa listahan. 566 00:34:17,199 --> 00:34:22,179 Iyon ang dahilan kung bakit na umiiral. Ngunit ipaalam ay isinasaalang-alang lamang ng isa ng ang simple kaso dito. 567 00:34:22,179 --> 00:34:26,620 Kung ang susunod na field na pointer ay null, kung ano ang lohikal na implikasyon? 568 00:34:26,620 --> 00:34:30,840 Kung ikaw ay traversing ang listahan na ito at pindutin ang null pointer? 569 00:34:30,840 --> 00:34:35,780 Ikaw sa dulo ng listahan, at kaya ang code sa pagkatapos na ikabit ang ito isang karagdagang elemento 570 00:34:35,780 --> 00:34:41,230 ang uri ng ang intuitive na node na ang susunod na pointer ay null, 571 00:34:41,230 --> 00:34:46,120 kaya ito ay kasalukuyang null, at baguhin ang mga ito, bagaman, na ang address ng bagong node. 572 00:34:46,120 --> 00:34:52,260 Kaya lamang namin ang pagguhit sa code ang arrow na iginuhit namin sa entablado sa pamamagitan ng pagtataas ng kaliwang kamay ng isang tao. 573 00:34:52,260 --> 00:34:54,070 >> At kaso na iwagayway ko ang aking mga kamay sa sa ngayon, 574 00:34:54,070 --> 00:34:58,020 dahil lang sa tingin ko madaling mawala kapag ginagawa namin ito sa ganitong uri ng kapaligiran, 575 00:34:58,020 --> 00:35:00,600 ay check para sa pagpapasok ng sa gitna ang listahan. 576 00:35:00,600 --> 00:35:03,220 Ngunit lamang intuitively, kung ano ang kailangang mangyari kung gusto mong malaman kung 577 00:35:03,220 --> 00:35:06,600 kung saan ang ilang bilang nabibilang sa gitna mo ay maglakad ito 578 00:35:06,600 --> 00:35:09,510 na may higit sa isang daliri, higit sa isang pointer, 579 00:35:09,510 --> 00:35:12,920 malaman kung saan ito ay kabilang sa pamamagitan ng checking ang elemento 00:35:15,450 > Ang kasalukuyang, at sa sandaling mahanap ka ng lugar na iyon, 581 00:35:15,450 --> 00:35:20,400 pagkatapos ay mayroon kang upang gawin ito uri ng shell laro kung saan ililipat mo ang pointer sa paligid napaka maingat. 582 00:35:20,400 --> 00:35:23,850 At sagot na iyon, kung gusto mong i-dahilan sa pamamagitan ng sa bahay sa iyong sariling, 583 00:35:23,850 --> 00:35:28,340 kahulihan babagsak lamang sa mga dalawang linya ng code, ngunit ang pagkakasunud-sunod ng mga linya ay sobrang mahalaga. 584 00:35:28,340 --> 00:35:31,390 Dahil kung mong ilagay ang kamay ng isang tao at itataas ng ibang tao sa maling pagkakasunud-sunod, 585 00:35:31,390 --> 00:35:34,580 muli, maaari mong orphaning sa listahan. 586 00:35:34,580 --> 00:35:39,500 Upang ibuod higit pa conceptually, ang pagpapasok ng sa buntot ay medyo direkta. 587 00:35:39,500 --> 00:35:42,940 Ang pagpapasok ng sa ulo ay medyo direkta, 588 00:35:42,940 --> 00:35:45,580 ngunit kailangan mong i-update ang isang karagdagang pointer sa oras na ito 589 00:35:45,580 --> 00:35:47,930 pisilin numero 5 sa listahan dito, 590 00:35:47,930 --> 00:35:51,560 at pagkatapos ay ang pagpapasok ng sa gitna ay nagsasangkot ng higit pang pagsisikap, 591 00:35:51,560 --> 00:35:56,130 napaka-maingat na ipasok ang numero ng 20 sa tamang lokasyon nito, 592 00:35:56,130 --> 00:35:58,350 na kung saan ay sa pagitan ng 17 at 22. 593 00:35:58,350 --> 00:36:02,700 Kaya kailangan mong gawin ang isang bagay tulad ng bagong node 20 point sa 22, 594 00:36:02,700 --> 00:36:08,470 at pagkatapos, ang pointer kung saan node sa Kailangang ma-update huling? 595 00:36:08,470 --> 00:36:10,630 Ito ay 17, upang aktwal na ipasok ito. 596 00:36:10,630 --> 00:36:14,080 Kaya muli, makikita ko iliban ang aktwal na code para sa partikular na pagpapatupad. 597 00:36:14,080 --> 00:36:17,280 >> Sa unang tingin, isang maliit na napakalaki, ngunit ito ay talagang isang walang-katapusang loop 598 00:36:17,280 --> 00:36:21,770 na looping, looping, looping, looping, at paglabag sa lalong madaling mo pindutin ang null pointer, 599 00:36:21,770 --> 00:36:24,590 sa puntong maaari mong gawin ang mga kinakailangang pagpapasok ng. 600 00:36:24,590 --> 00:36:30,960 Ito, pagkatapos, ay kinatawan naka-link na listahan ng code sa pagpapasok ng. 601 00:36:30,960 --> 00:36:34,590 Na uri ng ng maraming, at ito nararamdaman tulad namin na malutas ang isang problema, 602 00:36:34,590 --> 00:36:36,940 ngunit ipinakilala namin ang isang buong iba pang isa. Lantaran, namin na ginugol ang lahat ng oras na ito 603 00:36:36,940 --> 00:36:40,540 sa malaking O at Ω at tumatakbo ang oras, sinusubukan upang malutas ang mga problema mas mabilis, 604 00:36:40,540 --> 00:36:43,270 at dito ay namin ang paglalaan ng isang malaking hakbang paurong, ito nararamdaman. 605 00:36:43,270 --> 00:36:45,380 At pa, kung ang layunin ay upang mag-imbak ng data, 606 00:36:45,380 --> 00:36:48,010 ito nararamdaman tulad ng Banal na Kopita, tulad ng sinabi namin sa Monday, ay talagang hindi 607 00:36:48,010 --> 00:36:50,470 upang mag-imbak ng mga bagay agad. 608 00:36:50,470 --> 00:36:53,930 >> Sa katunayan, ipagpalagay na ginawa namin isaisantabi naka-link na listahan para sa isang sandali 609 00:36:53,930 --> 00:36:56,000 at ipinakilala namin sa halip ang paniwala ng isang table. 610 00:36:56,000 --> 00:36:59,110 At sabihin lamang-isip ng isang talahanayan para sa isang sandali bilang isang array. 611 00:36:59,110 --> 00:37:03,790 Ito array at kasong ito dito ay may ilang 26 elemento, 0 sa pamamagitan ng 25, 612 00:37:03,790 --> 00:37:07,940 at ipagpalagay na kailangan mo ng ilang mga tipak ng imbakan para sa mga pangalan: 613 00:37:07,940 --> 00:37:10,350 Alice at Bob at Charlie at katulad. 614 00:37:10,350 --> 00:37:12,880 At kailangan kang ilang mga istraktura ng data upang mag-imbak ng mga pangalan. 615 00:37:12,880 --> 00:37:15,000 Well, maaari mong gamitin ang isang bagay tulad ng isang naka-link na listahan 616 00:37:15,000 --> 00:37:20,260 at maaari kang maglakad sa listahan pagpasok Alice bago Bob at Charlie pagkatapos Bob at iba pa. 617 00:37:20,260 --> 00:37:23,850 At, sa katunayan, kung nais mong makita ang code na tulad nang bilang isang bukod, 618 00:37:23,850 --> 00:37:27,230 malaman na sa list2.h, gawin namin ang eksaktong na. 619 00:37:27,230 --> 00:37:30,610 Hindi namin pumunta sa pamamagitan ng ang code na ito, ngunit ito ay isang variant ng unang halimbawa 620 00:37:30,610 --> 00:37:34,640 na introduces ng isa pang struct nakakita kami bago tinatawag na mag-aaral, 621 00:37:34,640 --> 00:37:40,330 at pagkatapos ay kung ano ang aktwal na nag-iimbak sa naka-link na listahan ay isang pointer sa istruktura ng mag-aaral 622 00:37:40,330 --> 00:37:44,520 kaysa sa isang simpleng maliit na integer, n. 623 00:37:44,520 --> 00:37:46,900 Kaya Napagtanto may code doon na nagsasangkot ng aktwal na mga string, 624 00:37:46,900 --> 00:37:49,940 ngunit kung ang layunin sa kamay ay talagang ngayon ay upang matugunan ang problema ng kahusayan, 625 00:37:49,940 --> 00:37:53,380 hindi magiging gandang kung kami ay bibigyan ng isang bagay na tinatawag na Alice, 626 00:37:53,380 --> 00:37:56,020 gusto naming upang ilagay sa kanya sa tamang lokasyon sa isang istraktura ng data, 627 00:37:56,020 --> 00:37:58,860 ito nararamdaman tulad ng gusto ito talagang magaling sa lamang na ilagay Alice, 628 00:37:58,860 --> 00:38:01,180 na ang pangalan nagsisimula sa A, sa unang lokasyon. 629 00:38:01,180 --> 00:38:05,270 At Bob, na ang pangalan nagsisimula sa B, sa ikalawang lokasyon. 630 00:38:05,270 --> 00:38:09,580 Sa pamamagitan ng isang array, o sabihin simulan ang pagtawag sa ito ng isang table, ng hash table sa na, 631 00:38:09,580 --> 00:38:13,650 maaari naming gawin eksakto na. Kung kami ay bibigyan ng isang pangalan tulad ng Alice, 632 00:38:13,650 --> 00:38:16,700 isang string tulad Alice, kung saan inilagay mo ang A-l-i-c-e? 633 00:38:16,700 --> 00:38:20,540 Kailangan namin ang ng hueristic. Kailangan namin ang isang function tumagal ng ilang input tulad ng Alice 634 00:38:20,540 --> 00:38:24,610 at ibalik ang isang sagot, "Ilagay Alice sa lokasyon na ito." 635 00:38:24,610 --> 00:38:28,720 At ito function, ito itim na kahon, na tinatawag na hash. 636 00:38:28,720 --> 00:38:32,330 >> Isang hash ay isang bagay na tumatagal ng isang input, tulad ng "Alice", 637 00:38:32,330 --> 00:38:38,080 at babalik sa iyo, karaniwan, ang numerong lokasyon sa ilang mga istraktura ng data kung saan Alice nabibilang. 638 00:38:38,080 --> 00:38:40,830 Sa kasong ito, ang aming hash ay dapat relatibong simpleng. 639 00:38:40,830 --> 00:38:47,510 Aming hash ay dapat sabihin, kung ikaw ay binibigyan ng "Alice", kung character na dapat kong pakialam tungkol sa? 640 00:38:47,510 --> 00:38:55,660 Ang unang isa. Kaya tumingin ako sa [0], at sinasabi ko kung ang [0] na character ay A, ibalik ang bilang 0. 641 00:38:55,660 --> 00:39:01,130 Kung B, bumalik 1. Kung ito ay C, bumalik 2, at iba pa. 642 00:39:01,130 --> 00:39:05,940 Lahat ng 0 index, at na ay magpapahintulot sa akin upang ipasok ang Alice at pagkatapos Bob at pagkatapos Charlie at iba pa 643 00:39:05,940 --> 00:39:10,960 sa istraktura ng data na ito. Ngunit may problema. 644 00:39:10,960 --> 00:39:13,060 Paano kung Anita ay kahabaan muli? 645 00:39:13,060 --> 00:39:17,510 Kung saan inilalagay namin ang Anita? Kanyang pangalan,, nagsisimula sa ang titik A, 646 00:39:17,510 --> 00:39:20,330 at pakiramdam ng tulad ng ginawa naming ang isang mas mas malaking gulo sa problemang ito. 647 00:39:20,330 --> 00:39:24,380 Namin ay mayroon na ngayong agarang pagpapasok ng, pare-pareho ang pagpapasok ng oras, sa isang istraktura ng data 648 00:39:24,380 --> 00:39:27,100 kaysa sa mas masahol pa-case linear, 649 00:39:27,100 --> 00:39:29,510 ngunit kung ano ang maaari naming gawin na may Anita sa kasong ito? 650 00:39:29,510 --> 00:39:34,110 Ano ang dalawang mga pagpipilian, talagang? Oo? 651 00:39:34,110 --> 00:39:37,410 [Estudyante sagot, hindi maintindihan] Okay, sa gayon ay maaari kaming magkaroon ng isa pang dimensyon. 652 00:39:37,410 --> 00:39:42,320 Iyon ay mabuti. Upang maaari naming bumuo ng mga bagay sa 3D tulad ng usapan natin ang tungkol pasalita sa Lunes. 653 00:39:42,320 --> 00:39:46,700 Namin maaaring magdagdag ng isa pang access dito, ngunit ipagpalagay na hindi, sinusubukan ko upang panatilihin ito simpleng. 654 00:39:46,700 --> 00:39:50,160 Ang buong layunin dito ay upang agarang pare-pareho-time na access, 655 00:39:50,160 --> 00:39:52,170 sa gayon ay pagdaragdag ng labis na kumplikado. 656 00:39:52,170 --> 00:39:55,970 Ano ang iba pang mga pagpipilian kapag sinusubukan upang ipasok ang Anita sa istrakturang ito ng data? Oo? 657 00:39:55,970 --> 00:39:58,610 [Estudyante sagot, hindi maintindihan] Magandang. Kaya kami maaaring ilipat ang iba, 658 00:39:58,610 --> 00:40:03,040 tulad ng Charlie nudges pababa Bob at Alice, at pagkatapos ay inilalagay namin Anita kung saan siya talagang nais na maging. 659 00:40:03,040 --> 00:40:05,660 >> Siyempre, ngayon, mayroong isang gilid na epekto ng mga ito. 660 00:40:05,660 --> 00:40:09,000 Ang data na ito istraktura ay maaaring kapaki-pakinabang hindi dahil gusto naming magpasok ng mga tao sa sandaling 661 00:40:09,000 --> 00:40:11,250 ngunit dahil gusto naming upang suriin kung ang mga ito doon mamaya 662 00:40:11,250 --> 00:40:13,600 kung gusto naming upang i-print ang lahat ng mga pangalan sa istraktura ng data. 663 00:40:13,600 --> 00:40:15,850 Kami ay pagpunta sa gawin ang isang bagay na may data na ito kalaunan. 664 00:40:15,850 --> 00:40:20,810 Kaya ngayon na namin ang uri ng screwed sa ibabaw ng Alice, na hindi na kung saan siya ay dapat na maging. 665 00:40:20,810 --> 00:40:23,880 Nor ay Bob, ni Charlie. 666 00:40:23,880 --> 00:40:26,060 Kaya marahil ito ay hindi tulad ng isang magandang ideya. 667 00:40:26,060 --> 00:40:28,830 Ngunit sa katunayan, ito ay isang pagpipilian. Namin shift ang lahat, 668 00:40:28,830 --> 00:40:32,240 o ano ba, Anita dumating late sa laro, bakit hindi namin lamang ilagay Anita 669 00:40:32,240 --> 00:40:35,870 hindi dito, hindi dito, hindi dito, sabihin lamang na ilagay ang kanyang ng kaunti mas mababa sa listahan. 670 00:40:35,870 --> 00:40:38,680 Ngunit ang problemang ito ay nagsisimula sa malipat muli. 671 00:40:38,680 --> 00:40:41,630 Na maaaring magawa upang makahanap ng Alice agad, batay sa kanyang pangalan. 672 00:40:41,630 --> 00:40:44,320 At Bob agad, at Charlie. Ngunit pagkatapos ay tumingin para sa Anita, 673 00:40:44,320 --> 00:40:46,360 at makikita mo, Hmm, Alice ay sa paraan. 674 00:40:46,360 --> 00:40:48,770 Well, hayaan mo akong tingnan sa ibaba Alice. Bob ay hindi Anita. 675 00:40:48,770 --> 00:40:51,850 Charlie ay hindi Anita. Oh, may Anita. 676 00:40:51,850 --> 00:40:54,720 At kung patuloy na tren ng logic ang lahat ng mga paraan, 677 00:40:54,720 --> 00:41:00,690 ano ang pinakamasama-case na oras ng paggana ng paghahanap o pagpasok ng Anita sa ang bagong istraktura ng data? 678 00:41:00,690 --> 00:41:03,280 Ito ay O (n), i-right? 679 00:41:03,280 --> 00:41:06,280 Dahil sa ang pinakamasama kaso, may Alice, Bob, Charlie. . . 680 00:41:06,280 --> 00:41:10,150 ang lahat ng mga paraan pababa sa isang pinangalanang "Y", kaya mayroon lamang isang lugar na natitira. 681 00:41:10,150 --> 00:41:13,950 Thankfully, mayroon kaming tinatawag na "Z", kaya namin ilagay Anita sa pinakailalim. 682 00:41:13,950 --> 00:41:16,040 >> Hindi namin talagang malutas ang problema na. 683 00:41:16,040 --> 00:41:19,890 Kaya siguro namin kailangan upang ipakilala ang ikatlong dimensyon. 684 00:41:19,890 --> 00:41:22,230 At ito ay lumiliko out, kung namin ipakilala ito ikatlong dimensyon, 685 00:41:22,230 --> 00:41:25,240 hindi namin maaaring gawin ito perpektong, ngunit ang Banal na Kopita ay na pagkuha ng 686 00:41:25,240 --> 00:41:28,370 pare-pareho-time pagpapasok ng at dinamikong mga pagpapasok kaya 687 00:41:28,370 --> 00:41:30,960 hindi namin sa hard-code ng isang hanay ng mga laki 26. 688 00:41:30,960 --> 00:41:34,400 Maaari naming ipasok ng maraming mga pangalan tulad ng gusto namin, ngunit sabihin ang aming 5-minutong break na dito 689 00:41:34,400 --> 00:41:38,790 at pagkatapos ay gawin na maayos. 690 00:41:38,790 --> 00:41:46,020 Ayos lang. Ako magse-set ang kuwento medyo artipisyal doon 691 00:41:46,020 --> 00:41:48,670 sa pamamagitan ng pagpili ng Alice at Bob at pagkatapos ng pagkatapos Charlie at pagkatapos Anita, 692 00:41:48,670 --> 00:41:51,000 na ang pangalan ay malinaw naman sumalungat sa Alice. 693 00:41:51,000 --> 00:41:54,120 Subalit ang tanong na namin natapos sa Lunes na may lamang kung paano maaaring magkatotoo ito 694 00:41:54,120 --> 00:41:56,370 na nais mong makakuha ng mga ganitong uri ng banggaan? Sa ibang salita, 695 00:41:56,370 --> 00:42:00,490 kung sinimulan namin upang gamitin ito sa hugis ng mga talaan na istraktura, na kung saan ay talagang isang array lamang, 696 00:42:00,490 --> 00:42:02,460 sa kasong ito ng 26 na lokasyon, 697 00:42:02,460 --> 00:42:05,740 kung ano kung ang aming mga input sa halip pantay na ipinamamahagi sa? 698 00:42:05,740 --> 00:42:09,620 Hindi artipisyal Alice at Bob at Charlie at David at iba pa ayon sa alpabeto, 699 00:42:09,620 --> 00:42:12,380 pantay ito ay ibinahagi sa paglipas ng A sa pamamagitan Z. 700 00:42:12,380 --> 00:42:15,220 >> Siguro makikita lang namin makakuha ng masuwerteng at hindi namin ay may dalawang Isang o dalawang B sa 701 00:42:15,220 --> 00:42:17,640 na may napakataas na posibilidad, ngunit bilang isang tao tulis out, 702 00:42:17,640 --> 00:42:20,730 kung namin heneralisado ang problemang ito at hindi gawin ang 0 sa 25 703 00:42:20,730 --> 00:42:26,060 ngunit, sabihin nating, 0 pamamagitan ng 364 o 65, madalas na ang bilang ng mga araw sa isang tipikal na taon, 704 00:42:26,060 --> 00:42:31,170 at tinanong ang tanong, "Ano ang posibilidad na dalawang sa atin sa kuwartong ito ay may parehong kaarawan?" 705 00:42:31,170 --> 00:42:34,600 Ilagay ito ng isa pang paraan, sa kung ano ang ang posibilidad na ang dalawang sa atin ay may pangalan na nagsisimula sa A? 706 00:42:34,600 --> 00:42:37,190 Ang uri ng pinag-uusapan ay ang parehong, ngunit ang address na ito space, 707 00:42:37,190 --> 00:42:39,940 ang paghahanap na ito space, ay mas malaki sa kaso ng mga kaarawan, 708 00:42:39,940 --> 00:42:42,820 dahil mayroon kaming maraming higit pang mga araw sa taon kaysa sa mga titik sa alpabeto. 709 00:42:42,820 --> 00:42:44,910 Ano ang posibilidad ng isang banggaan? 710 00:42:44,910 --> 00:42:48,410 Well, maaari naming isipin ng mga ito sa pamamagitan ng pag-uunawa ng ang matematika ng kabaligtaran paraan. 711 00:42:48,410 --> 00:42:50,580 Ano ang posibilidad ng walang banggaan? 712 00:42:50,580 --> 00:42:53,970 Well, ito expression dito sabi na ano ang posibilidad 713 00:42:53,970 --> 00:42:58,770 kung may isang tao lamang sa kuwartong ito, na mayroon silang isang natatanging kaarawan? 714 00:42:58,770 --> 00:43:01,190 Ito ay 100%. Dahil kung mayroon lamang isang tao sa kuwarto, 715 00:43:01,190 --> 00:43:03,940 kanyang kaarawan ay maaaring maging anumang ng 365 araw ng taon. 716 00:43:03,940 --> 00:43:08,650 Kaya ng 365/365 na mga pagpipilian ay nagbibigay sa akin ang halaga ng 1. 717 00:43:08,650 --> 00:43:11,250 Kaya ang posibilidad na pinag-uusapan sa sandaling ito ay 1. 718 00:43:11,250 --> 00:43:13,270 Ngunit kung may pangalawang tao sa kuwarto, 719 00:43:13,270 --> 00:43:16,490 ano ang posibilidad na ang kanilang mga kaarawan ay naiiba? 720 00:43:16,490 --> 00:43:20,680 Mayroong lamang 364 posibleng mga araw, pagbalewala sa hakbang taon, 721 00:43:20,680 --> 00:43:23,580 para sa kanilang mga kaarawan ay hindi sumalungat sa ang iba pang mga tao. 722 00:43:23,580 --> 00:43:31,920 Kaya 364/365. Kung ang isang ikatlong tao ay sa, 363/365, at iba pa. 723 00:43:31,920 --> 00:43:35,790 Kaya panatilihin namin ang multiply nang magkasama ang mga fraction, na nakakakuha ng mas maliit at mas maliit, 724 00:43:35,790 --> 00:43:40,720 upang malaman kung ano ang posibilidad na ang lahat sa atin ay may natatanging mga kaarawan? 725 00:43:40,720 --> 00:43:43,570 Ngunit kami, siyempre, lamang na sagot at i-flip ang mga ito sa paligid 726 00:43:43,570 --> 00:43:47,210 at gawin ang 1 minus lahat ng na, isang expression na makikita namin kalaunan makakuha ng 727 00:43:47,210 --> 00:43:51,250 kung tandaan mo sa likod ng iyong mga libro sa matematika, ito mukhang isang maliit na bagay tulad nito, 728 00:43:51,250 --> 00:43:54,590 na kung saan ay mas madali kahulugan graphically. 729 00:43:54,590 --> 00:43:57,820 At ito graphic dito ay sa axis x ang bilang ng mga kaarawan, 730 00:43:57,820 --> 00:44:02,030 o ang bilang ng mga tao sa mga kaarawan, at sa y axis ay ang posibilidad ng isang tugma. 731 00:44:02,030 --> 00:44:06,060 At kung ano ito ay sinasabi ay na kung mayroon kang, sabihin nating, kahit, 732 00:44:06,060 --> 00:44:10,860 sabihin pumili ng isang bagay tulad ng 22, 23. 733 00:44:10,860 --> 00:44:13,160 Kung may 22 o 23 mga tao sa kuwarto, 734 00:44:13,160 --> 00:44:17,100 ang posibilidad na ang dalawang ng mga napaka-ilang mga tao ay pagpunta sa magkaroon ng parehong kaarawan 735 00:44:17,100 --> 00:44:19,560 talagang sobrang mataas, combinatorially. 736 00:44:19,560 --> 00:44:23,450 50% logro na sa isang klase ng 22 tao lamang, seminar, halos, 737 00:44:23,450 --> 00:44:25,790 2 ng mga tao ay pagpunta sa magkaroon ng parehong kaarawan. 738 00:44:25,790 --> 00:44:28,520 Dahil mayroong maraming mga paraan kung saan maaari kang magkaroon ng parehong kaarawan. 739 00:44:28,520 --> 00:44:31,110 Kahit na mas masahol pa, kung titingnan mo sa kanang bahagi ng tsart, 740 00:44:31,110 --> 00:44:34,040 ng oras na mayroon kang isang klase may 58 mag-aaral sa loob nito, 741 00:44:34,040 --> 00:44:39,270 ang posibilidad ng 2 tao na pagkakaroon ng kaarawan ay sobrang, sobrang mataas, halos 100%. 742 00:44:39,270 --> 00:44:41,880 Ngayon, na ang uri ng isang masaya katotohanan tungkol sa tunay na buhay. 743 00:44:41,880 --> 00:44:45,850 >> Ngunit ang mga implikasyon, ngayon, para sa mga data kaayusan at pag-iimbak ng impormasyon 744 00:44:45,850 --> 00:44:51,100 nangangahulugan na lamang ipagpalagay na mayroon kang gandang, malinis, unipormeng pamamahagi ng data 745 00:44:51,100 --> 00:44:53,650 at mayroon kang isang malaking sapat na array upang magkasya ang isang grupo ng mga bagay 746 00:44:53,650 --> 00:44:59,360 ay hindi nangangahulugan na ikaw ay upang makakuha ng mga tao sa natatanging lokasyon. 747 00:44:59,360 --> 00:45:03,810 Ay pagpunta sa may banggaan. Kaya ito paniwala ng hashing, dahil ito ay tinatawag na, 748 00:45:03,810 --> 00:45:07,450 pagsasagawa ng isang input tulad ng "Alice" at masahe ang mga ito sa ilang mga paraan 749 00:45:07,450 --> 00:45:10,190 at pagkatapos pagbalik ng sagot tulad ng 0 o 1 o 2. 750 00:45:10,190 --> 00:45:17,500 Pagbalik ilang output mula sa function na ay plagued sa pamamagitan ng ang posibilidad ng banggaan. 751 00:45:17,500 --> 00:45:19,530 Kaya kung paano namin pinangangasiwaan ang mga banggaan? 752 00:45:19,530 --> 00:45:21,940 Well, sa isang kaso, maaari naming ang ideya na iminungkahing. 753 00:45:21,940 --> 00:45:25,100 Maaari lang namin shift ang lahat, o marahil, ang kaunti pa lamang, 754 00:45:25,100 --> 00:45:29,870 sa halip na ilipat ang iba, sabihin lamang ilipat ang Anita sa ilalim ng mga magagamit na lugar. 755 00:45:29,870 --> 00:45:32,810 Kaya kung Alice sa 0, Bob sa 1, Charlie sa 2, 756 00:45:32,810 --> 00:45:35,260 namin lamang ilagay ang Anita sa lokasyon 3. 757 00:45:35,260 --> 00:45:38,860 At ito ay isang diskarte sa istraktura ng data na tinatawag linear probing. 758 00:45:38,860 --> 00:45:41,310 Linear dahil ka maigsing linya na ito, at ikaw ay uri ng probing 759 00:45:41,310 --> 00:45:43,640 para sa mga magagamit na mga spot sa istraktura ng data. 760 00:45:43,640 --> 00:45:46,210 Siyempre, ito devolves sa O (n). 761 00:45:46,210 --> 00:45:49,590 Kung ang istraktura ng data talagang buong, may 25 tao sa loob nito na, 762 00:45:49,590 --> 00:45:54,120 at pagkatapos Anita ay kasama, siya ay nagtatapos up sa kung ano ang magiging lokasyon Z, at na fine. 763 00:45:54,120 --> 00:45:56,540 Umaangkop pa rin siya, at maaari naming mahanap ang kanyang mamaya. 764 00:45:56,540 --> 00:46:00,100 >> Ngunit ito ay salungat sa layunin ng pagpapabilis ng mga bagay up. 765 00:46:00,100 --> 00:46:02,530 Kaya kung ano kung ipinakilala namin sa halip ikatlong dimensyon na ito? 766 00:46:02,530 --> 00:46:06,400 Na diskarte ay karaniwang tinatawag na nakahiwalay na chaining, o pagkakaroon ng mga chain. 767 00:46:06,400 --> 00:46:10,030 At kung ano ng hash table ngayon, ito sa hugis ng mga talaan na istraktura, 768 00:46:10,030 --> 00:46:13,450 iyong talahanayan ay isang array ng mga payo. 769 00:46:13,450 --> 00:46:18,230 Ngunit ano ang mga payo ay ituro sa hula kung ano? 770 00:46:18,230 --> 00:46:21,970 Ang isang naka-link na listahan. Kaya kung ano kung namin ang pinakamahusay ng parehong ng mga mundo? 771 00:46:21,970 --> 00:46:26,500 Ginagamit namin ang mga array para sa unang na-index 772 00:46:26,500 --> 00:46:32,070 sa istraktura ng data upang maaari namin agad pumunta sa [0] [1], [30] o iba pa, 773 00:46:32,070 --> 00:46:36,480 ngunit sa gayon ay mayroon kaming ilang mga kakayahang umangkop at maaari naming magkasya ang Anita at Alice at Adan 774 00:46:36,480 --> 00:46:38,630 at anumang iba ang pangalan, 775 00:46:38,630 --> 00:46:43,470 sa halip namin ipaalam sa iba pang mga axis palaguin mang. 776 00:46:43,470 --> 00:46:47,340 At hindi na namin sa wakas, bilang ng Lunes, na nagpapahayag na kakayahan sa naka-link na listahan. 777 00:46:47,340 --> 00:46:49,530 Maaari naming palaguin mang ang istraktura ng data. 778 00:46:49,530 --> 00:46:52,450 Bilang kahalili, maaari naming lamang gumawa ng isang malaking 2-dimensional array, 779 00:46:52,450 --> 00:46:57,190 ngunit na pagpunta sa isang kahindik-hindik na sitwasyon kung isa ng mga hilera sa isang 2-dimensional array 780 00:46:57,190 --> 00:47:01,280 ay hindi malaki sapat para sa dagdag na tao na may pangalan ang mangyayari sa magsimula sa A. 781 00:47:01,280 --> 00:47:04,200 Huwag sana naming reallocate isang malaking 2-dimensional na istraktura 782 00:47:04,200 --> 00:47:06,600 lamang dahil mayroong maraming mga taong may pangalang A, 783 00:47:06,600 --> 00:47:09,480 lalo na kapag may kaya ilang mga tao na may pangalang Z isang bagay. 784 00:47:09,480 --> 00:47:12,170 Lamang Ito ay pagpunta sa hiwa-hiwalay na istraktura ng data. 785 00:47:12,170 --> 00:47:15,400 Kaya hindi perpekto sa pamamagitan ng anumang mga pamamaraan, ngunit ngayon namin ng hindi bababa sa may kakayahang 786 00:47:15,400 --> 00:47:19,090 upang agad na makita kung saan Alice o Anita nabibilang, 787 00:47:19,090 --> 00:47:21,090 ng hindi bababa sa mga tuntunin ng vertical axis, 788 00:47:21,090 --> 00:47:25,850 at pagkatapos lang namin upang magpasya kung saan ilagay Anita o Alice sa naka-link na listahan. 789 00:47:25,850 --> 00:47:32,480 Kung hindi namin pakialam tungkol sa pag-uuri-uri ng mga bagay, kung gaano kabilis maaari kaming isingit Alice sa isang istraktura tulad nito? 790 00:47:32,480 --> 00:47:35,370 Pare-pareho ang oras. Ini-index namin sa [0], at kung mayroong walang, 791 00:47:35,370 --> 00:47:37,550 Alice pupunta sa simula ng na naka-link na listahan. 792 00:47:37,550 --> 00:47:40,000 Ngunit hindi iyon isang malaking deal. Dahil kung Anita pagkatapos ay kahabaan 793 00:47:40,000 --> 00:47:42,160 ilang bilang ng mga hakbang sa ibang pagkakataon, kung saan ay Anita nabibilang? 794 00:47:42,160 --> 00:47:45,140 Well, [0]. Oop. Alice ay sa na-link na listahan. 795 00:47:45,140 --> 00:47:47,760 >> Ngunit kung hindi namin pakialam tungkol sa pag-uuri-uri ng mga pangalan, 796 00:47:47,760 --> 00:47:53,580 maaari lamang namin ilipat Alice sa paglipas ng, insert Anita, ngunit kahit na pare-pareho ang oras. 797 00:47:53,580 --> 00:47:57,010 Kahit na may Alice at Adan at lahat ng iba pang mga A pangalan, 798 00:47:57,010 --> 00:47:59,410 hindi ito talagang paglilipat sa kanila pisikal. Bakit? 799 00:47:59,410 --> 00:48:04,090 Dahil lang namin ginawa dito sa naka-link na listahan, na nakakaalam ay mga node ay pa rin? 800 00:48:04,090 --> 00:48:06,550 Ang kailangan mong gawin ay ilipat ang mga crumbs ng tinapay. 801 00:48:06,550 --> 00:48:10,930 Ilipat ang mga arrow sa paligid, hindi mo na kailangang pisikal na ilipat ang anumang data sa paligid. 802 00:48:10,930 --> 00:48:14,610 Upang maaari naming magpasok ng Anita, sa kasong iyon, agad. Pare-pareho ang oras. 803 00:48:14,610 --> 00:48:20,250 Kaya kami ay may pare-pareho-time lookup, at pare-pareho-time na pagpasok ng isang tao tulad ng Anita. 804 00:48:20,250 --> 00:48:22,740 Ngunit ang uri ng oversimplifying ang mundo. 805 00:48:22,740 --> 00:48:28,510 Paano kung gusto namin mamaya upang mahanap ang Alice? 806 00:48:28,510 --> 00:48:31,050 Paano kung gusto namin mamaya upang mahanap ang Alice? 807 00:48:31,050 --> 00:48:35,690 Gaano karaming mga hakbang ay na pagpunta sa tumagal? 808 00:48:35,690 --> 00:48:37,850 [Estudyante sagot, hindi maintindihan] 809 00:48:37,850 --> 00:48:40,950 Eksakto. Ang bilang ng mga tao bago Alice sa naka-link na listahan. 810 00:48:40,950 --> 00:48:45,420 Kaya ito ay hindi pa perpekto, dahil ang aming istraktura ng data, muli, ay ang vertical access 811 00:48:45,420 --> 00:48:50,240 at pagkatapos ay may mga naka-link na listahan na nagha-hang - aktwal na, ipaalam sa ay hindi gumuhit ng isang array. 812 00:48:50,240 --> 00:48:56,020 Ito ang mga naka-link na listahan nakikipag-hang-off nito na mukhang isang maliit na bagay tulad nito. 813 00:48:56,020 --> 00:48:59,110 Ngunit ang problema ay kung Alice at Adan at lahat ng iba pang mga A pangalan 814 00:48:59,110 --> 00:49:01,720 humantong sa higit pa at higit pa doon, 815 00:49:01,720 --> 00:49:04,810 paghahanap ng isang tao ay maaaring pagkuha ng grupo ng mga hakbang, 816 00:49:04,810 --> 00:49:06,670 bcause mayroon kang pagbagtas sa naka-link na listahan, 817 00:49:06,670 --> 00:49:08,090 kung saan ay isang linear na pagpapatakbo. 818 00:49:08,090 --> 00:49:14,270 Kaya talagang, pagkatapos, ang pagpapasok ng oras sa huli ay O (n), kung saan ang n ay ang bilang ng mga elemento sa listahan. 819 00:49:14,270 --> 00:49:21,780 Hinati sa, sabihin mang tumawag ito m, kung saan ang m ay ang bilang ng mga naka-link na listahan 820 00:49:21,780 --> 00:49:24,500 na mayroon kami sa ito vertical axis. 821 00:49:24,500 --> 00:49:27,180 Sa ibang salita, kung ipinapalagay namin tunay unipormeng pamamahagi ng mga pangalan, 822 00:49:27,180 --> 00:49:30,150 lubos na hindi makatotohanang. Mayroong malinaw naman higit pa sa ilang mga titik kaysa sa iba. 823 00:49:30,150 --> 00:49:32,580 >> Ngunit kung ipinapalagay namin para sa ilang sandali ng isang unipormeng pamamahagi, 824 00:49:32,580 --> 00:49:37,350 at hindi na namin n kabuuang mga tao, at m kabuuang chain 825 00:49:37,350 --> 00:49:40,630 magagamit sa amin, ang haba ng bawat ng mga chain 826 00:49:40,630 --> 00:49:44,380 patas lamang ay ang kabuuang, n na hinati sa pamamagitan ng bilang ng mga chain. 827 00:49:44,380 --> 00:49:48,900 Kaya n / m. Ngunit narito ang kung saan maaari namin ang lahat ng mathematically matalino. 828 00:49:48,900 --> 00:49:53,030 m ay isang pare-pareho, dahil may isang nakapirming numero sa mga ito. 829 00:49:53,030 --> 00:49:54,620 Ka na idedeklara ang iyong array sa simula, 830 00:49:54,620 --> 00:49:58,450 at hindi namin ang pagbabago ng laki ng vertical axis. Sa pamamagitan ng kahulugan, na pananatili maayos. 831 00:49:58,450 --> 00:50:01,220 Lamang ang horizontal axis, kaya na magsalita, na pagbabago. 832 00:50:01,220 --> 00:50:04,760 Kaya technically, ito ay isang pare-pareho. Kaya ngayon, ang pagpapasok ng oras 833 00:50:04,760 --> 00:50:09,700 ay medyo magkano O (n). 834 00:50:09,700 --> 00:50:12,410 Kaya na hindi pakiramdam ang lahat ng na magkano ang mas mahusay. 835 00:50:12,410 --> 00:50:14,940 Ngunit ano ang katotohanan dito? Well, lahat ng oras na ito, para sa mga linggo, 836 00:50:14,940 --> 00:50:20,640 namin ang sinasabi O (n ²). O (n), 2 x n ², - n, na hinati sa pamamagitan ng 2. . . ech. 837 00:50:20,640 --> 00:50:23,580 Lang n ². Ngunit ngayon, sa bahaging ito ng semestre, 838 00:50:23,580 --> 00:50:25,560 maaari naming simulan ang pakikipag-usap tungkol sa tunay na mundo muli. 839 00:50:25,560 --> 00:50:31,520 At n / m ay ganap na mas mabilis kaysa lamang n nag-iisa. 840 00:50:31,520 --> 00:50:35,170 Kung mayroon ka ng isang libong mga pangalan, at masira ang mga ito sa maramihang mga bucket 841 00:50:35,170 --> 00:50:37,820 kaya na mayroon kang sampung pangalan lamang sa bawat isa sa mga chain, 842 00:50:37,820 --> 00:50:41,670 talagang naghahanap ng sampung bagay na mas mabilis kaysa sa isang libong mga bagay. 843 00:50:41,670 --> 00:50:43,740 At kaya isa ng paparating na mga set ng problema na hamunin ka 844 00:50:43,740 --> 00:50:46,100 mag-isip tungkol sa eksakto na kahit, oo, 845 00:50:46,100 --> 00:50:49,520 asymptotically at mathematically, ito ay pa rin lamang linear, 846 00:50:49,520 --> 00:50:51,700 na sucks sa pangkalahatan kapag sinusubukan upang mahanap ang mga bagay. 847 00:50:51,700 --> 00:50:54,530 Sa katotohanan, ito ay mas mabilis kaysa sa 848 00:50:54,530 --> 00:50:56,520 dahil sa ang panghati na ito. 849 00:50:56,520 --> 00:50:58,310 At kaya mayroong muli ito kalakalan-off 850 00:50:58,310 --> 00:51:01,390 at ito salungatan sa pagitan ng teorya at katotohanan, 851 00:51:01,390 --> 00:51:03,550 at isa ng ang knobs ay magsimulang i sa puntong ito sa semestre 852 00:51:03,550 --> 00:51:07,510 ay higit pa sa katotohanan isa namin ang uri ng maghanda para sa semster end, 853 00:51:07,510 --> 00:51:09,280 bilang namin ipakilala sa mundo ng web programming, 854 00:51:09,280 --> 00:51:11,530 kung saan talaga, ang pagganap upang mabilang dahil ang iyong mga gumagamit ay pagpunta sa 855 00:51:11,530 --> 00:51:14,880 magsimula sa pakiramdam at Pinahahalagahan ng mga mahihirap na desisyon disenyo. 856 00:51:14,880 --> 00:51:19,950 >> Kaya paano mo pumunta tungkol sa pagpapatupad ng isang naka-link na - ng hash table na may 31 mga elemento? 857 00:51:19,950 --> 00:51:22,600 At ang nakaraang halimbawa ay mang tungkol sa mga kaarawan. 858 00:51:22,600 --> 00:51:26,190 Kung ang isang tao ay may kaarawan ng Enero 1 o Pebrero 1, maglalagay kami ng mga ito sa bucket. 859 00:51:26,190 --> 00:51:28,960 Kung Enero 2, Pebrero 2, Marso 2, maglalagay kami ng mga ito sa bucket. 860 00:51:28,960 --> 00:51:32,220 Iyon ang dahilan kung bakit ito ay 31. Paano mo ipinapahayag ng hash table? 861 00:51:32,220 --> 00:51:37,480 Maaari itong medyo simple, node * talahanayan ay aking arbitrary pangalan para dito, [31]. 862 00:51:37,480 --> 00:51:42,400 Ito ay nagbibigay sa akin 31 pointer sa node, 863 00:51:42,400 --> 00:51:45,370 at na nagbibigay-daan sa akin upang 31 pointer sa naka-link na listahan 864 00:51:45,370 --> 00:51:48,800 kahit na mga chain simula null. 865 00:51:48,800 --> 00:51:54,860 Ano ang gusto kong ilagay kung gusto ko upang mag-imbak ng "Alice," "Bob," "Charlie"? 866 00:51:54,860 --> 00:51:57,010 Well, kailangan namin upang I-wrap ang mga bagay sa isang istraktura 867 00:51:57,010 --> 00:52:00,530 dahil kailangan namin Alice upang tumuro sa Bob, upang tumuro sa Charlie, at iba pa. 868 00:52:00,530 --> 00:52:04,940 Hindi lamang namin maaaring magkaroon ng pangalan ng nag-iisa, kaya maaari ba akong lumikha ng isang bagong istraktura na tinatawag na node dito. 869 00:52:04,940 --> 00:52:08,310 >> Ano ang isang aktwal na node? Ano ang isang node sa bagong na-link na listahan? 870 00:52:08,310 --> 00:52:11,840 Ang unang bagay, na tinatawag na salita, ay para sa pangalan ng tao. 871 00:52:11,840 --> 00:52:14,340 LENGTH, baka, nauugnay sa maximum na haba ng pangalan ng isang tao, 872 00:52:14,340 --> 00:52:18,210 anumang iyon ay, 20, 30, 40 character sa mga nakatutuwang mga kaso ng sulok, 873 00:52:18,210 --> 00:52:22,680 at mag-+1 para sa kung ano? Ang labis na character null, \ 0. 874 00:52:22,680 --> 00:52:27,410 Kaya node na ito ay wrapping "isang bagay" sa loob ng mismong, 875 00:52:27,410 --> 00:52:29,640 ngunit ito rin declares susunod na tinatawag na isang pointer 876 00:52:29,640 --> 00:52:32,580 upang maaari naming kadena Alice sa Bob sa Charlie at iba pa. 877 00:52:32,580 --> 00:52:36,700 Null ngunit hindi kinakailangan upang maging. 878 00:52:36,700 --> 00:52:40,110 Anumang mga katanungan sa mga hash na mga talahanayan? Oo? 879 00:52:40,110 --> 00:52:46,190 [Mag-aaral na humihiling sa tanong, hindi maintindihan] isang array - magandang tanong. 880 00:52:46,190 --> 00:52:50,120 Bakit ito magpasinda salita sa isang array sa halip na lamang magpasinda *? 881 00:52:50,120 --> 00:52:53,830 Ito medyo arbitrary Halimbawa, hindi ko gusto sa resort 882 00:52:53,830 --> 00:52:56,190 sa malloc para sa bawat isa sa mga orihinal na pangalan. 883 00:52:56,190 --> 00:52:59,530 Gusto ko na idedeklara ng isang maximum na halaga ng memory para sa string 884 00:52:59,530 --> 00:53:06,020 sa gayon na maaari kong kopyahin sa ang istraktura Alice \ 0 at hindi humarap sa malloc at libreng at ang mga tulad ng. 885 00:53:06,020 --> 00:53:11,710 Ngunit maaari kong gawin na kung gusto ko upang maging mas may malay-tao ng espasyo paggamit. Magandang tanong. 886 00:53:11,710 --> 00:53:14,780 Kaya sabihin subukan upang magbigay ng tuntuning panlahat ang layo mula sa 887 00:53:14,780 --> 00:53:18,350 at ituon ang natitira ngayon sa mga istraktura ng data sa mas pangkalahatang 888 00:53:18,350 --> 00:53:21,170 at iba pang mga problema na maaari naming malutas gamit ang parehong batayan 889 00:53:21,170 --> 00:53:24,590 kahit na ang data istraktura ay maaaring ang kanilang sarili-iba sa kanilang mga particular. 890 00:53:24,590 --> 00:53:27,910 >> Kaya ito lumiliko sa computer science, ang mga puno ay napaka-karaniwang. 891 00:53:27,910 --> 00:53:29,760 At maaari mong isipin ng isang puno uri ng tulad ng isang puno ng pamilya, 892 00:53:29,760 --> 00:53:31,830 kung saan may ilang mga Roots, ilang matriarch o apo, 893 00:53:31,830 --> 00:53:34,540 lola o grandpa o mas maaga bumalik, 894 00:53:34,540 --> 00:53:38,880 sa ilalim na ina at ama o iba't-ibang mga kapatid o ang gusto. 895 00:53:38,880 --> 00:53:42,500 Kaya ng mala-punong balangkas ay may node at ito ay may mga anak, 896 00:53:42,500 --> 00:53:45,260 karaniwang 0 o higit pang mga anak para sa bawat node. 897 00:53:45,260 --> 00:53:47,320 At ang ilan sa mga hindi maintindihang pag-uusap na nakikita mo sa larawan na ito dito 898 00:53:47,320 --> 00:53:50,630 anumang ng mga maliit na bata o Apo sa mga gilid 899 00:53:50,630 --> 00:53:52,330 na may walang arrow na emanating mula sa kanila, 900 00:53:52,330 --> 00:53:55,070 mga tinatawag na dahon, at sinuman sa loob 901 00:53:55,070 --> 00:53:58,790 ay isang panloob na node, maaari mong tawagin ang mga ito anumang kahabaan ng mga linya. 902 00:53:58,790 --> 00:54:01,430 Ngunit ang istraktura na ito ay medyo karaniwang. Isa na ito ng kaunti arbitrary. 903 00:54:01,430 --> 00:54:04,930 Mayroon kaming isang bata sa kaliwa, mayroon kaming tatlong mga bata sa kanan, 904 00:54:04,930 --> 00:54:06,830 dalawang bata sa ibaba ang natitira. 905 00:54:06,830 --> 00:54:10,740 Upang maaari naming ibang-sized na puno, ngunit kung simulan namin upang isunod sa pamantayan ng mga bagay, 906 00:54:10,740 --> 00:54:15,330 at maaari mong maalala muli ang mula sa Patrick ng video sa binary paghahanap mula sa isang nakaraang maikling 907 00:54:15,330 --> 00:54:19,490 online, binary paghahanap ay hindi ipinatupad sa isang array 908 00:54:19,490 --> 00:54:21,410 o mga piraso ng papel sa isang pisara. 909 00:54:21,410 --> 00:54:25,490 Ipagpalagay na nais mong iimbak ang iyong mga numero sa isang mas sopistikadong istraktura ng data. 910 00:54:25,490 --> 00:54:27,680 Maaari kang lumikha ng isang puno tulad nito. 911 00:54:27,680 --> 00:54:35,290 Maaari kang magkaroon ng isang node na ipinahayag sa C, at node na maaaring magkaroon ng hindi bababa sa dalawang mga elemento sa loob nito. 912 00:54:35,290 --> 00:54:39,470 Ay isa ang numero na nais mong iimbak, at ang iba pa ay - maayos, kailangan namin ng isa pang. 913 00:54:39,470 --> 00:54:41,540 Ang iba pang mga bata nito. 914 00:54:41,540 --> 00:54:45,150 Kaya narito ang isa pang data istraktura. Oras na ito, node ay tinukoy bilang pag-iimbak ng isang numero n 915 00:54:45,150 --> 00:54:49,060 at pagkatapos ay dalawang payo; kaliwa anak at kanang anak. 916 00:54:49,060 --> 00:54:52,100 At hindi arbitrary. Ano ang mga kawili-wiling tungkol sa puno? 917 00:54:52,100 --> 00:55:00,550 >> Ano ang pattern sa kung paano inilatag namin ang ito o kung paano inilatag Patrick ito sa kanyang video? 918 00:55:00,550 --> 00:55:02,790 Ito ay uri ng halata na may ilang mga pag-uuri sa pagpunta sa dito, 919 00:55:02,790 --> 00:55:04,460 ngunit kung ano ang simpleng panuntunan? Oo? 920 00:55:04,460 --> 00:55:08,350 [Estudyante sagot, hindi maintindihan] 921 00:55:08,350 --> 00:55:12,040 Perpekto. Kung ikaw sulyap sa, makikita mo ang mga maliit na numero sa kaliwa, 922 00:55:12,040 --> 00:55:14,690 malaking mga numero sa kaliwa, ngunit na totoo para sa bawat node. 923 00:55:14,690 --> 00:55:20,370 Para sa bawat node, kaliwang anak nito na mas mababa kaysa sa ito, at kanang anak nito na mas malaki kaysa ito. 924 00:55:20,370 --> 00:55:25,210 Ano ang ibig sabihin nito ay ngayon ay kung gusto ko upang maghanap ang istraktura ng data para sa, sabihin nating, ang bilang 44, 925 00:55:25,210 --> 00:55:29,320 Mayroon akong magsimula sa root, dahil bilang sa lahat ng mga mas kumplikadong kaayusan data ngayon, 926 00:55:29,320 --> 00:55:31,910 lamang namin ay isang pointer sa isang bagay, sa simula. 927 00:55:31,910 --> 00:55:35,010 At sa kasong ito, simula sa root. Ito ay hindi ang kaliwang dulo, 928 00:55:35,010 --> 00:55:39,530 ito ay ang root ng istraktura na ito. Kaya nakikita ko dito ang 55, at Naghahanap ako ng 44. 929 00:55:39,530 --> 00:55:41,430 Aling mga direksyon Gusto kong pumunta? 930 00:55:41,430 --> 00:55:45,680 Well, gusto kong pumunta sa kaliwa, dahil malinaw naman, sa kanan ay masyadong malaki. 931 00:55:45,680 --> 00:55:49,050 Kaya mapansin dito, ikaw ay ang uri ng conceptually pagpuputol tree sa kalahati 932 00:55:49,050 --> 00:55:51,700 dahil hindi ka kailanman pagpunta down sa kanang bahagi. 933 00:55:51,700 --> 00:55:55,410 Kaya ngayon ko pumunta mula sa 55 sa 33. Masyadong maliit ng isang numero. 934 00:55:55,410 --> 00:56:01,590 Naghahanap ako ng 44, ngunit ngayon alam ko kung 44 sa puno, maaari ba akong mag-malinaw naman sa kanan. 935 00:56:01,590 --> 00:56:04,460 Sa muli, ako pruning tree sa kalahati. 936 00:56:04,460 --> 00:56:06,780 Medyo mas magkakahawig conceptually sa aklat ng telepono. 937 00:56:06,780 --> 00:56:09,510 Ito ay katulad sa kung ano ang ginawa namin sa mga paper sa pisara, 938 00:56:09,510 --> 00:56:13,940 ngunit ito ay mas sopistikadong istraktura na nagbibigay-daan sa aktwal na sa amin upang gawin 939 00:56:13,940 --> 00:56:16,880 ito hatiin at lupigin sa pamamagitan ng disenyo ng algorithm, 940 00:56:16,880 --> 00:56:19,420 at sa katunayan, traversing isang istraktura tulad nito - Whoops. 941 00:56:19,420 --> 00:56:22,870 Traversing isang istraktura tulad nito, kung saan ito lamang "pumunta ang paraan na ito o pumunta na paraan," 942 00:56:22,870 --> 00:56:26,870 ay nangangahulugan na ang lahat ng code na Baluktot ang iyong isip sa unang kapag pagpapatupad ito sa seksyon 943 00:56:26,870 --> 00:56:31,270 o paglalakad sa pamamagitan nito sa bahay, para sa binary paghahanap, gamit ang recursion o pag-ulit, 944 00:56:31,270 --> 00:56:35,060 ito ay isang sakit sa ulo. Hanapin ang gitnang elemento, pagkatapos ay gawin ang iyong rounding pataas o pababa. 945 00:56:35,060 --> 00:56:39,230 >> May beauty na ito dahil na namin ngayon gamitin ang recursion muli, 946 00:56:39,230 --> 00:56:43,760 ngunit mas nang malinis. Sa katunayan, kung ikaw ay sa bilang 55 at gusto mong mahanap ang 44, 947 00:56:43,760 --> 00:56:48,450 pumunta ka pakaliwa sa kasong ito, kung ano ang mong gawin? Patakbuhin mo ang eksaktong parehong algorithm. 948 00:56:48,450 --> 00:56:51,560 Mong suriin ang halaga ng node, pagkatapos ay pumunta ka pakaliwa o pakanan. 949 00:56:51,560 --> 00:56:53,670 Pagkatapos mong suriin ang halaga ng node, pumunta sa kaliwa o kanan. 950 00:56:53,670 --> 00:56:56,710 Ito ay perpektong angkop sa recursion. 951 00:56:56,710 --> 00:57:00,920 Kaya kahit na sa nakalipas na namin nagawa mo na ang ilang mga medyo arbitrary halimbawa kinasasangkutan recursion 952 00:57:00,920 --> 00:57:03,430 na hindi kailangan na recursive, may stuctures data, 953 00:57:03,430 --> 00:57:07,820 lalo na puno, ito ay isang perpektong application ng ito ideya ng pagkuha ng isang problema, 954 00:57:07,820 --> 00:57:12,920 pag-urong ito, at pagkatapos paglutas ng ang parehong uri ng, ngunit mas maliit, programa. 955 00:57:12,920 --> 00:57:14,590 >> Kaya may isa pang istraktura ng data na maaari naming ipakilala. 956 00:57:14,590 --> 00:57:18,760 Ito ay dinisenyo sa unang tingin upang tumingin misteriyoso, ngunit ito ang mga kamangha-manghang. 957 00:57:18,760 --> 00:57:25,090 Kaya ito ay ang istraktura ng data na tinatawag trie, trie, na minana mula sa pagkuha ng salita, 958 00:57:25,090 --> 00:57:30,210 na hindi malinaw muling Subukan-Val, ngunit kung ano ang mundo ang tawag sa mga bagay na ito. Sinusubukan. T-r-i-e. 959 00:57:30,210 --> 00:57:35,190 Ito ay isang mala-punong balangkas ng uri, ngunit ang bawat isa ng ang mga node sa isang trie 960 00:57:35,190 --> 00:57:41,280 Lumilitaw na kung ano? At ito ay isang bit nakaliligaw na dahil ito uri ng dinaglat. 961 00:57:41,280 --> 00:57:45,960 Ngunit mukhang bawat node sa trie ay talagang isang array. 962 00:57:45,960 --> 00:57:48,840 At kahit na ang may-akda ng diagram na ito ay hindi ipinapakita ito, 963 00:57:48,840 --> 00:57:54,130 sa kasong ito, ang trie ito ay isang istraktura ng data na may layunin sa buhay ay upang mag-imbak ng mga salita 964 00:57:54,130 --> 00:57:57,330 tulad ng A-l-i-c-e o B-o-b. 965 00:57:57,330 --> 00:58:02,480 At ang paraan na kung saan ang data na ito tindahan Alice at Bob at Charlie at Anita at iba pa 966 00:58:02,480 --> 00:58:06,970 ay gumagamit ng isang array kung saan upang mag-imbak ng Alice sa isang trie, 967 00:58:06,970 --> 00:58:09,820 sisimulan namin sa root node na mukhang isang array, 968 00:58:09,820 --> 00:58:12,080 at ito ay nakasulat sa shorthand notation. 969 00:58:12,080 --> 00:58:15,070 May-akda ang mga tinanggal na abcdefg dahil walang mga pangalan na iyon. 970 00:58:15,070 --> 00:58:19,150 Sila lamang ay nagpakita M at P at T, ngunit sa kasong ito, 971 00:58:19,150 --> 00:58:22,780 sabihin ilipat ang layo mula sa Alice at Bob at Charlie sa ilang mga pangalan na dito. 972 00:58:22,780 --> 00:58:25,670 Maxwell ay talagang sa diagram. 973 00:58:25,670 --> 00:58:29,570 Kaya kung paano ginawa ng may-akda store M-a-x-w-e-l-l? 974 00:58:29,570 --> 00:58:36,990 Siya na nagsimula sa root node, at napunta sa [M], kaya halos 13, ang ika-13 na lokasyon sa array. 975 00:58:36,990 --> 00:58:40,750 Pagkatapos mula doon, ang isang pointer. 976 00:58:40,750 --> 00:58:42,760 Ang pointer na humahantong sa isa pang array. 977 00:58:42,760 --> 00:58:47,880 Mula doon, ang may-akda ang na-index sa array na sa isang lokasyon, bilang itinatanghal doon sa itaas na kaliwang, 978 00:58:47,880 --> 00:58:52,250 at pagkatapos siya sinundan na pointer sa isa pang array, 979 00:58:52,250 --> 00:58:55,460 at nagpunta sa pointer sa lokasyon X. 980 00:58:55,460 --> 00:58:59,840 Pagkatapos ay sa ang susunod na lokasyon array W, E, L, L, at iba pa, 981 00:58:59,840 --> 00:59:03,090 at sa wakas, sabihin aktwal subukang maglagay ng larawan na ito. 982 00:59:03,090 --> 00:59:05,380 Ano ang isang node itsura sa code? 983 00:59:05,380 --> 00:59:11,820 Ang node sa isang trie ay naglalaman ng isang array ng mga payo sa higit pang mga node. 984 00:59:11,820 --> 00:59:16,090 Subalit mayroong ding nakuha sa ilang mga uri ng boolean na halaga, ng hindi bababa sa pagpapatupad na ito. 985 00:59:16,090 --> 00:59:18,770 Mangyayari kong tumawag ito is_word. Bakit? 986 00:59:18,770 --> 00:59:22,670 Dahil kapag ikaw ay pagpasok Maxwell, hindi ka pagpasok 987 00:59:22,670 --> 00:59:25,300 anumang bagay sa ito istraktura ng data. 988 00:59:25,300 --> 00:59:27,480 Hindi mo ay sumusulat ng M. Hindi mo ay sumusulat X. 989 00:59:27,480 --> 00:59:30,240 Lahat ng iyong ginagawa ng pagsunod sa mga payo. 990 00:59:30,240 --> 00:59:33,360 Ang pointer na kumakatawan M, pagkatapos ang pointer na kumakatawan A, 991 00:59:33,360 --> 00:59:36,310 pagkatapos pointer na kumakatawan X, pagkatapos W, E, L, L, 992 00:59:36,310 --> 00:59:41,950 ngunit kung ano ang kailangan mong gawin sa dulo uri ng pumunta, suriin, naabot ko ang lokasyon na ito. 993 00:59:41,950 --> 00:59:45,560 Nagkaroon ng isang salita na nagtatapos dito sa istraktura ng data. 994 00:59:45,560 --> 00:59:48,190 >> Kaya kung ano ang trie isang talaga puno ng at may-akda ng pinili upang kumatawan 995 00:59:48,190 --> 00:59:51,880 mga terminuses na may kaunti triangles. 996 00:59:51,880 --> 00:59:56,470 Ito lamang ay nangangahulugan na ang katunayan na ang tatsulok na ito ang dito, ito boolean na halaga ng tunay na 997 00:59:56,470 --> 00:59:59,200 ay nangangahulugan na kung pumunta ka pabalik sa tree, 998 00:59:59,200 --> 01:00:02,420 na ay nangangahulugan na ang isang salita na may pangalang Maxwell sa. 999 01:00:02,420 --> 01:00:04,870 Ngunit ang salita ng foo, halimbawa, 1000 01:00:04,870 --> 01:00:07,970 ay hindi sa tree, dahil kung sisimulan ko sa root node up dito sa itaas, 1001 01:00:07,970 --> 01:00:14,030 Walang f pointer, walang o pointer, walang o pointer. Foo ay hindi isang pangalan sa diksyunaryo. 1002 01:00:14,030 --> 01:00:22,460 Ngunit sa pamamagitan ng kaibahan, ang turing, t-u-r-i-n-g. Muli, hindi ko-imbak t o u o r o i o n o g. 1003 01:00:22,460 --> 01:00:29,820 Subalit ko ginawa store sa istraktura ng data ng halaga ng tunay na paraan pababa dito sa node na ito - sa tree 1004 01:00:29,820 --> 01:00:33,030 sa pamamagitan ng pagtatakda ng ito boolean na halaga ng is_word sa true. 1005 01:00:33,030 --> 01:00:35,740 Kaya trie isang uri ng lubhang kawili-wili meta istraktura, 1006 01:00:35,740 --> 01:00:39,810 kung saan hindi ka talaga sa pag-iimbak ng mga ang mga salita ang kanilang sarili para sa ganitong uri ng diksyunaryo. 1007 01:00:39,810 --> 01:00:45,100 Upang maging malinaw, ka sa pag-iimbak ng oo o hindi, may isang salita na nagtatapos dito. 1008 01:00:45,100 --> 01:00:46,430 >> Ngayon kung ano ang implikasyon? 1009 01:00:46,430 --> 01:00:51,120 Kung mayroon kang 150,000 salita sa isang diksyunaryo na sinusubukan upang mag-imbak sa memorya 1010 01:00:51,120 --> 01:00:53,400 gamit ang isang bagay tulad ng isang naka-link na listahan, 1011 01:00:53,400 --> 01:00:56,870 ikaw ay pagpunta sa 150,000 node sa iyong listahan ng naka-link. 1012 01:00:56,870 --> 01:01:00,250 At paghahanap ng isa ng mga salitang iyon sa alpabeto O (n) na oras. 1013 01:01:00,250 --> 01:01:04,370 Linear oras. Ngunit sa kaso dito ng isang trie, 1014 01:01:04,370 --> 01:01:09,210 ano ang oras ng paggana ng paghahanap ng salita? 1015 01:01:09,210 --> 01:01:17,390 Ito lumiliko ang beauty dito ay na kahit kung mayroon kang 149,999 salita na ito diksyunaryo, 1016 01:01:17,390 --> 01:01:20,170 tulad ng ipinatupad gamit ang istraktura ng data, 1017 01:01:20,170 --> 01:01:25,560 kung gaano karaming oras aabutin upang mahanap o magpasok ng isa pang tao sa na, tulad Alice, Alice? 1018 01:01:25,560 --> 01:01:30,640 Well, lamang 5, siguro 6 na hakbang para sa sumusunod na karakter. 1019 01:01:30,640 --> 01:01:32,880 Dahil ang presense ng iba pang mga pangalan sa istraktura 1020 01:01:32,880 --> 01:01:35,340 ay hindi makakuha ng sa paraan ng pagpasok Alice. 1021 01:01:35,340 --> 01:01:39,640 Bukod dito, ang paghahanap ng Alice sa sandaling may mga 150,000 salita sa diksyunaryo 1022 01:01:39,640 --> 01:01:41,960 hindi makakuha sa iyong paraan ng paghahanap ng Alice sa lahat, 1023 01:01:41,960 --> 01:01:46,880 dahil Alice ay. . . . . dito, dahil nakita ko ang isang boolean na halaga. 1024 01:01:46,880 --> 01:01:50,920 At kung walang boolean totoo, pagkatapos Alice ay hindi sa istraktura ng data na ito ng mga salita. 1025 01:01:50,920 --> 01:01:56,220 Sa ibang salita, ang oras ng paggana ng paghahanap ng mga bagay at pagpasok ng mga bagay sa ang bagong 1026 01:01:56,220 --> 01:02:01,920 data ng istraktura ng trie O ng - hindi ito n. 1027 01:02:01,920 --> 01:02:05,730 Dahil ang presense ng 150,000 tao ay walang epekto sa Alice, tila. 1028 01:02:05,730 --> 01:02:11,560 Kaya sabihin tumawag ito k, kung saan k sa maximum na haba ng isang salita sa Ingles 1029 01:02:11,560 --> 01:02:14,050 na kung saan ay karaniwang hindi hihigit sa 20-isang bagay na character. 1030 01:02:14,050 --> 01:02:17,940 Kaya k ay patuloy. Kaya ang Banal na Kopita tila namin natagpuan ngayon 1031 01:02:17,940 --> 01:02:26,000 ay ng isang trie, pare-pareho ang oras para sa mga insert, para sa mga lookup, para sa pagtanggal. 1032 01:02:26,000 --> 01:02:29,170 Dahil ang bilang ng mga bagay na sa istraktura, 1033 01:02:29,170 --> 01:02:32,600 na hindi kahit na pisikal doon. Muli, sila-uri-uriin ng tsek, oo o hindi, 1034 01:02:32,600 --> 01:02:35,050 ay walang epekto sa nito sa hinaharap tumatakbo oras. 1035 01:02:35,050 --> 01:02:37,940 >> Ngunit mayroong nakuha sa isang catch, kung hindi man, hindi namin maaaring nasayang kaya karaming oras 1036 01:02:37,940 --> 01:02:41,460 sa lahat ng mga iba pang mga istraktura ng data sa wakas makakuha ng sa lihim na kamangha-manghang. 1037 01:02:41,460 --> 01:02:46,410 Kaya kung ano ang presyo ay namin ang pagbabayad dito upang makamit ang kadakilaan? Space. 1038 01:02:46,410 --> 01:02:49,010 Ang bagay na ito ay napakalaking. At ang dahilan na ang mga may-akda 1039 01:02:49,010 --> 01:02:52,400 ay hindi ipakita ito dito, mapapansin na ang lahat ng mga bagay na ito na hitsura array, 1040 01:02:52,400 --> 01:02:55,400 hindi siya gumuhit ang natitirang bahagi ng puno, ang iba ng trie, 1041 01:02:55,400 --> 01:02:58,060 dahil hindi nila lang hindi nauugnay sa kuwento. 1042 01:02:58,060 --> 01:03:01,870 Ngunit ang lahat ng mga node ay sobrang malawak, at tumatagal ng hanggang ang bawat node sa tree 1043 01:03:01,870 --> 01:03:07,780 26 o aktwal, 27 character dahil sa kasong ito ako ay kabilang ang espasyo para sa kudlit 1044 01:03:07,780 --> 01:03:09,980 sa gayon na maaaring namin may apostrophized salita. 1045 01:03:09,980 --> 01:03:14,450 Sa kasong ito, ang mga ito ang mga malawak na array. Kaya kahit na hindi sila picutured, 1046 01:03:14,450 --> 01:03:18,190 ito tatagal ay isang napakalaking halaga ng RAM. 1047 01:03:18,190 --> 01:03:20,670 Na maaaring fine, especilly sa modernong hardware, 1048 01:03:20,670 --> 01:03:25,650 ngunit ang tradeoff. Makakakuha tayo ng mas kaunting oras sa pamamagitan ng paggastos ng mas maraming espasyo. 1049 01:03:25,650 --> 01:03:28,580 Kaya kung saan ay ang lahat ng pagpunta? 1050 01:03:28,580 --> 01:03:32,640 Well, sabihin gawin - sabihin makikita dito. 1051 01:03:32,640 --> 01:03:39,510 Natin gawin ng pagtalon sa tao na ito dito. 1052 01:03:39,510 --> 01:03:43,450 >> Maniwala ka man o hindi, ng mas maraming masaya bilang C ay para sa ilang oras na ngayon, 1053 01:03:43,450 --> 01:03:48,130 kami ay maabot ang punto sa semestre kung saan ito ay oras upang lumipat sa mga bagay na mas makabago. 1054 01:03:48,130 --> 01:03:50,950 Mga bagay sa isang mas mataas na antas. At kahit na para sa susunod na ilang mga linggo 1055 01:03:50,950 --> 01:03:54,580 pa rin namin patuloy na malulong ating sarili sa mundo ng mga payo at pamamahala ng memory 1056 01:03:54,580 --> 01:03:57,210 upang makakuha ng na ginhawa na kung saan maaari naming pagkatapos ay bumuo sa, 1057 01:03:57,210 --> 01:04:01,270 huli sa pagtatapos ng laro ay upang ipakilala, ironically, hindi na ito wika. 1058 01:04:01,270 --> 01:04:03,330 Susubukan naming gastusin, tulad ng 10 minuto pakikipag-usap tungkol sa HTML. 1059 01:04:03,330 --> 01:04:05,950 Lahat ng HTML ay isang markup language, at kung ano ang isang markup language 1060 01:04:05,950 --> 01:04:10,220 ay mga serye ng mga bukas na mga braket at closed bracket na nagsasabing 'gumawa ito bold' 1061 01:04:10,220 --> 01:04:12,000 'Ito italics' 'gumawa ito Iginitna.' 1062 01:04:12,000 --> 01:04:14,250 Ito ay hindi lahat na intellectually kawili-wili, ngunit ito ay sobrang kapaki-pakinabang. 1063 01:04:14,250 --> 01:04:16,650 At ito ay tiyak na nasa lahat ng dako mga araw na ito. 1064 01:04:16,650 --> 01:04:19,450 Ngunit ano makapangyarihang tungkol sa mundo ng HTML, at web programming mas pangkalahatang, 1065 01:04:19,450 --> 01:04:25,910 ay pagbuo ng mga dynamic na bagay; pagsusulat code sa mga wika tulad ng PHP o Python o Ruby o Java o C #. 1066 01:04:25,910 --> 01:04:30,360 Talagang, anumang ang iyong wika ng pagpili, at pagbuo ng HTML dynamic. 1067 01:04:30,360 --> 01:04:32,960 Bumubuo ng isang bagay na tinatawag CSS dynamic. 1068 01:04:32,960 --> 01:04:35,810 Cascading style sheet, na kung saan ay tungkol din sa aesthetics. 1069 01:04:35,810 --> 01:04:41,360 At kaya kahit, ngayon, kung pumunta ako sa ilang mga website tulad ng sa pamilyar Google.com, 1070 01:04:41,360 --> 01:04:46,100 at pumunta ako upang tingnan, developer, ang pinagmulan ng pagtingin, na maaaring nagawa mo na bago, 1071 01:04:46,100 --> 01:04:49,800 ngunit upang tingnan ang pinagmulan, ang mga bagay na ito ay marahil hitsura medyo misteriyoso. 1072 01:04:49,800 --> 01:04:55,320 Ngunit ito ay ang kalakip na code na ipinapatupad Google.com. 1073 01:04:55,320 --> 01:04:57,940 Sa front end. At aktwal na ang lahat ng ito ay malambot aesthetics bagay. 1074 01:04:57,940 --> 01:05:01,740 Ito ay CSS dito. Kung panatilihing ako ng scroll down na namin ang ilang mga kulay-code na mga bagay-bagay. 1075 01:05:01,740 --> 01:05:06,890 Ito ay HTML. Hitsura ng code ng Google tulad ng isang gulo, ngunit kung ako aktwal na magbukas ng ibang window, 1076 01:05:06,890 --> 01:05:09,380 maaari naming makita ang ilang mga istraktura na ito. 1077 01:05:09,380 --> 01:05:12,640 Kung buksan ko ito up, mapapansin dito, ng kaunti pa nababasa. 1078 01:05:12,640 --> 01:05:16,850 Kami ay pagpunta upang makita bago mahaba ang tag na ito, [salita] ng tag, 1079 01:05:16,850 --> 01:05:23,520 HTML, ulo, katawan, div, script, text area, span, Iginitna, div. 1080 01:05:23,520 --> 01:05:26,770 At ito ay din ayusin ng misteriyoso-mukhang sa unang tingin, 1081 01:05:26,770 --> 01:05:30,890 ngunit ang lahat ng ito gulo sumusunod ilang mga pattern, at repeatable pattern, 1082 01:05:30,890 --> 01:05:33,850 kaya na sa sandaling makuha namin ang mga pangunahing kaalaman, magagawa mong upang isulat ang code tulad nito 1083 01:05:33,850 --> 01:05:37,550 at pagkatapos ay manipulahin ng code tulad nito gamit ang isa pang wika, na tinatawag JavaScript. 1084 01:05:37,550 --> 01:05:40,440 At JavaScript ay isang wika na tumatakbo sa loob ng isang browser 1085 01:05:40,440 --> 01:05:44,380 ngayon na ginagamit namin sa Harvard kurso, para sa tool ng shopping ng kurso na mga mapa ng Google ay gumagamit ng 1086 01:05:44,380 --> 01:05:48,660 upang bigyan ka ng buong bungkos ng dynamism, Facebook ay nagbibigay sa iyo upang ipakita ang mga instant na update sa katayuan, 1087 01:05:48,660 --> 01:05:51,430 Twitter gumagamit upang ipakita sa iyo ng mga tweet agad. 1088 01:05:51,430 --> 01:05:53,820 Lahat ng ito magsisimula kami sa malulong ating sarili. 1089 01:05:53,820 --> 01:05:57,190 Ngunit upang makakuha ng doon, kailangan namin upang maunawaan ang isang maliit na isang bagay tungkol sa Internet. 1090 01:05:57,190 --> 01:06:01,130 Ang clip na ito dito lamang ng isang minuto ang haba, at sabihin ipinapalagay sa ngayon ito ay, sa katunayan, 1091 01:06:01,130 --> 01:06:08,380 kung paano ang Internet ay gumagana bilang isang teaser para sa kung ano ang tungkol sa darating. Bigyan mo ako "Warriors ng Net." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Mabagal koro musika ♫] 1093 01:06:14,720 --> 01:06:20,450 [Lalaki tagapagsalaysay] Siya ay dumating na may isang mensahe. 1094 01:06:20,450 --> 01:06:23,770 May isang protocol na lahat ng kanyang sariling. 1095 01:06:23,770 --> 01:06:37,270 [♫ Mas mabilis electronic musika ♫] 1096 01:06:37,270 --> 01:06:41,330 Dumating siya sa isang mundo ng mga cool na firewall, uncaring router, 1097 01:06:41,330 --> 01:06:45,690 at mga panganib malayo mas masahol pa kaysa sa kamatayan. 1098 01:06:45,690 --> 01:06:55,400 Siya ay mabilis. Siya ay malakas. Siya TCP / IP, at siya nakuha iyong address. 1099 01:06:55,400 --> 01:06:59,250 Mandirigma ng Net. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Sa susunod na linggo, pagkatapos. Sa Internet. Web programming. Ito ay CS50. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]