ALTAVOZ 1: Vamos a darle esta solución una oportunidad. Así que echemos un vistazo a lo nuestro Nodo de estructura se verá así. Aquí, vemos que vamos a tener un Bool Palabra y una estrella nodo de estructura Niños acorchetan alfabeto. Así que lo primero que puede que se pregunte, ¿por qué es de hash alfabeto define como 27? Bueno, recuerde que nosotros vamos a necesitar estar manejando el apóstrofe, por lo que va a ser algo así como un especial caso a través de este programa. Bien, ahora, ¿recuerdas cómo un Trie realmente funciona. Digamos que estamos indexando la palabra gatos, a continuación, a partir de la raíz de nuestra Trie, vamos a mirar a los niños matriz, y vamos a mirar el índice que corresponde a la letra C. Así que sería índice de dos. Así que teniendo en cuenta que, que nos dará un nuevo nodo, y luego vamos a trabajar desde ese nodo. Así que teniendo en cuenta que el nodo, estamos una vez más va a mirar la matriz infantil, y vamos a buscar en el índice cero para corresponder a la A en el gato. Así que vamos a ir a ese nodo, y dado que el nodo, vamos para buscar en el índice que corresponde T. Y de pasar a ese nodo, por último, nos hemos mirado por completo a través de nuestro gato de palabra, y ahora Bool Palabra se supone que debe indicar si esta palabra dada es en realidad una palabra. Entonces, ¿por qué necesitamos ese caso especial? Bueno, ¿y si la palabra catástrofe es en el diccionario, pero la palabra gato no lo es? Así que al mirar para ver si la palabra gato es en el diccionario, vamos a buscar con éxito a través de los índices C-A-T y llegar a un nodo, pero eso es sólo porque la catástrofe ocurrió a crear nodos en el camino de C-A-T todo el camino hasta el final de la palabra. Así Bool se utiliza Word indicar si este lugar en particular en realidad indica una palabra. Muy bien, así que ahora que sabemos lo que es un Trie se va a parecer, echemos un vistazo en la función de carga. Así que la carga se va a devolver un Bool Porque si estamos con éxito o diccionario y cargado, sin éxito, esto va a ser el diccionario que queremos cargar. Así que lo primero que vamos a hacer es abrir hasta ese diccionario para leer. Tenemos que asegurarnos de que no fracasamos, por lo que si el diccionario no era abierto con éxito, devolverá No, en ese caso vamos a devolverá False. Pero suponiendo que éxito abierto, entonces podemos realmente leer a través del diccionario. Así que lo primero que vamos a queremos hacer es que tenemos esta raíz variable global. Ahora, la raíz va a ser una estrella de nodo. Es la cima de nuestra Trie que estamos va a recorrer en iteración. Así que lo primero que vamos a querer hacer es asignar memoria para nuestra raíz. Nótese que estamos usando la calloc función, que es básicamente la misma como la función Malloc, excepto que es garantizado para devolver algo que es completamente llevado a cero. Así que si utilizamos Malloc, necesitaríamos pasar por todos los punteros en nuestra nodo y asegúrese de que son todos nulos. Así calloc lo hará por nosotros. Ahora, al igual que Malloc, tenemos que hacer Asegúrese de que la asignación es en realidad exitosa. Si esto devuelve null, entonces tenga que cerrar nuestro diccionario presentar y devolver Falso. Así que asumiendo que la asignación se éxito, vamos a utilizar un nodo protagonizar Cursor para repetir a través de nuestro Trie. Así que nuestra raíz nunca va a cambiar, pero vamos a utilizar el cursor para en realidad ir de un nodo a otro. Muy bien, así que en este bucle, estamos leer el archivo de diccionario, y estamos utilizando al fgetc. Así fgetc va a agarrar un solo carácter del archivo. Vamos a continuar con el acaparamiento caracteres, mientras que no llegan hasta la final del archivo, por lo que hay dos casos tenemos que manejar. El primero, si el personaje no era un nueva línea, por lo que sabía si era un nuevo línea, entonces estamos a punto de pasar a una nueva palabra. Pero suponiendo que no era una nueva línea, a continuación, aquí, queremos averiguar el Índice vamos a índice en en la matriz de niños que mirábamos antes. Así que como he dicho antes, tenemos que caso especial el apóstrofe. Nótese que estamos utilizando el operador ternario aquí, así que vamos a leer esto como si el personaje se lee en era un apóstrofe, a continuación, vamos a set índice igual a menos alfabeto 1, que será el índice de 26. Si no, si no fuera un apóstrofe, a continuación, vamos a establecer el índice igual a C menos una. Así que recuerda de nuevo a partir de conjuntos p anteriores, c, menos una que nos va a dar la posición alfabética de c, por lo que si c es la letra A, esta voluntad darnos el índice cero. Porque la letra B, daría nos el índice 1, y así sucesivamente. Así que esto nos da el índice en la Niños matriz que queremos. Ahora bien, si este índice es actualmente nula en la matriz de niños, que significa que un nodo no existe en la actualidad de ese camino, así que tenemos que asignar una nodo para ese camino. Eso es lo que hacemos aquí. Así que vamos a, de nuevo, utilice el calloc función de manera que no tenemos poner a cero todos los punteros, y nosotros, de nuevo, la necesidad de comprobar que calloc no falló. Si calloc dejó, entonces necesitamos para descargar todo, cerrar nuestra diccionario, y devolverá False. Así que suponiendo que no falló, entonces esto creará un nuevo hijo para nosotros, y luego vamos a ir a ese niño. Nuestro cursor iterará a ese niño. Ahora bien, si esto no fuera nulo, para empezar, a continuación, el cursor sólo se puede repetir a ese niño sin llegar a tener que asignar nada. Este es el caso en el que primero pasó para asignar la palabra gato, y eso significa que cuando vamos a asignar catástrofe, que no necesitamos para crear nodos para C-A-T de nuevo. Ya existen. OK, entonces ¿qué es esta cosa? Esta es la condición en la que C era barra invertida n, donde c es una nueva línea. Esto significa que tenemos éxito completado una palabra. Ahora, ¿qué es lo que queremos hacer cuando completado con éxito una palabra? Vamos a utilizar este campo la palabra dentro de nuestro nodo de estructura. Queremos establecer que en True, de manera que indica que este nodo indica un palabra éxito una palabra real. Ahora, ajuste que en True. Queremos restablecer nuestra cursor hasta el punto al comienzo de la Trie de nuevo. Y, por último, incrementar nuestro diccionario tamaño ya que encontramos una palabra más. Muy bien, así que vamos a seguir haciendo que, en la lectura de carácter por carácter, la construcción de nuevos nodos en nuestra Trie y para cada palabra en el diccionario, hasta que finalmente alcanzamos c es igual a EOF, en cuyo caso, rompemos fuera del archivo. Ahora, hay dos casos en virtud que podríamos haber golpeado EOF. La primera es si hubo un error leyendo el archivo, así que si había un error, tenemos que hacer la típica descargar todo, cerrar el archivo, devolverá False. Suponiendo que no era un error, que simplemente significa que realmente golpeó el final de el archivo, en cuyo caso, se cierra el presentar y devolver True, ya que cargado con éxito el diccionario en nuestra Trie. Muy bien, así que ahora vamos a Pago Pago. En cuanto a la función de comprobación, vemos Comprobar que se va a devolver un Bool. Devuelve True si esta palabra que es que se pasa es en nuestra Trie. Devuelve False en caso contrario. Entonces, ¿cómo vamos a determinar si esta palabra es en nuestra Trie? Vemos aquí que, al igual que antes, vamos a usar el cursor para iterar a través de nuestro Trie. Ahora, aquí, vamos a repetir lo largo de toda nuestra palabra. Así iteración en la palabra somos pasado, vamos a determinar la índice en la matriz niños que corresponde al soporte de la palabra i. Así que esto va a ser exactamente como Carga, en la que si el soporte palabra i es un apóstrofe, entonces queremos utilizar el índice alfabeto menos 1 porque determinamos ahí es donde vamos para almacenar apóstrofes. Else vamos a utilizar tolower soporte de la palabra i. Así que recuerde que la palabra puede tener arbitraria capitalización, por lo que querrá asegurarse de que estamos utilizando una versión en minúsculas de las cosas. Y luego restar de esa minúscula a para, una vez más, nos la dará posición alfabético de ese carácter. Así que va a ser nuestro índice en la matriz de la Infancia. Y ahora, si ese índice en los niños matriz es nulo, eso significa que ya no puede continuar la iteración bajar la Trie. Si ese es el caso, esta palabra no puede posiblemente estar en nuestra Trie, ya que si fueron, eso significaría que habría una ruta de acceso a esa palabra, y lo haría Nunca encuentro nulo. Así que encontrar nulo, volvemos Falso. La palabra no está en el diccionario. Si no fuera nulo, entonces vamos a continuar la iteración, por lo que vamos actualizar nuestro cursor para señalar que en particular nodo en ese índice. Así que seguimos haciendo que a lo largo la palabra entera. Suponiendo que nunca golpeamos nulo, que los medios hemos sido capaces de obtener a través de la totalidad de mundo y encontrar un nodo en nuestra Trie, pero no hemos terminado todavía. No queremos simplemente devolver True. Queremos volver Palabra de error cursor desde entonces, recordar de nuevo, si el gato no es en el diccionario y la catástrofe es, entonces vamos a conseguir con éxito a través de la palabra gato, pero la palabra cursor será falsa y no es cierto. Así que volvemos cursor palabra para indicar si este nodo es en realidad una palabra, y eso es todo por cheque. Así que vamos a ver Tamaño. Así Tamaño va a ser bastante fácil ya que, recuerda, en carga, estamos incrementando el tamaño del diccionario para cada palabra que nos encontramos. Así Tamaño es sólo va a volver tamaño del diccionario, y eso es todo. Muy bien, así que, por último, tenemos en Descargar. Así Unload, vamos a utilizar una función recursiva para hacer realidad todos parte del trabajo por nosotros, por lo que nuestra función se va a llamar Descargador. ¿Qué está Descargador vamos a hacer? Vemos aquí que Descargador va a iterar sobre todos los niños en este nodo particular, y si el niño nodo no es nulo, entonces vamos a descargar el nodo secundario. Así que esto va a forma recursiva descargar todos nuestros niños. Una vez que estemos seguros de que todos nuestros niños se han descargado, entonces puede liberarnos, para descargar a nosotros mismos. Así que este será de forma recursiva descargar el toda Trie y, a continuación, una vez que es hecho, sólo podemos devolver True. Unload no puede fallar, estamos simplemente liberando cosas. Así que una vez que hayamos terminado liberando todo, devolver TRUE. Y eso es todo. Mi nombre es Rob, y esto fue [inaudible].