1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Java 6, vazhdoi] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Universiteti i Harvardit] 3 00:00:04,160 --> 00:00:08,720 [Kjo është CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Kjo është CS50 dhe ky është fundi i javës 6. 5 00:00:12,970 --> 00:00:17,970 Pra CS50x, një nga kurset e para të Harvardit e përfshira në iniciativë EDX 6 00:00:17,970 --> 00:00:20,590 vërtetë debutuar këtë të hënë e kaluar. 7 00:00:20,590 --> 00:00:23,460 Nëse ju do të donte për të marrë një paraqitje e shkurtër e asaj që të tjerëve në internet 8 00:00:23,460 --> 00:00:27,180 tani janë në vijim së bashku me të, ju mund të shkojnë në x.cs50.net. 9 00:00:27,180 --> 00:00:30,350 Kjo do të ju përcjellim në vendin e duhur në edx.org, 10 00:00:30,350 --> 00:00:34,160 i cili ishte vendi ku ky dhe kurse të tjera nga MIT dhe Berkeley tani jetojnë. 11 00:00:34,160 --> 00:00:38,140 Ju do të keni për të nënshkruar për një llogari, ju do të gjeni se materiali është kryesisht i njëjtë 12 00:00:38,140 --> 00:00:42,170 si ju kam pasur këtë semestër, megjithëse disa javë vonuar, si ne të merrni gjithçka gati. 13 00:00:42,170 --> 00:00:46,930 Por ajo që nxënësit në CS50x tani do të shihni është një ndërfaqe mjaft si ky. 14 00:00:46,930 --> 00:00:50,040 Kjo, për shembull, është Zamyla udhëheq walkthrough për të vendosur problemin 0. 15 00:00:50,040 --> 00:00:54,230 Pas logging in për edx.org, një student CS50x sheh llojet e gjërave të 16 00:00:54,230 --> 00:00:57,170 ju do të presin për të parë në një kurs: leksion për të hënën, 17 00:00:57,170 --> 00:01:01,650 Ligjërata për të mërkurën, pantallona të shkurtra të ndryshme, vendos problem, walkthroughs, PDF. 18 00:01:01,650 --> 00:01:04,459 Përveç kësaj, siç e shihni këtu, përkthimet e makinës 19 00:01:04,459 --> 00:01:08,390 i transkripteve anglisht në kinezisht, japonisht, spanjisht, italisht, 20 00:01:08,390 --> 00:01:12,810 dhe një bandë e tërë e gjuhëve të tjera që me siguri do të jetë e pakryer 21 00:01:12,810 --> 00:01:15,840 si ne roll ato programuar duke përdorur diçka që quhet një API, 22 00:01:15,840 --> 00:01:18,360 ose programimi aplikimit interface, nga Google 23 00:01:18,360 --> 00:01:21,360 që na lejon të konvertohet anglisht në këto gjuhë tjera. 24 00:01:21,360 --> 00:01:24,100 Por në sajë të shpirtit të mrekullueshme e disa qindra-plus vullnetarë, 25 00:01:24,100 --> 00:01:26,940 njerëz të rastit në internet që kanë ofruar mirësi për të marrë të përfshirë 26 00:01:26,940 --> 00:01:30,180 në këtë projekt, ne do të gradualisht të përmirësuar cilësinë e këtyre përkthimeve 27 00:01:30,180 --> 00:01:35,790 duke pasur njerëzit të korrigjuar gabimet që kompjuterat tanë kanë bërë. 28 00:01:35,790 --> 00:01:42,330 >> Pra, ajo rezulton ne kishim një nxënës pak më shumë shfaqen të hënën se ne prisnim fillimisht. 29 00:01:42,330 --> 00:01:48,980 Në fakt, tani CS50x ka 100.000 njerëz në vijim së bashku në shtëpi. 30 00:01:48,980 --> 00:01:54,430 Pra, të kuptojnë se janë të gjitha pjesë e kësaj klase inauguruese e bërë këtë kurs në shkenca kompjuterike 31 00:01:54,430 --> 00:01:57,370 Arsimi në përgjithësi, më gjerësisht, të arritshme. 32 00:01:57,370 --> 00:02:00,130 Dhe realiteti është tani, me disa nga këto kurse masive online, 33 00:02:00,130 --> 00:02:04,070 ata të gjithë të fillojnë me këto numra shumë të larta, si ne duket se kanë bërë këtu. 34 00:02:04,070 --> 00:02:08,759 Por qëllimi, në fund të fundit, për CS50x është me të vërtetë për të marrë sa më shumë njerëz për të vijë të përfundojë sa të jetë e mundur. 35 00:02:08,759 --> 00:02:12,000 Me dashje, CS50x do të ofrohen nga ky e hëna e kaluar 36 00:02:12,000 --> 00:02:17,430 të gjithë rrugën nëpër 15 prill 2013, në mënyrë që folks të cilët kanë angazhime të shkollës gjetkë, 37 00:02:17,430 --> 00:02:20,990 , puna e familjes, konfliktet e tjera dhe si, kanë pak më shumë fleksibilitet 38 00:02:20,990 --> 00:02:23,640 me të cilat të zhyten në këtë kurs, të cilat, mjafton që të them, 39 00:02:23,640 --> 00:02:30,540 është mjaft ambicioze bëhet vetëm nëse gjatë vetëm tre muaj gjatë një semestri zakonshme. 40 00:02:30,540 --> 00:02:34,190 Por këta studentë do të trajtimin e grupe të njëjtat probleme, duke e parë të njëjtën përmbajtje, 41 00:02:34,190 --> 00:02:36,350 pasur qasje në pantallona të njëjta dhe të ngjashme. 42 00:02:36,350 --> 00:02:38,990 Pra, të kuptojnë se ne jemi të gjithë të vërtetë në këtë së bashku. 43 00:02:38,990 --> 00:02:42,360 Dhe një nga qëllimet fund të CS50x nuk është vetëm për të marrë sa më shumë folks 44 00:02:42,360 --> 00:02:45,720 në vijën e finishit dhe për t'u dhënë atyre këtë kuptim newfound e shkencës kompjuterike 45 00:02:45,720 --> 00:02:49,000 dhe programimit, por edhe të kenë ata e kanë këtë përvojë të përbashkët. 46 00:02:49,000 --> 00:02:52,010 Një nga karakteristikat përcaktuese të 50 në kampus, ne shpresojmë, 47 00:02:52,010 --> 00:02:56,260 ka qenë ky lloj i përvojës komunale, për mirë apo për keq, ndonjëherë, 48 00:02:56,260 --> 00:02:59,480 por që këta njerëz të kthehet në të majtë dhe në të djathtë, 49 00:02:59,480 --> 00:03:01,830 dhe orarit të punës dhe hackathon dhe drejtë. 50 00:03:01,830 --> 00:03:04,560 Është pak e vështirë për të bërë që në person me folks online, 51 00:03:04,560 --> 00:03:10,580 por CS50x do të përfundojë në prill me parë ndonjëherë Expo CS50, 52 00:03:10,580 --> 00:03:13,630 cili do të jetë një përshtatje online idenë tonë të panairit 53 00:03:13,630 --> 00:03:18,250 ku këto mijëra e studentëve të gjithë do të ftohen të dorëzojnë një 1 - deri 2-minutëshe video, 54 00:03:18,250 --> 00:03:22,480 ose një screencast e projektit të tyre përfundimtar ose video prej tyre mbanin përshëndetje 55 00:03:22,480 --> 00:03:24,490 dhe duke folur në lidhje me projektin e tyre dhe demoing atë, 56 00:03:24,490 --> 00:03:27,610 shumë si paraardhësit tuaj kanë bërë këtu në kampus në panair, 57 00:03:27,610 --> 00:03:31,400 kështu që deri në fund të semestrit së, shpresa është që të kemi një ekspozitë globale 58 00:03:31,400 --> 00:03:37,080 e projekteve të nxënësve CS50x 'përfundimtare, ashtu si ajo që ju pret këtu në këtë dhjetor kampus. 59 00:03:37,080 --> 00:03:39,680 Pra, më shumë se në muajt që do të vijnë. 60 00:03:39,680 --> 00:03:43,640 >> Me 100.000 studentë, megjithatë, vjen nevoja për një AK pak më shumë. 61 00:03:43,640 --> 00:03:47,590 Duke pasur parasysh se ju djema janë gjurmët flakëron këtu dhe duke marrë CS50 62 00:03:47,590 --> 00:03:51,630 disa javë më parë për lirimin e këtij materiali ndaj folks në EDX, 63 00:03:51,630 --> 00:03:55,330 realizuar ne do të duan që të përfshijë sa më shumë prej studentëve tona të jetë e mundur në këtë nismë, 64 00:03:55,330 --> 00:03:58,720 edhe gjatë semestrit si dhe këtë dimër dhe kjo pranverë që vjen. 65 00:03:58,720 --> 00:04:01,620 Pra, nëse ju do të donte për të marrë të përfshirë në CS50x, 66 00:04:01,620 --> 00:04:07,450 veçanërisht bashkuar në të CS50x diskutuar, versioni EDX e CS50 diskutuar, 67 00:04:07,450 --> 00:04:10,140 që shumë prej jush kanë qenë duke përdorur në kampus, bordi internet buletini, 68 00:04:10,140 --> 00:04:13,040 ju lutem mos kokën në atë URL, le të na tregoni se kush jeni, 69 00:04:13,040 --> 00:04:16,450 sepse ne do të duan për të ndërtuar një ekip të studentëve dhe stafit dhe Fakulteti njësoj 70 00:04:16,450 --> 00:04:19,630 në kampus të cilët janë thjesht duke luajtur së bashku dhe për të ndihmuar jashtë. 71 00:04:19,630 --> 00:04:21,720 Dhe kur ata shohin një pyetje që është e njohur për ta, 72 00:04:21,720 --> 00:04:25,320 keni dëgjuar një student raportimit disa bug diku atje në ndonjë vend në internet, 73 00:04:25,320 --> 00:04:27,450 dhe që unaza një zile sepse ju gjithashtu kishte të njëjtën çështje që 74 00:04:27,450 --> 00:04:32,620 në tuaj d-sallë disa kohë më parë, shpresojmë se atëherë ju mund të bie në dhe të ndajnë përvojën tuaj. 75 00:04:32,620 --> 00:04:37,300 Pra ju lutem mos marrim pjesë në qoftë se ju do të donte. 76 00:04:37,300 --> 00:04:39,360 >> Kurse shkenca kompjuterike në Harvard kanë një grimë e një tradite, 77 00:04:39,360 --> 00:04:44,730 CS50 në mesin e tyre, për të pasur disa veshje, disa rroba, të cilat ju mund të veshin me krenari 78 00:04:44,730 --> 00:04:49,090 në fund të semestrit, duke thënë mjaft krenari që keni mbaruar CS50 79 00:04:49,090 --> 00:04:51,830 dhe mori CS50 dhe si, dhe ne gjithmonë përpiqemi për të përfshirë studentët 80 00:04:51,830 --> 00:04:54,540 në këtë proces sa më shumë të jetë e mundur, ku ne ftojmë, 81 00:04:54,540 --> 00:04:56,900 rreth kësaj kohe të semestrit, studentët të paraqesin planet 82 00:04:56,900 --> 00:04:59,330 duke përdorur Photoshop, ose çfarëdo mjet i zgjedhur ju dëshironi të përdorni 83 00:04:59,330 --> 00:05:02,330 në qoftë se ju jeni një projektuesi, të paraqesin planet për të T-shirts dhe sweatshirts 84 00:05:02,330 --> 00:05:06,100 dhe cadra dhe Bandanas pak për qentë ne tani kemi dhe si. 85 00:05:06,100 --> 00:05:09,370 Dhe çdo gjë është pastaj - fituesit për çdo vit janë të ekspozuara pas 86 00:05:09,370 --> 00:05:12,700 në faqen e internetit Kursi së në store.cs50.net. 87 00:05:12,700 --> 00:05:15,790 Gjithçka është shitur me kosto atje, por në faqen e internetit vetëm shkon vetë 88 00:05:15,790 --> 00:05:18,330 dhe lejon njerëzit të zgjedhin ngjyrat dhe harton që ata donin. 89 00:05:18,330 --> 00:05:20,420 Kështu që unë mendova që ne vetëm do të ndajnë disa nga planet e vitit të kaluar 90 00:05:20,420 --> 00:05:25,130 që ishin në faqen e internetit përveç kësaj një këtu, e cila është një traditë vjetore. 91 00:05:25,130 --> 00:05:29,410 "Çdo ditë unë jam seg Faultn" ishte një prej parashtrimeve të vitit të kaluar, 92 00:05:29,410 --> 00:05:32,290 e cila është ende në dispozicion atje për alumni. 93 00:05:32,290 --> 00:05:35,820 Ne kemi pasur këtë, "CS50, themeluar 1989." 94 00:05:35,820 --> 00:05:39,010 Një nga Bowdens tona, Rob, ishte shumë popullor në vitin e kaluar. 95 00:05:39,010 --> 00:05:43,480 "Ekipi Bowden" ka lindur, ky dizajn është paraqitur, në mesin e shitësit të lartë. 96 00:05:43,480 --> 00:05:49,040 Si ishte kjo një këtu. Shumë njerëz kishin "Ethet" Bowden sipas shkrimet shitjes. 97 00:05:49,040 --> 00:05:52,650 Kuptojnë se që tani mund të jetë dizajni juaj atje, deri në internet. 98 00:05:52,650 --> 00:05:57,510 Më shumë detaje për këtë në problemin e ardhshëm vendos për të ardhur. 99 00:05:57,510 --> 00:06:00,330 >> Një mjet shumë: ju keni pasur disa ekspozimit dhe shpresojmë se tani 100 00:06:00,330 --> 00:06:02,350 disa duart-në përvojën me GDB, 101 00:06:02,350 --> 00:06:04,570 që është, sigurisht, një Rregullues dhe ju lejon të manipuluar 102 00:06:04,570 --> 00:06:09,500 programi juaj në një nivel mjaft të ulët, duke bërë atë që llojet e gjëra? 103 00:06:09,500 --> 00:06:13,030 Çfarë do të ju lejojnë të bëni Gdb? 104 00:06:13,030 --> 00:06:15,030 Po? Jepni diçka. [Student përgjigje, pakuptueshëm] 105 00:06:15,030 --> 00:06:18,120 Mirë. Hapi në funksion, kështu që ju nuk duhet të shkruani vetëm të drejtuar 106 00:06:18,120 --> 00:06:22,310 dhe kanë goditje program përmes tërësinë e saj, shtypjen gjëra të prodhimit standard. 107 00:06:22,310 --> 00:06:25,190 Përkundrazi, ju mund të hap nëpër atë rresht pas rreshti, ose shtypja e ardhshme 108 00:06:25,190 --> 00:06:30,300 për të shkuar vijë nga rresht pas rreshti, ose hap të zhyten në një funksion, zakonisht ai që ju ka shkruajtur. 109 00:06:30,300 --> 00:06:35,240 Çfarë tjetër do të ju lejojnë të bëni Gdb? Po? [Student përgjigje, pakuptueshëm] 110 00:06:35,240 --> 00:06:38,100 Print variablave. Pra, nëse ju doni të bëni një analizë e vetvetes pak brenda programit tuaj 111 00:06:38,100 --> 00:06:41,500 pa pasur nevojë të përdorë për të shkruar deklaratat printf në të gjithë vendin, 112 00:06:41,500 --> 00:06:44,600 vetëm ju mund të shtypura një ndryshore ose të shfaqë një ndryshore. 113 00:06:44,600 --> 00:06:46,710 Çfarë tjetër mund të bëni me një Rregullues si gdb? 114 00:06:46,710 --> 00:06:49,170 [Student përgjigje, pakuptueshëm] 115 00:06:49,170 --> 00:06:52,080 Saktësisht. Ju mund të vendosni breakpoints, ju mund të them ekzekutimin pushim 116 00:06:52,080 --> 00:06:54,020 në funksion kryesor ose funksion foo. 117 00:06:54,020 --> 00:06:56,800 Ju mund të them ekzekutimin pushim në linjë 123. 118 00:06:56,800 --> 00:06:58,950 Dhe pikat e ndalimit janë një teknikë të vërtetë të fuqishme 119 00:06:58,950 --> 00:07:01,110 sepse në qoftë se ju keni një ndjenjë të përgjithshme se ku problemi juaj 120 00:07:01,110 --> 00:07:05,360 ndoshta është, ju nuk keni për të humbur kohën shkelën nëpër tërësinë e programit. 121 00:07:05,360 --> 00:07:08,250 Ju mund të thelb të kërcejnë drejtë atje dhe pastaj të fillojë typing - 122 00:07:08,250 --> 00:07:10,970 shkelën nëpër atë me hap ose tjetër, ose si. 123 00:07:10,970 --> 00:07:14,340 Por kapur me diçka si gdb është se ajo ndihmon ju, njeriu, 124 00:07:14,340 --> 00:07:16,940 gjeni problemet tuaja dhe për të gjetur mete tuaja. 125 00:07:16,940 --> 00:07:19,470 Kjo nuk do të gjejnë ata aq shumë për ju. 126 00:07:19,470 --> 00:07:23,070 >> Pra, ne kemi prezantuar style50 tjetër ditë, e cila është një linjë komande mjet i shkurtër 127 00:07:23,070 --> 00:07:27,500 që përpiqet të stilizoj kodin tuaj pak më të pastër se ju, e njeriut, mund të ketë bërë. 128 00:07:27,500 --> 00:07:29,530 Por kjo, gjithashtu, është në të vërtetë vetëm një gjë estetike. 129 00:07:29,530 --> 00:07:34,110 Por kjo rezulton se ka ky mjet tjetër i quajtur Shprehje që është pak më misterioze për t'u përdorur. 130 00:07:34,110 --> 00:07:36,860 Prodhimi i saj është atrociously fshehtë në shikim të parë. 131 00:07:36,860 --> 00:07:39,420 Por kjo është mrekullisht e dobishme, sidomos tani që ne jemi në pjesën e mandatit 132 00:07:39,420 --> 00:07:43,080 ku ju jeni duke filluar të përdorin malloc dhe alokimin dinamik kujtesës. 133 00:07:43,080 --> 00:07:45,420 Gjërat mund të shkojnë me të vërtetë, me të vërtetë keq shpejt. 134 00:07:45,420 --> 00:07:49,320 Sepse në qoftë se ju harroni të liruar kujtesën tuaj, ose ju dereference disa tregues NULL, 135 00:07:49,320 --> 00:07:55,770 ose ju dereference disa tregues plehrash, çka zakonisht është simptomë se rezultatet? 136 00:07:55,770 --> 00:07:59,470 Seg faj. Dhe ju të merrni këtë skedë bazë të numrit të disa kilobytes ose megabajt 137 00:07:59,470 --> 00:08:02,990 që përfaqëson gjendjen e kujtesës programit tuaj kur ajo u rrëzua, 138 00:08:02,990 --> 00:08:05,730 por në fund të fundit programi juaj seg gabimet, fajin segmentimit, 139 00:08:05,730 --> 00:08:08,450 që do të thotë diçka e keqe ka ndodhur pothuajse gjithmonë e lidhur 140 00:08:08,450 --> 00:08:11,750 për një gabim kujtesës të lidhura që keni bërë diku. 141 00:08:11,750 --> 00:08:14,100 Pra Shprehje ju ndihmon të gjeni gjëra të tilla si kjo. 142 00:08:14,100 --> 00:08:17,720 Kjo është një mjet që ju drejtuar, si gdb, pasi ju keni hartuar programin tuaj, 143 00:08:17,720 --> 00:08:20,330 por në vend se të drejtuar programin tuaj direkt, ju drejtuar Shprehje 144 00:08:20,330 --> 00:08:23,960 dhe ju të kalojë në atë programin tuaj, ashtu si ju bëni me GDB. 145 00:08:23,960 --> 00:08:26,220 Tani, përdorimi, për të marrë llojin më të mirë të prodhimit, 146 00:08:26,220 --> 00:08:30,410 është pak më të gjatë, në mënyrë të drejtë ka në majë të ekranit që ju do të shihni Shprehje-V. 147 00:08:30,410 --> 00:08:35,350 "-V" pothuajse universalisht të thotë fjalëshumë kur ju jeni duke përdorur programe në një kompjuter Linux. 148 00:08:35,350 --> 00:08:38,770 Pra, kjo do të thotë më shumë të dhëna nxjerr nga goja se sa ju mund nga default. 149 00:08:38,770 --> 00:08:45,510 "- Rrjedhje-check = të plotë." Kjo është vetëm duke thënë kontroll për të gjitha rrjedhjet e kujtesës mundshme, 150 00:08:45,510 --> 00:08:49,430 Gabimet që unë mund të ketë bërë. Kjo, gjithashtu, është një paradigmë të përbashkët me programet Linux. 151 00:08:49,430 --> 00:08:52,710 Në përgjithësi, në qoftë se ju keni një argument command line që është një "switch", 152 00:08:52,710 --> 00:08:55,830 që është menduar për të ndryshuar sjelljen e programit, dhe kjo është një letër të vetme, 153 00:08:55,830 --> 00:09:00,310 kjo është v-, por nëse kjo është ndezur, vetëm me hartimin e programues, 154 00:09:00,310 --> 00:09:05,150 është një fjalë të plotë apo seri të fjalëve, linja e komandës argumenti fillon me -. 155 00:09:05,150 --> 00:09:08,190 Këto janë vetëm konventa e njeriut, por ju do të shihni ato gjithnjë e më shumë. 156 00:09:08,190 --> 00:09:12,410 Dhe pastaj, në fund, "a.out" është emri arbitrar për programin në këtë shembull të veçantë. 157 00:09:12,410 --> 00:09:14,640 Dhe këtu e disa output përfaqësues. 158 00:09:14,640 --> 00:09:22,890 >> Para se të shohim se çka mund të them, më lejoni të shkoj në një copë të kodit gjatë këtu. 159 00:09:22,890 --> 00:09:26,390 Dhe më lejoni të lëvizë këtë nga rruga, që vijnë së shpejti, 160 00:09:26,390 --> 00:09:32,120 dhe le të marrin një vështrim në memory.c, i cili është ky shembull të shkurtër këtu. 161 00:09:32,120 --> 00:09:36,290 Pra, në këtë program, më lejoni të zoom në në funksionet dhe pyetjet. 162 00:09:36,290 --> 00:09:39,430 Ne kemi një funksion kryesor që e quan një funksion, F, 163 00:09:39,430 --> 00:09:45,590 dhe pastaj ajo do të vazhdojë të bëjë f, në anglisht pak më teknik? 164 00:09:45,590 --> 00:09:49,760 Çfarë ka f vazhdoj të bëj? 165 00:09:49,760 --> 00:09:53,680 Si në lidhje unë do të fillojë me linjë të 20, dhe vendndodhjen ylli nuk ka rëndësi, 166 00:09:53,680 --> 00:09:56,720 por unë vetëm do të jetë në përputhje me këtu leksion fundit. 167 00:09:56,720 --> 00:09:59,910 Çfarë është linjë e 20 për ne? Në anën e majtë. Ne do të thyejnë atë poshtë më tej. 168 00:09:59,910 --> 00:10:02,410 Int * x: çfarë do që të bëj? 169 00:10:02,410 --> 00:10:04,940 Rregull. Është deklaruar një tregues, dhe tani le të jetë edhe më e teknike. 170 00:10:04,940 --> 00:10:10,230 Çfarë do të thotë kjo, shumë konkretisht, të deklarojë një akrep? Dikush tjetër? 171 00:10:10,230 --> 00:10:15,050 Po? [Student përgjigje, pakuptueshëm] Shume larg. 172 00:10:15,050 --> 00:10:17,060 Pra, ju jeni duke e lexuar në anën e djathtë të shenjës të barabartë. 173 00:10:17,060 --> 00:10:20,290 Le të përqëndrohet vetëm në të majtë, vetëm në int * x. 174 00:10:20,290 --> 00:10:24,700 Kjo do të thotë "shpallë" një tregues, por tani le të zhyten më thellë në për këtë përkufizim. 175 00:10:24,700 --> 00:10:28,330 Çfarë bën që konkretisht, teknikisht do të thotë? Po? 176 00:10:28,330 --> 00:10:31,940 [Student përgjigje, pakuptueshëm] 177 00:10:31,940 --> 00:10:35,090 Rregull. Është duke u përgatitur për të ruajtur një adresë në kujtesë. 178 00:10:35,090 --> 00:10:40,680 Mirë. Dhe le të marrin këtë hap më tej, por është deklaruar një ndryshore, x, që është 32 bit. 179 00:10:40,680 --> 00:10:44,440 Dhe unë e di se është 32 bit sepse -? 180 00:10:44,440 --> 00:10:47,390 Kjo nuk është për shkak se ajo është një int, sepse kjo është një tregues në këtë rast. 181 00:10:47,390 --> 00:10:49,650 Rastësi që kjo është një dhe e njëjtë me një int, 182 00:10:49,650 --> 00:10:51,970 por fakti se nuk ka yll do të thotë kjo është një tregues 183 00:10:51,970 --> 00:10:57,300 dhe në aplikim, si me shumë kompjuterë, por jo të gjitha, janë pointers 32 bit. 184 00:10:57,300 --> 00:11:01,850 Në hardware më moderne si të Macs fundit, PC e fundit, ju mund të keni 64-bit pointers, 185 00:11:01,850 --> 00:11:04,160 por në aplikim, këto gjëra janë 32 bit. 186 00:11:04,160 --> 00:11:08,380 Pra, ne do të standartizuar për këtë. Më konkretisht, historia shkon si vijon: 187 00:11:08,380 --> 00:11:10,820 Ne "deklarojnë" një tregues, çfarë do të thotë kjo? 188 00:11:10,820 --> 00:11:12,810 Ne kemi përgatitur për të ruajtur një adresë memorie. 189 00:11:12,810 --> 00:11:15,530 Çfarë do të thotë kjo? 190 00:11:15,530 --> 00:11:19,810 Ne krijimin e një ndryshore x quhet që merr 32 bit 191 00:11:19,810 --> 00:11:23,810 se së shpejti do të ruajtur adresën e një numër të plotë. 192 00:11:23,810 --> 00:11:26,470 Dhe kjo është ndoshta po aq të saktë sa ne mund të merrni. 193 00:11:26,470 --> 00:11:31,810 Kjo është në rregull duke shkuar përpara për të lehtësuar botën dhe vetëm thonë deklarojë një tregues të quajtur x. 194 00:11:31,810 --> 00:11:35,380 Shpallë një tregues, por kuptojnë dhe të kuptojnë se çfarë po ndodh në të vërtetë 195 00:11:35,380 --> 00:11:38,490 edhe në vetëm këto karaktere pak. 196 00:11:38,490 --> 00:11:42,040 >> Tani, kjo është pothuajse një pak më e lehtë, edhe pse kjo është një shprehje më të gjatë. 197 00:11:42,040 --> 00:11:48,160 Pra, çfarë është kjo bën, që e theksoi tani: "malloc (10 * sizeof (int));" Po? 198 00:11:48,160 --> 00:11:52,350 [Student përgjigje, pakuptueshëm] 199 00:11:52,350 --> 00:11:58,250 Mirë. Dhe unë do të marrë atë atje. Është caktimin një copë e kujtesës për dhjetë integers. 200 00:11:58,250 --> 00:12:02,190 Dhe tani le të zhyten në pak më thellë, ajo e ndarjes së një copë e kujtesës për dhjetë integers. 201 00:12:02,190 --> 00:12:05,390 Çfarë është malloc pastaj kthehen? 202 00:12:05,390 --> 00:12:10,390 Adresa e asaj copë, ose më konkretisht, adresën e bajt parë të asaj copë. 203 00:12:10,390 --> 00:12:14,080 Si atëherë jam unë, programues, që të dini se ku mbaron copë e kujtesës? 204 00:12:14,080 --> 00:12:18,340 Unë e di se është e afërt. Malloc, sipas definicionit, do të ju jap një copë puqet e kujtesës. 205 00:12:18,340 --> 00:12:21,240 Asnjë boshllëqe në të. Ju keni qasje në çdo bajt në atë copë, 206 00:12:21,240 --> 00:12:26,760 për të kthyer prapa për të mbështetur, por si mund ta di se ku në fund të këtij copë e kujtesës është? 207 00:12:26,760 --> 00:12:28,850 Kur ju përdorni malloc? [Student përgjigje, pakuptueshëm] Mirë. 208 00:12:28,850 --> 00:12:30,670 Ju nuk e bëni. Ju duhet të mbani mend. 209 00:12:30,670 --> 00:12:35,960 Unë duhet të mbani mend që kam përdorur vlerën 10, dhe unë as nuk duket se kanë bërë që këtu. 210 00:12:35,960 --> 00:12:41,000 Por përgjegjësia është krejtësisht mbi mua. Strlen, të cilat ne kemi bërë pak për të varur nga strings, 211 00:12:41,000 --> 00:12:45,860 punon vetëm për shkak të kësaj konvente për të pasur \ 0 212 00:12:45,860 --> 00:12:48,840 ose ky karakter të veçantë nul, Nul, në fund të vargut. 213 00:12:48,840 --> 00:12:51,740 Kjo nuk do të mbajë për vetëm chunks arbitrare të kujtesës. 214 00:12:51,740 --> 00:12:58,590 Është e deri tek ju. Pra linjës 20, atëherë, ndan një copë e kujtesës 215 00:12:58,590 --> 00:13:02,590 që mund të ruajë dhjetë integers, dhe ai ruan adresën e bajt parë 216 00:13:02,590 --> 00:13:05,610 e asaj copë e kujtesës në x ndryshueshme quajtur. 217 00:13:05,610 --> 00:13:11,140 Ergo, e cila është një akrep. Pra linjës 21, për fat të keq, ishte një gabim. 218 00:13:11,140 --> 00:13:16,110 Por së pari, çfarë është ajo duke bërë? Është thënë dyqan në vendin 10, 0 indeksuara, 219 00:13:16,110 --> 00:13:19,480 nga copë e kujtesës quajtur x 0 vlera. 220 00:13:19,480 --> 00:13:21,510 >> Pra njoftim disa gjëra janë në vazhdim e sipër. 221 00:13:21,510 --> 00:13:25,420 Edhe pse x është një akrep, kujtohet nga disa javë më parë 222 00:13:25,420 --> 00:13:29,440 që ju ende mund të përdorni array-style parantezë simbol katror. 223 00:13:29,440 --> 00:13:36,180 Sepse kjo është në të vërtetë të shkurtër të dorës simbol për aritmetike akrep më të fshehtë-looking. 224 00:13:36,180 --> 00:13:40,320 ku ne do të bëjmë diçka si kjo: Merrni x adresave, lëvizin 10 spote mbi, 225 00:13:40,320 --> 00:13:44,550 pastaj shkoni atje për çfarëdo adresë është e ruajtur në atë vend. 226 00:13:44,550 --> 00:13:48,090 Por sinqerisht, kjo është vetëm për të lexuar egër dhe për të marrë të rehatshme me. 227 00:13:48,090 --> 00:13:52,900 Pra bota zakonisht përdor kllapa katrore vetëm për shkak se ajo është aq më shumë e njeriut-miqësore për të lexuar. 228 00:13:52,900 --> 00:13:55,140 Por kjo është ajo që është me të vërtetë ndodh nën kapuç; 229 00:13:55,140 --> 00:13:58,190 x është një adresë jo, një grup, në vetvete. 230 00:13:58,190 --> 00:14:02,410 Pra, kjo është ruajtjen 0 në vendin 10 në x. 231 00:14:02,410 --> 00:14:06,120 Pse është kjo e keqe? Po? 232 00:14:06,120 --> 00:14:17,370 [Student përgjigje, pakuptueshëm] Pikërisht. 233 00:14:17,370 --> 00:14:21,100 Ne vetëm dhjetë ints ndarë, por ne numërimin nga 0, kur programimit në C, 234 00:14:21,100 --> 00:14:25,690 kështu që ju keni qasje në 0 10 1 2 3 4 5 6 7 8 9, por jo. 235 00:14:25,690 --> 00:14:30,270 Pra, ose programi do të defektit seg ose ajo nuk është. 236 00:14:30,270 --> 00:14:32,900 Por ne vërtetë nuk e di, kjo është lloj i një sjellje nondeterministic. 237 00:14:32,900 --> 00:14:35,600 Me të vërtetë varet nga ajo nëse ne të merrni me fat. 238 00:14:35,600 --> 00:14:40,650 Në qoftë se kjo rezulton se sistemi operativ nuk ka mend në qoftë se unë e përdor atë bajt shtesë, 239 00:14:40,650 --> 00:14:43,360 edhe pse ajo nuk ka dhënë atë për mua, programi im nuk mund të rrëzimit. 240 00:14:43,360 --> 00:14:46,780 Është papërpunuara, është buggy, por ju nuk mund të shihni se simptomë, 241 00:14:46,780 --> 00:14:48,960 ose ju mund të shihni atë vetëm një herë në një kohë. 242 00:14:48,960 --> 00:14:51,230 Por realiteti është se bug është, në fakt, nuk ka. 243 00:14:51,230 --> 00:14:54,320 Dhe kjo është me të vërtetë problematike në qoftë se ju keni shkruar një program që ju dëshironi që të jetë i saktë, 244 00:14:54,320 --> 00:14:58,840 se ju keni shitur programin që njerëzit janë duke përdorur që çdo herë në një kohë punon 245 00:14:58,840 --> 00:15:02,450 sepse, sigurisht, kjo nuk është e mirë. Në fakt, në qoftë se ju keni një telefon Android apo një iPhone 246 00:15:02,450 --> 00:15:05,550 dhe ju të shkarkoni Apps këto ditë, në qoftë se ju keni pasur ndonjëherë një app lë vetëm, 247 00:15:05,550 --> 00:15:10,040 të gjithë një e papritur ajo zhduket, kjo është pothuajse gjithmonë rezultat i disa çështje kujtesës të lidhura, 248 00:15:10,040 --> 00:15:12,830 ku programues dehur dhe dereferenced një tregues 249 00:15:12,830 --> 00:15:18,670 se ai ose ajo nuk duhet të ketë, dhe rezultati i iOS ose Android është vetëm për të vrarë program krejt 250 00:15:18,670 --> 00:15:23,080 më tepër se sjellja e rrezikut të papërcaktuar ose disa lloj kompromisi sigurisë. 251 00:15:23,080 --> 00:15:25,950 >> Ka një bug të tjera në këtë program përveç kësaj një të tillë. 252 00:15:25,950 --> 00:15:30,180 Çka kam dehur deri në këtë program? 253 00:15:30,180 --> 00:15:32,740 Unë nuk e kam praktikuar atë që unë kam predikuar. Po? 254 00:15:32,740 --> 00:15:34,760 [Student përgjigje, pakuptueshëm] Mirë. 255 00:15:34,760 --> 00:15:36,880 Unë nuk e kanë liruar e kujtesës. Pra, rregulli i gishtit tani 256 00:15:36,880 --> 00:15:43,150 duhet të jetë në çdo kohë që ju e quani malloc, ju duhet të telefononi falas kur ju jeni bërë duke përdorur atë memorie. 257 00:15:43,150 --> 00:15:45,610 Tani, kur unë do të të duan për të liruar këtë memorie? 258 00:15:45,610 --> 00:15:49,780 Ndoshta, duke supozuar kjo linjë e parë ishte e saktë, unë do të duan për të bërë atë këtu. 259 00:15:49,780 --> 00:15:55,710 Sepse unë nuk mund të, për shembull, të bëjë atë këtu. Pse? 260 00:15:55,710 --> 00:15:57,860 Vetëm jashtë fushëveprimit. Pra, edhe pse ne jemi duke folur për pointers, 261 00:15:57,860 --> 00:16:04,830 kjo është një javë 2 apo 3 çështje, ku x është vetëm në kuadër brenda të formatimin e teksteve kaçurrel ku ajo u shpall. 262 00:16:04,830 --> 00:16:11,000 Pra, ju patjetër nuk mund të lirë atë atje. Shansi im i vetëm për të liruar atë është afërsisht pas vijës 21. 263 00:16:11,000 --> 00:16:15,170 Ky është një program mjaft të thjeshtë, ajo ishte mjaft e lehtë një herë ju lloj i mbështjellë mendjen tuaj 264 00:16:15,170 --> 00:16:17,870 rreth çfarë programi është duke bërë, ku gabimet ishin. 265 00:16:17,870 --> 00:16:20,500 Dhe edhe në qoftë se ju nuk e shihni atë në të parë, shpresojmë se ajo është pak e qartë tani 266 00:16:20,500 --> 00:16:23,870 që këto gabime janë goxha të lehtë zgjidhur dhe e bëri të lehtë. 267 00:16:23,870 --> 00:16:28,720 Por kur një program është më shumë se 12 rreshta të gjatë, kjo është 50 rreshta të gjatë, 100 rreshta të gjatë, 268 00:16:28,720 --> 00:16:31,150 duke ecur përmes linjës tuaj kod pas rreshti, duke menduar se nëpërmjet saj logjikisht, 269 00:16:31,150 --> 00:16:35,110 është e mundur, por nuk është veçanërisht e bukur për të bërë, vazhdimisht në kërkim të mete, 270 00:16:35,110 --> 00:16:38,340 dhe kjo është gjithashtu e vështirë për të bërë, dhe kjo është arsyeja pse një mjet si Shprehje ekziston. 271 00:16:38,340 --> 00:16:40,900 Më lejoni të shkoj përpara dhe të bëjë këtë: më lejoni të hapur dritaren time terminali, 272 00:16:40,900 --> 00:16:45,400 dhe më lejoni të drejtuar jo vetëm kujtesë, sepse kujtesës duket të jetë mirë. 273 00:16:45,400 --> 00:16:49,180 Unë jam marrë me fat. Shkuarja në atë bajt shtesë në fund të array 274 00:16:49,180 --> 00:16:51,060 nuk duket të jetë shumë problematike. 275 00:16:51,060 --> 00:16:56,370 Por le mua, megjithatë, të bëjë një kontroll mendje e shëndoshë, që thjesht do të thotë për të kontrolluar 276 00:16:56,370 --> 00:16:58,320 nëse janë apo jo kjo është e vërtetë e saktë. 277 00:16:58,320 --> 00:17:04,690 >> Pra, le ta bëjmë Shprehje-v - rrjedhje-check = plot, 278 00:17:04,690 --> 00:17:07,520 dhe pastaj emrin e programit në këtë rast është e kujtesës, jo a.out. 279 00:17:07,520 --> 00:17:10,760 Pra më lejoni të shkoj përpara dhe të bëjë këtë. Hit Enter. 280 00:17:10,760 --> 00:17:14,109 Dashur Perëndia. Kjo është prodhimin e saj, dhe kjo është ajo që unë alluded më parë. 281 00:17:14,109 --> 00:17:17,550 Por, në qoftë se ju mësoni për të lexuar nëpër të gjitha të pakuptimta këtu, 282 00:17:17,550 --> 00:17:20,760 shumica e kjo është vetëm prodhimi diagnostike që nuk është se interesante. 283 00:17:20,760 --> 00:17:24,829 Çka syri yt me të vërtetë dëshiron të jetë në kërkim për të është çdo përmendje e gabimit apo të pavlefshme. 284 00:17:24,829 --> 00:17:26,800 Fjalët që sugjerojnë probleme. 285 00:17:26,800 --> 00:17:29,340 Dhe me të vërtetë, le të shohim se çfarë po ndodh këtu poshtë gabuar. 286 00:17:29,340 --> 00:17:35,230 Unë kam një përmbledhje e disa lloj, "në përdorim në dalje:. Bytes 40 blloqe në 1" 287 00:17:35,230 --> 00:17:38,750 Unë nuk jam me të vërtetë i sigurt se çfarë është një bllok, por 40 bytes 288 00:17:38,750 --> 00:17:41,260 të vërtetë ndjehet si unë mund të kuptoj se ku po vijnë nga. 289 00:17:41,260 --> 00:17:45,030 40 bytes. Pse janë 40 bytes në përdorim në dalje? 290 00:17:45,030 --> 00:17:48,780 Dhe më konkretisht, nëse lëvizni poshtë këtu, 291 00:17:48,780 --> 00:17:54,520 pse kam humbur 40 bytes patjetër? Po? 292 00:17:54,520 --> 00:17:59,520 [Student përgjigje, pakuptueshëm] Perfect. Po, pikërisht. 293 00:17:59,520 --> 00:18:03,540 Ka qenë dhjetë integers, dhe secili prej tyre është madhësia e 4, ose 32 bit, 294 00:18:03,540 --> 00:18:08,300 kështu që unë kam humbur pikërisht 40 bytes, sepse, si ju propozuar, unë nuk kam quajtur pa pagesë. 295 00:18:08,300 --> 00:18:13,460 Kjo është një bug, dhe tani le të shohim poshtë një pak më tej dhe të shohim më tej për këtë, 296 00:18:13,460 --> 00:18:16,900 "Pavlefshme shkruaj e madhësisë 4." Tani çfarë është kjo? 297 00:18:16,900 --> 00:18:21,150 Kjo adresë është shprehur se çfarë simbol bazë, me sa duket? 298 00:18:21,150 --> 00:18:23,640 Kjo është hexadecimal, dhe çdo herë që ju të shihni një numër të filluar me 0x, 299 00:18:23,640 --> 00:18:29,410 kjo do të thotë heksadecimal, që ne e bëmë në mënyrë mbrapa në, unë mendoj se, seksioni pset 0 së pyetjeve, 300 00:18:29,410 --> 00:18:34,090 e cila ishte vetëm për të bërë një ushtrim warmup, konvertimin decimal në binar të magji dhe kështu me radhë. 301 00:18:34,090 --> 00:18:39,220 Hexadecimal, vetëm nga Konventa e njeriut, është përdorur zakonisht për të përfaqësuar pointers 302 00:18:39,220 --> 00:18:41,570 ose, më në përgjithësi, i drejtohet. Është vetëm një konventë, 303 00:18:41,570 --> 00:18:45,340 sepse kjo është pak më e lehtë për të lexuar, kjo është pak më kompakte se diçka si decimal, 304 00:18:45,340 --> 00:18:47,720 dhe binar është e padobishme për njerëzit më të përdorur. 305 00:18:47,720 --> 00:18:50,840 Deri tani çfarë do të thotë kjo? E pra, duket se nuk është një shkruaj pavlefshme 306 00:18:50,840 --> 00:18:54,480 e madhësisë 4 on line 21 të memory.c. 307 00:18:54,480 --> 00:18:59,180 Pra, le të kthehemi në linjë 21, dhe në të vërtetë, këtu është se shkruaj pavlefshme. 308 00:18:59,180 --> 00:19:02,640 Pra Shprehje nuk do të plotësisht të mbajë dorën time dhe më tregoni se çfarë është fix, 309 00:19:02,640 --> 00:19:05,520 por ajo është zbulimin që unë jam duke bërë një shkruani pavlefshme. 310 00:19:05,520 --> 00:19:08,800 Unë jam prekja 4 bytes që unë nuk duhet të jetë, dhe me sa duket kjo është për shkak se, 311 00:19:08,800 --> 00:19:13,960 si ju vuri në dukje, unë jam duke bërë [10] në vend të [9] maksimalisht 312 00:19:13,960 --> 00:19:16,660 ose [0] apo diçka në mes. 313 00:19:16,660 --> 00:19:19,690 Me Shprehje, të kuptojë çdo kohë që ju jeni tani një program me shkrim 314 00:19:19,690 --> 00:19:24,190 që përdor pointers dhe përdor memorie, dhe malloc më konkretisht, 315 00:19:24,190 --> 00:19:27,080 patjetër merrni në zakonin e running këtë kohë 316 00:19:27,080 --> 00:19:30,890 por shumë lehtë kopjohet dhe të ngjit komandën e Shprehje 317 00:19:30,890 --> 00:19:32,650 për të parë nëse ka disa gabime në atje. 318 00:19:32,650 --> 00:19:34,820 Dhe kjo do të jetë e madhe çdo herë që ju shihni e prodhimit, 319 00:19:34,820 --> 00:19:39,430 por vetëm me anë të analizimit të vizualisht gjithë prodhimit dhe të shohim nëse ju shihni përmend e gabimeve 320 00:19:39,430 --> 00:19:43,190 ose paralajmërime ose pavlefshme ose humbur. 321 00:19:43,190 --> 00:19:46,200 Çdo fjalë që të tingëllojë si ju dehur deri diku. 322 00:19:46,200 --> 00:19:48,580 Pra, të kuptojnë se është një mjet i ri në veglën tuaj. 323 00:19:48,580 --> 00:19:51,270 >> Tani të hënën, kemi pasur një bandë e tërë e folks të vijnë deri këtu 324 00:19:51,270 --> 00:19:53,150 dhe përfaqësojnë idenë e një listë e lidhur. 325 00:19:53,150 --> 00:20:00,970 Dhe ne kemi prezantuar listën e lidhur si një zgjidhje për atë problem? 326 00:20:00,970 --> 00:20:04,590 Po? [Student përgjigje, pakuptueshëm] Mirë. 327 00:20:04,590 --> 00:20:06,530 Vargjeve nuk mund të ketë memorie shtuar për ta. 328 00:20:06,530 --> 00:20:09,440 Nëse ju akordojë një rrjet të madhësisë 10, që është e gjitha që ju merrni. 329 00:20:09,440 --> 00:20:13,690 Ju mund të telefononi një funksion si realloc nëse ju fillimisht e quajti malloc, 330 00:20:13,690 --> 00:20:17,580 dhe që mund të përpiquni të rritet array nëse nuk ka hapësirë ​​në drejtim të përfundimit të saj 331 00:20:17,580 --> 00:20:21,610 që askush tjetër nuk është duke përdorur, dhe nëse nuk është, ai thjesht do të gjeni ju një copë të madhe diku tjetër. 332 00:20:21,610 --> 00:20:25,040 Por pastaj ajo do të kopje të të gjitha atyre bytes në rrjet të ri. 333 00:20:25,040 --> 00:20:28,310 Kjo tingëllon si një zgjidhje shumë të saktë. 334 00:20:28,310 --> 00:20:34,790 Pse është kjo e shëmtuar? 335 00:20:34,790 --> 00:20:36,940 Unë do të thotë ajo punon, njerëzit kanë zgjidhur këtë problem. 336 00:20:36,940 --> 00:20:40,710 Pse ne kemi nevojë për të zgjidhur atë në hënën me listat e lidhura? Po? 337 00:20:40,710 --> 00:20:44,060 [Student përgjigje, pakuptueshëm] Ajo mund të marrë një kohë të gjatë. 338 00:20:44,060 --> 00:20:49,260 Në fakt, çdo kohë që ju jeni duke bërë thirrje malloc ose realloc ose calloc, e cila është ende një tjetër, 339 00:20:49,260 --> 00:20:52,470 çdo herë që, Programi, po flasim për sistemin operativ, 340 00:20:52,470 --> 00:20:54,310 ju kanë tendencë për të ngadalësuar programin poshtë. 341 00:20:54,310 --> 00:20:57,470 Dhe në qoftë se ju jeni duke bërë këto llojet e gjërave në sythe, ju jeni me të vërtetë ngadalësuar gjëra poshtë. 342 00:20:57,470 --> 00:21:00,740 Ju nuk do të vini re këtë për të thjeshtë të "Hello World" programe të tipit, 343 00:21:00,740 --> 00:21:04,300 por në programe shumë të mëdha, duke i kërkuar të sistemit operativ përsëri dhe përsëri për kujtesën 344 00:21:04,300 --> 00:21:07,520 ose duke i dhënë atë përsëri dhe përsëri tenton të mos jetë një gjë e mirë. 345 00:21:07,520 --> 00:21:11,210 Plus, kjo është vetëm lloj i intelektualisht - kjo është një humbje e plotë e kohës. 346 00:21:11,210 --> 00:21:16,490 Pse ndajë më shumë memorie dhe më shumë, rrezikun e kopjimit gjithçka në grup të ri, 347 00:21:16,490 --> 00:21:21,980 në qoftë se ju keni një alternativë që ju lejon të kujtesës vetëm sa më shumë që ju duhet të vërtetë? 348 00:21:21,980 --> 00:21:24,130 Kështu që nuk ka pluses dhe minuses në këtu. 349 00:21:24,130 --> 00:21:26,730 Një nga pluses tani është se ne kemi dinamizëm. 350 00:21:26,730 --> 00:21:29,100 Nuk ka rëndësi ku chunks e kujtesës janë se janë të lirë, 351 00:21:29,100 --> 00:21:32,070 Unë vetëm mund të lloj të krijuar këto crumbs bukë nëpërmjet pointers 352 00:21:32,070 --> 00:21:34,470 të vargut të tërë listën time të lidhur së bashku. 353 00:21:34,470 --> 00:21:36,470 Por kam paguani të paktën një çmim. 354 00:21:36,470 --> 00:21:40,060 >> Çfarë duhet të heqin dorë në fitimin e listave të lidhura? 355 00:21:40,060 --> 00:21:42,470 Po? [Student përgjigje, pakuptueshëm] Mirë. 356 00:21:42,470 --> 00:21:45,650 Ju duhet më shumë memorie. Tani kam nevojë për hapësirë ​​për këto pointers, 357 00:21:45,650 --> 00:21:47,900 dhe në rastin e kësaj liste super të thjeshtë lidhur 358 00:21:47,900 --> 00:21:51,410 që është vetëm duke u përpjekur për të ruajtur integers, të cilat janë 4 bytes, ne kemi mbajtur duke thënë se 359 00:21:51,410 --> 00:21:54,240 mirë, një akrep është 4 bytes, kështu që tani unë kam dyfishuar fjalë për fjalë 360 00:21:54,240 --> 00:21:57,290 Shuma e kujtesës Unë kam nevojë vetëm për të ruajtur këtë listë. 361 00:21:57,290 --> 00:21:59,680 Por përsëri, kjo është një tradeoff vazhdueshme në shkenca kompjuterike 362 00:21:59,680 --> 00:22:03,440 mes kohës dhe hapësirës dhe, zhvillimit përpjekje dhe burime të tjera. 363 00:22:03,440 --> 00:22:06,630 Çfarë është një tjetër downside për të përdorur një listë e lidhur? Po? 364 00:22:06,630 --> 00:22:10,150 [Student përgjigje, pakuptueshëm] 365 00:22:10,150 --> 00:22:12,600 Mirë. Jo aq e lehtë për qasje. Ne nuk mund të levave 366 00:22:12,600 --> 00:22:15,530 Javën 0 parimet si përça dhe sundo. 367 00:22:15,530 --> 00:22:18,220 Dhe më konkretisht, kërko binar. Sepse edhe pse ne njerëzit 368 00:22:18,220 --> 00:22:20,400 mund të shihni se ku përafërsisht mes të kësaj liste është, 369 00:22:20,400 --> 00:22:25,840 kompjuter vetëm e di se kjo listë e lidhur fillon në adresën quajtur parë. 370 00:22:25,840 --> 00:22:28,250 Dhe kjo është 0x123 ose diçka të tillë. 371 00:22:28,250 --> 00:22:30,990 Dhe e vetmja mënyrë programi mund të gjeni element mesme 372 00:22:30,990 --> 00:22:33,350 është që në fakt të kërkuar listën e tërë. 373 00:22:33,350 --> 00:22:35,500 Dhe madje edhe atëherë, ai ka për të kërkuar fjalë për fjalë krejt Listen sepse 374 00:22:35,500 --> 00:22:38,950 edhe pasi të keni arritur elementin e mesme duke ndjekur pointers, 375 00:22:38,950 --> 00:22:42,380 ju, programi, nuk kanë asnjë ide se sa kohë kjo listë është, potencialisht, 376 00:22:42,380 --> 00:22:45,250 derisa ju goditi në fund të saj, dhe si nuk e dini programatikisht 377 00:22:45,250 --> 00:22:48,600 se ju jeni në fund të një liste të lidhur? 378 00:22:48,600 --> 00:22:51,120 Ka një tregues të veçantë NULL, kështu që përsëri, një konventë. 379 00:22:51,120 --> 00:22:53,870 Në vend se të përdorin këtë tregues, ne definitivisht nuk dua që ajo të jetë disa vlera plehrash 380 00:22:53,870 --> 00:22:57,750 duke treguar off fazë diku, ne duam që ajo të jetë me dorë poshtë, NULL, 381 00:22:57,750 --> 00:23:01,530 kështu që ne kemi këtë Terminus në këtë strukturë të dhënave kështu që ne e dimë se ku mbaron. 382 00:23:01,530 --> 00:23:03,410 >> Çfarë ndodh nëse ne duam të manipuluar këtë? 383 00:23:03,410 --> 00:23:05,980 Ne e bëmë më të madhe të këtij vizualisht, dhe me njerëzit, 384 00:23:05,980 --> 00:23:07,630 por ajo në qoftë se ne duam të bëjmë një shtënie? 385 00:23:07,630 --> 00:23:12,360 Pra, lista origjinale ishte 9, 17, 20, 22, 29, 34. 386 00:23:12,360 --> 00:23:16,730 Çfarë ndodh nëse ne të kërkuar për të, atëherë hapësirë ​​malloc për numrin 55, një nyje për të, 387 00:23:16,730 --> 00:23:20,730 dhe pastaj ne duam të futur në listën e 55 ashtu siç bëmë të hënën? 388 00:23:20,730 --> 00:23:23,690 Si e bëjmë këtë? E pra, Anita erdhi dhe ajo ecte në thelb të listës. 389 00:23:23,690 --> 00:23:27,500 Ajo filloi në elementin e parë, pastaj tjetër, tjetër, tjetër, tjetër, tjetër. 390 00:23:27,500 --> 00:23:29,500 Në fund goditi majtë të dorës të gjithë rrugën poshtë 391 00:23:29,500 --> 00:23:34,480 dhe realizuar oh, kjo është NULL. Pra, çfarë manipulimi tregues të nevojshme për të bërë? 392 00:23:34,480 --> 00:23:37,980 Personi që ishte në fund të fundit, numri 34, të nevojshme dora e tij e majtë ngritur 393 00:23:37,980 --> 00:23:46,220 për pikë në 55, 55 e nevojshme krahun e tyre të majtë duke treguar deri në jetë të re NULL Terminator. Bërë. 394 00:23:46,220 --> 00:23:49,540 Goxha e lehtë për të futur në një listë 55 renditura. 395 00:23:49,540 --> 00:23:51,800 Dhe si mund të duket kjo? 396 00:23:51,800 --> 00:23:55,690 >> Më lejoni të shkoj përpara dhe të hapin disa shembuj kodin këtu. 397 00:23:55,690 --> 00:23:58,120 Unë do të hapur deri Gedit, dhe më lejoni të hapur dy fotografi të parë. 398 00:23:58,120 --> 00:24:02,050 Njëra është list1.h, dhe më lejoni të kujtoj vetëm se kjo ishte copë e kodit 399 00:24:02,050 --> 00:24:04,920 që kemi përdorur për të përfaqësuar një nyje. 400 00:24:04,920 --> 00:24:13,040 Një nyjë ka si një int n quajtur dhe një tregues tjetër që quhet vetëm pikë për gjë tjetër në listë. 401 00:24:13,040 --> 00:24:15,450 Kjo është tani në një skedar. H. Pse? 402 00:24:15,450 --> 00:24:19,090 Nuk është kjo konventë, dhe ne nuk kemi marrë përfituar nga ky një sasi të madhe veten, 403 00:24:19,090 --> 00:24:22,220 por personi i cili shkroi funksionet printf dhe të tjera 404 00:24:22,220 --> 00:24:27,150 dha si një dhuratë për botën e të gjitha këtyre funksioneve duke shkruar një skedar të quajtur stdio.h. 405 00:24:27,150 --> 00:24:30,950 Dhe pastaj nuk ka string, dhe pastaj ka map.h, dhe ka të gjitha këto fotografi h 406 00:24:30,950 --> 00:24:34,410 që ju mund të keni parë ose të përdoren gjatë afatit shkruar nga njerëzit e tjerë. 407 00:24:34,410 --> 00:24:38,470 Zakonisht në ato. Fotografi h janë të vetmet gjëra të tilla si typedefs 408 00:24:38,470 --> 00:24:42,310 ose deklaratat e llojeve me porosi apo deklaratave të kosntanta. 409 00:24:42,310 --> 00:24:47,890 Ju nuk vënë Implementimi Funksionet 'në fotografi header. 410 00:24:47,890 --> 00:24:50,570 Ju vënë, në vend, vetëm prototypes e tyre. 411 00:24:50,570 --> 00:24:53,050 Ju vënë gjërat që ju doni të ndajnë me botën çfarë ata kanë nevojë 412 00:24:53,050 --> 00:24:55,640 në mënyrë që të hartojë kodin e tyre. Pra, vetëm për të marrë në këtë zakon, 413 00:24:55,640 --> 00:24:59,110 ne kemi vendosur për të bërë të njëjtën gjë. Nuk është shumë në list1.h, 414 00:24:59,110 --> 00:25:02,070 por ne kemi vënë diçka që mund të jetë me interes për njerëzit në botë 415 00:25:02,070 --> 00:25:05,030 që doni të përdorni të lidhur implementimin tonë list. 416 00:25:05,030 --> 00:25:08,040 Tani, në list1.c, unë nuk do të kalojnë nëpër këtë gjë të gjithë 417 00:25:08,040 --> 00:25:11,390 sepse kjo është pak e gjatë, ky program, por le të kandidojë atë të vërtetë më shpejt në ftim. 418 00:25:11,390 --> 00:25:15,720 Më lejoni të përpilojnë Lista1, më lejoni atëherë të drejtuar Lista1, dhe atë që ju do të shihni është 419 00:25:15,720 --> 00:25:18,070 ne kemi një program të thjeshtë simuluar pak këtu 420 00:25:18,070 --> 00:25:20,990 që do të më lejoni të shtoni dhe hiqni numrat në një listë. 421 00:25:20,990 --> 00:25:24,310 Pra më lejoni të shkoj përpara dhe të shtypni 3 për 3 menu option. 422 00:25:24,310 --> 00:25:27,880 Unë dua të futur numrin - le të bëjë numri i parë, i cili ishte 9, 423 00:25:27,880 --> 00:25:30,550 dhe tani unë jam i tha lista është tani 9. 424 00:25:30,550 --> 00:25:33,760 Më lejoni të shkojnë përpara dhe të bëjë një tjetër shtënie, kështu që unë goditi menu option 3. 425 00:25:33,760 --> 00:25:36,760 Çfarë numri dua të futur? 17. 426 00:25:36,760 --> 00:25:39,220 Enter. Dhe unë do të bëj vetëm një më shumë. 427 00:25:39,220 --> 00:25:41,720 Më lejoni të futur numrin 22. 428 00:25:41,720 --> 00:25:45,850 Kështu që ne kemi fillimet e listës lidhur që kemi pasur në formë diapozitivësh një moment më parë. 429 00:25:45,850 --> 00:25:48,740 Si është kjo futje në të vërtetë ndodh? 430 00:25:48,740 --> 00:25:52,000 Në të vërtetë, 22 është tani në fund të listës. 431 00:25:52,000 --> 00:25:55,050 Pra, histori kemi thënë në skenë të hënën dhe recapped vetëm tani 432 00:25:55,050 --> 00:25:57,460 duhet të jetë në fakt ndodh në kod. 433 00:25:57,460 --> 00:25:59,700 Le të marrin një sy. Më lejoni të lëvizni poshtë në këtë file. 434 00:25:59,700 --> 00:26:01,720 Ne do të komentoj mbi disa prej funksioneve, 435 00:26:01,720 --> 00:26:05,630 por ne do të shkojnë poshtë për të, të themi, funksioni insert. 436 00:26:05,630 --> 00:26:11,720 >> Le të shohim se si ne do të shkojmë për të futur një nyje të re në këtë listë e lidhur. 437 00:26:11,720 --> 00:26:14,550 Ku është lista e deklaruar? E pra, le të shkoni të gjithë rrugën deri në majë, 438 00:26:14,550 --> 00:26:19,970 dhe vini re se lista ime e lidhur në thelb është shpallur si një tregues të vetëm që është fillimisht NULL. 439 00:26:19,970 --> 00:26:23,180 Kështu që unë jam duke përdorur një ndryshore globale këtu, të cilat në përgjithësi ne kemi predikuar kundër 440 00:26:23,180 --> 00:26:25,280 sepse ai e bën kodin tuaj një çrregullt pak për të ruajtur, 441 00:26:25,280 --> 00:26:29,080 kjo është lloj i dembel, zakonisht, por kjo nuk është dembel dhe nuk është e gabuar dhe kjo nuk është e keqe 442 00:26:29,080 --> 00:26:33,660 në qoftë se qëllimi i vetëm programi juaj në jetë është që të simulojnë një listë të lidhura. 443 00:26:33,660 --> 00:26:35,460 E cila është pikërisht ajo që ne jemi duke bërë. 444 00:26:35,460 --> 00:26:39,100 Pra, në vend se të deklarojë këtë në kryesore dhe pastaj duhet të kalojë atë për çdo funksion 445 00:26:39,100 --> 00:26:42,640 ne kemi shkruar në këtë program, ne vend realizuar oh, le të vetëm të bëjë atë globale 446 00:26:42,640 --> 00:26:47,060 sepse tërë qëllimi i këtij programi është të tregojë një dhe vetëm një listë e lidhur. 447 00:26:47,060 --> 00:26:50,700 Kështu që ndihet në rregull. Këtu janë prototipa e mi, dhe ne nuk do të kalojnë nëpër të gjitha këto, 448 00:26:50,700 --> 00:26:55,800 por kam shkruar një funksion të fshini, një gjeni funksion, një funksion insert, dhe një funksion kundërvënie. 449 00:26:55,800 --> 00:26:59,080 Por le të kthehemi tani poshtë në funksion futur 450 00:26:59,080 --> 00:27:01,490 dhe shikoni se si ky punon këtu. 451 00:27:01,490 --> 00:27:09,940 Insert është në linjë - këtu ne do të shkojmë. 452 00:27:09,940 --> 00:27:12,850 Fut. Pra, ajo nuk ka marrë ndonjë argumente, sepse ne jemi duke shkuar për të kërkuar 453 00:27:12,850 --> 00:27:15,930 brenda përdoruesit e këtij funksioni për numrin që ata duan për të futur. 454 00:27:15,930 --> 00:27:19,410 Por së pari, ne kemi përgatitur për t'i dhënë atyre një hapësirë. 455 00:27:19,410 --> 00:27:22,050 Kjo është lloj i të kopjoni dhe ngjisni nga shembull tjetër. 456 00:27:22,050 --> 00:27:25,110 Në këtë rast, ne kemi qenë të ndarjes së një int, këtë herë ne jemi caktimin e një nyje. 457 00:27:25,110 --> 00:27:27,910 Unë vërtetë nuk e mbani mend se sa bytes një nyje është, por kjo është në rregull. 458 00:27:27,910 --> 00:27:30,460 Sizeof mund të kuptoj se për mua. 459 00:27:30,460 --> 00:27:33,340 Dhe pse jam unë duke kontrolluar for null 120 në linjë? 460 00:27:33,340 --> 00:27:37,530 Çfarë mund të shkojnë keq në linjë 119? Po? 461 00:27:37,530 --> 00:27:40,530 [Student përgjigje, pakuptueshëm] 462 00:27:40,530 --> 00:27:43,440 Mirë. Vetëm mund të jetë rasti që unë kam kërkuar për memorie shumë 463 00:27:43,440 --> 00:27:47,020 apo diçka të gabuar dhe sistemi operativ nuk ka bytes mjaftueshme për të dhënë mua, 464 00:27:47,020 --> 00:27:50,640 kështu që sinjalizon sa më shumë duke u kthyer NULL, dhe në qoftë se unë nuk shikoni për atë 465 00:27:50,640 --> 00:27:54,710 dhe unë vetëm verbërisht të vazhdojë të përdorë adresën kthye, ajo mund të jetë NULL. 466 00:27:54,710 --> 00:27:58,400 Kjo mund të jetë disa vlera të panjohura, nuk është një gjë e mirë nëse unë - 467 00:27:58,400 --> 00:28:00,590 në fakt nuk do të jetë një vlerë të panjohur. Kjo mund të jetë NULL, kështu që unë nuk dua 468 00:28:00,590 --> 00:28:02,550 të abuzimit atë dhe rrezikojnë dereferencing atë. 469 00:28:02,550 --> 00:28:07,410 Nëse kjo ndodh, unë vetëm të kthehet dhe ne do të pretendojë si unë nuk e kam marrë përsëri ndonjë memorie në të gjitha. 470 00:28:07,410 --> 00:28:12,270 >> Përndryshe, unë them përdoruesit të më jepni një numër për të futur, unë e quaj të vjetër GetInt tonë mik, 471 00:28:12,270 --> 00:28:15,530 dhe pastaj kjo ishte Sintaksa e re ne kemi prezantuar të hënën. 472 00:28:15,530 --> 00:28:20,320 'Newptr-> n' do të thotë të marrë adresën që ju janë dhënë nga malloc 473 00:28:20,320 --> 00:28:23,490 e cila përfaqëson bajt e parë të një objekti të ri nyjen, 474 00:28:23,490 --> 00:28:26,860 dhe pastaj të shkojnë në fushën e quajtur n. 475 00:28:26,860 --> 00:28:35,270 Një pyetje pak Trivia: Kjo është ekuivalente me atë vijë më të fshehtë të kodit? 476 00:28:35,270 --> 00:28:38,110 Si tjetër mund ta ketë shkruar këtë? Dëshironi të marrë një goditje me thikë? 477 00:28:38,110 --> 00:28:41,480 [Student përgjigje, pakuptueshëm] 478 00:28:41,480 --> 00:28:44,870 Mirë. Duke përdorur. N, por kjo nuk është aq e thjeshtë si kjo. 479 00:28:44,870 --> 00:28:47,090 Çfarë së pari duhet të bëni? [Student përgjigje, pakuptueshëm] 480 00:28:47,090 --> 00:28:52,730 Mirë. Unë kam nevojë për të bërë * newptr.n. 481 00:28:52,730 --> 00:28:55,610 Pra, kjo është thënë treguesin e re është padyshim një adresë. Pse? 482 00:28:55,610 --> 00:28:59,520 Sepse ajo u kthye nga malloc. Newptr * duke thënë se "të shkuar atje", 483 00:28:59,520 --> 00:29:02,970 dhe pastaj një herë ju jeni atje, atëherë ju mund të përdorni më të njohur., n 484 00:29:02,970 --> 00:29:05,730 por kjo vetëm duket pak e shëmtuar, sidomos nëse ne njerëzit do të 485 00:29:05,730 --> 00:29:10,360 barazim pointers me shigjeta gjithë kohës, bota ka standardizuar në këtë simbol shigjete, 486 00:29:10,360 --> 00:29:12,320 e cila e bën të njëjtën gjë. 487 00:29:12,320 --> 00:29:16,070 Pra, ju vetëm përdorni simbol -> kur gjë në të majtë është një akrep. 488 00:29:16,070 --> 00:29:18,790 Përndryshe, në qoftë se ajo është një struct aktuale, përdorni. N. 489 00:29:18,790 --> 00:29:25,800 Dhe pastaj kjo: Pse nisja newptr-> ardhshme për NULL? 490 00:29:25,800 --> 00:29:28,610 Ne nuk duam një dorë e majtë varur jashtë e në fund të fazës së. 491 00:29:28,610 --> 00:29:31,630 Ne duam të treguar drejt poshtë, që do të thotë në fund të kësaj liste 492 00:29:31,630 --> 00:29:34,980 mund të jetë potencialisht në këtë nyje, kështu që ne më mirë të sigurt se është NULL. 493 00:29:34,980 --> 00:29:38,460 Dhe, në përgjithësi, Initializing variablave tuaj ose anëtarët e të dhënave tuaja dhe structs 494 00:29:38,460 --> 00:29:40,470 diçka është vetëm praktikë e mirë. 495 00:29:40,470 --> 00:29:45,170 Vetëm lënë mbeturina ekzistojnë dhe vazhdojnë të ekzistojnë në përgjithësi ju merr në telashe 496 00:29:45,170 --> 00:29:48,650 në qoftë se ju harroni të bëni diçka më vonë. 497 00:29:48,650 --> 00:29:51,590 >> Ja disa raste. Kjo, përsëri, është funksioni insert, 498 00:29:51,590 --> 00:29:54,930 dhe gjëja e parë që unë kontrolloni për të është nëse ndryshueshme quhet parë, 499 00:29:54,930 --> 00:29:58,240 se ndryshueshme globale është NULL, që do të thotë nuk ka asnjë listë të lidhura. 500 00:29:58,240 --> 00:30:02,460 Ne nuk kemi futur ndonjë numër, kështu që është i parëndësishëm për të futur këtë numër e tanishme 501 00:30:02,460 --> 00:30:05,240 në listë, sepse kjo i takon vetëm në fillim të listës. 502 00:30:05,240 --> 00:30:08,100 Pra, kjo ishte kur Anita ishte vetëm duke qëndruar deri këtu vetëm, duke pretenduar 503 00:30:08,100 --> 00:30:11,390 askush tjetër nuk ishte deri këtu në skenë deri ne ndarë një nyje, 504 00:30:11,390 --> 00:30:13,940 atëherë ajo mund të ngrejë dorën e saj për herë të parë, 505 00:30:13,940 --> 00:30:17,420 në qoftë se të gjithë të tjerët kishin ardhur deri në fazën e pas saj të hënën. 506 00:30:17,420 --> 00:30:22,900 Tani këtu, kjo është një kontroll pak ku unë duhet të them, nëse vlera nyjen ri i n 507 00:30:22,900 --> 00:30:27,370 është 00:30:29,930 që do të thotë nuk është një listë e lidhur që është filluar. 509 00:30:29,930 --> 00:30:32,330 Ka të paktën një nyje në listë, por ky djalë i ri 510 00:30:32,330 --> 00:30:37,230 takon para se të, kështu që ne kemi nevojë për të lëvizur gjërat rreth. 511 00:30:37,230 --> 00:30:43,450 Me fjalë të tjera, në qoftë se lista ka filluar me vetëm, le të themi, 512 00:30:43,450 --> 00:30:48,100 vetëm numri 17, që është - në fakt, ne mund ta bëjmë këtë më qartë. 513 00:30:48,100 --> 00:30:56,010 Nëse ne fillojmë historinë tonë me një tregues të quajtur këtu së pari, 514 00:30:56,010 --> 00:30:59,870 dhe fillimisht kjo është NULL, dhe ne të futur numrin 9, 515 00:30:59,870 --> 00:31:02,510 Numri 9 i takon në mënyrë të qartë në fillim të listës. 516 00:31:02,510 --> 00:31:07,400 Pra, le të pretendojë ne vetëm malloced adresën ose numrin 9 dhe e vënë atë këtu. 517 00:31:07,400 --> 00:31:13,170 Nëse i parë është 9 nga default, skenari i parë kemi diskutuar vetëm do të thotë pikë le këtë djalë këtu, 518 00:31:13,170 --> 00:31:15,790 lënë këtë si NULL, tani ne kemi numrin 9. 519 00:31:15,790 --> 00:31:18,280 Numri ardhshëm ne duam të futur është 17. 520 00:31:18,280 --> 00:31:22,420 17 i takon gjatë këtu, kështu që ne do të kemi për të bërë disa shkelën logjike me këtë. 521 00:31:22,420 --> 00:31:26,060 Pra, le të në vend të kësaj, para se të bëjmë këtë, le të pretendojë se ne të kërkuar për të futur numrin 8. 522 00:31:26,060 --> 00:31:28,650 >> Pra, vetëm për hir të lehtësi e, unë jam duke shkuar për të nxjerrë këtu. 523 00:31:28,650 --> 00:31:30,760 Por mos harroni, malloc mund ta vënë atë më të kudo. 524 00:31:30,760 --> 00:31:33,460 Por, për hir Vizatim, unë do të vënë atë këtu. 525 00:31:33,460 --> 00:31:38,440 Kështu që unë kam ndarë pretendojë vetëm një nyje për numrin 8, kjo është nga default NULL. 526 00:31:38,440 --> 00:31:42,800 Çfarë ka tani të ndodhë? Një çift i gjërave. 527 00:31:42,800 --> 00:31:47,090 Ne kemi bërë këtë gabim në skenë të hënën ku kemi përditësuar një tregues si kjo, 528 00:31:47,090 --> 00:31:51,890 pastaj e bëri këtë, dhe pastaj ne pohoi - ne jetimë të gjithë të tjerët në skenë. 529 00:31:51,890 --> 00:31:54,350 Sepse ju can't - rendi i operacioneve këtu është e rëndësishme, 530 00:31:54,350 --> 00:31:58,760 sepse tani ne kemi humbur këtë 9 nyje që është vetëm lloj lundrues në hapësirë. 531 00:31:58,760 --> 00:32:01,150 Pra, kjo nuk ishte qasja e duhur të hënën. 532 00:32:01,150 --> 00:32:03,330 Ne së pari duhet të bëjë diçka tjetër. 533 00:32:03,330 --> 00:32:06,280 Gjendja e botës duket si ky. Fillimisht, ka qenë i ndarë 8. 534 00:32:06,280 --> 00:32:10,550 Çfarë do të jetë një mënyrë më të mirë të 8 futur? 535 00:32:10,550 --> 00:32:14,720 Në vend të përditësimit këtë treguesin e parë, vetëm update këtë një vend këtu. 536 00:32:14,720 --> 00:32:17,720 Pra, ne kemi nevojë për një linjë të kodit që e do për ta kthyer këtë karakter NULL 537 00:32:17,720 --> 00:32:22,020 në një pointer aktuale që është duke treguar në nyjen 9, 538 00:32:22,020 --> 00:32:27,970 dhe pastaj ne mund të sigurtë të ndryshojë të parë të vinte në këtë djalë këtu. 539 00:32:27,970 --> 00:32:31,330 Tani ne kemi një listë, një listë e lidhur, të dy elementeve. 540 00:32:31,330 --> 00:32:33,580 Dhe çfarë e bën këtë të vërtetë duken si këtu? 541 00:32:33,580 --> 00:32:36,900 Nëse ne shikojmë në kodin, vëreni se unë kam bërë pikërisht këtë. 542 00:32:36,900 --> 00:32:41,970 Unë kam thënë newptr, dhe në këtë histori, newptr u vënë në këtë djalë. 543 00:32:41,970 --> 00:32:45,520 >> Pra më lejoni të nxjerrë një gjë më shumë, dhe unë duhet të ketë lënë hapësirë ​​pak më shumë për këtë. 544 00:32:45,520 --> 00:32:48,540 Pra, falë vizatim vogël pak. 545 00:32:48,540 --> 00:32:52,140 Ky djalosh quhet newptr. 546 00:32:52,140 --> 00:32:57,940 Kjo është e ndryshueshme ne shpallëm disa rreshta më herët, në përputhje - vetëm mbi 25. 547 00:32:57,940 --> 00:33:03,430 Dhe kjo është treguar në 8. Kështu që kur unë them newptr-> e ardhshëm, që do të thotë të shkojnë në struct 548 00:33:03,430 --> 00:33:07,910 që është duke u vuri në duke newptr, kështu që këtu ne jemi, shkoni atje. 549 00:33:07,910 --> 00:33:13,990 Pastaj arrow është thënë merrni fushë tjetër, dhe pastaj = është thënë vënë atë vlerë ka? 550 00:33:13,990 --> 00:33:17,280 Vlera që ishte në të parë, atë vlerë ka qenë në vend të parë? 551 00:33:17,280 --> 00:33:21,930 Parë ishte vënë në këtë nyje, kështu që do të thotë kjo tani duhet të tregojnë në këtë nyje. 552 00:33:21,930 --> 00:33:25,660 Me fjalë të tjera, ajo duket megjithëse një rrëmujë qesharake me dorëshkrimit tim, 553 00:33:25,660 --> 00:33:28,620 çfarë është një ide e thjeshtë e vetëm lëvizin këto shigjeta përreth 554 00:33:28,620 --> 00:33:31,560 përkthehet në kodin me vetëm një astar këtë. 555 00:33:31,560 --> 00:33:38,110 Shitore atë që është e para në fushën e ardhshme dhe pastaj përditësimin atë që në fakt është parë. 556 00:33:38,110 --> 00:33:40,900 Le të shkojnë përpara dhe të shpejtë përpara përmes disa të kësaj, 557 00:33:40,900 --> 00:33:44,220 dhe të kërkoni vetëm në këtë futje bisht tani për tani. 558 00:33:44,220 --> 00:33:51,210 Mendoj unë shkoj në pikën ku unë të gjeni se fusha e ardhshme e disa nyjeve është NULL. 559 00:33:51,210 --> 00:33:53,410 Dhe në këtë pikë në histori, një detaj që unë jam Glossing mbi 560 00:33:53,410 --> 00:33:58,170 është se unë kam futur një tjetër tregues deri këtu në linjë 142, akrep paraardhësit. 561 00:33:58,170 --> 00:34:01,320 Në thelb, në këtë moment në histori, pasi lista e merr gjatë, 562 00:34:01,320 --> 00:34:04,800 Unë lloj i duhet të ecin me dy gishta sepse nëse unë shkoj shumë larg, 563 00:34:04,800 --> 00:34:08,219 kujtohet në një listë të vetme-gjatësi, ju nuk mund të shkoni prapa. 564 00:34:08,219 --> 00:34:13,659 Pra, kjo ide e predptr është gishti im majtë, dhe newptr - nuk newptr. 565 00:34:13,659 --> 00:34:17,199 Një tjetër tregues që është këtu është gishti im tjetër, dhe unë jam vetëm lloj ecin në listë. 566 00:34:17,199 --> 00:34:22,179 Kjo është arsyeja pse që ekziston. Por le të marrim parasysh vetëm një nga rastet më të thjeshta këtu. 567 00:34:22,179 --> 00:34:26,620 Nëse fushë tjetër që akrep është NULL, çfarë është implikimi logjik? 568 00:34:26,620 --> 00:34:30,840 Nëse jeni duke traversing këtë listë dhe ju goditi një tregues NULL? 569 00:34:30,840 --> 00:34:35,780 Ju jeni në fund të listës, dhe kështu kodi që pastaj append këtë element të një shtesë 570 00:34:35,780 --> 00:34:41,230 është lloj i intuitiv do të marrë atë nyje të cilit është NULL pointer tjetër, 571 00:34:41,230 --> 00:34:46,120 kështu që kjo është aktualisht NULL, dhe për të ndryshuar atë, edhe pse, të jetë adresa e nyjeve të reja. 572 00:34:46,120 --> 00:34:52,260 Pra, ne jemi vetëm duke tërhequr në kodin arrow që tërhoqi në skenë duke ngritur dorën e majtë dikujt. 573 00:34:52,260 --> 00:34:54,070 >> Dhe rasti që unë do të tundë duart e mia në për tani, 574 00:34:54,070 --> 00:34:58,020 vetëm për shkak se unë mendoj se është e lehtë për të marrë humbur kur ne bëjmë atë në këtë lloj të mjedisit, 575 00:34:58,020 --> 00:35:00,600 është kontrolluar për futje në mes të listës së. 576 00:35:00,600 --> 00:35:03,220 Por vetëm intuitive, ajo që duhet të ndodhë në qoftë se ju doni të kuptoj se 577 00:35:03,220 --> 00:35:06,600 ku disa numri i takon në mes është që ju nuk duhet të ecin atë 578 00:35:06,600 --> 00:35:09,510 me më shumë se një gisht, më shumë se një akrep, 579 00:35:09,510 --> 00:35:12,920 kuptoj se ku ajo i takon duke kontrolluar është elementi 00:35:15,450 > Një aktuale, dhe sapo ju të gjeni atë vend, 581 00:35:15,450 --> 00:35:20,400 atëherë ju duhet të bëni këtë lloj të lojës shell ku ju lëvizin nëpër pointers shumë kujdes. 582 00:35:20,400 --> 00:35:23,850 Dhe kjo përgjigje, në qoftë se ju do të donte për arsye përmes kësaj në shtëpi në tuaj, 583 00:35:23,850 --> 00:35:28,340 boils poshtë vetëm për këto dy rreshta të kodit, por renditja e këtyre linjave është super i rëndësishëm. 584 00:35:28,340 --> 00:35:31,390 Sepse në qoftë se ju bie dorën e dikujt dhe për të rritur dikush tjetër është në mënyrë të gabuar, 585 00:35:31,390 --> 00:35:34,580 përsëri, ju mund të përfundojë orphaning listën. 586 00:35:34,580 --> 00:35:39,500 Për të përmbledhur shumë konceptualisht, futja në bisht është relativisht e thjeshtë. 587 00:35:39,500 --> 00:35:42,940 Futja në krye është gjithashtu relativisht i drejtpërdrejtë, 588 00:35:42,940 --> 00:35:45,580 por ju duhet për të rinovuar një treguesin e shumta këtë kohë 589 00:35:45,580 --> 00:35:47,930 të shtrydh numrin 5 në listën këtu, 590 00:35:47,930 --> 00:35:51,560 dhe pastaj futje në mes përfshin edhe më shumë përpjekje, 591 00:35:51,560 --> 00:35:56,130 me shumë kujdes futur numrin 20 në vendin e tij të saktë, 592 00:35:56,130 --> 00:35:58,350 cila është ndërmjet 17 dhe 22. 593 00:35:58,350 --> 00:36:02,700 Kështu që ju duhet të bëni diçka si duhet e re 20 pikë nyje të 22, 594 00:36:02,700 --> 00:36:08,470 dhe pastaj, akrep i cili nyje ka nevojë të përmirësohet fundit? 595 00:36:08,470 --> 00:36:10,630 Kjo është 17, që në fakt futur atë. 596 00:36:10,630 --> 00:36:14,080 Pra, përsëri, unë do të shtyjë kodin aktual për atë zbatimit të veçantë. 597 00:36:14,080 --> 00:36:17,280 >> Në shikim të parë, kjo është pak e madhe, por kjo është me të vërtetë vetëm një lak pafund 598 00:36:17,280 --> 00:36:21,770 që është looping, looping, looping, looping, dhe thyerjen sa më shpejt që ju goditi treguesin NULL, 599 00:36:21,770 --> 00:36:24,590 në të cilën pikë ju mund të bëni futjen e nevojshme. 600 00:36:24,590 --> 00:36:30,960 Kjo, pra, është përfaqësuesi i lidhur futje lista kodin. 601 00:36:30,960 --> 00:36:34,590 Kjo ishte një lloj shumë, dhe ajo ndjehet si e kemi zgjidhur një problem, 602 00:36:34,590 --> 00:36:36,940 por ne kemi prezantuar një të tërë të tjera. Sinqerisht, ne kemi shpenzuar të gjithë kohën këtë 603 00:36:36,940 --> 00:36:40,540 on Big O dhe Ω dhe drejtimin kohë, duke u përpjekur për të zgjidhur problemet më shpejt, 604 00:36:40,540 --> 00:36:43,270 dhe këtu ne jemi duke marrë një hap të madh prapa, ai ndjen. 605 00:36:43,270 --> 00:36:45,380 Dhe akoma, në qoftë se qëllimi është për të ruajtur të dhënat, 606 00:36:45,380 --> 00:36:48,010 ajo ndihet si Grail Shenjtë, siç kemi thënë të hënën, do të jetë me të vërtetë 607 00:36:48,010 --> 00:36:50,470 për të ruajtur gjërat menjëherë. 608 00:36:50,470 --> 00:36:53,930 >> Në fakt, mendoj se kemi bërë listën vënë mënjanë për të lidhur një moment 609 00:36:53,930 --> 00:36:56,000 dhe ne vend paraqiti idenë e një tavolinë. 610 00:36:56,000 --> 00:36:59,110 Dhe le të vetëm të mendojnë për një tavolinë për një moment si një grup. 611 00:36:59,110 --> 00:37:03,790 Ky grup dhe ky rast këtu ka disa elemente, 26 25, përmes 0 612 00:37:03,790 --> 00:37:07,940 dhe mendoj se ju nevojitet një copë e magazinimit për emrat: 613 00:37:07,940 --> 00:37:10,350 Alice dhe Bob dhe Charlie dhe si. 614 00:37:10,350 --> 00:37:12,880 Dhe keni nevojë për disa strukturën e të dhënave për të ruajtur ato emra. 615 00:37:12,880 --> 00:37:15,000 E pra, ju mund të përdorni diçka si një listë të lidhur 616 00:37:15,000 --> 00:37:20,260 dhe ju mund të ecin në listën futur Alice para Bob Bob dhe Charlie pas dhe kështu me radhë. 617 00:37:20,260 --> 00:37:23,850 Dhe, në fakt, në qoftë se ju doni të shihni kodin si kjo si një mënjanë, 618 00:37:23,850 --> 00:37:27,230 e di se në list2.h, ne bëjmë pikërisht këtë. 619 00:37:27,230 --> 00:37:30,610 Ne nuk do të shkojnë përmes këtij kodi, por kjo është një variant i shembullin e parë 620 00:37:30,610 --> 00:37:34,640 që paraqet një struct tjetër ne kemi parë më parë, student i quajtur 621 00:37:34,640 --> 00:37:40,330 dhe pastaj atë që në të vërtetë ruan në listën e lidhur është një tregues për një strukturë të studentëve 622 00:37:40,330 --> 00:37:44,520 më tepër se një numër i plotë thjeshtë pak, n. 623 00:37:44,520 --> 00:37:46,900 Pra, të kuptojnë se ka kodi atje që përfshin strings aktuale, 624 00:37:46,900 --> 00:37:49,940 por në qoftë se qëllimi në dorë me të vërtetë tani është për të adresuar problemin e efikasitetit, 625 00:37:49,940 --> 00:37:53,380 nuk do të jetë mirë në qoftë se ne jemi duke i dhënë një objekt quajtur Alice, 626 00:37:53,380 --> 00:37:56,020 ne duam të vënë atë në vendin e duhur në strukturën e të dhënave, 627 00:37:56,020 --> 00:37:58,860 ai ndjehet si ajo do të jetë me të vërtetë e bukur për të vetëm të vënë Alice, 628 00:37:58,860 --> 00:38:01,180 cilit Emri fillon me A, në vend të parë. 629 00:38:01,180 --> 00:38:05,270 Dhe Bob, cilit Emri fillon me B, në vend të dytë. 630 00:38:05,270 --> 00:38:09,580 Me një grup, ose le të fillojnë duke e quajtur atë një tavolinë, një tavolinë hash në atë, 631 00:38:09,580 --> 00:38:13,650 ne mund të bëjmë pikërisht këtë. Nëse ne jemi të dhënë një emër si Alice, 632 00:38:13,650 --> 00:38:16,700 një varg si Alice, ku ju vendosni një-l-i-c-E? 633 00:38:16,700 --> 00:38:20,540 Ne kemi nevojë për një hueristic. Ne kemi nevojë për një funksion për të marrë disa të dhëna si Alice 634 00:38:20,540 --> 00:38:24,610 dhe të kthehet një përgjigje, "Vendos Alice në këtë vend." 635 00:38:24,610 --> 00:38:28,720 Dhe ky funksion, kjo kuti e zezë, do të quhet një funksion hash. 636 00:38:28,720 --> 00:38:32,330 >> Një funksion hash është diçka që merr një kontribut, si "Alice", 637 00:38:32,330 --> 00:38:38,080 dhe kthimit për ju, në mënyrë tipike, vendndodhja numerike në disa struktura të dhënave, ku Alice takon. 638 00:38:38,080 --> 00:38:40,830 Në këtë rast, funksioni ynë hash duhet të jetë relativisht e thjeshtë. 639 00:38:40,830 --> 00:38:47,510 Funksioni ynë hash duhet të them, nëse ju janë dhënë "Alice", i cili karakteri duhet të cilët brengoseni? 640 00:38:47,510 --> 00:38:55,660 I pari. Kështu që unë shoh në [0], dhe pastaj unë them, nëse [0] karakter është Një, kthehen numrin 0. 641 00:38:55,660 --> 00:39:01,130 Nëse kjo është B, kthehen 1. Nëse është e C, 2 të kthehen, dhe kështu me radhë. 642 00:39:01,130 --> 00:39:05,940 Të gjitha 0 indeksi, dhe që do të më lejoni të futur Alice dhe pastaj BOB dhe pastaj Charlie dhe kështu me radhë 643 00:39:05,940 --> 00:39:10,960 në këtë strukturë të dhëna. Por ka një problem. 644 00:39:10,960 --> 00:39:13,060 Çfarë ndodh nëse Anita vjen së bashku përsëri? 645 00:39:13,060 --> 00:39:17,510 Ku nuk kemi vënë Anit? Emri i saj, gjithashtu, fillon me shkronjën A, 646 00:39:17,510 --> 00:39:20,330 dhe ai ndjehet si ne kemi bërë një rrëmujë edhe më të mëdha të këtij problemi. 647 00:39:20,330 --> 00:39:24,380 Ne tani e kemi futje të menjëhershme, futje e vazhdueshme koha, në strukturën e të dhënave 648 00:39:24,380 --> 00:39:27,100 jo keq rast-lineare, 649 00:39:27,100 --> 00:39:29,510 por çfarë mund të bëjmë me Anita në këtë rast? 650 00:39:29,510 --> 00:39:34,110 Cilat janë dy opsione, me të vërtetë? Po? 651 00:39:34,110 --> 00:39:37,410 [Student përgjigje, pakuptueshëm] Mirë, kështu që ne mund të kemi një tjetër dimension. 652 00:39:37,410 --> 00:39:42,320 Kjo është e mirë. Kështu që ne mund të ndërtojmë gjëra në 3D si kemi biseduar për gojë të hënën. 653 00:39:42,320 --> 00:39:46,700 Ne mund të shtoni një tjetër qasje këtu, por mendoj se jo, unë jam duke u përpjekur për të mbajtur këtë të thjeshtë. 654 00:39:46,700 --> 00:39:50,160 Qëllimi këtu është që të gjithë të kenë qasje të menjëhershme konstante në kohë, 655 00:39:50,160 --> 00:39:52,170 kështu që është shtuar kompleksitetin shumë. 656 00:39:52,170 --> 00:39:55,970 Cilat janë opsionet e tjera, kur duke u përpjekur për të futur në këtë Anita strukturën e të dhënave? Po? 657 00:39:55,970 --> 00:39:58,610 [Student përgjigje, pakuptueshëm] Mirë. Kështu që ne mund të lëvizin të gjithë të tjerët poshtë, 658 00:39:58,610 --> 00:40:03,040 si Charlie nudges poshtë Bob dhe Alice, dhe pastaj ne kemi vënë Anit, ku ajo me të vërtetë dëshiron të jetë. 659 00:40:03,040 --> 00:40:05,660 >> Sigurisht, tani, ka një efekt anësor i kësaj. 660 00:40:05,660 --> 00:40:09,000 Kjo strukturë dhënave është ndoshta e dobishme jo sepse ne duam të futur njerëzit herë 661 00:40:09,000 --> 00:40:11,250 por për shkak se ne duam të kontrolloni nëse ata janë atje më vonë 662 00:40:11,250 --> 00:40:13,600 në qoftë se ne duam të shtypura nga të gjitha emrat në strukturën e të dhënave. 663 00:40:13,600 --> 00:40:15,850 Ne jemi duke shkuar për të bërë diçka me këto të dhëna eventualisht. 664 00:40:15,850 --> 00:40:20,810 Kështu që tani ne kemi lloj të dehur mbi Alice, i cili nuk është më, ku ajo është menduar të jetë. 665 00:40:20,810 --> 00:40:23,880 As Bob, as nuk është Charlie. 666 00:40:23,880 --> 00:40:26,060 Pra, ndoshta kjo nuk është e tillë një ide e mirë. 667 00:40:26,060 --> 00:40:28,830 Por në të vërtetë, kjo është një opsion. Ne mund të zhvendoset të gjithë poshtë, 668 00:40:28,830 --> 00:40:32,240 apo dreq, Anita erdhi vonë në lojë, pse nuk kemi vetëm vënë Anit 669 00:40:32,240 --> 00:40:35,870 nuk është këtu, nuk është këtu, nuk është këtu, le të vetëm vënë atë pak më e ulët në listë. 670 00:40:35,870 --> 00:40:38,680 Por pastaj ky problem fillon të zhvilloheshin përsëri. 671 00:40:38,680 --> 00:40:41,630 Ju mund të jetë në gjendje për të gjetur çast Alice, bazuar në emrin e saj të parë. 672 00:40:41,630 --> 00:40:44,320 Dhe Bob në çast, dhe Charlie. Por pastaj ju shikoni për Anita, 673 00:40:44,320 --> 00:40:46,360 dhe ju shihni, hmm, Alice është në rrugë të drejtë. 674 00:40:46,360 --> 00:40:48,770 E pra, më lejoni të kontrolloni më poshtë Alice. Bob nuk është Anita. 675 00:40:48,770 --> 00:40:51,850 Charlie nuk është Anita. Oh, nuk është Anita. 676 00:40:51,850 --> 00:40:54,720 Dhe në qoftë se ju vazhdoni që stërviten e logjikës të gjithë rrugën, 677 00:40:54,720 --> 00:41:00,690 çfarë është keq rasti Ora drejtimin e gjetjes ose futur Anit në këtë strukturë të dhëna të reja? 678 00:41:00,690 --> 00:41:03,280 Kjo është O (n), apo jo? 679 00:41:03,280 --> 00:41:06,280 Sepse në rastin më të keq, nuk është Alice, Bob, Charlie. . . 680 00:41:06,280 --> 00:41:10,150 të gjithë rrugën poshtë për dikë të quajtur "Y", kështu që nuk është vetëm një vend i mbetur. 681 00:41:10,150 --> 00:41:13,950 Fatmirësisht, ne nuk kemi një të quajtur "Z", kështu që ne kemi vënë Anit në fund shumë. 682 00:41:13,950 --> 00:41:16,040 >> Ne nuk kemi zgjidhur atë problem të vërtetë. 683 00:41:16,040 --> 00:41:19,890 Pra, ndoshta ne kemi nevojë për të prezantuar këtë dimension të tretë. 684 00:41:19,890 --> 00:41:22,230 Dhe kjo rezulton, në qoftë se ne do të prezantoj këtë dimension të tretë, 685 00:41:22,230 --> 00:41:25,240 ne nuk mund ta bëjë këtë të përkryer, por Grail Shenjtë do të bëhet 686 00:41:25,240 --> 00:41:28,370 konstante në kohë futje dhe insertions dinamike në mënyrë që 687 00:41:28,370 --> 00:41:30,960 ne nuk kemi të vështirë-kodi një grup të madhësisë 26. 688 00:41:30,960 --> 00:41:34,400 Ne mund të futni sa shumë emra si ne duam, por le të marrin 5-minutësh pushim tonë këtu 689 00:41:34,400 --> 00:41:38,790 dhe pastaj të bëjë atë siç duhet. 690 00:41:38,790 --> 00:41:46,020 Dakord. I vendosur deri goxha histori artificialisht atje 691 00:41:46,020 --> 00:41:48,670 duke zgjedhur Alice dhe pastaj BOB dhe pastaj Charlie dhe pastaj Anita, 692 00:41:48,670 --> 00:41:51,000 emri i të cilit ishte padyshim do të përplasen me Alice. 693 00:41:51,000 --> 00:41:54,120 Por pyetja ne përfundoi të hënën me të është se sa e mundshme është ajo 694 00:41:54,120 --> 00:41:56,370 që ju do të merrni këto lloje e perplasjeve? Me fjalë të tjera, 695 00:41:56,370 --> 00:42:00,490 në qoftë se ne të fillojnë të përdorin këtë strukturë tabelore, e cila është me të vërtetë vetëm një grup, 696 00:42:00,490 --> 00:42:02,460 në këtë rast 26 vende, 697 00:42:02,460 --> 00:42:05,740 çfarë nëse inputet tona janë të shpërndara në mënyrë uniforme në vend? 698 00:42:05,740 --> 00:42:09,620 Kjo nuk është artificialisht Alice dhe Bob dhe Charlie dhe Davidi dhe kështu me radhë alfabetike, 699 00:42:09,620 --> 00:42:12,380 kjo është shpërndarë uniformisht gjatë një anë Z. 700 00:42:12,380 --> 00:42:15,220 >> Ndoshta ne vetëm do të merrni me fat dhe ne nuk do të kemi dy Një ose të dy së ​​B 701 00:42:15,220 --> 00:42:17,640 me probabilitet shumë të lartë, por si dikush vuri në dukje, 702 00:42:17,640 --> 00:42:20,730 në qoftë se ne e pergjithshme ky problem dhe të mos bëjë 0-25 703 00:42:20,730 --> 00:42:26,060 por, të themi, 0 deri 364 ose 65, shpesh numri i ditëve në një vit tipik, 704 00:42:26,060 --> 00:42:31,170 dhe i kërkoi pyetjen, "Çfarë është probabiliteti që dy prej nesh në këtë sallë kanë të njëjtën ditëlindje?" 705 00:42:31,170 --> 00:42:34,600 Vënë atë një mënyrë tjetër, çfarë është probabiliteti që dy prej nesh kanë një emër duke filluar me A? 706 00:42:34,600 --> 00:42:37,190 Lloj i pyetjes është i njëjtë, por kjo hapësirë ​​adresa, 707 00:42:37,190 --> 00:42:39,940 kjo hapësirë ​​kërko, është më e madhe në rastin e ditëlindje, 708 00:42:39,940 --> 00:42:42,820 sepse ne kemi ditë kaq shumë më shumë sesa në vitin e shkronjave në alfabet. 709 00:42:42,820 --> 00:42:44,910 Çfarë është mundësia e një përplasjeje? 710 00:42:44,910 --> 00:42:48,410 E pra, ne mund të mendoj për këtë duke parafytyruar se matematikë në drejtim të kundërt. 711 00:42:48,410 --> 00:42:50,580 Çfarë është probabiliteti i pa perplasjeve? 712 00:42:50,580 --> 00:42:53,970 E pra, kjo shprehje këtu thotë se çfarë është probabiliteti 713 00:42:53,970 --> 00:42:58,770 në qoftë se ka vetëm një person në këtë dhomë, se ata kanë një ditëlindje të veçantë? 714 00:42:58,770 --> 00:43:01,190 Kjo është 100%. Sepse në qoftë se ka vetëm një person në dhomë, 715 00:43:01,190 --> 00:43:03,940 tij ose ditëlindjen saj mund të jetë ndonjë prej 365 ditëve nga vit. 716 00:43:03,940 --> 00:43:08,650 Pra opsione 365/365 më jep një vlerë prej 1. 717 00:43:08,650 --> 00:43:11,250 Pra probabiliteti në fjalë për momentin është vetëm 1. 718 00:43:11,250 --> 00:43:13,270 Por në qoftë se ka një person të dytë në dhomë, 719 00:43:13,270 --> 00:43:16,490 çfarë është probabiliteti që ditëlindjen e tyre është e ndryshme? 720 00:43:16,490 --> 00:43:20,680 Nuk është vetëm 364 ditë të mundshme, duke injoruar vjet brishtë, 721 00:43:20,680 --> 00:43:23,580 për ditëlindjen e tyre të mos bien ndesh me persona të tjerë. 722 00:43:23,580 --> 00:43:31,920 Pra 364/365. Nëse një person i tretë vjen në, kjo është 363/365, dhe kështu me radhë. 723 00:43:31,920 --> 00:43:35,790 Pra, ne kemi mbajtur shumëzuar bashku këto fraksionet, të cilat janë duke u vogla dhe të vogla, 724 00:43:35,790 --> 00:43:40,720 të kuptoj se çfarë është probabiliteti që të gjithë prej nesh kanë ditëlindje të veçantë? 725 00:43:40,720 --> 00:43:43,570 Por atëherë ne mund të, natyrisht, vetëm të marrë atë përgjigje dhe rrokullisje atë rreth 726 00:43:43,570 --> 00:43:47,210 dhe të bëjë 1 minus të gjithë se, një shprehje që ne përfundimisht do të merrni 727 00:43:47,210 --> 00:43:51,250 nëse ju kujtohet e prapme të librave tuaja matematikë, kjo duket një diçka të vogël si kjo, 728 00:43:51,250 --> 00:43:54,590 e cila është shumë më e lehtë të interpretohet grafikisht. 729 00:43:54,590 --> 00:43:57,820 Dhe ky grafik këtu ka në boshtin x numrin e ditëlindje, 730 00:43:57,820 --> 00:44:02,030 ose numri i njerëzve me ditëlindje, dhe mbi boshtin y është probabiliteti i një ndeshje. 731 00:44:02,030 --> 00:44:06,060 Dhe kjo është ajo që është thënë se në qoftë se ju keni, le të themi, madje, 732 00:44:06,060 --> 00:44:10,860 le të zgjedhin diçka si 22, 23. 733 00:44:10,860 --> 00:44:13,160 Nëse ka 22 ose 23 njerëz në dhomë, 734 00:44:13,160 --> 00:44:17,100 probabiliteti që dy prej atyre shumë pak njerëz do të kenë të njëjtën ditëlindje 735 00:44:17,100 --> 00:44:19,560 është në të vërtetë të lartë super, combinatorially. 736 00:44:19,560 --> 00:44:23,450 50% shanset që në një klasë prej vetëm 22 njerëz, një seminar, praktikisht, 737 00:44:23,450 --> 00:44:25,790 2 prej këtyre njerëzve do të kenë të njëjtën ditëlindje. 738 00:44:25,790 --> 00:44:28,520 Sepse ka kaq shumë mënyra në të cilat ju mund të keni të njëjtën ditëlindje. 739 00:44:28,520 --> 00:44:31,110 Edhe më keq, në qoftë se ju shikoni në anën e djathtë të tabelës, 740 00:44:31,110 --> 00:44:34,040 nga koha që ju keni një klasë me 58 studentë në të, 741 00:44:34,040 --> 00:44:39,270 probabiliteti i 2 persona të paturit e një ditëlindjen është super, super të lartë, gati 100%. 742 00:44:39,270 --> 00:44:41,880 Tani, kjo është lloj i një fakti fun në lidhje me jetën reale. 743 00:44:41,880 --> 00:44:45,850 >> Por implikimet, tani, për strukturat e të dhënave dhe informacionit ruajtjen 744 00:44:45,850 --> 00:44:51,100 do të thotë se vetëm duke supozuar që ju keni një të bukur, të pastër, shpërndarjen uniforme të të dhënave 745 00:44:51,100 --> 00:44:53,650 dhe ju keni një koleksion të madh të mjaftueshme për të përshtaten një bandë e gjëra 746 00:44:53,650 --> 00:44:59,360 nuk do të thotë që ju jeni duke shkuar për të marrë njerëz në vende unike. 747 00:44:59,360 --> 00:45:03,810 Ju jeni do të ketë goditjet. Pra ky nocion i hashing, siç është quajtur, 748 00:45:03,810 --> 00:45:07,450 marrë një kontribut si "Alice" dhe fërkoni atë në një farë mënyre 749 00:45:07,450 --> 00:45:10,190 dhe pastaj marrjen mbrapa një përgjigje si 0 ose 1 ose 2. 750 00:45:10,190 --> 00:45:17,500 Getting back disa dalje nga këtë funksion është rrënuar nga ky probabilitet të goditjes. 751 00:45:17,500 --> 00:45:19,530 Pra, si mund të kemi trajtuar ato goditjet? 752 00:45:19,530 --> 00:45:21,940 E pra, në një rast, ne mund të marrim idenë që ishte sugjeruar. 753 00:45:21,940 --> 00:45:25,100 Ne vetëm mund të zhvendoset të gjithë poshtë, ose ndoshta, pak më thjesht, 754 00:45:25,100 --> 00:45:29,870 në vend se të gjithë veprim tjetër, le të vetëm të lëvizë Anit në fund të vend në dispozicion. 755 00:45:29,870 --> 00:45:32,810 Kështu nëse Alice është në 0, Bob është në 1, Charlie është në 2, 756 00:45:32,810 --> 00:45:35,260 ne vetëm do të vënë në vend Anit 3. 757 00:45:35,260 --> 00:45:38,860 Dhe kjo është një teknikë në strukturat e të dhënave të quajtur lineare probing. 758 00:45:38,860 --> 00:45:41,310 Lineare sepse ju jeni vetëm në këmbë këtë linjë, dhe ju jeni lloj i probing 759 00:45:41,310 --> 00:45:43,640 për spote në dispozicion në strukturën e të dhënave. 760 00:45:43,640 --> 00:45:46,210 Sigurisht, kjo bie në O (n). 761 00:45:46,210 --> 00:45:49,590 Nëse struktura të dhënave me të vërtetë të plotë, nuk ka 25 njerëz në atë tashmë, 762 00:45:49,590 --> 00:45:54,120 dhe pastaj Anita vjen së bashku, ajo përfundon deri në çfarë do të jetë lokacioni Z, dhe kjo është në rregull. 763 00:45:54,120 --> 00:45:56,540 Ajo ende i përshtatet, dhe ne mund të gjeni atë më vonë. 764 00:45:56,540 --> 00:46:00,100 >> Por kjo ishte në kundërshtim me qëllimin e shpejtimin gjërat. 765 00:46:00,100 --> 00:46:02,530 Pra, çfarë nëse ne vend futur këtë dimension të tretë? 766 00:46:02,530 --> 00:46:06,400 Kjo teknikë është quajtur përgjithësisht chaining të veçantë, ose të kenë zinxhirë. 767 00:46:06,400 --> 00:46:10,030 Dhe çfarë një tabelë hash tani është, kjo strukturë tabelore, 768 00:46:10,030 --> 00:46:13,450 Tabela e juaj është vetëm një grup i pointers. 769 00:46:13,450 --> 00:46:18,230 Por ajo që ata tregojnë për pointers është me mend se çfarë? 770 00:46:18,230 --> 00:46:21,970 Një listë e lidhur. Pra, çfarë nëse ne marrim më të mirë të të dyja këtyre botëve? 771 00:46:21,970 --> 00:46:26,500 Ne përdorim vargjeve për indekset fillestare 772 00:46:26,500 --> 00:46:32,070 në strukturën e të dhënave kështu që ne mund të shkojnë në çast [0] [1], [30] apo kështu me radhë, 773 00:46:32,070 --> 00:46:36,480 por në mënyrë që të kemi një fleksibilitet dhe ne mund të përshtatet Anit dhe Alice dhe Adami 774 00:46:36,480 --> 00:46:38,630 dhe ndonjë tjetër Një emër, 775 00:46:38,630 --> 00:46:43,470 ne vend le aksi tjetër të rritet në mënyrë arbitrare. 776 00:46:43,470 --> 00:46:47,340 Dhe ne fund, nga e hëna, kanë atë aftësi ekspresive me lista të lidhura. 777 00:46:47,340 --> 00:46:49,530 Ne mund të rritet një strukturë të dhënave në mënyrë arbitrare. 778 00:46:49,530 --> 00:46:52,450 Nga ana tjetër, ne mund të bëjë vetëm një koleksion i madh 2-dimensionale, 779 00:46:52,450 --> 00:46:57,190 por që do të jetë një situatë e tmerrshme nëse dikush prej rreshtave në një rrjet të 2-dimensionale 780 00:46:57,190 --> 00:47:01,280 nuk është mjaft e madhe për personin shtesë emri i të cilit ndodh për të filluar me A. 781 00:47:01,280 --> 00:47:04,200 Zoti na ruajt, ne kemi për të rialokuar një strukturë të madhe 2-dimensionale 782 00:47:04,200 --> 00:47:06,600 vetëm për shkak se ka kaq shumë njerëz të quajtur Një, 783 00:47:06,600 --> 00:47:09,480 sidomos kur ka kaq pak quajtur diçka Z. 784 00:47:09,480 --> 00:47:12,170 Është vetëm do të jetë një shumë e rrallë të dhënave struktura. 785 00:47:12,170 --> 00:47:15,400 Pra, kjo nuk është e përsosur me çdo mjet, por tani ne të paktën të ketë aftësinë 786 00:47:15,400 --> 00:47:19,090 për të gjetur çast ku Alice apo Anita takon, 787 00:47:19,090 --> 00:47:21,090 të paktën në drejtim të aksit vertikal, 788 00:47:21,090 --> 00:47:25,850 dhe pastaj ne vetëm duhet të vendosë se ku për të vënë Anit ose Alice në këtë listë e lidhur. 789 00:47:25,850 --> 00:47:32,480 Nëse ne nuk e kujdesit për klasifikim gjëra, se sa shpejt mund të kemi futur Alice në një strukturë si kjo? 790 00:47:32,480 --> 00:47:35,370 Është koha konstante. Ne indeksi në [0], dhe nëse ka askujt, 791 00:47:35,370 --> 00:47:37,550 Alice shkon në fillim të kësaj liste të lidhura. 792 00:47:37,550 --> 00:47:40,000 Por kjo nuk është një marrëveshje e madhe. Sepse në qoftë se Anita pastaj vjen së bashku 793 00:47:40,000 --> 00:47:42,160 numrin e disa hapave më vonë, kur nuk Anita takon? 794 00:47:42,160 --> 00:47:45,140 E pra, [0]. OOP. Alice është tashmë në atë listë të lidhura. 795 00:47:45,140 --> 00:47:47,760 >> Por nëse ne nuk e kujdesit për klasifikim këto emra, 796 00:47:47,760 --> 00:47:53,580 Ne vetëm mund të lëvizin Alice gjatë, insert Anita, por edhe se është koha konstante. 797 00:47:53,580 --> 00:47:57,010 Edhe në qoftë se ka Alice dhe Adami dhe të gjitha këto emra të tjerë Një, 798 00:47:57,010 --> 00:47:59,410 kjo nuk është me të vërtetë shtyrë ato fizikisht. Pse? 799 00:47:59,410 --> 00:48:04,090 Sepse ne vetëm e bëri këtu me lista të lidhura, i cili e di po keto nyjet janë anyway? 800 00:48:04,090 --> 00:48:06,550 Të gjithë ju duhet të bëni është të lëvizur crumbs bukë. 801 00:48:06,550 --> 00:48:10,930 Leviz shigjeta përreth, ju nuk keni për të lëvizur fizikisht të dhëna rreth. 802 00:48:10,930 --> 00:48:14,610 Pra, ne mund të futur Anit, në këtë rast, në çast. Ora konstante. 803 00:48:14,610 --> 00:48:20,250 Pra, ne kemi të vazhdueshme në kohë lookup, dhe konstante në kohë futjen e dikujt si Anita. 804 00:48:20,250 --> 00:48:22,740 Por lloji i thjeshtëzuar botën. 805 00:48:22,740 --> 00:48:28,510 Çfarë ndodh nëse ne duam më vonë për të gjetur Alice? 806 00:48:28,510 --> 00:48:31,050 Çfarë ndodh nëse ne duam më vonë për të gjetur Alice? 807 00:48:31,050 --> 00:48:35,690 Sa hapa është se do të marrë? 808 00:48:35,690 --> 00:48:37,850 [Student përgjigje, pakuptueshëm] 809 00:48:37,850 --> 00:48:40,950 Saktësisht. Numri i njerëzve para Alice në listën e lidhur. 810 00:48:40,950 --> 00:48:45,420 Pra, kjo nuk është mjaft e përsosur, për shkak se struktura e të dhënave tona, përsëri, ka këtë qasje vertikale 811 00:48:45,420 --> 00:48:50,240 dhe pastaj ajo ka këto lista ndërlidhura varur - në fakt, le të mos tërheqë atë një një grup. 812 00:48:50,240 --> 00:48:56,020 Ajo ka këto lista të lidhura varur jashtë të saj që duket një diçka të vogël si kjo. 813 00:48:56,020 --> 00:48:59,110 Por problemi është nëse Alice dhe Adami dhe të gjitha këto emra të tjerë Një 814 00:48:59,110 --> 00:49:01,720 përfundojnë gjithnjë e më shumë atje, 815 00:49:01,720 --> 00:49:04,810 gjetjen e dikush mund të përfundojnë duke marrë një bandë e hapa, 816 00:49:04,810 --> 00:49:06,670 bcause ju duhet të kaloj nëpër listën e të lidhur, 817 00:49:06,670 --> 00:49:08,090 cila është një operacion linear. 818 00:49:08,090 --> 00:49:14,270 Kështu vërtetë, pastaj, koha futje përfundimisht është O (n), ku n është numri i elementeve në lista. 819 00:49:14,270 --> 00:49:21,780 Ndarë nga, le arbitrarisht thirrje ajo m, ku m është numri i listave lidhura 820 00:49:21,780 --> 00:49:24,500 që ne kemi në këtë aks vertikal. 821 00:49:24,500 --> 00:49:27,180 Me fjalë të tjera, nëse ne me të vërtetë të marrë një shpërndarje uniforme të emrave, 822 00:49:27,180 --> 00:49:30,150 tërësisht joreale. Ka padyshim më i disa letra se të tjerët. 823 00:49:30,150 --> 00:49:32,580 >> Por në qoftë se ne supozojmë për një moment shpërndarjes uniforme, 824 00:49:32,580 --> 00:49:37,350 dhe ne kemi njerëz n total, dhe zinxhirët m totale 825 00:49:37,350 --> 00:49:40,630 në dispozicion për ne, atëherë gjatësia e secilit prej këtyre zinxhirëve 826 00:49:40,630 --> 00:49:44,380 mjaft thjesht do të jetë i përgjithshëm, n ndarë me numrin e zinxhirëve. 827 00:49:44,380 --> 00:49:48,900 Pra, n / m. Por këtu është ajo ku ne mund të jetë mbi të gjitha matematikisht zgjuar. 828 00:49:48,900 --> 00:49:53,030 m është një konstante, sepse ka një numër të caktuar të këtyre. 829 00:49:53,030 --> 00:49:54,620 Ju do të jeni për të deklaruar array tuaj në fillim, 830 00:49:54,620 --> 00:49:58,450 dhe ne nuk jemi duke ndryshuar boshtin vertikal. Nga përkufizimi, që qëndron fikse. 831 00:49:58,450 --> 00:50:01,220 Kjo është vetëm aksi horizontal, kështu që të flasin, që është ndryshuar. 832 00:50:01,220 --> 00:50:04,760 Pra teknikisht, kjo është një konstante. Deri tani, koha futje 833 00:50:04,760 --> 00:50:09,700 është O goxha shumë (n). 834 00:50:09,700 --> 00:50:12,410 Kështu që nuk mendojnë të gjithë se shumë më mirë. 835 00:50:12,410 --> 00:50:14,940 Por ajo që është e vërteta këtu? E pra, të gjithë këtë kohë, për disa javë, 836 00:50:14,940 --> 00:50:20,640 ne kemi qenë duke thënë O (n ²). O (n), 2 x n ², - N, ndahet nga 2. . . ech. 837 00:50:20,640 --> 00:50:23,580 Është vetëm ² n. Por tani, në këtë pjesë të semestrit, 838 00:50:23,580 --> 00:50:25,560 ne mund të fillojmë të flasim në lidhje me botën e vërtetë përsëri. 839 00:50:25,560 --> 00:50:31,520 Dhe n / m është absolutisht më shpejt se vetëm n vetëm. 840 00:50:31,520 --> 00:50:35,170 Nëse ju keni një mijë emra, dhe ju thyejnë ato deri në kova të shumta 841 00:50:35,170 --> 00:50:37,820 kështu që ju keni vetëm dhjetë emra në secilën prej këtyre zinxhirëve, 842 00:50:37,820 --> 00:50:41,670 absolutisht në kërkim dhjetë gjëra do të jetë më shpejt se një mijë gjëra. 843 00:50:41,670 --> 00:50:43,740 Dhe kështu një nga grupe probleme ardhshme do të sfidojnë ty 844 00:50:43,740 --> 00:50:46,100 të mendojnë për saktësisht se edhe pse, vërtet, 845 00:50:46,100 --> 00:50:49,520 asymptotically dhe matematikisht, kjo është ende vetëm lineare, 846 00:50:49,520 --> 00:50:51,700 që sucks në përgjithësi, kur duke u përpjekur për të gjetur gjëra. 847 00:50:51,700 --> 00:50:54,530 Në realitet, ajo do të jetë më e shpejtë se ajo 848 00:50:54,530 --> 00:50:56,520 për shkak të këtij pjesëtues. 849 00:50:56,520 --> 00:50:58,310 Dhe kështu që nuk është sërish do të jetë në këtë tregti-off 850 00:50:58,310 --> 00:51:01,390 dhe ky konflikt në mes teorisë dhe realitetit, 851 00:51:01,390 --> 00:51:03,550 dhe një nga pullat do të fillojë kthyer në këtë pikë në semestrin 852 00:51:03,550 --> 00:51:07,510 është më e realitetit si ne një lloj i përgatitur për në fund semster-së, 853 00:51:07,510 --> 00:51:09,280 si ne futur botën e programimit web, 854 00:51:09,280 --> 00:51:11,530 ku me të vërtetë, performanca është duke shkuar për të numëruar, sepse përdoruesit tuaj do të 855 00:51:11,530 --> 00:51:14,880 fillojnë të ndjehen dhe të vlerësojmë vendime të varfër të projektimit. 856 00:51:14,880 --> 00:51:19,950 >> Deri sa ju shkoni në lidhje me zbatimin e një linked - një tabelë hash me 31 elemente? 857 00:51:19,950 --> 00:51:22,600 Dhe shembulli i mëparshëm ishte rreth arbitrare ditëlindje. 858 00:51:22,600 --> 00:51:26,190 Nëse dikush ka një ditëlindje të janarit 1 ose 1 shkurt, ne do të vënë ato në këtë kovë. 859 00:51:26,190 --> 00:51:28,960 Në qoftë se kjo është më 2 janar, shkurt 2, 2 mars, ne do të vënë ato në këtë kovë. 860 00:51:28,960 --> 00:51:32,220 Kjo është arsyeja pse ajo ishte 31. Si mund të deklarojë një tabelë hash? 861 00:51:32,220 --> 00:51:37,480 Ajo mund të jetë shumë e thjeshtë, tavolinë nyje * është emri im arbitrar për atë, [31]. 862 00:51:37,480 --> 00:51:42,400 Kjo më jep 31 pointers në nyjet, 863 00:51:42,400 --> 00:51:45,370 dhe që lejon mua që të ketë 31 pointers në listat e lidhura 864 00:51:45,370 --> 00:51:48,800 edhe në qoftë se ato janë zinxhirët fillimisht NULL. 865 00:51:48,800 --> 00:51:54,860 Çfarë unë dua të vënë në qoftë se unë dua të ruajtur "Alice", "Bob", "Charlie"? 866 00:51:54,860 --> 00:51:57,010 E pra, ne kemi nevojë për të përfunduar këto gjëra në një strukturë 867 00:51:57,010 --> 00:52:00,530 sepse ne kemi nevojë për pikë për të Alice Bob, që të tregojnë për Charlie, dhe kështu me radhë. 868 00:52:00,530 --> 00:52:04,940 Ne nuk mund të ketë vetëm emrat vetëm, kështu që unë mund të krijojë një strukturë të re të quajtur nyja këtu. 869 00:52:04,940 --> 00:52:08,310 >> Çfarë është një nyje e vërtetë? Çfarë është një nyje në këtë listë të re lidhur? 870 00:52:08,310 --> 00:52:11,840 Gjëja e parë, i quajtur fjalë, është për emrin e personit. 871 00:52:11,840 --> 00:52:14,340 LENGTH, me sa duket, lidhet me gjatësinë maksimale e emrit të një njeriut, 872 00:52:14,340 --> 00:52:18,210 çfarëdo që është, 20, 30, 40 karaktere në rastet qoshe çmendur, 873 00:52:18,210 --> 00:52:22,680 dhe 1 është për çfarë? Është vetëm karakter ekstra NULL, \ 0. 874 00:52:22,680 --> 00:52:27,410 Pra, kjo është nyja dhënë "diçka" brenda në vetvete, 875 00:52:27,410 --> 00:52:29,640 por ajo gjithashtu deklaron një tregues tjetër i quajtur 876 00:52:29,640 --> 00:52:32,580 kështu që ne mund të Bob zinxhir Alice për Charlie dhe kështu me radhë. 877 00:52:32,580 --> 00:52:36,700 Mund të jetë NULL, por nuk duhet të jetë domosdoshmërisht. 878 00:52:36,700 --> 00:52:40,110 Çdo pyetje në lidhje me këto tabela hash? Po? 879 00:52:40,110 --> 00:52:46,190 [Student i kërkuar pyetje, pakuptueshëm] Një array - pyetje e mirë. 880 00:52:46,190 --> 00:52:50,120 Pse është kjo fjalë char në një rrjet sesa vetëm * char? 881 00:52:50,120 --> 00:52:53,830 Në këtë shembull disi arbitrare, unë nuk dua të duhet të përdorë 882 00:52:53,830 --> 00:52:56,190 tek malloc për secilin nga emrat origjinal. 883 00:52:56,190 --> 00:52:59,530 Unë të kërkuar për të deklaruar një sasi maksimale e kujtesës për vargun 884 00:52:59,530 --> 00:53:06,020 kështu që unë mund të kopjoni në strukturën Alice \ 0 dhe nuk duhet të merren me malloc dhe të lirë dhe si. 885 00:53:06,020 --> 00:53:11,710 Por unë mund të bëjë që në qoftë se unë të kërkuar për të qenë më të vetëdijshëm për përdorimin e hapësirës. Mirë pyetje. 886 00:53:11,710 --> 00:53:14,780 Pra, le të përpiqemi për të përgjithësuar larg nga kjo 887 00:53:14,780 --> 00:53:18,350 dhe të përqëndrohet pjesën e mbetur të sotme në strukturat e të dhënave në përgjithësi 888 00:53:18,350 --> 00:53:21,170 dhe probleme të tjera që ne mund të zgjidhin duke përdorur bazat e njëjta 889 00:53:21,170 --> 00:53:24,590 edhe pse strukturat e të dhënave vetë mund të ndryshojnë në veçoritë e tyre. 890 00:53:24,590 --> 00:53:27,910 >> Pra, ajo rezulton në shkenca kompjuterike, pemët janë shumë të zakonshme. 891 00:53:27,910 --> 00:53:29,760 Dhe ju mund të mendoni për një lloj pemë të si një pemë familjare, 892 00:53:29,760 --> 00:53:31,830 ku ka disa rrënjë, disa matriarch apo patriark, 893 00:53:31,830 --> 00:53:34,540 gjyshe apo gjysh ose më herët mbrapa, 894 00:53:34,540 --> 00:53:38,880 nën të cilat janë nëna dhe baba ose motra të ndryshme ose të ngjashme. 895 00:53:38,880 --> 00:53:42,500 Pra, një strukturë pemë ka nyje dhe ajo ka fëmijë, 896 00:53:42,500 --> 00:53:45,260 zakonisht 0 ose më tepër fëmijë për çdo nyje. 897 00:53:45,260 --> 00:53:47,320 Dhe disa nga zhargon që ju shihni në këtë foto këtu 898 00:53:47,320 --> 00:53:50,630 është ndonjë nga fëmijët pak ose grandkids në skajet 899 00:53:50,630 --> 00:53:52,330 të cilët nuk kanë shigjetat që burojnë prej tyre, 900 00:53:52,330 --> 00:53:55,070 ato janë të ashtuquajturat gjethe, dhe kushdo në brendësi 901 00:53:55,070 --> 00:53:58,790 është një nyje e brendshme, ju mund të telefononi atë asgjë përgjatë këtyre linjave. 902 00:53:58,790 --> 00:54:01,430 Por kjo strukturë është shumë e zakonshme. Kjo është pak arbitrare. 903 00:54:01,430 --> 00:54:04,930 Ne kemi një fëmijë në të majtë, ne kemi tre fëmijë në të djathtë, 904 00:54:04,930 --> 00:54:06,830 dy fëmijë në fund u largua. 905 00:54:06,830 --> 00:54:10,740 Kështu që ne mund të kemi të ndryshme të mesme pemë, por në qoftë se ne fillojmë të standartizuar gjëra, 906 00:54:10,740 --> 00:54:15,330 dhe ju mund të kujtojnë këtë nga video Patrikut në kërkim binar nga një të shkurtër mëparshme 907 00:54:15,330 --> 00:54:19,490 online, kërko binar nuk duhet të zbatohet me një grup 908 00:54:19,490 --> 00:54:21,410 ose copa e letrës në një dërrasë e zezë. 909 00:54:21,410 --> 00:54:25,490 Supozoni se ju të kërkuar për të ruajtur numrat tuaj në një strukturë më të sofistikuar të të dhënave. 910 00:54:25,490 --> 00:54:27,680 Ju mund të krijoni një pemë si kjo. 911 00:54:27,680 --> 00:54:35,290 Ju mund të keni një nyje deklaruar në C, dhe se nyja mund të ketë të paktën dy elemente brenda të saj. 912 00:54:35,290 --> 00:54:39,470 Njëra është numri që ju dëshironi për të ruajtur, dhe të tjera është - mirë, ne kemi nevojë për një më shumë. 913 00:54:39,470 --> 00:54:41,540 Të tjera është fëmijët e saj. 914 00:54:41,540 --> 00:54:45,150 Kështu që këtu është një tjetër strukturë të dhënave. Këtë herë, një nyje është përcaktuar si ruajtjen e një numri n 915 00:54:45,150 --> 00:54:49,060 dhe pastaj dy pointers, fëmijë të majtë dhe të djathtë fëmijës. 916 00:54:49,060 --> 00:54:52,100 Dhe ata nuk janë arbitrare. Çfarë është interesante në lidhje me këtë pemë? 917 00:54:52,100 --> 00:55:00,550 >> Çfarë është model në mënyrën se si ne kemi hedhur këtë, apo si Patrick vuri atë në video e tij? 918 00:55:00,550 --> 00:55:02,790 Kjo është lloj i qartë se ka disa klasifikim duke shkuar në këtu, 919 00:55:02,790 --> 00:55:04,460 por ajo është rregull të thjeshtë? Po? 920 00:55:04,460 --> 00:55:08,350 [Student përgjigje, pakuptueshëm] 921 00:55:08,350 --> 00:55:12,040 Përsosur. Nëse jeni në këtë shikim, ju shihni numrat e vogla në të majtë, 922 00:55:12,040 --> 00:55:14,690 Numrat e mëdha në të majtë, por kjo është e vërtetë për çdo nyje. 923 00:55:14,690 --> 00:55:20,370 Për çdo nyje, fëmija i tij të majtë më pak se ajo, dhe fëmija e tij të drejtë më të madhe se ajo. 924 00:55:20,370 --> 00:55:25,210 Çfarë kjo do të thotë tani është në qoftë se unë dua të kërkuar këtë strukturë të dhënave për të, thonë, numrin 44, 925 00:55:25,210 --> 00:55:29,320 Unë duhet të fillojë në rrënjë, sepse me të gjitha këto struktura më komplekse të dhënave tani, 926 00:55:29,320 --> 00:55:31,910 ne kemi vetëm një tregues për një gjë, fillimi. 927 00:55:31,910 --> 00:55:35,010 Dhe në këtë rast, është fillimi rrënjë. Kjo nuk është fundi majtë, 928 00:55:35,010 --> 00:55:39,530 kjo është rrënja e kësaj strukture. Kështu që unë shoh këtu është 55, dhe unë jam duke kërkuar për 44. 929 00:55:39,530 --> 00:55:41,430 Cilin drejtim dua të shkoj? 930 00:55:41,430 --> 00:55:45,680 E pra, unë dua të shkoj në të majtë, sepse padyshim, në të djathtë do të jetë shumë i madh. 931 00:55:45,680 --> 00:55:49,050 Pra njoftim këtu, ju jeni lloj i konceptualisht shëndoshë pemë në gjysmën e 932 00:55:49,050 --> 00:55:51,700 sepse ju kurrë nuk do të jeni poshtë në anën e djathtë. 933 00:55:51,700 --> 00:55:55,410 Pra, tani unë po shkoj nga 55 në 33. Është shumë e vogël e një numri. 934 00:55:55,410 --> 00:56:01,590 Unë jam duke kërkuar për 44, por tani unë e di nëse është e 44 në këtë pema, unë mund të shkoni padyshim në të djathtë. 935 00:56:01,590 --> 00:56:04,460 Pra, përsëri, unë jam tëharrje pemë në gjysmë. 936 00:56:04,460 --> 00:56:06,780 Është shumë e shumë identike konceptualisht në librin e telefonit. 937 00:56:06,780 --> 00:56:09,510 Kjo është identike me atë që ne e bëmë me letrat në dërrasë e zezë, 938 00:56:09,510 --> 00:56:13,940 por kjo është një strukturë më të sofistikuar që na lejon të bëjë në fakt 939 00:56:13,940 --> 00:56:16,880 kjo përça dhe sundo nga hartimin e algorithm, 940 00:56:16,880 --> 00:56:19,420 dhe në fakt, traversing një strukturë të tillë - uh. 941 00:56:19,420 --> 00:56:22,870 Traversing një strukturë të tillë, ku vetëm "të shkojnë në këtë mënyrë apo të shkojë në këtë mënyrë," 942 00:56:22,870 --> 00:56:26,870 do të thotë të gjithë kodin që se Bent mendjen tuaj në fillim, kur zbatimin e saj në nenin 943 00:56:26,870 --> 00:56:31,270 ose në këmbë nëpër atë në shtëpi, për kërkimin binar, duke përdorur recursion apo përsëritje, 944 00:56:31,270 --> 00:56:35,060 kjo është një dhimbje në qafë. Gjej elementin e mesme, pastaj të bëjë arrestimi tuaj lart ose poshtë. 945 00:56:35,060 --> 00:56:39,230 >> Ka një bukuri për këtë, sepse ne tani mund të përdorni recursion përsëri, 946 00:56:39,230 --> 00:56:43,760 por shumë më pastër. Në të vërtetë, në qoftë se ju jeni në numrin 55 dhe ju doni të gjeni 44, 947 00:56:43,760 --> 00:56:48,450 ju shkoni la në këtë rast, atëherë çfarë do të bëni? Ju drejtuar algorithm saktë të njëjtën. 948 00:56:48,450 --> 00:56:51,560 Ju kontrolloni vlerën e nyjeve, atëherë ju shkoni majtas ose djathtas. 949 00:56:51,560 --> 00:56:53,670 Pastaj ju shikoni vlerën e nyjeve, shkoni majtas ose djathtas. 950 00:56:53,670 --> 00:56:56,710 Kjo është e përshtatshme të përkryer për recursion. 951 00:56:56,710 --> 00:57:00,920 Pra, edhe pse në të kaluarën ne kemi bërë disa shembuj mjaft arbitrare të bëjnë recursion 952 00:57:00,920 --> 00:57:03,430 që nuk duhet të jetë gjithkund rekursive, me STUCTURES të dhënave, 953 00:57:03,430 --> 00:57:07,820 sidomos pemë, kjo është një aplikim i përsosur i kësaj ideje të marrë një problem, 954 00:57:07,820 --> 00:57:12,920 pakësuar atë, dhe pastaj zgjidhjen e njejta, por më të vogla, programin. 955 00:57:12,920 --> 00:57:14,590 >> Pra, ka një tjetër strukturë e të dhënave që ne mund të futur. 956 00:57:14,590 --> 00:57:18,760 Ky i fundit është i dizajnuar në shikim të parë duken të fshehtë, por kjo është e mahnitshme. 957 00:57:18,760 --> 00:57:25,090 Kështu kjo është një strukturë të dhënave i quajtur një trie, trie, e cila është e trashëguar nga rikthim fjalë, 958 00:57:25,090 --> 00:57:30,210 e cila nuk është e theksuar ri-provoni-Val, por kjo është ajo që bota e quan këto gjëra. Përpiqet. T-r-i-e. 959 00:57:30,210 --> 00:57:35,190 Kjo është një strukturë pemë e disa lloj, por secili prej nyjeve në një trie 960 00:57:35,190 --> 00:57:41,280 duket të jetë ajo? Dhe kjo është pak mashtruese, sepse kjo është lloj i shkurtuar. 961 00:57:41,280 --> 00:57:45,960 Por kjo duket si çdo nyje në këtë trie është në fakt një grup. 962 00:57:45,960 --> 00:57:48,840 Dhe, edhe pse autori i këtij diagram nuk ka treguar atë, 963 00:57:48,840 --> 00:57:54,130 në këtë rast, ky trie është një strukturë e të dhënave qëllimi i të cilit në jetë është për të ruajtur fjalët 964 00:57:54,130 --> 00:57:57,330 si A-l-i-c-E ose B-o-B. 965 00:57:57,330 --> 00:58:02,480 Dhe mënyra në të cilën ky dyqane të dhënat e Alice dhe Bob dhe Charlie dhe Anita dhe kështu me radhë 966 00:58:02,480 --> 00:58:06,970 është ajo përdor një rrjet ku për të ruajtur Alice në një trie, 967 00:58:06,970 --> 00:58:09,820 ne të fillojë në nyje rrënjë që duket si një grup, 968 00:58:09,820 --> 00:58:12,080 dhe kjo është e shkruar në simbol stenografi. 969 00:58:12,080 --> 00:58:15,070 Autori harruar abcdefg, sepse nuk ka pasur emra me këtë. 970 00:58:15,070 --> 00:58:19,150 Ata vetëm treguan M dhe P dhe T, por në këtë rast, 971 00:58:19,150 --> 00:58:22,780 le të largohen nga Alice dhe Bob dhe Charlie me disa emra që janë këtu. 972 00:58:22,780 --> 00:58:25,670 Maxwell është në të vërtetë në këtë diagram. 973 00:58:25,670 --> 00:58:29,570 Pra, si e bëri autorin dyqan M-a-x-w-e-l-l? 974 00:58:29,570 --> 00:58:36,990 Ai ose ajo filloi në nyjen rrënjë, dhe shkoi për të [M], kështu përafërsisht 13, lokacioni 13 në grup. 975 00:58:36,990 --> 00:58:40,750 Pastaj nga atje, ka një tregues. 976 00:58:40,750 --> 00:58:42,760 Një tregues tjetër që çon në rrjet. 977 00:58:42,760 --> 00:58:47,880 Nga atje autor të indeksuara në atë grup në vendin A, si përshkruar aty në të majtë të lartë, 978 00:58:47,880 --> 00:58:52,250 dhe pastaj ai ose ajo e ndjekur atë tregues për një tjetër grup, 979 00:58:52,250 --> 00:58:55,460 dhe shkoi në treguesin e lokacionit në X. 980 00:58:55,460 --> 00:58:59,840 Pastaj në tjetër e lokacionit array W, E, L, L, dhe kështu me radhë, 981 00:58:59,840 --> 00:59:03,090 dhe më në fund, le të vërtetë të përpiqet për të vënë një foto për këtë. 982 00:59:03,090 --> 00:59:05,380 Çfarë bën një vështrim nyje si në kodin? 983 00:59:05,380 --> 00:59:11,820 Një nyjë në një trie përmban një koleksion të pointers në nyjet më shumë. 984 00:59:11,820 --> 00:59:16,090 Por ka gjithashtu mori të jetë një lloj të vlerës boolean, të paktën në këtë zbatim. 985 00:59:16,090 --> 00:59:18,770 Unë të ndodhë për të thirrur atë is_word. Pse? 986 00:59:18,770 --> 00:59:22,670 Sepse kur ju jeni futur Maxwell, ju nuk jeni futur 987 00:59:22,670 --> 00:59:25,300 asgjë në këtë strukturë të dhëna. 988 00:59:25,300 --> 00:59:27,480 Ju nuk jeni i shkrimit M. Ju nuk jeni të shkruar X. 989 00:59:27,480 --> 00:59:30,240 Të gjithë ju jeni bërë është pas pointers. 990 00:59:30,240 --> 00:59:33,360 Tregues që përfaqëson M, atëherë tregues që përfaqëson një, 991 00:59:33,360 --> 00:59:36,310 atëherë treguesin që përfaqëson X, atëherë W, E, L, L, 992 00:59:36,310 --> 00:59:41,950 por çfarë ju duhet të bëni në fund është lloj i shkoni, shikoni, kam arritur në këtë vend. 993 00:59:41,950 --> 00:59:45,560 Nuk ishte një fjalë që përfundon këtu në strukturën e të dhënave. 994 00:59:45,560 --> 00:59:48,190 >> Pra, çfarë është një trie është e mbushur me të vërtetë me autor dhe zgjodhi për të përfaqësuar 995 00:59:48,190 --> 00:59:51,880 këto terminuses me trekëndëshat pak. 996 00:59:51,880 --> 00:59:56,470 Kjo thjesht do të thotë se fakti ky trekëndësh është këtu, kjo vlerë e vërtetë boolean 997 00:59:56,470 --> 00:59:59,200 thotë në qoftë se ju shkoni prapa në pemë, 998 00:59:59,200 --> 01:00:02,420 që do të thotë një fjalë të quajtur Maxwell është në këtë. 999 01:00:02,420 --> 01:00:04,870 Por foo fjala, për shembull, 1000 01:00:04,870 --> 01:00:07,970 nuk është në pemë, sepse në qoftë se unë të fillojë në nyjen rrënjë deri këtu në majë, 1001 01:00:07,970 --> 01:00:14,030 Nuk ka asnjë tregues f, asnjë akrep o, nuk o akrep. Foo nuk është një emër në këtë fjalor. 1002 01:00:14,030 --> 01:00:22,460 Por nga kontrast, Turing, T-U-r-I-N-g. Përsëri, unë nuk t ruajtur ose U ose R ose I ose n ose g. 1003 01:00:22,460 --> 01:00:29,820 Por unë e bëri dyqan në këtë strukturë të dhënave një vlerë rruga e vërtetë këtu poshtë në këtë nyje - në pemë 1004 01:00:29,820 --> 01:00:33,030 duke vendosur këtë vlerë boolean të is_word të vërtetë. 1005 01:00:33,030 --> 01:00:35,740 Kështu që një trie është lloj i kësaj strukture meta shumë interesant, 1006 01:00:35,740 --> 01:00:39,810 ku ju nuk jeni me të vërtetë ruajtjen fjalët veten për këtë lloj fjalori. 1007 01:00:39,810 --> 01:00:45,100 Për të qenë të qartë, ju jeni vetëm ruajtjen po ose jo, nuk është një fjalë që përfundon këtu. 1008 01:00:45,100 --> 01:00:46,430 >> Tani çfarë është implikimi? 1009 01:00:46,430 --> 01:00:51,120 Nëse keni 150.000 fjalë në një fjalor që ju jeni duke u përpjekur për të ruajtur në kujtesë 1010 01:00:51,120 --> 01:00:53,400 duke përdorur diçka si një listë e lidhur, 1011 01:00:53,400 --> 01:00:56,870 ju do të keni 150,000 nyjet në listën tuaj të lidhura. 1012 01:00:56,870 --> 01:01:00,250 Dhe gjetjen e një prej atyre fjalëve alfabetike mund të marrë kohë O (n). 1013 01:01:00,250 --> 01:01:04,370 Ora lineare. Por në rastin këtu të trie, 1014 01:01:04,370 --> 01:01:09,210 çfarë është koha për të gjetur drejtimin e një fjalë? 1015 01:01:09,210 --> 01:01:17,390 Kjo rezulton nga bukuria këtu është se edhe në qoftë se ju keni tashmë 149.999 fjalë në këtë fjalor, 1016 01:01:17,390 --> 01:01:20,170 zbatohet si me këtë strukturë të dhënave, 1017 01:01:20,170 --> 01:01:25,560 sa kohë nuk është marrë për të gjetur ose futur një person më shumë në atë, si Alice, Alice? 1018 01:01:25,560 --> 01:01:30,640 E pra, kjo është vetëm 5, ndoshta 6 hapat për karakterin zvarritës. 1019 01:01:30,640 --> 01:01:32,880 Sepse prani e emrave të tjerë në strukturën e 1020 01:01:32,880 --> 01:01:35,340 nuk ka marrë në mënyrë të futur Alice. 1021 01:01:35,340 --> 01:01:39,640 Për më tepër, duke gjetur Alice sapo ka 150.000 fjalë në këtë fjalor 1022 01:01:39,640 --> 01:01:41,960 nuk ka marrë në rrugën tuaj për të gjetur Alice në të gjitha, 1023 01:01:41,960 --> 01:01:46,880 sepse Alice është. . . . . këtu, sepse kam gjetur një vlerë boolean. 1024 01:01:46,880 --> 01:01:50,920 Dhe në qoftë se nuk ka asnjë boolean vërtetë, atëherë nuk është Alice në këtë strukturë të dhënave të fjalëve. 1025 01:01:50,920 --> 01:01:56,220 Me fjalë të tjera, koha për të gjetur drejtimin e gjëra dhe të futur gjëra të reja në këtë 1026 01:01:56,220 --> 01:02:01,920 Struktura e të dhënave është trie O - kjo nuk është n. 1027 01:02:01,920 --> 01:02:05,730 Sepse prani e 150.000 njerëzve nuk ka efekt mbi Alice, ajo duket. 1028 01:02:05,730 --> 01:02:11,560 Pra, le të thërrasë atë k, ku k është gjatësia maksimale e një fjale në gjuhën angleze 1029 01:02:11,560 --> 01:02:14,050 e cila është zakonisht jo më shumë se 20-diçka karaktere. 1030 01:02:14,050 --> 01:02:17,940 Pra, k është një konstante. Pra, Grail Shenjtë ne duket se kanë gjetur tani 1031 01:02:17,940 --> 01:02:26,000 është që të një kohë trie, konstante për fut, për Lookups, për grisjeve. 1032 01:02:26,000 --> 01:02:29,170 Sepse numri i gjërave tashmë në strukturën, 1033 01:02:29,170 --> 01:02:32,600 të cilat nuk janë edhe fizikisht atje. Përsëri, ata janë vetëm lloj të kontrolluar off, po ose jo, 1034 01:02:32,600 --> 01:02:35,050 nuk ka asnjë ndikim në kohën e saj të ardhshëm running. 1035 01:02:35,050 --> 01:02:37,940 >> Por ka mori të jetë një kapur, përndryshe ne nuk do të kemi humbur aq shumë kohë 1036 01:02:37,940 --> 01:02:41,460 në të gjitha këto struktura të dhënave të tjera vetëm për të marrë në fund të një të fshehtë që është e mahnitshme. 1037 01:02:41,460 --> 01:02:46,410 Pra, çfarë çmimi jemi duke paguar për të arritur këtë madhështinë këtu? Hapësirë. 1038 01:02:46,410 --> 01:02:49,010 Kjo gjë është masiv. Dhe arsyeja që autori 1039 01:02:49,010 --> 01:02:52,400 nuk e paraqesin atë këtu, vërejmë se të gjitha këto gjëra që duken si vargjeve, 1040 01:02:52,400 --> 01:02:55,400 ai nuk ka nxjerrë pjesën tjetër të pemës, pjesa tjetër e trie, 1041 01:02:55,400 --> 01:02:58,060 sepse ata janë jo vetëm të rëndësishme për historinë. 1042 01:02:58,060 --> 01:03:01,870 Por të gjitha këto nyje janë super të gjerë, dhe çdo nyje në pemë merr 1043 01:03:01,870 --> 01:03:07,780 26 ose në fakt, mund të jetë 27 karaktere, sepse në këtë rast unë isha duke përfshirë edhe hapësirën për apostrof 1044 01:03:07,780 --> 01:03:09,980 kështu që ne mund të kemi fjalët apostrophized. 1045 01:03:09,980 --> 01:03:14,450 Në këtë rast, këto janë vargjeve të gjerë. Pra, edhe pse ata nuk janë picutured, 1046 01:03:14,450 --> 01:03:18,190 kjo merr një sasi masive të RAM. 1047 01:03:18,190 --> 01:03:20,670 Që mund të jetë mirë, especilly në hardware modern, 1048 01:03:20,670 --> 01:03:25,650 por kjo është tradeoff. Ne kemi marrë më pak kohë duke shpenzuar më shumë hapësirë. 1049 01:03:25,650 --> 01:03:28,580 Pra, ku është e gjithë kjo shkon? 1050 01:03:28,580 --> 01:03:32,640 E pra, le të bëjmë - le të shohim këtu. 1051 01:03:32,640 --> 01:03:39,510 Le të bëjmë një kërcim për këtë djalë këtu. 1052 01:03:39,510 --> 01:03:43,450 >> Besoni atë apo jo, fun sa më shumë që C ka qenë për një kohë tani, 1053 01:03:43,450 --> 01:03:48,130 ne jemi duke arritur pikën në semestrin kur është koha për kalimin në gjërat më moderne. 1054 01:03:48,130 --> 01:03:50,950 Gjërat në një nivel më të lartë. Dhe, edhe pse për pak javëve të ardhshme 1055 01:03:50,950 --> 01:03:54,580 ne do të vazhdojnë të zhyt veten në botën e pointers dhe menaxhimit të memories 1056 01:03:54,580 --> 01:03:57,210 për të marrë atë rehati me të cilat ne mund pastaj të ndërtuar në, 1057 01:03:57,210 --> 01:04:01,270 loja fund është në fund të fundit për të futur, për ironi jo, kjo gjuhë. 1058 01:04:01,270 --> 01:04:03,330 Ne do të shpenzojnë, si 10 minuta duke folur në lidhje me HTML. 1059 01:04:03,330 --> 01:04:05,950 All HTML është është një gjuhë markup, dhe atë që një gjuhë markup është 1060 01:04:05,950 --> 01:04:10,220 është këto seri kllapa hapura dhe të mbyllura kllapa që thonë se "e bëjnë këtë të guximshme ' 1061 01:04:10,220 --> 01:04:12,000 "Bëni këtë italik 'bërë këtë qendër." 1062 01:04:12,000 --> 01:04:14,250 Kjo nuk është e gjitha që intelektualisht interesante, por kjo është super e dobishme. 1063 01:04:14,250 --> 01:04:16,650 Dhe kjo është me siguri gjithëpranishëm këto ditë. 1064 01:04:16,650 --> 01:04:19,450 Por ajo që është e fuqishme në lidhje me botën e HTML, dhe web programim më në përgjithësi, 1065 01:04:19,450 --> 01:04:25,910 është duke ndërtuar gjëra dinamike, shkruar kodin në gjuhë si PHP ose Python Ruby ose ose Java ose C #. 1066 01:04:25,910 --> 01:04:30,360 Vërtet, çfarëdo gjuhën tuaj të zgjedhur është, dhe gjenerimin e HTML dinamike. 1067 01:04:30,360 --> 01:04:32,960 Gjenerimi diçka që quhet CSS dinamike. 1068 01:04:32,960 --> 01:04:35,810 Fletët Cascading stilin, e cila është edhe për estetikë. 1069 01:04:35,810 --> 01:04:41,360 Dhe kështu, edhe pse, sot, në qoftë se unë të shkoni në faqen e internetit si një farë e Google.com njohur, 1070 01:04:41,360 --> 01:04:46,100 dhe unë shkoj për të parë, zhvillues, View Source, e cila ndoshta ju keni bërë më parë, 1071 01:04:46,100 --> 01:04:49,800 por do të shikoni burimin, kjo stuff ndoshta duket goxha fshehtë. 1072 01:04:49,800 --> 01:04:55,320 Por kjo është kodi themelor që zbaton Google.com. 1073 01:04:55,320 --> 01:04:57,940 Në fund para. Dhe në fakt e gjithë kjo është me gëzof estetikë stuff. 1074 01:04:57,940 --> 01:05:01,740 Kjo është CSS deri këtu. Nëse unë mbaj Scroll poshtë ne do të merrni disa sende ngjyra-koduar. 1075 01:05:01,740 --> 01:05:06,890 Kjo është HTML. Kodi i Google-it duket si një rrëmujë, por në qoftë se unë në fakt të hapur një dritare tjetër, 1076 01:05:06,890 --> 01:05:09,380 ne mund të shohim disa strukturën për këtë. 1077 01:05:09,380 --> 01:05:12,640 Nëse unë të hapur këtë ide, vëreni këtu, kjo është pak më i lexueshëm. 1078 01:05:12,640 --> 01:05:16,850 Ne jemi duke shkuar për të parë para se të gjatë këtë tag, [fjala] është një tag, 1079 01:05:16,850 --> 01:05:23,520 HTML, kreu, trupit, div, script, zona teksti, span, në qendër, div. 1080 01:05:23,520 --> 01:05:26,770 Dhe kjo është edhe lloj i fshehtë i bukur në shikim të parë, 1081 01:05:26,770 --> 01:05:30,890 por të gjithë këtë rrëmujë ndjek modele të caktuara, dhe modelet repeatable, 1082 01:05:30,890 --> 01:05:33,850 kështu që sapo të marrë bazat poshtë, ju do të jetë në gjendje të shkruani kodin si kjo 1083 01:05:33,850 --> 01:05:37,550 dhe pastaj manipuluar kodin si kjo duke përdorur edhe një gjuhë tjetër, të quajtur JavaScript. 1084 01:05:37,550 --> 01:05:40,440 Dhe JavaScript është një gjuhë që shkon në brendësi të një shfletues 1085 01:05:40,440 --> 01:05:44,380 sot që kemi përdorur në kurset e Harvardit, për mjet pazar natyrisht që Google përdor harta 1086 01:05:44,380 --> 01:05:48,660 të ju jap një bandë e tërë e dinamizmit, Facebook ju jep për të treguar përditësime statusit çastit, 1087 01:05:48,660 --> 01:05:51,430 Twitter përdor atë për të treguar ju tweets në çast. 1088 01:05:51,430 --> 01:05:53,820 E gjithë kjo, ne do të fillojnë të zhyt veten in 1089 01:05:53,820 --> 01:05:57,190 Por për të arritur atje, ne duhet të kuptojmë një diçka të vogël në lidhje me internet. 1090 01:05:57,190 --> 01:06:01,130 Ky klip këtu është vetëm një minutë të gjatë, dhe le të supozojmë tani për tani kjo është, në fakt, 1091 01:06:01,130 --> 01:06:08,380 se si Interneti punon si një ngacmues për atë që është në lidhje që do të vijnë. Unë ju jap "Warriors e Net." 1092 01:06:08,380 --> 01:06:14,720 >> [♫ muzikë Slow kor ♫] 1093 01:06:14,720 --> 01:06:20,450 [Transmetuesi Mashkull] Ai erdhi me një mesazh. 1094 01:06:20,450 --> 01:06:23,770 Me një protokoll të gjitha të tij. 1095 01:06:23,770 --> 01:06:37,270 [♫ muzikë Faster elektronike ♫] 1096 01:06:37,270 --> 01:06:41,330 Ai erdhi në një botë të ftohtë firewalls, uncaring routers, 1097 01:06:41,330 --> 01:06:45,690 dhe rreziqe shumë më keq se vdekja. 1098 01:06:45,690 --> 01:06:55,400 Ai është i shpejtë. Ai është i fortë. Ai është TCP / IP, dhe ai e mori adresën tuaj. 1099 01:06:55,400 --> 01:06:59,250 Luftëtarët e Net. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Javën e ardhshme, atëherë. Internet. Programimit web. Kjo është CS50. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]