1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:05,120 [MUZIKO Ludante] 3 00:00:05,120 --> 00:00:12,026 4 00:00:12,026 --> 00:00:12,900 SPEAKER 1: Bone. 5 00:00:12,900 --> 00:00:14,600 Ĉiuj bonvenigas reen al sekcio. 6 00:00:14,600 --> 00:00:18,660 Mi esperas ke vi ĉiuj estas sukcese reakirita de via kvizo 7 00:00:18,660 --> 00:00:19,510 de la pasinta semajno. 8 00:00:19,510 --> 00:00:22,564 Mi scias ke estas iom freneza kelkfoje. 9 00:00:22,564 --> 00:00:25,230 Kiel mi diris antaŭe, se vi estas ene de la norma devio, 10 00:00:25,230 --> 00:00:28,188 Ne vere maltrankviliĝu pri tio, precipe dum malpli komfortaj sekcio. 11 00:00:28,188 --> 00:00:30,230 Tio pri kie vi devus esti. 12 00:00:30,230 --> 00:00:32,850 >> Se vi faris grandan, tiam awesome. 13 00:00:32,850 --> 00:00:33,650 Kudos al vi. 14 00:00:33,650 --> 00:00:36,149 Se vi sentas kiel vi bezonas iom pli da helpo, bonvolu 15 00:00:36,149 --> 00:00:38,140 bonvolu alveni el iu el la TFS. 16 00:00:38,140 --> 00:00:40,030 Ni ĉiuj estas tie por helpi. 17 00:00:40,030 --> 00:00:40,960 >> Tio estas kial ni instruos. 18 00:00:40,960 --> 00:00:44,550 Tio estas kial mi estas tie ĉiu lundo por vi infanoj kaj je oficejo horoj en ĵaŭdo. 19 00:00:44,550 --> 00:00:48,130 Do bonvolu bonvolu lasu min scii se vi ĝenus pri io 20 00:00:48,130 --> 00:00:52,450 aŭ se estas io en la kvizo ke vi vere volonte adreso. 21 00:00:52,450 --> 00:00:56,940 >> Do la tagordo por hodiaŭ estas ĉion pri datumstrukturoj. 22 00:00:56,940 --> 00:01:01,520 Kelkaj el tiuj estas ĝuste tuj estos ĝuste akiri vin familiarizado kun tiuj. 23 00:01:01,520 --> 00:01:04,870 Vi eble ne iam implementar ili en ĉi tiu klaso. 24 00:01:04,870 --> 00:01:08,690 Iujn el ili vi volas, kiel via Speller pset. 25 00:01:08,690 --> 00:01:11,380 >> Vi havas vian elekton inter kradaj tabloj kaj peras. 26 00:01:11,380 --> 00:01:13,680 Do ni definitive iros super tiuj. 27 00:01:13,680 --> 00:01:18,690 Ĝi tuj estos definitive pli afabla de alta nivelo sekcio hodiaŭ, kvankam, 28 00:01:18,690 --> 00:01:22,630 ĉar estas multaj el ili, kaj se ni iris en la implementación detaloj 29 00:01:22,630 --> 00:01:26,490 en ĉiuj ĉi tiuj, ni ne eĉ akiri tra ligitaj lertaj 30 00:01:26,490 --> 00:01:28,520 kaj eble iom de hash tabloj. 31 00:01:28,520 --> 00:01:31,200 >> Tiel pacience min toleras. 32 00:01:31,200 --> 00:01:33,530 Ni ne tuj faros tiel kodigo ĉi tempo. 33 00:01:33,530 --> 00:01:36,870 Se vi havas demandojn pri ĝi aŭ vi volas vidi ĝin implementado 34 00:01:36,870 --> 00:01:39,260 aŭ provi ĝin por vi mem, Mi definitive rekomendas 35 00:01:39,260 --> 00:01:44,250 tuj study.cs50.net, kiu havas ekzemplojn de ĉiuj el tiuj. 36 00:01:44,250 --> 00:01:46,400 Ĝi havos mian PowerPoints kun la notoj kiujn ni 37 00:01:46,400 --> 00:01:50,860 emas uzi tiel kiel iuj programado ekzercoj, speciale por aĵoj 38 00:01:50,860 --> 00:01:55,250 kiel ligitaj lertaj kaj binara arboj stakoj kaj sugestoj. 39 00:01:55,250 --> 00:01:59,590 Do iom pli alta nivelo, kiu povus esti bela por vi uloj. 40 00:01:59,590 --> 00:02:01,320 >> Do kun tio, ni komencu. 41 00:02:01,320 --> 00:02:03,060 Kaj ankaŭ, yes-- kvizojn. 42 00:02:03,060 --> 00:02:06,550 Mi kredas plejparto de vi, kiuj en miaj sekcio havas vian kvizojn, 43 00:02:06,550 --> 00:02:12,060 sed iu venas en aŭ ial vi ne, ili estas ĝuste ĉi tie en la fronto. 44 00:02:12,060 --> 00:02:12,740 >> Tiel ligitaj lertaj. 45 00:02:12,740 --> 00:02:15,650 Mi konas tiun specon de eliras apogi antaŭ via kvizo. 46 00:02:15,650 --> 00:02:17,940 Tio estis la semajno antaŭe ke ni lernis pri tio ĉi. 47 00:02:17,940 --> 00:02:21,040 Sed en ĉi tiu kazo, ni simple iri iom pli en profundo. 48 00:02:21,040 --> 00:02:25,900 >> Do kial povus elektas ligillisto super tabelo? 49 00:02:25,900 --> 00:02:27,130 Kio distingas ilin? 50 00:02:27,130 --> 00:02:27,630 Jes? 51 00:02:27,630 --> 00:02:30,464 >> Publiko: Vi povas pligrandigi kunligita listo kontre tabelo de fiksa grandeco. 52 00:02:30,464 --> 00:02:31,171 SPEAKER 1: Ĝuste. 53 00:02:31,171 --> 00:02:33,970 Tabelo fiksis grandeco dum kiu ligillisto havas ŝanĝiĝeman grandeco. 54 00:02:33,970 --> 00:02:36,970 Do se ni ne scias kiel multe ni volas gardi, 55 00:02:36,970 --> 00:02:39,880 lerta kunligita donas al ni grandan maniero fari tion, ĉar ni povas simple 56 00:02:39,880 --> 00:02:43,730 aldonu en alia nodo kaj aldoni sur alia nodo kaj aldoni al alia nodo. 57 00:02:43,730 --> 00:02:45,750 Sed kio povus esti komerco-off? 58 00:02:45,750 --> 00:02:49,521 Ĉu iu memoras la komerco-off inter arrays kaj ligitaj listoj? 59 00:02:49,521 --> 00:02:50,020 Mmhmm? 60 00:02:50,020 --> 00:02:51,460 >> Publiko: vi devas iru tra la tuta vojo 61 00:02:51,460 --> 00:02:53,738 tra la ligillisto trovi ero en listo. 62 00:02:53,738 --> 00:02:55,570 En tabelo, vi povas ĝuste trovi elementon. 63 00:02:55,570 --> 00:02:56,278 >> SPEAKER 1: Ĝuste. 64 00:02:56,278 --> 00:02:57,120 Do kun arrays-- 65 00:02:57,120 --> 00:02:58,500 >> Publiko: [inaudible]. 66 00:02:58,500 --> 00:03:01,090 >> SPEAKER 1: Kun arrays, ni havas kion nomas hazarda aliro. 67 00:03:01,090 --> 00:03:04,820 Signifas ke se ni volas kio estas iam la kvina punkto de listo 68 00:03:04,820 --> 00:03:07,230 aŭ la kvina punkto de nia tabelo, ni povas simple kapti ĝin. 69 00:03:07,230 --> 00:03:10,440 Se ĝi estas ligillisto, ni havas persisti tra, dekstra? 70 00:03:10,440 --> 00:03:14,020 Do alirante ero en tabelo estas konstanta tempo, 71 00:03:14,020 --> 00:03:19,530 dum kun ligillisto ĝi farus plej verŝajna esti lineara tempo ĉar eble 72 00:03:19,530 --> 00:03:21,370 nia ero estas la tuta vojo al la fino. 73 00:03:21,370 --> 00:03:23,446 Ni devas serĉi tra ĉiu. 74 00:03:23,446 --> 00:03:25,320 Do kun ĉiuj ĉi tiuj datumoj strukturoj ni iras 75 00:03:25,320 --> 00:03:29,330 esti elspezante iom pli da tempo sur, kio estas la pluses kaj negativaj. 76 00:03:29,330 --> 00:03:31,480 Kiam eble ni volas uzi unu super la alia? 77 00:03:31,480 --> 00:03:34,970 Kaj tio estas speco de la granda afero por forpreni. 78 00:03:34,970 --> 00:03:40,140 >> Do ni havas ĉi tie la difino de nodo. 79 00:03:40,140 --> 00:03:43,040 Estas kiel unu eron en nia ligillisto, dekstra? 80 00:03:43,040 --> 00:03:46,180 Do ni ĉiuj konas kun niaj typedef structs, 81 00:03:46,180 --> 00:03:47,980 kiun ni transiris en recenzo lastan fojon. 82 00:03:47,980 --> 00:03:53,180 Estis esence nur kreante alia datumtipo ke ni povus uzi. 83 00:03:53,180 --> 00:03:57,930 >> Kaj en ĉi tiu kazo, ĝi estas iu nodo ke estos teni iu entjero en. 84 00:03:57,930 --> 00:04:00,210 Kaj tiam kio estas la dua parto tien? 85 00:04:00,210 --> 00:04:03,192 86 00:04:03,192 --> 00:04:05,677 Iu? 87 00:04:05,677 --> 00:04:06,680 >> Publiko: [inaudible]. 88 00:04:06,680 --> 00:04:07,020 >> SPEAKER 1: Jes. 89 00:04:07,020 --> 00:04:08,400 Ĝi estas puntero al la venonta vertico. 90 00:04:08,400 --> 00:04:12,610 Do tiu devus reale esti ĝis tie. 91 00:04:12,610 --> 00:04:18,790 Tio estas puntero de tipo nodo al alia afero. 92 00:04:18,790 --> 00:04:22,410 Kaj tio estas kion ili ampleksas nia nodo. 93 00:04:22,410 --> 00:04:24,060 Malvarmeta. 94 00:04:24,060 --> 00:04:29,390 >> Bone, do per serĉo, kiel ni estis nur diras antaŭ mano, se vi estas 95 00:04:29,390 --> 00:04:31,840 tuj serĉu pere, vi devas efektive persisti 96 00:04:31,840 --> 00:04:33,660 tra via ligillisto. 97 00:04:33,660 --> 00:04:38,530 Do se ni serĉas la numeron 9, ni devus komenci je nia kapo 98 00:04:38,530 --> 00:04:41,520 kaj kiu notas al ni komence de nia ligillisto, dekstra? 99 00:04:41,520 --> 00:04:44,600 Kaj ni diras, OK, ĉu tiu nodo enhavas la numeron 9? 100 00:04:44,600 --> 00:04:45,690 Neniu? 101 00:04:45,690 --> 00:04:47,500 >> Bone, iru al la sekvanta unu. 102 00:04:47,500 --> 00:04:48,312 Sekvi ĝin. 103 00:04:48,312 --> 00:04:49,520 Ĉu ĝi enhavas la numeron 9? 104 00:04:49,520 --> 00:04:50,570 No. 105 00:04:50,570 --> 00:04:51,550 Sekvu la venonta unu. 106 00:04:51,550 --> 00:04:55,490 >> Do ni devas reale persisti tra nia ligillisto. 107 00:04:55,490 --> 00:05:00,070 Ni ne povas simple iri rekte al kie 9 estas. 108 00:05:00,070 --> 00:05:05,860 Kaj se vi uloj efektive volas vidi iujn pseŭdo-kodo tie supre. 109 00:05:05,860 --> 00:05:10,420 Ni havas kelkajn serĉo funkcio tie kiu prenas in-- kio faras ĝi preni en? 110 00:05:10,420 --> 00:05:13,110 111 00:05:13,110 --> 00:05:14,320 Kion vi opinias? 112 00:05:14,320 --> 00:05:15,960 Tiel facila. 113 00:05:15,960 --> 00:05:17,784 Kio estas tio? 114 00:05:17,784 --> 00:05:18,700 Publiko: [inaudible]. 115 00:05:18,700 --> 00:05:20,366 SPEAKER 1: La nombro ni serĉas. 116 00:05:20,366 --> 00:05:20,980 Rajto? 117 00:05:20,980 --> 00:05:22,875 Kaj kion tio respondas al? 118 00:05:22,875 --> 00:05:25,020 Ĝi estas puntero al? 119 00:05:25,020 --> 00:05:26,000 >> Publiko: Nodo. 120 00:05:26,000 --> 00:05:28,980 >> SPEAKER 1: Nodo al la elenco ke ni rigardas, ĉu ne? 121 00:05:28,980 --> 00:05:33,700 Do ni havas iuj nodoj estas puntero tie. 122 00:05:33,700 --> 00:05:37,240 Tiu estas punkto kiu tuj efektive persisti tra nia dissendlisto. 123 00:05:37,240 --> 00:05:39,630 Ni starigu gxin egala al listo ĉar tio estas nur 124 00:05:39,630 --> 00:05:44,380 establante ŝin egala al la komenci de nia ligillisto. 125 00:05:44,380 --> 00:05:50,660 >> Kaj dum ŝi ne NULL, dum ni ankoraŭ havas aĵojn en nia listo, 126 00:05:50,660 --> 00:05:55,580 kontroli por vidi se tiu nodo havas la nombro ni serĉas. 127 00:05:55,580 --> 00:05:57,740 Reveni vera. 128 00:05:57,740 --> 00:06:01,070 Alie, ĝisdatigi ĝin, ĉu ne? 129 00:06:01,070 --> 00:06:04,870 >> Se estas NULL, ni eliras nian dum buklo kaj reveni falsaj 130 00:06:04,870 --> 00:06:08,340 ĉar tio signifas ke ni ne trovis ĝin. 131 00:06:08,340 --> 00:06:11,048 Ĉu ĉiuj atingi, kiel tio funkcias? 132 00:06:11,048 --> 00:06:11,548 OK. 133 00:06:11,548 --> 00:06:14,940 134 00:06:14,940 --> 00:06:20,260 >> Do kun inserción, vi havas tri malsamajn vojojn. 135 00:06:20,260 --> 00:06:25,250 Vi povas antaŭmetu, vi povas alfiksus kaj vi povas enigi en Assorted. 136 00:06:25,250 --> 00:06:28,215 En ĉi tiu kazo, ni estas tuj faros antaŭmetu. 137 00:06:28,215 --> 00:06:33,380 Ĉu iu scias kiel tiuj tri kazoj povus diferenci? 138 00:06:33,380 --> 00:06:36,920 >> Do antaŭmetu signifas ke vi metis ĝin ĉe la fronto de via listo. 139 00:06:36,920 --> 00:06:39,770 Do tio signifus ke negrave kion via nodo estas, negrave 140 00:06:39,770 --> 00:06:43,160 kion la valoro estas, vi tuj meti ĝin ĝuste ĉi tie antaŭ, OK? 141 00:06:43,160 --> 00:06:45,160 Ĝi tuj estos la unua elemento en via listo. 142 00:06:45,160 --> 00:06:49,510 >> Se vi alfiksus ĝin, tuj iri al la dorso de via listo. 143 00:06:49,510 --> 00:06:54,010 Kaj enmetu en Assorted signifas ke vi estas tuj metos reale en la loko 144 00:06:54,010 --> 00:06:57,700 kie gardas vian ligillisto ordo. 145 00:06:57,700 --> 00:07:00,810 Denove, kial vi uzas tiuj kaj kiam oni uzas 146 00:07:00,810 --> 00:07:02,530 ili estos varii dependanta sur via kazo. 147 00:07:02,530 --> 00:07:05,834 148 00:07:05,834 --> 00:07:07,750 Se ĝi ne bezonas estu ordigataj antaŭmetu inklinas 149 00:07:07,750 --> 00:07:10,460 esti kio plej homoj uzi, ĉar vi ne 150 00:07:10,460 --> 00:07:15,680 iri tra la tutan liston trovi fine aldoni ĝin, ĉu ne? 151 00:07:15,680 --> 00:07:17,720 Vi povas nur trae juste. 152 00:07:17,720 --> 00:07:21,930 >> Do ni iru tra inserción 1 nun. 153 00:07:21,930 --> 00:07:26,360 Do unu afero kiun mi tuj tre rekomendas en ĉi pset 154 00:07:26,360 --> 00:07:29,820 estas desegni aferojn ekstere, kiel ĉiam. 155 00:07:29,820 --> 00:07:35,130 Ĝi estas tre grava ke vi ĝisdatigos via punteros en la ĝentila ordo 156 00:07:35,130 --> 00:07:38,620 ĉar se vi ĝisdatigi ilin iomete misfunkcias, 157 00:07:38,620 --> 00:07:42,210 vi tuj finos perdante partojn de via listo. 158 00:07:42,210 --> 00:07:49,680 >> Do ekzemple, en tiu kazo, ni estas rakontanta al la kapo por ĝuste punkto 1. 159 00:07:49,680 --> 00:07:56,070 Se ni nur faras tion sen ŝpari ĉi 1 160 00:07:56,070 --> 00:07:58,570 ni ne havas ideon kion 1 devus celi nun 161 00:07:58,570 --> 00:08:02,490 ĉar ni perdis kion la kapo montris. 162 00:08:02,490 --> 00:08:05,530 Do unu afero memori Kiam vi faras antaŭmetu 163 00:08:05,530 --> 00:08:09,630 estas savi kion la kapo punktoj al la unua, 164 00:08:09,630 --> 00:08:15,210 tiam religi ĝin, kaj tiam ĝisdatigi kion via nova nodo devus celi. 165 00:08:15,210 --> 00:08:20,870 166 00:08:20,870 --> 00:08:22,560 En tiu kazo, estas unu maniero por fari ĝin. 167 00:08:22,560 --> 00:08:25,440 >> Do se ni faris gxin tiamaniere kie ni ĵus reasignado kapon 168 00:08:25,440 --> 00:08:30,320 ni perdas esence nia tutan liston, ĉu ne? 169 00:08:30,320 --> 00:08:38,000 Unu vojo fari ĝin estas havi 1 punkto nun kaj poste havas kapon punkto 1. 170 00:08:38,000 --> 00:08:42,650 Aŭ vi povas fari specon de kiel la provizora stokado, kiun mi raportis. 171 00:08:42,650 --> 00:08:45,670 >> Sed reassigning via punteros en la ĝentila ordo 172 00:08:45,670 --> 00:08:48,750 tuj estos tre, tre grava por ĉi pset. 173 00:08:48,750 --> 00:08:53,140 Alie, vi tuj havos hash tablo aŭ provi ke estas ĝuste tuj estos 174 00:08:53,140 --> 00:08:56,014 nur parton de la vortoj kiujn vi voli kaj tiam you're-- mmhmm? 175 00:08:56,014 --> 00:08:58,930 Publiko: Kio estis la provizora stokado afero vi parolis? 176 00:08:58,930 --> 00:09:00,305 SPEAKER 1: La provizora stokado. 177 00:09:00,305 --> 00:09:02,760 Do esence alia Tiel vi povus fari tion 178 00:09:02,760 --> 00:09:07,650 ĝi stokas la kapon de iu, kiel stoki ĝin dumtempa variablo. 179 00:09:07,650 --> 00:09:11,250 Atribuos ĝin al 1 kaj tiam ĝisdatigi 1 atentigi 180 00:09:11,250 --> 00:09:13,830 al kiom kapo uzitaj por marki. 181 00:09:13,830 --> 00:09:16,920 Tiu vojo estas evidente pli eleganta ĉar vi 182 00:09:16,920 --> 00:09:20,770 ne bezonas provizoran valoron, sed nur proponante alian vojon por fari ĝin. 183 00:09:20,770 --> 00:09:23,999 184 00:09:23,999 --> 00:09:25,790 Kaj ni efektive ja havas iuj kodon ĉi. 185 00:09:25,790 --> 00:09:28,080 Do por ligillisto, ni efektive havas iom da kodo. 186 00:09:28,080 --> 00:09:31,930 Do enmeti ĉi tien, tiu estas Des-kompozar. 187 00:09:31,930 --> 00:09:34,290 Do tiu eniras ĝin ĉe la kapo. 188 00:09:34,290 --> 00:09:38,820 >> Do unue, necesas Krei vian novan nodon, kompreneble, 189 00:09:38,820 --> 00:09:40,790 kaj kontroli NULL. 190 00:09:40,790 --> 00:09:43,250 Ĉiam bona. 191 00:09:43,250 --> 00:09:47,840 Kaj tiam vi devas atribui la valoroj. 192 00:09:47,840 --> 00:09:51,260 Whenever vi krei novan nodon, vi ne scias kio ĝi estas indikante proksima, 193 00:09:51,260 --> 00:09:54,560 do vi volas pravalorizi ĝin nula. 194 00:09:54,560 --> 00:09:58,760 Se ĝi finas montras ion alie, ĝi prenas reasignado kaj ĝi estas bone. 195 00:09:58,760 --> 00:10:00,740 Se ĝi estas la unua afero en la listo, ĝi bezonas 196 00:10:00,740 --> 00:10:04,270 atentigi al nulaj ĉar tio estas la fino de la listo. 197 00:10:04,270 --> 00:10:12,410 >> Tial por insertarlo, ni vidos tie estas atribui la proksima valoro de nia nodo 198 00:10:12,410 --> 00:10:17,380 esti ajn estro estas, kiu estas kion ni havis ĉi tie. 199 00:10:17,380 --> 00:10:19,930 Tio estas kion ni ĵus faris. 200 00:10:19,930 --> 00:10:25,820 Kaj tiam ni asignanta kapon al punkto al nia nova nodo, ĉar memoru, 201 00:10:25,820 --> 00:10:31,090 nova estas iuj montrilon al nodo, kaj tio estas ĝuste kion kapo. 202 00:10:31,090 --> 00:10:34,370 Tio estas ekzakte kial ni havas tiun sagon accessor. 203 00:10:34,370 --> 00:10:37,030 204 00:10:37,030 --> 00:10:37,530 Cool? 205 00:10:37,530 --> 00:10:38,130 Mmhmm? 206 00:10:38,130 --> 00:10:41,100 >> Publiko: Ĉu ni devas pravalorizi nova apud nula unua, 207 00:10:41,100 --> 00:10:44,240 aŭ oni povas simple pravalorizi ĝin estras? 208 00:10:44,240 --> 00:10:48,210 >> SPEAKER 1: Nova apud bezonas esti NULL komenci 209 00:10:48,210 --> 00:10:53,760 ĉar vi ne scias, kie tuj estos. 210 00:10:53,760 --> 00:10:56,100 Ankaŭ, ĉi tiu estas speco de nur ŝatas paradigmo. 211 00:10:56,100 --> 00:10:59,900 Vi starigis ĝin egala al NULL simple fari certas, ke ĉiuj viaj bazoj estas kovritaj 212 00:10:59,900 --> 00:11:04,070 antaŭ fari ajnan reasignación por ke Vi ĉiam garantiis ke ĝi volas 213 00:11:04,070 --> 00:11:08,880 esti indikante specifa valoro kontre kiel rubo valoro. 214 00:11:08,880 --> 00:11:12,210 Ĉar, jes, ni atribuos nova proksima aŭtomate, 215 00:11:12,210 --> 00:11:15,420 sed estas pli justa kiel bona praktiko por pravalorizi ĝi 216 00:11:15,420 --> 00:11:19,270 en tiu maniero kaj tiam religi. 217 00:11:19,270 --> 00:11:23,420 >> OK, do duoble ligitaj lertaj nun. 218 00:11:23,420 --> 00:11:24,601 Kion ni pensas? 219 00:11:24,601 --> 00:11:26,350 Kio estas pri duoble ligitaj listoj? 220 00:11:26,350 --> 00:11:30,750 221 00:11:30,750 --> 00:11:34,300 >> Do en nia ligitaj lertaj, ni povas nur movi en unu direkto, dekstra? 222 00:11:34,300 --> 00:11:35,270 Ni nur havas proksiman. 223 00:11:35,270 --> 00:11:36,760 Ni povas nur iri antaŭen. 224 00:11:36,760 --> 00:11:40,300 >> Kun duoble ligillisto, Ni povas ankaŭ movi malantaŭen. 225 00:11:40,300 --> 00:11:44,810 Do ni havas ne nur la numero kiun ni volas konservi, 226 00:11:44,810 --> 00:11:50,110 ni havos kie notas al proksima kaj kie ni ĵus venis. 227 00:11:50,110 --> 00:11:52,865 Do ĉi permesas por iuj bonaj trairo. 228 00:11:52,865 --> 00:11:56,620 229 00:11:56,620 --> 00:12:01,240 >> Do duoble ligitaj nodoj, tre similaj, dekstra? 230 00:12:01,240 --> 00:12:05,000 Nur diferenco estas nun ni havas proksiman kaj antaŭa. 231 00:12:05,000 --> 00:12:06,235 Ĝi estas la sola diferenco. 232 00:12:06,235 --> 00:12:09,570 233 00:12:09,570 --> 00:12:14,790 >> Do se ni antaŭmetu aŭ append-- ni ne havas kodon por tiu supren here-- 234 00:12:14,790 --> 00:12:17,830 sed se vi volus provi insertarlo, la grava afero 235 00:12:17,830 --> 00:12:19,980 Estas vi bezonos fari certe vi asignanta 236 00:12:19,980 --> 00:12:23,360 ambaŭ viajn antaŭajn kaj via sekva puntero korekte. 237 00:12:23,360 --> 00:12:29,010 Do en ĉi tiu kazo, vi farus Ne nur pravalorizi proksima, 238 00:12:29,010 --> 00:12:31,820 vi pravalorizi antaŭa. 239 00:12:31,820 --> 00:12:36,960 Se ni estas en la kapo de la listo, ni ne nur fari kapo egalaj nova, 240 00:12:36,960 --> 00:12:41,750 sed nia nova antaŭa devus notas al la kapo, ĉu ne? 241 00:12:41,750 --> 00:12:43,380 >> Tio estas la sola diferenco. 242 00:12:43,380 --> 00:12:47,200 Kaj se vi volas pli oportuna per tiuj kun ligitaj lertaj, kun insertar, 243 00:12:47,200 --> 00:12:49,900 per forviŝo, kun enigaĵo enen Assorted lerta, 244 00:12:49,900 --> 00:12:52,670 bonvolu kontroli study.cs50.net. 245 00:12:52,670 --> 00:12:54,870 Ekzistas aro da grandaj ekzercoj. 246 00:12:54,870 --> 00:12:55,870 Mi forte rekomendas ilin. 247 00:12:55,870 --> 00:12:59,210 Mi deziras ke ni havis tempon iri tra ili sed ekzistas multaj datumstrukturoj 248 00:12:59,210 --> 00:13:01,530 akiri tra. 249 00:13:01,530 --> 00:13:02,650 >> OK, do hash tabloj. 250 00:13:02,650 --> 00:13:07,070 Ĉi tiu estas probable la plej utila iom vian pset 251 00:13:07,070 --> 00:13:11,090 tien ĉar vi estas iranta esti efektivigo unu el tiuj, aŭ provi. 252 00:13:11,090 --> 00:13:12,200 Mi vere ŝatas hash tabloj. 253 00:13:12,200 --> 00:13:13,110 Ili estas belaj malvarmeta. 254 00:13:13,110 --> 00:13:17,080 >> Do esence kion okazas estas hash tablo 255 00:13:17,080 --> 00:13:22,050 estas kiam ni vere bezonas rapidan inserción, forigoj, kaj lookup. 256 00:13:22,050 --> 00:13:25,010 Tiuj estas la aferoj kiujn ni doni prioritaton en hash tablo. 257 00:13:25,010 --> 00:13:29,500 Ili povas akiri sufiĉe grandan, sed kiel ni vidos kun peras, 258 00:13:29,500 --> 00:13:33,040 estas aĵoj kiuj estas multe pli granda. 259 00:13:33,040 --> 00:13:38,330 >> Sed esence, ĉiu hash tablo estas hash funkcio 260 00:13:38,330 --> 00:13:47,215 kiuj diras al vi kion sitelo meti ĉiun de viaj datumoj, ĉiu el viaj elementoj. 261 00:13:47,215 --> 00:13:51,140 Simpla maniero pensi hash tablo estas ke estas nur siteloj de aĵoj, 262 00:13:51,140 --> 00:13:51,770 dekstra? 263 00:13:51,770 --> 00:13:59,720 Do kiam vi ordig aĵojn por kiel la unua litero de lia nomo, 264 00:13:59,720 --> 00:14:01,820 tio estas speco de kiel hash tablo. 265 00:14:01,820 --> 00:14:06,180 >> Do se mi estus kolekti vi uloj estas en grupojn de ajn nomo komenciĝas 266 00:14:06,180 --> 00:14:11,670 kun A super ĉi tie, aŭ kiu ajn estas naskiĝtago Estas en januaro, februaro, marto, 267 00:14:11,670 --> 00:14:15,220 ajn, kiu estas efike kreante hash tablo. 268 00:14:15,220 --> 00:14:18,120 Ĝi simple krei rubujojn ke vi ordigi viajn eroj enen 269 00:14:18,120 --> 00:14:19,520 tiel ke vi povas trovi ilin facile. 270 00:14:19,520 --> 00:14:22,300 Do tiu maniero kiam mi bezonas trovi unu el vi, 271 00:14:22,300 --> 00:14:24,680 Mi ne devas serĉi tra ĉiu de viaj nomoj. 272 00:14:24,680 --> 00:14:29,490 Mi povas esti similaj, ho, mi scias, ke Danielle la naskiĝtago estas in-- 273 00:14:29,490 --> 00:14:30,240 Publiko: --April. 274 00:14:30,240 --> 00:14:30,948 SPEAKER 1: Aprilo. 275 00:14:30,948 --> 00:14:33,120 Do mi rigardas mian aprilo sitelo kaj kun ajna sorto, 276 00:14:33,120 --> 00:14:38,270 ŝi estos la sola en tie kaj mia tempo estis konstanta en tiu senso, 277 00:14:38,270 --> 00:14:41,230 dum se mi devas serĉi tra amaso de homoj, 278 00:14:41,230 --> 00:14:43,090 ĝi tuj prenos multe pli longe. 279 00:14:43,090 --> 00:14:45,830 Do hash tabloj estas vere ĝuste siteloj. 280 00:14:45,830 --> 00:14:48,630 Facila maniero pensi pri ili. 281 00:14:48,630 --> 00:14:52,930 >> Do tre grava afero pri hash tablo estas hash funkcio. 282 00:14:52,930 --> 00:14:58,140 Do tion mi nur raportis, kiel via unua letero de via persona nomo 283 00:14:58,140 --> 00:15:01,450 aŭ via naskiĝtago monato tiuj estas ideoj kiuj 284 00:15:01,450 --> 00:15:03,070 vere interligataj al hash funkcio. 285 00:15:03,070 --> 00:15:08,900 Estas nur maniero de decidi kiu Balde vi elemento iras en, OK? 286 00:15:08,900 --> 00:15:14,850 Do por ĉi pset, vi povas serĉi sufiĉe tre ajna hash funkcio vi volas. 287 00:15:14,850 --> 00:15:16,030 >> Ne devas esti via propra. 288 00:15:16,030 --> 00:15:21,140 Estas iuj vere malvarmeta aĵoj eliras tie fari cxiajn freneza math. 289 00:15:21,140 --> 00:15:25,170 Kaj se vi volas fari vian literumilo super rapida, 290 00:15:25,170 --> 00:15:27,620 Mi certe rigardi en unu el tiuj. 291 00:15:27,620 --> 00:15:32,390 >> Sed estas ankaŭ la naivuloj, kiel komputi 292 00:15:32,390 --> 00:15:39,010 la sumo de la vortoj, kiel ĉiu litero havas numeron. 293 00:15:39,010 --> 00:15:39,940 Komputi la sumon. 294 00:15:39,940 --> 00:15:42,230 Kiu determinas la rubujon. 295 00:15:42,230 --> 00:15:45,430 Ili ankaŭ havas la facilan kiuj Estas ĝuste kiel ĉiuj de la A a tie ĉi, 296 00:15:45,430 --> 00:15:47,050 ĉiuj B estas tie. 297 00:15:47,050 --> 00:15:48,920 Iu el tiuj. 298 00:15:48,920 --> 00:15:55,770 >> Esence, ĝi simple informas vin ke tabelo indekso via ero devus iri en. 299 00:15:55,770 --> 00:15:58,690 Nur decidante la bucket-- estas tute kradon funkcio estas. 300 00:15:58,690 --> 00:16:04,180 Do jen ni havas ekzemplon, kiu estas nur la unua litero de la kordo 301 00:16:04,180 --> 00:16:05,900 ke mi ĝuste parolas. 302 00:16:05,900 --> 00:16:11,900 >> Do vi havas iun hash tio estas nur la unua letero de via ŝnuro minus A 303 00:16:11,900 --> 00:16:16,090 kiu donos al vi kelkajn numero inter 0 kaj 25. 304 00:16:16,090 --> 00:16:20,790 Kaj kion vi volas fari estas certiĝi ke tiu reprezentas 305 00:16:20,790 --> 00:16:24,110 la grandeco de via hash table-- kiom siteloj ekzistas. 306 00:16:24,110 --> 00:16:25,860 Kun multaj el tiuj kradaj funkcioj, ili estas 307 00:16:25,860 --> 00:16:31,630 tuj estos reveni valoroj kiuj povus esti alte super la nombro de siteloj 308 00:16:31,630 --> 00:16:33,610 ke vi efektive havas en via hash tablo 309 00:16:33,610 --> 00:16:37,240 do vi devas fari sekura kaj mod de tiuj. 310 00:16:37,240 --> 00:16:42,190 Alie, ĝi estas dironta, ho, tio devus esti en sitelo 5000 311 00:16:42,190 --> 00:16:46,040 sed vi havas nur 30 siteloj en via hash tablo. 312 00:16:46,040 --> 00:16:49,360 Kaj kompreneble, ĉiuj scias ke estas tuj rezultos en iuj frenezaj eraroj. 313 00:16:49,360 --> 00:16:52,870 Do certigi al mod de la grandeco de via hash tablo. 314 00:16:52,870 --> 00:16:58,430 315 00:16:58,430 --> 00:16:58,930 Malvarmeta. 316 00:16:58,930 --> 00:17:00,506 Do kolizioj. 317 00:17:00,506 --> 00:17:02,620 Ĉu ĉiu bona ĝis nun? 318 00:17:02,620 --> 00:17:03,120 Mmhmm? 319 00:17:03,120 --> 00:17:05,900 >> Publiko: Kial ĝi reveni tia amasa valoron? 320 00:17:05,900 --> 00:17:09,210 >> SPEAKER 1: Depende de la algoritmo ke via hash funkcio uzas. 321 00:17:09,210 --> 00:17:12,270 Kelkaj el ili faros freneza multipliko. 322 00:17:12,270 --> 00:17:16,270 Kaj tio estas ĉio pri akiri oni eĉ distribuo, 323 00:17:16,270 --> 00:17:18,490 do ili faros iun vere freneza tion kelkfoje. 324 00:17:18,490 --> 00:17:20,960 Tio estas ĉio. 325 00:17:20,960 --> 00:17:22,140 Ion alian? 326 00:17:22,140 --> 00:17:22,829 OK. 327 00:17:22,829 --> 00:17:24,480 >> Do kolizioj. 328 00:17:24,480 --> 00:17:29,270 Esence, kiel mi diris antaŭe, en la plej bona kazo scenaro, 329 00:17:29,270 --> 00:17:32,040 ajna balde mi esploros estas tuj havos unu afero 330 00:17:32,040 --> 00:17:34,160 do mi ne devas rigardi ĉiujn, ĉu ne? 331 00:17:34,160 --> 00:17:37,040 Mi ankaŭ scias ke estas tie aŭ ĝi estas ne, kaj tio estas, kion ni vere volas. 332 00:17:37,040 --> 00:17:43,960 Sed se ni havas dekojn da miloj de datumaj punktoj kaj malpli ol tiu nombro 333 00:17:43,960 --> 00:17:48,700 el siteloj, ni tuj havos kolizioj kie eventuale ion 334 00:17:48,700 --> 00:17:54,210 tuj devas fini en sitelo kiuj jam havas elementon. 335 00:17:54,210 --> 00:17:57,390 >> Do la demando estas, kion ni faru en tiu kazo? 336 00:17:57,390 --> 00:17:58,480 Kion ni faru? 337 00:17:58,480 --> 00:17:59,300 Ni jam havas ion tie? 338 00:17:59,300 --> 00:18:00,060 Ĉu ni simple jxeti gxin? 339 00:18:00,060 --> 00:18:00,700 >> No. 340 00:18:00,700 --> 00:18:01,980 Ni devas konservi ambaŭ de ili. 341 00:18:01,980 --> 00:18:06,400 Do la vojon, kiun ni tipe fari tion estas kio? 342 00:18:06,400 --> 00:18:08,400 Kio estas la datumstrukturo Ni ĵus parolis pri? 343 00:18:08,400 --> 00:18:09,316 Publiko: Ligita listo. 344 00:18:09,316 --> 00:18:10,500 SPEAKER 1: A ligillisto. 345 00:18:10,500 --> 00:18:16,640 Do nun, anstataŭ ĉiu el tiuj siteloj nur havi unu elemento, 346 00:18:16,640 --> 00:18:24,020 ĝi tuj enhavos ligillisto de la elementoj kiuj hashed en ĝin. 347 00:18:24,020 --> 00:18:27,588 OK, ne ĉiuj speco de bonstata ideo? 348 00:18:27,588 --> 00:18:30,546 Ĉar ni ne povus havi tabelo ĉar ni ne scias, kiom da 349 00:18:30,546 --> 00:18:31,730 tuj estos tie. 350 00:18:31,730 --> 00:18:36,540 A ligillisto permesas nin havas nur la ĝusta numero kiu 351 00:18:36,540 --> 00:18:38,465 estas hashed en tiu sitelo dekstra? 352 00:18:38,465 --> 00:18:42,260 353 00:18:42,260 --> 00:18:50,500 >> Do linearaj sondado estas esence ĉi idea-- 354 00:18:50,500 --> 00:18:52,300 ĝi estas unu maniero trakti kolizio. 355 00:18:52,300 --> 00:18:58,010 Kion vi povas fari estas se, en tiu kazo, bero estis hashed en 1 356 00:18:58,010 --> 00:19:01,130 kaj ni jam havas ion tie, vi ĵus 357 00:19:01,130 --> 00:19:04,840 teni subiro ĝis vi trovos malplenan fendo. 358 00:19:04,840 --> 00:19:06,370 Tio estas unu maniero por manipuli ĝin. 359 00:19:06,370 --> 00:19:09,020 La alia maniero por manipuli estas kun kion ni ĵus 360 00:19:09,020 --> 00:19:12,280 called-- la ligitaj Listo nomas sinsekvon. 361 00:19:12,280 --> 00:19:20,510 >> Do tiu ideo funkcias se via hash tablo vi opinias 362 00:19:20,510 --> 00:19:24,150 estas multe pli granda ol via datuma aro aŭ se vi 363 00:19:24,150 --> 00:19:28,870 volas provi minimumigi ĉenante ĝis ĝi estas absolute necesa. 364 00:19:28,870 --> 00:19:34,050 Do unu afero estas linearaj sondado evidente signifas 365 00:19:34,050 --> 00:19:37,290 ke via hash funkcio estas ne tute tiel utila 366 00:19:37,290 --> 00:19:42,200 ĉar vi tuj finos uzante via hash funkcio, alvenante al punkto, 367 00:19:42,200 --> 00:19:46,400 vi linearaj sondi malsupren al iu loko kiu estas havebla. 368 00:19:46,400 --> 00:19:49,670 Sed nun, kompreneble, nenio alie finas tie, 369 00:19:49,670 --> 00:19:52,050 Vi tuj devas serĉu pluen. 370 00:19:52,050 --> 00:19:55,650 >> Kaj estas multe pli serĉo elspezo ke 371 00:19:55,650 --> 00:19:59,820 iras en inputting ero en via hash tablo nun, ĉu ne? 372 00:19:59,820 --> 00:20:05,640 Kaj nun, kiam vi iros kaj provi kaj trovi bero denove, vi tuj hash ĝi, 373 00:20:05,640 --> 00:20:07,742 kaj gxi tuj diros, ho, rigardu en sitelo 1 374 00:20:07,742 --> 00:20:09,700 Kaj ne tuj estos en sitelo 1, do vi 375 00:20:09,700 --> 00:20:11,970 tuj devos trairi tra la resto de tiuj. 376 00:20:11,970 --> 00:20:17,720 Do ĝi estas foje utilaj, sed plej ofte, 377 00:20:17,720 --> 00:20:22,660 Ni tuj diru ke sinsekvon estas kion vi volas fari. 378 00:20:22,660 --> 00:20:25,520 >> Do ni parolis pri tio antaŭe. 379 00:20:25,520 --> 00:20:27,812 Mi havas iom antaŭ mi. 380 00:20:27,812 --> 00:20:33,560 Sed sinsekvon Estas esence ke ĉiu sitelo en via hash tablo 381 00:20:33,560 --> 00:20:36,120 estas nur ligitaj listo. 382 00:20:36,120 --> 00:20:39,660 >> Do alia maniero, aŭ pli teknika vojo, pensi de hash tablo 383 00:20:39,660 --> 00:20:44,490 estas ke estas nur tabelo de ligitaj listoj, kiuj 384 00:20:44,490 --> 00:20:49,330 kiam vi skribas vian vortaro kaj vi provas ŝarĝi ĝin, 385 00:20:49,330 --> 00:20:52,070 pensi pri tio kiel tabelo de ligitaj lertaj 386 00:20:52,070 --> 00:20:54,390 faros ĝin multe pli facile Vi devas pravalorizi. 387 00:20:54,390 --> 00:20:57,680 >> Publiko: Do ​​hash tablo havas antaŭdeterminita grandeco, 388 00:20:57,680 --> 00:20:58,980 kiel [inaudible] de siteloj? 389 00:20:58,980 --> 00:20:59,220 >> SPEAKER 1: Ĝuste. 390 00:20:59,220 --> 00:21:01,655 Do ĝi havas aron da siteloj ke vi determine-- 391 00:21:01,655 --> 00:21:03,530 kiun vi uloj devus bonvolu ludi kun. 392 00:21:03,530 --> 00:21:05,269 Ĝi povas esti tre malvarmeta por vidi, kio okazas 393 00:21:05,269 --> 00:21:06,810 kiel vi ŝanĝas vian numeron de siteloj. 394 00:21:06,810 --> 00:21:09,410 395 00:21:09,410 --> 00:21:11,510 Sed jes, ĝi havas starigu da siteloj. 396 00:21:11,510 --> 00:21:15,360 Kio permesas al vi havi kiel multaj eroj kiel vi bezonas 397 00:21:15,360 --> 00:21:19,350 Estas ĉi apartan sinsekvon kie kunligis listoj en ĉiu sitelo. 398 00:21:19,350 --> 00:21:22,850 Tio signifas via hash tablo estos ĝuste la grandeco 399 00:21:22,850 --> 00:21:25,440 ke vi bezonas esti, ĉu ne? 400 00:21:25,440 --> 00:21:27,358 Tio estas la tuta punkto de ligitaj listo. 401 00:21:27,358 --> 00:21:30,850 402 00:21:30,850 --> 00:21:32,480 Malvarmeta. 403 00:21:32,480 --> 00:21:38,780 >> Do ĉiuj OK tie? 404 00:21:38,780 --> 00:21:39,801 Bone. 405 00:21:39,801 --> 00:21:40,300 Ah. 406 00:21:40,300 --> 00:21:41,860 Kio ĵus okazis? 407 00:21:41,860 --> 00:21:42,960 Vere nun. 408 00:21:42,960 --> 00:21:45,250 Divenu iu mortigas min. 409 00:21:45,250 --> 00:21:52,060 >> OK ni tuj iru en peras, kiuj estas iom freneza. 410 00:21:52,060 --> 00:21:53,140 Mi ŝatas hash tabloj. 411 00:21:53,140 --> 00:21:54,460 Mi kredas ke ili estas vere genia. 412 00:21:54,460 --> 00:21:56,710 Tries estas malvarmeta, ankaŭ. 413 00:21:56,710 --> 00:21:59,590 >> Do ĉu iu memoras kion provi estas? 414 00:21:59,590 --> 00:22:01,740 Vi devus transkuris brevemente en prelego? 415 00:22:01,740 --> 00:22:04,570 416 00:22:04,570 --> 00:22:06,377 Ĉu vi memoras afabla de kiel ĝi funkcias? 417 00:22:06,377 --> 00:22:08,460 Publiko: Mi nur kapjesas ke ni transiru ĝin. 418 00:22:08,460 --> 00:22:09,626 SPEAKER 1: Ni transiru ĝin. 419 00:22:09,626 --> 00:22:13,100 OK, ni vere tuj iros super gxi nun estas, kion ni diras. 420 00:22:13,100 --> 00:22:14,860 >> Publiko: Tio estas por reakiro arbo. 421 00:22:14,860 --> 00:22:15,280 >> SPEAKER 1: Jes. 422 00:22:15,280 --> 00:22:16,196 Ĝi estas reakiro arbo. 423 00:22:16,196 --> 00:22:16,960 Awesome. 424 00:22:16,960 --> 00:22:23,610 Do unu afero rimarki tie estas ke ni rigardas individuajn karakterojn 425 00:22:23,610 --> 00:22:24,480 ĉi tie, ĉu ne? 426 00:22:24,480 --> 00:22:29,710 >> Tiel antaux niaj hash funkcio, ni rigardis la vortojn kiel tuto, 427 00:22:29,710 --> 00:22:32,270 kaj nun ni serĉas pli ĉe la karakterojn, dekstra? 428 00:22:32,270 --> 00:22:38,380 Do ni havos Maxwell tien kaj Mendel. 429 00:22:38,380 --> 00:22:47,840 Do esence try-- manieron pensi pri tio, ke ĉiu nivelo tie 430 00:22:47,840 --> 00:22:49,000 estas tabelo de leteroj. 431 00:22:49,000 --> 00:22:53,310 432 00:22:53,310 --> 00:22:55,790 Do tiu estas via radika nodo tie, ĉu ne? 433 00:22:55,790 --> 00:23:01,980 Tiu havas ĉiujn karakterojn de la alfabeto por la komenco de ĉiu vorto. 434 00:23:01,980 --> 00:23:06,480 >> Kaj kion vi volas fari estas diru, OK, ni havas kelkajn M vorto. 435 00:23:06,480 --> 00:23:10,590 Ni tuj serĉos Maxwell, do ni iru al M. Kaj M punktoj al tuta 436 00:23:10,590 --> 00:23:14,800 alia tabelo kie ĉiu vorto, tiel longe kiel ekzistas 437 00:23:14,800 --> 00:23:17,044 estas vorto kiu havas A kiel la dua letero, 438 00:23:17,044 --> 00:23:19,460 Tiel longe, kiel ekzistas vorto kiu havas B kiel la dua letero, 439 00:23:19,460 --> 00:23:24,630 havos montrilon irante al iu proksima tabelo. 440 00:23:24,630 --> 00:23:29,290 >> Estas probable ne vorto kiun MP ion, 441 00:23:29,290 --> 00:23:32,980 tiel ankaux en la P pozicion en ĉi tabelo, ĝi estus nur NULL. 442 00:23:32,980 --> 00:23:38,840 Ĝi dirus, OK, ne ekzistas vorto kiu M sekvita per P, OK? 443 00:23:38,840 --> 00:23:43,100 Do se ni pensas pri ĝi, ĉiu unu el ĉi tiuj plej malgrandaj aferoj 444 00:23:43,100 --> 00:23:47,990 estas fakte unu el tiuj grandaj blokoj de A tra Z 445 00:23:47,990 --> 00:23:55,064 Do kio povus esti unu el la aĵoj kiu estas ia malavantaĝon de provi? 446 00:23:55,064 --> 00:23:56,500 >> Publiko: Multa memoro. 447 00:23:56,500 --> 00:23:59,940 >> SPEAKER 1: Estas tunoj de memoro, dekstra? 448 00:23:59,940 --> 00:24:08,750 Ĉiu el tiuj blokoj tie reprezentas 26 spacojn 26 elemento tabelo. 449 00:24:08,750 --> 00:24:13,680 Tiel peras akiri nekredeble spaco peza. 450 00:24:13,680 --> 00:24:17,100 >> Sed ili estas tre rapida. 451 00:24:17,100 --> 00:24:22,540 Tiel nekredeble rapida sed vere spaco ineficiente. 452 00:24:22,540 --> 00:24:24,810 Speco de devas kalkuli el kiuj unu vi deziras. 453 00:24:24,810 --> 00:24:29,470 Tio estas vere malvarmeta vian pset, sed ili faras preni multan memoron, 454 00:24:29,470 --> 00:24:30,290 tial vi komerci for. 455 00:24:30,290 --> 00:24:31,480 Yeah? 456 00:24:31,480 --> 00:24:34,300 >> Publiko: Ĉu estus ebla starigi try kaj tiam 457 00:24:34,300 --> 00:24:37,967 Unufoje vi havas ĉiujn datumoj en ĝi, ke vi need-- 458 00:24:37,967 --> 00:24:39,550 Mi ne scias se tio estus sensencaĵo. 459 00:24:39,550 --> 00:24:42,200 Mi estis akiranta liverita de ĉiuj NULL karakteroj, sed tiam 460 00:24:42,200 --> 00:24:42,910 vi ne povos indekso them-- 461 00:24:42,910 --> 00:24:43,275 >> SPEAKER 1: Vi ankoraŭ bezonas ilin. 462 00:24:43,275 --> 00:24:44,854 >> Publiko: - la sama maniero ĉiufoje. 463 00:24:44,854 --> 00:24:45,520 SPEAKER 1: Jes. 464 00:24:45,520 --> 00:24:50,460 Vi bezonas la NULL karakteroj lasi vi scias se ekzistas ne unu vorton tie. 465 00:24:50,460 --> 00:24:52,040 Ben vi havas ion, kion vi volas? 466 00:24:52,040 --> 00:24:52,540 OK. 467 00:24:52,540 --> 00:24:54,581 Bone, do ni iras iri iom pli 468 00:24:54,581 --> 00:24:58,920 en la teknikaj detaloj malantaŭ oni provu kaj labori tra ekzemplo. 469 00:24:58,920 --> 00:25:01,490 >> OK, do tio estas la sama afero. 470 00:25:01,490 --> 00:25:06,290 Dum en ligillisto, nia ĉefa speco of-- kio estas la vorto mi volas? - 471 00:25:06,290 --> 00:25:08,350 kiel konstruaĵo bloko estis nodo. 472 00:25:08,350 --> 00:25:12,280 En provo, ni havas ankaŭ nodo, sed ĝi estas difinita malsame. 473 00:25:12,280 --> 00:25:17,000 >> Do ni havas kelkajn bool ke reprezentas ĉu vorto reale 474 00:25:17,000 --> 00:25:23,530 Ekzistas en tiu loko, kaj poste Ni havas kelkajn tabelo here-- aŭ pli ĝuste, 475 00:25:23,530 --> 00:25:27,840 tio estas puntero al tabelo de 27 karakteroj. 476 00:25:27,840 --> 00:25:33,339 Kaj tio estas ĉar, en tiu kazo, ĉi 27-- mi certas vi ĉiuj similas, atendu, 477 00:25:33,339 --> 00:25:34,880 estas 26 literoj en la alfabeto. 478 00:25:34,880 --> 00:25:36,010 Kial ni havas 27? 479 00:25:36,010 --> 00:25:37,870 >> Do laŭ la vojo vi implementar ĉi, 480 00:25:37,870 --> 00:25:43,240 tio estas de pset ke permesis apostrofoj. 481 00:25:43,240 --> 00:25:46,010 Do tio estas kial la ekstra unu. 482 00:25:46,010 --> 00:25:50,500 Vi ankaŭ havas en iuj kazoj la nula terminator 483 00:25:50,500 --> 00:25:53,230 estas inkludita kiel unu el la karakteroj kiuj ĝi estas permesita esti, 484 00:25:53,230 --> 00:25:56,120 kaj tiel ili kontrolu rigardu, cxu gxi estas la fino de la vorto. 485 00:25:56,120 --> 00:26:01,340 Se vi interesiĝas, Kontroli Kevin la video sur study.cs50, 486 00:26:01,340 --> 00:26:04,790 tiel kiel Vikipedio havas iuj bonaj rimedoj tie. 487 00:26:04,790 --> 00:26:09,000 >> Sed ni tuj iru tra ĝuste speco de kiel vi povus labori tra try 488 00:26:09,000 --> 00:26:11,010 Se vi donis unu. 489 00:26:11,010 --> 00:26:16,230 Do ni havas súper simpla tie havas la vortojn "batilo" kaj "zoom" en ili. 490 00:26:16,230 --> 00:26:18,920 Kaj kiel ni vidas nin tie, tiu malgranda spaco ĉi tie 491 00:26:18,920 --> 00:26:22,560 reprezentas nian bool ke diras, jes, tio estas vorto. 492 00:26:22,560 --> 00:26:27,060 Kaj tiam tiu havas nian arrays de karakteroj, dekstra? 493 00:26:27,060 --> 00:26:33,480 >> Do ni tuj iru tra trovanta "batilo" en tiu provo. 494 00:26:33,480 --> 00:26:38,340 Do komencu ĉe la supro, dekstra? 495 00:26:38,340 --> 00:26:46,290 Kaj ni scias, ke b respondas al la dua indico, la dua elemento 496 00:26:46,290 --> 00:26:47,840 en tiu tabelo, ĉar a kaj b. 497 00:26:47,840 --> 00:26:51,340 Do proksimume la dua. 498 00:26:51,340 --> 00:26:58,820 >> Kaj ĝi diras, OK, malvarmeta, sekvu ke en La sekva tabelo, ĉar se ni memoras, 499 00:26:58,820 --> 00:27:02,160 ĝi ne estas, ke ĉiu el tiuj vere enhavas la elementon. 500 00:27:02,160 --> 00:27:07,110 Ĉiu de ĉi tiuj matricoj enhavas puntero, dekstra? 501 00:27:07,110 --> 00:27:10,030 Ĝi estas grava distingo por fari. 502 00:27:10,030 --> 00:27:13,450 >> Mi scias tion tuj be-- tries estas vere malfacile atingi en la unua momento, 503 00:27:13,450 --> 00:27:15,241 do eĉ se tiu estas la dua aŭ tria tempo 504 00:27:15,241 --> 00:27:18,370 Kaj ĝi estas ankoraŭ speco simili malfacila, 505 00:27:18,370 --> 00:27:21,199 Mi promesas, se vi iros horloĝo La mallonga denove morgaŭ 506 00:27:21,199 --> 00:27:22,740 sxanco gxi faru multon pli sentita. 507 00:27:22,740 --> 00:27:23,890 Ĝi prenas multan digesti. 508 00:27:23,890 --> 00:27:27,800 Mi ankoraŭ foje am kiel, atendu, kio estas provi? 509 00:27:27,800 --> 00:27:29,080 Kjel mi rajtas? 510 00:27:29,080 --> 00:27:33,880 >> Do ni b tiukaze kio estas nia dua indico. 511 00:27:33,880 --> 00:27:40,240 Se ni havis, ekzemple, c aŭ d aŭ ajna alia letero, 512 00:27:40,240 --> 00:27:45,810 ni bezonas por mapi ke reen al la indekso de nia tabelo, ke tio respondas al. 513 00:27:45,810 --> 00:27:56,930 Do ni prenus kiel rchar kaj ni simple subtrahi suferintojn por mapi ĝin 0 al 25. 514 00:27:56,930 --> 00:27:58,728 Ĉiu bona kiel ni mapi niaj karakteroj? 515 00:27:58,728 --> 00:28:00,440 OK. 516 00:28:00,440 --> 00:28:05,980 >> Do ni iru al la dua, kaj ni vidi ke, jes, ĝi estas ne NULL. 517 00:28:05,980 --> 00:28:07,780 Ni povas movi sur al ĉi sekva tabelo. 518 00:28:07,780 --> 00:28:12,300 Do ni iru al tiu flanko tabelo tie. 519 00:28:12,300 --> 00:28:15,500 >> Kaj ni diras, OK, nun ni bezonas vidi se estas ĉi tie. 520 00:28:15,500 --> 00:28:18,590 Estas nula aŭ faras efektive antaŭi? 521 00:28:18,590 --> 00:28:21,880 Do fakte movas plusendu en tiu tabelo. 522 00:28:21,880 --> 00:28:24,570 Kaj ni diras, OK, t estas nia lasta letero. 523 00:28:24,570 --> 00:28:27,580 Do ni iru al la t en la indekso. 524 00:28:27,580 --> 00:28:30,120 Kaj tiam ni movas antaŭen ĉar ne estas alia. 525 00:28:30,120 --> 00:28:38,340 Kaj ĉi tiu lin diras esence, ke, jes, ĝi diras ke estas vorto here-- 526 00:28:38,340 --> 00:28:41,750 ke se vi sekvas ĉi irejo, vi alvenis 527 00:28:41,750 --> 00:28:43,210 en vorto, kiun ni scias estas "batilo". 528 00:28:43,210 --> 00:28:43,800 Jes? 529 00:28:43,800 --> 00:28:46,770 >> Publiko: Ĉu normo havi tiun kiel indico 0 kaj tiam havi specon ĉe 1 530 00:28:46,770 --> 00:28:47,660 aŭ havi je la fino? 531 00:28:47,660 --> 00:28:48,243 >> SPEAKER 1: No. 532 00:28:48,243 --> 00:28:55,360 Do se ni retrorigardas al nia deklaro ĉi tie, ĝi estas bool, 533 00:28:55,360 --> 00:28:59,490 tial ĝi estas lia propra elemento en via nodo. 534 00:28:59,490 --> 00:29:03,331 Do ĝi ne estas parto de la tabelo. 535 00:29:03,331 --> 00:29:03,830 Malvarmeta. 536 00:29:03,830 --> 00:29:08,370 Do kiam ni finos nian vorto kaj ni en tiu tabelo, kion ni volas fari 537 00:29:08,370 --> 00:29:12,807 Estas fari ĉekon por estas tiu vorto. 538 00:29:12,807 --> 00:29:14,390 Kaj en ĉi tiu kazo, ĝi revenus jes. 539 00:29:14,390 --> 00:29:17,220 540 00:29:17,220 --> 00:29:24,090 >> Do en tiu noto, ni scias ke "zoon" - ni konas homoj kiuj "bestoĝardeno" estas vorto, 541 00:29:24,090 --> 00:29:24,820 dekstra? 542 00:29:24,820 --> 00:29:28,990 Sed provu tie estus diru, ne, tio ne. 543 00:29:28,990 --> 00:29:33,980 Kaj ĝi dirus ke ĉar ni ne designó kiel apartajn vortojn. 544 00:29:33,980 --> 00:29:40,440 Kvankam ni povas trairi tra ĉi tabelo, 545 00:29:40,440 --> 00:29:43,890 tiu try dirus ke ne, bestoĝardeno ne estas en via vortaro 546 00:29:43,890 --> 00:29:47,070 ĉar ni ne havas designó kiel tia. 547 00:29:47,070 --> 00:29:52,870 >> Do unu maniero fari that-- Ho, pardonu, tiu ĉi. 548 00:29:52,870 --> 00:29:59,450 Do en ĉi tiu kazo, "bestoĝardeno" ne vorto, sed ĝi estas en nia provo. 549 00:29:59,450 --> 00:30:05,690 Sed en ĉi tiu, ke ni volas ke enkonduki la vorton "bano", kio okazas 550 00:30:05,690 --> 00:30:08,260 Estas ni sekvu through-- b, a, t. 551 00:30:08,260 --> 00:30:11,820 Ni estas en tiu tabelo, kaj Ni iru serĉi h. 552 00:30:11,820 --> 00:30:15,220 >> En tiu kazo, kiam ni rigardi la montrilo ĉe h, 553 00:30:15,220 --> 00:30:17,890 ĝi estas indikante NULL, OK? 554 00:30:17,890 --> 00:30:20,780 Do, se tio estas eksplicite indikante alia tabelo, 555 00:30:20,780 --> 00:30:25,000 Vi supozas ke ĉiuj punteros en tiu tabelo estas indikante nula. 556 00:30:25,000 --> 00:30:28,270 Do en ĉi tiu kazo, h notas al NULL do ni povas fari nenion, 557 00:30:28,270 --> 00:30:31,540 tiel same revenos falsa, "bano" ne estas en ĉi tie. 558 00:30:31,540 --> 00:30:34,102 559 00:30:34,102 --> 00:30:35,810 Do nun ni estas reale tuj iros per 560 00:30:35,810 --> 00:30:39,790 Kiel ni fakte diras ke "zoon" estas en nia provo. 561 00:30:39,790 --> 00:30:42,920 Kiel do ni enmetu "bestoĝardeno" en nia provo? 562 00:30:42,920 --> 00:30:47,810 Do, en la sama maniero kiun ni komencis kun nia ligillisto, ni komencu ĉe la radiko. 563 00:30:47,810 --> 00:30:50,600 Kiam en dubo, starti je la radiko de tiuj aĵoj. 564 00:30:50,600 --> 00:30:53,330 >> Kaj ni diras, OK, z. 565 00:30:53,330 --> 00:30:55,650 z ekzistas en tio, kaj ĝi faras. 566 00:30:55,650 --> 00:30:58,370 Do vi movas al via sekva tabelo, OK? 567 00:30:58,370 --> 00:31:01,482 Kaj tiam la venontan unu, Ni diru, OK, ne o ekzistas? 568 00:31:01,482 --> 00:31:03,000 Ĝi faras. 569 00:31:03,000 --> 00:31:04,330 Tiu denove. 570 00:31:04,330 --> 00:31:08,670 >> Kaj tiel en nia proksima, ni diras, OK, "bestoĝardeno" jam ekzistas ĉi tie. 571 00:31:08,670 --> 00:31:12,440 Ĉio ni bezonas fari estas metita ĉi egalaj al vera, ke la vorto ekzistas. 572 00:31:12,440 --> 00:31:15,260 Se vi sekvis ĉiun ĝis antaŭ tiu punkto, 573 00:31:15,260 --> 00:31:17,030 ĝi estas vorto, do simple metu gxin egala al tiaj. 574 00:31:17,030 --> 00:31:17,530 Jes? 575 00:31:17,530 --> 00:31:22,550 >> Publiko: do faras tion signifas ke "ba" estas vorto ankaŭ? 576 00:31:22,550 --> 00:31:24,120 >> SPEAKER 1: No. 577 00:31:24,120 --> 00:31:28,870 Do en ĉi tiu kazo, "ba" ni akirus tie, ni devus diri estas vorto, 578 00:31:28,870 --> 00:31:31,590 kaj tio estus ankoraŭ ne. 579 00:31:31,590 --> 00:31:32,822 OK? 580 00:31:32,822 --> 00:31:33,740 Mmhmm? 581 00:31:33,740 --> 00:31:36,360 >> Publiko: Tiel unufoje vi trovas ĝin vorto kaj vi diros jes, tiam 582 00:31:36,360 --> 00:31:38,380 enhavos iri al m? 583 00:31:38,380 --> 00:31:42,260 >> SPEAKER 1: Do tiu devas vidi with-- vi ŝarĝas ĉi en. 584 00:31:42,260 --> 00:31:43,640 Vi diras "bestoĝardeno" estas vorto. 585 00:31:43,640 --> 00:31:47,020 Kiam vi iras al check-- kiel, diru vi volas diri, 586 00:31:47,020 --> 00:31:49,400 signifas "bestoĝardeno" ekzistas en tiu vortaro? 587 00:31:49,400 --> 00:31:54,200 Vi nur tuj serĉi "zoo" kaj tiam kontrolu por vidi se ĝi estas vorto. 588 00:31:54,200 --> 00:31:57,291 Vi neniam tuj movos tra al m ĉar tio ne estas 589 00:31:57,291 --> 00:31:58,290 kion vi serĉas. 590 00:31:58,290 --> 00:32:02,690 591 00:32:02,690 --> 00:32:08,070 >> Do se ni efektive volis aldoni "bano" en tiu provo, 592 00:32:08,070 --> 00:32:11,390 ni farus la samon kiel ni faris kun "zoo" 593 00:32:11,390 --> 00:32:15,380 krom ni vidus ke kiam ni provi kaj instigi al h, ĝi ne ekzistas. 594 00:32:15,380 --> 00:32:20,090 Do vi povas pensi pri tio kiel provi aldoni novan nodon en ligillisto, 595 00:32:20,090 --> 00:32:27,210 do ni bezonus aldoni alian unu el tiuj matricoj, kiel tia. 596 00:32:27,210 --> 00:32:35,670 Kaj poste, kion ni faras estas ni nur metis la h elemento de tiu tabelo montras ĉi. 597 00:32:35,670 --> 00:32:39,430 >> Kaj tiam kion ni volas fari tie? 598 00:32:39,430 --> 00:32:43,110 Aldoni ĝin egala al vera ĉar ĝi estas vorto. 599 00:32:43,110 --> 00:32:46,350 600 00:32:46,350 --> 00:32:48,150 Malvarmeta. 601 00:32:48,150 --> 00:32:48,700 Mi scias. 602 00:32:48,700 --> 00:32:51,170 Tries ne estas la plej ekscita. 603 00:32:51,170 --> 00:32:54,250 Kredu min, mi scias. 604 00:32:54,250 --> 00:32:58,040 >> Do unu afero realigi kun peras, Mi diris, ke ili estas tre efika. 605 00:32:58,040 --> 00:33:00,080 Do ni vidis lin ekkantu tuno de spaco. 606 00:33:00,080 --> 00:33:01,370 Ili ia malklara. 607 00:33:01,370 --> 00:33:03,367 Do kial ni iam uzos tiujn? 608 00:33:03,367 --> 00:33:05,450 Ni uzas tiujn ĉar ili estas nekredeble efika. 609 00:33:05,450 --> 00:33:08,130 >> Do se vi iam rigardis supren vorto, vi estas nur 610 00:33:08,130 --> 00:33:10,450 barita per la longeco de la vorto. 611 00:33:10,450 --> 00:33:15,210 Do, se vi serĉas vorto, kiu estas de longeco kvin, 612 00:33:15,210 --> 00:33:20,940 vi nur iam tuj devos fari maksimume kvin komparoj, OK? 613 00:33:20,940 --> 00:33:25,780 Do ĝi faras esence konstanto. 614 00:33:25,780 --> 00:33:29,150 Ŝati inserción kaj lookup estas esence konstanto tempo. 615 00:33:29,150 --> 00:33:33,750 >> Do, se vi povos iam preni io en konstanta tempo, 616 00:33:33,750 --> 00:33:35,150 tio estas same bona kiel ĝi akiras. 617 00:33:35,150 --> 00:33:37,990 Vi ne povas pli bone ol konstanta tempo por tio. 618 00:33:37,990 --> 00:33:43,150 Do kiu estas unu el la grandega pluses de tries. 619 00:33:43,150 --> 00:33:46,780 >> Sed estas multe da spaco. 620 00:33:46,780 --> 00:33:50,380 Do ia decidi kio estas pli grava por vi. 621 00:33:50,380 --> 00:33:54,700 Kaj en la hodiaŭaj komputiloj, La spaco kiu provi eble ekkantu 622 00:33:54,700 --> 00:33:57,740 eble ne afekti vi, kiu multe, sed eble 623 00:33:57,740 --> 00:34:01,350 vi kontraktanta kun iu Kiu havas multe, multe pli da aferoj, 624 00:34:01,350 --> 00:34:02,810 kaj provi simple ne estas racia. 625 00:34:02,810 --> 00:34:03,000 Jes? 626 00:34:03,000 --> 00:34:05,610 >> Publiko: Atendu, do vi havos 26 literojn en ĉiu ununura unu? 627 00:34:05,610 --> 00:34:07,440 >> SPEAKER 1: Mmhmm. 628 00:34:07,440 --> 00:34:08,570 Jes, vi havas 26. 629 00:34:08,570 --> 00:34:16,984 Vi havas kelkajn estas vorto markilo kaj tiam vi havos 26 punteros en cxiu. 630 00:34:16,984 --> 00:34:17,775 Kaj ili estas point-- 631 00:34:17,775 --> 00:34:20,280 >> Publiko: CXia 26 ĉu ili ĉiu havas 26? 632 00:34:20,280 --> 00:34:21,500 >> SPEAKER 1: Jes. 633 00:34:21,500 --> 00:34:27,460 Kaj tial, kiel vi povas vidu, ĝi ekspansiiĝas tute rapide. 634 00:34:27,460 --> 00:34:28,130 Bone. 635 00:34:28,130 --> 00:34:32,524 Do ni tuj eniri en la arboj, kiuj Mi sentas ŝatas estas pli facile kaj probable 636 00:34:32,524 --> 00:34:36,150 esti belan indulto el tries tie. 637 00:34:36,150 --> 00:34:39,620 Do espereble plejparto de vi vidis arbo antaŭe. 638 00:34:39,620 --> 00:34:41,820 Ne kiel la bela karaj ekstere, kiun mi 639 00:34:41,820 --> 00:34:44,340 Ne scias se iu iris libera ĉielo ĵus. 640 00:34:44,340 --> 00:34:49,230 Mi iris pomon pluki tiu semajnfino, kaj ho mia ho, tio estis bela. 641 00:34:49,230 --> 00:34:52,250 Mi ne scias folioj povis rigardi, ke bela. 642 00:34:52,250 --> 00:34:53,610 >> Do tio estas nur arbo, ĉu ne? 643 00:34:53,610 --> 00:34:56,790 Estas nur kelkaj nodo, kaj ĝi notas al aro da aliaj nodoj. 644 00:34:56,790 --> 00:34:59,570 Kiel vi vidas tie, tiu estas speco de temo recurrente. 645 00:34:59,570 --> 00:35:03,720 Nodoj indikus nodoj estas speco de La esenco de multaj datumstrukturoj. 646 00:35:03,720 --> 00:35:06,670 Ĝi nur dependas de kiel ni ilin marki reciproke 647 00:35:06,670 --> 00:35:08,600 kaj kiel ni trairi tra ili kaj kiel ni 648 00:35:08,600 --> 00:35:14,500 enmeti tion kiu determinas iliajn malsamajn trajtojn. 649 00:35:14,500 --> 00:35:17,600 >> Tiel nur iuj terminologio, kiun mi uzis antaŭe. 650 00:35:17,600 --> 00:35:20,010 Do radiko estas kio estas ĉe la plejsupro. 651 00:35:20,010 --> 00:35:21,200 tio estas kie ni ĉiam komencu. 652 00:35:21,200 --> 00:35:23,610 Vi povas pensi pri tio kiel la kapo ankaŭ. 653 00:35:23,610 --> 00:35:28,750 Sed por arboj, ni inklinas referi al kiel la radiko. 654 00:35:28,750 --> 00:35:32,820 >> Ion malsupre here-- en la tre tre bottom-- 655 00:35:32,820 --> 00:35:34,500 Estas konsiderita folioj. 656 00:35:34,500 --> 00:35:37,210 Do ĝi iras kune kun la tuta arbo ion, ĉu ne? 657 00:35:37,210 --> 00:35:39,860 Folioj estas ĉe la randoj de viaj arbo. 658 00:35:39,860 --> 00:35:45,820 >> Kaj tiam ni ankaŭ havas paron de Kondiĉoj paroli nodoj en rilato 659 00:35:45,820 --> 00:35:46,680 al ĉiu alia. 660 00:35:46,680 --> 00:35:49,700 Do ni havas gepatro, infanoj, kaj gefratoj. 661 00:35:49,700 --> 00:35:56,260 Do en ĉi tiu kazo, 3 estas la patro de 5, 6 kaj 7. 662 00:35:56,260 --> 00:36:00,370 Do la patro estas kiom estas unu paŝo supre ajn vi estas 663 00:36:00,370 --> 00:36:02,940 raportante al, tial simple kiel familio arbo. 664 00:36:02,940 --> 00:36:07,090 Espereble tiu estas ĉiu iom iom pli intuicia ol tries. 665 00:36:07,090 --> 00:36:10,970 >> Gefratoj estas iu kiu havas la sama patro, ĉu? 666 00:36:10,970 --> 00:36:13,470 Ili estas en la sama nivelo tie. 667 00:36:13,470 --> 00:36:16,960 Kaj tiam, kiam mi estis dirante, infanoj estas nur 668 00:36:16,960 --> 00:36:22,630 kiom estas unu paŝo sube la nodo en demando, OK? 669 00:36:22,630 --> 00:36:23,470 Malvarmeta. 670 00:36:23,470 --> 00:36:25,610 Do duuma arbo. 671 00:36:25,610 --> 00:36:31,450 Ĉu iu Hazard konjekto sur unu el la karakterizaĵoj de la duuma arbo? 672 00:36:31,450 --> 00:36:32,770 >> Publiko: Max du folioj. 673 00:36:32,770 --> 00:36:33,478 >> SPEAKER 1: Ĝuste. 674 00:36:33,478 --> 00:36:34,640 Do max de du folioj. 675 00:36:34,640 --> 00:36:39,730 Do en ĉi tiu antaŭ, ni havis ĉi tiun kiu havis tri, sed en duuma arbo, 676 00:36:39,730 --> 00:36:45,000 vi havas max de du infanoj po patro, ĉu? 677 00:36:45,000 --> 00:36:46,970 Jen plia Interesa karakterizaĵo. 678 00:36:46,970 --> 00:36:51,550 Ĉu iu scias tion? 679 00:36:51,550 --> 00:36:52,620 Duuma arbo. 680 00:36:52,620 --> 00:37:00,350 >> Do duuma arbo havos ĉiun sur the-- ĉi tiu ne sorted-- 681 00:37:00,350 --> 00:37:05,320 sed en ordo duuma arbo, ĉiu sur la dekstra 682 00:37:05,320 --> 00:37:08,530 estas pli granda ol la patro, kaj ĉio maldekstre 683 00:37:08,530 --> 00:37:10,035 estas malpli ol la patro. 684 00:37:10,035 --> 00:37:15,690 Kaj tio estis kvizo demando antaŭe, tiel bone konas. 685 00:37:15,690 --> 00:37:19,500 Do kiel ni difinas tion, Denove, ni havi alia nodo. 686 00:37:19,500 --> 00:37:21,880 Tiu aspektas tre simila al kio? 687 00:37:21,880 --> 00:37:28,336 688 00:37:28,336 --> 00:37:28,836 Duoble 689 00:37:28,836 --> 00:37:29,320 >> Publiko: Ligita lertaj 690 00:37:29,320 --> 00:37:31,100 >> SPEAKER 1: Duobla ligillisto, dekstra? 691 00:37:31,100 --> 00:37:33,690 Do se ni anstataŭigenda kun antaŭa kaj sekva, 692 00:37:33,690 --> 00:37:35,670 tio estus duoble ligitaj listo. 693 00:37:35,670 --> 00:37:40,125 Sed en ĉi tiu kazo, ni reale havas maldekstran kaj dekstran kaj tio estas ĝi. 694 00:37:40,125 --> 00:37:41,500 Alie, ĝi estas precize la sama. 695 00:37:41,500 --> 00:37:43,374 Ni ankoraŭ havas la elemento vi serĉas, 696 00:37:43,374 --> 00:37:45,988 kaj vi nur havas du punteros tuj ajn sekvas. 697 00:37:45,988 --> 00:37:49,210 698 00:37:49,210 --> 00:37:51,870 Jes, tia duuma serĉarbo. 699 00:37:51,870 --> 00:37:57,665 Se ni rimarkos, ĉiu sur la ĉi tie estas pli granda than-- 700 00:37:57,665 --> 00:37:59,850 aŭ ĉio tuj dekstren tie 701 00:37:59,850 --> 00:38:02,840 estas pli granda ol ĉio tie estas malpli ol. 702 00:38:02,840 --> 00:38:06,980 703 00:38:06,980 --> 00:38:14,000 >> Do se ni devis serĉi tra, ĝi devus rigardi tre proksime al duuma serĉo 704 00:38:14,000 --> 00:38:14,910 ĉi tie, ĉu ne? 705 00:38:14,910 --> 00:38:17,640 Krom anstataŭ serĉi je duono la tabelo, 706 00:38:17,640 --> 00:38:21,720 ni nur rigardante ĉu maldekstren flankon aŭ la dekstra flanko de la arbo. 707 00:38:21,720 --> 00:38:24,850 Do ĝi akiras iom pli simple, mi opinias. 708 00:38:24,850 --> 00:38:29,300 >> Do se via radiko estas NULL, evidente estas nur falsaj. 709 00:38:29,300 --> 00:38:33,470 Kaj se ĝi estas tie, evidente ĝi estas vera. 710 00:38:33,470 --> 00:38:35,320 Se ĝi estas malpli ol, ni serĉu maldekstre. 711 00:38:35,320 --> 00:38:37,070 Se ĝi estas pli granda ol, Ni esploru la dekstra. 712 00:38:37,070 --> 00:38:39,890 Estas ekzakte kiel duuma serĉo, nur malsama datumstrukturo 713 00:38:39,890 --> 00:38:40,600 ke ni uzas. 714 00:38:40,600 --> 00:38:42,790 Anstataŭ tabelo, estas nur duuma arbo. 715 00:38:42,790 --> 00:38:45,820 716 00:38:45,820 --> 00:38:48,090 >> OK, stakoj. 717 00:38:48,090 --> 00:38:51,550 Kaj ankaŭ, ĝi aspektas kiel ni havu iomete da tempo. 718 00:38:51,550 --> 00:38:54,460 Se ni faros, mi ĝojas iri super iu el ĉi denove. 719 00:38:54,460 --> 00:38:56,856 OK, do stakoj. 720 00:38:56,856 --> 00:39:02,695 Ĉu iu memoras kion stacks-- iu trajtojn de pilo? 721 00:39:02,695 --> 00:39:05,550 722 00:39:05,550 --> 00:39:10,400 >> OK, tial la plimulto de ni, mi kredas, manĝi en la manĝ halls-- 723 00:39:10,400 --> 00:39:13,100 kiom ni ne ŝatas. 724 00:39:13,100 --> 00:39:16,900 Sed evidente, vi povas pensi pri pilo laŭvorte kiel stako de pletoj 725 00:39:16,900 --> 00:39:18,460 aŭ stako de aĵoj. 726 00:39:18,460 --> 00:39:21,820 Kaj kio estas grava rimarki estas ke 727 00:39:21,820 --> 00:39:26,850 something-- la karakterizo ke ni nomas ĝin by-- estas LIFO. 728 00:39:26,850 --> 00:39:28,450 Ĉu iu scias kion tio signifas? 729 00:39:28,450 --> 00:39:29,070 Mmhmm? 730 00:39:29,070 --> 00:39:30,650 >> Publiko: lasta en, unua el. 731 00:39:30,650 --> 00:39:32,250 >> SPEAKER 1: Dekstra, daŭras en, unua el. 732 00:39:32,250 --> 00:39:36,585 Do se ni scias, se ni Stacking aferoj supren, la plej facila afero por ekpreni off-- 733 00:39:36,585 --> 00:39:39,570 kaj eble la sola afero ni povas ekpreni ekstere se nia stako estas granda enough-- 734 00:39:39,570 --> 00:39:40,850 estas ke supro elemento. 735 00:39:40,850 --> 00:39:43,460 Do, kion oni metis en last-- kiel ni vidas ĉi tie, 736 00:39:43,460 --> 00:39:46,370 ajn estis puŝita en plej recently-- estas 737 00:39:46,370 --> 00:39:51,160 tuj estos la unua kion ni popo ekstere, OK? 738 00:39:51,160 --> 00:39:56,324 >> Do kion ni havas ĉi tie alia typedef struct. 739 00:39:56,324 --> 00:39:58,740 Tiu estas vere ĝuste ŝatas intensiva kurso en datumstrukturo, 740 00:39:58,740 --> 00:40:01,650 tial ekzistas multe ĵetitaj ĉe vi uloj. 741 00:40:01,650 --> 00:40:02,540 Mi scias. 742 00:40:02,540 --> 00:40:04,970 Do ankoraŭ alia struct. 743 00:40:04,970 --> 00:40:06,740 Yay por strukturoj. 744 00:40:06,740 --> 00:40:16,660 >> Kaj en ĉi tiu kazo, ĝi estas iu montrilo por tabelo kiu havas iun kapablon. 745 00:40:16,660 --> 00:40:20,830 Do tio reprezentas nian pilo tie, kiel nia reala tabelo 746 00:40:20,830 --> 00:40:22,520 ke estas tenanta nian elementoj. 747 00:40:22,520 --> 00:40:24,850 Kaj tiam tie ni havas iun grandecon. 748 00:40:24,850 --> 00:40:31,170 >> Kaj tipe, vi volas konservi aŭtoveturejo de kiel granda via pilo estas 749 00:40:31,170 --> 00:40:36,180 pro kio okazas al permesi Vi devas fari estas se vi scias la grandeco, 750 00:40:36,180 --> 00:40:39,170 ĝi ebligas al vi diri, OK, mi estas je kapablo? 751 00:40:39,170 --> 00:40:40,570 Ĉu mi povas aldoni ion pli? 752 00:40:40,570 --> 00:40:44,650 Kaj ĝi ankaŭ informas vin kie la supro de via pilo 753 00:40:44,650 --> 00:40:48,180 Estas tiel vi scias kion vi efektive povas ekflugi. 754 00:40:48,180 --> 00:40:51,760 Kaj tio efektive tuj esti iom pli klara ĉi tie. 755 00:40:51,760 --> 00:40:57,350 >> Do por puŝo, aĵo, se vi estis iam implementar puŝo, 756 00:40:57,350 --> 00:41:01,330 kiel mi ĵus diris, via pilo havas limigitan grandecon, dekstra? 757 00:41:01,330 --> 00:41:03,990 Nia tabelo havis iun kapablon. 758 00:41:03,990 --> 00:41:04,910 Estas tabelo. 759 00:41:04,910 --> 00:41:08,930 Ĝi estas fiksita grandeco, do ni bezonas certigi ke ni ne metante pli 760 00:41:08,930 --> 00:41:11,950 en niajn vicojn ol ni fakte havas spacon por. 761 00:41:11,950 --> 00:41:16,900 >> Do kiam vi kreas puŝo funkcio, unua kiu faras estas diri, nu bone, 762 00:41:16,900 --> 00:41:18,570 mi havas spacon en mia pilo? 763 00:41:18,570 --> 00:41:23,330 Ĉar se mi ne, pardono, Mi ne povas stoki via ero. 764 00:41:23,330 --> 00:41:28,980 Se mi faras, tiam vi volas konservi ĝin ĉe la supro de la stako, dekstra? 765 00:41:28,980 --> 00:41:31,325 >> Kaj ĉi tio, ni havas por konservi trako de nia grandeco. 766 00:41:31,325 --> 00:41:35,290 Se ni ne konservi trako de nia grandeco, ni ne scias kie meti ĝin. 767 00:41:35,290 --> 00:41:39,035 Ni ne scias kiom da aferoj Estas en nia tabelo jam. 768 00:41:39,035 --> 00:41:41,410 Ŝati evidente ekzistas manieroj ke eble vi povus fari tion. 769 00:41:41,410 --> 00:41:44,610 Vi povus pravalorizi ĉion null kaj tiam kontroli la lastajn NULL, 770 00:41:44,610 --> 00:41:47,950 sed multe pli simpla afero estas simple diri, OK, konservi trako de grandeco. 771 00:41:47,950 --> 00:41:51,840 Kiel mi scias, ke mi havas kvar elementoj Miaj tabelo, do la sekva afero 772 00:41:51,840 --> 00:41:55,930 ke ni surmetis, ni estas tuj stoki je indico 4. 773 00:41:55,930 --> 00:42:00,940 Kaj tiam, kompreneble, ĉi tio signifas ke Vi sukcese puŝis ion 774 00:42:00,940 --> 00:42:03,320 sur via pilo, vi deziras pliigi la grandecon 775 00:42:03,320 --> 00:42:08,880 por ke vi sciu, kie vi estas tiel ke vi povas puŝi pli aĵoj sur. 776 00:42:08,880 --> 00:42:12,730 >> Do se ni provas pop ion ekstere de la stako, 777 00:42:12,730 --> 00:42:16,072 kio povus esti la unua afero ke ni volas kontroli? 778 00:42:16,072 --> 00:42:18,030 Vi provas preni ion demetu pilo. 779 00:42:18,030 --> 00:42:21,710 780 00:42:21,710 --> 00:42:24,781 Ĉu vi certas ke estas ion en via pilo? 781 00:42:24,781 --> 00:42:25,280 No. 782 00:42:25,280 --> 00:42:26,894 Do kio povus ni volas kontroli? 783 00:42:26,894 --> 00:42:27,810 >> Publiko: [inaudible]. 784 00:42:27,810 --> 00:42:29,880 SPEAKER 1: Kontrolu la grandeco? 785 00:42:29,880 --> 00:42:31,840 Grandeco. 786 00:42:31,840 --> 00:42:38,520 Do ni volas kontroli por vidi se nia grandeco estas pli granda ol 0, OK? 787 00:42:38,520 --> 00:42:44,970 Kaj se ĝi estas, tiam ni volas malpliigi nian grandecon per 0 kaj revenas tiel. 788 00:42:44,970 --> 00:42:45,840 Kial? 789 00:42:45,840 --> 00:42:49,950 >> En la unua ni estis puŝante, ni pelis ŝin 790 00:42:49,950 --> 00:42:52,460 sur grandeco kaj tiam ĝisdatigita grandeco. 791 00:42:52,460 --> 00:42:57,850 En ĉi tiu kazo, ni decrementing grandeco kaj tiam preni ĝin, plukas ĝi 792 00:42:57,850 --> 00:42:58,952 el nia tabelo. 793 00:42:58,952 --> 00:42:59,826 Kial povus ni fari? 794 00:42:59,826 --> 00:43:04,800 795 00:43:04,800 --> 00:43:11,811 Do se mi havas ion sur mia stako, kio estus mia grandeco je tiu punkto? 796 00:43:11,811 --> 00:43:13,140 1. 797 00:43:13,140 --> 00:43:15,180 >> Kaj kie estas ero 1 stokitaj? 798 00:43:15,180 --> 00:43:17,621 Je kio indico? 799 00:43:17,621 --> 00:43:18,120 Publiko: 0. 800 00:43:18,120 --> 00:43:19,060 SPEAKER 1: 0. 801 00:43:19,060 --> 00:43:22,800 Do en ĉi tiu kazo, ni ĉiam bezonos fari sure-- 802 00:43:22,800 --> 00:43:27,630 anstataŭ reveni grandeco minus 1, ĉar ni 803 00:43:27,630 --> 00:43:31,730 scias ke nia ero estas tuj stokos je 1 malpli 804 00:43:31,730 --> 00:43:34,705 ajn nia esas, tiu nur prizorgas ĝin. 805 00:43:34,705 --> 00:43:36,080 Ĝi estas iomete pli eleganta maniero. 806 00:43:36,080 --> 00:43:41,220 Kaj ni simple dekremento nia grandeco kaj tiam reveni grandeco. 807 00:43:41,220 --> 00:43:42,330 Mmhmm? 808 00:43:42,330 --> 00:43:45,300 >> Publiko: mi supozas ĝuste ĝenerale, Kial tiu datumstrukturo 809 00:43:45,300 --> 00:43:47,800 beneficioso? 810 00:43:47,800 --> 00:43:50,660 >> SPEAKER 1: Tio dependas de via kuntekston. 811 00:43:50,660 --> 00:43:57,420 Do por iuj de la teorio, se vi laboras with-- OK, 812 00:43:57,420 --> 00:44:02,750 mi volas vidi se estas beneficioso unu kiu estas utila por pli ol ekstere 813 00:44:02,750 --> 00:44:05,420 de CS. 814 00:44:05,420 --> 00:44:15,780 Kun stakoj, ajna tempo vi bezonas por konservi trako de iu kiu 815 00:44:15,780 --> 00:44:20,456 estas la plej lastatempe aldonitaj estas kiam vi tuj volas uzi pilon. 816 00:44:20,456 --> 00:44:24,770 >> Kaj mi ne povas pensi pri bona Ekzemplo de tiu rajto nun. 817 00:44:24,770 --> 00:44:29,955 Sed kiam ajn la plej freŝaj afero estas plej grava por vi, 818 00:44:29,955 --> 00:44:31,705 tio estas kiam stako tuj estos utila. 819 00:44:31,705 --> 00:44:35,797 820 00:44:35,797 --> 00:44:39,330 Mi provas pensi se tie estas bona por tio. 821 00:44:39,330 --> 00:44:43,720 Se mi pensas pri bona ekzemplo en la sekva 20 minutoj, mi definitive diri al vi. 822 00:44:43,720 --> 00:44:49,455 >> Sed ĝenerale, se estas io, kiel mi diris pli, kie plej freŝaj 823 00:44:49,455 --> 00:44:52,470 plej gravas, ke la kie stako eniras en ludo. 824 00:44:52,470 --> 00:44:58,860 Dum vostoj estas speco de la malo. 825 00:44:58,860 --> 00:44:59,870 Kaj ĉiuj hundetoj. 826 00:44:59,870 --> 00:45:00,890 Ne estas tiu granda, ĉu ne? 827 00:45:00,890 --> 00:45:03,299 Mi sentas kiel mi devus nur havi bunny video 828 00:45:03,299 --> 00:45:05,090 ĝuste en la mezo de sekcio por vi uloj 829 00:45:05,090 --> 00:45:08,870 ĉar tiu estas intensa sekcio. 830 00:45:08,870 --> 00:45:10,480 >> Do vosto. 831 00:45:10,480 --> 00:45:12,710 Esence vosto similas al linio. 832 00:45:12,710 --> 00:45:15,780 Vi uloj mi certas uzo ĉi ĉiutaga, ĝuste kiel en nia manĝejojn. 833 00:45:15,780 --> 00:45:18,160 Do ni devas iri en kaj akiri niajn pletojn, mi estas 834 00:45:18,160 --> 00:45:21,260 certe vi devas atendi en vico al swipe aŭ akiri vian manĝon. 835 00:45:21,260 --> 00:45:24,650 >> Do la diferenco ĉi tie estas kiu klopodas FIFO. 836 00:45:24,650 --> 00:45:30,090 Do se LIFO estis lasta en, unua eksteren, FIFO estas unua en, unua el. 837 00:45:30,090 --> 00:45:33,400 Do ĉi tiu estas kie ajn vi metis je unua estas via plej grava. 838 00:45:33,400 --> 00:45:35,540 Do se vi atendis en line-- ĉu eblas 839 00:45:35,540 --> 00:45:39,130 imagu se vi iris iri akiri la nova iPhone 840 00:45:39,130 --> 00:45:42,800 kaj estis stako kie la lasta persono en linio havas ĝin unua, 841 00:45:42,800 --> 00:45:44,160 homoj mortigas unu la alian. 842 00:45:44,160 --> 00:45:49,800 >> Do FIFO, ni estas ĉiuj tre familiara kun la reala mondo tie, 843 00:45:49,800 --> 00:45:54,930 kaj ĉiuj devas vidi kun reale ia rekreas ĉi tuta linio 844 00:45:54,930 --> 00:45:56,900 kaj vicatendis strukturo. 845 00:45:56,900 --> 00:46:02,390 Do dum la stako, ni havos puŝo kaj popo. 846 00:46:02,390 --> 00:46:06,440 Kun vosto, ni havas enqueue kaj dequeue. 847 00:46:06,440 --> 00:46:10,910 Do enqueue esence signifas metis ĝin sur la dorson, 848 00:46:10,910 --> 00:46:13,680 kaj dequeue signifas preni sur la antauxa. 849 00:46:13,680 --> 00:46:18,680 Do nia datumstrukturo estas Iomete pli komplikita. 850 00:46:18,680 --> 00:46:21,060 Ni havos duan aferon spuri. 851 00:46:21,060 --> 00:46:25,950 >> Do sen la kapo, tio Estas ekzakte stako, dekstra? 852 00:46:25,950 --> 00:46:27,900 Ĉi tiu estas la sama strukturo kiel stako. 853 00:46:27,900 --> 00:46:32,480 La nura afero malsama nun estas ni havas tiun kapon, ke kion vi opinias 854 00:46:32,480 --> 00:46:34,272 tuj konservi trako de? 855 00:46:34,272 --> 00:46:35,510 >> Publiko: La unua. 856 00:46:35,510 --> 00:46:38,685 >> SPEAKER 1: Dekstra, La unua afero kiun ni metas en. 857 00:46:38,685 --> 00:46:41,130 La estro de nia vosto. 858 00:46:41,130 --> 00:46:42,240 Kiu estas la unua en linio. 859 00:46:42,240 --> 00:46:45,300 860 00:46:45,300 --> 00:46:49,420 Bone, do se ni faras enqueue. 861 00:46:49,420 --> 00:46:52,720 862 00:46:52,720 --> 00:46:55,920 Denove, kun iu el tiuj datumstrukturoj, 863 00:46:55,920 --> 00:46:59,760 ekde ni kontraktanta kun tabelo, ni bezonos por kontroli se ni havas spacon. 864 00:46:59,760 --> 00:47:03,290 >> Tiu estas speco de kiel mi diras al vi uloj, se vi malfermos dosieron: 865 00:47:03,290 --> 00:47:04,760 Vi bezonas kontroli nula. 866 00:47:04,760 --> 00:47:08,330 Kun iu el tiuj piloj kaj vostoj, necesas 867 00:47:08,330 --> 00:47:13,420 por vidi se estas spaco ĉar ni estas kontraktanta kun fiksa grandeco tabelo, 868 00:47:13,420 --> 00:47:16,030 kiel ni vidos here-- 0, 1 ĉiuj ĝis 5. 869 00:47:16,030 --> 00:47:20,690 Do kion ni faru en tiu kazo estas ĉeko por vidi se ni havas ankoraŭ spacon. 870 00:47:20,690 --> 00:47:23,110 Ĉu nia grandeco malpli ol kapablo? 871 00:47:23,110 --> 00:47:28,480 >> Se jes, necesas gardi ĝin la vosto kaj ni ĝisdatigi nian grandecon. 872 00:47:28,480 --> 00:47:30,250 Do kio povus la vosto en tiu kazo? 873 00:47:30,250 --> 00:47:32,360 Ĝi ne estas eksplicite skribite eksteren. 874 00:47:32,360 --> 00:47:33,380 Kiel ni stoki ĝin? 875 00:47:33,380 --> 00:47:34,928 Kio estus la vosto estas? 876 00:47:34,928 --> 00:47:38,600 877 00:47:38,600 --> 00:47:40,190 >> Do ni iru tra tiu ekzemplo. 878 00:47:40,190 --> 00:47:44,590 Do tiu estas tabelo de amplekso 6, dekstra? 879 00:47:44,590 --> 00:47:49,220 Kaj ni havas nun, nia esas 5. 880 00:47:49,220 --> 00:47:55,240 Kaj kiam ni metis ĝin en, ĝi okazas por iri en la kvina indico, dekstra? 881 00:47:55,240 --> 00:47:57,030 Do stoki en vosto. 882 00:47:57,030 --> 00:48:05,600 >> Alia maniero por skribi vosto farus nur estu nia tabelo ĉe indico de grandeco, dekstra? 883 00:48:05,600 --> 00:48:07,560 Ĉi estas grandeco 5. 884 00:48:07,560 --> 00:48:11,490 Sekva afero tuj iros en 5. 885 00:48:11,490 --> 00:48:12,296 Cool? 886 00:48:12,296 --> 00:48:13,290 OK. 887 00:48:13,290 --> 00:48:16,350 Ĝi alvenas iomete pli komplika kiam ni komencas metante kun la kapo. 888 00:48:16,350 --> 00:48:17,060 Jes? 889 00:48:17,060 --> 00:48:20,090 >> Publiko: Ĉu tio signifas, ke ni estus deklarita tabelo ke 890 00:48:20,090 --> 00:48:23,880 Estis kvin elementoj kaj longaj tiam ni aldonas sur ĝi? 891 00:48:23,880 --> 00:48:24,730 >> SPEAKER 1: No. 892 00:48:24,730 --> 00:48:27,560 Do en tiu kazo, estas stako. 893 00:48:27,560 --> 00:48:31,760 Tiu estus deklarita kiel tabelo de amplekso 6. 894 00:48:31,760 --> 00:48:37,120 Kaj en ĉi tiu kazo, ni nur unu spaco maldekstre. 895 00:48:37,120 --> 00:48:42,720 >> OK, do unu afero estas en tio okazo, se nia estro estas je 0, 896 00:48:42,720 --> 00:48:45,270 tiam ni simple povas aldoni ĝin al grandeco. 897 00:48:45,270 --> 00:48:51,020 Sed metas iom trickier ĉar efektive, ili 898 00:48:51,020 --> 00:48:52,840 ne havas slide pro tio, ke mi iras 899 00:48:52,840 --> 00:48:56,670 desegni unu ĉar ĝi estas ne tute simpla unufoje vi 900 00:48:56,670 --> 00:48:59,230 komenci liverante de aĵoj. 901 00:48:59,230 --> 00:49:03,920 Do dum kun pilo Vi nur iam 902 00:49:03,920 --> 00:49:08,920 zorgi pri kion la grandeco estas kiam vi aldonas ion plu, 903 00:49:08,920 --> 00:49:15,710 kun vosto vi ankaŭ bezonos fari certa ke via kapo estas klarigita, 904 00:49:15,710 --> 00:49:20,760 ĉar malvarmeta afero pri vostoj estas ke se vi ne estas en kapablo, 905 00:49:20,760 --> 00:49:23,040 vi povas reale fari envolver ĉirkaŭe. 906 00:49:23,040 --> 00:49:28,810 >> OK, do unu thing-- ho, Estas terure kreto. 907 00:49:28,810 --> 00:49:31,815 Unu afero konsideri estas la kazo. 908 00:49:31,815 --> 00:49:35,514 909 00:49:35,514 --> 00:49:37,140 Ni nur faru kvin. 910 00:49:37,140 --> 00:49:41,810 OK, do ni tuj diras la estro estas tie. 911 00:49:41,810 --> 00:49:46,140 Tiu estas 0, 1, 2, 3, 4. 912 00:49:46,140 --> 00:49:54,210 >> La kapo estas tie, kaj bonvolu havi aĵojn en ili. 913 00:49:54,210 --> 00:49:58,340 Kaj ni volas aldoni ion, ĉu ne? 914 00:49:58,340 --> 00:50:01,170 Do kion ni bezonas scii estas kiu la kapo estas ĉiam 915 00:50:01,170 --> 00:50:05,620 tuj movi tien kaj tiam buklo reen ĉirkaŭe, OK? 916 00:50:05,620 --> 00:50:10,190 >> Do tiu vosto havas spacon, dekstra? 917 00:50:10,190 --> 00:50:13,950 Ĝi havas spacon en la komenco, speco de la malon de tio. 918 00:50:13,950 --> 00:50:17,920 Do kion ni bezonas por fari estas ni bezonas kalkuli la vosto. 919 00:50:17,920 --> 00:50:20,530 Se vi scias, ke via kapo ne moviĝis, vosto 920 00:50:20,530 --> 00:50:24,630 estas nur via tabelo je la indico de la grandeco. 921 00:50:24,630 --> 00:50:30,000 >> Sed en realo, se vi uzas vosto, Via kapo estas probable esti ĝisdatigita. 922 00:50:30,000 --> 00:50:33,890 Do kion vi bezonas fari estas reale kalkuli la vosto. 923 00:50:33,890 --> 00:50:39,990 Do kion ni faras estas tiu formulo tie, kiun mi tuj lasos 924 00:50:39,990 --> 00:50:42,680 infanoj pensi, kaj tiam ni parolos pri ĝi. 925 00:50:42,680 --> 00:50:49,567 926 00:50:49,567 --> 00:50:50,400 Do tio estas kapablo. 927 00:50:50,400 --> 00:50:55,890 928 00:50:55,890 --> 00:50:59,660 >> Do tio efektive al vi vojon por fari ĝin. 929 00:50:59,660 --> 00:51:03,205 930 00:51:03,205 --> 00:51:04,330 Ĉar en tiu kazo, kion? 931 00:51:04,330 --> 00:51:09,205 Nia estro estas je 1, nia esas 4. 932 00:51:09,205 --> 00:51:11,760 933 00:51:11,760 --> 00:51:18,490 Se ni mod kiu por 5, ni preni 0, kio estas kie ni devus input ĝin. 934 00:51:18,490 --> 00:51:23,320 935 00:51:23,320 --> 00:51:26,080 >> Tial en la sekvanta okazo, se ni faros tion, 936 00:51:26,080 --> 00:51:33,390 Ni diru, bone, ni dequeue ion. 937 00:51:33,390 --> 00:51:34,390 Ni dequeue ĉi. 938 00:51:34,390 --> 00:51:37,740 Ni prenu tiun elementon, dekstra? 939 00:51:37,740 --> 00:51:47,930 >> Kaj nun nia kapo notas ĉi tie, kaj ni volas aldoni alian aferon. 940 00:51:47,930 --> 00:51:52,470 Tio estas esence la dorso de nia linio, dekstra? 941 00:51:52,470 --> 00:51:55,450 Vostoj povas envolver ĉirkaŭ la tabelo. 942 00:51:55,450 --> 00:51:57,310 Tio estas unu el la ĉefaj diferencoj. 943 00:51:57,310 --> 00:51:58,780 Stakoj, vi ne povas fari ĉi tion. 944 00:51:58,780 --> 00:52:01,140 >> Kun vostoj, vi povas CXar cxio, kio gravas 945 00:52:01,140 --> 00:52:03,940 estas ke vi scias kion Estis plej lastatempe aldonitaj. 946 00:52:03,940 --> 00:52:10,650 Ekde ĉiu tuj estos aldonita en ĉi maldekstren direkton, tiukaze 947 00:52:10,650 --> 00:52:16,480 kaj tiam envolver ĉirkaŭe, vi povas daŭrigi metante novajn elementojn 948 00:52:16,480 --> 00:52:18,830 ĉe la fronto de la tabelo ĉar ne vere 949 00:52:18,830 --> 00:52:20,640 La fronto de la tabelo anymore. 950 00:52:20,640 --> 00:52:26,320 Vi povas pensi pri la komenco de la tabelo de kie via kapo reale estas. 951 00:52:26,320 --> 00:52:29,710 >> Do ĉi tiu formulo estas kiel vi kalkuli vian voston. 952 00:52:29,710 --> 00:52:32,780 953 00:52:32,780 --> 00:52:35,610 Ĉu tio havas sencon? 954 00:52:35,610 --> 00:52:36,110 OK. 955 00:52:36,110 --> 00:52:39,400 956 00:52:39,400 --> 00:52:44,040 OK, dequeue kaj tiam vi uloj havas 10 minutojn 957 00:52:44,040 --> 00:52:48,840 demandi min ajna klarigante demandoj vi volas, ĉar mi scias ke estas freneza. 958 00:52:48,840 --> 00:52:51,980 >> Bone, do en la saman way-- Mi ne scias, ĉu vi uloj rimarkis, 959 00:52:51,980 --> 00:52:53,450 sed CS estas ĉio pri ŝablonoj. 960 00:52:53,450 --> 00:52:57,370 Aĵoj estas sufiĉe tre la sama, nur kun eta tweaks. 961 00:52:57,370 --> 00:52:58,950 Do samon tie. 962 00:52:58,950 --> 00:53:04,040 Ni devas kontroli por vidi se ni reale havi ion en nia vosto, dekstra? 963 00:53:04,040 --> 00:53:05,960 Diru, OK, estas nia grandeco pli granda ol 0? 964 00:53:05,960 --> 00:53:06,730 Malvarmeta. 965 00:53:06,730 --> 00:53:10,690 >> Se ni faras, tiam ni transloki nian kapon, kiu Tion mi simple pruvis tie. 966 00:53:10,690 --> 00:53:13,870 Ni ĝisdatigos nia kapo esti unu pli. 967 00:53:13,870 --> 00:53:18,390 Kaj tiam ni dekremento nia grandeco kaj redoni la elementon. 968 00:53:18,390 --> 00:53:21,000 969 00:53:21,000 --> 00:53:26,250 >> Ekzistas multe pli da konkretaj kodo sur study.cs50.net, 970 00:53:26,250 --> 00:53:29,440 Mi forte rekomendas iri tra ĝi, se vi havas tempon, 971 00:53:29,440 --> 00:53:30,980 eĉ se estas nur pseŭdo-kodo. 972 00:53:30,980 --> 00:53:35,980 Kaj se vi uloj volas paroli per ke kun mi unu sur unu, bonvolu sciigi min 973 00:53:35,980 --> 00:53:37,500 scias. 974 00:53:37,500 --> 00:53:38,770 Mi ŝatus. 975 00:53:38,770 --> 00:53:42,720 Datumstrukturoj, se vi prenas CS 124, vi 976 00:53:42,720 --> 00:53:47,830 scias ke datumstrukturoj akiri tre amuzo kaj ĉi estas nur komenco. 977 00:53:47,830 --> 00:53:50,350 >> Do mi scias ke estas malfacile. 978 00:53:50,350 --> 00:53:51,300 Estas bone. 979 00:53:51,300 --> 00:53:52,410 Ni luktas. 980 00:53:52,410 --> 00:53:53,630 Mi ankoraŭ faros. 981 00:53:53,630 --> 00:53:56,660 Do, ne tro maltrankviliĝu pri tio. 982 00:53:56,660 --> 00:54:02,390 >> Sed tio estas esence via intensiva kurso en datumstrukturoj. 983 00:54:02,390 --> 00:54:03,400 Mi scias ke estas multe. 984 00:54:03,400 --> 00:54:06,860 Ĉu estas io ke ni dezirus transiri denove? 985 00:54:06,860 --> 00:54:09,400 Io ajn ni volas paroli tra? 986 00:54:09,400 --> 00:54:10,060 Jes? 987 00:54:10,060 --> 00:54:16,525 >> Publiko: Por ekzemplo, do la nova vosto estas je 0 transigis tion? 988 00:54:16,525 --> 00:54:17,150 SPEAKER 1: Jes. 989 00:54:17,150 --> 00:54:18,230 Publiko: OK. 990 00:54:18,230 --> 00:54:24,220 Do tiam iras tra, vi havus 1 plus 4 or-- 991 00:54:24,220 --> 00:54:27,671 >> SPEAKER 1: Do vi diras, Kiam ni volas iri fari ĉi tien? 992 00:54:27,671 --> 00:54:28,296 Publiko: Yeah. 993 00:54:28,296 --> 00:54:38,290 Do se vi imagante out-- kie estas vi kalkuli la voston de en tio? 994 00:54:38,290 --> 00:54:44,260 >> SPEAKER 1: Do la vosto Estis in-- Mi ŝanĝis ĉi. 995 00:54:44,260 --> 00:54:52,010 Do en ĉi tiu ekzemplo tie, tio estis la tabelo ni rigardas, OK? 996 00:54:52,010 --> 00:54:54,670 Do ni havas aferojn en 1, 2, 3, kaj 4. 997 00:54:54,670 --> 00:55:05,850 Do ni havos niajn kapo egalas al 1, je tiu punkto, kaj nia esas egala al 4 998 00:55:05,850 --> 00:55:07,050 ĉe tiu punkto, dekstra? 999 00:55:07,050 --> 00:55:08,960 >> Vi ĉiuj konsentas ke estas la kazo? 1000 00:55:08,960 --> 00:55:14,620 Do ni faru la kapo plus la grandeco, kiun donas al ni 5, kaj tiam ni MOD por 5. 1001 00:55:14,620 --> 00:55:20,690 Ni preni 0, kiu nin diras ke 0 estas kie estas nia vosto, kie ni havas spacon. 1002 00:55:20,690 --> 00:55:22,010 >> Publiko: Kio estas kaskedo? 1003 00:55:22,010 --> 00:55:23,520 >> SPEAKER 1: La kapablo. 1004 00:55:23,520 --> 00:55:24,020 Pardonu. 1005 00:55:24,020 --> 00:55:29,640 Do tio estas la grandeco de via tabelo. 1006 00:55:29,640 --> 00:55:35,210 1007 00:55:35,210 --> 00:55:36,047 Jes? 1008 00:55:36,047 --> 00:55:39,210 >> Publiko: [inaudible] antaŭe ni revenos la elemento? 1009 00:55:39,210 --> 00:55:46,270 >> SPEAKER 1: Do ni movos la kapo aŭ redoni la momento? 1010 00:55:46,270 --> 00:55:52,680 Do se ni movas unu, dekremento la grandeco? 1011 00:55:52,680 --> 00:55:54,150 Rezisti. 1012 00:55:54,150 --> 00:55:55,770 Mi definitive forgesis alian. 1013 00:55:55,770 --> 00:56:00,646 1014 00:56:00,646 --> 00:56:01,990 Ne gravas. 1015 00:56:01,990 --> 00:56:04,980 Ne estas alia formulo. 1016 00:56:04,980 --> 00:56:09,980 Jes, vi volus redoni la kapon kaj tiam movi ĝin. 1017 00:56:09,980 --> 00:56:13,270 >> Publiko: Bone, ĉar en ĉi tiu punkto, la kapo estis je 0, 1018 00:56:13,270 --> 00:56:18,452 kaj tiam vi volas reveni indico 0 kaj tiam fari kapo 1? 1019 00:56:18,452 --> 00:56:19,870 >> SPEAKER 1: Ĝuste. 1020 00:56:19,870 --> 00:56:22,820 Mi kredas ke estas alia formulo speco de kiel oriento. 1021 00:56:22,820 --> 00:56:26,970 Mi ne havas ĝin sur la supro de mia kapo Mi ne volas doni al vi malĝustan unu. 1022 00:56:26,970 --> 00:56:35,470 Sed mi pensas, ke estas perfekte valide diru, OK, stoki ĉi element-- ajn 1023 00:56:35,470 --> 00:56:40,759 kapo de elemento is-- dekremento via grandeco, movu vian kapon super kaj reveno 1024 00:56:40,759 --> 00:56:41,800 ajn tiu elemento estas. 1025 00:56:41,800 --> 00:56:44,760 Tio estas perfekte valida. 1026 00:56:44,760 --> 00:56:45,260 OK. 1027 00:56:45,260 --> 00:56:48,360 1028 00:56:48,360 --> 00:56:53,560 Mi sentas min kiel ĉi tiu estas ne kiel la most-- vi ne 1029 00:56:53,560 --> 00:56:55,740 tuj iru el tie kiel, jes, mi scias tries. 1030 00:56:55,740 --> 00:56:56,880 Mi havas ĝin ĉiuj. 1031 00:56:56,880 --> 00:56:57,670 Tio estas en ordo. 1032 00:56:57,670 --> 00:57:00,200 Mi promesas. 1033 00:57:00,200 --> 00:57:05,240 Sed datumstrukturoj estas iu kiu ĝi prenas multan tempon kutimi. 1034 00:57:05,240 --> 00:57:10,010 Probable unu el la plej malfacila tion, mi kredas, en la kurso. 1035 00:57:10,010 --> 00:57:15,330 >> Do ĝi definitive prenas ripeto kaj rigardante at-- mi 1036 00:57:15,330 --> 00:57:20,050 Ne vere scias ligitaj lertaj ĝis mi faris multe tro da kun ili, 1037 00:57:20,050 --> 00:57:22,550 en la sama maniero kiun mi ne vere kompreni punteros 1038 00:57:22,550 --> 00:57:27,040 ĝis mi devis instrui dum du jarojn kaj do miaj propraj psets kun ĝi. 1039 00:57:27,040 --> 00:57:28,990 Ĝi prenas multan reiteración kaj tempo. 1040 00:57:28,990 --> 00:57:32,600 Kaj finfine, ĝi estos ia klaku. 1041 00:57:32,600 --> 00:57:36,320 >> Sed dume, se vi havas specon de altnivela kompreno de kio 1042 00:57:36,320 --> 00:57:39,321 tiuj do, ilia pros kaj cons-- kio estas kio 1043 00:57:39,321 --> 00:57:41,820 ni vere emas substreki, precipe en la intro kurso. 1044 00:57:41,820 --> 00:57:45,511 Kiel, kial ni uzas oni provos sur tabelo? 1045 00:57:45,511 --> 00:57:48,010 Kiel, kio estas la pozitivaj kaj negativaj de ĉiu el tiuj? 1046 00:57:48,010 --> 00:57:51,610 >> Kaj kompreni la komerco-offs inter ĉiu de tiuj strukturoj 1047 00:57:51,610 --> 00:57:54,910 Estas kio estas multe pli grava nun. 1048 00:57:54,910 --> 00:57:58,140 Povas esti unu freneza demando aŭ du kiu estas 1049 00:57:58,140 --> 00:58:03,710 tuj demandos vin implementar puŝo aŭ implementar popo aŭ enqueue kaj dequeue. 1050 00:58:03,710 --> 00:58:07,340 Sed plejparte, havi tiun alta nivelo kompreno kaj pli 1051 00:58:07,340 --> 00:58:09,710 de intuicia kompreno estas pli grava ol reale 1052 00:58:09,710 --> 00:58:11,250 povante apliki ĝin. 1053 00:58:11,250 --> 00:58:14,880 >> Estus vere imponega se vi ĉiuj povis eliri kaj iri implementar try, 1054 00:58:14,880 --> 00:58:19,720 sed ni komprenas ĝin ne nepre la plej racia afero nun. 1055 00:58:19,720 --> 00:58:23,370 Sed vi povas en via pset, se vi volas al, kaj poste vi ricevos praktiko 1056 00:58:23,370 --> 00:58:27,200 kaj do eble vi vere komprenis. 1057 00:58:27,200 --> 00:58:27,940 Jes? 1058 00:58:27,940 --> 00:58:30,440 >> Publiko: Bone, do, kiuj estas ni intencis uzi en la pset? 1059 00:58:30,440 --> 00:58:31,916 Ĉu mi devas uzi unu el ili? 1060 00:58:31,916 --> 00:58:32,540 SPEAKER 1: Jes. 1061 00:58:32,540 --> 00:58:34,199 Do vi havas preferatan. 1062 00:58:34,199 --> 00:58:36,740 Mi supozas en ĉi tiu kazo, ni povas paroli pri la pset iomete 1063 00:58:36,740 --> 00:58:40,480 ĉar mi trakuris tiujn. 1064 00:58:40,480 --> 00:58:47,779 Do en via pset, vi havas vian elekton el tries aŭ hash tabloj. 1065 00:58:47,779 --> 00:58:49,570 Iuj homoj provos kaj uzi floras filtriloj, 1066 00:58:49,570 --> 00:58:51,840 sed tiuj teknike ne estas korekta. 1067 00:58:51,840 --> 00:58:55,804 Pro ilia probableca naturo ili donas falsaj pozitivaj kelkfoje. 1068 00:58:55,804 --> 00:58:57,095 Ili estas malvarmeta esploru, kvankam. 1069 00:58:57,095 --> 00:58:59,030 Tre rekomendas serĉi ilin almenaŭ. 1070 00:58:59,030 --> 00:59:03,260 Sed vi havas preferatan inter kradaj tablo kaj provi. 1071 00:59:03,260 --> 00:59:06,660 Kaj ke tuj estos kie vi ŝarĝi en via vortaro. 1072 00:59:06,660 --> 00:59:09,230 >> Kaj vi devas elekti via hash funkcio, 1073 00:59:09,230 --> 00:59:13,420 vi bezonas elekti kiom siteloj vi havas, kaj ĝi varias. 1074 00:59:13,420 --> 00:59:17,440 Kiel se vi havas pli siteloj, eble kuros pli rapide. 1075 00:59:17,440 --> 00:59:22,790 Sed eble vi malŝparante multa spaco tiel, kvankam. 1076 00:59:22,790 --> 00:59:26,320 Vi devas kompreni ĝin. 1077 00:59:26,320 --> 00:59:27,140 Mmhmm? 1078 00:59:27,140 --> 00:59:29,875 >> Publiko: Vi antaŭe diris ke Ni povas uzi aliajn kradaj funkcioj, 1079 00:59:29,875 --> 00:59:31,750 ke ni ne devas krei hash funkcio? 1080 00:59:31,750 --> 00:59:32,666 >> SPEAKER 1: Jes, ĝuste. 1081 00:59:32,666 --> 00:59:38,150 Do laŭvorte por via hash funkcio, kiel google "hash funkcio" 1082 00:59:38,150 --> 00:59:40,770 kaj serĉas iun malvarmeta aĵoj. 1083 00:59:40,770 --> 00:59:43,250 Vi ne atendas konstrui viajn proprajn kradaj funkcioj. 1084 00:59:43,250 --> 00:59:46,100 Homoj pasigas siajn tezo pri tiuj aferoj. 1085 00:59:46,100 --> 00:59:50,250 >> Do ne zorgu pri konstruado via propra. 1086 00:59:50,250 --> 00:59:53,350 Trovu unu linio por komenci kun. 1087 00:59:53,350 --> 00:59:56,120 Iujn el ili vi devas manipuli iomete 1088 00:59:56,120 --> 00:59:59,430 certigi reveno tipoj kongruas supren kaj whatnot, do en la komenco, 1089 00:59:59,430 --> 01:00:02,420 Mi rekomendus uzi ion vere facila ke eble nur 1090 01:00:02,420 --> 01:00:04,680 hashes je la unua litero. 1091 01:00:04,680 --> 01:00:08,760 Kaj tiam tuj vi energio, korpigante malvarmaj hash funkcio. 1092 01:00:08,760 --> 01:00:09,260 Mmhmm? 1093 01:00:09,260 --> 01:00:13,020 >> Publiko: Ĉu oni provu esti aŭ efika sed nur malfacile, like-- 1094 01:00:13,020 --> 01:00:15,880 >> SPEAKER 1: Do provi, mi kredas, Estas intuicie malfacile implementar 1095 01:00:15,880 --> 01:00:18,310 sed estas tre rapida. 1096 01:00:18,310 --> 01:00:20,620 Tamen, ĝi prenas supren pli spaco. 1097 01:00:20,620 --> 01:00:25,270 Denove, vi povas optimizar ambaŭ de tiuj en malsamaj manieroj kaj ekzistas manieroj to-- 1098 01:00:25,270 --> 01:00:26,770 Publiko: Kiel ni gradita pri tio? 1099 01:00:26,770 --> 01:00:27,540 Ĉu matter-- 1100 01:00:27,540 --> 01:00:29,164 >> SPEAKER 1: Do vi gradita normala maniero. 1101 01:00:29,164 --> 01:00:31,330 Vi tuj estos gradita en dezajno. 1102 01:00:31,330 --> 01:00:36,020 Kien ajn vi faras, vi volas certigi ĝi estas tiel eleganta kiel ĝi povas esti 1103 01:00:36,020 --> 01:00:38,610 kaj kiel efika kiel ĝi eblas. 1104 01:00:38,610 --> 01:00:41,950 Sed se vi elektas provi aŭ hash tablo, tiel longe kiel ĝi funkcias, 1105 01:00:41,950 --> 01:00:45,350 ni estas feliĉaj kun tio. 1106 01:00:45,350 --> 01:00:48,370 Se vi uzas iun kiu hashes sur la unua litero, estas bone, 1107 01:00:48,370 --> 01:00:51,410 kiel eble kiel dezajno-saĝa. 1108 01:00:51,410 --> 01:00:53,410 Ni ankaŭ atingante la punkto en ĉi semester-- 1109 01:00:53,410 --> 01:00:55,340 Mi ne scias, ĉu vi infanoj noticed-- se vi estas 1110 01:00:55,340 --> 01:00:58,780 pset kvalifikojn declinar iomete pro dezajno kaj whatnot, 1111 01:00:58,780 --> 01:00:59,900 tio tute bone. 1112 01:00:59,900 --> 01:01:02,960 Fariĝas al punkto kie via programoj iĝas pli komplika. 1113 01:01:02,960 --> 01:01:04,830 Ekzistas pli lokoj Vi povas plibonigi plu. 1114 01:01:04,830 --> 01:01:06,370 >> Do estas tute normala. 1115 01:01:06,370 --> 01:01:08,810 Ĝi ne estas ke vi estas fari malbone vian pset. 1116 01:01:08,810 --> 01:01:11,885 Estas nur ni esti malfacile al vi nun. 1117 01:01:11,885 --> 01:01:13,732 Do ĉies sentante ĝin. 1118 01:01:13,732 --> 01:01:14,940 Mi ĵus gradigita via tuta psets. 1119 01:01:14,940 --> 01:01:16,490 Mi scias ke ĉiuj sentas ĝin. 1120 01:01:16,490 --> 01:01:19,600 >> Do ne estus zorginta pri tio. 1121 01:01:19,600 --> 01:01:23,580 Kaj se vi havas demandojn pri antaŭ psets aŭ manieroj vi povas plibonigi, 1122 01:01:23,580 --> 01:01:27,760 Mi provu komenti la specifa lokoj, sed kelkfoje ĝi estas malfrua 1123 01:01:27,760 --> 01:01:30,840 kaj min tedas. 1124 01:01:30,840 --> 01:01:34,885 Ĉu estas aliaj aferoj pri datumstrukturoj? 1125 01:01:34,885 --> 01:01:37,510 Mi certas ke vi uloj ne vere volas paroli pri ili anymore, 1126 01:01:37,510 --> 01:01:42,650 sed se estas, mi estas feliĉa iri super ili, tiel kiel ion 1127 01:01:42,650 --> 01:01:45,580 el prelego tiu pasinteco semajno aŭ pasintsemajne. 1128 01:01:45,580 --> 01:01:51,580 >> Mi scias pasintsemajne estis tuta revizio, do ni saltis super iu recenzo 1129 01:01:51,580 --> 01:01:54,190 el prelego. 1130 01:01:54,190 --> 01:01:58,230 Ajna alia demandojn mi povas respondi? 1131 01:01:58,230 --> 01:01:59,350 OK, tute certe. 1132 01:01:59,350 --> 01:02:02,400 Nu, vi uloj eliri 15 minutoj frue. 1133 01:02:02,400 --> 01:02:08,370 >> Mi esperas ĉi estis duone helpemaj almenaŭ, kaj mi vidos vin infanoj venontan semajnon, 1134 01:02:08,370 --> 01:02:12,150 aŭ ĵaŭdo oficejo horoj. 1135 01:02:12,150 --> 01:02:15,285 Ĉu ekzistas petas por manĝetoj por la venonta semajno, estas la afero? 1136 01:02:15,285 --> 01:02:17,459 Ĉar mi forgesis dolĉaĵoj hodiaŭ. 1137 01:02:17,459 --> 01:02:19,750 Kaj Mi venigis dolĉaĵoj lasta semajno, sed estis Columbus Day, 1138 01:02:19,750 --> 01:02:25,400 tiel estis kiel ses personoj kiuj havis kvar sakojn de dolĉaĵoj al si. 1139 01:02:25,400 --> 01:02:28,820 Mi povas venigi Starbursts denove se vi ŝatas. 1140 01:02:28,820 --> 01:02:29,580 Starbursts? 1141 01:02:29,580 --> 01:02:32,250 OK, sonas bone. 1142 01:02:32,250 --> 01:02:35,050 Havas grandan tagon, knaboj. 1143 01:02:35,050 --> 01:02:39,510