Árbol general de carácteres en Java

kraneok

De nuevo aquí xd. Estoy haciendo una práctica en la facultad y necesitaría algo de luz implementando un TAD.
El TAD en concreto es un árbol general que debe almacenar consultas que previamente se han insertado en un buscador. De este modo, cuando otra persona insertar en el buscador una cadena, que es un prefijo Ej. coche de se .., debería de sugerir, por ejemplo, coche de segunda mano.
La cuestión de todo esto es que el árbol es de carácteres y no de consultas enteras, tiene lógica de que esto sea así, pues el recorrido y búsqueda en el árbol será muchísimo mas rápido.

El árbol es una estructura de datos definida de forma recursiva y como tal, todas las operaciones que tiene pueden realizarse con este tipo de algoritmos. Pero tenemos un problema. El problema reside en que 1) tanto la interfaz como la implementación del TAD, no puede ser modificada. Por otra parte, el árbol es utilizado a través de otra clase, llamada depósito de consultas. Por lo que la recursión de forma interna en el TAD no es válida. Hay que tener en cuenta que un árbol te permite añadir una raíz y unos hijos.

Tengo una primera aproximación que no funciona del todo y además, el tutor me ha dicho...me ha dicho que es una puta mierda sutilmente jajajajaj. Que mire ejemplos que hay miles. Yo no los encuentro.He de admitir que a mi, el código tampoco me convence nada de nada.

@Override
    public void incFreqQuery(String query) {
        char[] word              = query.toCharArray();
        TreeDynamic<Node> branch = queryList;
        
ListIF< TreeIF<Node> > subBranchs; for ( int i = 0; i < word.length; i++ ) { subBranchs = branch.getChildren(); boolean found = false; TreeIF<Node> node = null; while ( !found && !subBranchs.isEmpty() ) { node = (TreeIF<Node>) subBranchs.getFirst(); if ( node.getRoot().getElement().toString().equalsIgnoreCase( "" + word [i] ) ) { branch = (TreeDynamic<Node>) node; found = true; } else subBranchs = (ListIF<TreeIF<Node>>) subBranchs.getTail(); } if ( ! found ) { TreeDynamic<Node> newNode = new TreeDynamic<>(); newNode.setRoot ( new Node( word[i]) ); branch.addChild (newNode); if ( i == ( word.length - 1 ) ) newNode.addChild( new TreeDynamic<Node> ( new Node(1) )); branch = newNode; } else { if ( i == ( word.length - 1 ) ) { int c = (int) branch.getChildren().getFirst().getRoot().getElement(); branch.getChildren().getFirst().getRoot().setElement( ++c ); } } } }

No pido soluciones. Solo algo de ayuda para ver si consigo ver la luz!
Gracias de antemano.

Gif

Trie

1 respuesta
kraneok

#2 Le voy a echar un ojo. La verdad que ahí entre, pero no leí mucho por ser wikipedia. Pensaba que solo iba a explicar la definición y poco mas. Pero veo que habla de la insercción , etc.

Gracias!

Usuarios habituales

  • kraneok
  • Gif