1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Aste 6, Continúa] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Harvardeko Unibertsitateko] 3 00:00:04,160 --> 00:00:08,720 [Hau da CS50.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Hau CS50 da eta 6 aste bukaera honetan. 5 00:00:12,970 --> 00:00:17,970 Beraz CS50x, Harvard lehen kurtsoak parte hartzen, edX ekimen bat 6 00:00:17,970 --> 00:00:20,590 hain zuzen ere, estreinatu iraganeko astelehenean. 7 00:00:20,590 --> 00:00:23,460 Besteek ohi bat lortzeko Interneten nahi baduzu 8 00:00:23,460 --> 00:00:27,180 batera jarraituz, x.cs50.net dezakezu buru. 9 00:00:27,180 --> 00:00:30,350 Leku egokia edx.org redirect egingo duzun, 10 00:00:30,350 --> 00:00:34,160 non MIT eta Berkeley beste ikastaro hau eta gaur egun bizi izan zen. 11 00:00:34,160 --> 00:00:38,140 Saioa hasi kontu bat duzu; materiala aurkitu da, neurri handi batean, bera duzu 12 00:00:38,140 --> 00:00:42,170 duzun izan seihileko honetan, aste batzuk atzeratu egin bada ere, lortuko dugu dena prest. 13 00:00:42,170 --> 00:00:46,930 Baina zer gertatzen da CS50x ikasle egingo da orain ikusi nahiko honetan bezala interfaze bat da. 14 00:00:46,930 --> 00:00:50,040 Honek, esate baterako, Zamyla arazo multzo 0 Bisita gidatua buru da. 15 00:00:50,040 --> 00:00:54,230 To edx.org saioa hasi ondoren, ikaslearen CS50x bat ikusten gauza mota 16 00:00:54,230 --> 00:00:57,170 espero ikastaro batean ikusten duzu: astelehenetik hitzaldia, 17 00:00:57,170 --> 00:01:01,650 Asteazkena, hainbat film laburrak, arazo multzo, walkthroughs, PDFak hitzaldia. 18 00:01:01,650 --> 00:01:04,459 Horrez gain, ikusten duzu hemen, makina itzulpenak 19 00:01:04,459 --> 00:01:08,390 Txinako, Japoniako, Espainiako, Italian sartu transkripzioak English, 20 00:01:08,390 --> 00:01:12,810 eta beste hizkuntza batzuetan sorta osoa zalantzarik izan Inperfektua 21 00:01:12,810 --> 00:01:15,840 roll diegu bezala programazioaren zerbait izeneko API bat erabiliz, 22 00:01:15,840 --> 00:01:18,360 edo aplikazio programazio interfazea da, Google 23 00:01:18,360 --> 00:01:21,360 aukera ematen duen beste hizkuntza horiek bihurtu English digu. 24 00:01:21,360 --> 00:01:24,100 Baina ehun-plus boluntario batzuk espiritua wonderful esker, 25 00:01:24,100 --> 00:01:26,940 ausazko Interneten atsegin handiz eskaintzen duten pertsonen parte hartzea 26 00:01:26,940 --> 00:01:30,180 Proiektu honetan, pixkanaka-pixkanaka dugu itzulpen horien kalitatea hobetzeko 27 00:01:30,180 --> 00:01:35,790 gizakiak gure ordenagailuak egin dituzten akatsak zuzendu beharrik. 28 00:01:35,790 --> 00:01:42,330 >> Beraz, ikasle gehiago batzuk out genuen erakusten sortu Astelehena, hasieran uste genuena baino espero bihurtzen da. 29 00:01:42,330 --> 00:01:48,980 Izan ere, gaur egun CS50x 100.000 pertsona batera etxean. 30 00:01:48,980 --> 00:01:54,430 Beraz, parte konturatzen dira Ikastaro hau egiteko informatika klase inaugurazio honetan 31 00:01:54,430 --> 00:01:57,370 hezkuntza gehiago, oro har, oro har, erabilgarri. 32 00:01:57,370 --> 00:02:00,130 Eta errealitatea da gaur egun, online ikastaroak masiboa horiek batzuk batera, 33 00:02:00,130 --> 00:02:04,070 zenbaki horiek oso altua dute hasteko, badirudi hemen egin dugun bezala. 34 00:02:04,070 --> 00:02:08,759 Baina helburua, azken finean, CS50x da benetan hainbat pertsona line akabera ahalik eta. 35 00:02:08,759 --> 00:02:12,000 Diseinua, CS50x da hau iragan astelehenean eskainiko 36 00:02:12,000 --> 00:02:17,430 April 15, 2013 bidez, beraz, eskola konpromisoak folks duten beste nonbait, 37 00:02:17,430 --> 00:02:20,990 lana, familia, beste gatazka eta bezala, pixka bat gehiago malgutasuna 38 00:02:20,990 --> 00:02:23,640 Ikastaro honetan murgiltzea duten, izan ere, nahikoa esan nahi du, 39 00:02:23,640 --> 00:02:30,540 nahiko ambitiously egin bada bakarrik seihilekoan zehar ohiko hiru hilabete osoan zehar. 40 00:02:30,540 --> 00:02:34,190 Hala ere, ikasle horiek aurre arazo multzo berean, eduki bera begiratzen, 41 00:02:34,190 --> 00:02:36,350 bera bezala, film labur eta sarbidea izatea. 42 00:02:36,350 --> 00:02:38,990 Beraz, konturatzen garela denak elkarrekin hau benetan. 43 00:02:38,990 --> 00:02:42,360 Eta CS50x azken helburu bat ez da bakarrik hainbat Folks 44 00:02:42,360 --> 00:02:45,720 helmugan eta emateko informatika ulertzeko newfound hau 45 00:02:45,720 --> 00:02:49,000 eta programazioa, baina baita esperientzia hori partekatua izatea. 46 00:02:49,000 --> 00:02:52,010 One campusean 50 ezaugarriak definitzeko, espero dugu, 47 00:02:52,010 --> 00:02:56,260 esperientzia komunetan sort hau da, batzuetan, onerako zein txarrerako, 48 00:02:56,260 --> 00:02:59,480 baina pertsona horiek ezkerrera eta eskuinera biratu beharrik, 49 00:02:59,480 --> 00:03:01,830 eta bulego ordu eta hackathon eta azoka. 50 00:03:01,830 --> 00:03:04,560 Pixka bat zailagoa da horretarako folks online pertsona, 51 00:03:04,560 --> 00:03:10,580 baina CS50x apirilean amaituko inoiz lehen CS50 Expo 52 00:03:10,580 --> 00:03:13,630 arrazoizko gure ideia egokitzapena online bat izango da 53 00:03:13,630 --> 00:03:18,250 non milaka ikasle horiek guztiak gonbidatu 1 aurkeztu - 2 minutuko bideoa, 54 00:03:18,250 --> 00:03:22,480 bai bere proiektua behin betiko edo bideo Screencast kaixo agurtzen 55 00:03:22,480 --> 00:03:24,490 eta bere proiektua buruz hitz egiten du eta demoing 56 00:03:24,490 --> 00:03:27,610 zure aurrekoek bezala askoz hemen egin campus arrazoizko 57 00:03:27,610 --> 00:03:31,400 beraz, seihilekoa amaitu, esperantza global erakusketa bat izan da 58 00:03:31,400 --> 00:03:37,080 ikasle CS50x 'azken proiektuak, askoz zure zain dago abenduaren Hemen campusean. 59 00:03:37,080 --> 00:03:39,680 Beraz, datozen hilabeteetan. 60 00:03:39,680 --> 00:03:43,640 >> Hala ere, 100.000 ikasle gehiago batzuk CAk beharra dator. 61 00:03:43,640 --> 00:03:47,590 Kontuan hartuta duzu guys pista ondo moldatuko hemen eta CS50 hartu 62 00:03:47,590 --> 00:03:51,630 Material hau edX on folks-oharra aldez aurretik hainbat aste, 63 00:03:51,630 --> 00:03:55,330 konturatzen love genuke gure ikasle propioa ahalik eta ekimen honetan parte hartzea, 64 00:03:55,330 --> 00:03:58,720 bai seihilekoan, baita neguan zehar eta udaberri honetan. 65 00:03:58,720 --> 00:04:01,620 Beraz, nahi CS50x parte hartzen duten nahi duzun, 66 00:04:01,620 --> 00:04:07,450 eztabaidatzeko CS50x, CS50 eztabaidatzeko bertsio edX bereziki parte hartu, 67 00:04:07,450 --> 00:04:10,140 asko dira campus erabiliz, online iragarki-oholean, 68 00:04:10,140 --> 00:04:13,040 mesedez egin URL burua, nor zaren ezagutzen laguntzen digu, 69 00:04:13,040 --> 00:04:16,450 ikasle eta langile talde bat sortu eta fakultateko alike love litzaidake delako 70 00:04:16,450 --> 00:04:19,630 campusean dira, besterik gabe, batera jolasten eta laguntzen. 71 00:04:19,630 --> 00:04:21,720 Die ezaguna da galdera bat ikusten dute, 72 00:04:21,720 --> 00:04:25,320 ikasle bat bug batzuk berri nonbait ez dago herrialde batzuetan Interneten entzuten baduzu, 73 00:04:25,320 --> 00:04:27,450 eta eraztunak hori kanpai baten ere gai hori bera izan delako 74 00:04:27,450 --> 00:04:32,620 d-aretoa aspaldi, zorionez gero chime dezakezu eta zure esperientzia. 75 00:04:32,620 --> 00:04:37,300 Beraz, mesedez ez nahi duzu partake. 76 00:04:37,300 --> 00:04:39,360 >> Harvard Informatika ikastaroak tradizio bat apur bat, 77 00:04:39,360 --> 00:04:44,730 Horien artean CS50, jantziak batzuk, arropa batzuk, higadura harro dezakezu 78 00:04:44,730 --> 00:04:49,090 seihilekoa amaitu aurretik, nahiko harro esaten amaitu duzula CS50 79 00:04:49,090 --> 00:04:51,830 eta hartu CS50 eta antzekoak, eta beti saiatu gara ikasle inplikatzeko 80 00:04:51,830 --> 00:04:54,540 prozesu hau ahalik eta gehien, beraz dugu gonbidatu, 81 00:04:54,540 --> 00:04:56,900 seihilekoan garai honen inguruan, ikasleek diseinuak aurkeztu 82 00:04:56,900 --> 00:04:59,330 Photoshop erabiliz, edo edozein tresna aukeratu erabili nahi duzun 83 00:04:59,330 --> 00:05:02,330 Oraindik diseinatzaile bat izanez gero, kamisetak eta izerditakoak diseinu aurkeztu 84 00:05:02,330 --> 00:05:06,100 eta aterkiak eta bandanas little txakurrak izan dugu eta. 85 00:05:06,100 --> 00:05:09,370 Eta dena, ondoren, irabazleak urte bakoitzeko ondoren ikusgai 86 00:05:09,370 --> 00:05:12,700 ikastaroa store.cs50.net web orrian. 87 00:05:12,700 --> 00:05:15,790 Dena kostua han saltzen, baina web bera exekutatzen 88 00:05:15,790 --> 00:05:18,330 eta pertsona nahi duten kolore eta diseinuak aukeratzeko aukera ematen du. 89 00:05:18,330 --> 00:05:20,420 Beraz, besterik ez genuke partekatzeko iaz diseinu batzuk pentsatu nuen 90 00:05:20,420 --> 00:05:25,130 web honetan hemen, gainera, horrek urteko tradizio bat da. 91 00:05:25,130 --> 00:05:29,410 "Every Day Faultn naiz seg" bidalketa bat izan zen iaz, 92 00:05:29,410 --> 00:05:32,290 hau da, oraindik ez dago erabilgarri ikasle ohientzat. 93 00:05:32,290 --> 00:05:35,820 Ko hau izan genuen, "CS50, sortu zen 1989." 94 00:05:35,820 --> 00:05:39,010 Gure Bowdens bat, Rob, oso ospetsua izan zen iaz. 95 00:05:39,010 --> 00:05:43,480 "Team Bowden" jaio zen, diseinu hau aurkeztu, top saltzaileen artean. 96 00:05:43,480 --> 00:05:49,040 As bat izan zen hau hemen. Jende askok izan "Bowden Fever" Salmenta egunkariak arabera. 97 00:05:49,040 --> 00:05:52,650 Konturatzen hori, eta ezin izango zure diseinua dago, Interneten. 98 00:05:52,650 --> 00:05:57,510 Honi buruzko xehetasun gehiago hurrengo arazoa etorri ezarri du. 99 00:05:57,510 --> 00:06:00,330 >> One tresna gehiago: esposizio batzuk izan duzun, eta, zorionez, gaur egun 100 00:06:00,330 --> 00:06:02,350 GDB esperientzia eskuak-on batzuk, 101 00:06:02,350 --> 00:06:04,570 hau da, jakina, araztailea eta, horri esker manipulatzeko duzu 102 00:06:04,570 --> 00:06:09,500 nahiko maila baxua programa, zer mota gauzak egiten? 103 00:06:09,500 --> 00:06:13,030 Zer esan nahi du GDB utzi egin nahi duzu? 104 00:06:13,030 --> 00:06:15,030 Bai? Give me zerbait. [Ikasleentzako erantzuna, ulertezina] 105 00:06:15,030 --> 00:06:18,120 Good. Funtzioa sartu urratsa, eta, beraz, ez duzu besterik ez exekutatu idatzi 106 00:06:18,120 --> 00:06:22,310 eta bere osotasunean programaren bidez kolpe, inprimatzeko gauzak irteera estandarrean. 107 00:06:22,310 --> 00:06:25,190 Honako beharrean, hari line bidez dezakezu urratsa line, bai hurrengo idazten 108 00:06:25,190 --> 00:06:30,300 urratsa funtzio bat murgiltzea, normalean bat idatzi lerro bat edo lerro lerro joan. 109 00:06:30,300 --> 00:06:35,240 Zer gehiago ez GDB utzi egin nahi duzu? Bai? [Ikasleentzako erantzuna, ulertezina] 110 00:06:35,240 --> 00:06:38,100 Inprimatu variables. Beraz, bada Historia II txiki bat egin nahi duzun zure programaren barruan 111 00:06:38,100 --> 00:06:41,500 printf adierazpenak leku osoko idatziz jo beharrik gabe, 112 00:06:41,500 --> 00:06:44,600 bakarrik inprima dezakezu aldagai edo aldagai bat erakutsi. 113 00:06:44,600 --> 00:06:46,710 Zer gehiago egin dezaket GDB bezala araztaileak duzu? 114 00:06:46,710 --> 00:06:49,170 [Ikasleentzako erantzuna, ulertezina] 115 00:06:49,170 --> 00:06:52,080 Hain zuzen ere. Eten - puntu ezar dezakezu; break exekuzioa esan daiteke 116 00:06:52,080 --> 00:06:54,020 nagusia funtzioa edo foo funtzioa. 117 00:06:54,020 --> 00:06:56,800 Break line 123 exekuzioa esan daiteke. 118 00:06:56,800 --> 00:06:58,950 Eta teknika oso indartsu bat eten - puntu 119 00:06:58,950 --> 00:07:01,110 zentzu orokor bat behar duzu, non zure arazoa delako 120 00:07:01,110 --> 00:07:05,360 ziurrenik da, ez duzu denbora alferrik programa osotasunean bidez hurrats. 121 00:07:05,360 --> 00:07:08,250 Funtsean jauzi egin ahal izango duzu bertan, eta gero hasi idazten 122 00:07:08,250 --> 00:07:10,970 bidez, hurrengo urratsa edo edo antzeko hurrats. 123 00:07:10,970 --> 00:07:14,340 Baina GDB antzeko zerbait harrapatzen da laguntzen dela, giza 124 00:07:14,340 --> 00:07:16,940 zure arazoak aurkitu eta zure bugs aurkitu. 125 00:07:16,940 --> 00:07:19,470 Ez du zertan bilatu hainbeste. 126 00:07:19,470 --> 00:07:23,070 >> Beraz, beste egun style50 sartu dugu, komando-lerroko tresna labur bat da 127 00:07:23,070 --> 00:07:27,500 saiatuko da zure kodea estilizatzeko apur bat gehiago garbian zu baino, giza, egin izan dezake. 128 00:07:27,500 --> 00:07:29,530 Baina hori ere, benetan, gauza bat besterik ez estetikoa. 129 00:07:29,530 --> 00:07:34,110 Baina deitzen Valgrind beste tresna hori da apur bat gehiago arcane erabili out bihurtzen da. 130 00:07:34,110 --> 00:07:36,860 Lehen begiratuan atrociously críptica Bere irteera da. 131 00:07:36,860 --> 00:07:39,420 Baina wonderfully erabilgarria da, batez ere, gaur egun, epe parte garela Oraindik 132 00:07:39,420 --> 00:07:43,080 non malloc eta dinamikoa memoria esleitzeko erabiltzen ari zaren hasita. 133 00:07:43,080 --> 00:07:45,420 Gauzak benetan, benetan gaizki joan daiteke azkar. 134 00:07:45,420 --> 00:07:49,320 Ahaztu duzu zure memoria libratzeko nahi izanez gero, edo NULL erakuslea batzuk dereference delako, 135 00:07:49,320 --> 00:07:55,770 edo zabor erakuslea batzuk dereference duzu, zer da normalean sintoma emaitzarik? 136 00:07:55,770 --> 00:07:59,470 Errua seg. Eta kilobyteko edo megabyte kopuru batzuk fitxategia-core hau lortuko duzu 137 00:07:59,470 --> 00:08:02,990 zure programa memorian egoera adierazten denean huts egin du, 138 00:08:02,990 --> 00:08:05,730 baina, azken finean, zure programa matxurak seg, segmentaziuo hutsegitea 139 00:08:05,730 --> 00:08:08,450 horrek esan nahi du zerbait txarra gertatu zen ia beti lotutako 140 00:08:08,450 --> 00:08:11,750 memoria-akatsa egin duzula nonbait. 141 00:08:11,750 --> 00:08:14,100 Beraz Valgrind laguntzen hau bezalako gauzak aurkituko dituzu. 142 00:08:14,100 --> 00:08:17,720 Exekutatzen duzun tresna bat da, GDB duzun bezala, zure programa konpilatu ondoren, 143 00:08:17,720 --> 00:08:20,330 baina baino gehiago exekutatu programa zuzenean, Valgrind exekutatzen duzun 144 00:08:20,330 --> 00:08:23,960 eta gainditu behar duzu zure programa, bezala egin GDB duzu. 145 00:08:23,960 --> 00:08:26,220 Orain, erabilera, irteera mota onena lortzeko, 146 00:08:26,220 --> 00:08:30,410 apur bat luzea da, eta, beraz, bertan pantailaren gainean Valgrind-v ikusiko duzu. 147 00:08:30,410 --> 00:08:35,350 "-V" ia unibertsalena esan nahi du verbose programak erabiltzen ari zaren ordenagailuan Linux. 148 00:08:35,350 --> 00:08:38,770 Beraz, txu default dezakezu datuen baino gehiago esan nahi du. 149 00:08:38,770 --> 00:08:45,510 "- Leak-check = full." Hau besterik ez da memoria ahalik eta filtrazioen check esaten, 150 00:08:45,510 --> 00:08:49,430 akatsak egiten dut dezake. Hau ere, programak Linux paradigma komun bat da. 151 00:08:49,430 --> 00:08:52,710 Oro har, komando-lerroko argumentu "" aldatu da, 152 00:08:52,710 --> 00:08:55,830 ustezko programaren portaera aldatzeko, eta letra bakar bat da, 153 00:08:55,830 --> 00:09:00,310 da-v, baina hori aldatu egin da, besterik ez programatzailea diseinua, 154 00:09:00,310 --> 00:09:05,150 hitza edo hitz zenbait osoa da, komando-lerroko argumentu bat hasten da. 155 00:09:05,150 --> 00:09:08,190 Hauek besterik ez dira giza konbentzioak, baina gero eta gehiago ikusiko duzu. 156 00:09:08,190 --> 00:09:12,410 Eta gero, azkenik, "a.out" hau adibide jakin programaren izena arbitrarioa da. 157 00:09:12,410 --> 00:09:14,640 Eta hemen zenbait ordezkari irteera. 158 00:09:14,640 --> 00:09:22,890 >> Zer esan liteke esan nahi dugu aurretik, utzi baino gehiago joan me kodea snippet hemen. 159 00:09:22,890 --> 00:09:26,390 Eta hau mugitu me bidea utzi, coming soon, 160 00:09:26,390 --> 00:09:32,120 eta dezagun memory.c, adibide labur hau hemen begirada bat. 161 00:09:32,120 --> 00:09:36,290 Beraz, programa honetan, utzi gerturatzeko me funtzioak eta galderak. 162 00:09:36,290 --> 00:09:39,430 Funtzio nagusia funtzio bat deitzen ditugu, f, 163 00:09:39,430 --> 00:09:45,590 eta, ondoren, zer f aurrera jarraitzeko, ingelesa pixka bat teknikoa? 164 00:09:45,590 --> 00:09:49,760 Zer esan nahi du f jarraitu egin? 165 00:09:49,760 --> 00:09:53,680 How about line 20 dut hasteko, eta izarraren kokapena ez du axola, 166 00:09:53,680 --> 00:09:56,720 baina besterik ez dut koherentea hemen azken hitzaldia. 167 00:09:56,720 --> 00:09:59,910 Zer da line 20 ez Gurekin? Ezkerraldeko On. Apurtu dugu behera gehiago. 168 00:09:59,910 --> 00:10:02,410 Int * x: zer ari da hori egiten? 169 00:10:02,410 --> 00:10:04,940 Ongi da. Erakuslea geratuko da, eta, gaur egun, dezagun are gehiago teknikoak. 170 00:10:04,940 --> 00:10:10,230 Zer esan nahi du, batez bestekoa oso zehazki, erakuslea deklaratzeko? Beste norbaitek? 171 00:10:10,230 --> 00:10:15,050 Bai? [Ikasleentzako erantzuna, ulertezina] urrunegi. 172 00:10:15,050 --> 00:10:17,060 Beraz, berdin ikurra eskuinaldean irakurtzen ari zaren. 173 00:10:17,060 --> 00:10:20,290 Dezagun fokua ezkerretara, int * x. 174 00:10:20,290 --> 00:10:24,700 Honek ez du "aldarrikatu" erakuslea bat, baina orain dezagun definizio hori sakonago artelan. 175 00:10:24,700 --> 00:10:28,330 Zer esan nahi du zehazki, teknikoki esan nahi du? Bai? 176 00:10:28,330 --> 00:10:31,940 [Ikasleentzako erantzuna, ulertezina] 177 00:10:31,940 --> 00:10:35,090 Ongi da. Helbide bat gordetzeko memoria prestatzen ari da. 178 00:10:35,090 --> 00:10:40,680 Good. Eta dezagun urrats bat gehiago nahi izanez gero, aldagai bat, x, 32 bits da deklaratzen. 179 00:10:40,680 --> 00:10:44,440 Eta 32 bits delako ezagutzen dut? 180 00:10:44,440 --> 00:10:47,390 Ez da int bat delako, baina kasu honetan erakuslea delako. 181 00:10:47,390 --> 00:10:49,650 Kasualitatea dela bat eta bera int batekin, 182 00:10:49,650 --> 00:10:51,970 baina ez dagoela izarra esan nahi du, hau da erakuslea da 183 00:10:51,970 --> 00:10:57,300 eta aparatuaren, ordenagailu askotan gertatzen den bezala, baina ez guztiak, erakusleak 32 bit dira. 184 00:10:57,300 --> 00:11:01,850 MACS azken, azken ordenagailu bezala moderno hardware On gehiago, 64-bit erakusle izan dezakezu, 185 00:11:01,850 --> 00:11:04,160 baina aparatuaren, gauza horiek 32 bit dira. 186 00:11:04,160 --> 00:11:08,380 Beraz, normalizatzeko dugu. Zehazki, ipuin honela doa: 187 00:11:08,380 --> 00:11:10,820 "Aldarrikatu" erakuslea; zer esan nahi du horrek? 188 00:11:10,820 --> 00:11:12,810 Memoria-helbide bat gorde prestatzen ditugu. 189 00:11:12,810 --> 00:11:15,530 Zer esan nahi du horrek? 190 00:11:15,530 --> 00:11:19,810 X aldagaia deitzen hartzen duen 32 bits sortu dugu 191 00:11:19,810 --> 00:11:23,810 laster izango da zenbaki oso bat gorde helbidea. 192 00:11:23,810 --> 00:11:26,470 Eta hori da ziurrenik bezala zehatzak gara. 193 00:11:26,470 --> 00:11:31,810 Fina da mundua sinplifikatzeko aurrera, eta bakarrik esan deklaratzeko x izeneko erakuslea. 194 00:11:31,810 --> 00:11:35,380 Deklaratu erakuslea, baina konturatzen eta ulertzen zer benetan gertatzen ari 195 00:11:35,380 --> 00:11:38,490 nahiz eta batzuk besterik ez duten pertsonaiak. 196 00:11:38,490 --> 00:11:42,040 >> Orain, hau da, ia pixka bat errazagoa da, nahiz eta adierazpen bat luzeagoa da. 197 00:11:42,040 --> 00:11:48,160 Beraz, zer da hau, egiten ari den nabarmenduta, gaur egun: "malloc (10 * sizeof (int));" Bai? 198 00:11:48,160 --> 00:11:52,350 [Ikasleentzako erantzuna, ulertezina] 199 00:11:52,350 --> 00:11:58,250 Good. Eta han hartuko dut. Zatia memoria esleitzean hamar zenbaki osoen da. 200 00:11:58,250 --> 00:12:02,190 Eta orain apur bat sakonago murgiltze; zatia hamar zenbaki osoen memoria esleitzean da. 201 00:12:02,190 --> 00:12:05,390 Zer da malloc gero itzuli? 202 00:12:05,390 --> 00:12:10,390 Zatia horren helbidea, edo, zehazkiago, zatia horren lehenengo byte helbidea. 203 00:12:10,390 --> 00:12:14,080 Nola ondoren am I, programatzailea, jakin non zatia memoria amaitzen da hori? 204 00:12:14,080 --> 00:12:18,340 Dela Alboko ezagutzen dut. Malloc, definizioz, duzu emango zatia memoria alboko bat. 205 00:12:18,340 --> 00:12:21,240 Hutsuneak No. Zatia horretan byte guztietan sarbidea behar duzu, 206 00:12:21,240 --> 00:12:26,760 itzuli Itzuli, baina nola ez non zatia memoria honen amaiera izango da ezagutzen dut? 207 00:12:26,760 --> 00:12:28,850 Malloc erabili nahi duzun? [Ikasleentzako erantzuna, ulertezina] Good. 208 00:12:28,850 --> 00:12:30,670 Ez duzu. Gogoratu behar duzu. 209 00:12:30,670 --> 00:12:35,960 Nituen 10 balioa gogoratu behar dut, eta ez dut, nahiz eta badirudi egin hemen. 210 00:12:35,960 --> 00:12:41,000 Baina onus me on da oso-osorik. Strlen, bihurtu dugu apur bat mende on kateak, 211 00:12:41,000 --> 00:12:45,860 hitzarmen hau \ 0 izatea delako soilik funtzionatzen 212 00:12:45,860 --> 00:12:48,840 edo NULUAK pertsonaia berezi hau, NULUAK, kate baten amaieran. 213 00:12:48,840 --> 00:12:51,740 Horrek ez du memoria zatiak arbitrarioak mantendu. 214 00:12:51,740 --> 00:12:58,590 Sortu da. Line 20 Beraz, ondoren, memoria zatia esleitzen 215 00:12:58,590 --> 00:13:02,590 hamar zenbaki osoak gordetzeko, eta lehen bytea helbidea gordetzen da 216 00:13:02,590 --> 00:13:05,610 zatia izeneko aldagaia x memoria hori. 217 00:13:05,610 --> 00:13:11,140 Ergo, erakuslea da. Linea 21 Beraz, zoritxarrez, akats bat izan zen. 218 00:13:11,140 --> 00:13:16,110 Baina, lehenik eta behin, zer egiten da? Denda da esaten kokapena 10, 0 indexed 219 00:13:16,110 --> 00:13:19,480 x balioa 0 izeneko memoria zatia. 220 00:13:19,480 --> 00:13:21,510 >> Beraz, gauza pare bat ari da nabarituko. 221 00:13:21,510 --> 00:13:25,420 Nahiz eta x erakuslea da, duela pare aste gogoratzen 222 00:13:25,420 --> 00:13:29,440 array-style kortxetea notazioa oraindik ere erabili ahal izango dituzu. 223 00:13:29,440 --> 00:13:36,180 Hori benetan labur-eskuko erakuslea críptica begira aritmetika idazkera. 224 00:13:36,180 --> 00:13:40,320 non honen antzeko zerbait egin genuke: Hartu helbidea x, mugitu 10 lekuak baino gehiago, 225 00:13:40,320 --> 00:13:44,550 ondoren, bertan agertutako edozein izanda ere helbidea da kokaleku horretan gordetzen da. 226 00:13:44,550 --> 00:13:48,090 Baina, Egia, hau besterik ez da atrocious irakurri eta eroso. 227 00:13:48,090 --> 00:13:52,900 Beraz, mundu karratu normalean erabiltzen baizik askoz gehiago giza-friendly irakurri da parentesi artean. 228 00:13:52,900 --> 00:13:55,140 Baina zer benetan kanpaia azpian; 229 00:13:55,140 --> 00:13:58,190 x helbide bat, ez da array bat, per se. 230 00:13:58,190 --> 00:14:02,410 Beraz, hau da, 0 gordetzeko kokapena 10 x. 231 00:14:02,410 --> 00:14:06,120 Zergatik da txarra? Bai? 232 00:14:06,120 --> 00:14:17,370 [Ikasleentzako erantzuna, ulertezina] Zehazki. 233 00:14:17,370 --> 00:14:21,100 Esleitu hamar ints bakarrik, baina 0-tik C programazioa, 234 00:14:21,100 --> 00:14:25,690 0 1 2 3 4 5 6 7 8 9, baina ez 10 sartzeko aukera izango duzu. 235 00:14:25,690 --> 00:14:30,270 Beraz, bai programa seg errua joan edo ez da. 236 00:14:30,270 --> 00:14:32,900 Hala ere, ez dugu benetan ezagutzeko; portaera nondeterministic sort da. 237 00:14:32,900 --> 00:14:35,600 Lortuko dugu zortea ala ez benetan araberakoa da. 238 00:14:35,600 --> 00:14:40,650 Bihurtzen da sistema eragilearen ez dela axola erabiltzen dut extra byte hori bada, 239 00:14:40,650 --> 00:14:43,360 nahiz eta ez du ematen dit, nire programa agian ez du huts egin. 240 00:14:43,360 --> 00:14:46,780 Gordinak da, buggy da, baina agian ez duzu sintoma hori ikus 241 00:14:46,780 --> 00:14:48,960 edo pixka bat behin bakarrik ikusi ahal izango duzu. 242 00:14:48,960 --> 00:14:51,230 Baina errealitatea da bug hau da, hain zuzen ere, ez dago. 243 00:14:51,230 --> 00:14:54,320 Eta benetan problematikoa da zuzena izan nahi duzun programa bat idatzi duzun, 244 00:14:54,320 --> 00:14:58,840 programa saltzen duzula pertsona bakoitzak behin pixka bat kraskatzen erabiliz 245 00:14:58,840 --> 00:15:02,450 zeren, noski, hori ez da ona. Izan ere, Android telefono bat edo iPhone bat behar duzu bada 246 00:15:02,450 --> 00:15:05,550 eta apps download duzu egun hauetan, duzun, inoiz izan bada, aplikazio bat besterik ez irten, 247 00:15:05,550 --> 00:15:10,040 Bat-batean desagertzen da, ia beti memoria-lotutako arazo batzuen ondorioz, 248 00:15:10,040 --> 00:15:12,830 Horren bidez, programatzailea izorratu sortu eta dereferenced erakuslea 249 00:15:12,830 --> 00:15:18,670 zuen edo ez izan behar zuen, eta iOS edo Android ondorioz hil programa guztiz 250 00:15:18,670 --> 00:15:23,080 baizik eta undefined arrisku portaera edo segurtasun konpromiso mota batzuk baino. 251 00:15:23,080 --> 00:15:25,950 >> Programa honetan beste bug hau gain. 252 00:15:25,950 --> 00:15:30,180 Zer gehiago izorratu nuen programa hau? 253 00:15:30,180 --> 00:15:32,740 Ez dut praktikatzen zer Predicada dut. Bai? 254 00:15:32,740 --> 00:15:34,760 [Ikasleentzako erantzuna, ulertezina] Good. 255 00:15:34,760 --> 00:15:36,880 Ez dut askatuko memoria. Thumb araua Beraz, 256 00:15:36,880 --> 00:15:43,150 malloc anytime deitu, deitu free behar duzu zaudenean egin memoria hori erabiliz. 257 00:15:43,150 --> 00:15:45,610 Orain, memoria hau libre nahi dut? 258 00:15:45,610 --> 00:15:49,780 Beharbada, lehen lerro hau zuzena zen suposatuz, hemen egin nahi nuke. 259 00:15:49,780 --> 00:15:55,710 Izan dut ez duelako, esate baterako, egin du behera hemen. Zergatik? 260 00:15:55,710 --> 00:15:57,860 Just out esparrua. Beraz, nahiz eta erakusleak buruz ari gara hitz egiten, 261 00:15:57,860 --> 00:16:04,830 aste honetan 2 edo 3 gai, non x giltza kizkur izendatu zuten barruan esparrua da bakarrik. 262 00:16:04,830 --> 00:16:11,000 Ahal izateko behin betiko duzu ez askatzea han. Nire aukera bakarra libre gutxi gorabehera line 21 ondoren. 263 00:16:11,000 --> 00:16:15,170 Hau nahiko simple programa bat da, nahiko erraza izan da mota bilduta behin your mind 264 00:16:15,170 --> 00:16:17,870 zer inguruko programa egiten da, non akatsak izan ziren. 265 00:16:17,870 --> 00:16:20,500 Eta nahiz eta ez ikusiko duzu lehen, zorionez, apur bat begi-bistakoa da gaur egun 266 00:16:20,500 --> 00:16:23,870 akats horiek nahiko erraz konpondu eta erraz egin. 267 00:16:23,870 --> 00:16:28,720 Baina programa bat da, 12 lerro baino gehiago, 50 lerro 100 lerro, 268 00:16:28,720 --> 00:16:31,150 Zure kodea line bidez lerro oinez, pentsatzen bidez logikoki, 269 00:16:31,150 --> 00:16:35,110 posible da, baina ez bereziki dibertigarria da, etengabe bugs bila, 270 00:16:35,110 --> 00:16:38,340 eta, gainera, oso zaila egin, eta horregatik Valgrind bezalako tresna bat badago. 271 00:16:38,340 --> 00:16:40,900 Dezagun aurrera eta hau egin: nire terminal-leihoa ireki me utzi, 272 00:16:40,900 --> 00:16:45,400 eta ez me exekutatu memoria, memoria dirudi fina izan delako. 273 00:16:45,400 --> 00:16:49,180 Zortea dut. Array amaieran osagarriak byte hori Going 274 00:16:49,180 --> 00:16:51,060 ez dirudi ere arazoak izan. 275 00:16:51,060 --> 00:16:56,370 Baina me, hala ere, ez behatu check, besterik gabe esan nahi du egiaztatu 276 00:16:56,370 --> 00:16:58,320 ala ez, hau da, benetan zuzena. 277 00:16:58,320 --> 00:17:04,690 >> Beraz, egin dezagun valgrind-v - leak-check = full, 278 00:17:04,690 --> 00:17:07,520 eta, ondoren, kasu honetan programaren memoria, ez a.out da. 279 00:17:07,520 --> 00:17:10,760 Beraz, aurrera eta hau egin. Sakatu Sartu. 280 00:17:10,760 --> 00:17:14,109 Dear God. Honek bere irteera da, hau da, zer aipatu lehenago dut. 281 00:17:14,109 --> 00:17:17,550 Baina, ikasten zentzugabekeria guztiak, irakurri hemen, 282 00:17:17,550 --> 00:17:20,760 honen diagnostiko-irteera ez da interesgarria da. 283 00:17:20,760 --> 00:17:24,829 Zein da zure begiak benetan nahi dira bilatzen, edozein akats edo baliogabea aipamen da. 284 00:17:24,829 --> 00:17:26,800 Hitz dituzten arazoak. 285 00:17:26,800 --> 00:17:29,340 Eta, hain zuzen ere, zer oker joan behera hemen-en. 286 00:17:29,340 --> 00:17:35,230 Nolabaiteko laburpena, behar dut "erabiltzen irtetean: 40 byte 1 blokeak" 287 00:17:35,230 --> 00:17:38,750 Egia esan, ez nago ziur zer bloke bat da oraindik, baina 40 byte 288 00:17:38,750 --> 00:17:41,260 benetan sentitzen dut irudikatu bezala, non den datozen. 289 00:17:41,260 --> 00:17:45,030 40 byte. Zergatik dira 40 byte irtetean erabiltzen? 290 00:17:45,030 --> 00:17:48,780 Eta, zehazki, joan gara behera hemen, 291 00:17:48,780 --> 00:17:54,520 zergatik 40 byte behin betiko galdu dut? Bai? 292 00:17:54,520 --> 00:17:59,520 [Ikasleentzako erantzuna, ulertezina] Perfect. Bai, hain zuzen. 293 00:17:59,520 --> 00:18:03,540 Baziren hamar zenbaki osoen, eta horietako bakoitzean 4 edo 32 bit tamaina da, 294 00:18:03,540 --> 00:18:08,300 beraz, galdu dut hain zuzen ere, 40 byte izan ere, zuk proposatu bezala, ez dut deitu free. 295 00:18:08,300 --> 00:18:13,460 Hau bug bat da, eta, gaur egun, utzi behera begiratu apur bat gehiago nahi izanez gero, ikusi eta ondoan, 296 00:18:13,460 --> 00:18:16,900 "Baliogabea tamaina 4 idazteko." Zer da hau? 297 00:18:16,900 --> 00:18:21,150 Helbide hau adierazten zer oinarri notazioa, itxuraz? 298 00:18:21,150 --> 00:18:23,640 Hau hamaseitarra da, eta edozein momentutan zenbaki bat 0x ekin hasten diren ikusiko duzu, 299 00:18:23,640 --> 00:18:29,410 hamaseitarra esan nahi du, eta horrek, nire ustez, pset 0 galderak atalean egin dugu, 300 00:18:29,410 --> 00:18:34,090 besterik ez zen warmup ariketa bat egin ahal izateko, hex hamartar bihurtzeko bitar eta abar. 301 00:18:34,090 --> 00:18:39,220 Hamaseitar, konbentzio giza, ohi da erakusleak irudikatzeko erabiltzen 302 00:18:39,220 --> 00:18:41,570 edo, oro har, helbideak. Konbentzio bat besterik ez da, 303 00:18:41,570 --> 00:18:45,340 da apur bat errazagoa delako irakurri, pixka bat hamartar antzeko zerbait baino gehiago trinkoa da, 304 00:18:45,340 --> 00:18:47,720 eta bitarra Ezertarako da, izan ere, gehienak gizakiak erabili. 305 00:18:47,720 --> 00:18:50,840 Beraz, gaur egun, zer esan nahi du horrek? Beno, ez dago baliogabea idazteko itxura 306 00:18:50,840 --> 00:18:54,480 on line 21 memory.c tamaina 4. 307 00:18:54,480 --> 00:18:59,180 Hargatik itzuli linea 21, eta hain zuzen ere, hemen idazteko baliogabea dela. 308 00:18:59,180 --> 00:19:02,640 Beraz Valgrind ez dago guztiz ezazu nire eskua eta esango fix zer da, 309 00:19:02,640 --> 00:19:05,520 baina naiz idazteko I baliogabe bat egiten ari den detektatzeko. 310 00:19:05,520 --> 00:19:08,800 4 bytes dut ukitu behar ez izatea, eta, itxuraz, hori delako, 311 00:19:08,800 --> 00:19:13,960 adierazi du, eta horren ordez [9] [10] Gehienez egiten ari naiz 312 00:19:13,960 --> 00:19:16,660 edo [0] edo arteko zerbait. 313 00:19:16,660 --> 00:19:19,690 Valgrind, konturatzen programa bat idazten ari zaren edozein unetan 314 00:19:19,690 --> 00:19:24,190 erabiltzen dituen erakusleak eta memoria erabiltzen ditu, eta malloc zehatzago esanda, 315 00:19:24,190 --> 00:19:27,080 behin betiko luze hau abiarazi ohitura sartu 316 00:19:27,080 --> 00:19:30,890 baina oso erraz kopiatu eta itsatsi Valgrind komandoa 317 00:19:30,890 --> 00:19:32,650 ez da hor akatsak batzuk ikusteko. 318 00:19:32,650 --> 00:19:34,820 Eta erabatekoa izan da, eta aldi bakoitzean jarriko irteera ikusten duzu, 319 00:19:34,820 --> 00:19:39,430 baina ikusmen irteeraren bidez analizatu eta ikusten baduzu akatsak aipatzen 320 00:19:39,430 --> 00:19:43,190 edo abisu edo baliogabea edo galdu. 321 00:19:43,190 --> 00:19:46,200 Edozein hitz izorratu sortu soinua duzun bezala nonbait. 322 00:19:46,200 --> 00:19:48,580 Beraz, konturatzen zure toolkit tresna berri bat da. 323 00:19:48,580 --> 00:19:51,270 >> Orain Astelehena, folks sorta osoa izan genuen etorri hemen 324 00:19:51,270 --> 00:19:53,150 eta lotuta zerrenda nozioa. 325 00:19:53,150 --> 00:20:00,970 Eta zer arazo irtenbide bat bezala zerrenda lotuta sartu dugu? 326 00:20:00,970 --> 00:20:04,590 Bai? [Ikasleentzako erantzuna, ulertezina] Good. 327 00:20:04,590 --> 00:20:06,530 Arrayak ezin izan memoria gehitu. 328 00:20:06,530 --> 00:20:09,440 Esleitu tamaina 10 array, hori da duzun guztia lortu bada. 329 00:20:09,440 --> 00:20:13,690 Idazketa bezalako funtzio bat dei dezakezu hasieran bada malloc izeneko 330 00:20:13,690 --> 00:20:17,580 eta hori array hazten saiatu Lekurik bada amaiera aldera 331 00:20:17,580 --> 00:20:21,610 inork ez bestela hori erabiliz, eta dago ez bada, aski izango da aurkituko dituzu handiagoa zatia beste nonbait. 332 00:20:21,610 --> 00:20:25,040 Baina orduan byte horiek guztiak kopiatu berria array. 333 00:20:25,040 --> 00:20:28,310 Oso zuzena irtenbide bat bezala soinuak. 334 00:20:28,310 --> 00:20:34,790 Zergatik da hau unattractive? 335 00:20:34,790 --> 00:20:36,940 Esan nahi dut, funtzionatzen duen, gizakiak arazo hau konpondu. 336 00:20:36,940 --> 00:20:40,710 Zergatik Astelehena zerrendak lotuta ebatzi behar dugu? Bai? 337 00:20:40,710 --> 00:20:44,060 [Ikasleentzako erantzuna, ulertezina] denbora luzea har lezake. 338 00:20:44,060 --> 00:20:49,260 Izan ere, edozein unetan malloc edo idazketa edo calloc, hau da, oraindik beste bat deitzen ari zaren 339 00:20:49,260 --> 00:20:52,470 edozein unetan, programa, sistema eragilearen hitz egiten ari, 340 00:20:52,470 --> 00:20:54,310 programa motela behera joera duzu. 341 00:20:54,310 --> 00:20:57,470 Eta zaren loops gauza mota horiek egiten bada, benetan ari zaren gauza geldotzen behera. 342 00:20:57,470 --> 00:21:00,740 Ez duzu nabarituko "kaixo mundua" motako programak errazena, 343 00:21:00,740 --> 00:21:04,300 baina programa askoz handiagoa, sistema eragilearen eskatuz behin eta berriro memoria 344 00:21:04,300 --> 00:21:07,520 edo emanez behin eta berriro ez da gauza ona izan ohi da. 345 00:21:07,520 --> 00:21:11,210 Plus, besterik ez da intelektualki moduko denbora galtzea oso bat da. 346 00:21:11,210 --> 00:21:16,490 Zergatik esleitu gero eta memoria gehiago, arrisku dena kopiatzea berria array, 347 00:21:16,490 --> 00:21:21,980 ematen alternatiba askoz memoria esleitu benetan behar baduzu? 348 00:21:21,980 --> 00:21:24,130 Beraz, ez da hemen pluses eta minuses. 349 00:21:24,130 --> 00:21:26,730 Pluses, gaur egun dugun dinamismoa. 350 00:21:26,730 --> 00:21:29,100 Ez du axola non memoria zatiak dira, doakoak dira, 351 00:21:29,100 --> 00:21:32,070 Bakarrik ezin dut sortu ordenatzeko ogi apurrak horiek erakusleak bidez 352 00:21:32,070 --> 00:21:34,470 nire lotuta zerrenda osoa elkarrekin katea. 353 00:21:34,470 --> 00:21:36,470 Baina, gutxienez, prezioa ordaindu dut. 354 00:21:36,470 --> 00:21:40,060 >> Zer lotuta zerrendak lortzeko eman behar dut? 355 00:21:40,060 --> 00:21:42,470 Bai? [Ikasleentzako erantzuna, ulertezina] Good. 356 00:21:42,470 --> 00:21:45,650 Memoria gehiago behar duzu. Erakusleak horiek espazio behar dut orain, 357 00:21:45,650 --> 00:21:47,900 eta erraz hau super lotuta zerrenda kasuan 358 00:21:47,900 --> 00:21:51,410 hori bakarrik zenbaki osoko, 4 byte gordetzeko saiatzen, esaten mantendu dugu 359 00:21:51,410 --> 00:21:54,240 ondo, erakusle 4 byte da, beraz, gaur egun, literalki Nik bikoiztu 360 00:21:54,240 --> 00:21:57,290 memoria zerrenda honetan gorde behar dut. 361 00:21:57,290 --> 00:21:59,680 Baina, berriro ere, konstante bat da hau informatikako denerako 362 00:21:59,680 --> 00:22:03,440 denboran eta espazioan eta garapena, ahalegina eta beste baliabide batzuen artean. 363 00:22:03,440 --> 00:22:06,630 Zer da lotuta zerrenda bat erabiliz beste arazotxo bat? Bai? 364 00:22:06,630 --> 00:22:10,150 [Ikasleentzako erantzuna, ulertezina] 365 00:22:10,150 --> 00:22:12,600 Good. Ez baita erraza sartzeko. No longer ahal izango dugu leverage 366 00:22:12,600 --> 00:22:15,530 astea: 0 printzipio bezala zatitzeko eta konkistatzeko. 367 00:22:15,530 --> 00:22:18,220 Eta, zehazki, bilaketa bitarra. Dugulako, nahiz eta gizakiak 368 00:22:18,220 --> 00:22:20,400 gutxi gorabehera ikus daitezke, non zerrenda honen erdian da, 369 00:22:20,400 --> 00:22:25,840 ordenagailua bakarrik daki lotuta zerrenda hori helbidea izeneko lehen hasten da. 370 00:22:25,840 --> 00:22:28,250 Eta hori 0x123 edo horrelako zerbait. 371 00:22:28,250 --> 00:22:30,990 Eta modu bakarra programa erdiko elementu aurki daitezke 372 00:22:30,990 --> 00:22:33,350 zerrenda osoa da benetan bilatzeko. 373 00:22:33,350 --> 00:22:35,500 Eta orduan ere, literalki du zerrenda osoa bilatu 374 00:22:35,500 --> 00:22:38,950 behin ere erdiko elementu iristeko erakusleak jarraituz, 375 00:22:38,950 --> 00:22:42,380 , programa, ez daki zenbat denbora Zerrenda hau da, potentzialki, 376 00:22:42,380 --> 00:22:45,250 hit duzu amaiera arte, eta nola programazioaren badakizu 377 00:22:45,250 --> 00:22:48,600 lotuta zerrenda baten amaieran zaudela? 378 00:22:48,600 --> 00:22:51,120 NULL erakuslea berezi bat dago, eta, beraz, berriro ere, hitzarmen bat da. 379 00:22:51,120 --> 00:22:53,870 Baino gehiago erabili erakuslea honetan, ez behin betiko ez dugun nahi izan zabor balioa eta zenbait 380 00:22:53,870 --> 00:22:57,750 etapa off seinalatuz nonbait; eskua nahi dugu behera, NULL, 381 00:22:57,750 --> 00:23:01,530 beraz, Terminus dugu datu-egitura honen dakigu non eta ondorioz, beraz. 382 00:23:01,530 --> 00:23:03,410 >> Zer nahi badugu, hau manipulatzeko? 383 00:23:03,410 --> 00:23:05,980 Gehienak ikusmen hau egin dugu, eta gizakiak, 384 00:23:05,980 --> 00:23:07,630 baina zer txertatzeko bat egin nahi badugu? 385 00:23:07,630 --> 00:23:12,360 Beraz, jatorrizko zerrenda 9, 17, 20, 22, 29, 34 izan zen. 386 00:23:12,360 --> 00:23:16,730 Zer gertatzen da malloc espazioa, ondoren, 55, nodo nahi dugu, 387 00:23:16,730 --> 00:23:20,730 eta, ondoren, 55 zerrendan sartu behar bezala egin Astelehena nahi dugu? 388 00:23:20,730 --> 00:23:23,690 Nola egiten dugu hori? Beno, Anita izan zen, eta funtsean ibili zen zerrendan. 389 00:23:23,690 --> 00:23:27,500 Lehen elementu hasi zen eta, ondoren, hurrengo, hurrengoa, hurrengoa, hurrengoa, hurrengoa. 390 00:23:27,500 --> 00:23:29,500 Azkenik, sakatu ezkerreko guztiak behera 391 00:23:29,500 --> 00:23:34,480 eta konturatu oh, hau da NULL. Beraz, zer erakuslea manipulazioa egin behar dira? 392 00:23:34,480 --> 00:23:37,980 Pertsona amaieran izan zen, 34 zenbakia, bere ezkerreko behar planteatu 393 00:23:37,980 --> 00:23:46,220 55 puntu, 55 bere ezker besoan behera seinalatuz NULL amaierako berri izan behar. Eginda. 394 00:23:46,220 --> 00:23:49,540 Pretty erraza 55 txertatzeko ordenatuko zerrenda. 395 00:23:49,540 --> 00:23:51,800 Eta nola liteke hau bilatzeko? 396 00:23:51,800 --> 00:23:55,690 >> Dezagun aurrera eta ireki kodea hemen adibide batzuk. 397 00:23:55,690 --> 00:23:58,120 Ireki dut gedit, eta utzi ireki me lehen bi fitxategiak. 398 00:23:58,120 --> 00:24:02,050 List1.h bat da, eta utzi gogorarazteko besterik ez zidan hau zela kode zatia 399 00:24:02,050 --> 00:24:04,920 nodo bat irudikatzeko erabiltzen dugun. 400 00:24:04,920 --> 00:24:13,040 Nodo bat bai int izeneko n eta erakuslea besterik ez duten puntu zerrendako hurrengo gauza ondoan izeneko du. 401 00:24:13,040 --> 00:24:15,450 Hori da gaur egun. H fitxategi batean. Zergatik? 402 00:24:15,450 --> 00:24:19,090 Hitzarmen hau da, eta ez dugu abantaila hartu hau kopuru handi bat geure burua, 403 00:24:19,090 --> 00:24:22,220 baina nork idatzi printf eta beste funtzioak 404 00:24:22,220 --> 00:24:27,150 munduko opari gisa eman funtzio horiek guztiak deitu stdio.h fitxategi bat idazten. 405 00:24:27,150 --> 00:24:30,950 Eta gero, ez da string.h, eta, ondoren, ez da map.h, eta ez da h fitxategi horien guztien 406 00:24:30,950 --> 00:24:34,410 ikusi duzu agian edo beste pertsonekin idatzitako indarrean dagoen bitartean erabiltzen. 407 00:24:34,410 --> 00:24:38,470 Normalean horien h fitxategiak typedefs bezalako gauzak bakarrik 408 00:24:38,470 --> 00:24:42,310 edo mota pertsonalizatuak edo konstanteak adierazpenak deklarazioak. 409 00:24:42,310 --> 00:24:47,890 Ez duzu jarri funtzioak 'goiburu fitxategiak inplementazio. 410 00:24:47,890 --> 00:24:50,570 , Sartu ordez, beren prototipoak. 411 00:24:50,570 --> 00:24:53,050 Partekatu nahi duzun gauza jarri duzu zer behar dute munduaren 412 00:24:53,050 --> 00:24:55,640 beren kodea biltzeko. Beraz, ohitura hau, 413 00:24:55,640 --> 00:24:59,110 gauza bera egitea erabaki dugu. Ez dago askoz list1.h 414 00:24:59,110 --> 00:25:02,070 baina jarri dugu zerbait interesgarriak izan daitezkeen pertsonek munduko 415 00:25:02,070 --> 00:25:05,030 lotutako gure zerrenda ezartzeko erabili nahi duten. 416 00:25:05,030 --> 00:25:08,040 Orain, list1.c, ezin izango dut gauza honetan guztian bidez joan 417 00:25:08,040 --> 00:25:11,390 da apur bat luzea delako, programa hau, baina dezagun exekutatu benetako azkar gonbitan. 418 00:25:11,390 --> 00:25:15,720 Let Zerrenda1 konpilatu me, utzi ondoren, exekutatu me Zerrenda1, eta zer ikusiko duzu 419 00:25:15,720 --> 00:25:18,070 simulatutako simple programa txiki bat dugu hemen 420 00:25:18,070 --> 00:25:20,990 hori gehitu eta me kendu zenbakiak zerrenda bat egin ahal izateko. 421 00:25:20,990 --> 00:25:24,310 Beraz, aurrera eta 3 idatzi menu aukera 3. 422 00:25:24,310 --> 00:25:27,880 Zenbakia txertatu nahi dut - egin dezagun lehen zenbakia, hain zuzen, 9, 423 00:25:27,880 --> 00:25:30,550 eta orain dut kontatu zerrenda da gaur egun 9. 424 00:25:30,550 --> 00:25:33,760 Dezagun aurrera eta beste egin txertatzeko, beraz, menu aukera 3 hit dut. 425 00:25:33,760 --> 00:25:36,760 Zein zenbaki sartu nahi dut? 17. 426 00:25:36,760 --> 00:25:39,220 Sartu. Eta beste bat gehiago egin dut. 427 00:25:39,220 --> 00:25:41,720 22 zenbakia sartu me. 428 00:25:41,720 --> 00:25:45,850 Beraz, zerrenda lotuta diapositiba inprimaki dugun une bat izan duela hasieratik dugu. 429 00:25:45,850 --> 00:25:48,740 Nola txertatzeko hau benetan gertatzen ari da? 430 00:25:48,740 --> 00:25:52,000 Izan ere, 22 da zerrendaren amaieran. 431 00:25:52,000 --> 00:25:55,050 Istorioa Beraz, esan etapa astelehena eta recapped oraintxe 432 00:25:55,050 --> 00:25:57,460 kodea behar benetan gertatzen ari dena. 433 00:25:57,460 --> 00:25:59,700 Ikus dezagun begirada bat. Demagun behera joan me fitxategi honetan. 434 00:25:59,700 --> 00:26:01,720 Gloss dugu funtzio batzuk, 435 00:26:01,720 --> 00:26:05,630 baina jaisten dugu, esan, txertatze-funtzioa. 436 00:26:05,630 --> 00:26:11,720 >> Dezagun nola joan lotuta zerrenda hori nodo berri bat sartu dugu ikus-en. 437 00:26:11,720 --> 00:26:14,550 Non izendatu zerrendan? Beno, utzi mugitu modu guztiak goialdean, 438 00:26:14,550 --> 00:26:19,970 eta konturatu nire lotuta zerrenda hori, funtsean, hasiera batean NULL erakuslea bakar bat izendatu. 439 00:26:19,970 --> 00:26:23,180 Beraz, aldagai global bat naiz Hemen, eta, oro har, Predicada dugu aurka 440 00:26:23,180 --> 00:26:25,280 egiten du zure kodea delako little messy bat mantentzeko, 441 00:26:25,280 --> 00:26:29,080 alferrak, normalean sort da, baina ez da alferrak eta ez da okerra eta ez da txarra 442 00:26:29,080 --> 00:26:33,660 zure programa bizitzan helburu bakarra lotutako zerrenda bat simulatu nahi izanez gero. 443 00:26:33,660 --> 00:26:35,460 Zein da, zehatz-mehatz zer egiten ari gara. 444 00:26:35,460 --> 00:26:39,100 Beraz, baino deklaratzeko nagusia eta, ondoren, funtzio guztietan pasatzen 445 00:26:39,100 --> 00:26:42,640 programa hau idatzi dugu, konturatzen gara ordez oh, dezagun egin da global 446 00:26:42,640 --> 00:26:47,060 Programa honen helburua osoa da bat eta bakarra lotuta zerrenda erakusteko delako. 447 00:26:47,060 --> 00:26:50,700 Beraz, ongi sentitzen. Hona hemen nire prototipoak, eta ez dugu horien guztien bidez, 448 00:26:50,700 --> 00:26:55,800 baina delete funtzio bat, aurkituko funtzio bat, txertatze-funtzio bat, eta traverse funtzio bat idatzi nuen. 449 00:26:55,800 --> 00:26:59,080 Baina dezagun atzera jo txertatze-funtzioa 450 00:26:59,080 --> 00:27:01,490 ikusi eta nola funtzionatzen du hemen. 451 00:27:01,490 --> 00:27:09,940 Txertatu on line da, hemen goaz. 452 00:27:09,940 --> 00:27:12,850 Txertatu. Beraz, ez du argumenturik hartzen ari gara, eskatu delako 453 00:27:12,850 --> 00:27:15,930 erabiltzaileen kopurua sartu nahi duten funtzio honen barruan. 454 00:27:15,930 --> 00:27:19,410 Baina, lehenik eta behin, emateko lekua prestatu dugu. 455 00:27:19,410 --> 00:27:22,050 Kopia eta itsatsi beste adibide moduko bat da. 456 00:27:22,050 --> 00:27:25,110 Kasu horretan, int bat ginen esleitzean; Une honetan nodo bat ari gara esleitzean. 457 00:27:25,110 --> 00:27:27,910 Ez dut gogoratzen zenbat byte nodo bat da, baina hori da isuna. 458 00:27:27,910 --> 00:27:30,460 Sizeof hori irudikatu ahal izango niretzat. 459 00:27:30,460 --> 00:27:33,340 Eta zergatik am egiaztapena line 120 NULL dut? 460 00:27:33,340 --> 00:27:37,530 Zer line 119 oker joan liteke? Bai? 461 00:27:37,530 --> 00:27:40,530 [Ikasleentzako erantzuna, ulertezina] 462 00:27:40,530 --> 00:27:43,440 Good. Badaezpada dudan memoria gehiegi eskatu izan liteke 463 00:27:43,440 --> 00:27:47,020 edo zerbait oker eta sistema eragilea ez da nahikoa bytes niri emateko, 464 00:27:47,020 --> 00:27:50,640 beraz, askoz ere seinaleak NULL itzuli, eta ez bada ez dut hori egiaztatzeko 465 00:27:50,640 --> 00:27:54,710 eta jarraitu besterik ez blindly helbidea itzuli erabili, NULL da. 466 00:27:54,710 --> 00:27:58,400 Balio ezezagun batzuk izan daiteke, ez da gauza ona dut ezean - 467 00:27:58,400 --> 00:28:00,590 Egia esan, ez du balio ezezagun bat izango da. Izan NULL izan daiteke, beraz, ez dut nahi 468 00:28:00,590 --> 00:28:02,550 gehiegi eta arriskua da dereferencing. 469 00:28:02,550 --> 00:28:07,410 Horrela gertatzen bada, itzuli besterik ez dut, eta ez nuen bezala itzuli memoria edozein asmoa dugu. 470 00:28:07,410 --> 00:28:12,270 >> Bestela, erabiltzaileari eman dit zenbaki bat sartu esango dut, gure lagun zaharra GetInt deitzen diot nik, 471 00:28:12,270 --> 00:28:15,530 eta, ondoren, astelehena, sintaxia sartu dugu. 472 00:28:15,530 --> 00:28:20,320 'Newptr-> n' esan nahi du, helbidea zirela malloc emandako 473 00:28:20,320 --> 00:28:23,490 lehen nodo berria objektu byte adierazten du. 474 00:28:23,490 --> 00:28:26,860 eta, ondoren, n izeneko eremuan. 475 00:28:26,860 --> 00:28:35,270 Un poco de bitxikeriak galdera: zer gehiago críptica kodea line baliokidea da? 476 00:28:35,270 --> 00:28:38,110 Nola bestela ezin idatzi dut hau? Stab bat hartu nahi duzu? 477 00:28:38,110 --> 00:28:41,480 [Ikasleentzako erantzuna, ulertezina] 478 00:28:41,480 --> 00:28:44,870 Good. N bidez, baina ez da nahiko bezain erraza. 479 00:28:44,870 --> 00:28:47,090 Zer egin behar dut, lehen ez? [Ikasleentzako erantzuna, ulertezina] 480 00:28:47,090 --> 00:28:52,730 Good. * Newptr.n egin behar dut. 481 00:28:52,730 --> 00:28:55,610 Beraz, hau da erakuslea da, jakina, helbide bat esanez. Zergatik? 482 00:28:55,610 --> 00:28:59,520 Izan da malloc itzuli delako. * Newptr esaten "Hara joan," 483 00:28:59,520 --> 00:29:02,970 eta, ondoren, bertan behin eta, ondoren, gehiago ezagutzen. n erabili ahal izango duzu, 484 00:29:02,970 --> 00:29:05,730 baina hori itxura pixka bat itsusi, batez ere badugu gizakiak dira joan 485 00:29:05,730 --> 00:29:10,360 marraztu duten erakusleak geziak denbora guztian; munduko normalizatua gezi-izendapen hori, 486 00:29:10,360 --> 00:29:12,320 zehazki gauza bera egiten du. 487 00:29:12,320 --> 00:29:16,070 Beraz, soilik erabili -> notazioa ezker gauza erakuslea da. 488 00:29:16,070 --> 00:29:18,790 Bestela, uneko eta egitura bat izanez gero, erabili. N. 489 00:29:18,790 --> 00:29:25,800 Eta gero hau: Zergatik newptr-> hurrengo hasieratu I NULL? 490 00:29:25,800 --> 00:29:28,610 Ez dugu nahi zintzilik ezkerreko off etapa amaieran. 491 00:29:28,610 --> 00:29:31,630 Seinalatuz zuzen behera nahi dugu, eta horrek esan nahi du zerrenda honen amaieran 492 00:29:31,630 --> 00:29:34,980 potentzialki nodo honetan izango da, beraz, hobe dugu ziurtatu NULL da. 493 00:29:34,980 --> 00:29:38,460 Eta, oro har, zure aldagai edo zure datuak kide eta structs hasieratzean 494 00:29:38,460 --> 00:29:40,470 zerbait, praktika onak besterik ez da. 495 00:29:40,470 --> 00:29:45,170 Just zabor existitzen eta, oro har, existitzen jarraitzen uztea lortzen Arazoak 496 00:29:45,170 --> 00:29:48,650 ahaztu zerbait egin ondoren. 497 00:29:48,650 --> 00:29:51,590 >> Hona hemen batzuk kasu. Honek, berriro ere, txertatze-funtzioa da, 498 00:29:51,590 --> 00:29:54,930 eta egiaztatu nuen lehenengo gauza da, aldagai izeneko lehen bada, 499 00:29:54,930 --> 00:29:58,240 global aldagaia NULL da, horrek esan nahi du dago lotuta zerrenda ez da. 500 00:29:58,240 --> 00:30:02,460 Ez sartu ditugu zenbakiak, eta, beraz, hutsala da uneko zenbaki hau sartu 501 00:30:02,460 --> 00:30:05,240 zerrendan sartu, besterik ez delako zerrendaren hasiera dagokio. 502 00:30:05,240 --> 00:30:08,100 Honetan, beraz, noiz Anita besterik ez zuten zutik hemen bakarrik, itxurak 503 00:30:08,100 --> 00:30:11,390 inork ez bestela zen hemen etapa nodo bat esleitu arte, 504 00:30:11,390 --> 00:30:13,940 ondoren, bere eskua altxatzeko izan zuen lehen aldiz, 505 00:30:13,940 --> 00:30:17,420 Besteek iritsia zen agertokian bere ondoren astelehena. 506 00:30:17,420 --> 00:30:22,900 Orain hemen, non esan behar dut pixka bat check berria nodo n balioa 507 00:30:22,900 --> 00:30:27,370 n balioa lehen uneko nodoaren <, 508 00:30:27,370 --> 00:30:29,930 horrek esan nahi du ez da estekatutako zerrenda hasi da. 509 00:30:29,930 --> 00:30:32,330 Gutxienez zerrendan nodo, baina lasaia hau berria 510 00:30:32,330 --> 00:30:37,230 dagokio, beraz, aurretik gauzak lekuz aldatzeko behar dugu. 511 00:30:37,230 --> 00:30:43,450 Beste era batera esanda, zerrenda hasi besterik ez bada, demagun, 512 00:30:43,450 --> 00:30:48,100 kopurua 17, benetan, hau egin ahal izango dugu, argi eta garbi. 513 00:30:48,100 --> 00:30:56,010 Hasten bada, gure istorioa erakuslea hemen izeneko lehen, 514 00:30:56,010 --> 00:30:59,870 eta hasiera batean NULL da, eta 9 zenbakia sartu dugu, 515 00:30:59,870 --> 00:31:02,510 kopurua 9 argi eta garbi zerrendaren hasiera dagokio. 516 00:31:02,510 --> 00:31:07,400 Hargatik asmoa malloced besterik ez dugu helbidea edo telefono zenbaki 9 eta jarri hemen. 517 00:31:07,400 --> 00:31:13,170 Lehenengoa da lehenetsi 9 bada, lehenengo eszenatokia dugu eztabaidatu let guy hau esan nahi du hemen, 518 00:31:13,170 --> 00:31:15,790 utzi hau NULL; kopurua 9 ditugu. 519 00:31:15,790 --> 00:31:18,280 Sartu nahi dugu hurrengo zenbakia 17 da. 520 00:31:18,280 --> 00:31:22,420 17 pertenece baino gehiago hemen, beraz, hurrats batzuk logikoa honen bidez egin nahi izan dugu. 521 00:31:22,420 --> 00:31:26,060 Hargatik ordez, egiten dugu, dezagun asmoa kopurua 8 txertatu nahi dugun aurretik. 522 00:31:26,060 --> 00:31:28,650 >> Beraz, besterik gabe, erosotasuna-en mesedetan, hemen marraztu dut. 523 00:31:28,650 --> 00:31:30,760 Baina gogoan, malloc jarri gehien edozein lekutan. 524 00:31:30,760 --> 00:31:33,460 Baina marrazki-en mesedetan jarri dut hemen. 525 00:31:33,460 --> 00:31:38,440 Beraz, asmoa besterik ez dut esleitutako kopurua 8 nodo bat; hau da lehenespenez NULL. 526 00:31:38,440 --> 00:31:42,800 Orain zer gertatuko? Gauza pare bat. 527 00:31:42,800 --> 00:31:47,090 Akatsa egin dugu etapa on Astelehena non erakuslea hau atsegin eguneratu dugu, 528 00:31:47,090 --> 00:31:51,890 ondoren egin hau, eta, ondoren, erreklamatutako - Besteek eszenatokian umezurtz dugu. 529 00:31:51,890 --> 00:31:54,350 Can't duzulako - eragiketa hemen ordena garrantzitsua da, 530 00:31:54,350 --> 00:31:58,760 Orain delako galdu dugu hau nodo 9 espazioan flotatzen sort besterik ez dela. 531 00:31:58,760 --> 00:32:01,150 Beraz, hori ez zen Astelehena ikuspegi eskubidea. 532 00:32:01,150 --> 00:32:03,330 Lehen beste zerbait egin behar dugu. 533 00:32:03,330 --> 00:32:06,280 Munduko egoera honen itxura. Hasieran, 8 izan dira. 534 00:32:06,280 --> 00:32:10,550 Zer da 8 txertatu modu hobea izango litzateke? 535 00:32:10,550 --> 00:32:14,720 Horren ordez erakuslea hau eguneratzen lehen, hau hemen eguneratu ordez. 536 00:32:14,720 --> 00:32:17,720 Beraz, kode lerro bat den NULL karaktere hau aktiba behar dugu 537 00:32:17,720 --> 00:32:22,020 erakusle bat benetako nodo 9 seinalatuz, 538 00:32:22,020 --> 00:32:27,970 eta, ondoren, segurtasunez aldatzeko lehen guy honetan seinalatu hemen. 539 00:32:27,970 --> 00:32:31,330 Orain zerrenda bat, zerrenda bat lotuta, bi elementu ditugu. 540 00:32:31,330 --> 00:32:33,580 Eta zer esan nahi du honek benetan hemen itxura? 541 00:32:33,580 --> 00:32:36,900 Kodea begiratuz gero, konturatu egin ditudan zehazki hori. 542 00:32:36,900 --> 00:32:41,970 Esan dut newptr, eta istorio hau, newptr guy hau seinalatuz. 543 00:32:41,970 --> 00:32:45,520 >> Hargatik marraztu me gauza bat gehiago, eta gela hau apur bat gehiago utzi behar dut. 544 00:32:45,520 --> 00:32:48,540 Beraz barkatzen minuskula txikia marrazkia. 545 00:32:48,540 --> 00:32:52,140 Guy newptr deritzo. 546 00:32:52,140 --> 00:32:57,940 Aldagai lerro gutxitan lehenago deklaratu dugu, line - 25 gainetik. 547 00:32:57,940 --> 00:33:03,430 Eta 8 seinalatuz. Beraz newptr-> hurrengo diot, eta horrek esan nahi du egitura joan 548 00:33:03,430 --> 00:33:07,910 ari diren adierazi at newptr, eta, beraz, hemen gaude, Hara joan. 549 00:33:07,910 --> 00:33:13,990 Orduan gezi hurrengo eremuan, eta, ondoren, = jartzen da zein balio han esaten? 550 00:33:13,990 --> 00:33:17,280 Balioa lehen zen; zer balioa lehen zen? 551 00:33:17,280 --> 00:33:21,930 Lehenengoa zen nodo honetan, seinalatuz beraz, horrek esan nahi du nodo honetan seinalatu behar. 552 00:33:21,930 --> 00:33:25,660 Beste era batera esanda, nire idazkera barregarria nahastea, nahiz eta itxura, 553 00:33:25,660 --> 00:33:28,620 geziak horiek mugitzen inguruko ideia sinple bat 554 00:33:28,620 --> 00:33:31,560 kodea itzuli with bakarrarekin forrua honetan. 555 00:33:31,560 --> 00:33:38,110 Biltegiratu lehen hurrengo eremuan, eta, ondoren, eguneratu zer lehen benetan. 556 00:33:38,110 --> 00:33:40,900 Dezagun aurrera eta Aurreratu honen bidez, 557 00:33:40,900 --> 00:33:44,220 eta begiratu bakarrik buztana txertatzeko honetan oraingoz. 558 00:33:44,220 --> 00:33:51,210 Demagun iritsi, non nodo batzuen eremuan hurrengo NULL dela iruditzen zait puntu dut. 559 00:33:51,210 --> 00:33:53,410 Eta istorioa, xehetasun puntu honetan naiz duten I glossing 560 00:33:53,410 --> 00:33:58,170 erakuslea beste sartu dudan hemen, aurrekoak erakuslea line 142. 561 00:33:58,170 --> 00:34:01,320 Funtsean, istorioa Puntu honetan, behin zerrendan lortzen luze, 562 00:34:01,320 --> 00:34:04,800 Behar mota bi behatzak oinez joaten naiz urrunegi delako, 563 00:34:04,800 --> 00:34:08,219 bakar-zerrenda luze bat gogoratu, ezin duzu atzeraka joatea. 564 00:34:08,219 --> 00:34:13,659 Beraz, predptr ideia hau nire ezkerreko hatz da, eta newptr - ez newptr. 565 00:34:13,659 --> 00:34:17,199 Erakuslea beste hemen nire beste hatz da,, eta zerrenda oinez mota naiz. 566 00:34:17,199 --> 00:34:22,179 Horregatik existitzen dela. Baina bakarra kontuan hartu kasu errazagoa hemen bat. 567 00:34:22,179 --> 00:34:26,620 Erakuslea eremu hori hurrengo NULL bada, logikoa inplikazioa? 568 00:34:26,620 --> 00:34:30,840 Zerrenda honetan bada traversing eta NULL erakuslea bat hit duzu? 569 00:34:30,840 --> 00:34:35,780 Oraindik zerrendaren amaieran, eta, beraz, kodea, ondoren, osagarriak elementu bat eransteko 570 00:34:35,780 --> 00:34:41,230 intuitiboa, sort honen hurrengo erakuslea da NULL nodo hori hartuko du, 571 00:34:41,230 --> 00:34:46,120 beraz, hau da gaur egun NULL, eta aldatu, nahiz eta, nodoaren berri helbidea izan. 572 00:34:46,120 --> 00:34:52,260 Beraz, ari gara kodea gezi marraztean etapa marraztu dugun norbaiten ezkerreko handituz. 573 00:34:52,260 --> 00:34:54,070 >> Eta kasu eskuak I olatuen egingo oraingoz at, 574 00:34:54,070 --> 00:34:58,020 besterik ez delako erraza da galdu egiten dugu, ingurumena moduko honetan uste dut, 575 00:34:58,020 --> 00:35:00,600 zerrenda erdian txertatzeko egiaztapena da. 576 00:35:00,600 --> 00:35:03,220 Baina senez, zer gertatu behar da nahi duzun irudikatu nahi izanez gero 577 00:35:03,220 --> 00:35:06,600 non zenbaki batzuk erdian pertenece daukazu oinez 578 00:35:06,600 --> 00:35:09,510 hatz bat baino gehiago, bat baino gehiago erakuslea, 579 00:35:09,510 --> 00:35:12,920 irudikatu non pertenece egiaztapena elementu 00:35:15,450 > Unekoa, eta behin leku horretan aurkituko dituzu, 581 00:35:15,450 --> 00:35:20,400 ondoren, non erakusleak kontu handiz mugitu inguruan shell joko moduko Horretarako behar duzu. 582 00:35:20,400 --> 00:35:23,850 Eta erantzuna, dituzu, arrazoi nahi izanez gero, honen bidez, zeure etxean, 583 00:35:23,850 --> 00:35:28,340 irakin, besterik gabe, bi kode lerro horiek behera, baina lerro horien ordena da super garrantzitsua da. 584 00:35:28,340 --> 00:35:31,390 Jaregitean norbaiten eskua bada, eta goratzeko beste norbaitek ordena okerra delako, 585 00:35:31,390 --> 00:35:34,580 berriro hasi behar duzu. izan zerrendan orphaning. 586 00:35:34,580 --> 00:35:39,500 Kontzeptualki laburbiltzea, buztana txertatzeko nahiko erraza da. 587 00:35:39,500 --> 00:35:42,940 Burua txertatzeko ere nahiko erraza da, 588 00:35:42,940 --> 00:35:45,580 baina erakusle bat gehiago une honetan eguneratu behar duzu 589 00:35:45,580 --> 00:35:47,930 multzoko 5 ederki zerrendan Hemen 590 00:35:47,930 --> 00:35:51,560 eta, ondoren, erdian txertatzeko are gehiago ahalegina eskatzen du, 591 00:35:51,560 --> 00:35:56,130 kontu handiz sartu 20 zenbakia bere kokapena zuzena, 592 00:35:56,130 --> 00:35:58,350 17 eta 22 artekoa da. 593 00:35:58,350 --> 00:36:02,700 Beraz, behar duzun zerbait egin berri dute nodo 20 puntu eta 22 bezala, 594 00:36:02,700 --> 00:36:08,470 eta, ondoren, zein nodo en erakuslea eguneratu egin behar da azken? 595 00:36:08,470 --> 00:36:10,630 17 da, benetan sartu da. 596 00:36:10,630 --> 00:36:14,080 Beraz, berriro ere, jakin ezartzeko benetako kodea atzeratu dut. 597 00:36:14,080 --> 00:36:17,280 >> Lehen begiratuan, pixka bat jasanezinak da, baina benetan begizta infinitu bat besterik ez da 598 00:36:17,280 --> 00:36:21,770 den, begizta begizta batean, begizta batean, begizta batean, eta ahalik eta azkarren hausteko hit NULL erakuslea gisa, 599 00:36:21,770 --> 00:36:24,590 eta amaitzen da baldintza txertatzeko egin dezakezu. 600 00:36:24,590 --> 00:36:30,960 Honek, beraz, ordezkaritza lotuta zerrenda txertatzeko kodea da. 601 00:36:30,960 --> 00:36:34,590 Mota asko izan zen, eta konpondu atsegin dugu arazo bat sentitzen da, 602 00:36:34,590 --> 00:36:36,940 baina oso bat sartu dugu beste bat. Egia, gastatu dugu denbora hori guztia 603 00:36:36,940 --> 00:36:40,540 big O eta Ω eta iraupena, arazoak konpontzeko azkarrago nahian, 604 00:36:40,540 --> 00:36:43,270 eta hemen beste urrats bat handira atzeraka ari garela, sentitzen. 605 00:36:43,270 --> 00:36:45,380 Eta, hala ere, lortu nahi da, datuak gorde nahi izanez gero, 606 00:36:45,380 --> 00:36:48,010 Holy Grail bezala sentitzen da, astelehena, esan bezala, benetan 607 00:36:48,010 --> 00:36:50,470 gauzak gordetzeko berehala. 608 00:36:50,470 --> 00:36:53,930 >> Izan ere, demagun ez dugu une batez alde batera utzita lotuta jarri zerrenda 609 00:36:53,930 --> 00:36:56,000 eta ordez sartu dugu mahai baten ideia. 610 00:36:56,000 --> 00:36:59,110 Eta dezagun taula bat besterik ez dela uste array gisa une bat. 611 00:36:59,110 --> 00:37:03,790 Array hau eta kasu honetan hemen 26 elementuak, 0 25 bidez, 612 00:37:03,790 --> 00:37:07,940 eta demagun behar duzun zatia biltegiratze batzuen izenak: 613 00:37:07,940 --> 00:37:10,350 Alice eta Bob eta Charlie eta antzekoak. 614 00:37:10,350 --> 00:37:12,880 Eta datu-egitura bat behar duzu, izen horiek gordetzeko. 615 00:37:12,880 --> 00:37:15,000 Beno, lotuta zerrenda antzeko zerbait erabili ahal izango duzu 616 00:37:15,000 --> 00:37:20,260 eta Alice txertatu zerrenda oinez Bob eta Charlie Bob ondoren aurretik, eta abar. 617 00:37:20,260 --> 00:37:23,850 Eta, hain zuzen ere, horrelako bat alde batera utzita kodea ikusteko nahi duzun bada, 618 00:37:23,850 --> 00:37:27,230 jakin list2.h, zehatz-mehatz egiten dugu. 619 00:37:27,230 --> 00:37:30,610 Kode honen bidez ez dugu, baina hau lehen adibide aldaera bat da 620 00:37:30,610 --> 00:37:34,640 struct beste bat ikasleak izenekoa aurretik ikusi dugu sartzen, 621 00:37:34,640 --> 00:37:40,330 eta orduan zer lotutako zerrenda gordetzen da benetan, ikaslea egitura baten erakuslea da 622 00:37:40,330 --> 00:37:44,520 sinple bat baino apur osokoa, n. 623 00:37:44,520 --> 00:37:46,900 Beraz, konturatzen kodea ez da bertan lan egiten duten benetako kateak, 624 00:37:46,900 --> 00:37:49,940 baina esku helburua benetan bada eraginkortasun arazoari aurre egiteko, 625 00:37:49,940 --> 00:37:53,380 ez litzateke polita izango da gaude Alice izeneko objektu bat ematen bazaio, 626 00:37:53,380 --> 00:37:56,020 bere datuak egitura batean eskuineko kokapena jarri nahi dugu, 627 00:37:56,020 --> 00:37:58,860 benetan polita da gustatuko litzaidake jarri Alice sentitzen da, 628 00:37:58,860 --> 00:38:01,180 cuyo nombre A batekin hasten da, lehen kokalekua. 629 00:38:01,180 --> 00:38:05,270 Eta Bob, bere izena B batekin hasten da, bigarren kokapena. 630 00:38:05,270 --> 00:38:09,580 Array bat, edo dezagun hasteko deituz mahai bat, hartan hash taula bat, 631 00:38:09,580 --> 00:38:13,650 zehazki hori egin ahal izango dugu. Gaude Alice bezalako izen bat ematen bazaio, 632 00:38:13,650 --> 00:38:16,700 Alice bezalako kate bat, non A-l-i-c-e jarri al duzu? 633 00:38:16,700 --> 00:38:20,540 Hueristic bat behar dugu. Alice bezala sarrera batzuk hartzeko funtzio bat behar dugu 634 00:38:20,540 --> 00:38:24,610 eta erantzun bat itzultzeko, "Jarri Alice kokaleku horretan." 635 00:38:24,610 --> 00:38:28,720 Eta, kutxa beltza, funtzio hau deitu behar hash funtzio bat. 636 00:38:28,720 --> 00:38:32,330 >> Zerbait sarrera bat hartzen duen bezala, "Alice" hash funtzio bat da, 637 00:38:32,330 --> 00:38:38,080 duzu, normalean, kokapena zenbakizko datuak egitura batzuetan non Alice dagokio. 638 00:38:38,080 --> 00:38:40,830 Kasu honetan, gure hash funtzioa nahiko erraza izan beharko luke. 639 00:38:40,830 --> 00:38:47,510 Gure hash funtzioa, esan behar baduzu, emandako "Alice", zein karaktere izan behar dut arduratu dira? 640 00:38:47,510 --> 00:38:55,660 Lehena. Beraz, itxura [0], eta, ondoren, [0] pertsonaia da A bada, itzultzeko kopurua 0 diot. 641 00:38:55,660 --> 00:39:01,130 Da B bada, itzuli 1. Da C bada, itzultzeko 2, eta abar. 642 00:39:01,130 --> 00:39:05,940 Guztiak 0 indizea, eta Alice eta, ondoren, Bob eta, ondoren, Charlie sartu me ahalbidetuko luke, eta abar 643 00:39:05,940 --> 00:39:10,960 datu egitura honetan sartu. Baina arazo bat da. 644 00:39:10,960 --> 00:39:13,060 Zer dator Anita batera berriro? 645 00:39:13,060 --> 00:39:17,510 Nora egin Anita jarri dugu? Bere izena, ere bai, gutun-A batekin hasten da, 646 00:39:17,510 --> 00:39:20,330 dugu arazo hau nahastea, are handiagoa egin bezala sentitzen da. 647 00:39:20,330 --> 00:39:24,380 Dugu berehalako txertatzeko, etengabeko denbora txertatzeko, datu egitura bat 648 00:39:24,380 --> 00:39:27,100 baizik eta okerrago-kasu baino lineal, 649 00:39:27,100 --> 00:39:29,510 baina, zer egin dezaket Anita dugu kasu honetan? 650 00:39:29,510 --> 00:39:34,110 Zer dira bi aukerak, benetan? Bai? 651 00:39:34,110 --> 00:39:37,410 [Ikasleentzako erantzuna, ulertezina] Ongi da, eta, beraz, beste dimentsio bat izan dugu. 652 00:39:37,410 --> 00:39:42,320 Hori ona da. Beraz, gauzak eraiki ahal izango dugu hitz egin bezala 3D dugu hitzez Astelehena. 653 00:39:42,320 --> 00:39:46,700 Sarbide bat gehitu izan dugu hemen, baina demagun ez dela, hau simple mantentzeko saiatzen ari naiz. 654 00:39:46,700 --> 00:39:50,160 Osoa helburua hemen da etengabe-time berehalako sarbidea dute, 655 00:39:50,160 --> 00:39:52,170 beraz, gehiegi konplexutasuna gehituz. 656 00:39:52,170 --> 00:39:55,970 Zer dira beste aukerak Anita txertatzeko datu egitura honetan sartu nahian? Bai? 657 00:39:55,970 --> 00:39:58,610 [Ikasleentzako erantzuna, ulertezina] Good. Beraz, gainontzeko behera mugitu ahal izan genuen, 658 00:39:58,610 --> 00:40:03,040 Charlie behera nudges Bob eta Alice, eta, ondoren, atsegin Anita jarri dugu non nahi benetan zuen. 659 00:40:03,040 --> 00:40:05,660 >> Noski, gaur egun, ez dago albo efektu bat da. 660 00:40:05,660 --> 00:40:09,000 Datu-egitura hau da, ziur aski erabilgarria ez delako behin pertsona sartu nahi dugu 661 00:40:09,000 --> 00:40:11,250 baina nahi dugu Oraindik ere, badago geroago ikusteko duelako 662 00:40:11,250 --> 00:40:13,600 datu-egitura izen guztiak inprimatu nahi badugu. 663 00:40:13,600 --> 00:40:15,850 Datu honekin zerbait egin behar azkenean goaz. 664 00:40:15,850 --> 00:40:20,810 Beraz, gaur egun mota Alice, jada ez zuen behar baino gehiago izorratu dugu. 665 00:40:20,810 --> 00:40:23,880 Nor da Bob, ez da Charlie. 666 00:40:23,880 --> 00:40:26,060 Beraz, agian, ez da ideia ona, hala nola. 667 00:40:26,060 --> 00:40:28,830 Baina, hain zuzen ere, aukera bat da. Denek filmea izan dugu behera, 668 00:40:28,830 --> 00:40:32,240 edo heck, Anita berandu iritsi zen joko, zergatik ez jarri besterik ez dugu Anita 669 00:40:32,240 --> 00:40:35,870 hemen ez, hemen ez, hemen ez, dezagun jarri bere zerrendan pixka bat txikiagoa. 670 00:40:35,870 --> 00:40:38,680 Baina gero, arazo hau berriro devolve hasten. 671 00:40:38,680 --> 00:40:41,630 Alice aurkitu ahal izango duzu agian, berehala, bere lehen izen oinarritzen da. 672 00:40:41,630 --> 00:40:44,320 Eta Bob berehala, eta Charlie. Baina orduan begiratzen Anita, 673 00:40:44,320 --> 00:40:46,360 , eta ikusiko duzu, hmm, Alice bidea da. 674 00:40:46,360 --> 00:40:48,770 Beno, utzi egiaztatu Alice azpian me. Bob ez da Anita. 675 00:40:48,770 --> 00:40:51,850 Charlie ez da Anita. Oh, ez dago Anita. 676 00:40:51,850 --> 00:40:54,720 Eta logika jarraitzen duzu tren hori bada, modu guztiak, 677 00:40:54,720 --> 00:41:00,690 kasurik txarrenaren exekutatzen edo aurkitzeko Anita txertatu datu berriak egitura zer da? 678 00:41:00,690 --> 00:41:03,280 O (n) da, ezta? 679 00:41:03,280 --> 00:41:06,280 Kasu txarrena dela eta, ez da Alice, Bob, Charlie. . . 680 00:41:06,280 --> 00:41:10,150 utzi behera norbait izeneko "Y", guztiak, beraz, ez dago Leku bakarra da. 681 00:41:10,150 --> 00:41:13,950 Zorionez, "Z" izeneko bat ez dugu, beraz, Anita oso behean jarri genituen. 682 00:41:13,950 --> 00:41:16,040 >> Ez dugu benetan konpondu arazo hori. 683 00:41:16,040 --> 00:41:19,890 Beraz, agian, hirugarren dimentsio hori aurkeztu beharko dugu ez. 684 00:41:19,890 --> 00:41:22,230 Eta bihurtzen da, hirugarren dimentsio hori aurkeztu ezean, 685 00:41:22,230 --> 00:41:25,240 ezin dugu primeran, baina Holy Grail da lortzean joan 686 00:41:25,240 --> 00:41:28,370 konstante-time-munduratze eta, beraz, dinamikoa insertions 687 00:41:28,370 --> 00:41:30,960 ez dugu hard-tamaina 26 kodea array bat. 688 00:41:30,960 --> 00:41:34,400 Dezakegu izen asko gisa sartu nahi dugu, baina dezagun gure 5 minutuko break hartzeko hemen 689 00:41:34,400 --> 00:41:38,790 eta, ondoren, behar bezala dela. 690 00:41:38,790 --> 00:41:46,020 Guztiak eskubidea. Istorioa dut nahiko artifizialki dago 691 00:41:46,020 --> 00:41:48,670 Alice eta gero, Bob eta, ondoren, Charlie eta, ondoren, Anita aukeratzerakoan, 692 00:41:48,670 --> 00:41:51,000 dauka, eta izen zen, jakina, Alice talka. 693 00:41:51,000 --> 00:41:54,120 Baina galdera da, astelehena, amaitu dugu nola litekeena da 694 00:41:54,120 --> 00:41:56,370 mota horiek talka duzula? Beste era batera esanda, 695 00:41:56,370 --> 00:42:00,490 hasten gara tabularrean egitura hau erabili nahi izanez gero, hau da, benetan array bat besterik ez da, 696 00:42:00,490 --> 00:42:02,460 26 kokalekuen kasu honetan, 697 00:42:02,460 --> 00:42:05,740 gure input badira ordez uniformeki banatzen? 698 00:42:05,740 --> 00:42:09,620 Ez da artifizialki Alice eta Bob eta Charlie eta David eta abarren arabera alfabetikoki 699 00:42:09,620 --> 00:42:12,380 Z. bidez du uniformeki A banatuta 700 00:42:12,380 --> 00:42:15,220 >> Agian besterik ez dugu lortu zortea eta ez ari gara bi bat edo bi B dute 701 00:42:15,220 --> 00:42:17,640 probabilitatea oso altua, baina norbait duenez, 702 00:42:17,640 --> 00:42:20,730 dugu orokortu eta arazo hau ez bada egin 0 eta 25 703 00:42:20,730 --> 00:42:26,060 baina, adibidez, 0 bidez 364 edo 65, askotan ohiko urtean, egun kopurua 704 00:42:26,060 --> 00:42:31,170 eta galdera, "Zer da gurekin bi gela honetan bera duten urtebetetzea probabilitatea?" 705 00:42:31,170 --> 00:42:34,600 Jarri beste modu bat, zer probabilitate gurekin bi izen bat dute A-rekin hasten da? 706 00:42:34,600 --> 00:42:37,190 Galdera-sort berbera da, baina helbide-espazio hau, 707 00:42:37,190 --> 00:42:39,940 bilaketa-espazioa hau, urtebetetzeak kasuan handiagoa da, 708 00:42:39,940 --> 00:42:42,820 dugulako hainbeste urtean egun alfabetoaren letra baino. 709 00:42:42,820 --> 00:42:44,910 Zer da talka baten probabilitatea? 710 00:42:44,910 --> 00:42:48,410 Beno, hau ezin dugu uste kalkulatzen math kontrako bidea. 711 00:42:48,410 --> 00:42:50,580 Zer da talkak ez probabilitatea? 712 00:42:50,580 --> 00:42:53,970 Beno, adierazpen hau hemen dio zer probabilitatea 713 00:42:53,970 --> 00:42:58,770 gela honetan pertsona bakar bat, berezia urtebetetzea dutela bada? 714 00:42:58,770 --> 00:43:01,190 % 100 da. Gela pertsona bakarra delako, 715 00:43:01,190 --> 00:43:03,940 bere urtebetetzea 365 egun edozein izan daiteke urteko daudelarik. 716 00:43:03,940 --> 00:43:08,650 Beraz, 365/365 aukera ematen dit balio bat 1. 717 00:43:08,650 --> 00:43:11,250 Beraz, une honetan galdera probabilitatea 1 da. 718 00:43:11,250 --> 00:43:13,270 Baina gela bigarren pertsona bat izanez gero, 719 00:43:13,270 --> 00:43:16,490 zer probabilitate bere urtebetetzea desberdina da? 720 00:43:16,490 --> 00:43:20,680 Ez bakarrik ahalik eta 364 egun, ez ikusi egingo zaio, bisurteetan, 721 00:43:20,680 --> 00:43:23,580 bere urtebetetzea ez beste pertsona batekin talka. 722 00:43:23,580 --> 00:43:31,920 Beraz, 364/365. Hirugarren pertsona bat badator, 363/365, eta abar. 723 00:43:31,920 --> 00:43:35,790 Beraz, elkarrekin biderkatuz frakzio horiek mantendu dira, txikiagoak eta txikiagoa lortzean, 724 00:43:35,790 --> 00:43:40,720 out irudikatu zer guztiok berezia urtebetetzeak probabilitatea? 725 00:43:40,720 --> 00:43:43,570 Baina orduan, ezin dugu, jakina, besterik gabe, erantzuna hartu eta irauli inguruan 726 00:43:43,570 --> 00:43:47,210 eta zer 1 ken guztiak, adierazpen bat azkenean dugu 727 00:43:47,210 --> 00:43:51,250 gogoratzen duzu zure math liburuak itzuli bada, honen antzeko zerbait pixka bat ikusten da, 728 00:43:51,250 --> 00:43:54,590 askoz ere erraz interpretatu grafikoki. 729 00:43:54,590 --> 00:43:57,820 Eta grafiko hau hemen x ardatza urtebetetzeak kopurua, 730 00:43:57,820 --> 00:44:02,030 edo urtebetetzeak duten pertsonak, eta y ardatzean kopurua partida probabilitatea da. 731 00:44:02,030 --> 00:44:06,060 Eta zer da hori esaten baldin baduzu, demagun, nahiz eta, 732 00:44:06,060 --> 00:44:10,860 aukeratu dezagun 22, 23 antzeko zerbait. 733 00:44:10,860 --> 00:44:13,160 Ez da 22 edo 23 pertsona gelan bada, 734 00:44:13,160 --> 00:44:17,100 probabilitatea, bi horiek oso jende gutxik urtebetetzea izan bera 735 00:44:17,100 --> 00:44:19,560 super altua da, benetan, combinatorially. 736 00:44:19,560 --> 00:44:23,450 % 50 odds 22 pertsona, mintegi bat, ia-ia klase batean, 737 00:44:23,450 --> 00:44:25,790 Pertsonen 2 urtebetetzea izan bera. 738 00:44:25,790 --> 00:44:28,520 Ez delako hainbeste modu berean urtebetetzea izan dezakezu. 739 00:44:28,520 --> 00:44:31,110 Nahiz eta okerragoa, diagramaren eskuinaldean begiratzen baduzu, 740 00:44:31,110 --> 00:44:34,040 denbora klase bat duzula, 58 ikasle, 741 00:44:34,040 --> 00:44:39,270 2 pertsonek urtebetetzea bat izateko probabilitatea super, super altua da, ia% 100. 742 00:44:39,270 --> 00:44:41,880 Orain, bizitza errealean buruzko fun Izan ere, sort. 743 00:44:41,880 --> 00:44:45,850 >> Baina inplikazio, gaur egun, datuen egitura eta gordetzeko informazioa 744 00:44:45,850 --> 00:44:51,100 esan nahi du, besterik gabe, polit bat, garbi, datu-banaketa uniformea ​​suposatuz 745 00:44:51,100 --> 00:44:53,650 eta gauza mordo bat egokitzeko array handi bat nahikoa duzu 746 00:44:53,650 --> 00:44:59,360 ez du esan nahi pertsona kokapenak berezia lortzeko ari zaren. 747 00:44:59,360 --> 00:45:03,810 Talkak ari zara. Egiaztapena nozioa honetan, beraz, deitzen, 748 00:45:03,810 --> 00:45:07,450 bezalako "Alice" sarrera bat hartu eta nolabait massaging 749 00:45:07,450 --> 00:45:10,190 eta, ondoren, 0 edo 1 edo 2 bezala erantzun bat. 750 00:45:10,190 --> 00:45:17,500 Atzera eskuratzen funtzio hori irteera batzuk talka probabilitatea hau beteta. 751 00:45:17,500 --> 00:45:19,530 Beraz, nola egin dezaket talkak horiek kudeatzeko dugu? 752 00:45:19,530 --> 00:45:21,940 Beno, kasu batean, ideia izan zen iradoki hartu ahal izango dugu. 753 00:45:21,940 --> 00:45:25,100 Besterik dugu guztiontzat, mugitu behera, edo agian, apur bat gehiago, besterik gabe, 754 00:45:25,100 --> 00:45:29,870 mugimendua Besteek ordez, utzi besterik ez mugitu Anita eskuragarri Leku beheko aldean. 755 00:45:29,870 --> 00:45:32,810 Beraz, bada Alice 0 da, Bob 1 da, Charlie 2 da, 756 00:45:32,810 --> 00:45:35,260 besterik ez dugu jarri Anita kokapena 3. 757 00:45:35,260 --> 00:45:38,860 Eta hori izeneko datu egitura lineal artesiak teknika bat da. 758 00:45:38,860 --> 00:45:41,310 Lineala delako ari zaren lerro hau oinez, eta artesiak moduko Oraindik duzu 759 00:45:41,310 --> 00:45:43,640 datu egitura lekuak eskuragarri. 760 00:45:43,640 --> 00:45:46,210 Jakina, O (n) sartu devolves. 761 00:45:46,210 --> 00:45:49,590 Datu-egitura oso beteta badago, ez da 25 pertsona dagoeneko 762 00:45:49,590 --> 00:45:54,120 eta, ondoren, Anita batera dator, eta ondorioz bere kokapena Z izango litzateke, eta hori da isuna. 763 00:45:54,120 --> 00:45:56,540 Egokitzen jarraitzen zuen, eta geroago bere aurki ditzakegu. 764 00:45:56,540 --> 00:46:00,100 >> Baina gauzak bizkortzeko sortu helburua aurkakoa izan zen. 765 00:46:00,100 --> 00:46:02,530 Beraz, zer bada ordez sartu dugu hirugarren dimentsio hori? 766 00:46:02,530 --> 00:46:06,400 Teknika da, oro har, aparteko kateatzea deitzen zaio, edo kateak izatea. 767 00:46:06,400 --> 00:46:10,030 Eta zer hash taula bat da, egitura hau tabularrean 768 00:46:10,030 --> 00:46:13,450 zure taula erakusleak array bat besterik ez da. 769 00:46:13,450 --> 00:46:18,230 Baina zer gertatzen da erakusle ere seinalatu asmatzeko zer da? 770 00:46:18,230 --> 00:46:21,970 Lotuta zerrenda. Beraz, zer bi munduen onena hartuko dugu? 771 00:46:21,970 --> 00:46:26,500 Array erabiltzen dugu hasierako indizeak 772 00:46:26,500 --> 00:46:32,070 datuak egitura sartu berehala [0] [1], [30] edo abarren joan ahal izango dugu, 773 00:46:32,070 --> 00:46:36,480 baina dugun malgutasun batzuk eta Anita eta Alice eta Adam doi dezakegu 774 00:46:36,480 --> 00:46:38,630 eta beste edozein izen bat, 775 00:46:38,630 --> 00:46:43,470 utzi ordez, beste ardatza hazten arbitrarioki. 776 00:46:43,470 --> 00:46:47,340 Eta, azkenik, astelehenetik, zerrenda lotutako gaitasun espresibo hori. 777 00:46:47,340 --> 00:46:49,530 Arbitrarioki, datu-egitura bat hazten dugu. 778 00:46:49,530 --> 00:46:52,450 Bestela, 2 dimentsioko array handi bat egin izan dugu, 779 00:46:52,450 --> 00:46:57,190 dimentsioko array bat 2-ilara bat baina hori awful egoera bat izan nahi izanez gero 780 00:46:57,190 --> 00:47:01,280 ez da nahikoa pertsona osagarriak bere izen gertatzen A. batekin hasten 781 00:47:01,280 --> 00:47:04,200 Jainkoa forbid 2 dimentsioko egitura handi bat reallocate behar dugu 782 00:47:04,200 --> 00:47:06,600 besterik ez dagoelako hainbeste izeneko A 783 00:47:06,600 --> 00:47:09,480 batez ere, ez da hain gutxi Z zerbait izeneko pertsona. 784 00:47:09,480 --> 00:47:12,170 Besterik ez da, datuak oso sakabanatuak egitura izango. 785 00:47:12,170 --> 00:47:15,400 Beraz, ez da edozein bitarteko ezin hobea da, baina orain, gutxienez gaitasuna 786 00:47:15,400 --> 00:47:19,090 berehala aurkituko non Alice edo Anita da, 787 00:47:19,090 --> 00:47:21,090 gutxienez ardatz bertikala dagokionez, 788 00:47:21,090 --> 00:47:25,850 eta, ondoren, besterik ez dugu non Anita edo Alice jarri lotuta zerrenda hori erabakitzeko. 789 00:47:25,850 --> 00:47:32,480 Gauzak ordenatzeko buruzko zaintzeko ez badugu, nola azkar izan Alice sartu dugu hau atsegin egitura batean? 790 00:47:32,480 --> 00:47:35,370 Etengabeko denbora da. Indizea [0] ditugu, eta inork ez badago, 791 00:47:35,370 --> 00:47:37,550 Alice lotzen zerrenda Irteeran doa. 792 00:47:37,550 --> 00:47:40,000 Baina hori ez da aurre erraldoia. Zeren Anita ondoren dator zehar 793 00:47:40,000 --> 00:47:42,160 urrats batzuk beranduago, non ez Anita sartzen zara? 794 00:47:42,160 --> 00:47:45,140 Beno, [0]. Objektuei Begirako Programazio. Alice da dagoeneko lotzen zerrendan. 795 00:47:45,140 --> 00:47:47,760 >> Baina ez badugu izen horiek ordenatzeko buruzko zaintzeko, 796 00:47:47,760 --> 00:47:53,580 Alice baino gehiago, Anita txertatzea besterik ez mugitu ahal izango dugu, baina nahiz eta denbora konstante da. 797 00:47:53,580 --> 00:47:57,010 Nahiz eta Alice eta Adam eta beste izen horiek guztiak A, 798 00:47:57,010 --> 00:47:59,410 ez da benetan aldatzearen fisikoki. Zergatik? 799 00:47:59,410 --> 00:48:04,090 Besterik ez dugu egin delako hemen zerrenda lotuta, nork daki ziren nodo horiek dira, hala ere? 800 00:48:04,090 --> 00:48:06,550 Guztiak egin behar duzun da mugitu ogi apurrak. 801 00:48:06,550 --> 00:48:10,930 Mugitu geziak inguruan, ez duzu edozein datu fisikoki mugitu inguruan. 802 00:48:10,930 --> 00:48:14,610 Beraz, Anita sartu ahal izango dugu, kasu horretan, berehala. Constant denbora. 803 00:48:14,610 --> 00:48:20,250 Beraz, konstante-time lookup, eta etengabe-time Anita bezalako norbait txertatzeko dugu. 804 00:48:20,250 --> 00:48:22,740 Baina mota munduko oversimplifying. 805 00:48:22,740 --> 00:48:28,510 Zer geroago Alice aurkitu nahi badugu? 806 00:48:28,510 --> 00:48:31,050 Zer geroago Alice aurkitu nahi badugu? 807 00:48:31,050 --> 00:48:35,690 Zenbat urrats hori hartu? 808 00:48:35,690 --> 00:48:37,850 [Ikasleentzako erantzuna, ulertezina] 809 00:48:37,850 --> 00:48:40,950 Hain zuzen ere. Alice aurretik lotuta zerrendan pertsona kopurua. 810 00:48:40,950 --> 00:48:45,420 Beraz, ez da nahiko perfektua, gure datu-egitura, berriz, delako, bertikala sarbidea du 811 00:48:45,420 --> 00:48:50,240 eta, ondoren, zintzilik lotutako zerrendak hauek ditu: - benetan, ez marraztu da array bat utzi. 812 00:48:50,240 --> 00:48:56,020 Lotuta, zerrenda horiek off zintzilik honen antzeko zerbait apur bat itxura. 813 00:48:56,020 --> 00:48:59,110 Baina arazoa da, Alice eta Adam eta beste izen horiek guztiak A 814 00:48:59,110 --> 00:49:01,720 azkenean, gero eta gehiago, han, 815 00:49:01,720 --> 00:49:04,810 norbait amaitzeko urratsen sorta bat hartu izan aurkitzeko, 816 00:49:04,810 --> 00:49:06,670 bcause lotutako zerrenda zeharkatzeko behar duzu, 817 00:49:06,670 --> 00:49:08,090 eragiketa bat lineala da. 818 00:49:08,090 --> 00:49:14,270 Beraz, benetan, eta gero, txertatzeko denbora, azken finean, O (n), non n zerrendako elementu kopurua da. 819 00:49:14,270 --> 00:49:21,780 Sailkatuak, dezagun arbitrarioki deitu m, non m zerrendak lotutako kopurua da 820 00:49:21,780 --> 00:49:24,500 ardatz bertikala honetan dugun. 821 00:49:24,500 --> 00:49:27,180 Beste era batera esanda, benetan bere gain hartzen dugu izenak banaketa uniformea ​​bada, 822 00:49:27,180 --> 00:49:30,150 erabat unrealistic. Ez da, jakina, letra batzuk besteak baino gehiago. 823 00:49:30,150 --> 00:49:32,580 >> Baina une uniformea ​​banaketa bere gain hartzen bada, 824 00:49:32,580 --> 00:49:37,350 eta pertsona guztira, eta guztira m kateak dugu n 825 00:49:37,350 --> 00:49:40,630 aukera ematen digu, eta gero kateak horietako bakoitzaren iraupena 826 00:49:40,630 --> 00:49:44,380 nahiko besterik ez da, guztira, n kateak kopuruaren arabera banatzen da izango. 827 00:49:44,380 --> 00:49:48,900 N / m Beraz. Baina hemen non matematikoki clever ahal izango dugu. 828 00:49:48,900 --> 00:49:53,030 m konstante bat da, ez dago horien kopuru finko bat delako. 829 00:49:53,030 --> 00:49:54,620 Array deklaratzen ari zara hasieran, 830 00:49:54,620 --> 00:49:58,450 Oraindik ez dugu tamainaz aldatu ardatz bertikala. Definizioz, egonaldi konpondu. 831 00:49:58,450 --> 00:50:01,220 Bakarrik da ardatz horizontala, eta, beraz, hitz hori aldatzen. 832 00:50:01,220 --> 00:50:04,760 Beraz, teknikoki, konstante bat da. Beraz, gaur egun, txertatzeko denbora 833 00:50:04,760 --> 00:50:09,700 pretty askoz O (n) da. 834 00:50:09,700 --> 00:50:12,410 Beraz, ez da askoz hobeto sentitzen. 835 00:50:12,410 --> 00:50:14,940 Baina egia da hemen? Beno, denbora honetan guztian, asteak, 836 00:50:14,940 --> 00:50:20,640 dira esaten dugu O (n ²). O (n), 2 x n ², - n, 2 arabera banatzen da. . . ech. 837 00:50:20,640 --> 00:50:23,580 N ² besterik ez da. Baina orain, seihilekoan zati honetan, 838 00:50:23,580 --> 00:50:25,560 mundu errealean buruz berriro hitz egiten hasi ahal izango dugu. 839 00:50:25,560 --> 00:50:31,520 Eta n / m da erabat, besterik ez bakarrik n baino azkarrago. 840 00:50:31,520 --> 00:50:35,170 Mila izen bat bada, eta horiek apurtu kuboak hainbat 841 00:50:35,170 --> 00:50:37,820 beraz, bakarrik hamar kateak horietako bakoitzak izen duzu, 842 00:50:37,820 --> 00:50:41,670 hamar gauzak erabat bilatzen mila gauza bat baino azkarrago izango da. 843 00:50:41,670 --> 00:50:43,740 Eta, beraz, arazo datozen multzo bat da erronka 844 00:50:43,740 --> 00:50:46,100 zehazki dela pentsatu arren, bai, 845 00:50:46,100 --> 00:50:49,520 asymptotically eta matematikoki, hau da, oraindik ere, lineala, 846 00:50:49,520 --> 00:50:51,700 eta, oro har, sucks gauzak aurkitu nahian. 847 00:50:51,700 --> 00:50:54,530 Egia esan, hori baino azkarragoa izan da 848 00:50:54,530 --> 00:50:56,520 delako zatitzaile hau. 849 00:50:56,520 --> 00:50:58,310 Eta beraz, ez da berriro merkataritza-off honetan izango da 850 00:50:58,310 --> 00:51:01,390 eta teoria eta errealitatearen arteko gatazka honetan, 851 00:51:01,390 --> 00:51:03,550 eta gasaren puntu honetan seihilekoan inflexio hasiko da 852 00:51:03,550 --> 00:51:07,510 errealitate bat baino gehiago sort semster amaitu bezala prestatzeko, 853 00:51:07,510 --> 00:51:09,280 aurkezten dugun web programazioaren munduan, 854 00:51:09,280 --> 00:51:11,530 non benetan, errendimendua zenbatu zure erabiltzaile delako 855 00:51:11,530 --> 00:51:14,880 hasi eta sentitzen eskertzen pobrea diseinua erabakiak. 856 00:51:14,880 --> 00:51:19,950 >> Beraz, nola joaten lotutako ezartzeko - 31 elementu hash taula bat? 857 00:51:19,950 --> 00:51:22,600 Eta aurreko adibidea arbitrarioki urtebetetzeak buruz. 858 00:51:22,600 --> 00:51:26,190 Norbaitek urtarrilaren 1a edo February 1 urtebetetzea badu, jarri dugu ontzi hau. 859 00:51:26,190 --> 00:51:28,960 Da urtarrilaren 2, otsailak 2, March 2 izanez gero, jarri dugu ontzi hau. 860 00:51:28,960 --> 00:51:32,220 Hori dela eta, 31 izan zen. Nola hash taula bat aldarrikatu duzu? 861 00:51:32,220 --> 00:51:37,480 Pretty simple daiteke, nodoak * taula nire izena, arbitrarioak [31]. 862 00:51:37,480 --> 00:51:42,400 Honek ematen dit, 31 erakusle, nodo 863 00:51:42,400 --> 00:51:45,370 eta aukera ematen duen 31 lotuta zerrendak erakusle izan me 864 00:51:45,370 --> 00:51:48,800 nahiz eta kateak dira hasiera batean NULL. 865 00:51:48,800 --> 00:51:54,860 Zer jarri nahi dut nahi dut gorde nahi izanez gero "Alice", "Bob", "Charlie"? 866 00:51:54,860 --> 00:51:57,010 Beno, gauza horiek biltzeko egitura bat behar dugu. 867 00:51:57,010 --> 00:52:00,530 behar ditugu, Alice eta Bob seinalatu, Charlie seinalatu, eta abar. 868 00:52:00,530 --> 00:52:04,940 Ezin dugu besterik ez izenak bakarrik, eta, beraz, deitzen nodo, hemen egitura berri bat sortu izan dut. 869 00:52:04,940 --> 00:52:08,310 >> Zer da benetako nodo bat da? Zer da hau loturiko zerrenda berri nodo bat da? 870 00:52:08,310 --> 00:52:11,840 Lehenik eta behin, deitu hitza, pertsona izena da. 871 00:52:11,840 --> 00:52:14,340 LENGTH, ustez, giza izena gehienezko luzera, 872 00:52:14,340 --> 00:52:18,210 edozein dela ere, 20, 30, 40 izkinan crazy kasu pertsonaiak, 873 00:52:18,210 --> 00:52:22,680 eta +1 zer da? Besterik ez da aparteko NULL karaktere, \ 0. 874 00:52:22,680 --> 00:52:27,410 Beraz, nodo honen barruan bere burua "zerbait" itzulbiratzeko, 875 00:52:27,410 --> 00:52:29,640 baina adierazten ere izeneko hurrengo erakuslea 876 00:52:29,640 --> 00:52:32,580 beraz, kate Alice Bob Charlie ahal izango dugu, eta abar. 877 00:52:32,580 --> 00:52:36,700 NULL izan daiteke, baina ez du zertan izan. 878 00:52:36,700 --> 00:52:40,110 Hash taulak horiek edozein galdera? Bai? 879 00:52:40,110 --> 00:52:46,190 [Student galdera galdetzen, ulertezina] array bat - galdera ona. 880 00:52:46,190 --> 00:52:50,120 Zergatik hitz array bat baino besterik ez char * karaktere hau da? 881 00:52:50,120 --> 00:52:53,830 Hau zertxobait arbitrarioa Adibidez, ez dut jo nahi izan 882 00:52:53,830 --> 00:52:56,190 jatorrizko izenak bakoitzean malloc. 883 00:52:56,190 --> 00:52:59,530 Katea memoria gehienezko zenbatekoa bat aldarrikatu nahi dut 884 00:52:59,530 --> 00:53:06,020 beraz, egitura izan dut kopiatu Alice \ 0 eta ez malloc eta doakoa da eta bezala aurre egiteko. 885 00:53:06,020 --> 00:53:11,710 Baina hori egin izan dut nahi nuen espazioaren erabilera kontziente izan nahi izanez gero. Ona galdera. 886 00:53:11,710 --> 00:53:14,780 Beraz, utzi kanpoan orokortu hau saiatu bere 887 00:53:14,780 --> 00:53:18,350 eta fokua datuen egitura, oro har, gaur egungo gainerako 888 00:53:18,350 --> 00:53:21,170 eta oinarriak berdinak erabiltzen duten beste arazo batzuk konpondu ahal izango dugu. 889 00:53:21,170 --> 00:53:24,590 nahiz eta datu-egitura nahiz eta bere berezitasunak ezberdindu dezake bere burua. 890 00:53:24,590 --> 00:53:27,910 >> Beraz, izarrekin bihurtzen da ordenagailua zientzia, zuhaitzak oso arruntak dira. 891 00:53:27,910 --> 00:53:29,760 Eta zuhaitz sort dezakezu uste familia zuhaitz bat bezala, 892 00:53:29,760 --> 00:53:31,830 han sustraiak, matriarch batzuk edo patriarka, 893 00:53:31,830 --> 00:53:34,540 amona edo aitona edo lehenago itzuli 894 00:53:34,540 --> 00:53:38,880 horien azpian daude, ama eta aita edo hainbat anai-arrebak, edo antzekoak. 895 00:53:38,880 --> 00:53:42,500 Beraz, zuhaitz egitura du nodo eta seme-alaba ditu, 896 00:53:42,500 --> 00:53:45,260 normalean 0 nodo bakoitzeko seme-alaba edo gehiago. 897 00:53:45,260 --> 00:53:47,320 Eta jargon, batzuk hemen Argazki hau ikusten duzun 898 00:53:47,320 --> 00:53:50,630 ertzak kids gutxi edo grandkids edozein 899 00:53:50,630 --> 00:53:52,330 duten geziak ez da irteten, 900 00:53:52,330 --> 00:53:55,070 duten deiturikoak hostoak, eta barrutik edonork 901 00:53:55,070 --> 00:53:58,790 barne-nodo bat da; ezer lerro horiek batera deitu dezakezu. 902 00:53:58,790 --> 00:54:01,430 Baina egitura hori nahiko ohikoa da. Hau da, apur bat arbitrarioa. 903 00:54:01,430 --> 00:54:04,930 Seme-alabaren bat behar dugu ezkerretara, hiru seme-alabak eskubidea dugu, 904 00:54:04,930 --> 00:54:06,830 behean bi seme-alabak utzi. 905 00:54:06,830 --> 00:54:10,740 Beraz, tamaina ezberdineko zuhaitzak izan dezakegu, baina gauzak normalizatzeko hasten badugu, 906 00:54:10,740 --> 00:54:15,330 eta hau gogoratzen dezakezu Patrick en bideo labur bat aurreko bilaketa bitarra 907 00:54:15,330 --> 00:54:19,490 online, bilaketa bitarra ez da array bat abian 908 00:54:19,490 --> 00:54:21,410 edo paper-pieza arbel bat. 909 00:54:21,410 --> 00:54:25,490 Demagun nahi duzun zure zenbakiak gordetzeko datu-egitura sofistikatuagoa. 910 00:54:25,490 --> 00:54:27,680 Hau atsegin zuhaitz bat sor dezakezu. 911 00:54:27,680 --> 00:54:35,290 C deklaratu nodo bat izan duzu, eta nodo horren barruan, gutxienez bi elementu izan ditzake. 912 00:54:35,290 --> 00:54:39,470 Gorde nahi duzun zenbaki bat da, eta bestea ondo, beste bat gehiago behar dugu. 913 00:54:39,470 --> 00:54:41,540 Bestea, bere seme-alaba da. 914 00:54:41,540 --> 00:54:45,150 Hortaz, hona hemen datu-egitura bat da. Oraingo honetan, nodo bat bezala definitzen da zenbaki bat gordetzeko n 915 00:54:45,150 --> 00:54:49,060 eta, ondoren, bi erakusleak; ezker seme-alaba eta seme-alabak eskubidea. 916 00:54:49,060 --> 00:54:52,100 Eta ez dira arbitrarioak. Zer da Zuhaitz honi buruz interesgarria? 917 00:54:52,100 --> 00:55:00,550 >> Zer nola ezarritako dugu hau edo nola Patrick ezarri du bere bideo eredua? 918 00:55:00,550 --> 00:55:02,790 Mota da bistako Ordenatzeko batzuk hemen, 919 00:55:02,790 --> 00:55:04,460 baina zer simple araua? Bai? 920 00:55:04,460 --> 00:55:08,350 [Ikasleentzako erantzuna, ulertezina] 921 00:55:08,350 --> 00:55:12,040 Perfect. Honetan, labur-labur bada, ezkerreko zenbakiak txiki ikusten duzu, 922 00:55:12,040 --> 00:55:14,690 big ezkerreko zenbakiak, baina hori egia nodo bakoitzeko. 923 00:55:14,690 --> 00:55:20,370 Nodo bakoitzean, haren ezkerreko seme baino gutxiago, eta bere eskubidea seme-alaba baino handiagoa. 924 00:55:20,370 --> 00:55:25,210 Zer da hau esan nahi du, gaur egun, datu-egitura hau bilatu nahi dut, adibidez, 44 zenbakia, 925 00:55:25,210 --> 00:55:29,320 Erro hasi behar dut, baita horiek datuak egitura konplexuagoa guztiak 926 00:55:29,320 --> 00:55:31,910 erakuslea besterik ez dugu gauza bat, hasiera-hasieratik. 927 00:55:31,910 --> 00:55:35,010 Eta, kasu honetan, hasiera-hasieratik root da. Ez da ezker amaieran, 928 00:55:35,010 --> 00:55:39,530 Egitura hau root da. Beraz, ikusten dut hemen 55 eta 44 bila nabil. 929 00:55:39,530 --> 00:55:41,430 Zein norabidean joan nahi dut? 930 00:55:41,430 --> 00:55:45,680 Beno, ezkerrera joan nahi dut, jakina, eskubidea delako handiegia izango. 931 00:55:45,680 --> 00:55:49,050 Beraz nabarituko hemen, kontzeptualki erdia zuhaitz Tajadura moduko Oraindik 932 00:55:49,050 --> 00:55:51,700 ari zaren zeren eta ez baitira inoiz eskuinaldean behera egingo. 933 00:55:51,700 --> 00:55:55,410 Beraz, gaur egun, 55-tik 33-I. Too txiki zenbaki bat da. 934 00:55:55,410 --> 00:56:01,590 44 naiz bila, baina, gaur egun, 44 Zuhaitz hau bada, joan ahal izateko, jakina, I eskubidea ezagutzen dut. 935 00:56:01,590 --> 00:56:04,460 Beraz, berriro ere, erdia zuhaitz inausketa naiz. 936 00:56:04,460 --> 00:56:06,780 Pretty askoz ere berdin-berdina, eta kontzeptualki telefono-liburua da. 937 00:56:06,780 --> 00:56:09,510 Berdina da, zer egin dugu arbelean paperak, 938 00:56:09,510 --> 00:56:13,940 baina benetan guri aukera ematen duen egitura bat sofistikatuagoa da 939 00:56:13,940 --> 00:56:16,880 algoritmoaren diseinua hau zatitzeko eta konkistatzeko 940 00:56:16,880 --> 00:56:19,420 eta hain zuzen ere, egitura hau atsegin traversing - whoops. 941 00:56:19,420 --> 00:56:22,870 - Bezalako egitura bat Traversing, non da "Joan Modu horretan edo bide horretatik joan," 942 00:56:22,870 --> 00:56:26,870 kodea duten tolestuta your mind lehenengo atalean aplikatzeko guztiak esan nahi du 943 00:56:26,870 --> 00:56:31,270 edo haren bidez etxean oinez, bilaketa bitarra, errekurtsio edo iterazio erabiliz, 944 00:56:31,270 --> 00:56:35,060 lepoan mina da. Aurkitu erdiko elementua, eta ondoren, egin zure biribiltze gora edo behera. 945 00:56:35,060 --> 00:56:39,230 >> Ez dago edertasun bat da hau erabili ahal izango dugu orain delako errekurtsio berriz, 946 00:56:39,230 --> 00:56:43,760 baina askoz ere garbian. Izan ere, 55 zenbakia baduzu eta 44 aurkitu nahi baduzu, 947 00:56:43,760 --> 00:56:48,450 kasu honetan, ezkerrera joan gero, zer egin nahi duzu? Zehatza berean algoritmoa exekutatu nahiko duzu. 948 00:56:48,450 --> 00:56:51,560 Nodoaren balioa egiaztatu, ondoren, ezkerrera edo eskuinera joan beharko duzu. 949 00:56:51,560 --> 00:56:53,670 Ondoren, nodo balioa egiaztatzeko, joan ezkerrera edo eskuinera. 950 00:56:53,670 --> 00:56:56,710 Hori ederki errekurtsio egokitzen. 951 00:56:56,710 --> 00:57:00,920 Beraz, nahiz eta iraganean egin dugun errekurtsio inplikatuz adibide batzuk nahiko arbitrarioa 952 00:57:00,920 --> 00:57:03,430 ez zuela behar errekurtsiboa da, datuak stuctures 953 00:57:03,430 --> 00:57:07,820 batez ere, zuhaitz, arazo bat hartzeko ideia honen aplikazio ezin hobea da, 954 00:57:07,820 --> 00:57:12,920 shrinking, eta, ondoren, mota bereko, baina txikiagoa, programa konpontzeko. 955 00:57:12,920 --> 00:57:14,590 >> Beraz, ez dago beste datuak aurkeztu ahal izango dugu, egitura. 956 00:57:14,590 --> 00:57:18,760 Hau da Lehen begiratuan críptica bilatzeko diseinatu da, baina hau ez da harrigarria. 957 00:57:18,760 --> 00:57:25,090 Beraz, trie, trie den hitza berreskuratz heredatu izeneko datu-egitura bat da, 958 00:57:25,090 --> 00:57:30,210 eta hori ez da ahoskatzen berriro saiatu-val, baina horrek zer deiak munduko gauza horiek. Saiatuko da. T-r-i-e. 959 00:57:30,210 --> 00:57:35,190 Nolabaiteko egitura zuhaitz bat da, baina trie batean nodo bakoitzean 960 00:57:35,190 --> 00:57:41,280 agertzen da zer izan nahi du? Eta hau da, pixka bat engainagarria da abbreviated mota baita. 961 00:57:41,280 --> 00:57:45,960 Baina trie honetan nodo bakoitzean bezalakoa da benetan array bat dirudi. 962 00:57:45,960 --> 00:57:48,840 Eta nahiz eta diagrama honen egileak ez du erakusten, 963 00:57:48,840 --> 00:57:54,130 kasu honetan, trie hau datu egitura horren helburua bizitza hitz gordetzeko 964 00:57:54,130 --> 00:57:57,330 A-l-i-c-e edo B-o-b bezala. 965 00:57:57,330 --> 00:58:02,480 Eta modu hau azalera datuak Alice eta Bob eta Charlie eta Anita eta abar 966 00:58:02,480 --> 00:58:06,970 array bat erabiltzen du horren bidez Alice trie batean gordetzeko, 967 00:58:06,970 --> 00:58:09,820 array bat itxura erro-nodoa hasiko dugu, 968 00:58:09,820 --> 00:58:12,080 eta azkarra notazioan idatzita dago. 969 00:58:12,080 --> 00:58:15,070 Egileak zehazten ez abcdefg ez duten izenak ez delako. 970 00:58:15,070 --> 00:58:19,150 M eta P eta T erakutsi dute, baina kasu honetan, 971 00:58:19,150 --> 00:58:22,780 dezagun Alice eta Bob eta Charlie urruntzen diren izen batzuk hemen. 972 00:58:22,780 --> 00:58:25,670 Maxwell diagrama hau da, benetan. 973 00:58:25,670 --> 00:58:29,570 Beraz, nola egin egilearen dendan M-a-x-w-e-l-l? 974 00:58:29,570 --> 00:58:36,990 Zuen erroko nodoa hasi zen, eta joan [M], beraz, gutxi gorabehera 13, array kokapena 13an. 975 00:58:36,990 --> 00:58:40,750 Gero, hortik aurrera, ez da erakuslea da. 976 00:58:40,750 --> 00:58:42,760 Erakuslea A array beste liderra. 977 00:58:42,760 --> 00:58:47,880 Hortik aurrera egileak array horretan indexatuta kokapena A, honelako han goiko ezkerreko 978 00:58:47,880 --> 00:58:52,250 eta, ondoren, bere ondoren erakuslea duten array beste, 979 00:58:52,250 --> 00:58:55,460 eta erakuslea kokapena X. joan 980 00:58:55,460 --> 00:58:59,840 Ondoren, array hurrengo kokapena W, E, L, L, eta abar, 981 00:58:59,840 --> 00:59:03,090 eta, azkenik, dezagun benetan saiatu irudi bat jarri behar da hau. 982 00:59:03,090 --> 00:59:05,380 Zer da kode itxura nodo bat? 983 00:59:05,380 --> 00:59:11,820 Nodo bat trie bat gehiago nodo erakusleak array bat dauka. 984 00:59:11,820 --> 00:59:16,090 Baina ez da balio boolearra mota batzuk ere lortu izan da, gutxienez ezartzeko. 985 00:59:16,090 --> 00:59:18,770 Deitu du is_word gertatuko dut. Zergatik? 986 00:59:18,770 --> 00:59:22,670 Maxwell ari txertatu, ez delako ari zaren txertatu 987 00:59:22,670 --> 00:59:25,300 datu egitura honetan sartu ezer. 988 00:59:25,300 --> 00:59:27,480 Ez ari zara M. idazten ari zara X. idazten 989 00:59:27,480 --> 00:59:30,240 Guztiak egiten ari zaren erakusleak jarraituz. 990 00:59:30,240 --> 00:59:33,360 M, ondoren adierazten A erakuslea adierazten duen erakuslea, 991 00:59:33,360 --> 00:59:36,310 ondoren erakuslea X, W, E, L, L adierazten duen, 992 00:59:36,310 --> 00:59:41,950 baina zer amaieran egin behar duzun sort joan, egiaztatu da, kokaleku honetan iritsi naiz. 993 00:59:41,950 --> 00:59:45,560 Ez zen hitz bat eta ondorioz hemen datuak egitura. 994 00:59:45,560 --> 00:59:48,190 >> Beraz, zer trie bat da, benetan betetako eta egileak aukeratu irudikatzeko 995 00:59:48,190 --> 00:59:51,880 triangelu txiki terminuses horiek. 996 00:59:51,880 --> 00:59:56,470 Hau, besterik gabe esan nahi du, hain zuzen, triangelu hau da hemen, egia balio boolearra honetan 997 00:59:56,470 --> 00:59:59,200 esan nahi du, joan atzeraka zuhaitza 998 00:59:59,200 --> 01:00:02,420 izeneko Maxwell honetan hitz bat esan nahi du. 999 01:00:02,420 --> 01:00:04,870 Baina hitza foo, esate baterako, 1000 01:00:04,870 --> 01:00:07,970 ez da, erroko nodoa dut hemen goian delako, zuhaitza 1001 01:00:07,970 --> 01:00:14,030 Ez dago f erakuslea, o erakuslea ez, o erakuslea ez da. Foo hiztegi hau ez da izen bat. 1002 01:00:14,030 --> 01:00:22,460 Baina, aitzitik, Turing, t-u-r-i-n-g. Berriz ere, ez nuen gorde t edo u edo r edo i edo n edo g. 1003 01:00:22,460 --> 01:00:29,820 Baina denda nuen datuak egitura honetan modu egia behera hemen nodo honetan balio bat zuhaitza 1004 01:00:29,820 --> 01:00:33,030 balio boolearra hori is_word ezartzen egia. 1005 01:00:33,030 --> 01:00:35,740 Beraz, trie mota hau meta egitura oso interesgarria da, 1006 01:00:35,740 --> 01:00:39,810 non ez zaren benetan hitzak gordetzeko beraiek hiztegi mota hau. 1007 01:00:39,810 --> 01:00:45,100 Argi izan, besterik ez zaren bai edo ez gordetzeko, ez dago bueltarik, hemen hitz bat da. 1008 01:00:45,100 --> 01:00:46,430 >> Orain zer inplikazioa? 1009 01:00:46,430 --> 01:00:51,120 150.000 hitz memorian gorde nahian ari zaren bada, hiztegi bat 1010 01:00:51,120 --> 01:00:53,400 zerbait lotuta zerrenda bezala erabiliz, 1011 01:00:53,400 --> 01:00:56,870 zure zerrenda lotutako 150.000 nodoen zoazen. 1012 01:00:56,870 --> 01:01:00,250 Eta hitz horietako bat aurkitzeko alfabetikoki O (n) denbora har dezake. 1013 01:01:00,250 --> 01:01:04,370 Lineala denbora. Baina kasu hemen trie bat, 1014 01:01:04,370 --> 01:01:09,210 zer hitz bat aurkitzeko denbora da? 1015 01:01:09,210 --> 01:01:17,390 Bihurtzen da hemen, edertasuna da, nahiz eta 149.999 dagoeneko hiztegi hau hitz, 1016 01:01:17,390 --> 01:01:20,170 datu-egitura hau ezarri 1017 01:01:20,170 --> 01:01:25,560 zenbat denbora ez aurkitzeko edo gehiago pertsona bat sartu horretan, Alice bezala, Alice hartu? 1018 01:01:25,560 --> 01:01:30,640 Beno, 5 baino ez da, agian 6 amaierako karaktere urratsak. 1019 01:01:30,640 --> 01:01:32,880 Egitura izenak beste presense delako 1020 01:01:32,880 --> 01:01:35,340 Alice txertatu modu ez iritsi. 1021 01:01:35,340 --> 01:01:39,640 Gainera, Alice aurkitzeko daude 150.000 hitz behin hiztegia 1022 01:01:39,640 --> 01:01:41,960 ez zure Alice aurkitzeko modu guztietan, 1023 01:01:41,960 --> 01:01:46,880 Alice dagoelako. . . . . Hemen, boolear bat aurkitu dudalako. 1024 01:01:46,880 --> 01:01:50,920 Eta ez da boolearra egia, orduan Alice ez bada hitz datu-egitura honetan. 1025 01:01:50,920 --> 01:01:56,220 Beste era batera esanda, gauzak aurkitzeko eta sartzean gauza berri honetan sartzeko denbora 1026 01:01:56,220 --> 01:02:01,920 datuak trie O egitura - ez da n. 1027 01:02:01,920 --> 01:02:05,730 Alice on 150.000 pertsona presense ez du eraginik izango denez, badirudi. 1028 01:02:05,730 --> 01:02:11,560 Hargatik k, non k ingelesez hitz baten gehienezko luzera 1029 01:02:11,560 --> 01:02:14,050 hau da, normalean ez da gehiago 20-zerbait karaktere baino. 1030 01:02:14,050 --> 01:02:17,940 Beraz, k konstante bat da. Holy Grail Beraz, orain badirudi 1031 01:02:17,940 --> 01:02:26,000 da, trie txertatzen denbora etengabeko bilaketak, ezabaketen. 1032 01:02:26,000 --> 01:02:29,170 Dagoeneko egituran gauzak kopurua delako, 1033 01:02:29,170 --> 01:02:32,600 horiek ez dira, nahiz eta fisikoki ez dago. Berriz ere, ari dira ordenatzeko hautatuta off, bai ala ez, 1034 01:02:32,600 --> 01:02:35,050 eragina ez du bere etorkizuneko denbora exekutatzen ari. 1035 01:02:35,050 --> 01:02:37,940 >> Baina ez da harrapaketa bat eskuratu, bestela genuke ez alferrik galtzen hainbeste denbora 1036 01:02:37,940 --> 01:02:41,460 horiek beste datu guztiak egitura, azkenik, sekretu bat amazing. 1037 01:02:41,460 --> 01:02:46,410 Beraz, zer prezio ordaindu dira handitasuna hau lortu nahi dugu hemen? Space. 1038 01:02:46,410 --> 01:02:49,010 Gauza hau da masiboak. Eta arrazoia, egilearen 1039 01:02:49,010 --> 01:02:52,400 ez aurkeztu hemen, konturatu array itxura gauza horiek guztiak, 1040 01:02:52,400 --> 01:02:55,400 ez zuen marraztu zuhaitzaren gainerako, trie-gainerako 1041 01:02:55,400 --> 01:02:58,060 Oraindik ez dute besterik ez delako Istorioa garrantzitsua. 1042 01:02:58,060 --> 01:03:01,870 Baina nodo horiek guztiak dira super zabal, eta zuhaitza nodo guztietan hartzen du 1043 01:03:01,870 --> 01:03:07,780 26 edo, benetan, 27 karaktere izan daiteke, kasu honetan apostrophe, espazio dudalako barne 1044 01:03:07,780 --> 01:03:09,980 beraz, apostrophized hitz ezin izan dugu. 1045 01:03:09,980 --> 01:03:14,450 Kasu honetan, zabala array dira. Beraz, nahiz eta ez ari picutured 1046 01:03:14,450 --> 01:03:18,190 hau RAM zenbatekoa masiboa bat hartzen du. 1047 01:03:18,190 --> 01:03:20,670 Zein fina izan daiteke, especilly hardware modernoan, 1048 01:03:20,670 --> 01:03:25,650 baina hori denerako. Denbora gutxiago dugu, leku gehiago gastatu. 1049 01:03:25,650 --> 01:03:28,580 Beraz, non da hori guztia? 1050 01:03:28,580 --> 01:03:32,640 Beno, egin dezagun utzi hemen ikus-en. 1051 01:03:32,640 --> 01:03:39,510 Egin dezagun salto bat lasaia hau hemen. 1052 01:03:39,510 --> 01:03:43,450 >> Sinetsi edo ez, askoz ere fun C gisa denbora pixka bat izan da, gaur egun, 1053 01:03:43,450 --> 01:03:48,130 seihilekoan bertan gauza gehiago moderno trantsizio time puntu iristen ari gara. 1054 01:03:48,130 --> 01:03:50,950 Buruzko goi mailako Things. Eta nahiz eta hurrengo bi aste, nahiz eta 1055 01:03:50,950 --> 01:03:54,580 oraindik ere jarraituko dugu geure burua, erakusleak eta memoria kudeaketa munduan murgiltzeko 1056 01:03:54,580 --> 01:03:57,210 horrek batera eraiki ahal izango dugu, orduan on erosotasuna lortzeko, 1057 01:03:57,210 --> 01:04:01,270 azken jokoa da, azken finean, aurkeztu ironikoki, ez da hizkuntza hau. 1058 01:04:01,270 --> 01:04:03,330 Gastatzen dugu, 10 minutu HTML buruz hitz egin bezala. 1059 01:04:03,330 --> 01:04:05,950 HTML da markaketa dauka hizkuntza bat da, eta zer da markup language 1060 01:04:05,950 --> 01:04:10,220 parentesi artean irekia eta itxia parentesi artean esan 'hau bold' serie horiek 1061 01:04:10,220 --> 01:04:12,000 'Letra etzanez honetan' egin zentratua hau '. 1062 01:04:12,000 --> 01:04:14,250 Ez da hori intelektualki interesgarria,, baina super erabilgarria da. 1063 01:04:14,250 --> 01:04:16,650 Eta, zalantzarik gabe da nonahiko egun hauetan. 1064 01:04:16,650 --> 01:04:19,450 Baina zer HTML munduko buruz indartsua, eta web programazioa, oro har, 1065 01:04:19,450 --> 01:04:25,910 gauza dinamikoa eraikitzeko; Python edo PHP edo Ruby edo Java edo C # bezalako hizkuntzetan kodea idatziz. 1066 01:04:25,910 --> 01:04:30,360 Benetan, edozein zuk aukeratutako hizkuntzan da, eta HTML dinamikoki sortzeko. 1067 01:04:30,360 --> 01:04:32,960 Zerbait izeneko CSS dinamikoki sortzen. 1068 01:04:32,960 --> 01:04:35,810 Kaskadako estilo-orriak, hau da, estetika buruz ere. 1069 01:04:35,810 --> 01:04:41,360 Eta, beraz, nahiz eta, gaur egun, ezagutzen Google.com bezalako web batzuk I joan bada, 1070 01:04:41,360 --> 01:04:46,100 ikusteko eta, developer, ikusi, agian egin duzun aurretik joan I, 1071 01:04:46,100 --> 01:04:49,800 baina iturri bat ikusteko joan, stuff hau seguruenik itxura polita críptica. 1072 01:04:49,800 --> 01:04:55,320 Baina hau azpiko kodea duten Google.com inplementatzen da. 1073 01:04:55,320 --> 01:04:57,940 Frontend On. Eta benetan hori guztia Fluffy estetika stuff da. 1074 01:04:57,940 --> 01:05:01,740 Hau CSS da hemen. Mantentzeko I scrolling badu behera, kolore-kodetua stuff batzuk lortuko dugu. 1075 01:05:01,740 --> 01:05:06,890 Hau da, HTML. Google-ren kodea gaizki baten itxura du, baina benetan I ireki beste leiho bat. 1076 01:05:06,890 --> 01:05:09,380 egitura batzuk ikus ahal izango dugu hau. 1077 01:05:09,380 --> 01:05:12,640 Ireki dut hau bada, konturatu hemen, apur bat gehiago irakurgarria da. 1078 01:05:12,640 --> 01:05:16,850 Etiketa honek luzea aurretik goaz, [hitza] tag bat da, 1079 01:05:16,850 --> 01:05:23,520 HTML, burua, gorputza, div, gidoia, testu-eremuan, span, zentratua, div. 1080 01:05:23,520 --> 01:05:26,770 Eta hori ere críptica begira ordenatzeko Lehen begiratuan, 1081 01:05:26,770 --> 01:05:30,890 baina nahaspila hau guztia, zenbait ereduak, eta eredu Errepikagarria 1082 01:05:30,890 --> 01:05:33,850 beraz, behin oinarriak lortuko dugu behera, hau atsegin kodea idatzi ahal izango duzu 1083 01:05:33,850 --> 01:05:37,550 eta, ondoren, manipulatu, oraindik beste hizkuntza bat erabiliz, deitzen JavaScript kodea. 1084 01:05:37,550 --> 01:05:40,440 Eta Ikusteko Javascript-a nabigatzaile baten barruan doan hizkuntza 1085 01:05:40,440 --> 01:05:44,380 gaur egun Harvard ikastaroak, erabiltzen dugun ikastaroaren merkataritza-tresna Google maps erabiltzen duen 1086 01:05:44,380 --> 01:05:48,660 dinamismo sorta osoa emateko, Facebook da egoera-eguneratzeak berehalako erakusteko, 1087 01:05:48,660 --> 01:05:51,430 Twitter erabiltzen erakusteko tweets berehala. 1088 01:05:51,430 --> 01:05:53,820 Hori guztia hasiko dugu geure burua murgildu sartu egingo 1089 01:05:53,820 --> 01:05:57,190 Baina iritsi, Internet buruzko zerbait pixka bat ulertu behar dugu. 1090 01:05:57,190 --> 01:06:01,130 Clip hau hemen Minutu bat besterik ez da, eta gaur egun, hau da, hain zuzen ere bere gain hartzen dezagun, 1091 01:06:01,130 --> 01:06:08,380 Internet zer etorri teaser gisa lan egiten du. Ematen dizut "Sare Warriors". 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Slow koru musika ♫] 1093 01:06:14,720 --> 01:06:20,450 [Gizonezkoa narratzailea] zen mezu bat zuen. 1094 01:06:20,450 --> 01:06:23,770 Protokolo bat bere guztiak. 1095 01:06:23,770 --> 01:06:37,270 [♫ Faster musika elektronikoa ♫] 1096 01:06:37,270 --> 01:06:41,330 , Suebakien cool mundu bat etorri zen, routers uncaring 1097 01:06:41,330 --> 01:06:45,690 eta arriskuak urrun heriotza baino okerragoa. 1098 01:06:45,690 --> 01:06:55,400 Azkarra da. Indartsua da. TCP / IP zuen, eta berak zure helbidea lortu. 1099 01:06:55,400 --> 01:06:59,250 Sarean Warriors. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Datorren astean, orduan. Internet. Web programazioa. Hau CS50 da. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]