1 00:00:00,000 --> 00:00:12,350 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:12,350 --> 00:00:13,050 >> ROB Bowden: Hi. 3 00:00:13,050 --> 00:00:13,640 Sóc Rob. 4 00:00:13,640 --> 00:00:16,210 I sortirem d'aquesta solució. 5 00:00:16,210 --> 00:00:20,070 Així que aquí anem a posar en pràctica una taula general. 6 00:00:20,070 --> 00:00:24,090 Veiem que el node d'estructura de la nostra taula tindrà aquest aspecte. 7 00:00:24,090 --> 00:00:28,710 Així que va a tenir una paraula caràcters matriu de mida LONGITUD + 1. 8 00:00:28,710 --> 00:00:32,259 No us oblideu el + 1, ja que la màxima paraula al diccionari és 45 9 00:00:32,259 --> 00:00:33,130 personatges. 10 00:00:33,130 --> 00:00:37,070 I després anem a necessitar una extra caràcter pel zero barra invertida. 11 00:00:37,070 --> 00:00:40,870 >> I llavors la nostra taula hash en cada cub es va a emmagatzemar un 12 00:00:40,870 --> 00:00:42,320 llista enllaçada de nodes. 13 00:00:42,320 --> 00:00:44,420 No estem fent el sondeig lineal aquí. 14 00:00:44,420 --> 00:00:48,430 I així, per tal de vincular la següent element en el cub, necessitem un 15 00:00:48,430 --> 00:00:50,390 struct node * següent. 16 00:00:50,390 --> 00:00:51,110 D'acord. 17 00:00:51,110 --> 00:00:53,090 Així que això és el que un node es sembla. 18 00:00:53,090 --> 00:00:56,180 >> Ara aquí és la declaració de la nostra taula hash. 19 00:00:56,180 --> 00:00:59,640 Va a tenir 16.834 galledes. 20 00:00:59,640 --> 00:01:01,910 Però aquest nombre en realitat no importa. 21 00:01:01,910 --> 00:01:05,450 I, finalment, tindrem la La mida de la taula hash variable global, que 22 00:01:05,450 --> 00:01:07,000 començarà com a zero. 23 00:01:07,000 --> 00:01:10,760 I es va a realitzar un seguiment de com moltes paraules són al diccionari. 24 00:01:10,760 --> 00:01:13,710 >> Així que donem una ullada a la càrrega. 25 00:01:13,710 --> 00:01:16,390 Tingueu en compte que la càrrega, retorna un bool. 26 00:01:16,390 --> 00:01:20,530 Es torna veritat si va ser amb èxit carregat, i false en cas contrari. 27 00:01:20,530 --> 00:01:23,990 I pren un char * const diccionari, que és el diccionari 28 00:01:23,990 --> 00:01:25,280 que volem obrir. 29 00:01:25,280 --> 00:01:27,170 Així que això és el primer que farem. 30 00:01:27,170 --> 00:01:29,500 >> Anem a fopen la diccionari per llegir. 31 00:01:29,500 --> 00:01:31,680 I haurem de fer segur que va succeir. 32 00:01:31,680 --> 00:01:35,920 Així que si és retornat NULL, llavors nosaltres no ho vam fer obrir correctament el diccionari. 33 00:01:35,920 --> 00:01:37,440 I hem de tornar false. 34 00:01:37,440 --> 00:01:41,580 Però suposant que ho va fer amb èxit obert, llavors volem llegir la 35 00:01:41,580 --> 00:01:42,400 diccionari. 36 00:01:42,400 --> 00:01:46,450 Així seguirà sonant fins que trobem alguna raó per sortir d'aquest bucle, 37 00:01:46,450 --> 00:01:47,570 que ja veurem. 38 00:01:47,570 --> 00:01:48,920 Així seguirà sonant. 39 00:01:48,920 --> 00:01:51,780 >> I ara anem a malloc un sol node. 40 00:01:51,780 --> 00:01:54,020 I per descomptat que necessitem ventilar pots tornar a intentar-ho. 41 00:01:54,020 --> 00:01:58,680 Així que si mallocing no va tenir èxit, a continuació, volem descarregar qualsevol node que 42 00:01:58,680 --> 00:02:02,590 va passar a malloc abans, tanqui la diccionari i tornar false. 43 00:02:02,590 --> 00:02:06,830 Però fent cas omís d'això, suposant tingut èxit, llavors volem utilitzar fscanf 44 00:02:06,830 --> 00:02:12,400 per llegir una sola paraula del nostre diccionari de al nostre node. 45 00:02:12,400 --> 00:02:17,940 Així que recordi que l'entrada> paraula és el carbó de llenya memòria intermèdia paraula de mida lenghth +1 46 00:02:17,940 --> 00:02:20,300 que anem a guardar la paraula polz 47 00:02:20,300 --> 00:02:25,070 >> Així fscanf va a tornar 1, sempre i ja que va ser capaç d'èxit 48 00:02:25,070 --> 00:02:26,750 llegir una paraula de l'arxiu. 49 00:02:26,750 --> 00:02:30,460 Si passa, ja sigui un error, o que arribar al final de l'arxiu, es 50 00:02:30,460 --> 00:02:31,950 no retornarà 1. 51 00:02:31,950 --> 00:02:35,180 En aquest cas no retorna 1, finalment sortirem de 52 00:02:35,180 --> 00:02:37,280 aquest bucle while. 53 00:02:37,280 --> 00:02:42,770 Així que veiem que una vegada que tinguem èxit llegir una paraula en 54 00:02:42,770 --> 00:02:48,270 entrada> paraula, llavors anem a la paraula utilitzant la nostra funció hash. 55 00:02:48,270 --> 00:02:49,580 >> Fem una ullada a la funció hash. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Així que vostè realment no necessita per entendre això. 58 00:02:55,610 --> 00:02:59,460 I en realitat ens vam aturar aquest hash funcionar des d'internet. 59 00:02:59,460 --> 00:03:04,010 L'única cosa que cal reconèixer és que això pren un char * paraula const. 60 00:03:04,010 --> 00:03:08,960 Així que ha de prendre una cadena com a entrada, i tornar un int sense signe com a sortida. 61 00:03:08,960 --> 00:03:12,360 Així que això és tot, una funció hash és, és pren en una entrada i li dóna una 62 00:03:12,360 --> 00:03:14,490 índex a la taula hash. 63 00:03:14,490 --> 00:03:18,530 >> Noteu que estem moding per NUM_BUCKETS, de manera que el valor retornat 64 00:03:18,530 --> 00:03:21,730 en realitat és un índex a la taula hash i no indexa més enllà de la 65 00:03:21,730 --> 00:03:24,320 límits de la matriu. 66 00:03:24,320 --> 00:03:28,060 Així que tenint en compte que la funció, anem per discutir la paraula que llegim la 67 00:03:28,060 --> 00:03:29,390 diccionari. 68 00:03:29,390 --> 00:03:31,700 I després farem servir el hash per inserir el 69 00:03:31,700 --> 00:03:33,750 entrada a la taula hash. 70 00:03:33,750 --> 00:03:38,520 >> Picada Ara Hashtable és el corrent llista vinculada a la taula. 71 00:03:38,520 --> 00:03:41,410 I és molt possible que és només NULL. 72 00:03:41,410 --> 00:03:44,960 Volem inserir la nostra entrada al a partir d'aquesta llista enllaçada. 73 00:03:44,960 --> 00:03:48,600 Així que tindrem la nostra actual punt d'entrada al que la taula hash 74 00:03:48,600 --> 00:03:50,380 Actualment assenyala. 75 00:03:50,380 --> 00:03:53,310 I després anem a emmagatzemar, a la taula hash en el 76 00:03:53,310 --> 00:03:55,350 hash, l'entrada actual. 77 00:03:55,350 --> 00:03:59,320 Així doncs, aquestes dues línies s'insereixen amb èxit l'entrada al principi de la 78 00:03:59,320 --> 00:04:02,260 llista enllaçada en aquest índex a la taula hash. 79 00:04:02,260 --> 00:04:04,900 >> Un cop hem acabat amb això, sabem que trobem una altra paraula al 80 00:04:04,900 --> 00:04:07,790 diccionari, i incrementem de nou. 81 00:04:07,790 --> 00:04:13,960 Així que seguim fent això fins fscanf finalment va tornar alguna cosa no 1 82 00:04:13,960 --> 00:04:16,950 el punt recordar que hem de alliberar a l'entrada. 83 00:04:16,950 --> 00:04:19,459 Així que aquí tenim malloced una entrada. 84 00:04:19,459 --> 00:04:21,329 I tractem de llegir alguna cosa del diccionari. 85 00:04:21,329 --> 00:04:23,910 I no ens llegim amb èxit alguna cosa del diccionari, en 86 00:04:23,910 --> 00:04:26,650 aquest cas hem de alliberar l'entrada que en realitat mai posem al 87 00:04:26,650 --> 00:04:29,140 taula hash, i finalment trencar. 88 00:04:29,140 --> 00:04:32,750 >> Un cop trenquem hem de veure, bé, què ens separem perquè hi ha 89 00:04:32,750 --> 00:04:34,360 estava llegint un error de l'arxiu? 90 00:04:34,360 --> 00:04:37,120 O què ens separem perquè ens arribat al final de l'arxiu? 91 00:04:37,120 --> 00:04:39,480 Si hi va haver un error, a continuació, volem tornar false. 92 00:04:39,480 --> 00:04:40,930 Com que la càrrega no va tenir èxit. 93 00:04:40,930 --> 00:04:43,890 I en el procés que volem descarregar totes les paraules que llegim en, i 94 00:04:43,890 --> 00:04:45,670 tancar el fitxer de diccionari. 95 00:04:45,670 --> 00:04:48,740 >> Assumint que vam tenir èxit, llavors només encara han de tancar el diccionari 96 00:04:48,740 --> 00:04:53,040 presentar, i finalment de tornada veritat ja que carregar correctament el diccionari. 97 00:04:53,040 --> 00:04:54,420 I això és tot per la càrrega. 98 00:04:54,420 --> 00:04:59,020 Així que ara comprovar, donada una taula hash carregat, que tindrà aquest aspecte. 99 00:04:59,020 --> 00:05:03,140 Per tal de comprovar, torna un bool, que és va a indicar si la passar 100 00:05:03,140 --> 00:05:07,530 en char * paraula, si el passat en la cadena està al diccionari. 101 00:05:07,530 --> 00:05:09,890 Així que si està al diccionari, si està en la nostra taula hash, 102 00:05:09,890 --> 00:05:11,170 tornarem realitat. 103 00:05:11,170 --> 00:05:13,380 I si no és així, anem a tornar false. 104 00:05:13,380 --> 00:05:17,740 >> Tenint en compte això va passar en la paraula, estem anar per discutir la paraula. 105 00:05:17,740 --> 00:05:22,110 Ara una cosa important a reconèixer és que en la càrrega que sabíem que tota la 106 00:05:22,110 --> 00:05:23,820 paraules que estarem en minúscules. 107 00:05:23,820 --> 00:05:25,820 Però aquí no estem tan segurs. 108 00:05:25,820 --> 00:05:29,510 Si fem una ullada a la nostra funció hash, nostra funció hash realitat 109 00:05:29,510 --> 00:05:32,700 és la caixa inferior de cada personatge de la paraula. 110 00:05:32,700 --> 00:05:37,940 Així que, independentment de la capitalització de paraula, la nostra funció hash és el retorn 111 00:05:37,940 --> 00:05:42,270 el mateix índex per la qual cosa el capitalització és, ja que tindria 112 00:05:42,270 --> 00:05:45,280 tornat per a una completament en minúscules versió de la paraula. 113 00:05:45,280 --> 00:05:46,600 D'acord. 114 00:05:46,600 --> 00:05:49,790 Aquest és el nostre índex està en el taula hash per a aquesta paraula. 115 00:05:49,790 --> 00:05:52,940 >> Ara bé, aquest bucle es va a iterar sobre la llista enllaçada 116 00:05:52,940 --> 00:05:55,000 que era en aquest índex. 117 00:05:55,000 --> 00:05:59,610 Així notem que estem inicialitzant entrada per assenyalar a aquest índex. 118 00:05:59,610 --> 00:06:02,750 Continuarem quan! entrada = NULL. 119 00:06:02,750 --> 00:06:07,770 I recorda que l'actualització del punter en la nostra llista d'inscrits vinculats = entrada> següent. 120 00:06:07,770 --> 00:06:14,400 Així que tenim el nostre punt d'entrada actual per el següent element de la llista enllaçada. 121 00:06:14,400 --> 00:06:19,250 >> Així que per a cada entrada de la llista enllaçada, utilitzarem strcasecmp. 122 00:06:19,250 --> 00:06:20,330 No és StrComp. 123 00:06:20,330 --> 00:06:23,780 Perquè, una vegada més, volem fer si les coses minúscules. 124 00:06:23,780 --> 00:06:27,870 Així que fem servir strcasecmp comparar l' paraula que ha passat a través d'aquest 125 00:06:27,870 --> 00:06:31,860 funció en contra de la paraula el que hi ha en aquesta entrada. 126 00:06:31,860 --> 00:06:35,570 Si torna zero, que vol dir que hi va haver un partit, en el qual cas que vulguem 127 00:06:35,570 --> 00:06:36,630 return true. 128 00:06:36,630 --> 00:06:39,590 Ens trobem amb èxit el paraula en la nostra taula hash. 129 00:06:39,590 --> 00:06:43,040 >> Si no hi havia un partit, llavors estem anar a la volta de nou i mirar el 130 00:06:43,040 --> 00:06:43,990 següent entrada. 131 00:06:43,990 --> 00:06:47,640 I continuarem bucle mentre que hi ha són entrades d'aquesta llista enllaçada. 132 00:06:47,640 --> 00:06:50,160 Què passa si trenquem fora d'aquest bucle? 133 00:06:50,160 --> 00:06:55,110 Això vol dir que no trobem una entrada que aparellat aquesta paraula, en aquest cas 134 00:06:55,110 --> 00:07:00,220 tornem false per indicar que la nostra taula hash no conté aquesta paraula. 135 00:07:00,220 --> 00:07:02,540 I això és un xec. 136 00:07:02,540 --> 00:07:04,790 >> Així que donem una ullada a mida. 137 00:07:04,790 --> 00:07:06,970 Ara la mida serà bastant simple. 138 00:07:06,970 --> 00:07:11,080 Atès recordar en la càrrega, per a cada paraula trobem, hem incrementat un mundial 139 00:07:11,080 --> 00:07:12,880 La mida de la taula hash variable. 140 00:07:12,880 --> 00:07:16,480 Així que la funció de mida és només va tornar variable global. 141 00:07:16,480 --> 00:07:18,150 I això és tot. 142 00:07:18,150 --> 00:07:22,300 >> Ara, per fi, hem de descarregar el diccionari una vegada que tot està fet. 143 00:07:22,300 --> 00:07:25,340 Llavors, com farem això? 144 00:07:25,340 --> 00:07:30,440 Aquí estem bucle sobre tots els cubs de la nostra taula. 145 00:07:30,440 --> 00:07:33,240 Així que hi ha NUM_BUCKETS cubs. 146 00:07:33,240 --> 00:07:37,410 I per a cada llista enllaçada a la nostra taula hash, que anem a reproduir indefinidament 147 00:07:37,410 --> 00:07:41,070 la totalitat de la llista enllaçada, l'alliberament de cada element. 148 00:07:41,070 --> 00:07:42,900 >> Ara hem de tenir cura. 149 00:07:42,900 --> 00:07:47,910 Així que aquí tenim una variable temporal això és emmagatzemar el punter a la següent 150 00:07:47,910 --> 00:07:49,730 element de la llista enllaçada. 151 00:07:49,730 --> 00:07:52,140 I després anem a la lliure l'element actual. 152 00:07:52,140 --> 00:07:55,990 Hem d'estar segurs que fem això des que no pot simplement alliberar l'element actual 153 00:07:55,990 --> 00:07:59,180 i després tractar d'accedir a la següent punter, ja que una vegada que ens hem alliberat ell, 154 00:07:59,180 --> 00:08:00,870 la memòria no és vàlida. 155 00:08:00,870 --> 00:08:04,990 >> Així que hem de mantenir al voltant d'un punter a el següent element, llavors podem alliberar el 156 00:08:04,990 --> 00:08:08,360 element actual, i llavors podem actualitzar nostra element actual per apuntar a 157 00:08:08,360 --> 00:08:09,550 el següent element. 158 00:08:09,550 --> 00:08:12,800 Anem bucle while hi ha elements en aquesta llista enllaçada. 159 00:08:12,800 --> 00:08:15,620 Farem això per a tots ells vinculats llistes a la taula hash. 160 00:08:15,620 --> 00:08:19,460 I una vegada que haguem acabat amb això, hem completament descarregada la taula hash, i 161 00:08:19,460 --> 00:08:20,190 hem acabat. 162 00:08:20,190 --> 00:08:23,200 Així que és impossible per a descàrrega per tornar mai falsa. 163 00:08:23,200 --> 00:08:26,470 I quan acabem, ens simplement torni true. 164 00:08:26,470 --> 00:08:29,000 >> Anem a donar a aquesta solució una oportunitat. 165 00:08:29,000 --> 00:08:33,070 Així que donem una ullada al nostre struct node es veurà així. 166 00:08:33,070 --> 00:08:36,220 Aquí veiem que tindrem un bool paraula i un node d'estructura * nens 167 00:08:36,220 --> 00:08:37,470 ALFABET suport. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Així que la primera cosa que vostè pot ser preguntant, per què és ALFABET 170 00:08:42,020 --> 00:08:44,660 ed defineix com 27? 171 00:08:44,660 --> 00:08:47,900 Bé, recordeu que nosaltres necessitarem estar manejant l'apòstrof. 172 00:08:47,900 --> 00:08:51,910 Així que serà una mena cas especial al llarg d'aquest programa. 173 00:08:51,910 --> 00:08:54,710 >> Ara recorda com 1 trie en realitat funciona. 174 00:08:54,710 --> 00:08:59,380 Diguem que estem indexant la paraula "Gats". Després, des de l'arrel del trienni, 175 00:08:59,380 --> 00:09:02,610 anem a mirar els nens matriu, i anem a mirar el 176 00:09:02,610 --> 00:09:08,090 índex que correspon a la lletra C. Així que serà indexada 2. 177 00:09:08,090 --> 00:09:11,530 Així que tenint en compte que, que la voluntat donar-nos un nou node. 178 00:09:11,530 --> 00:09:13,820 I després treballarem a partir d'aquest node. 179 00:09:13,820 --> 00:09:17,770 >> Així que tenint en compte que el node, estem un cop més va a mirar la matriu nens. 180 00:09:17,770 --> 00:09:22,110 I anem a buscar en l'índex zero per correspondre a la A en el gat. 181 00:09:22,110 --> 00:09:27,170 Així que anirem a aquest node, i atès que el node que anem 182 00:09:27,170 --> 00:09:31,090 per mirar la final és una correspon T. I de passar a aquest node, 183 00:09:31,090 --> 00:09:35,530 finalment, ens hem mirat del tot mitjançant la nostra paraula "gat". I ara bool 184 00:09:35,530 --> 00:09:40,960 paraula se suposa que indica si aquesta paraula donada és en realitat una paraula. 185 00:09:40,960 --> 00:09:43,470 >> Llavors, per què necessitem aquest cas especial? 186 00:09:43,470 --> 00:09:47,700 Doncs el de la paraula "catàstrofe" és al diccionari, però el 187 00:09:47,700 --> 00:09:50,150 paraula "gat" no ho és? 188 00:09:50,150 --> 00:09:54,580 Així i mirant per veure si la paraula "gat" és al diccionari, estem 189 00:09:54,580 --> 00:09:59,970 va a semblar amb èxit a través els índexs de C-A-T a node regió. 190 00:09:59,970 --> 00:10:04,290 Però això és només perquè la catàstrofe succeït per crear nodes en el camí 191 00:10:04,290 --> 00:10:07,190 a partir de C-A-T, tot el camí a al final de la paraula. 192 00:10:07,190 --> 00:10:12,020 Així bool paraula s'utilitza per indicar si aquest lloc en particular 193 00:10:12,020 --> 00:10:14,310 indica, en realitat una paraula. 194 00:10:14,310 --> 00:10:15,140 >> Està bé. 195 00:10:15,140 --> 00:10:19,310 Així que ara que sabem el que és trienni va a semblar, donem una ullada a la 196 00:10:19,310 --> 00:10:20,730 funció de la càrrega. 197 00:10:20,730 --> 00:10:24,610 Així que la càrrega va a tornar un bool Perquè si estem amb èxit o 198 00:10:24,610 --> 00:10:26,720 sense èxit carregat el diccionari. 199 00:10:26,720 --> 00:10:30,460 I això serà el diccionari que volem carregar. 200 00:10:30,460 --> 00:10:33,930 >> Així que el primer que hem de fer és obrir fins a aquest diccionari per llegir. 201 00:10:33,930 --> 00:10:36,160 I hem d'assegurar nosaltres no fallem. 202 00:10:36,160 --> 00:10:39,580 Així que si el diccionari no era obert amb èxit, tornarà 203 00:10:39,580 --> 00:10:42,400 nul, en aquest cas estem tornarà false. 204 00:10:42,400 --> 00:10:47,230 Però suposant que èxit obert, llavors podem realment llegir 205 00:10:47,230 --> 00:10:48,220 a través del diccionari. 206 00:10:48,220 --> 00:10:50,880 >> Així que el primer que anem a volem fer és que tenim aquesta 207 00:10:50,880 --> 00:10:52,500 arrel variable global. 208 00:10:52,500 --> 00:10:56,190 Ara arrel serà un node *. 209 00:10:56,190 --> 00:10:59,760 És el cim de la nostra trie que estem va a recórrer en iteració. 210 00:10:59,760 --> 00:11:02,660 Així que el primer que anem a voler fer és assignar 211 00:11:02,660 --> 00:11:04,140 memòria per a la nostra arrel. 212 00:11:04,140 --> 00:11:07,980 Noteu que estem fent servir la calloc funció, que és bàsicament la mateixa 213 00:11:07,980 --> 00:11:11,500 com la funció malloc, excepte que és garantit per tornar una cosa que és 214 00:11:11,500 --> 00:11:13,180 completament portat a zero. 215 00:11:13,180 --> 00:11:17,290 Així que si fem servir malloc, necessitaríem passar per tots els punters en la nostra 216 00:11:17,290 --> 00:11:20,160 node, i assegureu-vos que són tots nuls. 217 00:11:20,160 --> 00:11:22,710 Així calloc ho farà per nosaltres. 218 00:11:22,710 --> 00:11:26,330 >> Ara com malloc, hem de fer Assegureu-vos que l'assignació va ser en realitat 219 00:11:26,330 --> 00:11:27,520 reeixida. 220 00:11:27,520 --> 00:11:29,990 Si això retorna null, llavors hagi de tancar o diccionari 221 00:11:29,990 --> 00:11:32,100 presentar i tornar false. 222 00:11:32,100 --> 00:11:36,835 Així que assumint que l'assignació es èxit, utilitzarem un node * 223 00:11:36,835 --> 00:11:40,270 cursor per recórrer la nostra trienni. 224 00:11:40,270 --> 00:11:43,890 Així que les nostres arrels mai canviarà, però farem servir el cursor per 225 00:11:43,890 --> 00:11:47,875 en realitat anar d'un node a un altre. 226 00:11:47,875 --> 00:11:50,940 >> Així que en aquest bucle que estem llegint amb el fitxer de diccionari. 227 00:11:50,940 --> 00:11:53,670 I estem usant fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc va a agafar un sol caràcter de l'arxiu. 229 00:11:56,290 --> 00:11:59,370 Anem a continuar amb l'acaparament caràcters, mentre que no arriben fins a la 230 00:11:59,370 --> 00:12:01,570 final de l'arxiu. 231 00:12:01,570 --> 00:12:03,480 >> Hi ha dos casos que hem de manejar. 232 00:12:03,480 --> 00:12:06,610 El primer, si el caràcter no era una nova línia. 233 00:12:06,610 --> 00:12:10,450 Així que sabem que si era una nova línia, a continuació, estem a punt de passar a una nova paraula. 234 00:12:10,450 --> 00:12:15,240 Però suposant que no era una nova línia, a continuació, aquí volem esbrinar el 235 00:12:15,240 --> 00:12:18,380 Índex anem a índex en en la matriu dels nens que 236 00:12:18,380 --> 00:12:19,810 miràvem abans. 237 00:12:19,810 --> 00:12:23,880 >> Així que, com he dit abans, hem de cas especial l'apòstrof. 238 00:12:23,880 --> 00:12:26,220 Noteu que estem usant el ternari operador d'aquí. 239 00:12:26,220 --> 00:12:29,580 Així que anem a llegir això, ja que si el caràcter es llegeix en una era 240 00:12:29,580 --> 00:12:35,330 apòstrof, a continuació, establirem index = "alfabet" -1, que 241 00:12:35,330 --> 00:12:37,680 ser l'índex 26. 242 00:12:37,680 --> 00:12:41,130 >> Si no, si no fos un apòstrof, no establirem l'índex 243 00:12:41,130 --> 00:12:43,760 igual a c - a. 244 00:12:43,760 --> 00:12:49,030 Així que recordi tornar de prèviament p-sèries, c - a què ens donarà la 245 00:12:49,030 --> 00:12:53,410 posició alfabètica de C. Així que si C és la lletra A, això es 246 00:12:53,410 --> 00:12:54,700 donar-nos l'índex zero. 247 00:12:54,700 --> 00:12:58,120 Perquè la lletra B, se li donarà ens l'índex 1, i així successivament. 248 00:12:58,120 --> 00:13:03,010 >> Així que això ens dóna l'índex a la fills matriu que volem. 249 00:13:03,010 --> 00:13:08,890 Ara bé, si aquest índex és actualment nul · la en els nens, que significa que un node 250 00:13:08,890 --> 00:13:11,830 no existeix en l'actualitat d'aquest camí. 251 00:13:11,830 --> 00:13:15,160 Així que hem d'assignar un node per aquest camí. 252 00:13:15,160 --> 00:13:16,550 Això és el que farem aquí. 253 00:13:16,550 --> 00:13:20,690 >> Així que utilitzarem de nou el calloc funció, pel que no ha de 254 00:13:20,690 --> 00:13:22,880 zero tots els punters. 255 00:13:22,880 --> 00:13:27,240 I de nou hem de comprovar que calloc no va fallar. 256 00:13:27,240 --> 00:13:30,700 Si calloc va deixar, llavors necessitem per descarregar tot, tancar la nostra 257 00:13:30,700 --> 00:13:32,820 diccionari, i tornar false. 258 00:13:32,820 --> 00:13:40,050 Així que suposant que no va fallar, llavors això crearà un nou fill per a nosaltres. 259 00:13:40,050 --> 00:13:41,930 I després anirem a aquest nen. 260 00:13:41,930 --> 00:13:44,960 El nostre cursor iterará a aquest nen. 261 00:13:44,960 --> 00:13:49,330 >> Ara bé, si això no era nul, per començar, a continuació, el cursor només es pot repetir 262 00:13:49,330 --> 00:13:52,590 a aquest nen sense arribar a haver de assignar res. 263 00:13:52,590 --> 00:13:56,730 Aquest és el cas en què primer va passar assignar la paraula "gat". I 264 00:13:56,730 --> 00:14:00,330 això vol dir que quan anem a assignar "Catàstrofe", que no és necessari per crear 265 00:14:00,330 --> 00:14:01,680 nodes per a C-A-T de nou. 266 00:14:01,680 --> 00:14:04,830 Ja existeixen. 267 00:14:04,830 --> 00:14:06,080 >> Què és aquest lloc? 268 00:14:06,080 --> 00:14:10,480 Aquesta és la condició en la que C era barra invertida n, on c és una línia. 269 00:14:10,480 --> 00:14:13,710 Això vol dir que tenim èxit completat una paraula. 270 00:14:13,710 --> 00:14:16,860 Ara, què és el que volem fer quan completat amb èxit una paraula? 271 00:14:16,860 --> 00:14:21,100 Utilitzarem aquest camp la paraula dins del nostre node estructura. 272 00:14:21,100 --> 00:14:23,390 Volem establir que en true. 273 00:14:23,390 --> 00:14:27,150 Així que indica que aquest node indica un èxit 274 00:14:27,150 --> 00:14:29,250 paraula, una paraula real. 275 00:14:29,250 --> 00:14:30,940 >> Ara estableixi que en true. 276 00:14:30,940 --> 00:14:35,150 Volem restablir la nostra cursor fins al punt al començament del trienni de nou. 277 00:14:35,150 --> 00:14:40,160 I, finalment, incrementar el nostre diccionari mida, ja que ens trobem una altra obra. 278 00:14:40,160 --> 00:14:43,230 Així que seguirem fent això, lectura de caràcter per caràcter, 279 00:14:43,230 --> 00:14:49,150 la construcció de nous nodes en el nostre trienni i per a cada paraula al diccionari, fins 280 00:14:49,150 --> 00:14:54,020 finalment arribem C! = EOF, en el qual cas sortim de l'arxiu. 281 00:14:54,020 --> 00:14:57,050 >> Ara hi ha dos casos sota que podríem haver colpejat EOF. 282 00:14:57,050 --> 00:15:00,980 La primera és si hi va haver un error llegir el fitxer. 283 00:15:00,980 --> 00:15:03,470 Així que si hi va haver un error, haurà de fer el típic. 284 00:15:03,470 --> 00:15:06,460 Descarregueu tot, prop arxiu, torna falsa. 285 00:15:06,460 --> 00:15:09,810 Suposant que no era un error, que simplement vol dir que realment va colpejar el final de 286 00:15:09,810 --> 00:15:13,750 l'arxiu, en aquest cas, es tanca el presentar i tornar true ja que 287 00:15:13,750 --> 00:15:17,330 diccionari carregat correctament en la nostra trie. 288 00:15:17,330 --> 00:15:20,170 >> Així que ara anem a veure xec. 289 00:15:20,170 --> 00:15:25,156 Quant a la funció de comprovació, veiem El registre d'entrada es va a tornar un bool. 290 00:15:25,156 --> 00:15:29,680 Retorna true si aquesta paraula que és que passa és en la nostra trienni. 291 00:15:29,680 --> 00:15:32,110 Retorna false en cas contrari. 292 00:15:32,110 --> 00:15:36,050 Llavors, com determinar si aquesta paraula és en la nostra triennis? 293 00:15:36,050 --> 00:15:40,190 >> Veiem aquí que, igual que abans, farem servir el cursor per iterar 294 00:15:40,190 --> 00:15:41,970 a través del nostre trie. 295 00:15:41,970 --> 00:15:46,600 Ara aquí repetirem llarg de tota la nostra paraula. 296 00:15:46,600 --> 00:15:50,620 Així iteració en la paraula que estem passat, anem a determinar la 297 00:15:50,620 --> 00:15:56,400 índex en la matriu els nens que correspon a la paraula suport I. Així que aquest 298 00:15:56,400 --> 00:15:59,670 serà exactament com de càrrega, en la qual si la paraula [i] 299 00:15:59,670 --> 00:16:03,310 és un apòstrof, llavors volem utilitzar l'índex "alfabet" - 1. 300 00:16:03,310 --> 00:16:05,350 Com que es va determinar que aquesta és on anem a emmagatzemar 301 00:16:05,350 --> 00:16:07,100 apòstrofs. 302 00:16:07,100 --> 00:16:11,780 >> Else utilitzarem dues paraules més baixa suport I. Així que recorda aquesta paraula pot 303 00:16:11,780 --> 00:16:13,920 tenir la capitalització arbitrària. 304 00:16:13,920 --> 00:16:17,540 I pel que volem assegurar-nos que estem usant una versió en minúscules de les coses. 305 00:16:17,540 --> 00:16:21,920 I després restar que 'a' alhora de nou ens dóna la alfabètic 306 00:16:21,920 --> 00:16:23,880 posició d'aquest caràcter. 307 00:16:23,880 --> 00:16:27,680 Així que serà el nostre índex en la matriu dels nens. 308 00:16:27,680 --> 00:16:32,420 >> I ara si aquest índex en els nens matriu és nul, això significa que 309 00:16:32,420 --> 00:16:34,990 ja no pot continuar la iteració baixar la trie. 310 00:16:34,990 --> 00:16:38,870 Si aquest és el cas, aquesta paraula no pot possiblement estar en la nostra Trie. 311 00:16:38,870 --> 00:16:42,340 Atès que si ho fos, que ho faria significa no hi hauria un camí 312 00:16:42,340 --> 00:16:43,510 a aquesta paraula. 313 00:16:43,510 --> 00:16:45,290 I mai es trobaria nul. 314 00:16:45,290 --> 00:16:47,850 Així que trobar nul, tornem falsa. 315 00:16:47,850 --> 00:16:49,840 La paraula no és al diccionari. 316 00:16:49,840 --> 00:16:53,660 Si no fos nul, llavors estem continuarà la iteració. 317 00:16:53,660 --> 00:16:57,220 >> Així que anem per aquí cursor per apuntar a aquesta particular 318 00:16:57,220 --> 00:16:59,760 node en aquest índex. 319 00:16:59,760 --> 00:17:03,150 Nosaltres seguim fent que al llarg la paraula completa, suposant 320 00:17:03,150 --> 00:17:03,950 mai colpegem nul. 321 00:17:03,950 --> 00:17:07,220 Això vol dir que hem estat capaços d'obtenir a través d' tota la paraula i trobar 322 00:17:07,220 --> 00:17:08,920 un node en el nostre intent. 323 00:17:08,920 --> 00:17:10,770 Però no hem acabat encara. 324 00:17:10,770 --> 00:17:12,290 >> No volem simplement tornar true. 325 00:17:12,290 --> 00:17:14,770 Volem tornar cursor> paraula. 326 00:17:14,770 --> 00:17:18,980 Atès que recordar una vegada més, és "gat" no és al diccionari, i "catàstrofe" 327 00:17:18,980 --> 00:17:22,935 És, llavors tindrem èxit que obtenim a través de la paraula "gat". Però cursor 328 00:17:22,935 --> 00:17:25,760 paraula serà falsa i no és cert. 329 00:17:25,760 --> 00:17:30,930 Així que tornem cursor paraula per indicar si aquest node és en realitat una paraula. 330 00:17:30,930 --> 00:17:32,470 I això és tot per xec. 331 00:17:32,470 --> 00:17:34,250 >> Així que anem a veure la mida. 332 00:17:34,250 --> 00:17:37,350 Així que la mida serà bastant fàcil ja que, recorda en la càrrega, estem 333 00:17:37,350 --> 00:17:41,430 incrementant la mida del diccionari per cada paraula que ens trobem. 334 00:17:41,430 --> 00:17:45,350 Així que la mida és només va a tornar la mida del diccionari. 335 00:17:45,350 --> 00:17:47,390 I això és tot. 336 00:17:47,390 --> 00:17:50,590 >> Així, finalment, hem descarregar. 337 00:17:50,590 --> 00:17:55,100 Així que es baixa, anem a utilitzar una funció recursiva per fer realitat tots 338 00:17:55,100 --> 00:17:56,530 part del treball per nosaltres. 339 00:17:56,530 --> 00:17:59,340 Així que la nostra funció va a ser cridats descarregador. 340 00:17:59,340 --> 00:18:01,650 Què està descarregador farem? 341 00:18:01,650 --> 00:18:06,580 Veiem aquí que descarregador va a iterar sobre tots els infants en 342 00:18:06,580 --> 00:18:08,410 aquest node particular. 343 00:18:08,410 --> 00:18:11,750 I si el node fill no és null, llavors anem a 344 00:18:11,750 --> 00:18:13,730 descarregar el node secundari. 345 00:18:13,730 --> 00:18:18,010 >> Així que aquest és el teu cas de forma recursiva descarregui tots els nostres nens. 346 00:18:18,010 --> 00:18:21,080 Quan estiguem segurs que tots els nostres nens s'han descarregat, llavors 347 00:18:21,080 --> 00:18:25,210 pot alliberar a nosaltres mateixos, així descarregar nosaltres mateixos. 348 00:18:25,210 --> 00:18:29,460 Això funciona de manera recursiva descarregar tot el trienni. 349 00:18:29,460 --> 00:18:32,850 I un cop fet això, només podem tornar true. 350 00:18:32,850 --> 00:18:34,210 Unload no pot fallar. 351 00:18:34,210 --> 00:18:35,710 Només estem alliberant coses. 352 00:18:35,710 --> 00:18:38,870 Així que un cop haguem acabat alliberant tot, tornar true. 353 00:18:38,870 --> 00:18:40,320 I això és tot. 354 00:18:40,320 --> 00:18:41,080 El meu nom és Rob. 355 00:18:41,080 --> 00:18:42,426 I això va ser corrector ortogràfic. 356 00:18:42,426 --> 00:18:47,830 >> [REPRODUCCIÓ DE MÚSICA]