1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Wiki 6, Inaendelea] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Chuo Kikuu cha Harvard] 3 00:00:04,160 --> 00:00:08,720 [Hii ni CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Hii ni CS50 na hii ni mwisho wa wiki 6. 5 00:00:12,970 --> 00:00:17,970 Hivyo CS50x, moja ya kozi Harvard ya kwanza ya kushiriki katika mpango edX 6 00:00:17,970 --> 00:00:20,590 kweli hii ilipata kushika nafasi ya Jumatatu iliyopita. 7 00:00:20,590 --> 00:00:23,460 Kama ungependa kupata glimpse ya wengine ni nini kwenye Internet 8 00:00:23,460 --> 00:00:27,180 sasa kufuatia pamoja na, unaweza kichwa kwa x.cs50.net. 9 00:00:27,180 --> 00:00:30,350 Hiyo redirect wewe kwa sehemu husika kwenye edx.org, 10 00:00:30,350 --> 00:00:34,160 ambayo ilikuwa ambapo hii na kozi nyingine kutoka MIT na Berkeley sasa kuishi. 11 00:00:34,160 --> 00:00:38,140 Itabidi kuingia kwenye akaunti; utapata kwamba ni nyenzo kiasi kikubwa sawa 12 00:00:38,140 --> 00:00:42,170 kama umeshapata hii muhula, angalau wiki chache kuchelewa, kama sisi kupata kila kitu tayari. 13 00:00:42,170 --> 00:00:46,930 Lakini nini wanafunzi katika CS50x sasa kuona ni interface kabisa kama hii moja. 14 00:00:46,930 --> 00:00:50,040 Hii, kwa mfano, ni Zamyla kuongoza walkthrough kwa tatizo kuweka 0. 15 00:00:50,040 --> 00:00:54,230 Juu ya kuingia katika edx.org, mwanafunzi CS50x anaona aina ya mambo 16 00:00:54,230 --> 00:00:57,170 gani wanatarajia kuona katika mwendo: hotuba kwa Jumatatu, 17 00:00:57,170 --> 00:01:01,650 hotuba kwa Jumatano, mbalimbali kaptula, seti tatizo, walkthroughs, PDFs. 18 00:01:01,650 --> 00:01:04,459 Aidha, kama unaweza kuona hapa, mashine Tafsiri 19 00:01:04,459 --> 00:01:08,390 wa nakala ya Kiingereza ndani ya Kichina, Kijapani, Kihispania, Kiitaliano, 20 00:01:08,390 --> 00:01:12,810 na rundo zima la lugha nyingine ambayo hakika kuwa si mkamilifu 21 00:01:12,810 --> 00:01:15,840 kama sisi roll yao nje programmatically kutumia kitu kinachoitwa API, 22 00:01:15,840 --> 00:01:18,360 au maombi ya programu interface, kutoka Google 23 00:01:18,360 --> 00:01:21,360 ambayo inaruhusu yetu kubadili Kiingereza kwa lugha hizi nyingine. 24 00:01:21,360 --> 00:01:24,100 Lakini, shukrani kwa roho ya ajabu ya kujitolea baadhi mia-plus, 25 00:01:24,100 --> 00:01:26,940 random watu kwenye mtandao ambao kindly inayotolewa kujihusisha 26 00:01:26,940 --> 00:01:30,180 katika mradi huu, tutaweza kuwa na kuboresha hatua kwa hatua ubora wa tafsiri wale 27 00:01:30,180 --> 00:01:35,790 kwa kuwa binadamu kusahihisha makosa kwamba kompyuta yetu kuwa alifanya. 28 00:01:35,790 --> 00:01:42,330 >> Hivyo zinageuka tulikuwa wachache zaidi wanafunzi show juu ya Jumatatu kuliko sisi awali inatarajiwa. 29 00:01:42,330 --> 00:01:48,980 Kwa kweli, sasa ina watu 100,000 CS50x kufuatia pamoja nyumbani. 30 00:01:48,980 --> 00:01:54,430 Hivyo kutambua wewe ni sehemu ya darasa hili uzinduzi wa kufanya kozi hii katika sayansi ya kompyuta 31 00:01:54,430 --> 00:01:57,370 elimu kwa ujumla zaidi, pana zaidi, kupatikana. 32 00:01:57,370 --> 00:02:00,130 Na ukweli ni sasa, na baadhi ya kozi hizi kubwa online, 33 00:02:00,130 --> 00:02:04,070 wao wote kuanza na nambari hizi juu sana, kama sisi tunaonekana kuwa na kufanyika hapa. 34 00:02:04,070 --> 00:02:08,759 Lakini lengo, hatimaye, kwa CS50x ni kweli kupata watu wengi kama mstari wa kumaliza iwezekanavyo. 35 00:02:08,759 --> 00:02:12,000 Kwa design, CS50x anaenda kutolewa kutoka Jumatatu hii iliyopita 36 00:02:12,000 --> 00:02:17,430 njia zote 15 Aprili 2013, ili folks ambao wana ahadi shule mahali pengine, 37 00:02:17,430 --> 00:02:20,990 kazi, familia, migogoro mengine na kama, kuwa na kidogo zaidi kubadilika 38 00:02:20,990 --> 00:02:23,640 na ambayo kwa kupiga mbizi katika kozi hii, ambayo, inatosha kusema, 39 00:02:23,640 --> 00:02:30,540 ni kabisa ambitiously kufanyika kama tu juu ya mwendo wa miezi mitatu tu wakati wa muhula wa kawaida. 40 00:02:30,540 --> 00:02:34,190 Lakini wanafunzi hawa itakuwa kukabiliana seti tatizo moja, viewing maudhui sawa, 41 00:02:34,190 --> 00:02:36,350 kuwa upatikanaji wa kaptula sawa na kama. 42 00:02:36,350 --> 00:02:38,990 Hivyo kutambua kwamba sisi wote ni kweli katika hii pamoja. 43 00:02:38,990 --> 00:02:42,360 Na moja ya malengo ya mwisho wa CS50x si tu kupata folks kama wengi 44 00:02:42,360 --> 00:02:45,720 mstari wa kumaliza na kuwapa ufahamu huu newfound wa sayansi ya kompyuta 45 00:02:45,720 --> 00:02:49,000 na programu lakini pia kuwa na wao wana uzoefu huu pamoja. 46 00:02:49,000 --> 00:02:52,010 Moja ya tabia kufafanua wa 50 juu ya chuo, ni matumaini yetu, 47 00:02:52,010 --> 00:02:56,260 imekuwa ya aina hii ya uzoefu wa jumuiya, kwa bora au mbaya, wakati mwingine, 48 00:02:56,260 --> 00:02:59,480 lakini baada ya kuwa watu hawa kurejea kwa kushoto na kulia, 49 00:02:59,480 --> 00:03:01,830 na ofisi ya masaa na hackathon na wa haki. 50 00:03:01,830 --> 00:03:04,560 Ni ngumu kidogo kufanya hivyo katika mtu na folks online, 51 00:03:04,560 --> 00:03:10,580 lakini CS50x tutahitimisha katika Aprili na Expo kwanza milele CS50, 52 00:03:10,580 --> 00:03:13,630 ambayo itakuwa kukabiliana online ya wazo yetu ya haki 53 00:03:13,630 --> 00:03:18,250 ambapo hizi maelfu ya wanafunzi wote wataalikwa kuwasilisha 1 - 2 na video ya dakika, 54 00:03:18,250 --> 00:03:22,480 aidha screencast ya mradi wao wa mwisho au video wao akipunga hujambo 55 00:03:22,480 --> 00:03:24,490 na kuzungumza kuhusu mradi wao na demoing yake, 56 00:03:24,490 --> 00:03:27,610 kiasi kama watangulizi wako wamefanya hapa juu ya chuo katika haki, 57 00:03:27,610 --> 00:03:31,400 hivyo kuwa na mwisho wa muhula, matumaini ni kuwa na maonyesho ya kimataifa 58 00:03:31,400 --> 00:03:37,080 wa miradi ya wanafunzi CS50x 'mwisho, kiasi kama yale zakulaiki hii Desemba hapa juu ya chuo. 59 00:03:37,080 --> 00:03:39,680 Hivyo zaidi juu ya kwamba katika miezi ijayo. 60 00:03:39,680 --> 00:03:43,640 >> Pamoja na wanafunzi 100,000, ingawa, huja haja ya CAS chache zaidi. 61 00:03:43,640 --> 00:03:47,590 Kutokana na kwamba wewe guys ni mkali uchaguzi hapa na kuchukua CS50 62 00:03:47,590 --> 00:03:51,630 wiki kadhaa kabla ya kutolewa nyenzo hii kwa folks juu ya edX, 63 00:03:51,630 --> 00:03:55,330 kutambua upendo tunataka kuhusisha kama wengi wa wanafunzi wetu wenyewe kama inawezekana katika mpango huu, 64 00:03:55,330 --> 00:03:58,720 wote wakati wa muhula kama vile baridi hii na hii spring ijayo. 65 00:03:58,720 --> 00:04:01,620 Hivyo kama ungependa kushiriki katika CS50x, 66 00:04:01,620 --> 00:04:07,450 hasa juu ya kujiunga katika CS50x Diskutera, toleo edX ya CS50 Diskutera, 67 00:04:07,450 --> 00:04:10,140 ambayo wengi wenu wamekuwa kutumia juu ya chuo, online bulletin bodi, 68 00:04:10,140 --> 00:04:13,040 tafadhali kufanya kichwa kwa URL kwamba, hebu kujua wewe ni nani, 69 00:04:13,040 --> 00:04:16,450 kwa sababu tunatarajia upendo wa kujenga timu ya wanafunzi na wafanyakazi na kitivo sawa 70 00:04:16,450 --> 00:04:19,630 juu ya chuo ambao ni tu kucheza pamoja na kusaidia nje. 71 00:04:19,630 --> 00:04:21,720 Na wanapo kuona swali hilo ni familiar nao, 72 00:04:21,720 --> 00:04:25,320 wewe kusikia mwanafunzi kuripoti baadhi mdudu mahali fulani huko nje katika nchi baadhi ya mtandao, 73 00:04:25,320 --> 00:04:27,450 na pete kengele kwa sababu wewe pia alikuwa na kwamba suala hilo hilo 74 00:04:27,450 --> 00:04:32,620 katika yako d-hall baadhi ya wakati uliopita, hopefully basi unaweza chime katika na kubadilishana uzoefu wako mwenyewe. 75 00:04:32,620 --> 00:04:37,300 Hivyo tafadhali wanayo haki kama ungependa. 76 00:04:37,300 --> 00:04:39,360 >> Kompyuta kozi ya sayansi katika Harvard kuwa na kidogo ya mapokeo, 77 00:04:39,360 --> 00:04:44,730 CS50 kati yao, ya kuwa na baadhi ya mavazi, baadhi ya nguo, kwamba unaweza kuvaa kujigamba 78 00:04:44,730 --> 00:04:49,090 mwishoni muhula, kwa kusema kabisa kujigamba kwamba wewe kumaliza CS50 79 00:04:49,090 --> 00:04:51,830 na alichukua CS50 na kama, na sisi daima kujaribu kuhusisha wanafunzi 80 00:04:51,830 --> 00:04:54,540 katika mchakato huu kama iwezekanavyo, ambapo sisi kuwakaribisha, 81 00:04:54,540 --> 00:04:56,900 karibu wakati huu wa muhula, wanafunzi kuwasilisha miundo 82 00:04:56,900 --> 00:04:59,330 kutumia Photoshop, au chochote chombo cha uchaguzi Ningependa kutumia 83 00:04:59,330 --> 00:05:02,330 kama wewe ni designer, kuwasilisha miundo kwa ajili ya fulana na mashati 84 00:05:02,330 --> 00:05:06,100 na miavuli bandanas kidogo na kwa ajili ya mbwa na sisi sasa kuwa kama. 85 00:05:06,100 --> 00:05:09,370 Na kila kitu ni basi - washindi kila mwaka ni basi exhibited 86 00:05:09,370 --> 00:05:12,700 kwenye tovuti kozi ya saa store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 Kila kitu ni kuuzwa kwa gharama huko, lakini tovuti anaendesha tu yenyewe 88 00:05:15,790 --> 00:05:18,330 na inaruhusu watu kuchagua rangi na miundo kwamba wao kama. 89 00:05:18,330 --> 00:05:20,420 Hivyo nimeona tunatarajia kushiriki tu baadhi ya miundo ya mwaka jana 90 00:05:20,420 --> 00:05:25,130 waliokuwa kwenye tovuti hii badala ya moja hapa, ambayo ni mapokeo ya kila mwaka. 91 00:05:25,130 --> 00:05:29,410 "Kila siku mimi nina Seg Faultn" ilikuwa moja ya maoni mwaka jana, 92 00:05:29,410 --> 00:05:32,290 ambayo bado inapatikana huko kwa Mbegu. 93 00:05:32,290 --> 00:05:35,820 Tulikuwa na hii moja, "CS50, Ilianza mwaka 1989." 94 00:05:35,820 --> 00:05:39,010 Moja ya Bowdens yetu, Rob, ulikuwa maarufu sana mwaka jana. 95 00:05:39,010 --> 00:05:43,480 "Timu ya Bowden" alizaliwa, design hii ilikuwa in, miongoni mwa wauzaji wa juu. 96 00:05:43,480 --> 00:05:49,040 Kama ilikuwa hii moja hapa. Watu wengi walikuwa "Bowden Homa" kulingana na magogo ya mauzo. 97 00:05:49,040 --> 00:05:52,650 Kutambua kwamba kwamba inaweza sasa kuwa design yako huko, juu ya mtandao. 98 00:05:52,650 --> 00:05:57,510 Maelezo zaidi juu ya hili katika tatizo inayofuata inatoa kuja. 99 00:05:57,510 --> 00:06:00,330 >> Moja zaidi chombo: umeshapata baadhi yatokanayo na hopefully sasa 100 00:06:00,330 --> 00:06:02,350 baadhi ya uzoefu wa mikono juu na GDB, 101 00:06:02,350 --> 00:06:04,570 ambayo ni, bila shaka, debugger na utapata kuendesha 102 00:06:04,570 --> 00:06:09,500 mpango wako katika ngazi ya haki Asili, kufanya nini aina ya mambo? 103 00:06:09,500 --> 00:06:13,030 Je GDB basi wewe kufanya? 104 00:06:13,030 --> 00:06:15,030 Yeah? Nipe kitu. [Mwanafunzi jibu, unintelligible] 105 00:06:15,030 --> 00:06:18,120 Nzuri. Hatua katika kazi, hivyo si tu kuwa na aina kukimbia 106 00:06:18,120 --> 00:06:22,310 na kuwa na pigo mpango kupitia ukamilifu wake, kuchapa nje ya mambo ya pato standard. 107 00:06:22,310 --> 00:06:25,190 Badala yake, unaweza hatua kupitia line hiyo kwa mstari, ama kuandika ijayo 108 00:06:25,190 --> 00:06:30,300 kwenda mstari kwa mstari kwa mstari au hatua kwa kupiga mbizi katika kazi, kawaida moja kwamba aliandika. 109 00:06:30,300 --> 00:06:35,240 Nini kingine haina GDB basi wewe kufanya? Yeah? [Mwanafunzi jibu, unintelligible] 110 00:06:35,240 --> 00:06:38,100 Magazeti vigezo. Hivyo kama unataka kufanya kujichunguza kidogo ndani ya mpango wako 111 00:06:38,100 --> 00:06:41,500 bila ya kuwa na mapumziko kwa kuandika kauli printf kila mahali, 112 00:06:41,500 --> 00:06:44,600 unaweza tu magazeti variable au kuonyesha kutofautiana. 113 00:06:44,600 --> 00:06:46,710 Nini kingine unaweza kufanya na debugger kama GDB? 114 00:06:46,710 --> 00:06:49,170 [Mwanafunzi jibu, unintelligible] 115 00:06:49,170 --> 00:06:52,080 Hasa. Unaweza kuweka breakpoints; unaweza kusema mapumziko utekelezaji 116 00:06:52,080 --> 00:06:54,020 katika kazi kuu au kazi foo. 117 00:06:54,020 --> 00:06:56,800 Unaweza kusema mapumziko utekelezaji katika mstari wa 123. 118 00:06:56,800 --> 00:06:58,950 Na breakpoints ni mbinu kweli nguvu 119 00:06:58,950 --> 00:07:01,110 kwa sababu kama una maana ya jumla ya ambapo tatizo lako 120 00:07:01,110 --> 00:07:05,360 pengine ni, huna kupoteza muda wanazidi kupitia ukamilifu wa programu hiyo. 121 00:07:05,360 --> 00:07:08,250 Unaweza kimsingi kuruka haki pale na kisha kuanza kuandika - 122 00:07:08,250 --> 00:07:10,970 wanazidi kupitia kwa hatua au ijayo au kama. 123 00:07:10,970 --> 00:07:14,340 Lakini samaki na kitu kama GDB ni kwamba inasaidia wewe, binadamu, 124 00:07:14,340 --> 00:07:16,940 kupata matatizo yako na kupata Bugs yako. 125 00:07:16,940 --> 00:07:19,470 Haina lazima kupata yao sana kwa ajili yenu. 126 00:07:19,470 --> 00:07:23,070 >> Hivyo sisi ilianzisha nyingine siku style50, ambayo ni fupi ya mstari amri chombo 127 00:07:23,070 --> 00:07:27,500 ambayo inajaribu stylize code yako kidogo zaidi cleanly kuliko wewe, binadamu, wanaweza kuwa na kufanyika. 128 00:07:27,500 --> 00:07:29,530 Lakini, pia, ni kweli tu kitu aesthetic. 129 00:07:29,530 --> 00:07:34,110 Lakini zinageuka kuna chombo hiki nyingine iitwayo Valgrind, ambayo ni kidogo zaidi arcane kutumia. 130 00:07:34,110 --> 00:07:36,860 Pato lake ni atrociously cryptic katika mtazamo wa kwanza. 131 00:07:36,860 --> 00:07:39,420 Lakini ni ajabu muhimu, hasa sasa kwamba sisi ni saa sehemu ya muda 132 00:07:39,420 --> 00:07:43,080 ambapo wewe ni mapya kwa kutumia malloc na mgao nguvu kumbukumbu. 133 00:07:43,080 --> 00:07:45,420 Mambo yanaweza kwenda kweli, kweli makosa haraka. 134 00:07:45,420 --> 00:07:49,320 Kwa sababu kama wewe kusahau huru kumbukumbu yako, au wewe dereference baadhi pointer null, 135 00:07:49,320 --> 00:07:55,770 au wewe dereference baadhi pointer takataka, ni nini dalili ya kawaida kwamba matokeo? 136 00:07:55,770 --> 00:07:59,470 Seg kosa. Na wewe kupata faili hii ya msingi ya baadhi ya idadi ya kilobytes au megabaiti 137 00:07:59,470 --> 00:08:02,990 kwamba inawakilisha hali ya kumbukumbu ya mpango wako ilipokwama, 138 00:08:02,990 --> 00:08:05,730 lakini programu yako hatimaye seg makosa, segmentation kosa, 139 00:08:05,730 --> 00:08:08,450 ambayo ina maana ya kitu mbaya kilichotokea daima karibu kuhusiana 140 00:08:08,450 --> 00:08:11,750 kwa makosa yanayohusiana na kumbukumbu kwamba alifanya mahali fulani. 141 00:08:11,750 --> 00:08:14,100 Hivyo Valgrind husaidia kupata mambo kama hayo. 142 00:08:14,100 --> 00:08:17,720 Ni chombo kwamba wewe kukimbia, kama GDB, baada ve compiled mpango wako, 143 00:08:17,720 --> 00:08:20,330 lakini badala ya kuendesha programu yako moja kwa moja, wewe kukimbia Valgrind 144 00:08:20,330 --> 00:08:23,960 na wewe kupita kwa hiyo programu yako, kama wewe kufanya na GDB. 145 00:08:23,960 --> 00:08:26,220 Sasa, matumizi, ili kupata aina bora ya pato, 146 00:08:26,220 --> 00:08:30,410 ni kidogo kwa muda mrefu, hivyo haki pale atop ya screen utaona Valgrind-v. 147 00:08:30,410 --> 00:08:35,350 "-V" karibu ulimwenguni kote ina maana verbose wakati unatumia programu kwenye kompyuta Linux. 148 00:08:35,350 --> 00:08:38,770 Hivyo ina maana mate nje data zaidi kuliko wewe nguvu na default. 149 00:08:38,770 --> 00:08:45,510 "- Leak-kuangalia = kamili." Hii ni kusema tu hundi kwa uvujaji wote inawezekana kumbukumbu, 150 00:08:45,510 --> 00:08:49,430 makosa ili nipate kuwa alifanya. Hii pia, ni dhana ya kawaida na mipango ya Linux. 151 00:08:49,430 --> 00:08:52,710 Kwa ujumla, kama una mstari amri hoja kwamba "kubadili", 152 00:08:52,710 --> 00:08:55,830 kwamba walidhani kubadili tabia ya mpango wa, na ni barua moja, 153 00:08:55,830 --> 00:09:00,310 ni-v, lakini kama hiyo ni switched, tu kwa kubuni programu, 154 00:09:00,310 --> 00:09:05,150 ni neno kamili au mfululizo wa maneno, mstari amri hoja huanza na -. 155 00:09:05,150 --> 00:09:08,190 Hizi ni baadhi tu ya binadamu makongamano, lakini utaona yao inazidi. 156 00:09:08,190 --> 00:09:12,410 Na kisha, hatimaye, "a.out" ni jina kwa ajili ya mpango holela katika mfano huu hasa. 157 00:09:12,410 --> 00:09:14,640 Na hapa ni baadhi ya pato mwakilishi. 158 00:09:14,640 --> 00:09:22,890 >> Kabla ya sisi kuangalia nini kwamba tupate maana, nivuke kwa snippet ya maadili ya juu hapa. 159 00:09:22,890 --> 00:09:26,390 Na napenda hoja hii nje ya njia, upesi, 160 00:09:26,390 --> 00:09:32,120 na hebu tuangalie memory.c, ambayo ni mfano huu mfupi hapa. 161 00:09:32,120 --> 00:09:36,290 Hivyo katika mpango huu, napenda kuvuta kazi na maswali. 162 00:09:36,290 --> 00:09:39,430 Tuna kazi kubwa ambayo inatoa wito kazi, f, 163 00:09:39,430 --> 00:09:45,590 na kisha nini f kuendelea kufanya, kwa Kiingereza kidogo kiufundi? 164 00:09:45,590 --> 00:09:49,760 Nini f kuendelea kufanya nini? 165 00:09:49,760 --> 00:09:53,680 Vipi kuhusu mimi itabidi kuanza na mstari 20, na mahali nyota Haijalishi, 166 00:09:53,680 --> 00:09:56,720 lakini mimi itabidi kuwa thabiti hapa na hotuba ya mwisho. 167 00:09:56,720 --> 00:09:59,910 Nini mstari 20 kufanya kwa ajili yetu? Upande wa kushoto. Tutaweza kuvunja chini zaidi. 168 00:09:59,910 --> 00:10:02,410 Int * x: nini kwamba kufanya? 169 00:10:02,410 --> 00:10:04,940 Sawa. Ni kutangaza pointer, na sasa hebu kuwa hata zaidi ya kiufundi. 170 00:10:04,940 --> 00:10:10,230 Ina maana gani, sana concretely, kutangaza pointer? Mtu mwingine? 171 00:10:10,230 --> 00:10:15,050 Yeah? [Mwanafunzi jibu, unintelligible] Too mbali. 172 00:10:15,050 --> 00:10:17,060 Hivyo wewe ni kusoma kwa upande wa kulia wa ishara sawa. 173 00:10:17,060 --> 00:10:20,290 Hebu mkazo tu upande wa kushoto, tu juu ya int * x. 174 00:10:20,290 --> 00:10:24,700 Hii haina "kutangaza" pointer, lakini sasa wacha kupiga mbizi katika undani kwa ufafanuzi huo. 175 00:10:24,700 --> 00:10:28,330 Je, hiyo concretely, kitaalam maana? Yeah? 176 00:10:28,330 --> 00:10:31,940 [Mwanafunzi jibu, unintelligible] 177 00:10:31,940 --> 00:10:35,090 Sawa. Ni kuandaa kuokoa anuani katika kumbukumbu. 178 00:10:35,090 --> 00:10:40,680 Nzuri. Na hebu kuchukua hatua hii moja zaidi; ni kutangaza variable, x, hiyo ni 32 bits. 179 00:10:40,680 --> 00:10:44,440 Na mimi najua ni 32 bits kwa sababu -? 180 00:10:44,440 --> 00:10:47,390 Siyo kwa sababu ni int, kwa sababu ni pointer katika kesi hii. 181 00:10:47,390 --> 00:10:49,650 Bahati mbaya kuwa ni moja na sawa na int, 182 00:10:49,650 --> 00:10:51,970 lakini ukweli kwamba kuna nyota kuna maana ya hii ni pointer 183 00:10:51,970 --> 00:10:57,300 na katika appliance, kama na kompyuta wengi, lakini si wote, kuyatumia ni 32 bits. 184 00:10:57,300 --> 00:11:01,850 Juu ya vifaa za kisasa zaidi kama Macs karibuni, PC karibuni, unaweza kuwa na kuyatumia 64-bit, 185 00:11:01,850 --> 00:11:04,160 lakini katika appliance, mambo haya ni ya 32 bits. 186 00:11:04,160 --> 00:11:08,380 Hivyo tutaweza standardize juu ya hilo. Zaidi concretely, hadithi inakwenda kama ifuatavyo: 187 00:11:08,380 --> 00:11:10,820 Sisi "kutangaza" pointer; gani kwamba mean? 188 00:11:10,820 --> 00:11:12,810 Sisi kuandaa kuhifadhi anwani kumbukumbu. 189 00:11:12,810 --> 00:11:15,530 Hiyo ina maana gani? 190 00:11:15,530 --> 00:11:19,810 Sisi kujenga variable inayoitwa x kwamba inachukua hadi 32 bits 191 00:11:19,810 --> 00:11:23,810 kwamba hivi karibuni kuhifadhi anwani ya integer. 192 00:11:23,810 --> 00:11:26,470 Na kwamba pengine kuhusu kama sahihi kama tunaweza kupata. 193 00:11:26,470 --> 00:11:31,810 Ni faini ya kusonga mbele kwa kurahisisha dunia na kusema tu kutangaza pointer kuitwa x. 194 00:11:31,810 --> 00:11:35,380 Kutangaza pointer, lakini kutambua na kuelewa nini hasa kinachoendelea 195 00:11:35,380 --> 00:11:38,490 hata katika wale tu wahusika wachache. 196 00:11:38,490 --> 00:11:42,040 >> Sasa, hii ni karibu rahisi kidogo, hata kama ni kujieleza tena. 197 00:11:42,040 --> 00:11:48,160 Hivyo ni nini hii kufanya, kwamba ni yalionyesha sasa: "malloc (10 * sizeof (int));" Yeah? 198 00:11:48,160 --> 00:11:52,350 [Mwanafunzi jibu, unintelligible] 199 00:11:52,350 --> 00:11:58,250 Nzuri. Na mimi itabidi kuchukua ni pale. Ni kugawa chunk ya kumbukumbu kwa integers kumi. 200 00:11:58,250 --> 00:12:02,190 Na sasa hebu kupiga mbizi katika kidogo zaidi; ni kugawa chunk ya kumbukumbu kwa integers kumi. 201 00:12:02,190 --> 00:12:05,390 Nini malloc kisha kurudi? 202 00:12:05,390 --> 00:12:10,390 anuani ya chunk kwamba, au, zaidi concretely, anuani ya Byte kwanza ya chunk kwamba. 203 00:12:10,390 --> 00:12:14,080 Jinsi ndipo ninapokuwa, programu, kujua ambapo kwamba chunk ya ncha kumbukumbu? 204 00:12:14,080 --> 00:12:18,340 Mimi najua kuwa ni contiguous. Malloc, kwa ufafanuzi, nitakupa chunk contiguous ya kumbukumbu. 205 00:12:18,340 --> 00:12:21,240 Hakuna mapengo katika hilo. Unaweza kupata kila Byte katika chunk kwamba, 206 00:12:21,240 --> 00:12:26,760 nyuma kwa nyuma kwa nyuma, lakini jinsi gani mimi kujua ambapo mwisho wa hii chunk ya kumbukumbu ni? 207 00:12:26,760 --> 00:12:28,850 Wakati matumizi malloc? [Mwanafunzi jibu, unintelligible] Good. 208 00:12:28,850 --> 00:12:30,670 Huna. Una kukumbuka. 209 00:12:30,670 --> 00:12:35,960 Mimi na kukumbuka kwamba mimi kutumika thamani 10, na mimi si hata wanaonekana wamefanya hivyo hapa. 210 00:12:35,960 --> 00:12:41,000 Lakini Wajibu ni kabisa juu yangu. Strlen, ambayo tumekuwa kuwa kidogo kujitegemea juu kwa masharti, 211 00:12:41,000 --> 00:12:45,860 kazi tu kwa sababu ya hii mkataba wa kuwa \ 0 212 00:12:45,860 --> 00:12:48,840 au hii maalum nul tabia, NUL, mwisho wa kamba. 213 00:12:48,840 --> 00:12:51,740 Kuwa haina kushikilia kwa chunks tu holela wa kumbukumbu. 214 00:12:51,740 --> 00:12:58,590 Ni juu yako. Hivyo mstari 20, basi, kutenga chunk ya kumbukumbu 215 00:12:58,590 --> 00:13:02,590 kwamba wanaweza kuhifadhi integers kumi, na huweka anuani ya Byte kwanza 216 00:13:02,590 --> 00:13:05,610 ya kwamba chunk ya kumbukumbu katika x variable kuitwa. 217 00:13:05,610 --> 00:13:11,140 Ergo, ambayo ni pointer. Hivyo mstari 21, kwa bahati mbaya, ilikuwa ni makosa. 218 00:13:11,140 --> 00:13:16,110 Lakini kwanza, ni nini ni kufanya? Ni kusema duka katika eneo 10, 0 indexed, 219 00:13:16,110 --> 00:13:19,480 ya chunk ya kumbukumbu iitwayo x 0 thamani. 220 00:13:19,480 --> 00:13:21,510 >> Hivyo taarifa michache ya mambo ni kwenda juu. 221 00:13:21,510 --> 00:13:25,420 Hata ingawa x ni pointer, wanakumbuka kutoka wiki kadhaa zilizopita 222 00:13:25,420 --> 00:13:29,440 kwamba bado unaweza kutumia safu-style mraba bracket nukuu. 223 00:13:29,440 --> 00:13:36,180 Kwa sababu hiyo ni kweli mfupi mkono nukuu kwa hesabu zaidi cryptic-kuangalia pointer. 224 00:13:36,180 --> 00:13:40,320 ambapo tunataka kufanya kitu kama hii: Chukua x anuani, hoja spots 10 juu, 225 00:13:40,320 --> 00:13:44,550 kisha kwenda huko kwa kila anuani ni kuhifadhiwa katika eneo hilo. 226 00:13:44,550 --> 00:13:48,090 Lakini kusema ukweli, hii ni mauaji ya kusoma na kupata starehe na. 227 00:13:48,090 --> 00:13:52,900 Hivyo dunia kawaida anatumia mabano mraba tu kwa sababu ni hivyo zaidi ya binadamu ya kirafiki ya kusoma. 228 00:13:52,900 --> 00:13:55,140 Lakini hiyo ni nini kweli kinachoendelea chini ya Hood; 229 00:13:55,140 --> 00:13:58,190 x ni anwani, si safu, per se. 230 00:13:58,190 --> 00:14:02,410 Hivyo hii ni hifadhi 0 katika eneo 10 katika x. 231 00:14:02,410 --> 00:14:06,120 Kwa nini hii ni mbaya? Yeah? 232 00:14:06,120 --> 00:14:17,370 [Mwanafunzi jibu, unintelligible] Hasa. 233 00:14:17,370 --> 00:14:21,100 Sisi tu zilizotengwa ints kumi, lakini sisi kuhesabu kutoka 0 wakati programu katika C, 234 00:14:21,100 --> 00:14:25,690 hivyo unaweza kupata 10 0 1 2 3 4 5 6 7 8 9, lakini si. 235 00:14:25,690 --> 00:14:30,270 Hivyo aidha mradi ni kwenda kosa seg au siyo. 236 00:14:30,270 --> 00:14:32,900 Lakini sisi si kweli kujua, hii ni aina ya tabia nondeterministic. 237 00:14:32,900 --> 00:14:35,600 Ni kweli inategemea kama sisi kupata bahati. 238 00:14:35,600 --> 00:14:40,650 Kama zinageuka kuwa mfumo wa uendeshaji haina akili kama mimi kutumia Byte ziada, 239 00:14:40,650 --> 00:14:43,360 hata ingawa haijatoa ni mimi, mpango wangu ili si ajali. 240 00:14:43,360 --> 00:14:46,780 Ni mbichi, ni Buggy, lakini unaweza kuona kuwa dalili, 241 00:14:46,780 --> 00:14:48,960 au unaweza kuona mara moja tu kwa wakati. 242 00:14:48,960 --> 00:14:51,230 Lakini ukweli ni kwamba mdudu ni, kwa kweli, kuna. 243 00:14:51,230 --> 00:14:54,320 Na ni kweli tatizo kama umefanya imeandikwa mpango kwamba unataka kuwa sahihi, 244 00:14:54,320 --> 00:14:58,840 kwamba ve kuuzwa mpango kwamba watu ni kutumia kwamba kila mara moja kwa wakati shambulio 245 00:14:58,840 --> 00:15:02,450 kwa sababu, bila shaka, hii si nzuri. Kwa kweli, kama una simu Android au iPhone 246 00:15:02,450 --> 00:15:05,550 na wewe download programu siku hizi, kama wameweza milele alikuwa App tu kujiondoa, 247 00:15:05,550 --> 00:15:10,040 ghafla ni kutoweka, hiyo ni karibu daima matokeo ya baadhi ya suala kumbukumbu-kuhusiana, 248 00:15:10,040 --> 00:15:12,830 ambapo programu Star up na dereferenced pointer 249 00:15:12,830 --> 00:15:18,670 kwamba yeye au yeye anapaswa kuwa na matokeo ya iOS au Android ni kuua tu mpango kabisa 250 00:15:18,670 --> 00:15:23,080 badala ya tabia hatarishi undefined au aina fulani ya mapatano ya usalama. 251 00:15:23,080 --> 00:15:25,950 >> Kuna moja nyingine mdudu katika mpango huu badala ya moja huu. 252 00:15:25,950 --> 00:15:30,180 Nini kingine mimi Star up katika mpango huu? 253 00:15:30,180 --> 00:15:32,740 Nimekuwa si mazoezi kile nimepata njema. Yeah? 254 00:15:32,740 --> 00:15:34,760 [Mwanafunzi jibu, unintelligible] Good. 255 00:15:34,760 --> 00:15:36,880 Mimi si huru kumbukumbu. Hivyo utawala wa kidole gumba sasa 256 00:15:36,880 --> 00:15:43,150 ina kuwa wakati wowote wewe piga malloc, lazima kuwaita bure wakati wewe ni kufanyika kwa kutumia kwamba kumbukumbu. 257 00:15:43,150 --> 00:15:45,610 Sasa, wakati nataka huru kumbukumbu hii? 258 00:15:45,610 --> 00:15:49,780 Pengine, kuchukua line hii ya kwanza ilikuwa sahihi, napenda wanataka kufanya hivyo hapa. 259 00:15:49,780 --> 00:15:55,710 Sababu sikuweza, kwa mfano, kufanya hivyo chini hapa. Kwa nini? 260 00:15:55,710 --> 00:15:57,860 Tu nje ya upeo. Hivyo hata kama sisi ni kuzungumza juu ya kuyatumia, 261 00:15:57,860 --> 00:16:04,830 hii ni wiki 2 au 3 suala hilo, ambapo x ni tu katika wigo ndani ya braces curly ambapo ilikuwa alitangaza. 262 00:16:04,830 --> 00:16:11,000 Hivyo wewe dhahiri hayawezi kumwondolea pale. Nafasi yangu tu ya bure ni takribani baada ya mstari 21. 263 00:16:11,000 --> 00:16:15,170 Hii ni programu ya haki rahisi, ilikuwa haki rahisi mara moja aina ya amefungwa akili yako 264 00:16:15,170 --> 00:16:17,870 kuzunguka kile anachokifanya mpango, ambapo makosa walikuwa. 265 00:16:17,870 --> 00:16:20,500 Na hata kama hakuwa na kuona kwa mara ya kwanza, hopefully ni kidogo dhahiri sasa 266 00:16:20,500 --> 00:16:23,870 kwamba makosa hayo ni pretty urahisi na kutatuliwa kwa urahisi kufanywa. 267 00:16:23,870 --> 00:16:28,720 Lakini wakati mpango ni zaidi ya 12 mistari ya muda mrefu, ni 50 mistari ya muda mrefu, 100 mistari ya muda mrefu, 268 00:16:28,720 --> 00:16:31,150 kutembea kwa njia ya kificho wako mstari kwa mstari, kufikiri kwa njia ya mantiki, 269 00:16:31,150 --> 00:16:35,110 inawezekana lakini si hasa fun kufanya, daima kutafuta mende, 270 00:16:35,110 --> 00:16:38,340 na pia ni vigumu kufanya hivyo, na kwamba sababu ya chombo kama Valgrind lipo. 271 00:16:38,340 --> 00:16:40,900 Hebu kwenda mbele na kufanya hili: napenda kufungua terminal yangu dirisha, 272 00:16:40,900 --> 00:16:45,400 na basi mimi si kukimbia tu kumbukumbu, kwa sababu kumbukumbu inaonekana kuwa faini. 273 00:16:45,400 --> 00:16:49,180 Nina kupata bahati. Kwenda Byte kwamba ziada mwishoni mwa safu 274 00:16:49,180 --> 00:16:51,060 haionekani kuwa pia tatizo. 275 00:16:51,060 --> 00:16:56,370 Lakini basi mimi, hata hivyo, kufanya kuangalia sanity, ambayo ina maana ya kuangalia 276 00:16:56,370 --> 00:16:58,320 kama hii ni kweli sahihi. 277 00:16:58,320 --> 00:17:04,690 >> Basi hebu kufanya valgrind-v - leak-kuangalia = kamili, 278 00:17:04,690 --> 00:17:07,520 na kisha jina la mpango katika kesi hii ni kumbukumbu, si a.out. 279 00:17:07,520 --> 00:17:10,760 Hivyo basi mimi kwenda mbele na kufanya hili. Hit Ingiza. 280 00:17:10,760 --> 00:17:14,109 Mpendwa Mungu. Hii ni pato lake, na hii ni kile alluded mapema. 281 00:17:14,109 --> 00:17:17,550 Lakini, kama wewe kujifunza kusoma kwa njia zote za nonsense hapa, 282 00:17:17,550 --> 00:17:20,760 zaidi ya hii ni uchunguzi pato kwamba si kwamba kuvutia. 283 00:17:20,760 --> 00:17:24,829 Nini jicho lako kweli anataka kuwa na kuangalia kwa ni kutaja ya makosa au batili. 284 00:17:24,829 --> 00:17:26,800 Maneno kwamba zinaonyesha matatizo. 285 00:17:26,800 --> 00:17:29,340 Na kwa kweli, hebu angalia nini kinaendelea makosa chini hapa. 286 00:17:29,340 --> 00:17:35,230 Nina muhtasari wa aina fulani, "katika matumizi ya exit. 40 ka katika vitalu 1" 287 00:17:35,230 --> 00:17:38,750 Mimi nina uhakika nini kuzuia ni bado, lakini 40 bytes 288 00:17:38,750 --> 00:17:41,260 kweli anahisi kama mimi naweza kufikiri ambapo ule unaokuja kutoka. 289 00:17:41,260 --> 00:17:45,030 40 bytes. Kwa nini ni ka 40 katika matumizi ya exit? 290 00:17:45,030 --> 00:17:48,780 Na hasa zaidi, kama sisi kitabu chini hapa, 291 00:17:48,780 --> 00:17:54,520 mbona mimi dhahiri waliopotea ka 40? Yeah? 292 00:17:54,520 --> 00:17:59,520 [Mwanafunzi jibu, unintelligible] Perfect. Yeah, kwa uhakika. 293 00:17:59,520 --> 00:18:03,540 Kulikuwa kumi integers, na kila mmoja wa wale ni ukubwa wa bits 4, au 32, 294 00:18:03,540 --> 00:18:08,300 hivyo nimekuwa waliopotea ka just 40 kwa sababu, kama wewe mapendekezo, mimi si kuitwa bure. 295 00:18:08,300 --> 00:18:13,460 Hiyo ni moja mdudu, na sasa hebu angalia chini kidogo zaidi na kuona ijayo na hii, 296 00:18:13,460 --> 00:18:16,900 "Batili kuandika ukubwa wa 4." Sasa ni nini hii? 297 00:18:16,900 --> 00:18:21,150 Anuani hii ni walionyesha nini msingi nukuu, inaonekana? 298 00:18:21,150 --> 00:18:23,640 Hii ni hexadesimoli, na wakati wowote unaweza kuona idadi kuanzia na 0x, 299 00:18:23,640 --> 00:18:29,410 maana hexadesimoli, ambayo sisi alifanya njia ya nyuma katika, nadhani, pset 0 wa sehemu ya maswali, 300 00:18:29,410 --> 00:18:34,090 ambayo ilikuwa tu kufanya zoezi warmup, kuwabadili decimal kwa hex kwa binary na kadhalika. 301 00:18:34,090 --> 00:18:39,220 Hexadesimoli, tu kwa mkataba wa binadamu, ni kawaida kutumika kuwakilisha kuyatumia 302 00:18:39,220 --> 00:18:41,570 au, kwa ujumla zaidi, anwani. Ni tu mkataba, 303 00:18:41,570 --> 00:18:45,340 kwa sababu ni rahisi kidogo kusoma, ni zaidi kidogo kuliko Compact kitu kama decimal, 304 00:18:45,340 --> 00:18:47,720 na kisha ni bure kwa ajili ya wengi binadamu kutumia. 305 00:18:47,720 --> 00:18:50,840 Hivyo sasa nini maana ya hii? Naam, inaonekana kama kuna kuandika batili 306 00:18:50,840 --> 00:18:54,480 ya ukubwa 4 kwenye mstari 21 ya memory.c. 307 00:18:54,480 --> 00:18:59,180 Basi hebu kwenda nyuma ya mstari 21, na kwa kweli, hapa ni kwamba kuandika batili. 308 00:18:59,180 --> 00:19:02,640 Hivyo Valgrind si kwenda kabisa kushikilia mkono wangu na kuniambia nini fix ni, 309 00:19:02,640 --> 00:19:05,520 lakini ni kuchunguza kwamba mimi nina kufanya kuandika batili. 310 00:19:05,520 --> 00:19:08,800 Mimi kugusa ka 4 kwamba nisiwe, na inaonekana kwamba kwa sababu, 311 00:19:08,800 --> 00:19:13,960 kama wewe alisema, mimi nina kufanya [10] badala ya [9] Upeo 312 00:19:13,960 --> 00:19:16,660 au [0] au kitu katika kati. 313 00:19:16,660 --> 00:19:19,690 Kwa Valgrind, kutambua wakati wowote wewe ni sasa kuandika mpango 314 00:19:19,690 --> 00:19:24,190 kwamba anatumia kuyatumia na anatumia kumbukumbu, na malloc zaidi hasa, 315 00:19:24,190 --> 00:19:27,080 dhahiri kupata katika tabia ya kuendesha kwa muda mrefu 316 00:19:27,080 --> 00:19:30,890 lakini kwa urahisi sana kunakiliwa na pasted amri ya Valgrind 317 00:19:30,890 --> 00:19:32,650 kuona kama kuna baadhi ya makosa katika huko. 318 00:19:32,650 --> 00:19:34,820 Na utakuwa ni balaa kila wakati unaweza kuona pato, 319 00:19:34,820 --> 00:19:39,430 lakini tu Hazrat kupitia kuibua wote wa pato na kuona kama unaweza kuona inataja wa makosa 320 00:19:39,430 --> 00:19:43,190 au maonyo au batili au kupotea. 321 00:19:43,190 --> 00:19:46,200 Yoyote maneno kwamba sauti kama wewe Star up mahali fulani. 322 00:19:46,200 --> 00:19:48,580 Hivyo kutambua kwamba ni chombo kipya katika toolkit yako. 323 00:19:48,580 --> 00:19:51,270 >> Sasa siku ya Jumatatu, tulikuwa na rundo zima la folks kuja hapa 324 00:19:51,270 --> 00:19:53,150 na kuwakilisha dhana ya orodha zinazoungwa. 325 00:19:53,150 --> 00:20:00,970 Na sisi ilianzisha orodha wanaohusishwa kama ufumbuzi wa tatizo nini? 326 00:20:00,970 --> 00:20:04,590 Yeah? [Mwanafunzi jibu, unintelligible] Good. 327 00:20:04,590 --> 00:20:06,530 Arrays hawezi kuwa na kumbukumbu aliongeza kwao. 328 00:20:06,530 --> 00:20:09,440 Kama wewe kutenga safu ya kawaida 10, kwamba ni yote wewe kupata. 329 00:20:09,440 --> 00:20:13,690 Unaweza kuita kazi kama realloc kama awali kuitwa malloc, 330 00:20:13,690 --> 00:20:17,580 na kwamba unaweza kujaribu kukua safu kama kuna nafasi kuelekea mwisho wa 331 00:20:17,580 --> 00:20:21,610 kwamba hakuna mtu mwingine ni kutumia, na kama kuna si, itakuwa tu kupata wewe chunk kubwa mahali pengine. 332 00:20:21,610 --> 00:20:25,040 Lakini basi itakuwa nakala yote ya ka wale katika safu mpya. 333 00:20:25,040 --> 00:20:28,310 Hii inaonekana kama ufumbuzi sahihi kabisa. 334 00:20:28,310 --> 00:20:34,790 Kwa nini hii ni unattractive? 335 00:20:34,790 --> 00:20:36,940 I mean ni kazi, binadamu kuwa wametatua tatizo hili. 336 00:20:36,940 --> 00:20:40,710 Kwa nini tunahitaji kutatua Jumatatu na orodha wanaohusishwa? Yeah? 337 00:20:40,710 --> 00:20:44,060 [Mwanafunzi jibu, unintelligible] Ni inaweza kuchukua muda mrefu. 338 00:20:44,060 --> 00:20:49,260 Kwa kweli, wakati wowote wewe ni wito malloc au realloc au calloc, ambayo bado mwingine mmoja, 339 00:20:49,260 --> 00:20:52,470 wakati wowote, mpango, ni kuzungumza na mfumo wa uendeshaji, 340 00:20:52,470 --> 00:20:54,310 wewe huwa na kupunguza mpango chini. 341 00:20:54,310 --> 00:20:57,470 Na kama wewe ni kufanya aina hii ya mambo katika tanzi, wewe ni kweli kupunguza mambo chini. 342 00:20:57,470 --> 00:21:00,740 Wewe hutaenda kwa taarifa hii kwa rahisi ya "hello dunia" programu aina, 343 00:21:00,740 --> 00:21:04,300 lakini katika mipango kubwa sana, kuuliza mfumo wa uendeshaji tena na tena kwa kumbukumbu 344 00:21:04,300 --> 00:21:07,520 au kutoa ni nyuma tena na tena huelekea si kwa kuwa ni jambo jema. 345 00:21:07,520 --> 00:21:11,210 Plus, ni tu aina ya kielimu - ni kupoteza kamili ya muda. 346 00:21:11,210 --> 00:21:16,490 Mbona kutenga zaidi na zaidi ya kumbukumbu, hatari kuiga kila kitu ndani ya safu mpya, 347 00:21:16,490 --> 00:21:21,980 kama una mbadala ambayo inakuwezesha kutenga tu kama kumbukumbu kubwa zaidi kama wewe kweli wanahitaji? 348 00:21:21,980 --> 00:21:24,130 Hivyo kuna pluses na minuses katika hapa. 349 00:21:24,130 --> 00:21:26,730 Moja ya pluses sasa ni kwamba tuna mabadiliko. 350 00:21:26,730 --> 00:21:29,100 Haijalishi ambapo chunks ya kumbukumbu ni kwamba ni bure, 351 00:21:29,100 --> 00:21:32,070 Naweza tu ya aina ya kujenga makombo haya mkate kupitia kuyatumia 352 00:21:32,070 --> 00:21:34,470 kwa kamba wanaohusishwa wangu wote orodha pamoja. 353 00:21:34,470 --> 00:21:36,470 Lakini mimi kulipa angalau moja ya bei. 354 00:21:36,470 --> 00:21:40,060 >> Nifanye uwachane katika kupata orodha wanaohusishwa? 355 00:21:40,060 --> 00:21:42,470 Yeah? [Mwanafunzi jibu, unintelligible] Good. 356 00:21:42,470 --> 00:21:45,650 Unahitaji kumbukumbu zaidi. Sasa mimi wanahitaji nafasi kwa kuyatumia haya, 357 00:21:45,650 --> 00:21:47,900 na katika kesi ya orodha hii super rahisi wanaohusishwa 358 00:21:47,900 --> 00:21:51,410 kwamba ni tu kujaribu kuhifadhi integers, ambayo ni 4 ka, sisi kuendelea kusema 359 00:21:51,410 --> 00:21:54,240 vizuri, pointer ni 4 ka, hivyo sasa nimepata literally mara mbili 360 00:21:54,240 --> 00:21:57,290 kiasi cha kumbukumbu nahitaji tu kuhifadhi orodha hii. 361 00:21:57,290 --> 00:21:59,680 Lakini tena, hii ni mara kwa mara katika tradeoff sayansi ya kompyuta 362 00:21:59,680 --> 00:22:03,440 kati ya muda na nafasi na maendeleo, juhudi na rasilimali nyingine. 363 00:22:03,440 --> 00:22:06,630 Nini mwingine upande wa chini ya kutumia orodha wanaohusishwa? Yeah? 364 00:22:06,630 --> 00:22:10,150 [Mwanafunzi jibu, unintelligible] 365 00:22:10,150 --> 00:22:12,600 Nzuri. Kama si rahisi kupata. Tunaweza tena kujiinua 366 00:22:12,600 --> 00:22:15,530 wiki kanuni 0 kama kugawanya na kushinda. 367 00:22:15,530 --> 00:22:18,220 Na hasa zaidi, binary tafuta. Kwa sababu hata kama sisi binadamu 368 00:22:18,220 --> 00:22:20,400 unaweza kuona takribani ambapo katikati ya orodha hii ni, 369 00:22:20,400 --> 00:22:25,840 kompyuta tu anajua kwamba hii orodha wanaohusishwa kuanza saa anuani kuitwa kwanza. 370 00:22:25,840 --> 00:22:28,250 Na kwamba 0x123 au kitu kama hicho. 371 00:22:28,250 --> 00:22:30,990 Na njia pekee ya mpango unaweza kupata kipengele katikati 372 00:22:30,990 --> 00:22:33,350 ni kweli kutafuta orodha nzima. 373 00:22:33,350 --> 00:22:35,500 Na hata basi, ni literally inapaswa kutafuta orodha nzima kwa sababu 374 00:22:35,500 --> 00:22:38,950 hata mara moja wewe kufikia katikati ya kipengele kwa kufuata kuyatumia, 375 00:22:38,950 --> 00:22:42,380 wewe, mpango, hawana wazo jinsi ya muda mrefu orodha hii ni, uwezekano, 376 00:22:42,380 --> 00:22:45,250 mpaka hit mwisho wake, na jinsi gani unajua programmatically 377 00:22:45,250 --> 00:22:48,600 kwamba uko katika mwisho wa orodha wanaohusishwa? 378 00:22:48,600 --> 00:22:51,120 Kuna maalum null pointer, hivyo tena, mkataba. 379 00:22:51,120 --> 00:22:53,870 Badala ya kutumia hii pointer, sisi dhahiri hawataki kuwa ni baadhi ya thamani ya takataka 380 00:22:53,870 --> 00:22:57,750 akizungumzia hatua mbali mahali fulani; sisi nataka kuwa mkono chini, null, 381 00:22:57,750 --> 00:23:01,530 hivyo kwamba tuna hii terminus katika muundo huu data hivyo tunajua ambapo ni mwisho. 382 00:23:01,530 --> 00:23:03,410 >> Nini kama tunataka kuendesha hii? 383 00:23:03,410 --> 00:23:05,980 Sisi gani zaidi ya huu kuibua, na kwa binadamu, 384 00:23:05,980 --> 00:23:07,630 lakini nini kama tunataka kufanya insertion? 385 00:23:07,630 --> 00:23:12,360 Hivyo orodha ya awali ilikuwa 9, 17, 20, 22, 29, 34. 386 00:23:12,360 --> 00:23:16,730 Nini kama sisi basi alitaka nafasi malloc kwa idadi 55, nodi kwa ajili yake, 387 00:23:16,730 --> 00:23:20,730 na kisha tunataka Insert 55 katika orodha tu kama tulivyofanya Jumatatu? 388 00:23:20,730 --> 00:23:23,690 Tutafanyaje hili? Naam, Anita alikuja na yeye kimsingi kutembea orodha. 389 00:23:23,690 --> 00:23:27,500 Alianza katika kipengele kwanza, kisha ya pili, pili, pili, pili, pili. 390 00:23:27,500 --> 00:23:29,500 Hatimaye hit mkono wa kushoto njia yote chini 391 00:23:29,500 --> 00:23:34,480 na barabara oh, hii ni null. Basi nini pointer ghiliba zinahitajika kufanyika? 392 00:23:34,480 --> 00:23:37,980 mtu ambaye alikuwa juu ya mwisho, idadi 34, zinahitajika mkono wake wa kushoto alimfufua 393 00:23:37,980 --> 00:23:46,220 kwa uhakika ya 55, 55 zinahitajika mkono wao wa kushoto akizungumzia chini kuwa mpya null Terminator. Done. 394 00:23:46,220 --> 00:23:49,540 Pretty rahisi Insert 55 katika orodha Iliyopangwa. 395 00:23:49,540 --> 00:23:51,800 Na jinsi inaweza hii kuangalia? 396 00:23:51,800 --> 00:23:55,690 >> Hebu kwenda mbele na kufungua baadhi mfano code hapa. 397 00:23:55,690 --> 00:23:58,120 Mimi itabidi kufungua gedit, na napenda kufungua files mbili kwanza. 398 00:23:58,120 --> 00:24:02,050 Moja ni list1.h, na napenda tu kuwakumbusha kwamba hii ilikuwa chunk ya maadili ya 399 00:24:02,050 --> 00:24:04,920 kwamba sisi kutumika kuwakilisha nodi. 400 00:24:04,920 --> 00:24:13,040 nodi ina wawili int kuitwa n na pointer iitwayo ijayo kwamba tu pointi kwa Kilichofuata katika orodha. 401 00:24:13,040 --> 00:24:15,450 Hiyo ni sasa katika faili h.. Kwa nini? 402 00:24:15,450 --> 00:24:19,090 Kuna mkataba huu, na sisi si kuchukuliwa kwa faida ya kiasi hiki kikubwa wenyewe, 403 00:24:19,090 --> 00:24:22,220 lakini mtu ambaye aliandika kazi printf na nyingine 404 00:24:22,220 --> 00:24:27,150 alitoa kama zawadi kwa ulimwengu wote wa kazi hizo kwa kuandika faili inayoitwa stdio.h. 405 00:24:27,150 --> 00:24:30,950 Na kisha kuna string.h, na kisha kuna map.h, na kuna files haya yote h 406 00:24:30,950 --> 00:24:34,410 kwamba unaweza kuwa na kuonekana au kutumika wakati wa muda imeandikwa na watu wengine. 407 00:24:34,410 --> 00:24:38,470 Kawaida katika wale h files. Ni mambo tu kama typedefs 408 00:24:38,470 --> 00:24:42,310 au maazimio ya aina desturi au maazimio ya constants. 409 00:24:42,310 --> 00:24:47,890 Huwezi kuweka utekelezaji kazi 'katika files header. 410 00:24:47,890 --> 00:24:50,570 Kuweka, badala yake, prototypes tu wao. 411 00:24:50,570 --> 00:24:53,050 Wewe kuweka mambo unataka kushiriki na duniani wanahitaji nini 412 00:24:53,050 --> 00:24:55,640 ili kukusanya kanuni zao. Hivyo tu kwa kuingia katika tabia hii, 413 00:24:55,640 --> 00:24:59,110 tuliamua kufanya kitu kimoja. Kuna si sana katika list1.h, 414 00:24:59,110 --> 00:25:02,070 lakini tumekuwa kuweka kitu ambayo inaweza kuwa ya manufaa kwa watu katika ulimwengu 415 00:25:02,070 --> 00:25:05,030 ambao wanataka kutumia orodha yetu zilizounganishwa utekelezaji. 416 00:25:05,030 --> 00:25:08,040 Sasa, katika list1.c, mimi si kwenda kwa jambo hili zima 417 00:25:08,040 --> 00:25:11,390 kwa sababu ni kidogo kwa muda mrefu, programu hii, lakini hebu kukimbia kweli haraka katika haraka. 418 00:25:11,390 --> 00:25:15,720 Hebu kukusanya list1, napenda kisha kukimbia list1, na kile utaona ni 419 00:25:15,720 --> 00:25:18,070 tumekuwa simulated rahisi kidogo mpango hapa 420 00:25:18,070 --> 00:25:20,990 ambayo inaenda naomba kuongeza na kuondoa idadi ya orodha. 421 00:25:20,990 --> 00:25:24,310 Hivyo basi mimi kwenda mbele na aina 3 kwa 3 chaguo menu. 422 00:25:24,310 --> 00:25:27,880 Mimi nataka kuingiza idadi - wacha kufanya idadi ya kwanza, ambayo ilikuwa 9, 423 00:25:27,880 --> 00:25:30,550 na sasa mimi nina aliiambia orodha ni sasa 9. 424 00:25:30,550 --> 00:25:33,760 Hebu kwenda mbele na kufanya mwingine insertion, hivyo mimi hit menu chaguo 3. 425 00:25:33,760 --> 00:25:36,760 Nini idadi mimi nataka Insert? 17. 426 00:25:36,760 --> 00:25:39,220 Kuingia. Na mimi itabidi kufanya moja tu zaidi. 427 00:25:39,220 --> 00:25:41,720 Hebu Insert namba 22. 428 00:25:41,720 --> 00:25:45,850 Hivyo tuna mwanzo wa orodha wanaohusishwa kwamba tulikuwa katika fomu slide wakati iliyopita. 429 00:25:45,850 --> 00:25:48,740 Jinsi ni insertion hii kwa kweli yanatokea? 430 00:25:48,740 --> 00:25:52,000 Hakika, 22 ni sasa mwisho wa orodha. 431 00:25:52,000 --> 00:25:55,050 Hivyo hadithi tunaambiwa juu ya hatua ya juu ya Jumatatu na recapped tu sasa 432 00:25:55,050 --> 00:25:57,460 lazima kweli kuwa kinachotokea katika code. 433 00:25:57,460 --> 00:25:59,700 Hebu tuangalie. Hebu kitabu chini katika faili hii. 434 00:25:59,700 --> 00:26:01,720 Tutaweza Gloss juu ya baadhi ya kazi, 435 00:26:01,720 --> 00:26:05,630 lakini tutaweza kwenda chini, wanasema, kazi Insert. 436 00:26:05,630 --> 00:26:11,720 >> Hebu angalia jinsi sisi kwenda juu ya inserting nodi mpya katika orodha hii zinazoungwa. 437 00:26:11,720 --> 00:26:14,550 Ambapo ni orodha alitangaza? Naam, hebu kitabu njia yote hadi saa ya juu, 438 00:26:14,550 --> 00:26:19,970 na taarifa kwamba orodha yangu wanaohusishwa ni kimsingi alitangaza kama pointer moja kwamba awali null. 439 00:26:19,970 --> 00:26:23,180 Basi, mimi nina kutumia variable kimataifa hapa, ambayo kwa ujumla tumekuwa alihubiri dhidi ya 440 00:26:23,180 --> 00:26:25,280 kwa sababu inafanya code yako messy kidogo ili kudumisha, 441 00:26:25,280 --> 00:26:29,080 ni aina ya wavivu, kwa kawaida, lakini si wavivu na si vibaya na si mbaya 442 00:26:29,080 --> 00:26:33,660 kama mpango wako lengo pekee katika maisha ni kuiga moja zilizounganishwa orodha. 443 00:26:33,660 --> 00:26:35,460 Ambayo ni sawa kabisa sisi ni kufanya. 444 00:26:35,460 --> 00:26:39,100 Hivyo badala ya kutangaza hii katika kuu na kisha kuwa na kupita kwa kila kazi 445 00:26:39,100 --> 00:26:42,640 tumekuwa yaliyoandikwa katika mpango huu, sisi badala kutambua oh, hebu tu kufanya hivyo kimataifa 446 00:26:42,640 --> 00:26:47,060 sababu lengo zima la mpango huu ni kuonyesha moja na moja tu wanaohusishwa orodha. 447 00:26:47,060 --> 00:26:50,700 Hivyo kwamba anahisi sawa. Hapa ni prototypes wangu, na sisi si kwenda kwa yote haya, 448 00:26:50,700 --> 00:26:55,800 lakini mimi aliandika kazi ya kufuta, kazi kupata, kazi Insert, na kazi tindanga. 449 00:26:55,800 --> 00:26:59,080 Lakini hebu sasa kwenda nyuma chini na kazi Insert 450 00:26:59,080 --> 00:27:01,490 na kuona jinsi hii moja kazi hapa. 451 00:27:01,490 --> 00:27:09,940 Insert ni juu ya mstari - hapa sisi kwenda. 452 00:27:09,940 --> 00:27:12,850 Ingiza. Hivyo haina kuchukua hoja yoyote, kwa sababu sisi ni kwenda kuuliza 453 00:27:12,850 --> 00:27:15,930 ndani ya mtumiaji wa kazi hii kwa idadi wanataka Insert. 454 00:27:15,930 --> 00:27:19,410 Lakini kwanza, sisi kujiandaa ili kuwapa baadhi ya nafasi. 455 00:27:19,410 --> 00:27:22,050 Hii ni aina ya nakala na kuweka mfano kutoka nyingine. 456 00:27:22,050 --> 00:27:25,110 Katika kesi hiyo, tulikuwa kugawa int; wakati huu tuko kugawa nodi. 457 00:27:25,110 --> 00:27:27,910 Mimi si kweli kumbuka jinsi wengi ka nodi ni, lakini hiyo ni nzuri. 458 00:27:27,910 --> 00:27:30,460 Sizeof wanaweza kufikiri kuwa nje kwa ajili yangu. 459 00:27:30,460 --> 00:27:33,340 Na kwa nini mimi kuangalia kwa null katika mstari 120? 460 00:27:33,340 --> 00:27:37,530 Je, inaweza kwenda vibaya katika mstari 119? Yeah? 461 00:27:37,530 --> 00:27:40,530 [Mwanafunzi jibu, unintelligible] 462 00:27:40,530 --> 00:27:43,440 Nzuri. Tu inaweza kuwa kesi kwamba nimepata aliuliza kwa kumbukumbu sana 463 00:27:43,440 --> 00:27:47,020 au kitu vibaya na mfumo wa uendeshaji haina ka kutosha kutoa yangu, 464 00:27:47,020 --> 00:27:50,640 hivyo ni ishara sana kwa kurudi null, na kama si kuangalia kwa kuwa 465 00:27:50,640 --> 00:27:54,710 na mimi tu upofu kuendelea kutumia anuani wakarudi, inaweza kuwa null. 466 00:27:54,710 --> 00:27:58,400 Ni inaweza kuwa baadhi ya thamani haijulikani; si jambo zuri isipokuwa mimi - 467 00:27:58,400 --> 00:28:00,590 kweli si kuwa thamani haijulikani. Ni inaweza kuwa null, hivyo sitaki 468 00:28:00,590 --> 00:28:02,550 dhuluma hiyo na kuhatarisha dereferencing yake. 469 00:28:02,550 --> 00:28:07,410 Kama kwamba hutokea, mimi tu kurudi na tutaweza kujifanya kama sikuweza kupata nyuma yoyote kumbukumbu wakati wote. 470 00:28:07,410 --> 00:28:12,270 >> Vinginevyo, mimi kuwaambia mtumiaji nipe namba Insert, mimi kuwaita rafiki yetu ya zamani GetInt, 471 00:28:12,270 --> 00:28:15,530 na kisha hii ilikuwa syntax mpya sisi ilianzisha Jumatatu. 472 00:28:15,530 --> 00:28:20,320 'Newptr-> n' ina maana kuchukua anuani kwamba walipewa kwa malloc 473 00:28:20,320 --> 00:28:23,490 ambayo inawakilisha Byte kwanza ya kitu mpya wa nodi, 474 00:28:23,490 --> 00:28:26,860 na kisha kwenda shamba iitwayo n. 475 00:28:26,860 --> 00:28:35,270 kidogo trivia swali: Hii ni sawa na mstari nini zaidi cryptic ya maadili? 476 00:28:35,270 --> 00:28:38,110 Jinsi mwingine inaweza nimeandika hii? Wanataka kuchukua kumchoma? 477 00:28:38,110 --> 00:28:41,480 [Mwanafunzi jibu, unintelligible] 478 00:28:41,480 --> 00:28:44,870 Nzuri. Kutumia n., Lakini siyo kabisa kama rahisi kama hii. 479 00:28:44,870 --> 00:28:47,090 Nifanye kwanza haja ya kufanya? [Mwanafunzi jibu, unintelligible] 480 00:28:47,090 --> 00:28:52,730 Nzuri. Mimi haja ya kufanya * newptr.n. 481 00:28:52,730 --> 00:28:55,610 Hivyo hii ni kusema pointer mpya ni wazi anuani. Kwa nini? 482 00:28:55,610 --> 00:28:59,520 Sababu ilikuwa akarudi na malloc. Newptr * akisema "kwenda huko," 483 00:28:59,520 --> 00:29:02,970 na kisha mara moja uko pale, basi unaweza kutumia zaidi ya ukoo n., 484 00:29:02,970 --> 00:29:05,730 lakini hii tu inaonekana kidogo ugly, hasa kama sisi binadamu ni kwenda 485 00:29:05,730 --> 00:29:10,360 kuteka kuyatumia kwa mishale wakati wote; dunia ina sanifu kwenye nukuu hii mshale, 486 00:29:10,360 --> 00:29:12,320 ambayo haina hasa kitu kimoja. 487 00:29:12,320 --> 00:29:16,070 Hivyo matumizi tu -> nukuu wakati kitu upande wa kushoto ni pointer. 488 00:29:16,070 --> 00:29:18,790 Vinginevyo, kama ni struct halisi, matumizi n.. 489 00:29:18,790 --> 00:29:25,800 Na kisha hii: Kwa nini mimi initialize newptr-> ijayo null? 490 00:29:25,800 --> 00:29:28,610 Hatutaki dangling kushoto mbali ya mwisho ya hatua. 491 00:29:28,610 --> 00:29:31,630 Tunataka hiyo unaelekea chini, ambayo ina maana ya mwisho wa orodha hii 492 00:29:31,630 --> 00:29:34,980 inaweza uwezekano wa kuwa kwenye nodi hii, hivyo sisi ni bora kuhakikisha kuwa ni null. 493 00:29:34,980 --> 00:29:38,460 Na, kwa ujumla, initializing vigezo au data yako wanachama na structs 494 00:29:38,460 --> 00:29:40,470 kwa kitu ni mazoezi mazuri. 495 00:29:40,470 --> 00:29:45,170 Just kuruhusu takataka kuwepo na kuendelea kuwepo kwa ujumla anapata shida katika 496 00:29:45,170 --> 00:29:48,650 kama wewe kusahau kufanya kitu baadaye. 497 00:29:48,650 --> 00:29:51,590 >> Hapa ni kesi chache. Hii, tena, ni kazi Insert, 498 00:29:51,590 --> 00:29:54,930 na jambo la kwanza mimi kuangalia kwa ni kama variable iitwayo ya kwanza, 499 00:29:54,930 --> 00:29:58,240 kwamba variable kimataifa ni null, kwamba maana hakuna orodha zinazoungwa. 500 00:29:58,240 --> 00:30:02,460 Sisi si kuingizwa idadi yoyote, hivyo ni trivial kuingiza idadi hii ya sasa 501 00:30:02,460 --> 00:30:05,240 katika orodha, kwa sababu tu ni wakati wa kuanza kwa orodha. 502 00:30:05,240 --> 00:30:08,100 Hivyo hii ilikuwa wakati Anita mara tu alisimama hapa peke yake, akijifanya 503 00:30:08,100 --> 00:30:11,390 hakuna mtu mwingine alikuwa hapa juu ya hatua mpaka sisi zilizotengwa nodi, 504 00:30:11,390 --> 00:30:13,940 kisha aliweza kunyanyua mkono wake kwa mara ya kwanza, 505 00:30:13,940 --> 00:30:17,420 kama kila mtu mwingine waliokuja juu ya hatua baada yake juu ya Jumatatu. 506 00:30:17,420 --> 00:30:22,900 Sasa hapa, hii ni hundi kidogo ambapo mimi kusema kama thamani ya nodi ya mwezi wa n 507 00:30:22,900 --> 00:30:27,370 ni 00:30:29,930 hiyo ina maana kuna orodha zilizounganishwa kwamba imeanza. 509 00:30:29,930 --> 00:30:32,330 Kuna angalau moja nodi katika orodha, lakini guy hii mpya 510 00:30:32,330 --> 00:30:37,230 ni kabla ya hivyo, hivyo tunahitaji kusonga mambo kote. 511 00:30:37,230 --> 00:30:43,450 Kwa maneno mengine, kama orodha imeanza na tu, hebu sema, 512 00:30:43,450 --> 00:30:48,100 idadi tu ya 17, kwamba ni - kwa kweli, tunaweza kufanya hili wazi zaidi. 513 00:30:48,100 --> 00:30:56,010 Kama sisi kuanza hadithi wetu na pointer hapa iitwayo ya kwanza, 514 00:30:56,010 --> 00:30:59,870 na mwanzoni ni null, na sisi Insert namba 9, 515 00:30:59,870 --> 00:31:02,510 namba 9 wazi ni mwanzo wa orodha. 516 00:31:02,510 --> 00:31:07,400 Basi hebu kujifanya sisi tu malloced anuani au namba 9 na kuiweka hapa. 517 00:31:07,400 --> 00:31:13,170 Kama ni ya kwanza 9 by default, tukio la kwanza sisi kujadiliwa tu ina maana uhakika hebu guy hii hapa, 518 00:31:13,170 --> 00:31:15,790 kuacha hii kama null; sasa tuna idadi 9. 519 00:31:15,790 --> 00:31:18,280 idadi ijayo tunataka Insert ni 17. 520 00:31:18,280 --> 00:31:22,420 17 ni zaidi ya hapa, hivyo sisi ni kwenda kufanya baadhi wanazidi mantiki kwa njia hii. 521 00:31:22,420 --> 00:31:26,060 Basi hebu badala yake, kabla ya sisi kufanya hivyo, hebu kujifanya kuwa tulitaka kuingiza namba 8. 522 00:31:26,060 --> 00:31:28,650 >> Hivyo tu kwa ajili ya urahisi, mimi nina kwenda kuteka hapa. 523 00:31:28,650 --> 00:31:30,760 Lakini kumbuka, malloc waiweke wengi mahali popote. 524 00:31:30,760 --> 00:31:33,460 Lakini kwa ajili ya kuchora, mimi itabidi kuweka hapa. 525 00:31:33,460 --> 00:31:38,440 Hivyo kujifanya nimekuwa tu zilizotengwa kwa ajili ya nodi namba 8, hii ni kwa default null. 526 00:31:38,440 --> 00:31:42,800 Nini sasa ina kutokea? michache ya mambo. 527 00:31:42,800 --> 00:31:47,090 Sisi alifanya hii kosa juu ya hatua ya Jumatatu ambapo sisi updated pointer kama hii, 528 00:31:47,090 --> 00:31:51,890 kisha alifanya hivyo, na kisha sisi alidai - sisi yatima kila mtu mwingine juu ya hatua. 529 00:31:51,890 --> 00:31:54,350 Kwa sababu wewe can't - utaratibu wa shughuli hapa ni muhimu, 530 00:31:54,350 --> 00:31:58,760 kwa sababu sasa tumekuwa wamepoteza 9 nodi kwamba ni aina ya yaliyo katika nafasi. 531 00:31:58,760 --> 00:32:01,150 Hivyo hii si njia ya haki juu ya Jumatatu. 532 00:32:01,150 --> 00:32:03,330 Sisi kwanza kufanya kitu kingine. 533 00:32:03,330 --> 00:32:06,280 hali ya dunia inaonekana kama hii. Awali, 8 imetengewa. 534 00:32:06,280 --> 00:32:10,550 Nini itakuwa njia bora ya inserting 8? 535 00:32:10,550 --> 00:32:14,720 Badala ya uppdatering hii pointer kwanza, tu update hii moja hapa badala yake. 536 00:32:14,720 --> 00:32:17,720 Hivyo tunahitaji mstari wa kanuni ambayo inaenda kugeuka tabia hii null 537 00:32:17,720 --> 00:32:22,020 ndani ya pointer halisi hiyo akionyesha nodi 9, 538 00:32:22,020 --> 00:32:27,970 na kisha tunaweza kwa usalama mabadiliko kwanza kwa uhakika katika guy hii hapa. 539 00:32:27,970 --> 00:32:31,330 Sasa tuna orodha, orodha wanaohusishwa, vipengele viwili. 540 00:32:31,330 --> 00:32:33,580 Na nini hii kwa kweli kuangalia kama hapa? 541 00:32:33,580 --> 00:32:36,900 Kama sisi kuangalia code, taarifa kwamba mimi tumefanya hasa ile. 542 00:32:36,900 --> 00:32:41,970 Nilivyosema newptr, na katika hadithi hii, newptr alikuwa akionyesha guy. 543 00:32:41,970 --> 00:32:45,520 >> Hivyo basi mimi kuteka jambo moja zaidi, na mimi wanapaswa kushoto kidogo zaidi ya chumba kwa ajili hii. 544 00:32:45,520 --> 00:32:48,540 Unisamehe kidogo kidogo kuchora. 545 00:32:48,540 --> 00:32:52,140 Guy Hii inaitwa newptr. 546 00:32:52,140 --> 00:32:57,940 Hiyo ni variable sisi alitangaza mistari michache kabla ya hapo, katika line - tu juu ya 25. 547 00:32:57,940 --> 00:33:03,430 Na ni akizungumzia 8. Hivyo wakati mimi kusema newptr-> ijayo, kwamba maana ya kwenda struct 548 00:33:03,430 --> 00:33:07,910 kwamba ni kuwa alisema katika na newptr, hivyo hapa sisi ni, kwenda huko. 549 00:33:07,910 --> 00:33:13,990 Kisha mshale ni kusema kupata shamba ijayo, na kisha = ni kusema kuweka thamani gani huko? 550 00:33:13,990 --> 00:33:17,280 thamani hiyo ilikuwa katika kwanza; thamani gani ilikuwa katika kwanza? 551 00:33:17,280 --> 00:33:21,930 Kwanza alikuwa akizungumzia nodi katika hili, hivyo kwamba maana hii lazima sasa kumweka kwenye nodi hii. 552 00:33:21,930 --> 00:33:25,660 Kwa maneno mengine, kile inaonekana angalau fujo ridiculous kwa mwandiko wangu, 553 00:33:25,660 --> 00:33:28,620 nini wazo rahisi ya kusonga tu mishale hizi karibu 554 00:33:28,620 --> 00:33:31,560 tafsiri ya kificho na mjengo tu hii moja. 555 00:33:31,560 --> 00:33:38,110 Hifadhi ni nini katika kwanza katika uwanja ijayo na kisha update nini kwanza kweli ni. 556 00:33:38,110 --> 00:33:40,900 Hebu kwenda mbele na kufunga-mbele kupitia baadhi ya hii, 557 00:33:40,900 --> 00:33:44,220 na kuangalia tu katika insertion hii mkia kwa sasa. 558 00:33:44,220 --> 00:33:51,210 Tuseme mimi kupata kwa uhakika ambapo mimi kupata kwamba shamba ya pili ya nodi baadhi ni null. 559 00:33:51,210 --> 00:33:53,410 Na katika hatua hii ya hadithi, undani kwamba mimi nina glossing juu ya 560 00:33:53,410 --> 00:33:58,170 ni kwamba nimepata ilianzisha mwingine pointer hapa juu katika mstari 142, mtangulizi pointer. 561 00:33:58,170 --> 00:34:01,320 Kimsingi, katika hatua hii ya hadithi, mara moja orodha anapata muda mrefu, 562 00:34:01,320 --> 00:34:04,800 Mimi aina ya haja ya kutembea kwa vidole viwili kwa sababu kama mimi kwenda mbali mno, 563 00:34:04,800 --> 00:34:08,219 kumbuka katika orodha moja-urefu, huwezi kurudi nyuma. 564 00:34:08,219 --> 00:34:13,659 Hivyo hii ni wazo la predptr kidole wangu wa kushoto, na newptr - si newptr. 565 00:34:13,659 --> 00:34:17,199 Mwingine pointer kwamba hapa ni kidole yangu nyingine, na mimi nina aina tu ya kutembea orodha. 566 00:34:17,199 --> 00:34:22,179 Hiyo ndiyo sababu kwamba ipo. Lakini hebu fikiria tu moja ya kesi rahisi hapa. 567 00:34:22,179 --> 00:34:26,620 Kama kwamba pointer wa shamba la pili ni null, nini maana mantiki? 568 00:34:26,620 --> 00:34:30,840 Kama wewe ni traversing orodha hii na wewe hit pointer null? 569 00:34:30,840 --> 00:34:35,780 Wewe ni mwisho wa orodha, na hivyo kanuni na kisha append hii moja ya ziada ya kipengele 570 00:34:35,780 --> 00:34:41,230 ni aina ya Intuitive itachukua kwamba nodi ambaye ijayo pointer ni null, 571 00:34:41,230 --> 00:34:46,120 hivyo hii sasa ni null, na mabadiliko hayo, ingawa, kwa kuwa na anwani ya node mpya. 572 00:34:46,120 --> 00:34:52,260 Hivyo sisi ni tu kuchora katika code mshale tulianzisha juu ya hatua kwa kuongeza mtu mkono wa kushoto. 573 00:34:52,260 --> 00:34:54,070 >> Na kesi ya kwamba mimi itabidi kukitikisa mikono yangu katika kwa sasa, 574 00:34:54,070 --> 00:34:58,020 tu kwa sababu nadhani ni rahisi kupata waliopotea wakati sisi kufanya hivyo katika hii aina ya mazingira, 575 00:34:58,020 --> 00:35:00,600 ni kuangalia kwa Infogande katika orodha ya katikati. 576 00:35:00,600 --> 00:35:03,220 Lakini tu intuitively, nini mahitaji ya kutokea kama unataka kufikiri 577 00:35:03,220 --> 00:35:06,600 ambapo idadi baadhi ni katikati ni una kutembea ni 578 00:35:06,600 --> 00:35:09,510 kwa kidole zaidi ya moja, zaidi ya moja pointer, 579 00:35:09,510 --> 00:35:12,920 takwimu nje ambapo ni kwa kuangalia ni kipengele 00:35:15,450 > Moja ya sasa, na mara moja kupata kwamba mahali, 581 00:35:15,450 --> 00:35:20,400 basi una kufanya aina hii ya mchezo shell ambapo wewe hoja kuyatumia kuzunguka kwa makini sana. 582 00:35:20,400 --> 00:35:23,850 Na kwamba jibu, kama Ningependa kwa sababu kwa njia hii nyumbani juu yako mwenyewe, 583 00:35:23,850 --> 00:35:28,340 majipu chini tu kwa mistari hii miwili ya kificho, lakini utaratibu wa wale mistari ni super muhimu. 584 00:35:28,340 --> 00:35:31,390 Kwa sababu kama wewe kuacha mkono wa mtu na kuongeza mtu mwingine ili makosa, 585 00:35:31,390 --> 00:35:34,580 tena, unaweza kuishia orphaning orodha. 586 00:35:34,580 --> 00:35:39,500 Kwa muhtasari zaidi conceptually, insertion katika mkia ni rahisi. 587 00:35:39,500 --> 00:35:42,940 insertion katika kichwa pia ni kiasi moja kwa moja, 588 00:35:42,940 --> 00:35:45,580 lakini unahitaji update pointer ziada wakati huu 589 00:35:45,580 --> 00:35:47,930 itapunguza idadi 5 katika orodha hapa, 590 00:35:47,930 --> 00:35:51,560 na kisha kuingizwa katika katikati inahusisha hata zaidi juhudi, 591 00:35:51,560 --> 00:35:56,130 kwa makini sana kuingiza idadi 20 katika eneo lake sahihi, 592 00:35:56,130 --> 00:35:58,350 ambayo ni kati ya 17 na 22. 593 00:35:58,350 --> 00:36:02,700 Hivyo haja ya kufanya kitu kama kuwa mwezi nodi 20 uhakika na 22, 594 00:36:02,700 --> 00:36:08,470 na kisha, pointer ambayo nodi ya mahitaji ya kuwa updated mara ya mwisho? 595 00:36:08,470 --> 00:36:10,630 Ni 17, kwa kweli kuingiza. 596 00:36:10,630 --> 00:36:14,080 Hivyo tena, mimi itabidi kuahirisha code halisi kwa ajili ya utekelezaji huo. 597 00:36:14,080 --> 00:36:17,280 >> Kwa mtazamo wa kwanza, ni kidogo mno, lakini ni kweli tu kitanzi usio 598 00:36:17,280 --> 00:36:21,770 hiyo looping, looping, looping, looping, na kuvunja haraka kama wewe hit pointer null, 599 00:36:21,770 --> 00:36:24,590 ambapo kiwango unaweza kufanya insertion zinazohitajika. 600 00:36:24,590 --> 00:36:30,960 Hii basi, ni mwakilishi wanaohusishwa orodha insertion code. 601 00:36:30,960 --> 00:36:34,590 Hiyo ilikuwa ni aina ya mengi, na anahisi kama tumekuwa kutatuliwa tatizo moja, 602 00:36:34,590 --> 00:36:36,940 lakini tumekuwa ilianzisha mzima nyingine moja. Kusema ukweli, tumekuwa alitumia muda wote huu 603 00:36:36,940 --> 00:36:40,540 juu ya kubwa O na Ω na mbio wakati, kujaribu kutatua matatizo ya haraka zaidi, 604 00:36:40,540 --> 00:36:43,270 na hapa sisi ni kuchukua hatua kubwa nyuma, anahisi. 605 00:36:43,270 --> 00:36:45,380 Na bado, kama lengo ni kuhifadhi data, 606 00:36:45,380 --> 00:36:48,010 anahisi kama Grail Mtakatifu, kama sisi alisema Jumatatu, ingekuwa kweli kuwa 607 00:36:48,010 --> 00:36:50,470 kuhifadhi vitu instantly. 608 00:36:50,470 --> 00:36:53,930 >> Kwa kweli, tuseme kwamba sisi tulikuwa kuweka kando wanaohusishwa orodha kwa muda 609 00:36:53,930 --> 00:36:56,000 na sisi badala ilianzisha dhana ya meza. 610 00:36:56,000 --> 00:36:59,110 Na hebu tu kufikiri ya meza kwa muda kama safu. 611 00:36:59,110 --> 00:37:03,790 Hii safu na kesi hii hapa ina baadhi ya vipengele 26, 0 kupitia 25, 612 00:37:03,790 --> 00:37:07,940 na kudhani kwamba zinahitajika baadhi chunk ya hifadhi kwa ajili ya majina: 613 00:37:07,940 --> 00:37:10,350 Alice na Bob na Charlie na kama. 614 00:37:10,350 --> 00:37:12,880 Na unahitaji baadhi muundo data kuhifadhi majina hayo. 615 00:37:12,880 --> 00:37:15,000 Naam, unaweza kutumia kitu kama orodha wanaohusishwa 616 00:37:15,000 --> 00:37:20,260 na unaweza kutembea orodha inserting Alice kabla Bob na Charlie baada ya Bob na kadhalika. 617 00:37:20,260 --> 00:37:23,850 Na, kwa kweli, kama unataka kuona kanuni kama kwamba kama kando, 618 00:37:23,850 --> 00:37:27,230 kujua kwamba katika list2.h, sisi kufanya hasa kwamba. 619 00:37:27,230 --> 00:37:30,610 Sisi si kwenda kwa njia ya kanuni hii, lakini hii ni lahaja ya mfano wa kwanza 620 00:37:30,610 --> 00:37:34,640 kwamba utangulizi moja nyingine struct tumeona kabla mwanafunzi kinachoitwa, 621 00:37:34,640 --> 00:37:40,330 na kisha nini ni kweli maduka katika orodha zilizounganishwa ni pointer muundo mwanafunzi 622 00:37:40,330 --> 00:37:44,520 badala ya rahisi kidogo integer, n. 623 00:37:44,520 --> 00:37:46,900 Hivyo kutambua kuna code kuna ambayo inahusisha masharti halisi, 624 00:37:46,900 --> 00:37:49,940 lakini kama lengo katika mkono kweli sasa ni kushughulikia tatizo ufanisi, 625 00:37:49,940 --> 00:37:53,380 bila kuwa nzuri kama sisi ni kupewa kitu inayoitwa Alice, 626 00:37:53,380 --> 00:37:56,020 tunataka kuweka wake katika mahali sahihi katika muundo data, 627 00:37:56,020 --> 00:37:58,860 anahisi kama ni d kuwa nzuri kwa kweli kuweka tu Alice, 628 00:37:58,860 --> 00:38:01,180 ambaye jina lake huanza na, katika mahali ya kwanza. 629 00:38:01,180 --> 00:38:05,270 Na Bob, ambaye jina lake huanza na B, katika eneo la pili. 630 00:38:05,270 --> 00:38:09,580 Na safu, au hebu kuanza kuiita meza, meza hash saa kwamba, 631 00:38:09,580 --> 00:38:13,650 tunaweza kufanya hasa ile. Kama sisi ni kupewa jina kama Alice, 632 00:38:13,650 --> 00:38:16,700 kamba kama Alice, wapi kuweka-l-i-c-e? 633 00:38:16,700 --> 00:38:20,540 Tunahitaji hueristic. Tunahitaji kazi ya kuchukua baadhi ya pembejeo kama Alice 634 00:38:20,540 --> 00:38:24,610 na kuwajibu, "Rudisha Alice katika eneo hili." 635 00:38:24,610 --> 00:38:28,720 Na kazi hii, hii sanduku nyeusi, ni kwenda kuitwa kazi hash. 636 00:38:28,720 --> 00:38:32,330 >> kazi hash ni kitu kwamba inachukua pembejeo, kama "Alice", 637 00:38:32,330 --> 00:38:38,080 na anarudi kwa wewe, kawaida, eneo numeric katika muundo baadhi data ambapo Alice ni mwanachama. 638 00:38:38,080 --> 00:38:40,830 Katika kesi hiyo, kazi yetu hash lazima rahisi kiasi. 639 00:38:40,830 --> 00:38:47,510 Kazi yetu hash lazima kusema, ikiwa wewe ni kupewa "Alice", ambayo tabia shugulike juu? 640 00:38:47,510 --> 00:38:55,660 moja ya kwanza. Hivyo mimi kuangalia [0], na kisha mimi kusema kama [0] tabia ni, kurudi idadi 0. 641 00:38:55,660 --> 00:39:01,130 Kama ni B, kurudi 1. Kama C ni, kurudi 2, na kadhalika. 642 00:39:01,130 --> 00:39:05,940 Yote index 0, na kwamba ingekuwa naomba Insert Alice na kisha Bob na kisha Charlie na kadhalika 643 00:39:05,940 --> 00:39:10,960 ndani ya muundo huu data. Lakini kuna tatizo. 644 00:39:10,960 --> 00:39:13,060 Nini kama Anita huja pamoja tena? 645 00:39:13,060 --> 00:39:17,510 Wapi sisi kuweka Anita? Jina lake, pia, huanza na barua, 646 00:39:17,510 --> 00:39:20,330 na anahisi kama tumekuwa alifanya fujo hata kubwa ya tatizo hili. 647 00:39:20,330 --> 00:39:24,380 Sisi sasa kuwa insertion haraka, mara kwa mara wakati insertion, katika muundo wa data 648 00:39:24,380 --> 00:39:27,100 badala ya mbaya ya kesi linear, 649 00:39:27,100 --> 00:39:29,510 lakini nini tunaweza kufanya na Anita katika kesi hii? 650 00:39:29,510 --> 00:39:34,110 Je, ni chaguzi mbili, kweli? Yeah? 651 00:39:34,110 --> 00:39:37,410 [Mwanafunzi jibu, unintelligible] Sawa, hivyo tunaweza kuwa na mwingine mwelekeo. 652 00:39:37,410 --> 00:39:42,320 Hiyo ni nzuri. Hivyo tunaweza kujenga mambo ya nje katika 3D kama kuongelea maneno Jumatatu. 653 00:39:42,320 --> 00:39:46,700 Tunaweza kuongeza upatikanaji mwingine hapa, lakini tuseme kwamba hakuna, mimi nina kujaribu kuweka hii rahisi. 654 00:39:46,700 --> 00:39:50,160 Lengo zima hapa ni kuwa na haraka ya mara kwa mara-wakati upatikanaji, 655 00:39:50,160 --> 00:39:52,170 hivyo hiyo ni kuongeza sana utata. 656 00:39:52,170 --> 00:39:55,970 Je, ni chaguzi nyingine wakati akijaribu Insert Anita ndani ya muundo huu data? Yeah? 657 00:39:55,970 --> 00:39:58,610 [Mwanafunzi jibu, unintelligible] Good. Hivyo sisi inaweza hoja kila mtu mwingine chini, 658 00:39:58,610 --> 00:40:03,040 kama Charlie nudges chini Bob na Alice, na kisha sisi kuweka Anita ambapo yeye kweli anataka kuwa. 659 00:40:03,040 --> 00:40:05,660 >> Bila shaka, sasa, kuna athari ya hili. 660 00:40:05,660 --> 00:40:09,000 Hii muundo data pengine ni muhimu si kwa sababu tunataka Insert watu mara moja 661 00:40:09,000 --> 00:40:11,250 lakini kwa sababu tunataka kuangalia kama uko huko baadaye 662 00:40:11,250 --> 00:40:13,600 kama tunataka magazeti nje yote ya majina katika muundo data. 663 00:40:13,600 --> 00:40:15,850 Sisi ni kwenda kufanya kitu kwa data hii hatimaye. 664 00:40:15,850 --> 00:40:20,810 Hivyo sasa tumekuwa aina ya Star zaidi ya Alice, ambaye tena ambapo yeye walidhani kuwa. 665 00:40:20,810 --> 00:40:23,880 Wala Bob, wala Charlie. 666 00:40:23,880 --> 00:40:26,060 Hivyo labda hii si wazo nzuri. 667 00:40:26,060 --> 00:40:28,830 Lakini kwa kweli, hii ni chaguo moja. Tunaweza kuhama kila mtu chini, 668 00:40:28,830 --> 00:40:32,240 au heck, Anita alikuja marehemu kwa mchezo, kwa nini sio sisi tu ya kuweka Anita 669 00:40:32,240 --> 00:40:35,870 si hapa, si hapa, si hapa, hebu tu kuweka wake mdogo punde katika orodha. 670 00:40:35,870 --> 00:40:38,680 Lakini basi tatizo hili kuanza kukabidhi tena. 671 00:40:38,680 --> 00:40:41,630 Unaweza kuwa na uwezo wa kupata Alice instantly, kwa kuzingatia jina yake ya kwanza. 672 00:40:41,630 --> 00:40:44,320 Na Bob instantly, na Charlie. Lakini basi ukiangalia kwa Anita, 673 00:40:44,320 --> 00:40:46,360 na unaweza kuona, hmm, Alice ni katika njia. 674 00:40:46,360 --> 00:40:48,770 Vizuri, basi mimi kuangalia chini Alice. Bob si Anita. 675 00:40:48,770 --> 00:40:51,850 Charlie si Anita. Oh, kuna Anita. 676 00:40:51,850 --> 00:40:54,720 Na kama wewe kuendelea kuwa treni ya mantiki njia yote, 677 00:40:54,720 --> 00:41:00,690 nini mbaya zaidi kesi mbio wakati wa kutafuta au inserting Anita ndani ya muundo huu mpya data? 678 00:41:00,690 --> 00:41:03,280 Ni O (n), sawa? 679 00:41:03,280 --> 00:41:06,280 Kwa sababu katika hali mbaya, kuna Alice, Bob, Charlie. . . 680 00:41:06,280 --> 00:41:10,150 njia yote chini kwa mtu aitwaye "Y", hivyo kuna mmoja tu doa kushoto. 681 00:41:10,150 --> 00:41:13,950 Nashiriki, hatuna moja inayoitwa "Z", hivyo sisi kuweka Anita chini sana. 682 00:41:13,950 --> 00:41:16,040 >> Sisi si kweli kwamba tatizo kutatuliwa. 683 00:41:16,040 --> 00:41:19,890 Hivyo labda hatuna haja ya kuanzisha hii dimension ya tatu. 684 00:41:19,890 --> 00:41:22,230 Na zinageuka, kama hatuwezi kuanzisha hii mwelekeo wa tatu, 685 00:41:22,230 --> 00:41:25,240 hatuwezi kufanya hii kikamilifu, lakini Grail Mtakatifu anaenda kuwa kupata 686 00:41:25,240 --> 00:41:28,370 mara kwa mara-wakati insertion na insertions nguvu ili 687 00:41:28,370 --> 00:41:30,960 hatuna kwa bidii-code safu ya ukubwa 26. 688 00:41:30,960 --> 00:41:34,400 Tunaweza Insert kama majina mengi kama tunataka, lakini hebu wetu 5-dakika kuvunja hapa 689 00:41:34,400 --> 00:41:38,790 na kisha kufanya hivyo vizuri. 690 00:41:38,790 --> 00:41:46,020 Wote haki. Mimi kuweka hadithi juu pretty artificially kuna 691 00:41:46,020 --> 00:41:48,670 kwa kuchagua Alice na kisha Bob na kisha Charlie na kisha Anita, 692 00:41:48,670 --> 00:41:51,000 ambaye jina lake ni wazi anaenda yanapogongana na Alice. 693 00:41:51,000 --> 00:41:54,120 Lakini swali sisi kumalizika Jumatatu na ni jinsi tu kinachowezekana ni 694 00:41:54,120 --> 00:41:56,370 kwamba ungependa kupata aina hii ya collisions? Kwa maneno mengine, 695 00:41:56,370 --> 00:42:00,490 kama tunataka kuanza kutumia mfumo huu tabular, ambayo ni kweli tu safu, 696 00:42:00,490 --> 00:42:02,460 katika kesi hii ya maeneo 26, 697 00:42:02,460 --> 00:42:05,740 nini kama pembejeo zetu badala enhetligt kusambazwa? 698 00:42:05,740 --> 00:42:09,620 Ni si artificially Alice na Bob na Charlie na Daudi na kadhalika alphabetically, 699 00:42:09,620 --> 00:42:12,380 ni enhetligt kusambazwa juu ya njia ya Z. 700 00:42:12,380 --> 00:42:15,220 >> Labda tutaweza tu kupata bahati na sisi siyo kwenda kuwa na mbili au mbili B 701 00:42:15,220 --> 00:42:17,640 na uwezekano juu sana, lakini kama kuna mtu alisema, 702 00:42:17,640 --> 00:42:20,730 kama sisi jumla na tatizo hili na si kufanya 0-25 703 00:42:20,730 --> 00:42:26,060 lakini, sema, 0 kupitia 364 au 65, mara nyingi idadi ya siku katika mwaka wa kawaida, 704 00:42:26,060 --> 00:42:31,170 na aliuliza swali, "Nini uwezekano kwamba sisi wawili katika chumba hiki na kuzaliwa sawa?" 705 00:42:31,170 --> 00:42:34,600 Kuweka njia nyingine, nini uwezekano kwamba mbili ya sisi kuwa na jina kwa kuanzia na? 706 00:42:34,600 --> 00:42:37,190 aina ya swali ni sawa, lakini nafasi hii anuani, 707 00:42:37,190 --> 00:42:39,940 nafasi hii tafuta, ni kubwa katika kesi ya siku za kuzaliwa, 708 00:42:39,940 --> 00:42:42,820 sababu tuna mengi zaidi ya siku katika mwaka kuliko barua katika alfabeti. 709 00:42:42,820 --> 00:42:44,910 Nini uwezekano wa mgongano? 710 00:42:44,910 --> 00:42:48,410 Naam, tunaweza kufikiria hili kwa kuhesabia math njia ya kinyume. 711 00:42:48,410 --> 00:42:50,580 Nini uwezekano wa migongano hakuna? 712 00:42:50,580 --> 00:42:53,970 Naam, hii kujieleza hapa anasema kwamba nini uwezekano 713 00:42:53,970 --> 00:42:58,770 kama kuna mtu mmoja tu katika chumba hiki, kwamba wana kuzaliwa kipekee? 714 00:42:58,770 --> 00:43:01,190 Ni 100%. Kwa sababu kama kuna mtu mmoja tu katika chumba, 715 00:43:01,190 --> 00:43:03,940 yake au siku ya kuzaliwa inaweza kuwa yoyote ya siku 365 kati ya mwaka. 716 00:43:03,940 --> 00:43:08,650 Hivyo 365/365 chaguzi anitiaye thamani ya 1. 717 00:43:08,650 --> 00:43:11,250 Hivyo uwezekano katika swali kwa sasa ni 1 tu. 718 00:43:11,250 --> 00:43:13,270 Lakini kama kuna mtu wa pili katika chumba, 719 00:43:13,270 --> 00:43:16,490 nini uwezekano kwamba kuzaliwa kwao ni tofauti? 720 00:43:16,490 --> 00:43:20,680 Kuna tu 364 iwezekanavyo siku, kupuuza leap miaka, 721 00:43:20,680 --> 00:43:23,580 kwa siku ya kuzaliwa yao si kwa yanapogongana na watu wengine. 722 00:43:23,580 --> 00:43:31,920 Hivyo 364/365. Kama mtu wa tatu unakuja, ni 363/365, na kadhalika. 723 00:43:31,920 --> 00:43:35,790 Hivyo sisi kuweka kuzidisha pamoja FRACTIONS haya, ambayo ni kupata na ndogo ndogo, 724 00:43:35,790 --> 00:43:40,720 kufikiri nini ni uwezekano kwamba sisi sote tuna kuzaliwa kipekee? 725 00:43:40,720 --> 00:43:43,570 Lakini basi tunaweza, bila shaka, kuchukua tu kwamba jibu na flip ni kuzunguka 726 00:43:43,570 --> 00:43:47,210 na kufanya 1 bala yote ya kwamba, ya kujieleza tutaweza hatimaye kupata 727 00:43:47,210 --> 00:43:51,250 kama wewe kumbuka nyuma ya vitabu yako math, inaonekana kitu kidogo kama hii, 728 00:43:51,250 --> 00:43:54,590 ambao ni muhimu sana kwa urahisi zaidi kufasiriwa graphically. 729 00:43:54,590 --> 00:43:57,820 Na hii graphic hapa ana kwenye mhimili x idadi ya siku za kuzaliwa, 730 00:43:57,820 --> 00:44:02,030 au idadi ya watu na siku za kuzaliwa, na kwenye mhimili y ni uwezekano wa mechi. 731 00:44:02,030 --> 00:44:06,060 Na nini hii ni kusema ni kwamba kama una, hebu sema, hata, 732 00:44:06,060 --> 00:44:10,860 hebu kuchagua kitu kama 22, 23. 733 00:44:10,860 --> 00:44:13,160 Kama kuna 22 au 23 watu katika chumba, 734 00:44:13,160 --> 00:44:17,100 uwezekano kwamba mbili ya wale watu wachache sana wanaenda kuwa na siku ya kuzaliwa sawa 735 00:44:17,100 --> 00:44:19,560 ni kweli super juu, combinatorially. 736 00:44:19,560 --> 00:44:23,450 50% ya tabia mbaya kwamba katika darasa la watu 22 tu, semina, kivitendo, 737 00:44:23,450 --> 00:44:25,790 2 ya watu wale ni kwenda na siku ya kuzaliwa sawa. 738 00:44:25,790 --> 00:44:28,520 Kwa sababu kuna njia nyingi ambazo unaweza kuwa na siku ya kuzaliwa sawa. 739 00:44:28,520 --> 00:44:31,110 Hata mbaya, kama ukiangalia katika upande wa kulia ya chati, 740 00:44:31,110 --> 00:44:34,040 na wakati una darasa na wanafunzi 58 katika hilo, 741 00:44:34,040 --> 00:44:39,270 uwezekano wa watu 2 ya kuwa siku ya kuzaliwa ni super, super juu, karibu asilimia 100%. 742 00:44:39,270 --> 00:44:41,880 Sasa, hiyo ni aina ya ukweli kuhusu fun maisha halisi. 743 00:44:41,880 --> 00:44:45,850 >> Lakini matokeo, sasa, kwa data miundo na hifadhi habari 744 00:44:45,850 --> 00:44:51,100 ina maana kwamba tu kuchukua una nzuri, safi, sare usambazaji wa data 745 00:44:51,100 --> 00:44:53,650 na una kubwa ya kutosha safu walionao rundo la vitu 746 00:44:53,650 --> 00:44:59,360 haina maana wewe ni kwenda kupata watu katika maeneo ya kipekee. 747 00:44:59,360 --> 00:45:03,810 Wewe utaenda kuwa na migongano. Hivyo wazo hili la hashing, kama ni kuitwa, 748 00:45:03,810 --> 00:45:07,450 kuchukua pembejeo kama "Alice" na massaging ni katika baadhi ya njia 749 00:45:07,450 --> 00:45:10,190 na kisha kupata nyuma jibu kama 0 au 1 au 2. 750 00:45:10,190 --> 00:45:17,500 Kupata nyuma baadhi ya pato kutoka kazi ambayo yanakabiliwa na uwezekano wa mgongano huu. 751 00:45:17,500 --> 00:45:19,530 Hivyo ni jinsi gani tunaweza kushughulikia migongano hizo? 752 00:45:19,530 --> 00:45:21,940 Naam, katika kesi moja, tunaweza kuchukua wazo kwamba ilipendekezwa. 753 00:45:21,940 --> 00:45:25,100 Tunaweza tu kuhama kila mtu chini, au labda zaidi kidogo tu, 754 00:45:25,100 --> 00:45:29,870 badala ya hoja ya mtu mwingine, hebu tu hoja Anita kwa chini ya doa inapatikana. 755 00:45:29,870 --> 00:45:32,810 Hivyo kama ni Alice katika 0, Bob ni katika 1, Charlie ni katika 2, 756 00:45:32,810 --> 00:45:35,260 tutaweza tu kuweka Anita katika eneo 3. 757 00:45:35,260 --> 00:45:38,860 Na hii ni mbinu katika miundo data kuitwa linear probing. 758 00:45:38,860 --> 00:45:41,310 Linear sababu wewe tu kutembea line hii, na wewe ni aina ya uchunguzi 759 00:45:41,310 --> 00:45:43,640 kwa matangazo inapatikana katika muundo data. 760 00:45:43,640 --> 00:45:46,210 Bila shaka, hii warithi katika O (n). 761 00:45:46,210 --> 00:45:49,590 Kama muundo data kweli kamili, kuna watu 25 ndani yake tayari, 762 00:45:49,590 --> 00:45:54,120 na kisha Anita huja pamoja, yeye kuishia katika nini itakuwa mahali Z, na hiyo ni faini. 763 00:45:54,120 --> 00:45:56,540 Yeye bado inafaa, na tunaweza kupata wake baadaye. 764 00:45:56,540 --> 00:46:00,100 >> Lakini hii ilikuwa kinyume na lengo la kuongeza kasi ya mambo juu. 765 00:46:00,100 --> 00:46:02,530 Basi nini kama sisi badala ilianzisha hii dimension ya tatu? 766 00:46:02,530 --> 00:46:06,400 Hiyo ni kwa ujumla mbinu kuitwa tofauti chaining, au kuwa na minyororo. 767 00:46:06,400 --> 00:46:10,030 Na nini meza hash sasa ni, muundo huu tabular, 768 00:46:10,030 --> 00:46:13,450 meza yako ni safu ya kuyatumia. 769 00:46:13,450 --> 00:46:18,230 Lakini nini wale kuyatumia uhakika na ni nadhani nini? 770 00:46:18,230 --> 00:46:21,970 orodha zinazoungwa. Basi nini kama sisi kuchukua bora wa wote wa dunia hizi? 771 00:46:21,970 --> 00:46:26,500 Sisi kutumia arrays kwa bahati ya awali 772 00:46:26,500 --> 00:46:32,070 ndani ya muundo wa data ili tuweze instantly kwenda kwenye [0] [1], [30] au kadhalika, 773 00:46:32,070 --> 00:46:36,480 lakini hivyo kwamba tuna baadhi kubadilika na tunaweza fit Anita na Alice na Adam 774 00:46:36,480 --> 00:46:38,630 na nyingine yoyote ya jina, 775 00:46:38,630 --> 00:46:43,470 sisi badala basi mhimili nyingine kukua kiholela. 776 00:46:43,470 --> 00:46:47,340 Na sisi hatimaye, kama ya Jumatatu, na kwamba uwezo expressive na orodha zilizounganishwa. 777 00:46:47,340 --> 00:46:49,530 Tunaweza kukua muundo data kiholela. 778 00:46:49,530 --> 00:46:52,450 Vinginevyo, tunaweza tu kufanya kubwa 2-dimensional safu, 779 00:46:52,450 --> 00:46:57,190 lakini kwamba itakuja kuwa hali ya kutisha kama moja ya mistari katika safu 2-dimensional 780 00:46:57,190 --> 00:47:01,280 si kubwa ya kutosha kwa ajili ya mtu ziada ambaye jina kinachotokea kwa kuanza na A. 781 00:47:01,280 --> 00:47:04,200 Mungu apishe tuna reallocate kubwa 2-dimensional muundo 782 00:47:04,200 --> 00:47:06,600 tu kwa sababu kuna watu wengi hivyo jina lake, 783 00:47:06,600 --> 00:47:09,480 hasa wakati kuna watu wachache aitwaye Z kitu. 784 00:47:09,480 --> 00:47:12,170 Ni tu kwenda sana sparse data muundo. 785 00:47:12,170 --> 00:47:15,400 Hivyo si kamilifu kwa njia yoyote, lakini sasa sisi angalau kuwa na uwezo 786 00:47:15,400 --> 00:47:19,090 instantly kupata ambapo Alice au Anita ni, 787 00:47:19,090 --> 00:47:21,090 angalau katika suala la mhimili wima, 788 00:47:21,090 --> 00:47:25,850 na kisha sisi tu kuamua wapi kuweka Anita au Alice katika orodha hii zinazoungwa. 789 00:47:25,850 --> 00:47:32,480 Kama sisi hawajali kuhusu kuchagua mambo, jinsi ya haraka tunaweza kuingiza Alice katika muundo kama hii? 790 00:47:32,480 --> 00:47:35,370 Ni mara kwa mara wakati. Sisi index katika [0], na kama hakuna mtu huko, 791 00:47:35,370 --> 00:47:37,550 Alice huenda mwanzo wa orodha hiyo zinazoungwa. 792 00:47:37,550 --> 00:47:40,000 Lakini si kwamba mpango mkubwa. Kwa sababu kama Anita kisha huja pamoja 793 00:47:40,000 --> 00:47:42,160 baadhi Idadi ya hatua ya baadaye, ambapo gani Anita ni mali? 794 00:47:42,160 --> 00:47:45,140 Naam, [0]. OOP. Alice ni tayari katika orodha ya kuwa wanaohusishwa. 795 00:47:45,140 --> 00:47:47,760 >> Lakini kama sisi hawajali kuhusu kuchagua majina haya, 796 00:47:47,760 --> 00:47:53,580 tunaweza tu hoja juu ya Alice, Insert Anita, lakini hata hilo ni mara kwa mara wakati. 797 00:47:53,580 --> 00:47:57,010 Hata kama kuna Alice na Adamu na mengine yote haya majina, 798 00:47:57,010 --> 00:47:59,410 siyo kweli shifting yao kimwili. Kwa nini? 799 00:47:59,410 --> 00:48:04,090 Kwa sababu sisi tu alifanya hapa kwa orodha wanaohusishwa, ambaye anajua walikuwa hawa nodes ni anyway? 800 00:48:04,090 --> 00:48:06,550 Wote una kufanya ni hoja makombo chakula. 801 00:48:06,550 --> 00:48:10,930 Hoja ya mishale kote; huna kimwili hoja data yoyote duniani. 802 00:48:10,930 --> 00:48:14,610 Hivyo tunaweza kuingiza Anita, katika kesi hiyo, instantly. Mara kwa mara wakati. 803 00:48:14,610 --> 00:48:20,250 Hivyo tuna mara kwa mara-wakati Luke, na mara kwa mara-wakati insertion ya mtu kama Anita. 804 00:48:20,250 --> 00:48:22,740 Lakini aina ya oversimplifying dunia. 805 00:48:22,740 --> 00:48:28,510 Nini kama sisi baadaye unataka kupata Alice? 806 00:48:28,510 --> 00:48:31,050 Nini kama sisi baadaye unataka kupata Alice? 807 00:48:31,050 --> 00:48:35,690 Jinsi hatua nyingi ni kwamba kwenda kuchukua? 808 00:48:35,690 --> 00:48:37,850 [Mwanafunzi jibu, unintelligible] 809 00:48:37,850 --> 00:48:40,950 Hasa. idadi ya watu kabla ya Alice katika orodha zinazoungwa. 810 00:48:40,950 --> 00:48:45,420 Hivyo si kabisa kamilifu, kwa sababu data muundo wetu, tena, ana hili upatikanaji wima 811 00:48:45,420 --> 00:48:50,240 na basi ina orodha hizi zilizounganishwa kunyongwa - kweli, basi si kuteka ni safu. 812 00:48:50,240 --> 00:48:56,020 Ni haya orodha wanaohusishwa kunyongwa mbali ya hiyo kwamba inaonekana kitu kidogo kama hii. 813 00:48:56,020 --> 00:48:59,110 Lakini tatizo ni kama Alice na Adamu na mengine yote haya majina 814 00:48:59,110 --> 00:49:01,720 kuishia zaidi na zaidi zaidi ya hapo, 815 00:49:01,720 --> 00:49:04,810 kutafuta mtu unaweza kuishia kuchukua rundo la hatua, 816 00:49:04,810 --> 00:49:06,670 bcause una traverse orodha zilizounganishwa, 817 00:49:06,670 --> 00:49:08,090 ambayo ni operesheni linear. 818 00:49:08,090 --> 00:49:14,270 Hivyo kweli, basi, wakati insertion hatimaye ni O (n), ambapo n ni idadi ya vipengele katika orodha. 819 00:49:14,270 --> 00:49:21,780 Kugawanywa na, hebu kiholela kuiita m, ambapo m ni idadi ya orodha zilizounganishwa 820 00:49:21,780 --> 00:49:24,500 kwamba sisi katika mhimili huu wima. 821 00:49:24,500 --> 00:49:27,180 Kwa maneno mengine, kama kweli sisi kudhani usambazaji sare ya majina, 822 00:49:27,180 --> 00:49:30,150 kabisa unrealistic. Kuna wazi zaidi ya barua baadhi kuliko wengine. 823 00:49:30,150 --> 00:49:32,580 >> Lakini kama tunasadiki kwa sasa usambazaji sare, 824 00:49:32,580 --> 00:49:37,350 na tuna n watu jumla, na m minyororo jumla 825 00:49:37,350 --> 00:49:40,630 inapatikana kwa sisi, basi urefu wa kila minyororo ya haya 826 00:49:40,630 --> 00:49:44,380 uungwana tu ni kwenda kuwa jumla, n kugawanyika kwa idadi ya minyororo. 827 00:49:44,380 --> 00:49:48,900 Hivyo n / m. Lakini hapa ni mahali ambapo tunaweza wote mathematically wajanja. 828 00:49:48,900 --> 00:49:53,030 m ni mara kwa mara, kwa sababu kuna idadi maalum ya haya. 829 00:49:53,030 --> 00:49:54,620 Utaenda kutangaza safu yako katika mwanzo, 830 00:49:54,620 --> 00:49:58,450 na sisi siyo resizing mhimili wima. Kwa ufafanuzi, kwamba anakaa fasta. 831 00:49:58,450 --> 00:50:01,220 Ni tu mhimili usawa, hivyo kusema, kwamba ni kubadilika. 832 00:50:01,220 --> 00:50:04,760 Basi kitaalam, hii ni mara kwa mara. Hivyo sasa, wakati insertion 833 00:50:04,760 --> 00:50:09,700 ni kiasi pretty O (n). 834 00:50:09,700 --> 00:50:12,410 Hivyo kwamba hana kujisikia wote kuwa bora zaidi. 835 00:50:12,410 --> 00:50:14,940 Lakini nini ni ukweli hapa? Naam, muda wote huu, kwa wiki, 836 00:50:14,940 --> 00:50:20,640 tumekuwa akisema O (n ²). O (n), 2 x n ², - n, kugawanywa na 2. . . ech. 837 00:50:20,640 --> 00:50:23,580 Ni tu n ². Lakini sasa, katika sehemu hii ya muhula, 838 00:50:23,580 --> 00:50:25,560 tunaweza kuanza kuzungumza juu ya ulimwengu halisi tena. 839 00:50:25,560 --> 00:50:31,520 Na n / m kabisa kwa kasi zaidi kuliko tu n peke yake. 840 00:50:31,520 --> 00:50:35,170 Kama una majina elfu, na wewe kuvunja yao juu katika ndoo nyingi 841 00:50:35,170 --> 00:50:37,820 ili una kumi tu ya majina katika kila moja ya minyororo ya haya, 842 00:50:37,820 --> 00:50:41,670 kabisa kutafuta mambo kumi ni kwenda kuwa kasi zaidi kuliko mambo elfu. 843 00:50:41,670 --> 00:50:43,740 Na hivyo moja ya seti ujao tatizo ni kwenda changamoto 844 00:50:43,740 --> 00:50:46,100 kufikiri kuhusu hasa kwamba hata ingawa, yeah, 845 00:50:46,100 --> 00:50:49,520 asymptotically na kihisabati, hii bado tu linear, 846 00:50:49,520 --> 00:50:51,700 ambayo sucks kwa ujumla wakati akijaribu kupata mambo. 847 00:50:51,700 --> 00:50:54,530 Katika hali halisi, ni kwenda kuwa kasi zaidi kuliko kuwa 848 00:50:54,530 --> 00:50:56,520 sababu ya kigawanyo hii. 849 00:50:56,520 --> 00:50:58,310 Na hivyo kuna tena kwenda kuwa hii biashara-off 850 00:50:58,310 --> 00:51:01,390 na mgogoro huu kati ya nadharia na ukweli, 851 00:51:01,390 --> 00:51:03,550 na moja ya knobs kuanza kugeuka katika hatua hii katika muhula 852 00:51:03,550 --> 00:51:07,510 ni zaidi ya ukweli moja kama sisi aina ya kujiandaa kwa ajili ya mwisho wa semster, 853 00:51:07,510 --> 00:51:09,280 kama sisi kuanzisha ulimwengu wa programu ya mtandao, 854 00:51:09,280 --> 00:51:11,530 ambapo kwa kweli, utendaji ni kwenda kuhesabu kwa sababu watumiaji wako ni kwenda 855 00:51:11,530 --> 00:51:14,880 kuanza kuhisi na kufahamu design maamuzi maskini. 856 00:51:14,880 --> 00:51:19,950 >> Hivyo ni jinsi gani wewe kwenda juu ya utekelezaji zilizounganishwa - hash meza na vipengele 31? 857 00:51:19,950 --> 00:51:22,600 Na mfano uliopita ilikuwa kiholela kuhusu siku za kuzaliwa. 858 00:51:22,600 --> 00:51:26,190 Kama mtu ana siku ya kuzaliwa ya Januari 1 au Februari 1, tutaweza kuwaweka katika ndoo hii. 859 00:51:26,190 --> 00:51:28,960 Kama ni ya Januari 2, 2 Februari, Machi 2, tutaweza kuwaweka katika ndoo hii. 860 00:51:28,960 --> 00:51:32,220 Hiyo ndiyo ilikuwa 31. Jinsi gani unaweza kutangaza meza hash? 861 00:51:32,220 --> 00:51:37,480 Inaweza kuwa pretty rahisi, nodi * meza ni jina langu holela kwa ajili yake, [31]. 862 00:51:37,480 --> 00:51:42,400 Hii inanipa kuyatumia 31 kwa nodes, 863 00:51:42,400 --> 00:51:45,370 na kwamba inaruhusu yangu kuwa kuyatumia 31 kwa orodha wanaohusishwa 864 00:51:45,370 --> 00:51:48,800 hata kama wale minyororo ni awali null. 865 00:51:48,800 --> 00:51:54,860 Nini nataka kuweka kama nataka kuhifadhi "Alice," "Bob," "Charlie"? 866 00:51:54,860 --> 00:51:57,010 Naam, tunahitaji wrap mambo hayo katika muundo 867 00:51:57,010 --> 00:52:00,530 sababu tunahitaji Alice kwa uhakika na Bob, kwa uhakika na Charlie, na kadhalika. 868 00:52:00,530 --> 00:52:04,940 Hatuwezi tu majina peke yake, ili niweze kujenga muundo mpya iitwayo nodi hapa. 869 00:52:04,940 --> 00:52:08,310 >> Nini ni nodi halisi? Nini ni nodi katika orodha hii mpya wanaohusishwa? 870 00:52:08,310 --> 00:52:11,840 Jambo la kwanza, iitwayo neno, ni kwa jina la mtu. 871 00:52:11,840 --> 00:52:14,340 LENGTH, labda, inahusiana na upeo wa urefu wa jina binadamu, 872 00:52:14,340 --> 00:52:18,210 chochote kile, 20, 30, 40 wahusika katika kesi mambo kona, 873 00:52:18,210 --> 00:52:22,680 na 1 ni kwa nini? Ni tu ni ziada null tabia, \ 0. 874 00:52:22,680 --> 00:52:27,410 Hivyo nodi hii wrapping "kitu" ndani ya yenyewe, 875 00:52:27,410 --> 00:52:29,640 lakini pia inatangaza pointer iitwayo ijayo 876 00:52:29,640 --> 00:52:32,580 ili tuweze mnyororo Alice kwa Bob kwa Charlie na kadhalika. 877 00:52:32,580 --> 00:52:36,700 Inaweza kuwa null lakini siyo lazima kuwa. 878 00:52:36,700 --> 00:52:40,110 Maswali yoyote juu ya mbao hizo hash? Yeah? 879 00:52:40,110 --> 00:52:46,190 [Mwanafunzi kuuliza swali, unintelligible] safu - nzuri swali. 880 00:52:46,190 --> 00:52:50,120 Kwa nini hii ni neno Char katika safu badala tu ya Char *? 881 00:52:50,120 --> 00:52:53,830 Katika mfano huu kwa kiasi fulani holela, mimi sitaki kuwa na kuamua 882 00:52:53,830 --> 00:52:56,190 kwa malloc kwa kila moja ya majina ya awali. 883 00:52:56,190 --> 00:52:59,530 Nilitaka kutangaza kiasi cha upeo wa kumbukumbu kwa kamba 884 00:52:59,530 --> 00:53:06,020 ili niweze nakala katika muundo Alice \ 0 na si kuwa na kushughulika na malloc na bure na kama. 885 00:53:06,020 --> 00:53:11,710 Lakini mimi naweza kufanya kwamba kama nilitaka kuwa zaidi ufahamu wa matumizi ya nafasi. Nzuri swali. 886 00:53:11,710 --> 00:53:14,780 Basi hebu jaribu kujumlisha mbali haya 887 00:53:14,780 --> 00:53:18,350 na kuzingatia salio ya leo kwenye miundo ya data zaidi kwa ujumla 888 00:53:18,350 --> 00:53:21,170 na matatizo mengine ya kwamba tunaweza kutatua kutumia misingi sawa 889 00:53:21,170 --> 00:53:24,590 ingawa miundo data wenyewe ili tofauti katika maelezo yao. 890 00:53:24,590 --> 00:53:27,910 >> Hivyo zinageuka katika sayansi ya kompyuta, miti ni ya kawaida sana. 891 00:53:27,910 --> 00:53:29,760 Na unaweza kufikiria aina ya mti kama mti wa familia, 892 00:53:29,760 --> 00:53:31,830 ambapo kuna baadhi ya mizizi, baadhi matriarch au dume, 893 00:53:31,830 --> 00:53:34,540 bibi au babu au mapema nyuma, 894 00:53:34,540 --> 00:53:38,880 zipitazo ni mama na baba au ndugu mbalimbali au kama. 895 00:53:38,880 --> 00:53:42,500 Hivyo muundo mti ina nodes na ana watoto, 896 00:53:42,500 --> 00:53:45,260 kawaida 0 au zaidi ya watoto kwa kila node. 897 00:53:45,260 --> 00:53:47,320 Na baadhi ya jargon kwamba unaweza kuona katika picha hii hapa 898 00:53:47,320 --> 00:53:50,630 ni mojawapo ya watoto wadogo au grandkids pembeni 899 00:53:50,630 --> 00:53:52,330 ambao wana mishale hakuna vikiwemo kutoka kwao, 900 00:53:52,330 --> 00:53:55,070 wale ni majani kinachojulikana, na mtu yeyote juu ya ndani ya 901 00:53:55,070 --> 00:53:58,790 ni nodi ndani; unaweza kuiita chochote pamoja wale mistari. 902 00:53:58,790 --> 00:54:01,430 Lakini muundo huu ni pretty kawaida. Hii moja ni kidogo kiholela. 903 00:54:01,430 --> 00:54:04,930 Tuna mtoto mmoja upande wa kushoto, tuna watoto watatu juu ya haki, 904 00:54:04,930 --> 00:54:06,830 watoto wawili juu ya chini kushoto. 905 00:54:06,830 --> 00:54:10,740 Ili tuweze kuwa na miti mbalimbali ya ukubwa, lakini kama sisi kuanza kwa standardize mambo, 906 00:54:10,740 --> 00:54:15,330 na unaweza kukumbuka hii kutoka video Patrick juu tafuta binary kutoka mfupi uliopita 907 00:54:15,330 --> 00:54:19,490 online, tafuta binary haina kutekelezwa na safu 908 00:54:19,490 --> 00:54:21,410 au vipande vya karatasi juu ya ubao. 909 00:54:21,410 --> 00:54:25,490 Tuseme kwamba ulitaka kuhifadhi nambari yako katika muundo kisasa zaidi data. 910 00:54:25,490 --> 00:54:27,680 Unaweza kuunda mti kama huu. 911 00:54:27,680 --> 00:54:35,290 Unaweza kuwa na nodi alitangaza katika C, na node ya kwamba unaweza kuwa na vipengele angalau mbili ndani yake. 912 00:54:35,290 --> 00:54:39,470 Moja ni idadi unataka kuhifadhi, na nyingine ni - vizuri, tunahitaji moja zaidi. 913 00:54:39,470 --> 00:54:41,540 nyingine ni watoto wake. 914 00:54:41,540 --> 00:54:45,150 Hivyo hapa ni mwingine muundo data. Wakati huu, nodi hufafanuliwa kama hifadhi ya idadi n 915 00:54:45,150 --> 00:54:49,060 na kisha kuyatumia mbili; kushoto mtoto na mtoto wa kulia. 916 00:54:49,060 --> 00:54:52,100 Na wao siyo holela. Nini kuvutia kuhusu mti huu? 917 00:54:52,100 --> 00:55:00,550 >> Nini mfano katika jinsi tumekuwa kuweka hii nje au jinsi Patrick nieleza katika video yake? 918 00:55:00,550 --> 00:55:02,790 Ni aina ya dhahiri kwamba kuna baadhi ya kuchagua kinachoendelea hapa, 919 00:55:02,790 --> 00:55:04,460 lakini nini utawala rahisi? Yeah? 920 00:55:04,460 --> 00:55:08,350 [Mwanafunzi jibu, unintelligible] 921 00:55:08,350 --> 00:55:12,040 Perfect. Kama mtazamo saa hii, unaweza kuona idadi ndogo upande wa kushoto, 922 00:55:12,040 --> 00:55:14,690 kubwa idadi ya juu kushoto, lakini hiyo ni kweli kwa kila nodi. 923 00:55:14,690 --> 00:55:20,370 Kwa kila node, mtoto wake wa kushoto chini ya hilo, na mtoto wake wa kulia zaidi kuliko yake. 924 00:55:20,370 --> 00:55:25,210 Nini maana ya hii sasa ni kama nataka kutafuta muundo huu data kwa, kusema, idadi 44, 925 00:55:25,210 --> 00:55:29,320 Nina kuanza katika mizizi, kwa sababu kama na wote wa miundo hii ngumu zaidi data sasa, 926 00:55:29,320 --> 00:55:31,910 sisi tu pointer jambo moja, mwanzo. 927 00:55:31,910 --> 00:55:35,010 Na katika kesi hii, ni mwanzo wa mizizi. Ni sio mwisho wa kushoto, 928 00:55:35,010 --> 00:55:39,530 ni mizizi ya muundo huu. Hivyo naona hapa ni 55, na mimi nina kuangalia kwa 44. 929 00:55:39,530 --> 00:55:41,430 Ambayo mwelekeo mimi nataka kwenda? 930 00:55:41,430 --> 00:55:45,680 Naam, mimi nataka kwenda kushoto, kwa sababu ni wazi, kwa haki ni kwenda kuwa kubwa mno. 931 00:55:45,680 --> 00:55:49,050 Hivyo taarifa hapa, wewe ni aina ya conceptually chopping mti katika nusu 932 00:55:49,050 --> 00:55:51,700 kwa sababu wewe kamwe kwenda chini ya upande wa kulia. 933 00:55:51,700 --> 00:55:55,410 Hivyo, kwa sasa nakwenda 55-33. Ni ndogo sana ya idadi. 934 00:55:55,410 --> 00:56:01,590 Mimi nina kuangalia kwa 44, lakini sasa mimi kujua kama ni 44 katika mti huu, naweza kwenda wazi kwa haki. 935 00:56:01,590 --> 00:56:04,460 Hivyo tena, mimi nina kupogoa miti katika nusu. 936 00:56:04,460 --> 00:56:06,780 Ni pretty much kufanana conceptually kwa kitabu cha simu. 937 00:56:06,780 --> 00:56:09,510 Ni kufanana na kile sisi alivyofanya kwa karatasi ubaoni, 938 00:56:09,510 --> 00:56:13,940 lakini ni muundo kisasa zaidi ambayo inaruhusu sisi kwa kweli kufanya 939 00:56:13,940 --> 00:56:16,880 hii kugawanya na kushinda kwa kubuni ya algorithm, 940 00:56:16,880 --> 00:56:19,420 na kwa kweli, traversing muundo kama hii - Lo. 941 00:56:19,420 --> 00:56:22,870 Traversing muundo kama hii, ambapo ni tu "kwenda njia hii au kwenda kwa njia hiyo," 942 00:56:22,870 --> 00:56:26,870 maana kificho kwamba yote bent akili yako kwa mara ya kwanza wakati utekelezaji katika sehemu 943 00:56:26,870 --> 00:56:31,270 au kutembea njia hiyo ya nyumbani, kwa ajili ya kutafuta binary, kwa kutumia recursion au iteration, 944 00:56:31,270 --> 00:56:35,060 ni maumivu ya shingo. Kupata kipengele katikati, kisha kufanya rounding yako juu au chini. 945 00:56:35,060 --> 00:56:39,230 >> Kuna uzuri kwa hili kwa sababu sisi sasa unaweza kutumia recursion tena, 946 00:56:39,230 --> 00:56:43,760 lakini zaidi cleanly. Hakika, kama wewe ni katika idadi 55 na unataka kupata 44, 947 00:56:43,760 --> 00:56:48,450 kwenda kushoto katika kesi hii, basi nini nini? Wewe kukimbia exact algorithm. 948 00:56:48,450 --> 00:56:51,560 Wewe kuangalia thamani ya nodi, basi wewe kwenda kushoto au kulia. 949 00:56:51,560 --> 00:56:53,670 Kisha wewe kuangalia thamani ya nodi, kwenda kushoto au kulia. 950 00:56:53,670 --> 00:56:56,710 Hii ni kikamilifu inafaa kwa recursion. 951 00:56:56,710 --> 00:57:00,920 Hivyo hata kama huko nyuma tumekuwa kufanyika baadhi ya mifano uungwana holela kuwashirikisha recursion 952 00:57:00,920 --> 00:57:03,430 kwamba hakuwa na haja ya kuwa na kujirudia, na stuctures data, 953 00:57:03,430 --> 00:57:07,820 hasa miti, ni matumizi kamili ya wazo hili la kuchukua tatizo, 954 00:57:07,820 --> 00:57:12,920 kushuka, na kisha kutatua aina moja ya, lakini vidogo, mpango. 955 00:57:12,920 --> 00:57:14,590 >> Hivyo kuna mwingine muundo data kwamba tunaweza kuanzisha. 956 00:57:14,590 --> 00:57:18,760 Hii moja ni iliyoundwa katika mtazamo wa kwanza kuangalia cryptic, lakini hii ni ajabu. 957 00:57:18,760 --> 00:57:25,090 Hivyo hii ni muundo data kuitwa trie, trie, ambayo ni kurithiwa kutoka retrieval neno, 958 00:57:25,090 --> 00:57:30,210 ambayo si hutamkwa re-kujaribu-Val, lakini kwamba ni nini dunia wito mambo haya. Anajaribu. T-r-i-e. 959 00:57:30,210 --> 00:57:35,190 Ni muundo mti wa aina fulani, lakini kila mmoja wa nodi katika trie 960 00:57:35,190 --> 00:57:41,280 inaonekana kuwa nini? Na hii ni kidogo kupotosha kwa sababu ni aina ya abbreviated. 961 00:57:41,280 --> 00:57:45,960 Lakini inaonekana kama kila nodi katika trie hii ni kweli safu. 962 00:57:45,960 --> 00:57:48,840 Na hata kama mwandishi wa mchoro huu haijaonyesha hiyo, 963 00:57:48,840 --> 00:57:54,130 katika kesi hii, trie hii ni muundo data ambao lengo katika maisha ni ya kuhifadhi maneno 964 00:57:54,130 --> 00:57:57,330 kama-l-i-c-e au B-o-b. 965 00:57:57,330 --> 00:58:02,480 Na njia ambayo hiki data maduka Alice na Bob na Charlie na Anita na kadhalika 966 00:58:02,480 --> 00:58:06,970 ni inatumia safu ambapo kuhifadhi Alice katika trie, 967 00:58:06,970 --> 00:58:09,820 sisi kuanza nodi katika mizizi ambayo inaonekana kama safu, 968 00:58:09,820 --> 00:58:12,080 na ni kuandikwa katika nukuu shorthand. 969 00:58:12,080 --> 00:58:15,070 mwandishi omitted abcdefg kwa sababu kulikuwa hakuna majina na kwamba. 970 00:58:15,070 --> 00:58:19,150 Wao tu ilionyesha M na P na T, lakini katika kesi hii, 971 00:58:19,150 --> 00:58:22,780 hebu kuondokana na Alice na Bob na Charlie kwa majina baadhi ya kwamba ni hapa. 972 00:58:22,780 --> 00:58:25,670 Maxwell ni kweli katika mchoro huu. 973 00:58:25,670 --> 00:58:29,570 Hivyo ni jinsi gani kuhifadhi mwandishi M--x-w-e-l-l? 974 00:58:29,570 --> 00:58:36,990 Yeye au yeye kuanza nodi katika mizizi, na akaenda [M], hivyo takribani 13, eneo ya 13 katika safu. 975 00:58:36,990 --> 00:58:40,750 Halafu kutoka hapo, kuna pointer. 976 00:58:40,750 --> 00:58:42,760 pointer kuongoza safu nyingine. 977 00:58:42,760 --> 00:58:47,880 Kutoka huko mwandishi indexed katika safu kwamba katika eneo, kama alivyoonyeshwa huko juu kushoto, 978 00:58:47,880 --> 00:58:52,250 na kisha yeye au yeye ikifuatiwa kuwa pointer safu mwingine, 979 00:58:52,250 --> 00:58:55,460 na akaenda katika eneo pointer X. 980 00:58:55,460 --> 00:58:59,840 Kisha katika safu ijayo mahali W, E, L, L, na kadhalika, 981 00:58:59,840 --> 00:59:03,090 na hatimaye, hebu kweli kujaribu kuweka picha hii. 982 00:59:03,090 --> 00:59:05,380 Gani kuangalia nodi kama katika code? 983 00:59:05,380 --> 00:59:11,820 nodi katika trie ina safu ya kuyatumia kwa nodes zaidi. 984 00:59:11,820 --> 00:59:16,090 Lakini kuna pia got kuwa baadhi ya aina ya thamani ya bulin, angalau katika utekelezaji huu. 985 00:59:16,090 --> 00:59:18,770 Mimi kutokea kwa kuiita is_word. Kwa nini? 986 00:59:18,770 --> 00:59:22,670 Kwa sababu wakati wewe ni kuingiza Maxwell, wewe si inserting 987 00:59:22,670 --> 00:59:25,300 kitu chochote ndani ya muundo huu data. 988 00:59:25,300 --> 00:59:27,480 Wewe si kuandika M. Wewe si kuandika X. 989 00:59:27,480 --> 00:59:30,240 Wote wewe kufanya ni kufuatia kuyatumia. 990 00:59:30,240 --> 00:59:33,360 pointer kwamba inawakilisha M, basi pointer kwamba inawakilisha, 991 00:59:33,360 --> 00:59:36,310 kisha pointer kwamba inawakilisha X, kisha W, E, L, L, 992 00:59:36,310 --> 00:59:41,950 lakini nini unahitaji kufanya mwishoni ni aina ya kwenda, angalia, mimi kufikiwa hii mahali. 993 00:59:41,950 --> 00:59:45,560 Kulikuwa na neno kwamba mwisho hapa katika muundo data. 994 00:59:45,560 --> 00:59:48,190 >> Basi nini trie ni kweli kujazwa na mwandishi alichagua kuwakilisha 995 00:59:48,190 --> 00:59:51,880 haya terminuses na pembetatu kidogo. 996 00:59:51,880 --> 00:59:56,470 Hii ina maana kwamba tu ukweli pembetatu hii hapa, hii thamani ya kweli ya bulin 997 00:59:56,470 --> 00:59:59,200 ina maana kama wewe kurudi nyuma katika mti, 998 00:59:59,200 --> 01:00:02,420 kwamba maana ya neno aitwaye Maxwell ni katika hili. 999 01:00:02,420 --> 01:00:04,870 Lakini foo neno, kwa mfano, 1000 01:00:04,870 --> 01:00:07,970 si katika mti, kwa sababu kama mimi kuanza nodi katika mizizi hapa juu kwa juu, 1001 01:00:07,970 --> 01:00:14,030 Hakuna pointer f, hakuna pointer o, hakuna pointer o. Foo si jina katika kamusi hii. 1002 01:00:14,030 --> 01:00:22,460 Lakini kwa kulinganisha, Turing, t-u-r-i-n-g. Tena, sikuweza kuhifadhi t au u au r au i au n au g. 1003 01:00:22,460 --> 01:00:29,820 Lakini mimi kuhifadhi katika muundo huu data thamani ya njia ya kweli chini hapa kwenye nodi huu - kwa mti 1004 01:00:29,820 --> 01:00:33,030 kwa kuweka thamani hii bulin ya is_word kwa kweli. 1005 01:00:33,030 --> 01:00:35,740 Hivyo trie ni aina gani ya muundo huu kuvutia sana meta, 1006 01:00:35,740 --> 01:00:39,810 ambapo wewe si kweli kuhifadhi maneno yenyewe kwa aina hii ya kamusi. 1007 01:00:39,810 --> 01:00:45,100 Kuwa wazi, wewe tu kuhifadhi ndiyo au hapana, kuna neno kwamba mwisho hapa. 1008 01:00:45,100 --> 01:00:46,430 >> Sasa nini maana? 1009 01:00:46,430 --> 01:00:51,120 Kama una maneno 150,000 katika kamusi ya kwamba wewe ni kujaribu kuhifadhi kumbukumbu katika 1010 01:00:51,120 --> 01:00:53,400 kutumia kitu kama orodha wanaohusishwa, 1011 01:00:53,400 --> 01:00:56,870 wewe ni kwenda na nodes 150,000 katika orodha yako zinazoungwa. 1012 01:00:56,870 --> 01:01:00,250 Na kutafuta mtu wa maneno hayo alphabetically inaweza kuchukua O (n) wakati. 1013 01:01:00,250 --> 01:01:04,370 Linear wakati. Lakini katika kesi ya hapa trie, 1014 01:01:04,370 --> 01:01:09,210 nini wakati mbio za kutafuta neno? 1015 01:01:09,210 --> 01:01:17,390 Ni zinageuka uzuri hapa ni kwamba hata kama una 149,999 maneno tayari katika kamusi hii, 1016 01:01:17,390 --> 01:01:20,170 kama kutekelezwa kwa muundo huu data, 1017 01:01:20,170 --> 01:01:25,560 kiasi gani wakati gani kuchukua kupata au Insert moja zaidi mtu ndani ya kwamba, kama Alice, Alice? 1018 01:01:25,560 --> 01:01:30,640 Naam, ni 5 tu, labda 6 hatua kwa ajili ya tabia trailing. 1019 01:01:30,640 --> 01:01:32,880 Kwa sababu presense ya majina mengine katika muundo 1020 01:01:32,880 --> 01:01:35,340 haina kupata njia ya kuingiza Alice. 1021 01:01:35,340 --> 01:01:39,640 Aidha, kutafuta Alice mara moja kuna maneno 150,000 katika kamusi hii 1022 01:01:39,640 --> 01:01:41,960 haina kupata njia yako ya kutafuta Alice wakati wote, 1023 01:01:41,960 --> 01:01:46,880 kwa sababu ni Alice. . . . . hapa, kwa sababu nimeona thamani ya bulin. 1024 01:01:46,880 --> 01:01:50,920 Na kama hakuna bulin kweli, basi ni Alice si katika muundo huu data ya maneno. 1025 01:01:50,920 --> 01:01:56,220 Kwa maneno mengine, wakati mbio za kutafuta mambo na kuingiza mambo katika hii mpya 1026 01:01:56,220 --> 01:02:01,920 data muundo wa trie ni O ya - ni si n. 1027 01:02:01,920 --> 01:02:05,730 Kwa sababu presense ya watu 150,000 ina hakuna athari kwenye Alice, inaonekana. 1028 01:02:05,730 --> 01:02:11,560 Basi hebu kuiita k, ambapo k ni upeo wa urefu wa neno katika lugha ya Kiingereza 1029 01:02:11,560 --> 01:02:14,050 ambayo ni kawaida hakuna zaidi ya 20-kitu wahusika. 1030 01:02:14,050 --> 01:02:17,940 Hivyo k ni mara kwa mara. Hivyo Grail Mtakatifu sisi wanaonekana kuwa kupatikana sasa 1031 01:02:17,940 --> 01:02:26,000 ni kwamba wakati wa trie, mara kwa mara kwa ajili ya kuwekeza, kwa lookups, kwa kufuta maneno. 1032 01:02:26,000 --> 01:02:29,170 Kwa sababu idadi ya mambo tayari katika muundo, 1033 01:02:29,170 --> 01:02:32,600 ambayo ni hata kimwili huko. Tena, wao ni tu aina ya checked mbali, ndiyo au hapana, 1034 01:02:32,600 --> 01:02:35,050 haina athari yoyote kwa wakati wake baadaye mbio. 1035 01:02:35,050 --> 01:02:37,940 >> Lakini kuna got kuwa samaki, vinginevyo tusingeweza kupita muda kiasi 1036 01:02:37,940 --> 01:02:41,460 juu ya miundo haya mengine yote data tu na hatimaye kupata kwa moja siri hiyo ni ajabu. 1037 01:02:41,460 --> 01:02:46,410 Basi nini bei ni sisi kulipa ili kufikia ukuu hapa? Nafasi. 1038 01:02:46,410 --> 01:02:49,010 Jambo hili ni kubwa. Na sababu ya kuwa mwandishi 1039 01:02:49,010 --> 01:02:52,400 haijawasilisha hapa, taarifa kwamba mambo yote haya ili kuangalia kama arrays, 1040 01:02:52,400 --> 01:02:55,400 hakuwa kuteka ya mapumziko ya mti, wengine wa trie, 1041 01:02:55,400 --> 01:02:58,060 kwa sababu wao ni si tu muhimu kwa hadithi. 1042 01:02:58,060 --> 01:03:01,870 Lakini yote ya nodi hiyo ni super pana, na kila nodi katika mti inachukua hadi 1043 01:03:01,870 --> 01:03:07,780 26 au kweli, inaweza kuwa 27 wahusika kwa sababu katika kesi hii nilikuwa pamoja na nafasi kwa apostrophe 1044 01:03:07,780 --> 01:03:09,980 hivyo kwamba tunaweza kuwa na maneno apostrophized. 1045 01:03:09,980 --> 01:03:14,450 Katika kesi hiyo, hizi ni pana arrays. Hivyo hata kama wao siyo picutured, 1046 01:03:14,450 --> 01:03:18,190 hii inachukua hadi kiasi kikubwa cha RAM. 1047 01:03:18,190 --> 01:03:20,670 Ambayo inaweza kuwa faini, especilly katika vifaa vya kisasa, 1048 01:03:20,670 --> 01:03:25,650 lakini hiyo ni tradeoff. Sisi kupata muda kidogo kwa kutumia zaidi nafasi. 1049 01:03:25,650 --> 01:03:28,580 Hivyo ambapo ni hii yote kwenda? 1050 01:03:28,580 --> 01:03:32,640 Naam, hebu kufanya - hebu angalia hapa. 1051 01:03:32,640 --> 01:03:39,510 Hebu kufanya kuruka kwa guy hii hapa. 1052 01:03:39,510 --> 01:03:43,450 >> Amini au sio, fun kama vile C imekuwa kwa muda mrefu sasa, 1053 01:03:43,450 --> 01:03:48,130 sisi ni kufikia hatua katika muhula ambapo ni wakati wa mpito kwa mambo ya kisasa zaidi. 1054 01:03:48,130 --> 01:03:50,950 Mambo katika ngazi ya juu. Na hata kama kwa michache ijayo ya wiki 1055 01:03:50,950 --> 01:03:54,580 tutaweza bado wanaendelea kutumbukiza wenyewe katika dunia ya kuyatumia na usimamizi kumbukumbu 1056 01:03:54,580 --> 01:03:57,210 kupata kwamba faraja ambayo tunaweza kujenga juu kisha, 1057 01:03:57,210 --> 01:04:01,270 mchezo wa mwisho ni hatimaye kuanzisha, hazijaingizwa si lugha hii. 1058 01:04:01,270 --> 01:04:03,330 Tutaweza kutumia, kama dakika 10 kuzungumza juu ya HTML. 1059 01:04:03,330 --> 01:04:05,950 Zote HTML ni ni lugha ghafi, na lugha gani ghafi ni 1060 01:04:05,950 --> 01:04:10,220 ni hayo mfululizo wa mabano wazi na mabano funge kwamba kusema 'kufanya hii koze' 1061 01:04:10,220 --> 01:04:12,000 'Kufanya hii italics' kufanya hii kujivuna. ' 1062 01:04:12,000 --> 01:04:14,250 Ni wale wote kielimu ya kuvutia, lakini ni super manufaa. 1063 01:04:14,250 --> 01:04:16,650 Na hakika omnipresent siku hizi. 1064 01:04:16,650 --> 01:04:19,450 Lakini nini nguvu kuhusu dunia ya HTML, na mtandao programu kwa ujumla zaidi, 1065 01:04:19,450 --> 01:04:25,910 ni kujenga mambo ya nguvu; kuandika code katika lugha kama PHP au chatu au Ruby au Java au C #. 1066 01:04:25,910 --> 01:04:30,360 Kweli, yo lugha yako ya uchaguzi ni, na kuzalisha HTML dynamically. 1067 01:04:30,360 --> 01:04:32,960 Kuzalisha kitu kinachoitwa CSS dynamically. 1068 01:04:32,960 --> 01:04:35,810 Kuachia mtindo shuka, ambayo pia ni kuhusu aesthetics. 1069 01:04:35,810 --> 01:04:41,360 Na hata ingawa, leo, kama mimi kwenda kwa baadhi ya tovuti kama Google.com utambuzi, 1070 01:04:41,360 --> 01:04:46,100 na mimi kwenda kuona, developer, mtazamo chanzo, ambayo labda umefanya kosa kabla, 1071 01:04:46,100 --> 01:04:49,800 lakini kwenda kuona chanzo, stuff pengine hii inaonekana pretty cryptic. 1072 01:04:49,800 --> 01:04:55,320 Lakini hii ni code msingi ambayo kutekeleza Google.com. 1073 01:04:55,320 --> 01:04:57,940 Juu ya mwisho wa mbele. Na kweli, haya yote ni fluffy aesthetics stuff. 1074 01:04:57,940 --> 01:05:01,740 Hii ni CSS hapa juu. Kama mimi kuweka scrolling chini tutaweza kupata baadhi ya mambo rangi-coded. 1075 01:05:01,740 --> 01:05:06,890 Hii ni HTML. Code Google inaonekana kama fujo, lakini kama mimi kweli kufungua dirisha tofauti, 1076 01:05:06,890 --> 01:05:09,380 tunaweza kuona baadhi muundo huu. 1077 01:05:09,380 --> 01:05:12,640 Kama mimi kufungua hili, taarifa hapa, ni kidogo zaidi someka. 1078 01:05:12,640 --> 01:05:16,850 Sisi ni kwenda kuona kabla ya muda mrefu hii tag, [neno] ni tag, 1079 01:05:16,850 --> 01:05:23,520 HTML, kichwa, mwili, div, script, Nakala eneo hilo, span, unaozingatia, div. 1080 01:05:23,520 --> 01:05:26,770 Na hii pia ni aina ya cryptic-kuangalia katika mtazamo wa kwanza, 1081 01:05:26,770 --> 01:05:30,890 lakini wote wa fujo hii ifuatavyo ruwaza fulani, na mwelekeo wa repeatable, 1082 01:05:30,890 --> 01:05:33,850 hivyo kwamba mara sisi kupata misingi chini, wewe utakuwa na uwezo wa kuandika code kama hii 1083 01:05:33,850 --> 01:05:37,550 na kisha kuendesha code kama hii kwa kutumia bado lugha nyingine, kuitwa JavaScript. 1084 01:05:37,550 --> 01:05:40,440 Na javascript ni lugha ya kwamba anaendesha ndani ya browser 1085 01:05:40,440 --> 01:05:44,380 leo kwamba sisi kutumia juu ya Harvard kozi, kwa chombo bila shaka ununuzi kwamba anatumia Google ramani 1086 01:05:44,380 --> 01:05:48,660 kukupa rundo zima la mabadiliko, Facebook inakupa kuonyesha updates hadhi papo, 1087 01:05:48,660 --> 01:05:51,430 Twitter kuitumia kuonyesha tweets instantly. 1088 01:05:51,430 --> 01:05:53,820 Yote hii tutaanza kutumbukiza wenyewe in 1089 01:05:53,820 --> 01:05:57,190 Lakini kufika huko, tunahitaji kuelewa kitu kidogo kuhusu mtandao. 1090 01:05:57,190 --> 01:06:01,130 Hii picha ya video hapa ni dakika tu kwa muda mrefu, na hebu kudhani kwa sasa hii ni, kwa kweli, 1091 01:06:01,130 --> 01:06:08,380 jinsi Internet kazi kama teaser kwa nini kuhusu kuja. Mimi kukupa "Warriors ya Net." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Slow chorus muziki ♫] 1093 01:06:14,720 --> 01:06:20,450 [Kiume msimuliaji] Yeye alikuja na ujumbe. 1094 01:06:20,450 --> 01:06:23,770 Pamoja na itifaki ya yote peke yake. 1095 01:06:23,770 --> 01:06:37,270 [♫ Faster elektroniki muziki ♫] 1096 01:06:37,270 --> 01:06:41,330 Alikuja dunia ya mpenyo baridi, asiyejali ruta, 1097 01:06:41,330 --> 01:06:45,690 na hatari mbaya zaidi kuliko kifo. 1098 01:06:45,690 --> 01:06:55,400 Yeye ni kufunga. Yeye ni hodari. Yeye ni TCP / IP, na yeye got anwani yako. 1099 01:06:55,400 --> 01:06:59,250 Wapiganaji wa Net. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Ifwatayo wiki, basi. Internet. Mtandao programu. Hii ni CS50. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]