Modificar la implementación de árbol rojo-negro de la clase RedBlackTree del fichero RedBlackTree.java. Para poder compilar dicha clase, se necesitan también los ficheros: LinkedList.java, ListNode.java, SearchTree.java, Rotations.java, BinaryNode.java, ItemNotFound.java y DuplicateItem.java.
La principal característica de un Árbol Rojo-Negro es su potencia a la hora de realizar búsquedas basadas en el campo clave del árbol. Su estructura y organización permite la localización de cualquier nodo en el árbol con un coste O(log(n)), siendo n el número de nodos (claves diferentes) del árbol.
Utilizaremos la eficiencia de los Árboles Rojo-Negro para la creación de un motor de búsqueda web que sea capaz de indexar todas las palabras contenidas en las páginas de un dominio web. El motor realizará una carga de todas las páginas del dominio guardando en el árbol las palabras que encuentre. Cada palabra encontrada, que será el campo clave de un nodo del árbol, tendrá como dato asociado una lista con las direcciones de todas las páginas en las que ha sido encontrada. De esta manera se podrá consultar posteriormente en que páginas se encuentran una palabra determinada.
Además del árbol, utilizaremos una lista auxiliar donde se almacenarán todas las páginas que se van a indexar. En la lista se agregaran aquellos enlaces a nuevas páginas que se van encontrando durante la indexación de las páginas. La carga del árbol finalizará cuando se alcance el final de esta lista auxiliar.
Para eliminar repeticiones en las listas de páginas de cada nodo (en el caso de que una palabra se encuentre más de una vez en una misma página) y, sobre todo, para evitar bucles infinitos en la indexación que se podrían producir si se permitieran duplicidades en la lista auxiliar de páginas a indexar (se darían en el caso de que una página tuviera un vínculo a una segunda y ésta otra a su vez un vínculo a la primera), se debe modificar la clase LinkedList.class para que únicamente se inserte un valor en la lista en el caso de que dicho valor NO se encuentre previamente en la lista.
La estructura de la clase GUVle.java debe ser la siguiente:
Indicar el path completo de la página inicial del portal y almacenarla en la lista de páginas a indexar, que estará vacía.
Consultar la dirección de la siguiente página web de la lista de páginas a indexar, abrir la url correspondiente y cargar cada una de las palabras en el árbol según el siguiente criterio:
Si la palabra no se encontraba en el árbol generar un nuevo nodo en el lugar apropiado del árbol y agregar a la lista de páginas del nodo la página actual
Si la palabra se encontraba en el árbol sólo hay que agregar a la lista de páginas del nodo la página actual
Analizar la palabra para ver si contiene la referencia . En caso afirmativo se trata de un enlace a una nueva página, por lo que ésta debe agregarse a la lista de páginas a indexar.
Repetir el paso 2 mientras no se alcance el final de la lista de páginas a indexar.
Permitir consultar el árbol con una palabra para conocer las páginas donde ésta se encuentra.
|
Note
|
Esta práctica dura dos sesiones y debe entregarse a través del aula virtual los ficheros ArbolRojoNegro.java, LinkedList.java y GUVle.java antes del comienzo de la práctica 4 |