1 00:00:00,000 --> 00:00:11,860 2 00:00:11,860 --> 00:00:13,120 >> Parolanto 1: Bone, do ni estas dorso. 3 00:00:13,120 --> 00:00:14,480 Bonvenon CS50. 4 00:00:14,480 --> 00:00:16,510 Jen la fino de semajno sep. 5 00:00:16,510 --> 00:00:20,200 Do memoru ke lasta fojo, ni komencis rigardas iomete pli kompleksa 6 00:00:20,200 --> 00:00:21,100 datumstrukturoj. 7 00:00:21,100 --> 00:00:25,110 De supre ĝis nun, ĉio ni havis vere je nia dispono, estis jena: tabelo. 8 00:00:25,110 --> 00:00:29,340 >> Sed antaŭ ol ni forĵeti la tabelo kiel ne cxion, kio interesa, kiu efektive 9 00:00:29,340 --> 00:00:33,570 efektive estas, kiaj estas kelkaj el la pluses de tiu simpla datumoj 10 00:00:33,570 --> 00:00:34,560 strukturon tiel multe? 11 00:00:34,560 --> 00:00:36,110 Kio estas tio bona? 12 00:00:36,110 --> 00:00:39,450 Ĝis nun, kiel ni vidis? 13 00:00:39,450 --> 00:00:42,540 Kion vi havas? 14 00:00:42,540 --> 00:00:44,028 Nenio. 15 00:00:44,028 --> 00:00:45,020 >> Lernanto: [inaudibles]. 16 00:00:45,020 --> 00:00:45,395 >> Parolanto 1: Kio estas tio? 17 00:00:45,395 --> 00:00:46,410 >> Lernanto: [inaudibles]. 18 00:00:46,410 --> 00:00:47,000 >> Parolanto 1: Fiksa grandeco. 19 00:00:47,000 --> 00:00:51,260 Bone, do kial estas fiksita grandeco bona kvankam? 20 00:00:51,260 --> 00:00:53,180 >> Lernanto: [inaudibles]. 21 00:00:53,180 --> 00:00:56,240 >> Parolanto 1: Bone, do ĝi estas efika en la senso ke oni povas atribui al 22 00:00:56,240 --> 00:01:00,070 fiksa sumo de spaco, kiu espereble Estas ĝuste tiel 23 00:01:00,070 --> 00:01:01,180 spaco kiel vi volas. 24 00:01:01,180 --> 00:01:02,720 Por ke povus esti absolute a alpago. 25 00:01:02,720 --> 00:01:06,530 >> Kio estas alia ĉe flanko de tabelo? 26 00:01:06,530 --> 00:01:07,610 Jes? 27 00:01:07,610 --> 00:01:08,750 >> Lernanto: [inaudibles]. 28 00:01:08,750 --> 00:01:09,550 >> Parolanto 1: Ĉiuj - sorry? 29 00:01:09,550 --> 00:01:11,270 >> Lernanto: [inaudibles]. 30 00:01:11,270 --> 00:01:13,620 >> Parolanto 1: Ĉiuj skatoloj en memoro aŭ apud la alia. 31 00:01:13,620 --> 00:01:15,220 Kaj tio estas utila - kial? 32 00:01:15,220 --> 00:01:15,970 Tio estas tute vera. 33 00:01:15,970 --> 00:01:18,611 Sed kiel ni povas ekspluati kiun veron? 34 00:01:18,611 --> 00:01:21,500 >> Lernanto: [inaudibles]. 35 00:01:21,500 --> 00:01:24,490 >> Parolanto 1: Ekzakte, ni povu kontroli kiu kie ĉiu estas nur sciante 36 00:01:24,490 --> 00:01:28,560 unu adreso, nome la adreso de la unua bitoko de tiu eron de memoro. 37 00:01:28,560 --> 00:01:30,420 Aŭ en la kazo de la kordo, la adreso de la unua 38 00:01:30,420 --> 00:01:31,460 char en tiu linio. 39 00:01:31,460 --> 00:01:33,330 Kaj de tie, ni povas trovi la finon de la kordo. 40 00:01:33,330 --> 00:01:35,710 Ni povas trovi la dua elemento, la tria elemento, kaj tiel plu. 41 00:01:35,710 --> 00:01:38,740 >> Kaj tial la ornama metodo de priskribi ke trajto estas ke arrays doni al ni 42 00:01:38,740 --> 00:01:40,020 hazarda aliron. 43 00:01:40,020 --> 00:01:44,330 Nur uzante la kvadrata krampo skribmaniero kaj numero, vi povas salti al 44 00:01:44,330 --> 00:01:48,070 specifa elemento en la tabelo en konstanta tempo, granda O 45 00:01:48,070 --> 00:01:49,810 de unu, por tiel diri. 46 00:01:49,810 --> 00:01:51,080 >> Sed jam pasis kelkaj downsides. 47 00:01:51,080 --> 00:01:53,110 Kio tabelo ne tre facile? 48 00:01:53,110 --> 00:01:55,810 49 00:01:55,810 --> 00:01:57,170 Kio estas tio Ne bona? 50 00:01:57,170 --> 00:01:58,810 >> Lernanto: [inaudibles]. 51 00:01:58,810 --> 00:01:59,860 >> Parolanto 1: Kio estas tio? 52 00:01:59,860 --> 00:02:00,530 >> Lernanto: [inaudibles]. 53 00:02:00,530 --> 00:02:01,460 >> Parolanto 1: Pligrandigi en grandeco. 54 00:02:01,460 --> 00:02:04,800 Do la downsides de la tabelo estas precize la malo de kion la 55 00:02:04,800 --> 00:02:05,540 upsides estas. 56 00:02:05,540 --> 00:02:07,610 Do unu el la downsides estas ke ĝi estas fiksa grandeco. 57 00:02:07,610 --> 00:02:09,400 Do vi ne povas vere kreski ĝin. 58 00:02:09,400 --> 00:02:13,510 Vi povas reallocate pli grandan parton de memoro, kaj poste movi la malnovaj elementoj 59 00:02:13,510 --> 00:02:14,460 en la nova tabelo. 60 00:02:14,460 --> 00:02:18,060 Kaj poste libera la malnova tabelo, por Ekzemple, uzante malloc aŭ similan 61 00:02:18,060 --> 00:02:21,180 funkcio nomita realloc, kiu reallocates memoro. 62 00:02:21,180 --> 00:02:25,490 >> Realloc, kiel flanken, provas doni al vi memoro kiu estas apud la tabelo 63 00:02:25,490 --> 00:02:26,610 ke vi jam havas. 64 00:02:26,610 --> 00:02:28,740 Sed ĝi povus movi aĵojn ĉirkaŭ aro. 65 00:02:28,740 --> 00:02:30,710 Sed en mallonga, tio estas multekosta, ĉu ne? 66 00:02:30,710 --> 00:02:33,440 Ĉar se vi havas eron de memoro de tiun grandecon, sed vi vere volas unu 67 00:02:33,440 --> 00:02:36,710 de tiu grandeco, kaj vi volas konservi la originalaj elementoj, vi havas 68 00:02:36,710 --> 00:02:40,510 proksimume lineara tempo kopiado procezo kiu bezonas por pasi de 69 00:02:40,510 --> 00:02:41,900 malnova tabelo al nova. 70 00:02:41,900 --> 00:02:44,630 Kaj la realo estas demandi la mastruma sistemo denove kaj denove kaj 71 00:02:44,630 --> 00:02:48,340 denove por grandaj pecoj da memoro povas komenci kostos vin iom da tempo ankaŭ. 72 00:02:48,340 --> 00:02:52,250 Do ĝi estas tiel benon kaj malbenon en maski, la fakto ke tiuj arrays 73 00:02:52,250 --> 00:02:53,860 estas de fiksa grandeco. 74 00:02:53,860 --> 00:02:56,790 Sed se ni enkonduki anstataŭ io kiel tiu, kiun ni nomas kunligita 75 00:02:56,790 --> 00:03:00,580 listo, ni preni kelkajn upsides kaj kelkaj downsides tie ankaŭ. 76 00:03:00,580 --> 00:03:05,780 >> Do ligitaj listo estas simple datumoj strukturo formita de C structs en ĉi 77 00:03:05,780 --> 00:03:09,850 kazo, kie struct, revokon, estas nur ujo por unu aŭ pli specifajn 78 00:03:09,850 --> 00:03:11,100 tipojn de variabloj. 79 00:03:11,100 --> 00:03:16,110 En ĉi tiu kazo, kion fari la datumtipoj ŝajnas esti ene de la struct ke 80 00:03:16,110 --> 00:03:17,600 lasta tempo ni nomas nodon? 81 00:03:17,600 --> 00:03:19,380 Ĉiu de ĉi tiuj ortanguloj estas nodo. 82 00:03:19,380 --> 00:03:22,660 Kaj ĉiu el la plej malgrandaj ortanguloj ene de ĝi estas datumtipo. 83 00:03:22,660 --> 00:03:25,300 Kio tipoj ni diru ili estis lunde? 84 00:03:25,300 --> 00:03:26,478 Jes? 85 00:03:26,478 --> 00:03:27,870 >> Lernanto: [inaudibles]. 86 00:03:27,870 --> 00:03:30,721 >> Parolanto 1: A ŝanĝiĝema kaj puntero, aŭ pli specife, la int, por n, 87 00:03:30,721 --> 00:03:32,180 kaj puntero malsupre. 88 00:03:32,180 --> 00:03:35,360 Ambaŭ el tiuj hazarde estas 32 bitoj, ĉe Almenaŭ en komputilo kiel ĉi CS50 89 00:03:35,360 --> 00:03:37,980 Aparato, kaj tiel ili estas desegnita same en grandeco. 90 00:03:37,980 --> 00:03:42,260 >> Do kio estas uzanta la puntero kvankam por ŝajne? 91 00:03:42,260 --> 00:03:47,690 Kial aldoni tiun sagon nun kiam arrays estis tiom bela kaj pura kaj simpla? 92 00:03:47,690 --> 00:03:50,460 Kio estas la puntero fari por ni en ĉiu el tiuj nodoj? 93 00:03:50,460 --> 00:03:52,160 >> Lernanto: [inaudibles]. 94 00:03:52,160 --> 00:03:52,465 >> Parolanto 1: Ekzakte. 95 00:03:52,465 --> 00:03:54,120 Oni diras al vi kie la sekvanta oni estas. 96 00:03:54,120 --> 00:03:57,350 Do mi specon de uzi la analogio de uzante fadeno ordigi de 97 00:03:57,350 --> 00:03:59,180 enhebrar tiuj nodoj kune. 98 00:03:59,180 --> 00:04:01,760 Kaj tio estas ĝuste kion ni faras kun montriloj ĉar ĉiu el tiuj 99 00:04:01,760 --> 00:04:06,360 pecoj de memoro povas aŭ ne esti Bela, malantaŭo al malantaŭo apogi 100 00:04:06,360 --> 00:04:09,500 ene de RAM, ĉar ĉiufoje kiam vi voki malloc dirante: donu al mi sufiĉe 101 00:04:09,500 --> 00:04:12,510 bajtoj por nova nodo, ĝi povus esti ĉi tie aŭ povus esti ĉi tie. 102 00:04:12,510 --> 00:04:13,120 Povus esti ĉi tie. 103 00:04:13,120 --> 00:04:13,730 Povus esti ĉi tie. 104 00:04:13,730 --> 00:04:14,640 Vi simple ne scias. 105 00:04:14,640 --> 00:04:17,880 >> Sed uzante indikoj en la adresojn de tiujn nodojn, vi povas punkto ilin 106 00:04:17,880 --> 00:04:22,370 kune en maniero kiu similas vide kiel lerta eĉ se ĉi tiuj aferoj estas 107 00:04:22,370 --> 00:04:26,770 ĉiuj etendis en viaj unu aŭ viaj du aŭ vian kvar gigabajtoj de RAM 108 00:04:26,770 --> 00:04:28,760 ene de via propra komputilo. 109 00:04:28,760 --> 00:04:33,230 >> Do la malavantaĝo, ĉar, de lerta kunligita estas kio? 110 00:04:33,230 --> 00:04:34,670 Kio estas prezo ni estas ŝajne pagi? 111 00:04:34,670 --> 00:04:36,010 >> Lernanto: [inaudibles]. 112 00:04:36,010 --> 00:04:36,920 >> Parolanto 1: Pli spaco, ĉu ne? 113 00:04:36,920 --> 00:04:39,340 Ni, en ĉi tiu kazo, duobligis la kvanto de spaco ĉar ni foriris 114 00:04:39,340 --> 00:04:43,500 de 32 bitoj por ĉiu nodo, por ĉiu int, tiel nun 64 bitoj ĉar ni devos 115 00:04:43,500 --> 00:04:45,050 teni ĉirkaŭ puntero tiel. 116 00:04:45,050 --> 00:04:48,860 Vi ricevas pli efikeco se via struct estas pli granda ol tiu simpla afero. 117 00:04:48,860 --> 00:04:52,020 Se vi efektive havas studento ene el kiuj estas paro de ŝnuroj por 118 00:04:52,020 --> 00:04:55,430 nomo kaj domo, eble oni ID numeron, eble iuj aliaj kampoj entute. 119 00:04:55,430 --> 00:04:59,000 >> Do se vi havas sufiĉe granda struct, tiam eble la kosto de la puntero estas 120 00:04:59,000 --> 00:05:00,010 Ne tia granda interkonsento. 121 00:05:00,010 --> 00:05:03,570 Tiu estas iom de angulo kazo en tiu ni stokante tia simpla komenca 122 00:05:03,570 --> 00:05:04,760 ene de la ligitaj listo. 123 00:05:04,760 --> 00:05:05,790 Sed la punkto estas la sama. 124 00:05:05,790 --> 00:05:08,230 Vi certe pasi pli memoro, sed vi fariĝas 125 00:05:08,230 --> 00:05:08,990 fleksebleco. 126 00:05:08,990 --> 00:05:12,280 Ĉar nun se mi volas aldoni elementon komence de ĉi tiu listo, 127 00:05:12,280 --> 00:05:14,340 Mi devas atribui nova nodo. 128 00:05:14,340 --> 00:05:17,180 Kaj mi devas nur ĝisdatigi tiujn sagoj iel por nur movas 129 00:05:17,180 --> 00:05:17,980 iuj indikoj ĉirkaŭe. 130 00:05:17,980 --> 00:05:20,580 >> Se mi volas enmeti ion en la Meze de la listo, mi ne devas 131 00:05:20,580 --> 00:05:24,410 puŝi ĉiuj flanken kiel ni faris en semajnoj estinteco kun niaj volontuloj kiuj 132 00:05:24,410 --> 00:05:25,700 reprezentis tabelo. 133 00:05:25,700 --> 00:05:29,470 Mi povas nur atribui nova nodo kaj tiam simple notas la sagoj en 134 00:05:29,470 --> 00:05:32,290 malsamaj direktoj ĉar ĝi ne devas resti en reala 135 00:05:32,290 --> 00:05:35,670 memoro veran linion kiel mi desegnis ĝin ĉi tie en la ekrano. 136 00:05:35,670 --> 00:05:38,400 >> Kaj poste laste, se vi volas enmeti ion al la fino de la listo, estas 137 00:05:38,400 --> 00:05:39,210 eĉ pli facila. 138 00:05:39,210 --> 00:05:43,320 Ĉi tiu estas speco de arbitra skribmaniero, sed 34 La pointer, prenu konjekton. 139 00:05:43,320 --> 00:05:46,710 Kiu estas la valoro de lia puntero plej verŝajne desegnita ia kiel malnova 140 00:05:46,710 --> 00:05:47,700 lernejo anteno tie? 141 00:05:47,700 --> 00:05:48,920 >> Lernanto: [inaudibles]. 142 00:05:48,920 --> 00:05:49,900 >> Parolanto 1: Estas probable nula. 143 00:05:49,900 --> 00:05:52,710 Kaj ĝuste tiu estas unu aŭtoro reprezento de nula. 144 00:05:52,710 --> 00:05:56,310 Kaj estas nulaj ĉar vi absolute bezonas scii kie la fino de kunligita 145 00:05:56,310 --> 00:06:00,050 listo estas, ke vi observu sekva kaj sekvante kaj sekvante tiujn sagoj 146 00:06:00,050 --> 00:06:01,170 al iu rubo valoro. 147 00:06:01,170 --> 00:06:06,230 Do nula estos signifi ke ne estas pli nodoj al la rajto de la numero 34, 148 00:06:06,230 --> 00:06:07,200 en ĉi tiu kazo. 149 00:06:07,200 --> 00:06:10,270 >> Do ni proponas ke ni povas apliki tiu nodo en kodo. 150 00:06:10,270 --> 00:06:12,130 Kaj ni vidis tian de sintakso antaŭe. 151 00:06:12,130 --> 00:06:15,090 Typedef ĝuste difinas nova tipo por ni, donas al ni sinonimo kiel 152 00:06:15,090 --> 00:06:17,100 kordo estis por char *. 153 00:06:17,100 --> 00:06:21,030 En tiu kazo, ĝi tuj doni al ni stenografio skribmaniero por ke struct nodo 154 00:06:21,030 --> 00:06:24,010 povas anstataŭ simple esti skribita kiel nodo, kiu estas multe pli pura. 155 00:06:24,010 --> 00:06:25,360 Ĝi estas multe malpli verbose. 156 00:06:25,360 --> 00:06:30,080 >> Ene de nodo estas ŝajne int vokis n, kaj tiam struct nodo * 157 00:06:30,080 --> 00:06:34,670 kio signifas ekzakte kion ni deziris la sagojn por signifi, puntero al alia 158 00:06:34,670 --> 00:06:36,940 nodo de la ĝusta sama datumtipo. 159 00:06:36,940 --> 00:06:40,300 Kaj mi proponas ke ni povus efektivigi serĉo funkcio kiel tiu, kiu en 160 00:06:40,300 --> 00:06:41,890 unuavide povus ŝajni iom kompleksa. 161 00:06:41,890 --> 00:06:43,330 Sed ni vidu ĝin en kunteksto. 162 00:06:43,330 --> 00:06:45,480 >> Permesu al mi iri al la aparato tie. 163 00:06:45,480 --> 00:06:48,460 Permesu al mi malfermi dosieron nomatan Listo nula punkto h. 164 00:06:48,460 --> 00:06:53,950 Kaj tio nur enhavas la difinon ni nur vidis antaŭ momento por ĉi datumoj 165 00:06:53,950 --> 00:06:55,390 tipo nomita nodo. 166 00:06:55,390 --> 00:06:57,350 Do ni metis tiun en dot h dosiero. 167 00:06:57,350 --> 00:07:01,430 >> Kaj kiel flanken, kvankam ĉi programo kiu vi estas, por vidi estas 168 00:07:01,430 --> 00:07:05,410 Ne ĉiuj kiuj kompleksaj, estas ja konvencion kiam skribi programon por 169 00:07:05,410 --> 00:07:10,270 meti aĵojn kiel datumtipoj, tiri konstantoj kelkfoje, ene de via 170 00:07:10,270 --> 00:07:13,210 header dosiero kaj ne nepre en via C dosiero, certe kiam via 171 00:07:13,210 --> 00:07:17,370 programoj akiri pli kaj pli grandaj, tiel ke vi scias kie serĉi ambaŭ por 172 00:07:17,370 --> 00:07:20,840 dokumentaro en kelkaj kazoj, aŭ por fundamentojn kiel ĉi tio, la 173 00:07:20,840 --> 00:07:22,360 difino de iu tipo. 174 00:07:22,360 --> 00:07:25,680 >> Se mi nun malfermi liston nula punkto c, rimarki kelkajn aferojn. 175 00:07:25,680 --> 00:07:29,090 Ĝi inkludas kelkajn header files, plej pri kiu ni vidis antaŭe. 176 00:07:29,090 --> 00:07:31,980 Ĝi inkludas lia propra header dosiero. 177 00:07:31,980 --> 00:07:35,200 >> Kaj kiel flanken, kial tio estas duobla citilojn tie, kontraste al la angulo 178 00:07:35,200 --> 00:07:38,340 krampoj en la linio kiu Mi reliefigis tie? 179 00:07:38,340 --> 00:07:39,180 >> Lernanto: [inaudibles]. 180 00:07:39,180 --> 00:07:40,460 >> Parolanto 1: Jes tuj kiam estas loka dosiero. 181 00:07:40,460 --> 00:07:44,300 Do, se ĝi estas loka dosiero de via propra ĉi tie on line 15, ekzemple, oni uzas 182 00:07:44,300 --> 00:07:46,570 citiloj anstataŭ de la angled krampoj. 183 00:07:46,570 --> 00:07:48,270 >> Kaj jen estas ia interesa. 184 00:07:48,270 --> 00:07:51,830 Rimarku, ke mi deklaris tutmonda variablo en tiu programo on line 18 185 00:07:51,830 --> 00:07:55,910 nomita unue, la ideo esti ĉi estas tuj estos referenco al la unua 186 00:07:55,910 --> 00:07:59,190 nodo en mia ligillisto, kaj mi havas inicializado ĝin al nula, ĉar mi havas 187 00:07:59,190 --> 00:08:02,310 ne asignitaj ajna reala nodoj nur ankoraŭ. 188 00:08:02,310 --> 00:08:07,570 >> Do tio reprezentas, pictóricamente, kion ni vidis antaŭ momento en la bildo kiel 189 00:08:07,570 --> 00:08:10,090 ke puntero sur la fora forlasis flanko. 190 00:08:10,090 --> 00:08:12,260 Do nun, ke puntero ne havas sagon. 191 00:08:12,260 --> 00:08:14,590 Ĝi anstataŭe estas nur nula. 192 00:08:14,590 --> 00:08:17,880 Sed reprezentas kio estos la adreso de la unua efektiva 193 00:08:17,880 --> 00:08:19,480 nodo en tiu listo. 194 00:08:19,480 --> 00:08:22,120 Do mi implementado ĝi estas tutmonda ĉar, kiel vi vidas, ĉiuj ĉi 195 00:08:22,120 --> 00:08:25,310 programo faras en la vivo estas implemento lerta kunligita por mi. 196 00:08:25,310 --> 00:08:27,050 >> Nun mi havas kelkajn prototipojn tie. 197 00:08:27,050 --> 00:08:31,190 Mi decidis apliki karakterizaĵoj kiel forigo, inserción, serĉado, kaj 198 00:08:31,190 --> 00:08:31,740 trairado - 199 00:08:31,740 --> 00:08:35,210 la lasta nur esti promenado tra la listo, presi el ĝiaj eroj. 200 00:08:35,210 --> 00:08:36,750 Kaj nun jen mia ĉefa rutino. 201 00:08:36,750 --> 00:08:39,890 Kaj ni ne pasigas tro da tempo sur tiuj ekde ĉi tiu estas speco de, mi esperas 202 00:08:39,890 --> 00:08:41,780 malnova ĉapelo de nun. 203 00:08:41,780 --> 00:08:45,370 >> Mi tuj faros la sekvajn, dum la uzanto kunlaboras. 204 00:08:45,370 --> 00:08:47,300 Do, mi tuj presi tiun menuon. 205 00:08:47,300 --> 00:08:49,420 Kaj mi formatita kiel pure kiel mi povis. 206 00:08:49,420 --> 00:08:52,240 Se la uzanto tajpas en unu, tio signifas ili volas forigi ion. 207 00:08:52,240 --> 00:08:54,560 Se la uzanto tajpas en du, kiu signifas ili volas enŝovu ion. 208 00:08:54,560 --> 00:08:55,930 Kaj tiel plu. 209 00:08:55,930 --> 00:08:58,270 Mi tuj poste instigas tiam por komando. 210 00:08:58,270 --> 00:08:59,300 Kaj poste mi iros por uzi GetInt. 211 00:08:59,300 --> 00:09:02,790 >> Do tiu estas vere simpla menuing interfaco kie vi nur devas tajpi 212 00:09:02,790 --> 00:09:05,270 nombro surĵeto al unu el tiuj komandoj. 213 00:09:05,270 --> 00:09:08,730 Kaj nun mi havas belan pura ŝaltilo aserto, ke tuj ŝalti 214 00:09:08,730 --> 00:09:10,090 kion ajn la uzanto tajpas in 215 00:09:10,090 --> 00:09:12,180 Kaj se ili tajpis unu, mi instruos vin voki forviŝi kaj rompi. 216 00:09:12,180 --> 00:09:14,380 Se ili enigis du, mi instruos vin voki insertar kaj rompi. 217 00:09:14,380 --> 00:09:16,490 >> Kaj nun rimarki Mi metis ĉiu de ĉi tiuj sur la sama linio. 218 00:09:16,490 --> 00:09:18,360 Ĉi tio estas nur stila decido. 219 00:09:18,360 --> 00:09:20,210 Tipe ni vidis ion kiel ĉi tio. 220 00:09:20,210 --> 00:09:23,260 Sed mi ĵus decidis, sincere, mia programo aspektis pli legebla ĉar 221 00:09:23,260 --> 00:09:25,980 estis nur kvar kazoj nur printi ĝin kiel ĉi tio. 222 00:09:25,980 --> 00:09:28,360 Plene legitima uzo de stilo. 223 00:09:28,360 --> 00:09:31,480 Kaj mi faros ĉi tiel longe kiel la uzanto ne tajpis nulo, kiun mi 224 00:09:31,480 --> 00:09:33,910 decidis signifos ili volas forlasi. 225 00:09:33,910 --> 00:09:36,630 >> Do nun rimarkas kion mi tuj faros ĉi tie. 226 00:09:36,630 --> 00:09:38,650 Mi tuj liberigi la listo ŝajne. 227 00:09:38,650 --> 00:09:40,230 Sed pli sur tiu en nur momento. 228 00:09:40,230 --> 00:09:41,640 Ni unue kuri ĉi tiu programo. 229 00:09:41,640 --> 00:09:45,250 Do lasu min fari pli grandan fina fenestro, ĝi pentras oblikvo listo 0. 230 00:09:45,250 --> 00:09:49,510 Mi tuj iros antaŭen kaj enmeti per tajpante du, numero kiel 50, kaj nun 231 00:09:49,510 --> 00:09:51,590 vi vidos la listo estas nun 50. 232 00:09:51,590 --> 00:09:53,380 Kaj mia teksto nur scrolled supren iom. 233 00:09:53,380 --> 00:09:55,940 Do nun rimarkas la listo enhavas la nombro 50. 234 00:09:55,940 --> 00:09:58,220 >> Ni faru alian insert per prenante du. 235 00:09:58,220 --> 00:10:01,630 Ni entajpi la numeron kiel unu. 236 00:10:01,630 --> 00:10:03,940 Listo estas nun unu, sekvita de 50. 237 00:10:03,940 --> 00:10:06,020 Do tiu estas nur teksta prezento el la listo. 238 00:10:06,020 --> 00:10:10,550 Kaj ni enigi pli numeron kiel la numero 42, kiu estas espereble 239 00:10:10,550 --> 00:10:14,620 tuj finos en la mezo, ĉar tiu programo en aparta klaso ĝin 240 00:10:14,620 --> 00:10:16,320 elementoj kiel ĝi enmetas ilin. 241 00:10:16,320 --> 00:10:17,220 Do ni havas ĝin. 242 00:10:17,220 --> 00:10:20,730 Super simpla programo kiu povis absolute uzis tabelo, sed mi 243 00:10:20,730 --> 00:10:23,280 okazi esti uzanta ligillisto nur tiel mi povas dinamike 244 00:10:23,280 --> 00:10:24,610 kreski kaj retiri ĝin. 245 00:10:24,610 --> 00:10:28,470 >> Do ni rigardu por serĉo, se mi kuri komando tri, mi volas serĉi 246 00:10:28,470 --> 00:10:31,040 por, ni diru, la numero 43. 247 00:10:31,040 --> 00:10:34,190 Kaj nenio ŝajne trovis, ĉar mi reiris neniu respondo. 248 00:10:34,190 --> 00:10:35,010 Do ni faru ĉi denove. 249 00:10:35,010 --> 00:10:35,690 Serĉi. 250 00:10:35,690 --> 00:10:39,520 Ni serĉu 50, aŭ pli ĝuste serĉi por 42, kiu havas belan 251 00:10:39,520 --> 00:10:40,850 iom subtila signifon. 252 00:10:40,850 --> 00:10:42,610 Kaj mi trovis la signifon de la vivo tie. 253 00:10:42,610 --> 00:10:44,990 Numero 42, se vi ne scias, la referenco, Google ĝin. 254 00:10:44,990 --> 00:10:45,350 Ĉio bone. 255 00:10:45,350 --> 00:10:47,130 Do kio tiu programo farita por mi? 256 00:10:47,130 --> 00:10:50,660 Ĝi simple permesis al mi enmeti tiel for kaj serĉo de elementoj. 257 00:10:50,660 --> 00:10:53,650 >> Ni rapide antaŭen, tiam, tiu funkcio ni rigardis 258 00:10:53,650 --> 00:10:55,360 lundon kiel teaser. 259 00:10:55,360 --> 00:10:59,620 Do tiu funkcio, mi asertas, serĉoj por elementon en la listo per unua 260 00:10:59,620 --> 00:11:03,830 unu, instigante la uzanto kaj tiam nomante GetInt akiri realan int 261 00:11:03,830 --> 00:11:05,060 ke vi volas serĉi. 262 00:11:05,060 --> 00:11:06,460 >> Tiam rimarki tion. 263 00:11:06,460 --> 00:11:10,690 Mi tuj kreos provizoran variablo en linio 188 nomis puntero - 264 00:11:10,690 --> 00:11:11,270 PTR - 265 00:11:11,270 --> 00:11:12,440 povus esti nomata ĝi nenion. 266 00:11:12,440 --> 00:11:16,140 Kaj ĝi estas puntero al nodo ĉar mi diris nodo * tie. 267 00:11:16,140 --> 00:11:19,900 Kaj mi inicializar ĝin esti egala al unua tiel, ke mi efektive havas mian 268 00:11:19,900 --> 00:11:22,860 fingro, por tiel diri, en la tre unua ero de la listo. 269 00:11:22,860 --> 00:11:27,460 Do, se mia dekstra mano jen PTR mi montrante la saman aferon tiu unua 270 00:11:27,460 --> 00:11:28,670 notas ĉe. 271 00:11:28,670 --> 00:11:31,430 >> Do nun denove en kodo, kio okazas poste - 272 00:11:31,430 --> 00:11:35,070 ĉi tiu estas komuna paradigmo kiam ripetanta super strukturo kiel 273 00:11:35,070 --> 00:11:35,970 ligitaj listo. 274 00:11:35,970 --> 00:11:40,410 Mi tuj faros la sekvajn dum pointer ne estas egala al nula Do dum 275 00:11:40,410 --> 00:11:47,530 mia fingro ne montras al iuj nulaj valoro, se puntero sago n egalas n. 276 00:11:47,530 --> 00:11:52,290 Ni rimarkas unue ke n estas kion la uzanto tajpita en po GetInts nomas ĉi tie. 277 00:11:52,290 --> 00:11:54,280 >> Kaj puntero sago n signifas kion? 278 00:11:54,280 --> 00:11:59,020 Nu, se ni reiru al la bildo tie, se mi havas fingro montrante 279 00:11:59,020 --> 00:12:02,960 tiu unua nodo enhavas naŭ, la sago esence signifas iri al tiu 280 00:12:02,960 --> 00:12:08,860 nodo kaj ekpreni la valoro je situo n, en ĉi tiu kazo, la datumoj kampo nomata n. 281 00:12:08,860 --> 00:12:14,120 >> Kiel flanken - kaj ni vidis tiun paron de semajnoj kiam iu demandis - 282 00:12:14,120 --> 00:12:18,840 tiu sintakso estas nova, sed ne doni al ni povojn kiujn ni 283 00:12:18,840 --> 00:12:20,040 ne jam havas. 284 00:12:20,040 --> 00:12:25,325 Kio estis tiu frazo ekvivalenta al uzante dot notacio kaj stelo paro 285 00:12:25,325 --> 00:12:29,490 de semajnoj, kiam ni senŝeligita reen ĉi tiu mantelo iom antaŭtempe? 286 00:12:29,490 --> 00:12:31,780 >> Lernanto: [inaudibles]. 287 00:12:31,780 --> 00:12:38,880 >> Parolanto 1: Ekzakte, estis stelo, kaj tiam estis stelo dot n, kun 288 00:12:38,880 --> 00:12:41,930 parentezoj tie, kiu aspektas, sincere, mi pensas multe 289 00:12:41,930 --> 00:12:43,320 pli kripta legi. 290 00:12:43,320 --> 00:12:46,270 Sed stelo pointer, kiel ĉiam, per iri tien. 291 00:12:46,270 --> 00:12:49,090 Kaj kiam vi estas tie, kio datumoj kampo vi volas aliri? 292 00:12:49,090 --> 00:12:52,730 Nu vi uzas la skalara skribmaniero por aliri oni structs datumoj kampon, kaj mi 293 00:12:52,730 --> 00:12:54,140 specife volas n. 294 00:12:54,140 --> 00:12:56,240 >> Sincere, mi argumentas ĉi estas nur malfacile legi. 295 00:12:56,240 --> 00:12:58,080 Estas pli malfacile memoras kie do la parantezoj iru, la 296 00:12:58,080 --> 00:12:59,030 stelo kaj ĉiuj tion. 297 00:12:59,030 --> 00:13:02,150 Do la mondo adoptis iujn sintaksa sukero, por tiel diri. 298 00:13:02,150 --> 00:13:04,740 Nur sexy maniero diri, ĉi tiu estas ekvivalento, kaj 299 00:13:04,740 --> 00:13:05,970 eble pli intuicia. 300 00:13:05,970 --> 00:13:09,600 Se puntero estas ja pointer, la saga skribmaniero signifas iri tien por trovi 301 00:13:09,600 --> 00:13:11,890 la kampo en tiu kazo nomata n. 302 00:13:11,890 --> 00:13:13,660 >> Do, se mi trovas ĝin, rimarkos, kion mi faros. 303 00:13:13,660 --> 00:13:17,430 Mi simple presi, mi trovis procento i, ŝtopanta en la valoro por int. 304 00:13:17,430 --> 00:13:20,730 Mi nomas dormi por dua nur speco de paŭzo aĵoj en la ekrano por 305 00:13:20,730 --> 00:13:22,900 doni al la uzanto dua sorbi kio ĵus okazis. 306 00:13:22,900 --> 00:13:24,290 Kaj tiam mi rompos. 307 00:13:24,290 --> 00:13:26,330 Alie, kion mi faru? 308 00:13:26,330 --> 00:13:30,960 Mi ĝisdatigos puntero al egala pointer sago tuj. 309 00:13:30,960 --> 00:13:35,840 >> Do nur por esti klara, tio signifas iri tie, uzante mian malnovan-lernejo skribmaniero. 310 00:13:35,840 --> 00:13:39,580 Do tio nur signifas iri al kiom vi fingromontrante, kio en la tre 311 00:13:39,580 --> 00:13:43,660 unua kazo estas mi indik la struct kun naŭ en ĝi. 312 00:13:43,660 --> 00:13:44,510 Do mi iris tie. 313 00:13:44,510 --> 00:13:47,880 Kaj tiam la skalara skribmaniero signifas, atingi la valoro je proksimaj. 314 00:13:47,880 --> 00:13:50,470 >> Sed la valoro, kvankam ĝi estas desegnita kiel mallarĝa, estas nur nombro. 315 00:13:50,470 --> 00:13:51,720 Ĝi estas nombraj adreso. 316 00:13:51,720 --> 00:13:55,670 Do ĉi tiu linio de kodo, ĉu skribita kiel ĉi tio, la pli kripta 317 00:13:55,670 --> 00:14:00,190 maniero, aŭ kiel ĉi tio, la iomete pli intuicia maniero, nur signifas movi mian manon 318 00:14:00,190 --> 00:14:03,460 de la unua nodo al la sekva, kaj tiam la sekva, kaj tiam la 319 00:14:03,460 --> 00:14:05,320 sekva, kaj tiel plu. 320 00:14:05,320 --> 00:14:09,920 >> Do ni ne loĝas sur la alia realigoj de enigi kaj forigi 321 00:14:09,920 --> 00:14:14,030 kaj trairado, la du unuaj de kiuj estas sufiĉe implikitaj. 322 00:14:14,030 --> 00:14:17,010 Kaj mi kredas ke estas sufiĉe facile akiri perdis farinte ĝin parole. 323 00:14:17,010 --> 00:14:19,890 Sed kion ni povas fari ĉi tie estas provi determini kiel 324 00:14:19,890 --> 00:14:21,640 bona por fari ĉi vide. 325 00:14:21,640 --> 00:14:24,800 Ĉar mi proponus, ke se ni volas enmeti elementojn en tiun 326 00:14:24,800 --> 00:14:26,680 ekzistanta listo, kiu havas kvin elementoj - 327 00:14:26,680 --> 00:14:29,530 9, 17, 22, 26, kaj 33 - 328 00:14:29,530 --> 00:14:33,300 se mi tuj apliki tion en kodo, mi bezonas konsideri kiel iri 329 00:14:33,300 --> 00:14:34,160 pri fari ĉi tion. 330 00:14:34,160 --> 00:14:37,720 >> Mi proponus porti bebon paŝoj per kiu, en tiu kazo mi volas diri, kio estas 331 00:14:37,720 --> 00:14:41,090 la eblaj scenaroj, ke ni povus renkonti ĝenerale? 332 00:14:41,090 --> 00:14:44,120 Kiam apliki insert por kunligita listo, tiu simple okazas al esti 333 00:14:44,120 --> 00:14:46,090 specifa ekzemplo de grandeco kvin. 334 00:14:46,090 --> 00:14:50,420 Nu, se vi volas enmeti numeron, kiel diras la nombro unu kaj 335 00:14:50,420 --> 00:14:53,380 subteni ordo ordo, kie evidente plenumas la numero oni bezonas 336 00:14:53,380 --> 00:14:55,686 iri en ĉi tiu specifa ekzemplo? 337 00:14:55,686 --> 00:14:56,840 Kiel en la komenco. 338 00:14:56,840 --> 00:15:00,030 >> Sed kio estas interesa estas ke se vi volas enmeti unu en tiun 339 00:15:00,030 --> 00:15:04,100 listo, kion speciala puntero bezonas esti ĝisdatigita ŝajne? 340 00:15:04,100 --> 00:15:04,610 Unua. 341 00:15:04,610 --> 00:15:07,830 Do mi dirus, tiu estas la unua kazo ke ni volas konsideri, oni 342 00:15:07,830 --> 00:15:11,140 scenaro engaĝante enmeto en la komenco de la listo. 343 00:15:11,140 --> 00:15:15,400 >> Ni desxiri ekstere eble estas tiel facila aŭ eĉ facilan kazon, relative parolas. 344 00:15:15,400 --> 00:15:18,110 Supozu mi volas enmeti la numero 35 en ordo ordo. 345 00:15:18,110 --> 00:15:20,600 Ĝi evidente apartenas tie. 346 00:15:20,600 --> 00:15:25,320 Do kio puntero evidente tuj devas esti ĝisdatigita en tiu scenaro? 347 00:15:25,320 --> 00:15:30,060 34 La puntero igante ne nula sed la adreso de la struct 348 00:15:30,060 --> 00:15:31,800 enhavanta la nombron 35. 349 00:15:31,800 --> 00:15:32,750 Do jen kazo du. 350 00:15:32,750 --> 00:15:36,190 Do jam mi estas speco de cuantizando kiom da laboro mi devas fari ĉi tie. 351 00:15:36,190 --> 00:15:39,880 >> Kaj fine, la evidenta mezo kazo estas ja, meze, se mi volas 352 00:15:39,880 --> 00:15:45,870 enŝovu iun kiel diras 23, kiu iras inter la 23 kaj la 26, sed 353 00:15:45,870 --> 00:15:48,680 nun aĵoj iom pli implikitaj pro kio 354 00:15:48,680 --> 00:15:52,800 montriloj bezonas esti ŝanĝita? 355 00:15:52,800 --> 00:15:56,680 Do 22 evidente bezonas esti ŝanĝita ĉar li ne povas atentigi al 26 anymore. 356 00:15:56,680 --> 00:16:00,320 Li bezonas atentigi al la nova nodo ke Mi devos atribui nomante 357 00:16:00,320 --> 00:16:01,770 malloc aŭ iu ekvivalento. 358 00:16:01,770 --> 00:16:05,990 >> Sed tiam mi ankaŭ bezonas, ke nova nodo, 23 en ĉi tiu kazo, havi lian puntero 359 00:16:05,990 --> 00:16:07,870 indik kiu? 360 00:16:07,870 --> 00:16:08,560 26. 361 00:16:08,560 --> 00:16:10,380 Kaj tuj esti ordo de operacioj tie. 362 00:16:10,380 --> 00:16:13,410 Ĉar se mi tion faras malsagxe kaj mi ekzemple komenco komence de 363 00:16:13,410 --> 00:16:16,040 la listo, kaj mia celo estas enigi 23. 364 00:16:16,040 --> 00:16:18,610 Kaj mi kontrolu, ĉu ĝi apartenas ĉi tie, proksime naŭ? 365 00:16:18,610 --> 00:16:18,950 No 366 00:16:18,950 --> 00:16:20,670 Ĉu ĝi apartenas ĉi tie, apud 17? 367 00:16:20,670 --> 00:16:20,940 No 368 00:16:20,940 --> 00:16:22,530 Ĉu ĝi apartenas tie apud 22? 369 00:16:22,530 --> 00:16:23,300 Jes. 370 00:16:23,300 --> 00:16:26,400 >> Nu, se mi estas malsaĝa tie, kaj ne pensante ĉi, Mi povus 371 00:16:26,400 --> 00:16:28,320 destini mia nova nodo por 23. 372 00:16:28,320 --> 00:16:32,080 Mi povus ĝisdatigi la puntero de la nodo vokis 22, montrante 373 00:16:32,080 --> 00:16:33,080 ĝin ĉe la nova nodo. 374 00:16:33,080 --> 00:16:36,140 Kaj tiam kion mi devas ĝisdatigi la nova nodo puntero esti? 375 00:16:36,140 --> 00:16:38,120 >> Lernanto: [inaudibles]. 376 00:16:38,120 --> 00:16:38,385 >> Parolanto 1: Ekzakte. 377 00:16:38,385 --> 00:16:39,710 Indik 26. 378 00:16:39,710 --> 00:16:45,590 Sed damne, se mi ne jam ĝisdatigi 22 La puntero atentigi en ĉi ulo, kaj 379 00:16:45,590 --> 00:16:48,260 nun mi havas orfoj, la resto de la listo, tiel diri. 380 00:16:48,260 --> 00:16:52,140 Do ordo de operacioj tie tuj estos grava. 381 00:16:52,140 --> 00:16:55,100 >> Por fari tion mi povus sxtelu; diru, ses volontuloj. 382 00:16:55,100 --> 00:16:57,650 Kaj vidu se ni ne povas fari ĉi vide anstataŭ kodo-saĝa. 383 00:16:57,650 --> 00:16:59,330 Kaj ni havas kelkajn belajn streso pilkoj por vi hodiaŭ. 384 00:16:59,330 --> 00:17:02,510 OK, kiel pri unu, du, en la reen - sur la pinto tie. 385 00:17:02,510 --> 00:17:04,530 tri, kvar, ambaŭ de vi infanoj je la fino. 386 00:17:04,530 --> 00:17:05,579 Kaj kvin, ses. 387 00:17:05,579 --> 00:17:05,839 Certe. 388 00:17:05,839 --> 00:17:06,450 Kvin ses. 389 00:17:06,450 --> 00:17:08,390 Bone kaj ni venos al vi infanoj proksima fojo. 390 00:17:08,390 --> 00:17:09,640 Bone, venu supren. 391 00:17:09,640 --> 00:17:12,010 392 00:17:12,010 --> 00:17:14,819 >> Bone, ĉar vi ĝis tie unue, vi ŝatus esti tiu mallerte 393 00:17:14,819 --> 00:17:16,119 en Google Vitra tie? 394 00:17:16,119 --> 00:17:19,075 Bone, do, bone, Pokalo, gravuri video. 395 00:17:19,075 --> 00:17:22,720 396 00:17:22,720 --> 00:17:24,589 OK, vi estas bona iri. 397 00:17:24,589 --> 00:17:27,950 >> Bone, do se vi infanoj povas veni pli ĉi tie mi preparis anticipe 398 00:17:27,950 --> 00:17:30,110 iujn numerojn. 399 00:17:30,110 --> 00:17:31,240 Bone, venu al ĉi tie. 400 00:17:31,240 --> 00:17:33,440 Kaj kial vi ne iru iom plu tiel. 401 00:17:33,440 --> 00:17:35,520 Kaj vidu, kio estas via nomo, kun la Google Vitra? 402 00:17:35,520 --> 00:17:35,910 >> Lernanto: Ben. 403 00:17:35,910 --> 00:17:36,230 >> Parolanto 1: Ben? 404 00:17:36,230 --> 00:17:38,380 OK, Ben, vi estos la unua, laŭvorte. 405 00:17:38,380 --> 00:17:40,580 Do ni tuj sendos al la fino de la scenejo. 406 00:17:40,580 --> 00:17:41,670 Bone, kaj via nomo? 407 00:17:41,670 --> 00:17:41,990 >> Lernanto: Jason. 408 00:17:41,990 --> 00:17:44,530 >> Parolanto 1: Jason, OK vi instruos vin esti numero naŭ. 409 00:17:44,530 --> 00:17:46,700 Do se vi volas sekvi Ben tiu vojo. 410 00:17:46,700 --> 00:17:47,010 >> Lernanto: Jill. 411 00:17:47,010 --> 00:17:49,630 >> Parolanto 1: Jill, vi tuj estos 17, kiu se mi faris tion pli 412 00:17:49,630 --> 00:17:51,260 inteligente, mi havus komenciĝis ĉe la alia fino. 413 00:17:51,260 --> 00:17:52,370 Vi iras tiun vojon. 414 00:17:52,370 --> 00:17:53,030 22. 415 00:17:53,030 --> 00:17:53,670 Kaj vi estas? 416 00:17:53,670 --> 00:17:53,980 >> Lernanto: Maria. 417 00:17:53,980 --> 00:17:56,130 >> Parolanto 1: Mary, vi estos 22. 418 00:17:56,130 --> 00:17:58,420 Kaj via nomo estas? 419 00:17:58,420 --> 00:17:58,810 >> Lernanto: Chris. 420 00:17:58,810 --> 00:18:00,100 >> Parolanto 1: Chris, vi estos 26. 421 00:18:00,100 --> 00:18:00,740 Kaj poste persiste. 422 00:18:00,740 --> 00:18:01,400 >> Lernanto: Diana. 423 00:18:01,400 --> 00:18:02,670 >> Parolanto 1: Diana, vi estos 34. 424 00:18:02,670 --> 00:18:03,920 Do vi venu ĉi tien. 425 00:18:03,920 --> 00:18:06,360 >> Bone, do perfektigi ordo ordigi jam. 426 00:18:06,360 --> 00:18:09,600 Kaj ni iru antaŭen kaj faros cxi tiel ke ni povas vere - 427 00:18:09,600 --> 00:18:11,720 Ben vi estas nur speco de rigardi Tra nenie tie. 428 00:18:11,720 --> 00:18:15,670 Bone, do ni iru antaŭen kaj priskribas tiun uzante armilojn, multe kiel mi estis, precize, 429 00:18:15,670 --> 00:18:16,250 kio okazas. 430 00:18:16,250 --> 00:18:19,540 Do iru antaŭen kaj dedicxu vin al piedo aŭ du inter vi mem. 431 00:18:19,540 --> 00:18:22,900 Kaj iru antaŭen kaj atentigi per unu mano al kiu ajn vi devu indik 432 00:18:22,900 --> 00:18:23,470 surbaze de tio. 433 00:18:23,470 --> 00:18:25,890 Kaj se vi estas nula nur atentigi rekte sur la plankon. 434 00:18:25,890 --> 00:18:27,690 Bone, do bone. 435 00:18:27,690 --> 00:18:32,290 >> Do nun ni havas ligitaj liston, lasu min proponas ke mi ludos la rolon de 436 00:18:32,290 --> 00:18:35,110 PTR, do mi ne ĝeni portante ĉi ĉirkaŭe. 437 00:18:35,110 --> 00:18:37,830 Kaj poste - iu stulta konvencio - vi povas nomi tiun ion vi volas - 438 00:18:37,830 --> 00:18:39,800 antaŭulo pointer, pred puntero - 439 00:18:39,800 --> 00:18:43,930 estas nur la alnomon ni donis en nia specimeno kodon al mia maldekstra mano. 440 00:18:43,930 --> 00:18:47,240 La alia mano, kiu tuj estos gardi spuri de kiu estas kiu en la 441 00:18:47,240 --> 00:18:48,400 post scenejoj. 442 00:18:48,400 --> 00:18:52,390 >> Do supozu, unue, mi volas desxiri ekstere tiu unua ekzemplo de enmeto, diru 443 00:18:52,390 --> 00:18:54,330 20, en la listo. 444 00:18:54,330 --> 00:18:57,160 Do mi tuj bezonas iun al enkorpigi la numero 20 por ni. 445 00:18:57,160 --> 00:18:58,950 Do mi bezonas malloc iu de la aŭskultantaro. 446 00:18:58,950 --> 00:18:59,380 Venu supren. 447 00:18:59,380 --> 00:19:00,340 Kio estas via nomo? 448 00:19:00,340 --> 00:19:01,300 >> Lernanto: Brian. 449 00:19:01,300 --> 00:19:05,270 >> Parolanto 1: Brian, ĉiuj rajtas, tiel vi estos la nodo enhavis 20. 450 00:19:05,270 --> 00:19:06,810 Bone, venu al ĉi tie. 451 00:19:06,810 --> 00:19:10,025 Kaj evidente, kie ne Brian apartenas? 452 00:19:10,025 --> 00:19:12,190 Do, en la mezo de - efektive, atendi minuton. 453 00:19:12,190 --> 00:19:13,420 Ni faras ĉi paneas. 454 00:19:13,420 --> 00:19:17,170 Ni faris ĉi multe pli malfacila ol ĝi bezonas esti en komenco. 455 00:19:17,170 --> 00:19:21,210 Bone, ni iras al libera Brian kaj realloc Brian kiel kvin. 456 00:19:21,210 --> 00:19:23,680 >> Bone, do nun ni volas enmeti Brian kiel kvin. 457 00:19:23,680 --> 00:19:25,960 Do venu ĉi tien apud Ben por nur momento. 458 00:19:25,960 --> 00:19:28,250 Kaj vi povas supozeble diri kie ĉi tiu rakonto tuj. 459 00:19:28,250 --> 00:19:30,500 Sed ni zorge pripensi la ordo de operacioj. 460 00:19:30,500 --> 00:19:32,880 Kaj estas ĝuste ĉi tiu vida ke tuj laŭliniigi 461 00:19:32,880 --> 00:19:34,080 kun tiu specimeno kodo. 462 00:19:34,080 --> 00:19:40,120 Do jen mi PTR indikante komence ne je Ben, per, sed je ajn 463 00:19:40,120 --> 00:19:43,245 taksas Li enhavas, kiu en ĉi tiu kazo estas - kio estas via nomo denove? 464 00:19:43,245 --> 00:19:43,670 >> Lernanto: Jason. 465 00:19:43,670 --> 00:19:47,350 >> Parolanto 1: Jason, tial ambaŭ Ben kaj mi estas indik Jason en ĉi tiu momento. 466 00:19:47,350 --> 00:19:49,700 Do nun mi devas determini, kie ne Brian apartenas? 467 00:19:49,700 --> 00:19:53,500 Do la sola afero mi havas aliron al nun estas lia n elemento de datumoj. 468 00:19:53,500 --> 00:19:58,280 Do mi iros por kontroli, estas Brian malpli ol Jason? 469 00:19:58,280 --> 00:19:59,770 La respondo estas vera. 470 00:19:59,770 --> 00:20:03,680 >> Do kio nun devas okazi, en la ĝusta ordo? 471 00:20:03,680 --> 00:20:07,120 Mi bezonas ĝisdatigi kiom da referencoj en tuta en cxi tiu rakonto? 472 00:20:07,120 --> 00:20:10,720 Kie mia mano ankoraŭ indik Jason kaj vian manon - se vi volas 473 00:20:10,720 --> 00:20:12,930 metu vian manon kiel, ia, mi ne scias, demandosigno. 474 00:20:12,930 --> 00:20:14,070 Bone, nu. 475 00:20:14,070 --> 00:20:15,670 >> Bone, do vi havas kelkaj kandidatoj. 476 00:20:15,670 --> 00:20:20,500 Aux Ben aŭ mi aŭ Brian aux Jason aŭ ĉiuj aliaj, kiuj 477 00:20:20,500 --> 00:20:21,370 montriloj bezonas ŝanĝi? 478 00:20:21,370 --> 00:20:23,260 Kiom entute? 479 00:20:23,260 --> 00:20:24,080 >> Bone, do du. 480 00:20:24,080 --> 00:20:27,090 Mia puntero ne vere gravas anymore ĉar mi estas nur dumtempa. 481 00:20:27,090 --> 00:20:31,370 Do estas tiuj du infanoj, supozeble, ambaŭ Ben kaj Brian. 482 00:20:31,370 --> 00:20:34,410 Do mi proponas ke ni ĝisdatigi Ben, ĉar li estas unua. 483 00:20:34,410 --> 00:20:36,350 La unua ero de tiu ĉi listo nun tuj estos Brian. 484 00:20:36,350 --> 00:20:38,070 Do Ben punkto je Brian. 485 00:20:38,070 --> 00:20:39,320 OK, nun kion? 486 00:20:39,320 --> 00:20:41,950 487 00:20:41,950 --> 00:20:43,460 >> Kiu akiras notita al kiu? 488 00:20:43,460 --> 00:20:44,710 >> Lernanto: [inaudibles]. 489 00:20:44,710 --> 00:20:46,180 >> Parolanto 1: Bone tiel Brian havas atentigi ĉe Jason. 490 00:20:46,180 --> 00:20:48,360 Sed mi miskalkulis ke puntero? 491 00:20:48,360 --> 00:20:49,980 Ĉu mi scias, kie Jason estas? 492 00:20:49,980 --> 00:20:50,790 >> Lernanto: [inaudibles]. 493 00:20:50,790 --> 00:20:52,620 >> Parolanto 1: Mi faros, kiam mi estas la provizora puntero. 494 00:20:52,620 --> 00:20:55,110 Kaj supozeble mi ne ŝanĝiĝis atentigi ĉe la nova nodo. 495 00:20:55,110 --> 00:20:58,300 Do ni povas simple havi Brian punkto en kiu ajn mi fingromontrante. 496 00:20:58,300 --> 00:20:59,000 Kaj ni faris. 497 00:20:59,000 --> 00:21:01,890 Do kazo, inserción en la komencante de la listo. 498 00:21:01,890 --> 00:21:02,950 Estis du ŝlosilaj paŝoj. 499 00:21:02,950 --> 00:21:06,750 Unu, ni devas ĝisdatigi Ben, tiam ni ankaŭ devas ĝisdatigi Brian. 500 00:21:06,750 --> 00:21:09,230 Kaj tiam mi ne devas ĝeni traipsing tra la resto de la 501 00:21:09,230 --> 00:21:12,680 listo, ĉar ni jam trovis sian situo, ĉar li apartenis al la 502 00:21:12,680 --> 00:21:14,080 maldekstre de la unua ero. 503 00:21:14,080 --> 00:21:15,400 >> Bone, do sufiĉe simpla. 504 00:21:15,400 --> 00:21:18,110 Fakte, ĝi sentas kiel ni estas preskaŭ farante ĉi tro komplika. 505 00:21:18,110 --> 00:21:20,240 Do ni nun desxiri ekstere de la fino el la listo, kaj rigardu, kie 506 00:21:20,240 --> 00:21:21,380 la komplekseco startas. 507 00:21:21,380 --> 00:21:24,560 Do se nun mi alloc de la aŭskultantaro. 508 00:21:24,560 --> 00:21:25,540 Ĉiu volas ludi 55? 509 00:21:25,540 --> 00:21:26,700 Bone, mi vidis vian manon unue. 510 00:21:26,700 --> 00:21:29,620 Venu supren. 511 00:21:29,620 --> 00:21:30,030 Jes. 512 00:21:30,030 --> 00:21:31,177 Kio estas via nomo? 513 00:21:31,177 --> 00:21:32,310 >> Lernanto: [inaudibles]. 514 00:21:32,310 --> 00:21:33,240 >> Parolanto 1: Habata. 515 00:21:33,240 --> 00:21:33,890 OK, venu supren. 516 00:21:33,890 --> 00:21:35,730 Vi estos la nombro 55. 517 00:21:35,730 --> 00:21:37,820 Do vi, kompreneble, ili apartenas fine de la listo. 518 00:21:37,820 --> 00:21:41,850 Do ni Replay la simulado kun mi esti la PTR por nur momento. 519 00:21:41,850 --> 00:21:44,050 Do mi unue iri al punkto en kion ajn Ben estas indik. 520 00:21:44,050 --> 00:21:45,900 Ni ambaŭ montrante nun Brian. 521 00:21:45,900 --> 00:21:48,420 Do 55 estas ne malpli ol kvin. 522 00:21:48,420 --> 00:21:52,510 Do mi tuj ĝisdatigi min per indikante Brian sekva pointer, kiu 523 00:21:52,510 --> 00:21:54,450 nun estas kompreneble Jason. 524 00:21:54,450 --> 00:21:57,310 55 Ne malpli ol naŭ, tiel Mi tuj ĝisdatigi PTR. 525 00:21:57,310 --> 00:21:58,890 Mi tuj ĝisdatigi PTR. 526 00:21:58,890 --> 00:22:02,290 Mi tuj ĝisdatigi PTR Mi tuj ĝisdatigi PTR. 527 00:22:02,290 --> 00:22:05,060 Kaj mi tuj - hmm, kio estas Via nomo denove? 528 00:22:05,060 --> 00:22:05,560 >> Lernanto: Diana. 529 00:22:05,560 --> 00:22:09,190 >> Parolanto 1: Diana notas, kompreneble, ĉe nula per sia maldekstra mano. 530 00:22:09,190 --> 00:22:13,030 Do kie faras Habata reale apartenas klare? 531 00:22:13,030 --> 00:22:15,050 Al la maldekstra, ĉi tie. 532 00:22:15,050 --> 00:22:19,460 Do kiel mi scias meti sxin tie Mi kredas ke mi ŝraŭbita supren. 533 00:22:19,460 --> 00:22:22,420 Ĉar kio estas PTR arto ĉi tiu momento en tempo? 534 00:22:22,420 --> 00:22:23,240 Nula. 535 00:22:23,240 --> 00:22:25,580 Do kvankam, vide, ni povas evidente vidi ĉiujn tiujn 536 00:22:25,580 --> 00:22:26,610 infanoj tie sur la scenejo. 537 00:22:26,610 --> 00:22:29,680 Mi ne gardis spuro de la antaŭa persono en la listo. 538 00:22:29,680 --> 00:22:33,210 Mi ne havas fingron markante, en ĉi tiu kazo, la nodo numero 34. 539 00:22:33,210 --> 00:22:34,760 >> Do ni vere komencos tion. 540 00:22:34,760 --> 00:22:37,560 Do nun mi vere ne bezonas duan loka variablo. 541 00:22:37,560 --> 00:22:40,980 Kaj jen estas, kion vi vidos en la reala specimeno C kodo, kie kiel mi foriras, 542 00:22:40,980 --> 00:22:45,860 kiam mi ĝisdatigos mian dekstran manon por noti Jason, tiel lasante Brian malantaŭe, mi 543 00:22:45,860 --> 00:22:51,440 pli bone komenci per mia maldekstra mano ĝisdatigi kie mi estis, tiel ke, kiel mi foriras 544 00:22:51,440 --> 00:22:52,700 tra ĉi tiu listo - 545 00:22:52,700 --> 00:22:55,040 pli mallerte ol mi intencis nun tie vide - 546 00:22:55,040 --> 00:22:56,740 Mi tuj alvenos al la fino de la listo. 547 00:22:56,740 --> 00:23:00,020 >> Tiu mano ankoraŭ estas nula, kiu estas sufiĉe senutila, krom por indiki 548 00:23:00,020 --> 00:23:02,980 Mi estas klare al la fino de la listo, sed nun almenaŭ mi havas 549 00:23:02,980 --> 00:23:08,270 antaŭulo puntero indikante ĉi tie, do nun kio manoj kaj kio montriloj bezonas 550 00:23:08,270 --> 00:23:10,150 esti ĝisdatigita? 551 00:23:10,150 --> 00:23:13,214 Kies mano vi volas por reagordi unua? 552 00:23:13,214 --> 00:23:15,190 >> Lernanto: [inaudibles]. 553 00:23:15,190 --> 00:23:16,220 >> Parolanto 1: Bone, do Diana aj jaroj. 554 00:23:16,220 --> 00:23:21,110 Kie vi volas atentigi Diana la maldekstra puntero at? 555 00:23:21,110 --> 00:23:23,620 Je 55, supozeble, por ke ni insertos tie. 556 00:23:23,620 --> 00:23:25,560 Kaj kie devus 55 puntero iras? 557 00:23:25,560 --> 00:23:27,000 Malsupren, reprezentante nula. 558 00:23:27,000 --> 00:23:28,890 Kaj de miaj manoj, je ĉi tiu punkto, ne gravas ĉar ili estis nur 559 00:23:28,890 --> 00:23:30,070 temporal variabloj. 560 00:23:30,070 --> 00:23:31,030 Do nun ni faris. 561 00:23:31,030 --> 00:23:34,650 >> Do la aldonan komplekseco tie - kaj ĝi ne estas tiel malfacila por apliki, 562 00:23:34,650 --> 00:23:38,660 sed ni bezonas malĉefan variablo fari certa, ke antaŭ ol mi movi mian rajton 563 00:23:38,660 --> 00:23:42,140 Unuflanke, mi ĝisdatigos la valoro de mia maldekstra mano, pred puntero en ĉi tiu kazo, tiel 564 00:23:42,140 --> 00:23:45,860 ke mi havas trenante puntero konservi spuron de kie mi estis. 565 00:23:45,860 --> 00:23:49,360 Nun kiel flanken, se vi pensas ĉi tra, tiu sentas kiel ĝi estas 566 00:23:49,360 --> 00:23:51,490 iom ĝena devos konservi spuri de ĉi tiu maldekstra mano. 567 00:23:51,490 --> 00:23:54,015 >> Kion farus alian solvon al tiu problemo estis? 568 00:23:54,015 --> 00:23:56,500 Se vi alvenis al restrukturi la datumoj strukturo ni parolas 569 00:23:56,500 --> 00:23:59,630 tra ĝuste nun? 570 00:23:59,630 --> 00:24:02,690 Se tio nur speco de sentas iom ĝena havi, ŝati, du montriloj 571 00:24:02,690 --> 00:24:08,430 irante tra la listo, kiu alia povus esti, en ideala mondo, subtenitaj 572 00:24:08,430 --> 00:24:10,160 informo kiun ni bezonas? 573 00:24:10,160 --> 00:24:11,360 Jes? 574 00:24:11,360 --> 00:24:12,610 >> Lernanto: [inaudibles]. 575 00:24:12,610 --> 00:24:15,160 576 00:24:15,160 --> 00:24:16,150 >> Parolanto 1: Ekzakte. 577 00:24:16,150 --> 00:24:19,130 Ĝuste tiel ne estas vere interesa ĝermo de ideo. 578 00:24:19,130 --> 00:24:22,470 Kaj ĉi tiu ideo de antaŭa pointer, montrante la antaŭa ero. 579 00:24:22,470 --> 00:24:25,580 Kio se Mi nur enkorpigita ke ene de la listo mem? 580 00:24:25,580 --> 00:24:27,810 Kaj ĝi tuj estos malfacile bildigi ĉi tio sen tuta papero 581 00:24:27,810 --> 00:24:28,830 fali sur la plankon. 582 00:24:28,830 --> 00:24:31,860 Sed supozu ke tiuj infanoj uzis ambaŭ de siaj manoj havi antaŭan 583 00:24:31,860 --> 00:24:35,950 pointer, kaj proksima pointer, tiamaniere apliki kion ni vokos duoble 584 00:24:35,950 --> 00:24:36,830 ligitaj listo. 585 00:24:36,830 --> 00:24:41,090 Tio permesus min ordigi de rebobinado, multe pli facile sen mi, la 586 00:24:41,090 --> 00:24:43,800 programisto, devi teni spuri permane - 587 00:24:43,800 --> 00:24:44,980 vere permane - 588 00:24:44,980 --> 00:24:47,280 el kie mi estis estinta antaŭe en la listo. 589 00:24:47,280 --> 00:24:48,110 Do ni ne faros tion. 590 00:24:48,110 --> 00:24:50,950 Ni tenu gxin simpla ĉar tio tuj venos al prezo, duoble 591 00:24:50,950 --> 00:24:53,450 da spaco por la montriloj, se vi volas dua. 592 00:24:53,450 --> 00:24:55,760 Sed tio estas ja komuna datumstrukturo konata kiel 593 00:24:55,760 --> 00:24:57,410 duoble ligitaj listo. 594 00:24:57,410 --> 00:25:01,310 >> Ni faros la fina ekzemplo tie kaj meti ĉi tiuj infanoj el ilia mizero. 595 00:25:01,310 --> 00:25:03,270 Do malloc 20. 596 00:25:03,270 --> 00:25:05,320 Venu supren for de la koridoro tie. 597 00:25:05,320 --> 00:25:06,280 Bone, kio estas via nomo? 598 00:25:06,280 --> 00:25:07,440 >> Lernanto: [inaudibles]. 599 00:25:07,440 --> 00:25:07,855 >> Parolanto 1: Pardonu? 600 00:25:07,855 --> 00:25:08,480 >> Lernanto: [inaudibles]. 601 00:25:08,480 --> 00:25:09,410 >> Parolanto 1: Demeron? 602 00:25:09,410 --> 00:25:10,230 OK veni supren. 603 00:25:10,230 --> 00:25:11,910 Vi estos 20. 604 00:25:11,910 --> 00:25:14,720 Vi evidente tuj apartenas inter 17 kaj 22. 605 00:25:14,720 --> 00:25:16,150 Do mi lernas mian lecionon. 606 00:25:16,150 --> 00:25:18,150 Mi tuj komencos puntero indik Brian. 607 00:25:18,150 --> 00:25:21,190 Kaj mi tuj devos mia maldekstra mano nur ĝisdatigi al Brian kiel Mi movi al 608 00:25:21,190 --> 00:25:23,600 Jason, kontrolanta faras 20 malpli ol naŭ? 609 00:25:23,600 --> 00:25:24,060 No 610 00:25:24,060 --> 00:25:25,430 Estas 20 malpli ol 17? 611 00:25:25,430 --> 00:25:25,880 No 612 00:25:25,880 --> 00:25:27,450 Estas 20 malpli ol 22? 613 00:25:27,450 --> 00:25:28,440 Jes. 614 00:25:28,440 --> 00:25:34,070 Do kio montriloj aŭ manoj bezonas ŝanĝi kie ili estas montrante nun? 615 00:25:34,070 --> 00:25:37,070 >> Do ni povas fari 17 indik 20. 616 00:25:37,070 --> 00:25:37,860 Por ke estas bone. 617 00:25:37,860 --> 00:25:40,080 Kie ni volas atentigi via puntero nun? 618 00:25:40,080 --> 00:25:41,330 Je 22. 619 00:25:41,330 --> 00:25:45,410 Kaj ni scias, kie 22 estas, denove dankon al mia provizora puntero. 620 00:25:45,410 --> 00:25:46,760 Do ni estas okej tie. 621 00:25:46,760 --> 00:25:49,440 Do pro tio provizora stokado Mi tenis spuro de kie ĉiuj estas. 622 00:25:49,440 --> 00:25:55,055 Kaj nun vi povas vide iru en kie vi apartenas, kaj nun ni bezonas 1, 2, 3, 623 00:25:55,055 --> 00:25:58,410 4, 5, 6, 7, 8, 9 streso pilkoj, kaj ronda da aplaŭdoj por 624 00:25:58,410 --> 00:25:59,770 ĉi tiuj infanoj, se ni povus. 625 00:25:59,770 --> 00:26:00,410 Bele farita. 626 00:26:00,410 --> 00:26:05,320 >> [Aplaŭdo] 627 00:26:05,320 --> 00:26:06,330 >> Parolanto 1: Bone. 628 00:26:06,330 --> 00:26:09,860 Kaj vi rajtas konservi la pecoj de papero kiel mementos. 629 00:26:09,860 --> 00:26:15,930 >> Bone, do, fidu min ĝi estas multe facile marŝi tra tiu kun 630 00:26:15,930 --> 00:26:17,680 homoj ol estas kun reala kodo. 631 00:26:17,680 --> 00:26:22,690 Sed kion vi trovos en nur momenton nun, estas tiu sama - ho, dankon. 632 00:26:22,690 --> 00:26:23,630 Dankon - 633 00:26:23,630 --> 00:26:29,360 estas ke vi trovos ke la samaj datumoj strukturo, lerta kunligita, ĉu vere 634 00:26:29,360 --> 00:26:33,200 esti uzata kiel konstruaĵo bloko al eĉ pli kompleksa datumstrukturoj. 635 00:26:33,200 --> 00:26:37,620 >> Kaj realigi tro la temo estas, ke ni absolute enkondukis pli 636 00:26:37,620 --> 00:26:40,060 komplekseco en la efektivigo de ĉi tiu algoritmo. 637 00:26:40,060 --> 00:26:43,940 Insertion, kaj se ni iris tra ĝi, protokolo pri forigado kaj serĉado, estas iom 638 00:26:43,940 --> 00:26:46,660 pli komplika ol ĝi Estis kun tabelo. 639 00:26:46,660 --> 00:26:48,040 Sed ni gajnas iom dinamismo. 640 00:26:48,040 --> 00:26:50,180 Ni ricevas adapta datumstrukturo. 641 00:26:50,180 --> 00:26:54,010 >> Sed denove, ni pagas prezon de havi iun aldona komplekseco, ambaŭ en 642 00:26:54,010 --> 00:26:54,910 apliki ĝin. 643 00:26:54,910 --> 00:26:56,750 Kaj ni rezignis hazarda aliron. 644 00:26:56,750 --> 00:27:00,450 Kaj por esti honesta, tie ne estas iu agrabla purigi diapozitivoj mi povas doni al vi, ke 645 00:27:00,450 --> 00:27:03,120 diras jen kial ligitaj listo estas pli bona ol tabelo. 646 00:27:03,120 --> 00:27:04,100 Kaj lasi ĝin ĉe tio. 647 00:27:04,100 --> 00:27:07,520 Ĉar la temo reoccurring nun, eĉ pli en la venontaj semajnoj, estas 648 00:27:07,520 --> 00:27:10,200 ke tio ne nepre ĝentilan respondon. 649 00:27:10,200 --> 00:27:13,830 >> Jen kial ni havas la apartan akso de dezajno por problemo aroj. 650 00:27:13,830 --> 00:27:17,700 Estos tre kuntekston sentiva ĉu vi volas uzi tiun datumoj 651 00:27:17,700 --> 00:27:21,750 strukturo aŭ tiu, kaj volo dependi sur kio gravas al vi en terminoj 652 00:27:21,750 --> 00:27:24,620 de rimedoj kaj komplekseco. 653 00:27:24,620 --> 00:27:28,830 >> Sed mi proponas ke la ideala datumoj strukturo, la Holy Grail, estus 654 00:27:28,830 --> 00:27:32,200 iu kiu estas konstanta tempo, sendepende de kiom materialo estas 655 00:27:32,200 --> 00:27:36,940 interne de ĝi, ĉu ne estus mirinda se datumstrukturo revenis respondojn en 656 00:27:36,940 --> 00:27:37,920 konstanta tempo. 657 00:27:37,920 --> 00:27:38,330 Jes. 658 00:27:38,330 --> 00:27:40,110 Tiu vorto estas en via grandega vortaro. 659 00:27:40,110 --> 00:27:41,550 Aŭ ne, tiu vorto ne estas. 660 00:27:41,550 --> 00:27:43,270 Nek ion tian problemon tie. 661 00:27:43,270 --> 00:27:46,360 Nu vidu, se ni ne povas almenaŭ paŝon al tio. 662 00:27:46,360 --> 00:27:50,190 >> Permesu al mi proponi novan datumstrukturo kiun povas uzi por malsamaj aferoj, 663 00:27:50,190 --> 00:27:52,260 en ĉi tiu kazo nomata hash tablo. 664 00:27:52,260 --> 00:27:55,590 Kaj tiel ni fakte reen al ekrigardante en tabelo, en ĉi tiu kazo, kaj 665 00:27:55,590 --> 00:28:00,550 iom arbitre, mi desegnis tiun hash tablo tiel tablo kun speco de 666 00:28:00,550 --> 00:28:02,810 du-dimensia tabelo - 667 00:28:02,810 --> 00:28:05,410 aŭ pli ĝuste ĝi estas reprezentita tie kiel du dimensia tabelo - sed tio estas nur 668 00:28:05,410 --> 00:28:10,770 tabelo de amplekso 26, tia, ke se ni vokas la tabelo tablo, tabulo krampo 669 00:28:10,770 --> 00:28:12,440 nulo estas la rektangulo ĉe la supro. 670 00:28:12,440 --> 00:28:15,090 Tabelo krampo 25 estas la rektangulo ĉe la malsupro. 671 00:28:15,090 --> 00:28:18,620 Kaj ĉi tiu estas kiel mi povus desegni datumoj strukturo, en kiu mi volas konservi 672 00:28:18,620 --> 00:28:19,790 popola nomoj. 673 00:28:19,790 --> 00:28:24,370 >> Tiel ekzemple, mi ne eltiris la tuta afero ĉi tie sur la superkape, se mi 674 00:28:24,370 --> 00:28:29,160 havis ĉi tabelo, kiun mi nun iras al voki hash tablon, kaj tiu estas denove 675 00:28:29,160 --> 00:28:31,360 situo nulo. 676 00:28:31,360 --> 00:28:34,840 Ĉi tie estas situo unu, kaj tiel plu. 677 00:28:34,840 --> 00:28:37,880 Mi asertas, ke mi volas uzi ĉi datumoj strukturo, pro diskuto, 678 00:28:37,880 --> 00:28:42,600 stoki popola nomoj, Alice kaj Bob kaj Charlie kaj aliaj tiaj nomoj. 679 00:28:42,600 --> 00:28:46,110 Tiel pensas pri tiu nun kiel la komencoj de, ekzemple, vortaro 680 00:28:46,110 --> 00:28:47,520 kun multe da vortoj. 681 00:28:47,520 --> 00:28:49,435 Ili hazarde estas nomoj en nia ekzemplo tie. 682 00:28:49,435 --> 00:28:52,560 Kaj jen estas ĉiuj tro germane, eble, apliki sorĉas kontrolilo, kiel ni 683 00:28:52,560 --> 00:28:54,400 eble pro problemo starigis ses. 684 00:28:54,400 --> 00:28:59,300 >> Do, se ni havas tabelo de tuta grandeco 26 por ke cxi tiu estas la 25-a loko 685 00:28:59,300 --> 00:29:03,390 ĉe la malsupro, kaj mi asertas ke Alico trovas la unua vorto en la vortaro de 686 00:29:03,390 --> 00:29:07,260 nomoj kiuj mi volas enmeti en RAM, en ĉi tiu datumstrukturo, kie estas 687 00:29:07,260 --> 00:29:12,480 instinktoj diras al vi ke Alicio nomo devus iri en ĉi tiu tabelo? 688 00:29:12,480 --> 00:29:13,510 >> Ni havas 26 ebloj. 689 00:29:13,510 --> 00:29:14,990 Kie ni volas meti sxin? 690 00:29:14,990 --> 00:29:16,200 Ni volas ke ŝi en krampo nulo, ĉu ne? 691 00:29:16,200 --> 00:29:18,280 A por Alico, ni nomas tion nulo. 692 00:29:18,280 --> 00:29:20,110 Kaj B estos unu, kaj C estos du. 693 00:29:20,110 --> 00:29:22,600 Do ni tuj skribos Alicio nomon ĉi tie. 694 00:29:22,600 --> 00:29:24,890 Se ni do enigi Bob, lia nomo iros tien. 695 00:29:24,890 --> 00:29:27,280 Charlie iros tien. 696 00:29:27,280 --> 00:29:30,500 Kaj tiel plu malsupren tra tiu datumstrukturo. 697 00:29:30,500 --> 00:29:32,090 >> Tio estas mirinda datumstrukturo. 698 00:29:32,090 --> 00:29:32,730 Kial? 699 00:29:32,730 --> 00:29:37,460 Nu, kio estas la rula tempo de enmeto de homa nomo en tiun 700 00:29:37,460 --> 00:29:39,850 datumstrukturo ĝuste nun? 701 00:29:39,850 --> 00:29:43,702 Donita ke ĉi tiu tablo estas implementado, vere, kiel tabelo. 702 00:29:43,702 --> 00:29:44,940 Nu estas konstanta tempo. 703 00:29:44,940 --> 00:29:45,800 Ĝi estas ordo de unu. 704 00:29:45,800 --> 00:29:46,360 Kial? 705 00:29:46,360 --> 00:29:48,630 >> Nu kiel vi determini kie Alico apartenas? 706 00:29:48,630 --> 00:29:51,000 Vi aspektas en kiu letero de ŝia nomo? 707 00:29:51,000 --> 00:29:51,490 La unua. 708 00:29:51,490 --> 00:29:54,350 Kaj vi povas atingi tien, se ĝi estas ĉeno, por nur rigardante kordo 709 00:29:54,350 --> 00:29:55,200 krampo nulo. 710 00:29:55,200 --> 00:29:57,110 Do la nula karaktero de la kordo. 711 00:29:57,110 --> 00:29:57,610 Tio estas facila. 712 00:29:57,610 --> 00:30:00,350 Ni faris tion en la kripto asigno semajnoj. 713 00:30:00,350 --> 00:30:05,310 Kaj tiam tuj sciu ke Alico letero estas ĉefurbo, oni povas subtrahi 714 00:30:05,310 --> 00:30:08,160 for 65 aŭ ĉefurbo A sin, kiu donas al ni nulo. 715 00:30:08,160 --> 00:30:10,940 Tiel ni nun scias, ke Alico apartenas ĉe situo nulo. 716 00:30:10,940 --> 00:30:14,240 >> Kaj donita puntero al ĉi datumoj strukturon, de iu speco, kiel longe faras 717 00:30:14,240 --> 00:30:18,840 ĝin prenu min por trovi situo nulo en tabelo? 718 00:30:18,840 --> 00:30:22,080 Nur unu paŝon, dekstra Estas konstanta tempo pro la hazarda aliro ni 719 00:30:22,080 --> 00:30:23,780 proponita estis karakteriza de tabelo. 720 00:30:23,780 --> 00:30:28,570 Do mallonge, decidi kio la indekso de Alicio nomo estas, kio estas, 721 00:30:28,570 --> 00:30:32,610 tiu kazo, estas A, aŭ ni simple solvi ke al nulo, kie B estas unu kaj C estas 722 00:30:32,610 --> 00:30:34,900 du, imagante, ke el estas konstanta tempo. 723 00:30:34,900 --> 00:30:38,510 Mi nur devas rigardi sian unuan leteron, elŝeligi kie nulo estas 724 00:30:38,510 --> 00:30:40,460 tabelo estas ankaŭ konstanta tempo. 725 00:30:40,460 --> 00:30:42,140 Do teknike tio kiel du paŝoj nun. 726 00:30:42,140 --> 00:30:43,330 Sed tio ankoraŭ konstanto. 727 00:30:43,330 --> 00:30:46,880 Do ni nomas tiu granda O de unu, tiel ni insertos Alico en tiun tablon en 728 00:30:46,880 --> 00:30:48,440 konstanta tempo. 729 00:30:48,440 --> 00:30:50,960 >> Sed kompreneble, mi esti naiva tie, ĉu ne? 730 00:30:50,960 --> 00:30:53,240 Kio se tie estas Aaron en la klaso? 731 00:30:53,240 --> 00:30:53,990 Aŭ Alicia? 732 00:30:53,990 --> 00:30:57,230 Aŭ ajna alia nomoj komencante per A. Kien ni iras meti 733 00:30:57,230 --> 00:31:00,800 tiu persono, ĉu ne? 734 00:31:00,800 --> 00:31:03,420 Mi volas diri, nun ekzistas nur tri homoj sur la tablo, do eble ni 735 00:31:03,420 --> 00:31:07,490 devus meti al Aaron sur la situo nulo unu du tri. 736 00:31:07,490 --> 00:31:09,480 >> Ĝuste, mi povus meti A tie. 737 00:31:09,480 --> 00:31:13,350 Sed tiam, se ni provu enmeti David en tiu listo, kie tio David iris? 738 00:31:13,350 --> 00:31:15,170 Nun nia sistemo komencas rompi malsupren, ĉu ne? 739 00:31:15,170 --> 00:31:19,210 Ĉar nun Davido finas ĉi tie se Aaron estas efektive tie. 740 00:31:19,210 --> 00:31:23,060 Kaj tial nun tiu tuta ideo de havi pura datumstrukturo kiun donas al ni 741 00:31:23,060 --> 00:31:28,010 konstanta tempo inserciones ne plu estas konstanta tempo, ĉar mi devas 742 00:31:28,010 --> 00:31:31,240 kontroli, ho, damnit, iu estas jam ĉe Alicio loko. 743 00:31:31,240 --> 00:31:35,320 >> Lasu min sondi la resto de ĉi datumoj strukturo, serĉante lokon por meti 744 00:31:35,320 --> 00:31:37,130 iu kiel la nomon de Aaron. 745 00:31:37,130 --> 00:31:39,390 Kaj por ke tro komencas preni lineara tempo. 746 00:31:39,390 --> 00:31:42,710 Cetere, se vi nun volas trovi la Aaron en tiu datumstrukturo, kaj vi 747 00:31:42,710 --> 00:31:45,430 kontrolu, kaj Aaron nomo ne estas tie. 748 00:31:45,430 --> 00:31:47,960 Ideale, vi simple diru Aaron ne en la datumstrukturo. 749 00:31:47,960 --> 00:31:51,530 Sed se vi faras komenci farante lokon por Aaron kie devus esti D 750 00:31:51,530 --> 00:31:55,600 aŭ E, vi, plej malbona kazo, devas kontroli la tuta datumstrukturo, en 751 00:31:55,600 --> 00:31:59,480 kies kazo devolves en ion lineara en la grandeco de la tablo. 752 00:31:59,480 --> 00:32:00,920 >> Do bone, mi riparos tion. 753 00:32:00,920 --> 00:32:04,200 La problemo estas, ke mi havis 26 eroj en ĉi tiu tabelo. 754 00:32:04,200 --> 00:32:05,000 Lasu min ŝanĝi ĝin. 755 00:32:05,000 --> 00:32:06,010 Whoops. 756 00:32:06,010 --> 00:32:10,600 Lasu min ŝanĝi ĝin tiel ke prefere esti de grandeco 26 entute, rimarki la fundo 757 00:32:10,600 --> 00:32:12,720 indekso tuj ŝanĝos al n minus 1. 758 00:32:12,720 --> 00:32:16,610 Se 26 estas klare tro malgranda por homoj ' nomoj, ĉar tie estas miloj da 759 00:32:16,610 --> 00:32:20,830 nomoj de la mondo, ni simple faru en 100 aŭ 1000 aŭ 10.000. 760 00:32:20,830 --> 00:32:22,960 Ni nur malŝparas multan pli da spaco. 761 00:32:22,960 --> 00:32:27,230 >> Nu, kiu ne nepre malpliigi la probablo, ke ni ne havas du 762 00:32:27,230 --> 00:32:31,510 personoj kun nomoj komencante kun A, kaj tiel, vi tuj provi meti A 763 00:32:31,510 --> 00:32:33,120 nomoj en loko nulo ankoraŭ. 764 00:32:33,120 --> 00:32:36,850 Ili estas ankoraŭ tuj kolizias, kiu signifas ke ni ankoraŭ bezonas solvon meti 765 00:32:36,850 --> 00:32:41,020 Alice kaj Aaron kaj Alicia kaj aliaj nomoj komencante kun A aliloke. 766 00:32:41,020 --> 00:32:43,460 Sed kiom de problemo estas tio? 767 00:32:43,460 --> 00:32:46,870 Kio estas la probablo ke vi havi kolizioj en datumoj 768 00:32:46,870 --> 00:32:48,240 strukturon kiel tiu? 769 00:32:48,240 --> 00:32:52,570 >> Nu, lasu min - ni revenos al tiu demando tie ĉi. 770 00:32:52,570 --> 00:32:55,530 Kaj rigardu kiel ni povus solvi ĝin unue. 771 00:32:55,530 --> 00:32:58,480 Lasu min eltiri supren tiu propono ĉi tie. 772 00:32:58,480 --> 00:33:02,020 Kion ni jxus priskribita estas algoritmo, heŭristika nomita lineara 773 00:33:02,020 --> 00:33:05,030 sondado per kiu, se vi provus insertar io tie en ĉi tiu datumoj 774 00:33:05,030 --> 00:33:08,920 strukturo, kiu nomiĝas hash tablo, kaj ne estas loko tie, vi 775 00:33:08,920 --> 00:33:12,000 vere sondi la datumstrukturo kontrolanta, estas ĉi disponebla? 776 00:33:12,000 --> 00:33:13,430 Ĉu ĉi Disponeblaj estas ĉi disponebla? 777 00:33:13,430 --> 00:33:13,980 Ĉu tio estas havebla? 778 00:33:13,980 --> 00:33:17,550 Kaj kiam fine, vi enmeti la enoficigi ke vi origine intencis 779 00:33:17,550 --> 00:33:19,370 aliloke en tiu loko. 780 00:33:19,370 --> 00:33:23,360 Sed en la plej malbona kazo, la sola loko eblus la tre fundo de la datumoj 781 00:33:23,360 --> 00:33:25,090 strukturo, la fino de la tabelo. 782 00:33:25,090 --> 00:33:30,130 >> Do lineara sondado, en la plej malbona kazo, devolves enen lineara algoritmo kie 783 00:33:30,130 --> 00:33:34,500 Aaronon, se li pasas al insertos lasta en ĉi tiu datumstrukturo, li povus 784 00:33:34,500 --> 00:33:39,540 kolizias kun tiu unua loko, sed tiam kabo por malbona sorto en la fino. 785 00:33:39,540 --> 00:33:43,940 Do tiu estas ne konstanto tempo Holy Grail por ni. 786 00:33:43,940 --> 00:33:47,650 Ĉi tiu alproksimiĝo de enmeto de elementoj en oni datumstrukturo nomata hash 787 00:33:47,650 --> 00:33:52,050 tablo ne ŝajnas esti konstanta tempo almenaŭ ne en la ĝenerala kazo. 788 00:33:52,050 --> 00:33:54,000 Ĝi povas devolve en iu lineara. 789 00:33:54,000 --> 00:33:56,970 >> Do kio se ni solvi koliziojn iom malsame? 790 00:33:56,970 --> 00:34:00,740 Do jen pli kompleksa alproksimigi al kio ankoraŭ 791 00:34:00,740 --> 00:34:02,800 nomata hash tablo. 792 00:34:02,800 --> 00:34:05,890 Kaj per hash, kiel flanken, kion Mi volas diri estas la indico, ke 793 00:34:05,890 --> 00:34:07,070 Mi raportis al pli frua. 794 00:34:07,070 --> 00:34:09,810 Por hash io povas esti penso de kiel verbo. 795 00:34:09,810 --> 00:34:13,690 >> Do se vi hash Alico estas nomo, kradon funkcio, por tiel diri, 796 00:34:13,690 --> 00:34:14,710 devus reveni numero. 797 00:34:14,710 --> 00:34:18,199 En ĉi tiu kazo estas nulo se ŝi apartenas al situo nulo, unu, se ŝi apartenas al 798 00:34:18,199 --> 00:34:20,000 situo, kaj tiel plu. 799 00:34:20,000 --> 00:34:24,360 Do mia hash funkcio tiel nun estis super simpla, nur rigardante la 800 00:34:24,360 --> 00:34:26,159 unua letero en ies nomon. 801 00:34:26,159 --> 00:34:29,090 Sed hash funkcio prenas kiel enigo iu peco de datumoj, 802 00:34:29,090 --> 00:34:30,210 kordo, oni int, kion ajn. 803 00:34:30,210 --> 00:34:32,239 Kaj ĝi sputas el tipe numero. 804 00:34:32,239 --> 00:34:35,739 Kaj tiu nombro estas kie tiu datumo elemento apartenas en datumstrukturo 805 00:34:35,739 --> 00:34:37,800 montrigxos kiel hash tablo. 806 00:34:37,800 --> 00:34:41,400 >> Do nur intuicie, tio estas iomete malsama kunteksto. 807 00:34:41,400 --> 00:34:44,170 Tiu fakte estas referenco al ekzemplo engaĝante naskiĝtago, kie 808 00:34:44,170 --> 00:34:46,850 povus esti tiom, kiom 31 tagoj en la monato. 809 00:34:46,850 --> 00:34:52,239 Sed kion tiu persono decidas fari en kazo de kolizio? 810 00:34:52,239 --> 00:34:55,304 Kunteksto nun esti, ne estas kolizio de nomojn, sed kolizio de naskiĝtago, 811 00:34:55,304 --> 00:35:00,760 se du personoj havas la saman naskiĝtagon sur la 2-a de oktobro, ekzemple. 812 00:35:00,760 --> 00:35:02,120 >> Lernanto: [inaudibles]. 813 00:35:02,120 --> 00:35:05,010 >> Parolanto 1: Jes, ankaŭ ĉi tie ni havas la utiligante de lertaj kunligitaj. 814 00:35:05,010 --> 00:35:07,830 Tiel ĝi aspektas iom alie ol ni tiris ĝin pli frue. 815 00:35:07,830 --> 00:35:10,790 Sed ni ŝajne devos tabelo sur la maldekstra flanko. 816 00:35:10,790 --> 00:35:13,230 Tio estas unu indico, ĉar neniu aparta kialo. 817 00:35:13,230 --> 00:35:14,630 Sed estas ankoraŭ tabelo. 818 00:35:14,630 --> 00:35:16,160 Ĝi estas aro de montriloj. 819 00:35:16,160 --> 00:35:20,670 Kaj ĉiu el tiuj elementoj, ĉiu el tiuj rondoj aŭ slashes - la oblikvo 820 00:35:20,670 --> 00:35:23,970 reprezentas nula - ĉiu de tiuj montriloj estas ŝajne montrante 821 00:35:23,970 --> 00:35:25,730 kio datumstrukturo? 822 00:35:25,730 --> 00:35:26,890 Al ligitaj listo. 823 00:35:26,890 --> 00:35:30,530 >> Do nun ni havas la kapablon malmola kodon en nia programo 824 00:35:30,530 --> 00:35:32,010 la grandeco de la tablo. 825 00:35:32,010 --> 00:35:35,360 En tiu kazo, ni scias ke estas neniam pli ol 31 tagoj en monato. 826 00:35:35,360 --> 00:35:38,480 Tiel forta kodigo valoron kiel 31 estas racia en tiu kunteksto. 827 00:35:38,480 --> 00:35:42,700 En la kunteksto de nomoj, malmola kodigo 26 ne estas senkaŭza ĝin popola 828 00:35:42,700 --> 00:35:46,340 nomoj nur starti kun, ekzemple, la alfabeto engaĝante A tra Z. 829 00:35:46,340 --> 00:35:50,180 >> Ni povas Cram ilin ĉiujn en kiun datumoj strukturon tiel longe kiel, kiam ni preni 830 00:35:50,180 --> 00:35:55,330 kolizio, ni ne meti la nomojn ĉi tie, ni anstataŭ pensi pri tiuj ĉeloj 831 00:35:55,330 --> 00:36:00,270 ne kiel kordoj mem, sed kiel montriloj al, ekzemple, Alice. 832 00:36:00,270 --> 00:36:03,660 Kaj tiam Alico povas havi alian puntero al alia nomo komencante per 833 00:36:03,660 --> 00:36:06,150 A. Kaj Bob vere iras tien. 834 00:36:06,150 --> 00:36:10,850 >> Kaj se estas alia nomo startanta kun B, li finas ĉi tie. 835 00:36:10,850 --> 00:36:15,070 Kaj tiel ĉiu el la elementoj de tiu tablo du, se ni desegnis ĉi tio 836 00:36:15,070 --> 00:36:17,350 Iom pli lerte - 837 00:36:17,350 --> 00:36:18,125 come on - 838 00:36:18,125 --> 00:36:22,950 se ni desegnis ĉi iom pli lerte, nun iĝas adapta datumoj 839 00:36:22,950 --> 00:36:27,720 strukturo, kie ne estas malfacila limo sur kiom da elementoj vi povas enmeti 840 00:36:27,720 --> 00:36:30,700 en ĝin ĉar se vi ja havas kolizio, ke estas bone. 841 00:36:30,700 --> 00:36:34,690 Nur antaŭeniri kaj postglui al kion ni vidis iom antaŭe estis 842 00:36:34,690 --> 00:36:38,290 konata kiel lerta kunligita. 843 00:36:38,290 --> 00:36:39,690 >> Nu ni paŭzo por nur momento. 844 00:36:39,690 --> 00:36:42,570 Kio estas la probablo de kolizio en la unua loko? 845 00:36:42,570 --> 00:36:45,480 Ĝuste, eble mi pli pensas, eble Mi estas super Engineering tiu problemo, 846 00:36:45,480 --> 00:36:46,370 ĉar vi scias kion? 847 00:36:46,370 --> 00:36:49,070 Jes, mi povas veni supren kun arbitraj ekzemploj sur la supro de mia kapo, kiel 848 00:36:49,070 --> 00:36:52,870 Allison kaj Aaronon, sed en realeco, donita uniforma distribuo de 849 00:36:52,870 --> 00:36:56,990 enigoj, tio estas iom hazarda inserciones en datumstrukturo, kio vere estas 850 00:36:56,990 --> 00:36:58,580 la probablo de kolizio? 851 00:36:58,580 --> 00:37:01,670 Nu rezultas, fakte super altaj. 852 00:37:01,670 --> 00:37:03,850 Lasu min ĝeneraligi ĉi problemo estas kiel ĉi tio. 853 00:37:03,850 --> 00:37:08,890 >> Do en ĉambro de n CS50 studentoj, kio estas la probablo ke almenaŭ 854 00:37:08,890 --> 00:37:11,010 du studentoj en la cxambro havas la saman naskiĝtagon? 855 00:37:11,010 --> 00:37:13,346 Do ne estas kion. kelkaj Hund - 856 00:37:13,346 --> 00:37:16,790 200, 300 homoj tie kaj pluraj cent homoj hejme hodiaŭ. 857 00:37:16,790 --> 00:37:20,670 Do se vi volis demandi nin kio estas la probablo de du personoj 858 00:37:20,670 --> 00:37:23,930 en ĉi tiu ĉambro havante la saman naskiĝtagon, ni povas kompreni tion ĉi. 859 00:37:23,930 --> 00:37:26,250 Kaj mi asertas efektive estas du personoj kun la sama naskiĝtago. 860 00:37:26,250 --> 00:37:29,560 >> Ekzemple, ĉu iu havas naskiĝtagon hodiaŭ? 861 00:37:29,560 --> 00:37:31,340 Hieraŭ? 862 00:37:31,340 --> 00:37:32,590 Morgaŭ? 863 00:37:32,590 --> 00:37:35,980 Bone, do ĝi sentas kiel mi iros havi tion fari 363 aŭ tiel plu 864 00:37:35,980 --> 00:37:39,500 fojoj por fakte elkompreni se ni faras havi kolizio. 865 00:37:39,500 --> 00:37:42,350 Aŭ ni povus simple fari ĉi matematike anstataŭ tediously 866 00:37:42,350 --> 00:37:43,200 fari tion. 867 00:37:43,200 --> 00:37:44,500 Kaj proponas la sekvajn. 868 00:37:44,500 --> 00:37:48,740 >> Do mi proponas ke ni povus modeligi la probablo de du personoj havanta la 869 00:37:48,740 --> 00:37:55,320 sama naskiĝtago kiel la probablon de 1 minus la probablo de neniu, 870 00:37:55,320 --> 00:37:56,290 la saman naskiĝtagon. 871 00:37:56,290 --> 00:37:59,960 Do por atingi ĉi, kaj ĉi tiu estas nur la ornama metodo por skribi ĉi, por la 872 00:37:59,960 --> 00:38:03,090 unua persono en la ĉambron, li aŭ ŝi povas havi iu el la eblaj 873 00:38:03,090 --> 00:38:07,370 naskiĝtago supozante 365 tagoj en la jaro, kun pardonpetoj al personoj kun 874 00:38:07,370 --> 00:38:08,760 la 29-a de februaro naskiĝtago. 875 00:38:08,760 --> 00:38:13,470 >> Do la unua persono en ĉi tiu ĉambro estas libera havi ajnan numeron de naskiĝtago 876 00:38:13,470 --> 00:38:18,280 el la 365 eblecojn por ke ni faros ke 365 dividita per 365, 877 00:38:18,280 --> 00:38:18,990 kiu estas unu. 878 00:38:18,990 --> 00:38:22,700 La sekva persono en la ĉambron, se la celo estas eviti kolizion, povas nur 879 00:38:22,700 --> 00:38:26,460 havi sian naskiĝtagon pri kiel multaj malsamaj eblaj tagoj? 880 00:38:26,460 --> 00:38:27,610 364. 881 00:38:27,610 --> 00:38:31,430 Do la dua termino en tiu esprimo estas esence faras ke matematiko por ni 882 00:38:31,430 --> 00:38:33,460 per subtrahanta for unu ebla tago. 883 00:38:33,460 --> 00:38:36,390 Kaj tiam la sekva tago, la sekva tago, la sekvanta tago malsupren al la tuta nombro 884 00:38:36,390 --> 00:38:38,100 de personoj en la ĉambro. 885 00:38:38,100 --> 00:38:41,290 >> Kaj se ni tiam rigardu, kio tiam estas la probablo ne de ĉiuj havanta 886 00:38:41,290 --> 00:38:45,265 unika naskiĝtago, sed denove 1 minus ke, kio ni atingos estas esprimo 887 00:38:45,265 --> 00:38:47,810 kiu povas tre fancifully aspekti kiel ĉi tio. 888 00:38:47,810 --> 00:38:50,330 Sed estas pli interesa rigardi vide. 889 00:38:50,330 --> 00:38:55,120 Tio ĉi estas abako kie sur la x-akso estas la nombro de homoj en la ĉambro, la 890 00:38:55,120 --> 00:38:56,180 numeron de naskiĝtago. 891 00:38:56,180 --> 00:38:59,840 Sur la y-akso estas la probablo de kolizio, du personoj 892 00:38:59,840 --> 00:39:01,230 havantaj la saman naskiĝtagon. 893 00:39:01,230 --> 00:39:05,020 >> Kaj la takeaway el tiu kurbo estas ke tuj kiam vi atingos like 40 894 00:39:05,020 --> 00:39:11,110 studentoj, vi estas supren je 90% probablo combinatorically de du 895 00:39:11,110 --> 00:39:13,550 homoj aŭ pli havanta la saman naskiĝtagon. 896 00:39:13,550 --> 00:39:18,600 Kaj iam vi atingos like 58 homoj estas preskaŭ 100% de la ŝanco de la du 897 00:39:18,600 --> 00:39:21,310 homoj en la ĉambro tuj havos la saman naskiĝtagon, kvankam ekzistas 898 00:39:21,310 --> 00:39:26,650 365 aŭ 366 eblaj siteloj, kaj nur 58 personoj en la ĉambro. 899 00:39:26,650 --> 00:39:29,900 Nur statistike vi supozeble akiri kolizioj, kiuj en mallonga 900 00:39:29,900 --> 00:39:31,810 motivas ĉi tiu diskuto. 901 00:39:31,810 --> 00:39:35,890 Ke eĉ se ni preni imago tien, kaj komenci havi tiuj ĉenoj, ni ankoraŭ 902 00:39:35,890 --> 00:39:36,950 tuj havas kolizioj. 903 00:39:36,950 --> 00:39:42,710 >> Por ke petegas la demando, kio estas la kosto de fari interpolaciones kaj forigoj 904 00:39:42,710 --> 00:39:44,850 en datumstrukturo tiel? 905 00:39:44,850 --> 00:39:46,630 Nu mi proponas - 906 00:39:46,630 --> 00:39:51,570 kaj mi reiros al la ekrano pli tie - se ni n elementoj en la 907 00:39:51,570 --> 00:39:56,330 listo, do se ni provas enmeti n eroj, kaj ni havas 908 00:39:56,330 --> 00:39:58,050 kiom da tutaj siteloj? 909 00:39:58,050 --> 00:40:03,450 Diru 31 entute siteloj en la kazo de naskiĝtago. 910 00:40:03,450 --> 00:40:09,240 Kio estas la maksimuma longo de unu de ĉi tiuj katenoj potenciale? 911 00:40:09,240 --> 00:40:12,670 >> Se denove ekzistas 31 eblaj naskiĝtago en donita monato. 912 00:40:12,670 --> 00:40:14,580 Kaj ni nur clumping ĉiuj - 913 00:40:14,580 --> 00:40:15,580 fakte tio estas stulta ekzemplo. 914 00:40:15,580 --> 00:40:16,960 Ni faru 26an anstataŭe. 915 00:40:16,960 --> 00:40:20,890 Do, se efektive havas personoj kies nomojn komenci kun A tra Z, donante 916 00:40:20,890 --> 00:40:22,780 ni 26 eblecojn. 917 00:40:22,780 --> 00:40:25,920 Kaj ni uzas datumstrukturo kiel tiu, kiun ni ĵus vidis, per kiu ni havas 918 00:40:25,920 --> 00:40:30,210 tabelo de montriloj, ĉiu el kiuj notas al ligillisto kie la 919 00:40:30,210 --> 00:40:32,360 unua listo estas ĉiuj kun la nomo Alico. 920 00:40:32,360 --> 00:40:35,770 La dua listo estas ĉiu kun la enoficigi komencante kun A, komencante 921 00:40:35,770 --> 00:40:36,980 kun B, kaj tiel plu. 922 00:40:36,980 --> 00:40:41,020 >> Kio estas la probabla longo de ĉiu el tiuj listoj se ni supozas belan pura 923 00:40:41,020 --> 00:40:45,410 dissendo de nomoj A tra Z trans la tuta datumstrukturo? 924 00:40:45,410 --> 00:40:50,210 Estas n popolo en la datumstrukturo dividita de 26, se ili estas bele 925 00:40:50,210 --> 00:40:52,110 etendis super la tuta datumstrukturo. 926 00:40:52,110 --> 00:40:54,970 Do la longecon de ĉiu el tiuj ĉenoj estas n dividita per 26. 927 00:40:54,970 --> 00:40:57,380 Sed en granda a skribmaniero, kio estas tio? 928 00:40:57,380 --> 00:41:00,100 929 00:41:00,100 --> 00:41:02,440 Kio estas tio vere? 930 00:41:02,440 --> 00:41:04,150 Do estas vere nur n, ĉu ne? 931 00:41:04,150 --> 00:41:06,620 Ĉar ni diris en la pasinteco, ke uf vi dividi per 26. 932 00:41:06,620 --> 00:41:08,710 Jes, en la realo estas pli rapida. 933 00:41:08,710 --> 00:41:12,720 Sed en teorio, ne estas fundamente cxio, kion pli rapida. 934 00:41:12,720 --> 00:41:16,040 >> Do ni ne ŝajnas esti tiom multe pli proksima al tiu sankta Grail. 935 00:41:16,040 --> 00:41:17,750 Fakte, ĉi tiu estas nur lineara tempo. 936 00:41:17,750 --> 00:41:20,790 Heck, je ĉi tiu punkto, kial ni ne nur uzi unu grandega ligitaj listo? 937 00:41:20,790 --> 00:41:23,510 Kial ni ne simple uzi unu grandega tabelo por stoki la nomojn de 938 00:41:23,510 --> 00:41:25,010 ĉiuj en la ĉambro? 939 00:41:25,010 --> 00:41:28,280 Nu, estas tie ankoraŭ ion konvinka pri hash tablo? 940 00:41:28,280 --> 00:41:30,810 Ĉu ekzistas ankoraŭ io konvinka pri datumstrukturo 941 00:41:30,810 --> 00:41:33,940 kiu similas al tio? 942 00:41:33,940 --> 00:41:35,182 Ĉi tiu. 943 00:41:35,182 --> 00:41:37,050 >> Lernanto: [inaudibles]. 944 00:41:37,050 --> 00:41:39,840 >> Parolanto 1: Dekstra, kaj denove se estas nur lineara tempa algoritmo, kaj 945 00:41:39,840 --> 00:41:42,780 lineara tempo datumstrukturo, kial mi ne nur stoki ĉies nomon en granda 946 00:41:42,780 --> 00:41:44,210 tabelo, aŭ en granda ligitaj listo? 947 00:41:44,210 --> 00:41:47,010 Kaj ĉesas fari CS tiel malfacila ol ĝi bezonas esti? 948 00:41:47,010 --> 00:41:49,600 949 00:41:49,600 --> 00:41:53,190 Kio estas konvinka pri tio, eĉ kvankam mi gratis gxin? 950 00:41:53,190 --> 00:41:54,930 >> Lernanto: [inaudibles]. 951 00:41:54,930 --> 00:41:57,040 >> Parolanto 1: inserciones ne? 952 00:41:57,040 --> 00:41:58,140 Multekosta plu. 953 00:41:58,140 --> 00:42:03,390 Do inserciones potenciale povus ankoraŭ esti konstanta tempo, eĉ se via datumoj 954 00:42:03,390 --> 00:42:07,910 strukturo similas tiun, tabelo de montriloj, ĉiu el kiuj estas indik 955 00:42:07,910 --> 00:42:09,550 potenciale ligillisto. 956 00:42:09,550 --> 00:42:15,220 Kiel vi povis atingi konstanto tempo inserción de nomoj? 957 00:42:15,220 --> 00:42:16,280 Trae en la antaŭa, ĉu ne? 958 00:42:16,280 --> 00:42:19,290 >> Se ni oferas dezajnon golo de antaŭe, kie ni volis subteni 959 00:42:19,290 --> 00:42:22,650 ĉies nomon, ekzemple, ordo, aŭ ĉiuj el la numeroj en la scenejo ordo, 960 00:42:22,650 --> 00:42:25,020 supozu ke ni havas unsorted ligitaj listo. 961 00:42:25,020 --> 00:42:29,960 Ĝi nur kostas al ni unu aŭ du paŝojn, kiel en la kazo de Ben kaj Brian 962 00:42:29,960 --> 00:42:32,750 antaŭe, por enmeti ero ĉe la komenco de la listo. 963 00:42:32,750 --> 00:42:36,090 Do, se ni ne zorgas pri ordiga ĉiuj de la nomoj komencante kun A aŭ ĉiuj 964 00:42:36,090 --> 00:42:39,660 la nomoj komencante kun B, ni povas ankoraŭ atingi konstanta tempo inserción. 965 00:42:39,660 --> 00:42:43,900 Nun suprenrigardinte Alico aŭ Bob aŭ ajna nomo pli ĝenerale estas ankoraŭ kio? 966 00:42:43,900 --> 00:42:48,100 Estas granda O de n dividita de 26, en la ideala kazo kie ĉiuj estas unuforme 967 00:42:48,100 --> 00:42:51,190 distribuita, kie ekzistas tiom da A kiel estas Z, kiu verŝajne estas 968 00:42:51,190 --> 00:42:52,220 nerealisma. 969 00:42:52,220 --> 00:42:53,880 Sed tio ankoraŭ lineara. 970 00:42:53,880 --> 00:42:57,120 >> Sed ĉi tie, ni revenu al la punkto de asimptota skribmaniero esti 971 00:42:57,120 --> 00:42:58,600 teorie vera. 972 00:42:58,600 --> 00:43:02,960 Sed en la reala mondo, se mi pretendas, ke mia programo povas ion fari 26 fojoj 973 00:43:02,960 --> 00:43:06,210 rapida ol la via, kies programo vi intencas preferas uzi? 974 00:43:06,210 --> 00:43:09,660 Via aŭ mia, kiu estas 26 fojoj pli rapida? 975 00:43:09,660 --> 00:43:14,320 Realisme, la persono kies estas 26 fojojn pli rapide, eĉ se teorie 976 00:43:14,320 --> 00:43:18,790 nia algoritmoj kuri en la sama asimptota rula tempo. 977 00:43:18,790 --> 00:43:20,940 >> Permesu al mi proponi malsamajn solvo entute. 978 00:43:20,940 --> 00:43:24,380 Kaj se tio ne blovu via menso, ni estas el datumstrukturoj. 979 00:43:24,380 --> 00:43:27,420 Do tiu estas ĝin trie - 980 00:43:27,420 --> 00:43:28,520 speco de stultan nomon. 981 00:43:28,520 --> 00:43:32,880 Ĝi devenas retrievals, kaj la vorto estas literumita trie, t-r-i-kaj, pro 982 00:43:32,880 --> 00:43:34,450 Kompreneble reakiro sonas trie. 983 00:43:34,450 --> 00:43:36,580 Sed tio estas la historio de la vorto trie. 984 00:43:36,580 --> 00:43:40,980 >> Do trie ja estas ia arbo, Kaj ĝi estas ankaŭ ludo de tiu vorto. 985 00:43:40,980 --> 00:43:46,330 Kaj eĉ se vi ne povas sufiĉe vidu kun ĉi videbligo, en trie estas 986 00:43:46,330 --> 00:43:50,790 arbo strukturitaj, kiel familio arbo kun unu praulo al la kapo kaj multaj 987 00:43:50,790 --> 00:43:54,530 de nepoj kaj pranepoj kiel ĝi lasas sur la fundo. 988 00:43:54,530 --> 00:43:58,100 Sed ĉiu nodo en trie estas tabelo. 989 00:43:58,100 --> 00:44:00,680 Kaj ĝi estas en tabelo - kaj Ni oversimplify dum momento - ĝi estas 990 00:44:00,680 --> 00:44:04,600 tabelo, en ĉi tiu kazo, de amplekso 26, kie ĉiu nodo denove estas tabelo de grandeco 991 00:44:04,600 --> 00:44:09,000 26, kie la nula ero en tiu tabelo reprezentas A, kaj la lasta 992 00:44:09,000 --> 00:44:11,810 elemento en chiu tia tabelo reprezentas Z. 993 00:44:11,810 --> 00:44:15,520 >> Do mi proponas, do, ke ĉi datumoj strukturo, konata kiel trie, povas esti 994 00:44:15,520 --> 00:44:17,600 uzata ankaŭ por stoki vortoj. 995 00:44:17,600 --> 00:44:21,740 Ni vidis antaŭ momento kiel povus stoki vortoj, aŭ en ĉi tiu kazo nomojn, kaj ni 996 00:44:21,740 --> 00:44:25,440 vidis antaŭe kiel ni povas stoki nombroj, sed se ni enfokusigi nomoj aŭ kordoj 997 00:44:25,440 --> 00:44:27,460 ĉi tie, rimarki kio estas interesa. 998 00:44:27,460 --> 00:44:32,210 Mi asertas ke la nomo de Maxwell estas ene de ĉi datumstrukturo. 999 00:44:32,210 --> 00:44:33,730 Kie vi vidas Maxwell? 1000 00:44:33,730 --> 00:44:35,140 >> Lernanto: [inaudibles]. 1001 00:44:35,140 --> 00:44:36,240 >> Parolanto 1: Maldekstre. 1002 00:44:36,240 --> 00:44:39,910 Do kio estas interesa kun ĉi datumoj strukturo estas iom ol tendencas la 1003 00:44:39,910 --> 00:44:46,200 kordo M-Al-X-W-E-L-L backslash nulo, ĉiuj contiguously, kion vi anstataŭ fari 1004 00:44:46,200 --> 00:44:46,890 sekvas. 1005 00:44:46,890 --> 00:44:50,510 Se ĉi tiu estas trie kiel datumstrukturo, ĉiu el kies verticoj estas denove tabelo, 1006 00:44:50,510 --> 00:44:54,650 kaj vi volas konservi Maxwell, vi unue indekso kaj do la radiko de nodo, tial 1007 00:44:54,650 --> 00:44:57,810 paroli, la plejsupra nodo, ĉe situo M, dekstra, do 1008 00:44:57,810 --> 00:44:59,160 proksimume en la mezo. 1009 00:44:59,160 --> 00:45:03,740 Kaj tiam el tie, vi sekvu la puntero al infanaj verticoj, por tiel diri. 1010 00:45:03,740 --> 00:45:06,150 Do, en la familio arbo senso, vi lin sekvas sube. 1011 00:45:06,150 --> 00:45:09,030 Kaj tio kondukas vin al alia nodo sur la maldekstra, kiu estas 1012 00:45:09,030 --> 00:45:10,540 nur alia tabelo. 1013 00:45:10,540 --> 00:45:14,710 >> Kaj poste se vi volas konservi Maxwell, vi trovos la puntero kiu reprezentas 1014 00:45:14,710 --> 00:45:16,430 A, kio estas ĉi tie. 1015 00:45:16,430 --> 00:45:17,840 Tiam vi iros al la sekva nodo. 1016 00:45:17,840 --> 00:45:20,100 Kaj avizo - tiu ĉi estas kial la bildon de iom trompanta - 1017 00:45:20,100 --> 00:45:21,990 tiu nodo rigardu super eta. 1018 00:45:21,990 --> 00:45:26,050 Sed al la rajto de ĉi tiu estas Y kaj Z. Ĝi estas nur la aŭtoro detranĉis la 1019 00:45:26,050 --> 00:45:27,630 bildo por ke vi efektive vidi tion. 1020 00:45:27,630 --> 00:45:30,400 Alie ĉi tiu bildo Estus ege larĝa. 1021 00:45:30,400 --> 00:45:36,180 Do nun vi indekson en situo X, tiam W, tiam E, tiam L, tiam L. Tiam kio estas 1022 00:45:36,180 --> 00:45:37,380 ĉi vidindaĵo? 1023 00:45:37,380 --> 00:45:41,250 >> Nu, se ni uzas ĉi tia nova alpreni kiel memori ĉenon en 1024 00:45:41,250 --> 00:45:44,500 datumstrukturo, vi ankoraŭ bezonas esence kontroli ekstere en la datumoj 1025 00:45:44,500 --> 00:45:47,250 strukturo ke vorto finiĝas tie. 1026 00:45:47,250 --> 00:45:50,830 En aliaj vortoj, ĉiu el tiuj nodoj iel devas memori, ke ni 1027 00:45:50,830 --> 00:45:53,500 efektive sekvis ĉiuj de ĉi tiuj indikoj kaj estas lasante iom 1028 00:45:53,500 --> 00:45:58,370 pano panero ĉe la malsupro de ĉi tie strukturo indiki M-Al-X-W-E-L-L estas 1029 00:45:58,370 --> 00:46:00,230 ĝuste en ĉi tiu datumstrukturo. 1030 00:46:00,230 --> 00:46:02,040 >> Do ni povus fari tion jene. 1031 00:46:02,040 --> 00:46:06,810 Ĉiu el la nodoj en la bildo kiun ni ĵus montaro havas unu, tabelo de amplekso 27. 1032 00:46:06,810 --> 00:46:10,550 Kaj estas nun 27, ĉar en p metis ses, ni vere donas al vi apostrofo, 1033 00:46:10,550 --> 00:46:13,590 do ni povas havi nomojn kiel O'Reilly kaj aliaj kun apostrofoj. 1034 00:46:13,590 --> 00:46:14,820 Sed sama ideo. 1035 00:46:14,820 --> 00:46:17,710 Ĉiu de ĉi tiuj elementoj en la tabelo notas al struct 1036 00:46:17,710 --> 00:46:19,320 nodo, tial nur nodo. 1037 00:46:19,320 --> 00:46:21,430 Do tiu estas tre memorigas de nia ligillisto. 1038 00:46:21,430 --> 00:46:24,550 >> Kaj tiam mi havas Bulea, kiun Mi instruos vin voki vorto, kiu estas ĝuste tuj estos 1039 00:46:24,550 --> 00:46:29,120 vera se vorto finas en tiu nodo en la arbo. 1040 00:46:29,120 --> 00:46:32,870 Ĝi efektive reprezentas la malgrandan triangulo kiun ni vidis antaŭ momento. 1041 00:46:32,870 --> 00:46:37,190 Do, se vorto finas en tiu nodo en la arbo, tiu vorto kampo estos vera, 1042 00:46:37,190 --> 00:46:41,990 kiu koncepte kontrolanta malproksime, aŭ ni desegnante ĉi tiu triangulo, jes 1043 00:46:41,990 --> 00:46:44,080 estas vorto ĉi tie. 1044 00:46:44,080 --> 00:46:45,120 >> Do tiu estas trie. 1045 00:46:45,120 --> 00:46:48,540 Kaj nun la demando estas, kion estas lia rula tempo? 1046 00:46:48,540 --> 00:46:49,930 Ĉu granda O de n? 1047 00:46:49,930 --> 00:46:51,410 Ĉu io alia? 1048 00:46:51,410 --> 00:46:57,330 Nu, se vi n nomoj en ĉi datumoj strukturo, Maxwell esti nur unu el 1049 00:46:57,330 --> 00:47:02,330 ili, kio estas la rula tempo de enmeto aŭ trovo Maxwell? 1050 00:47:02,330 --> 00:47:06,230 1051 00:47:06,230 --> 00:47:09,050 Kio estas la rula tempo de enmeto de Maxwell? 1052 00:47:09,050 --> 00:47:11,740 Se tie estas n aliaj nomoj jam en la tablo? 1053 00:47:11,740 --> 00:47:12,507 Jes? 1054 00:47:12,507 --> 00:47:15,429 >> Lernanto: [inaudibles]. 1055 00:47:15,429 --> 00:47:17,550 >> Parolanto 1: Jes, ĝi estas la longo de la nomo, ĉu ne? 1056 00:47:17,550 --> 00:47:24,420 Do M-a-x-w-e-l-l tiel sentas kiel tiu algoritmo estas granda a de sep. 1057 00:47:24,420 --> 00:47:26,580 Nun, kompreneble, la nomo estos varii de longitudo. 1058 00:47:26,580 --> 00:47:27,380 Eble estas mallonga nomo. 1059 00:47:27,380 --> 00:47:28,600 Eble estas pli longa nomo. 1060 00:47:28,600 --> 00:47:33,390 Sed kio estas ŝlosilo estas, ke ĝi estas konstanta nombro. 1061 00:47:33,390 --> 00:47:36,810 Kaj eble ĝi ne estas vere konstanto, sed dio, se realisme, en 1062 00:47:36,810 --> 00:47:41,570 vortaro, estas probable iu limo pri la nombro de literoj en 1063 00:47:41,570 --> 00:47:43,820 persono nomon en aparta lando. 1064 00:47:43,820 --> 00:47:46,940 >> Kaj tial ni povas supozi ke valoro estas konstanta. 1065 00:47:46,940 --> 00:47:47,750 Mi ne scias kion ĝi estas. 1066 00:47:47,750 --> 00:47:50,440 Estas probable pli granda ol ni pensas ĝi estas. 1067 00:47:50,440 --> 00:47:52,720 Ĉar ĉiam iu angulo kazo kun freneza longa nomo. 1068 00:47:52,720 --> 00:47:56,360 Do ni nomas ĝin k, sed estas ankoraŭ konstanta supozeble, ĉar ĉiu 1069 00:47:56,360 --> 00:48:00,190 enoficigi en la mondo, almenaŭ en aparta lando, estas ke longo aŭ 1070 00:48:00,190 --> 00:48:01,780 mallonga, do ĝi estas konstanto. 1071 00:48:01,780 --> 00:48:04,490 Sed kiam ni diras ion aĝas Ho de konstanta valoro, kio estas tio 1072 00:48:04,490 --> 00:48:07,760 vere ekvivalenta al? 1073 00:48:07,760 --> 00:48:10,420 Tio estas vere la sama afero kiel dirante konstanta tempo. 1074 00:48:10,420 --> 00:48:11,530 >> Nun ni estas speco de kaptiloj, ĉu ne? 1075 00:48:11,530 --> 00:48:15,340 Ni estas speco de utiligante iuj teorio tie por diri, ke bone, komisio de k estas 1076 00:48:15,340 --> 00:48:17,450 vere nur petita de unu, kaj estas konstanta tempo. 1077 00:48:17,450 --> 00:48:18,200 Sed vere estas. 1078 00:48:18,200 --> 00:48:22,550 Ĉar la ŝlosilo komprenon tie estas ke se ni n nomoj jam en ĉi tiu 1079 00:48:22,550 --> 00:48:26,010 datumstrukturo, kaj ni insert Maxwell, estas la kvanto de tempo nin portas 1080 00:48:26,010 --> 00:48:29,530 enŝovu Maxwell tute tuŝitaj por kiel multaj aliaj personoj 1081 00:48:29,530 --> 00:48:31,100 estas en la datumstrukturo? 1082 00:48:31,100 --> 00:48:31,670 Ne ŝajnas esti. 1083 00:48:31,670 --> 00:48:36,280 Se mi havus unu miliardo pli elementoj al ĉi tiu trie, kaj poste enigi Maxwell, estas 1084 00:48:36,280 --> 00:48:38,650 li tute tuŝita? 1085 00:48:38,650 --> 00:48:39,050 No 1086 00:48:39,050 --> 00:48:42,950 Kaj tio estas malsimila al ĉiu de la tago datumoj strukturoj kiujn ni vidis ĝis nun, kie 1087 00:48:42,950 --> 00:48:46,820 la rula tempo de via algoritmo estas tute sendepende de kiom 1088 00:48:46,820 --> 00:48:51,430 aĵoj estas aŭ ne estas jam en tiu datumstrukturo. 1089 00:48:51,430 --> 00:48:54,650 >> Kaj tial kun ĉi havigas al vi nun estas ŝanco por p aro ses, kiuj volas 1090 00:48:54,650 --> 00:48:58,310 denove impliki apliki vian propran ortografia kontrolilo, legante en 150.000 1091 00:48:58,310 --> 00:49:01,050 vortoj, kiel plej bone stoki ke ne estas nepre evidentaj. 1092 00:49:01,050 --> 00:49:04,030 Kaj kvankam mi aspiris trovi the Holy Grail, mi ne 1093 00:49:04,030 --> 00:49:05,330 laŭ kiuj trie estas. 1094 00:49:05,330 --> 00:49:09,810 Fakte, hash tablo povas tre bone pruvi al esti multe pli efika. 1095 00:49:09,810 --> 00:49:10,830 Sed tiuj estas nur - 1096 00:49:10,830 --> 00:49:14,620 tio estas nur unu el la decidoj de dezajno vi devos fari. 1097 00:49:14,620 --> 00:49:18,920 >> Sed en fermi ni prenu 50 aŭ tiel sekundoj preni peek je kio kuŝas 1098 00:49:18,920 --> 00:49:22,190 antaŭen proksima semajno kaj preter ni transiro el tiu komandlinio 1099 00:49:22,190 --> 00:49:26,220 mondo se C programoj al aĵoj retejo starigi kaj lingvoj kiel PHP kaj 1100 00:49:26,220 --> 00:49:30,350 JavaScript kaj la interreto mem, protokoloj kiel HTTP, kion vi havas 1101 00:49:30,350 --> 00:49:32,870 memkompreneble, dum jaroj nun, kaj tajpita plej ĉiu 1102 00:49:32,870 --> 00:49:34,440 tago, eble, aŭ vidis. 1103 00:49:34,440 --> 00:49:37,420 Kaj ni komencos ŝelo redonas la tavoloj de kio estas la interreto. 1104 00:49:37,420 --> 00:49:40,650 Kaj kio estas la kodo kiu kuŝas sub la hodiaŭa iloj. 1105 00:49:40,650 --> 00:49:43,230 Do 50 sekundoj de ĉi teaser tie. 1106 00:49:43,230 --> 00:49:46,570 Mi donas al vi Soldatoj de la Reto. 1107 00:49:46,570 --> 00:49:51,370 >> [VIDEO reprodukto] 1108 00:49:51,370 --> 00:49:56,764 >> -Li venis kun mesaĝo. 1109 00:49:56,764 --> 00:50:00,687 Kun protokolo ĉiuj liaj propraj. 1110 00:50:00,687 --> 00:50:13,370 1111 00:50:13,370 --> 00:50:19,780 Li venis al mondo de kruela cortafuegos, uncaring routers, kaj danĝeroj malproksime 1112 00:50:19,780 --> 00:50:22,600 pli malbona ol morto. 1113 00:50:22,600 --> 00:50:23,590 Li estas rapida. 1114 00:50:23,590 --> 00:50:25,300 Li estas forta. 1115 00:50:25,300 --> 00:50:27,700 Li estas TCPIP. 1116 00:50:27,700 --> 00:50:30,420 Kaj li havas vian adreson. 1117 00:50:30,420 --> 00:50:32,920 1118 00:50:32,920 --> 00:50:34,590 Soldatoj de la Reto. 1119 00:50:34,590 --> 00:50:35,290 >> [FINO reprodukto de vídeo] 1120 00:50:35,290 --> 00:50:38,070 >> Parolanto 1: Tio estas kiel la interreto gxi funkcios ekde proksima semajno. 1121 00:50:38,070 --> 00:50:40,406