DICCIONARIOS Y TRIES Materia: Análisis de Algoritmos Fecha: Abril 13 de 1999 MEDELLIN DEPARTAMENTO DE INFORMATICA UNIVERSIDAD EAFIT INTRODUCCION Este trabajo será realizado como un resumen de la exposición que presentaremos el día 13 de abril en la clase de análisis de algoritmos. En este trabajo trataremos de presentar los conceptos de DICCIONARIOS y TRIES lo mas claramente posible. DICCIONARIOS A menudo cuando diseñamos una estructura para la implementación de un algoritmo, no son necesarias operaciones poderosas y a su vez complicadas como la unión e intersección. Por lo general lo único que necesitamos es mantener un conjunto de objetos <<Actuales>>, para lo cual necesitamos operaciones como inserciones y supresiones periódicas en el conjunto. Con cierta frecuencia también necesitamos operaciones como saber si un elemento particular esta en el conjunto. A este tipo estructura la hemos llamado diccionario. Y definimos unas operaciones INSERTAR, SUPRIME y MIEMBRO se incluirá también ANULA para inicializar un diccionario. Tipos de implementaciones de un diccionario: • Un diccionario puede implementarse mediante una lista enlazada. • Otra forma es mediante un vector. 3. Y una posible tercer forma seria implementarlo como un arreglo de longitud fija con un apuntador a la ultima entrada del arreglo en uso. Esta solución es factible si se puede suponer que los conjuntos nunca serán mas grandes que la longitud del arreglo. Tiene la ventaja de la sencillez de la representación con listas enlazadas, mientras sus desventajas son: 1) los conjuntos no pueden crecer arbitrariamente, 2) la supresión es mas lenta, 3) el tamaño no se utiliza de forma eficiente si los conjuntos son de tamaño variable. TRIES Es una estructura para representar conjuntos de cadenas de caracteres. El mismo método funciona para la representación de tipos de datos que son cadenas de objetos de cualquier tipo, como las cadenas de enteros. Ejemplo: En este trie, cada camino de la raíz a una hoja corresponde a una palabra del conjunto representado. De esta forma los nodos del trie corresponden a los prefijos de las palabras del conjunto. Para evitar confusión entre 1 palabras como ello y ellos, se añade un símbolo especial ($) al final de todas las palabras. Dicho trie representa el conjunto de las palabras {THE, THEN, THIN, THIS, TIN, SIN, SING}. Observaciones: • Cada nodo tiene hasta 27 hijos, uno para cada letra y $. • La mayor parte de los nodos tiene mucho menos de 27 hijos. • Una hoja que sigue a una arista etiquetada con $ no puede tener hijos e incluso podría no existir. NODOS DE UN TRIE COMO TDA: Un nodo de trie puede considerarse como una correspondencia cuyo dominio es {A, B, ....., Z, $} (o cualquier alfabeto que se escoja) y cuyo conjunto de valores es de tipo <<apuntador a nodo de trie>>. Más aún, el trie puede identificarse con su propia raíz, por lo que los TDA TRIE y NODO_TRIE tienen el mismo tipo de datos , aunque sus operaciones son un poco diferentes. En un NODO_TRIE se necesitan las siguientes Operaciones: • ASIGNA (nodo, c, p) que asigna el valor p (un apuntador a un nodo) al carácter c de nodo. • VALOR_DE (nodo, c) que produce el valor asociado con el carácter c de nodo. • TOMA_NUEVO (nodo, c) para hacer que el valor de nodo para el carácter c apunte a un nodo nuevo. BIBLIOGRAFIA • Estructura de datos y algoritmos, de Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman, Editorial Addison−Wesley Iberoamericana, Pg 118−122, 165−171. • Datos encontrados en Internet. $ $ N N $ E $ $ S I $ 2 N $ G N I I S H T • 3