1 00:00:00,000 --> 00:00:12,350 >> [MUZIKO Ludanta] 2 00:00:12,350 --> 00:00:13,050 >> ROB Bowden: Hi. 3 00:00:13,050 --> 00:00:13,640 Mi Rob. 4 00:00:13,640 --> 00:00:16,210 Kaj ni ĉi solvo eksteren. 5 00:00:16,210 --> 00:00:20,070 Do jen ni tuj apliki ĝenerala tabelo. 6 00:00:20,070 --> 00:00:24,090 Ni vidas, ke la struct nodo de nia tablo tuj aspekti kiel ĉi tio. 7 00:00:24,090 --> 00:00:28,710 Do ĝi estas tuj havos char vorto tabelo de grandeco kanton + 1. 8 00:00:28,710 --> 00:00:32,259 Ne forgesu la + 1, ekde la maksimuma vorton en la vortaro estas 45 9 00:00:32,259 --> 00:00:33,130 karakteroj. 10 00:00:33,130 --> 00:00:37,070 Kaj tiam ni tuj bezonas unu ekstra karaktero por la backslash nulo. 11 00:00:37,070 --> 00:00:40,870 >> Kaj tiam nia hashtable en ĉiu sitelo tuj butika 12 00:00:40,870 --> 00:00:42,320 ligillisto de nodoj. 13 00:00:42,320 --> 00:00:44,420 Ni ne faras lineara sondado tie. 14 00:00:44,420 --> 00:00:48,430 Kaj do, por ligi al la sekva elemento en la sitelo, ni bezonas 15 00:00:48,430 --> 00:00:50,390 struct nodo * proksima. 16 00:00:50,390 --> 00:00:51,110 OK. 17 00:00:51,110 --> 00:00:53,090 Do, tio estas kion nodo aspektas. 18 00:00:53,090 --> 00:00:56,180 >> Nun tie estas la deklaro de nia hashtable. 19 00:00:56,180 --> 00:00:59,640 Ĝi tuj devos 16.834 siteloj. 20 00:00:59,640 --> 00:01:01,910 Sed tiu nombro ne vere gravas. 21 00:01:01,910 --> 00:01:05,450 Kaj fine, ni tuj havos la malloka variablo hashtable grandeco, kiu 22 00:01:05,450 --> 00:01:07,000 tuj dividi kiel nulo. 23 00:01:07,000 --> 00:01:10,760 Kaj ĝi tuj sekvigi kiel multaj vortoj estas en nia vortaro. 24 00:01:10,760 --> 00:01:13,710 >> Do ni rigardu ŝarĝo. 25 00:01:13,710 --> 00:01:16,390 Rimarku ke ŝarĝo, ĝi redonas bool. 26 00:01:16,390 --> 00:01:20,530 Vi revenu vera se gxi sukcese ŝarĝitaj, kaj falsaj alie. 27 00:01:20,530 --> 00:01:23,990 Kaj ĝi prenas const char * vortaron, kiu estas la vortaro 28 00:01:23,990 --> 00:01:25,280 ke ni volas malfermi. 29 00:01:25,280 --> 00:01:27,170 Do jen la unua afero ni tuj faros. 30 00:01:27,170 --> 00:01:29,500 >> Ni iras al fopen la vortaro por legado. 31 00:01:29,500 --> 00:01:31,680 Kaj ni tuj devas fari certas ke gxi sukcesis. 32 00:01:31,680 --> 00:01:35,920 Do, se ĝi revenis NULL, tiam ni ne sukcese malfermi la vortaron. 33 00:01:35,920 --> 00:01:37,440 Kaj ni bezonas reveni falsaj. 34 00:01:37,440 --> 00:01:41,580 Sed supozante, ke ŝi faris sukcese malfermita, tiam ni deziras legi la 35 00:01:41,580 --> 00:01:42,400 vortaro. 36 00:01:42,400 --> 00:01:46,450 Observu do looping ĝis ni trovos iun tial rompi el tiu ciklo, 37 00:01:46,450 --> 00:01:47,570 kiun ni vidos. 38 00:01:47,570 --> 00:01:48,920 Observu do looping. 39 00:01:48,920 --> 00:01:51,780 >> Kaj nun ni iras al malloc sola vertico. 40 00:01:51,780 --> 00:01:54,020 Kaj kompreneble ni bezonos eldiri kontrolu denove. 41 00:01:54,020 --> 00:01:58,680 Do se mallocing ne sukcesos, tiam ni volas malŝarĝi ajna nodo, ke ni 42 00:01:58,680 --> 00:02:02,590 okazis malloc antaŭ, fermi la vortaro kaj revenas falsaj. 43 00:02:02,590 --> 00:02:06,830 Sed ignorante ke, alprenanta ni sukcesis, do ni volas uzi fscanf 44 00:02:06,830 --> 00:02:12,400 legi unu vorton el nia vortaro en nia nodo. 45 00:02:12,400 --> 00:02:17,940 Do memoru, ke eniro> vorto estas la signo vorto bufro de grandeco LENGHTH +1 46 00:02:17,940 --> 00:02:20,300 ke ni iras al butiko la vorto in 47 00:02:20,300 --> 00:02:25,070 >> Do fscanf tuj revenos 1, kiel longe kiel ĝi povis sukcese 48 00:02:25,070 --> 00:02:26,750 legu vorto de la dosiero. 49 00:02:26,750 --> 00:02:30,460 Se ĉu eraro okazas, aŭ ni atingi la finon de la dosiero, ĝi 50 00:02:30,460 --> 00:02:31,950 ne revenos 1. 51 00:02:31,950 --> 00:02:35,180 En kiu kazo ĝi ne revenos 1, ni fine tuj rompi 52 00:02:35,180 --> 00:02:37,280 tiu dum buklo. 53 00:02:37,280 --> 00:02:42,770 Do ni vidas, ke iam ni havos sukcese legu vorto en 54 00:02:42,770 --> 00:02:48,270 entry> vorton, tiam ni tuj, ke vorton uzante nian hash funkcio. 55 00:02:48,270 --> 00:02:49,580 >> Ni rigardu la krada funkcio. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Do vi ne vere bezonas por kompreni tion. 58 00:02:55,610 --> 00:02:59,460 Kaj fakte ni nur tiris ĉi hash funkcio de la interreto. 59 00:02:59,460 --> 00:03:04,010 La sola afero, vi devas rekoni estas ke tio prenas const char * vorto. 60 00:03:04,010 --> 00:03:08,960 Do ĝi estas prenante ĉeno kiel enigo, kaj reveninte sensigna _int_ kiel eligo. 61 00:03:08,960 --> 00:03:12,360 Do tio estas ĉiuj la krada funkcio estas, ĉu preno en enigo kaj donas al vi 62 00:03:12,360 --> 00:03:14,490 indekso en la hashtable. 63 00:03:14,490 --> 00:03:18,530 >> Rimarku ke ni moding per NUM_BUCKETS, por ke valoro revenis 64 00:03:18,530 --> 00:03:21,730 efektive estas indico en la hashtable kaj ne indekso preter la 65 00:03:21,730 --> 00:03:24,320 limojn de la tabelo. 66 00:03:24,320 --> 00:03:28,060 Do pro tio ke la funkcio, ni iras al hash la vorto, kiun ni legis la 67 00:03:28,060 --> 00:03:29,390 vortaro. 68 00:03:29,390 --> 00:03:31,700 Kaj tiam ni tuj uzi ke hash por enmeti la 69 00:03:31,700 --> 00:03:33,750 eniro en la hashtable. 70 00:03:33,750 --> 00:03:38,520 >> Nun hashtable hash estas la nuna ligillisto en la tabelo. 71 00:03:38,520 --> 00:03:41,410 Kaj ĝi estas tre ebla ke ĝi estas nur NULL. 72 00:03:41,410 --> 00:03:44,960 Ni volas enmeti nian eniron en la komencante de tiu ligillisto. 73 00:03:44,960 --> 00:03:48,600 Kaj tial ni tuj havos niajn aktuala enirpunkto al kio la hashtable 74 00:03:48,600 --> 00:03:50,380 Nuntempe antaŭ to. 75 00:03:50,380 --> 00:03:53,310 Kaj poste ni iras al stoki, en la hashtable ĉe la 76 00:03:53,310 --> 00:03:55,350 Baldaux, la nuna ero. 77 00:03:55,350 --> 00:03:59,320 Do tiuj du linioj sukcese enigi la eniro en la komenco de la 78 00:03:59,320 --> 00:04:02,260 ligillisto en tiu indekso en la hashtable. 79 00:04:02,260 --> 00:04:04,900 >> Iam ni faris per tio ni scias kiun ni trovis alian vorton en la 80 00:04:04,900 --> 00:04:07,790 vortaro, kaj ni pliigo denove. 81 00:04:07,790 --> 00:04:13,960 Do ni observu la fari tion ĝis fscanf fine revenis io ne-1, je 82 00:04:13,960 --> 00:04:16,950 kiu punkto memoras ke ni bezonas por liberigi eniro. 83 00:04:16,950 --> 00:04:19,459 Do ĝis ĉi tie ni malloced eniro. 84 00:04:19,459 --> 00:04:21,329 Kaj ni provis legi iun el la vortaro. 85 00:04:21,329 --> 00:04:23,910 Kaj ni ne sukcese legas ion de la vortaro, en 86 00:04:23,910 --> 00:04:26,650 tiaokaze ni bezonas por liberigi la enskribo ke ni neniam vere meti en la 87 00:04:26,650 --> 00:04:29,140 hashtable, kaj fine rompi. 88 00:04:29,140 --> 00:04:32,750 >> Iam ni ekflamu ni bezonas vidi, bone, ni ekflamu pro tie 89 00:04:32,750 --> 00:04:34,360 Estis eraro legado de la dosiero? 90 00:04:34,360 --> 00:04:37,120 Aux cxu ni ekflamu pro ni atingis la finon de la dosiero? 91 00:04:37,120 --> 00:04:39,480 Se tie estis eraro, tiam ni volas redoni malvera. 92 00:04:39,480 --> 00:04:40,930 Ĉar ŝarĝo ne sukcesos. 93 00:04:40,930 --> 00:04:43,890 Kaj en la procezo ni volas malŝarĝi cxiujn vortojn, kiujn ni legas en, kaj 94 00:04:43,890 --> 00:04:45,670 fermi la vortaro dosiero. 95 00:04:45,670 --> 00:04:48,740 >> Supozante ni sukcesos, tiam ni ĵus ankoraŭ bezonas fermi la vortaro 96 00:04:48,740 --> 00:04:53,040 fajliloj, kaj fine revenas vera ekde ni sukcese alŝutis la vortaro. 97 00:04:53,040 --> 00:04:54,420 Kaj tio estas por ŝarĝo. 98 00:04:54,420 --> 00:04:59,020 Do nun kontroli, donita ŝarĝita hashtable, tuj aspekti kiel ĉi tio. 99 00:04:59,020 --> 00:05:03,140 Do kontrolu, ĝi redonas bool, kiu estas iri por indiki ĉu la pasinta 100 00:05:03,140 --> 00:05:07,530 en char * vorto, ĉu la pasinta en cxeno estas en nia vortaro. 101 00:05:07,530 --> 00:05:09,890 Do, se ĝi estas en la vortaro, se estas en nia hashtable, 102 00:05:09,890 --> 00:05:11,170 ni revenos vera. 103 00:05:11,170 --> 00:05:13,380 Kaj se tio ne estas, ni revenos falsaj. 104 00:05:13,380 --> 00:05:17,740 >> Donita ĉi pasis en vorto, ni estas tuj hash la vorto. 105 00:05:17,740 --> 00:05:22,110 Nun grava afero por agnoski estas ke en ŝarĝo ni sciis, ke ĉiuj el la 106 00:05:22,110 --> 00:05:23,820 vortojn ni tuj estu minuskloj. 107 00:05:23,820 --> 00:05:25,820 Sed ĉi tie ni ne estas tiel certa. 108 00:05:25,820 --> 00:05:29,510 Se ni rigardu nian hash funkcion, nia hash funkcio reale 109 00:05:29,510 --> 00:05:32,700 estas suba envolvaĵo ĉiu karaktero de la vorto. 110 00:05:32,700 --> 00:05:37,940 Do sendistinge de la majusklado de vorto, nia krada funkcio estas la reveno 111 00:05:37,940 --> 00:05:42,270 la sama indekso por kiaj la majusklado estas, kiel ĝi havus 112 00:05:42,270 --> 00:05:45,280 revenis por tute minuskle versio de la vorto. 113 00:05:45,280 --> 00:05:46,600 Alright. 114 00:05:46,600 --> 00:05:49,790 Tio estas nia indico estas en la hashtable por tiu vorto. 115 00:05:49,790 --> 00:05:52,940 >> Nun tion ĉi por buklo tuj persisti super la ligillisto 116 00:05:52,940 --> 00:05:55,000 kiu estis en tiu indekso. 117 00:05:55,000 --> 00:05:59,610 Do rimarki ni inicializar enskribo atentigi al tiu indekso. 118 00:05:59,610 --> 00:06:02,750 Ni tuj daŭrigi dum eniro! = NULL. 119 00:06:02,750 --> 00:06:07,770 Kaj memoru, ke la ĝisdatigo de la montrilo en nia ligillisto entry = entry> proksima. 120 00:06:07,770 --> 00:06:14,400 Do havi nian aktualan enirpunkto al la sekva listero en ligillisto. 121 00:06:14,400 --> 00:06:19,250 >> Do por ĉiu enskribo en la ligillisto, Ni tuj uzi strcasecmp. 122 00:06:19,250 --> 00:06:20,330 Ĝi ne estas strcomp. 123 00:06:20,330 --> 00:06:23,780 Ĉar refoje, ni volas fari aferojn kazo insensitively. 124 00:06:23,780 --> 00:06:27,870 Do ni uzu strcasecmp kompari la vorto, kiu estis aprobita per tiu 125 00:06:27,870 --> 00:06:31,860 funkcio kontraŭ la vorto kiu estas en ĉi tiu enskribo. 126 00:06:31,860 --> 00:06:35,570 Se li revenas nulon, tio signifas ne estis alumeto, en kiu okazo ni volas 127 00:06:35,570 --> 00:06:36,630 return true. 128 00:06:36,630 --> 00:06:39,590 Ni sukcese trovis la vorto en nia hashtable. 129 00:06:39,590 --> 00:06:43,040 >> Se tie ne estis batalo, tiam ni estas tuj buklo denove kaj rigardi la 130 00:06:43,040 --> 00:06:43,990 sekvanta eniro. 131 00:06:43,990 --> 00:06:47,640 Kaj ni vidos daŭrigi looping, dum ekzistas Estas enskriboj en tiu ligillisto. 132 00:06:47,640 --> 00:06:50,160 Kio okazas se ni rompu el tio por buklo? 133 00:06:50,160 --> 00:06:55,110 Tio signifas ke ni ne trovis eniron ke kongruis tiun vorton, en kiu kazo 134 00:06:55,110 --> 00:07:00,220 ni revenos malvera por indiki, ke nia hashtable ne enhavas tiun vorton. 135 00:07:00,220 --> 00:07:02,540 Kaj tio estas ĉekon. 136 00:07:02,540 --> 00:07:04,790 >> Do ni rigardu grandeco. 137 00:07:04,790 --> 00:07:06,970 Nun grandecon tuj estos sufiĉe simpla. 138 00:07:06,970 --> 00:07:11,080 Ekde memoras en ŝarĝo, ĉar ĉiu vorto ni trovis, ni incremented tutmonda 139 00:07:11,080 --> 00:07:12,880 variablo hashtable grandeco. 140 00:07:12,880 --> 00:07:16,480 Do la grandeco funkcio estas simple irante reveni malloka variablo. 141 00:07:16,480 --> 00:07:18,150 Kaj tio estas ĝi. 142 00:07:18,150 --> 00:07:22,300 >> Nun fine, ni devas malŝarĝi la vortaro unufoje ĉio estas farita. 143 00:07:22,300 --> 00:07:25,340 Do kiel ni faros tion? 144 00:07:25,340 --> 00:07:30,440 Ĝuste ĉi tie ni looping super ĉiuj siteloj de nia tablo. 145 00:07:30,440 --> 00:07:33,240 Do estas NUM_BUCKETS siteloj. 146 00:07:33,240 --> 00:07:37,410 Kaj por ĉiu ligillisto en nia hashtable, ni iras al buklo super 147 00:07:37,410 --> 00:07:41,070 La tuteco de la ligillisto, liberigante ĉiu elemento. 148 00:07:41,070 --> 00:07:42,900 >> Nun ni bezonas atenti. 149 00:07:42,900 --> 00:07:47,910 Do ĉi tie ni havas provizoran variablo tio estas stoki la montrilon al la sekva 150 00:07:47,910 --> 00:07:49,730 elemento en la ligillisto. 151 00:07:49,730 --> 00:07:52,140 Kaj poste ni iras al libera la nuna ero. 152 00:07:52,140 --> 00:07:55,990 Ni devas esti certa ke ni faru tion, kiam ni povas ne nur liberigi la aktualan elementon 153 00:07:55,990 --> 00:07:59,180 kaj tiam provi aliri la sekvanta montrilon, ĉar iam ni jam liberigitaj ĝi, 154 00:07:59,180 --> 00:08:00,870 La memoro iĝas malvalida. 155 00:08:00,870 --> 00:08:04,990 >> Do ni devas teni ĉirkaŭ montrilon al la sekva elemento, tiam ni povas liberigi la 156 00:08:04,990 --> 00:08:08,360 aktuala elemento, kaj tiam ni povos ĝisdatigi nia nuna ero atentigi al 157 00:08:08,360 --> 00:08:09,550 la sekva elemento. 158 00:08:09,550 --> 00:08:12,800 Ni buklo dum ekzistas elementoj en ĉi ligillisto. 159 00:08:12,800 --> 00:08:15,620 Ni faras tion por ĉiuj ligita lertaj en la hashtable. 160 00:08:15,620 --> 00:08:19,460 Kaj unufoje ni faris kun tio, ni tute malŝarĝis la hashtable, kaj 161 00:08:19,460 --> 00:08:20,190 ni faris. 162 00:08:20,190 --> 00:08:23,200 Do ĝi estas neebla por malŝarĝas por iam reveni falsaj. 163 00:08:23,200 --> 00:08:26,470 Kaj kiam ni faris, ni nur redoni vera. 164 00:08:26,470 --> 00:08:29,000 >> Ni donu tiun solvon provu. 165 00:08:29,000 --> 00:08:33,070 Do ni rigardu kion niaj struct nodo aspektos. 166 00:08:33,070 --> 00:08:36,220 Ĉi tie ni vidas ni tuj havos bool vorto kaj struct nodo * infanoj 167 00:08:36,220 --> 00:08:37,470 krampo alfabeto. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Do la unua afero, vi povus esti scivolante, kial estas alfabeto 170 00:08:42,020 --> 00:08:44,660 ed difinita kiel la 27? 171 00:08:44,660 --> 00:08:47,900 Nu, memoru, ke ni tuj bezonas esti la uzado de la apostrofo. 172 00:08:47,900 --> 00:08:51,910 Do tiu tuj estos iom da speciala kazo laŭlonge de ĉi tiu programo. 173 00:08:51,910 --> 00:08:54,710 >> Nun memoru, kiamaniere oni trie efektive funkcias. 174 00:08:54,710 --> 00:08:59,380 Diru ni indeksante vorto "Katoj." Tiam el la radiko de trie, 175 00:08:59,380 --> 00:09:02,610 Ni tuj rigardi la infanoj tabelo, kaj ni iras por rigardi la 176 00:09:02,610 --> 00:09:08,090 indekso kiu respondas al la letero C. Por ke estos indeksita 2. 177 00:09:08,090 --> 00:09:11,530 Do pro tio ke, tiu volo donu al ni novan nodon. 178 00:09:11,530 --> 00:09:13,820 Kaj tiam ni devos labori el tiu nodo. 179 00:09:13,820 --> 00:09:17,770 >> Do pro tio ke nodo, ni estas denove iri por rigardi la infanojn tabelo. 180 00:09:17,770 --> 00:09:22,110 Kaj ni iras rigardi indekso nulo respondi al la A en katon. 181 00:09:22,110 --> 00:09:27,170 Tial do ni tuj iru al tiu nodo, kaj donita ke nodo ni iras 182 00:09:27,170 --> 00:09:31,090 rigardi la fino ĝi estas respondas al T. Kaj movanta al tiu nodo, 183 00:09:31,090 --> 00:09:35,530 fine, ni tute rigardis tra nia vorto "cat". Kaj nun bool 184 00:09:35,530 --> 00:09:40,960 vorto supozas indiki ĉu tiu vorto donita estas fakte unu vorto. 185 00:09:40,960 --> 00:09:43,470 >> Do kial ni bezonas ke speciala kazo? 186 00:09:43,470 --> 00:09:47,700 Nu, kion la vorto "katastrofo" Estas en nia vortaro, sed la 187 00:09:47,700 --> 00:09:50,150 vorto "kato", ne? 188 00:09:50,150 --> 00:09:54,580 Do rigardante vidi se la vorto "kato" Estas en nia vortaro, ni estas 189 00:09:54,580 --> 00:09:59,970 tuj sukcese trarigardi la indeksoj C-A-T en regiono nodo. 190 00:09:59,970 --> 00:10:04,290 Sed tio estas nur ĉar katastrofo okazis por krei nodojn sur la vojo 191 00:10:04,290 --> 00:10:07,190 de C-A-T, la tutan vojon al la fino de la vorto. 192 00:10:07,190 --> 00:10:12,020 Do bool vorto estas uzata por indiki ĉu tiu aparta situo 193 00:10:12,020 --> 00:10:14,310 fakte indikas vorton. 194 00:10:14,310 --> 00:10:15,140 >> Ĉiuj pravas. 195 00:10:15,140 --> 00:10:19,310 Do nun, kiam ni scias kio trie estas tuj aspekti, ni rigardu la 196 00:10:19,310 --> 00:10:20,730 ŝarĝi funkcio. 197 00:10:20,730 --> 00:10:24,610 Do ŝarĝo tuj resendas bool cxar se ni sukcese aŭ 198 00:10:24,610 --> 00:10:26,720 sensukcese ŝarĝis la vortaro. 199 00:10:26,720 --> 00:10:30,460 Kaj ĉi tiu tuj estos la vortaro ke ni volas ŝarĝi. 200 00:10:30,460 --> 00:10:33,930 >> Do unue ni devas fari estas malferma ĝis tiu vortaro por legado. 201 00:10:33,930 --> 00:10:36,160 Kaj ni devas certigi ni ne maltrafis. 202 00:10:36,160 --> 00:10:39,580 Do, se la vortaro ne estis sukcese malfermiĝis, ĝi revenos 203 00:10:39,580 --> 00:10:42,400 nula, en kiu kazo ni estas tuj revenos falsaj. 204 00:10:42,400 --> 00:10:47,230 Sed supozante, ke ŝi sukcese malfermita, tiam ni povas efektive legas 205 00:10:47,230 --> 00:10:48,220 tra la vortaro. 206 00:10:48,220 --> 00:10:50,880 >> Do unue ni tuj volas fari estas ni havas ĉi 207 00:10:50,880 --> 00:10:52,500 malloka variablo radiko. 208 00:10:52,500 --> 00:10:56,190 Nun radikon tuj estos nodo *. 209 00:10:56,190 --> 00:10:59,760 Ĝi estas la supera parto de nia trie, ke ni estas tuj estos ripetanta tra. 210 00:10:59,760 --> 00:11:02,660 Do la unua afero, kiun ni iras voli fari estas destini 211 00:11:02,660 --> 00:11:04,140 memoro por nia radiko. 212 00:11:04,140 --> 00:11:07,980 Rimarku ke ni uzas la calloc funkcio, kiu estas esence la sama 213 00:11:07,980 --> 00:11:11,500 kiel la malloc funkcion, escepte ĝi estas garantiita redoni iun kiu estas 214 00:11:11,500 --> 00:11:13,180 tute zeroed eksteren. 215 00:11:13,180 --> 00:11:17,290 Do, se ni uzas malloc, ni bezonus iri tra ĉiuj el la montriloj en nia 216 00:11:17,290 --> 00:11:20,160 nodo, kaj certigi ke ili estas ĉiu nula. 217 00:11:20,160 --> 00:11:22,710 Do calloc faros tion por ni. 218 00:11:22,710 --> 00:11:26,330 >> Nun nur kiel malloc, ni bezonas por fari certas, ke la atribuo estis efektive 219 00:11:26,330 --> 00:11:27,520 sukcesa. 220 00:11:27,520 --> 00:11:29,990 Se tiu revenis null, tiam ni bezonas fermi aŭ vortaro 221 00:11:29,990 --> 00:11:32,100 Arkivo kaj redoni malvera. 222 00:11:32,100 --> 00:11:36,835 Do supozante ke atribuo estis sukcesa, ni tuj uzi nodon * 223 00:11:36,835 --> 00:11:40,270 kursoro persisti per nia trie. 224 00:11:40,270 --> 00:11:43,890 Do niaj radikoj neniam tuj ŝanĝos, sed ni tuj uzi kursoron al 225 00:11:43,890 --> 00:11:47,875 efektive iros de nodo al nodo. 226 00:11:47,875 --> 00:11:50,940 >> Do en tiu buklo ni legas tra la vortaro dosiero. 227 00:11:50,940 --> 00:11:53,670 Kaj ni uzas fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc tuj grab sola karaktero de la dosiero. 229 00:11:56,290 --> 00:11:59,370 Ni tuj daŭrigi grabbing karakteroj dum ni ne atingos la 230 00:11:59,370 --> 00:12:01,570 fino de la dosiero. 231 00:12:01,570 --> 00:12:03,480 >> Ekzistas du kazoj ni devas elteni. 232 00:12:03,480 --> 00:12:06,610 La unua, se la karaktero ne estis nova linio. 233 00:12:06,610 --> 00:12:10,450 Do ni scias se ĝi estis nova linio, tiam ni estas proksimume pluveturi al nova vorto. 234 00:12:10,450 --> 00:12:15,240 Sed supozante ke ne estis nova linio, tiam ĉi tie ni volas eltrovi la 235 00:12:15,240 --> 00:12:18,380 indekso ni tuj indekson en en la infanoj tabelo tiu 236 00:12:18,380 --> 00:12:19,810 ni rigardis antaŭe. 237 00:12:19,810 --> 00:12:23,880 >> Do, kiel mi diris antaŭe, ni bezonas speciala kazo la apostrofo. 238 00:12:23,880 --> 00:12:26,220 Rimarku ni uzas la triargumenta operatoro tie. 239 00:12:26,220 --> 00:12:29,580 Do ni tuj legas tion kiel, se la karaktero ni legas en Estis 240 00:12:29,580 --> 00:12:35,330 apostrofo, tiam ni tuj starigu indekso = "alfabeto" -1, kiu volas, 241 00:12:35,330 --> 00:12:37,680 esti la indekso 26. 242 00:12:37,680 --> 00:12:41,130 >> Alie, se ĝi ne estis apostrofo, tie ni tuj starigu la indekso 243 00:12:41,130 --> 00:12:43,760 egala al c - a. 244 00:12:43,760 --> 00:12:49,030 Do memoru revenis el la antaŭe p-aroj, c - oni tuj donu al ni la 245 00:12:49,030 --> 00:12:53,410 alfabeta pozicio de C. Do, se C estas la litero A, tiu volo 246 00:12:53,410 --> 00:12:54,700 donu al ni indekso nulo. 247 00:12:54,700 --> 00:12:58,120 Por la litero B, gxi donos ni la indekso 1, kaj tiel plu. 248 00:12:58,120 --> 00:13:03,010 >> Do tio donas al ni la indekson en la infanoj tabelo, ke ni volas. 249 00:13:03,010 --> 00:13:08,890 Nu, se tiu indekso estas aktuale nula en la infanoj, tio signifas ke nodo 250 00:13:08,890 --> 00:13:11,830 nuntempe ne ekzistas de tiu vojo. 251 00:13:11,830 --> 00:13:15,160 Tial oni devas destini nodo por tiu vojo. 252 00:13:15,160 --> 00:13:16,550 Tio estas kion ni faros ĉi tie. 253 00:13:16,550 --> 00:13:20,690 >> Do ni tuj denove uzi la calloc funkcio, por ke ni ne devas 254 00:13:20,690 --> 00:13:22,880 nulo al cxiuj el la montriloj. 255 00:13:22,880 --> 00:13:27,240 Kaj ni denove bezonas kontroli ke calloc ne maltrafis. 256 00:13:27,240 --> 00:13:30,700 Se calloc tute mankis, do ni bezonas malŝarĝi ĉio, fermu niajn 257 00:13:30,700 --> 00:13:32,820 vortaro, kaj revenas falsaj. 258 00:13:32,820 --> 00:13:40,050 Do supozante ke ĝi ne maltrafis, tiam tio kreos novan infanon por ni. 259 00:13:40,050 --> 00:13:41,930 Kaj tiam ni iros al tiu infano. 260 00:13:41,930 --> 00:13:44,960 Nia kursoro persisti malsupren al tiu infano. 261 00:13:44,960 --> 00:13:49,330 >> Nu, se tio ne estis nula komenci kun, tiam la kursoro povas simple persisti 262 00:13:49,330 --> 00:13:52,590 malsupren al tiu infano sen reale devi destini ion. 263 00:13:52,590 --> 00:13:56,730 Tiu estas la kazo, kie ni unue okazis atribui la vorto "kato". Kaj 264 00:13:56,730 --> 00:14:00,330 tio signifas, kiam ni iros al destini "Katastrofo", ni ne bezonas krei 265 00:14:00,330 --> 00:14:01,680 nodojn por C-A-T denove. 266 00:14:01,680 --> 00:14:04,830 Ili jam ekzistas. 267 00:14:04,830 --> 00:14:06,080 >> Kio estas ĉi tiu alia? 268 00:14:06,080 --> 00:14:10,480 Tio estas la kondiĉo, kie c estis backslash n, kie c estis nova linio. 269 00:14:10,480 --> 00:14:13,710 Tio signifas ke ni devas sukcese kompletigita vorto. 270 00:14:13,710 --> 00:14:16,860 Nun kion ni volas fari, kiam ni sukcese kompletigis vorto? 271 00:14:16,860 --> 00:14:21,100 Ni tuj uzas tiun vorton kampo ene de nia struct nodo. 272 00:14:21,100 --> 00:14:23,390 Ni volas fiksi, ke al vera. 273 00:14:23,390 --> 00:14:27,150 Do kiu indikas ke tiu nodo indikas sukcesan 274 00:14:27,150 --> 00:14:29,250 vorto, realan vorton. 275 00:14:29,250 --> 00:14:30,940 >> Direktu do nun, ke al vera. 276 00:14:30,940 --> 00:14:35,150 Ni volas reagordi nia kursoron al punkto al la komenco de la trie denove. 277 00:14:35,150 --> 00:14:40,160 Kaj fine, pliigo nia vortaro grandeco, ĉar ni trovis alian laboron. 278 00:14:40,160 --> 00:14:43,230 Do ni tuj daŭre fari tion, legante en karaktero de karaktero, 279 00:14:43,230 --> 00:14:49,150 konstrui novajn nodojn en nia trie kaj por ĉiu vorto en la vortaro, ĝis 280 00:14:49,150 --> 00:14:54,020 ni finfine atingos C! = EOF, en kiu kazo ni rompi la dosieron. 281 00:14:54,020 --> 00:14:57,050 >> Nun ekzistas du kazojn sub kion ni povus bati EOF. 282 00:14:57,050 --> 00:15:00,980 La unua estas, se tie estis eraro legado de la dosiero. 283 00:15:00,980 --> 00:15:03,470 Do, se tie estis eraro, ni bezonas fari la tipa. 284 00:15:03,470 --> 00:15:06,460 Malŝarĝi ĉio, proksime la dosieron, revenu falsaj. 285 00:15:06,460 --> 00:15:09,810 Supozante ke ne estis eraro, ke nur signifas, ke ni reale batis la finon de 286 00:15:09,810 --> 00:15:13,750 la dosieron, en kiu kazo, ni fermis la Arkivo kaj redoni vera ekde ni 287 00:15:13,750 --> 00:15:17,330 sukcese ŝarĝita vortaro en nian trie. 288 00:15:17,330 --> 00:15:20,170 >> Do nun ni kontrolu ĉekon. 289 00:15:20,170 --> 00:15:25,156 Rigardante la ĉekon funkcio, ni vidas ke ĉekon tuj resendas bool. 290 00:15:25,156 --> 00:15:29,680 Ĝi redonas vera se tiu vorto, ke ĝi estas aprobotaj estas en nia trie. 291 00:15:29,680 --> 00:15:32,110 Denove falsa alie. 292 00:15:32,110 --> 00:15:36,050 Do kiel vi determinas, cxu tiu vorto estas en nia trie? 293 00:15:36,050 --> 00:15:40,190 >> Oni vidas ĉi tie ke, samkiel antaŭ, Ni tuj uzi kursoro persisti 294 00:15:40,190 --> 00:15:41,970 tra nia trie. 295 00:15:41,970 --> 00:15:46,600 Nun tie oni iras al persisti super nia tuta vorto. 296 00:15:46,600 --> 00:15:50,620 Do ripetanta super la vorto ni estas pasinta, Ni tuj determinas la 297 00:15:50,620 --> 00:15:56,400 indekso en la infanoj tabelo tiu korespondas al vorto krampo I. Do tiu 298 00:15:56,400 --> 00:15:59,670 tuj serĉos ekzakte kiel ŝarĝo, kie se vorto [i] 299 00:15:59,670 --> 00:16:03,310 estas apostrofo, ĉar ni volas uzi indekson "alfabeto" - 1. 300 00:16:03,310 --> 00:16:05,350 Ĉar ni determinis, ke tiu Tie estas kie ni iras stoki 301 00:16:05,350 --> 00:16:07,100 apostrofoj. 302 00:16:07,100 --> 00:16:11,780 >> Alie, ni tuj uzi du malsupra vorto krampo I. Do memoru, ke vorto povas 303 00:16:11,780 --> 00:16:13,920 havas ajnaj majuskloj. 304 00:16:13,920 --> 00:16:17,540 Kaj tial ni volas certigi, ke ni estas uzante minusklajn versio de aferoj. 305 00:16:17,540 --> 00:16:21,920 Kaj tiam subtrahi el tiu 'a' al fojo denove doni al ni la alfabeta 306 00:16:21,920 --> 00:16:23,880 pozicio de tiu signo. 307 00:16:23,880 --> 00:16:27,680 Do tiu tuj estos nia indekso en la infanoj tabelo. 308 00:16:27,680 --> 00:16:32,420 >> Kaj nun, se tio indekson en la infanoj tabelo estas nula, tio signifas ke ni 309 00:16:32,420 --> 00:16:34,990 ne plu povas daŭrigi ripetanta malsupren niaj trie. 310 00:16:34,990 --> 00:16:38,870 Se tio estas la kazo, tiu vorto ne povas eble esti en nia trie. 311 00:16:38,870 --> 00:16:42,340 Ekde se gxi estis, kiuj volas signifas ne estus pado 312 00:16:42,340 --> 00:16:43,510 malsupren al tiu vorto. 313 00:16:43,510 --> 00:16:45,290 Kaj vi neniam renkontas nula. 314 00:16:45,290 --> 00:16:47,850 Do malhelpi nulaj, ni revenos falsaj. 315 00:16:47,850 --> 00:16:49,840 La vorto ne estas en la vortaro. 316 00:16:49,840 --> 00:16:53,660 Se ĝi ne estis nula, tiam ni estas tuj daŭrigi ripetanta. 317 00:16:53,660 --> 00:16:57,220 >> Do ni iras tie kursoro atentigi al tiu aparta 318 00:16:57,220 --> 00:16:59,760 nodo en tiu indekso. 319 00:16:59,760 --> 00:17:03,150 Ni daŭre fari ke la tuta la tutan vorton, supozante 320 00:17:03,150 --> 00:17:03,950 ni neniam batis nula. 321 00:17:03,950 --> 00:17:07,220 Tio signifas ke ni sukcesis trairi la tutan vorton kaj trovas 322 00:17:07,220 --> 00:17:08,920 nodo en nia provo. 323 00:17:08,920 --> 00:17:10,770 Sed ni ne tute farita ankoraŭ. 324 00:17:10,770 --> 00:17:12,290 >> Ni ne volas ĝuste redoni vera. 325 00:17:12,290 --> 00:17:14,770 Ni volas reveni kursoro> vorto. 326 00:17:14,770 --> 00:17:18,980 Ekde memoras denove, estas "kato" estas ne en nia vortaro, kaj "katastrofo" 327 00:17:18,980 --> 00:17:22,935 Estas, tiam ni estos sukcese ni preni tra la vorto "kato". Sed kursoro 328 00:17:22,935 --> 00:17:25,760 vorto estos falsa kaj ne vera. 329 00:17:25,760 --> 00:17:30,930 Do ni revenu kursoron vorto por indiki ĉu ĉi tiu nodo estas reale vorto. 330 00:17:30,930 --> 00:17:32,470 Kaj tio estas por ĉekon. 331 00:17:32,470 --> 00:17:34,250 >> Do ni kontrolu grandeco. 332 00:17:34,250 --> 00:17:37,350 Do grandecon tuj esti sufiĉe facila ĉar rememoru en ŝarĝo, ni estas 333 00:17:37,350 --> 00:17:41,430 pliigante vortaro grandeco por ĉiu vorto, kiun ni renkontas. 334 00:17:41,430 --> 00:17:45,350 Do grandeco estas ĝuste tuj revenu vortaro grandeco. 335 00:17:45,350 --> 00:17:47,390 Kaj tio estas ĝi. 336 00:17:47,390 --> 00:17:50,590 >> Do, laste ni malŝarĝi. 337 00:17:50,590 --> 00:17:55,100 Do malŝarĝi, ni tuj uzi rekursia funkcio por fakte plenumos cxiujn 338 00:17:55,100 --> 00:17:56,530 de la laboro por ni. 339 00:17:56,530 --> 00:17:59,340 Do nia funkcio tuj tuŝi unloader. 340 00:17:59,340 --> 00:18:01,650 Kio estas unloader faros? 341 00:18:01,650 --> 00:18:06,580 Oni vidas ĉi tie ke unloader tuj persisti super ĉiuj el la infanoj en 342 00:18:06,580 --> 00:18:08,410 tiu aparta nodo. 343 00:18:08,410 --> 00:18:11,750 Kaj se la infano nodo estas ne nula, poste ni iras al 344 00:18:11,750 --> 00:18:13,730 malŝarĝi la infano nodo. 345 00:18:13,730 --> 00:18:18,010 >> Do tiu estas vi rekursie malŝarĝi ĉiuj niaj infanoj. 346 00:18:18,010 --> 00:18:21,080 Iam ni estas certa, ke ĉiuj niaj infanoj estis malŝarĝitaj, ĉar ni 347 00:18:21,080 --> 00:18:25,210 povas liberigi nin, tiel malŝarĝi ni mem. 348 00:18:25,210 --> 00:18:29,460 Tio funkcios rekursie malŝarĝi la tutan trie. 349 00:18:29,460 --> 00:18:32,850 Kaj tiam tuj ke estas farita, ni povas simple reveni vera. 350 00:18:32,850 --> 00:18:34,210 Malŝarĝi ne povas malsukcesi. 351 00:18:34,210 --> 00:18:35,710 Ni nur liberigante aferojn. 352 00:18:35,710 --> 00:18:38,870 Do iam ni faris liberigante ĉio, revenu vera. 353 00:18:38,870 --> 00:18:40,320 Kaj tio estas ĝi. 354 00:18:40,320 --> 00:18:41,080 Mia nomo estas Rob. 355 00:18:41,080 --> 00:18:42,426 Kaj tio estis Speller. 356 00:18:42,426 --> 00:18:47,830 >> [MUZIKO Ludanta]