J'ai de la difficulté à comprendre le concept de trie. A partir de l'entrée de wikipedia « de Trie » J'ai cette image: Comment trouver le mot le plus long dans un trie?
Si je vois correctement, tous les nœuds feuilles dans une structure arborescente aura le mot entier énoncé et tous les nœuds parents tenir les personnages qui ont précédé la la feuille finale nœud. Donc, si j'ai une classe appelée DigitalTreeNode définie par
public class DigitalTreeNode {
public boolean isAWord;
public String wordToHere; (compiles all the characters in a word together)
public Map<String, DTN> children;
}
Si je voulais mettre en œuvre une méthode qui renvoie le mot le plus long dans la structure arborescente serait-il simplement impliquer de trouver le mot le plus long à chaque noeud de feuille? Comment puis-je mettre en œuvre une méthode telle que:
public static String longestWord (DigitalTreeNode d);
Je devine que cela implique d'une plus longue variable de chaîne, allant récursive à travers chaque nœud et vérifier si elle est un mot, si elle est un mot et sa longueur est supérieur à la plus longue variable puis plus long = newWordLength. Mais, je ne suis pas sûr de savoir comment les enfants de la carte s'intègre. Comment pourrais-je trouver le mot le plus long dans un trie en utilisant la méthode ci-dessus?
Quelle complexité sont tu recherches? A [BFS] (http://en.wikipedia.org/wiki/Breadth-first_search) sur la structure peut facilement le trouver dans 'O (| S | * n)', où | S | est la longueur moyenne de la chaîne. Je ne pense pas que vous pouvez le faire mieux avec le standard, mais si vous pouvez manipuler la DS, cela pourrait être mieux fait, je suppose. – amit
En regardant chaque caractère de chaîne et en supposant qu'ils sont | S | caractères longs, je ne pense pas que je pourrais faire beaucoup mieux que la complexité O (| S | * n). – user1766888