Ho difficoltà a capire il concetto di un trie. Dalla voce di Wikipedia "trie" Ho questa immagine: Come trovare la parola più lunga in un trie?
Se vedo correttamente, tutti i nodi foglia in un trie avrà l'intera parola precisato e tutti i nodi genitore contenere i caratteri che precedono la foglia finale nodo. Quindi, se ho una classe denominata DigitalTreeNode definito da
public class DigitalTreeNode {
public boolean isAWord;
public String wordToHere; (compiles all the characters in a word together)
public Map<String, DTN> children;
}
Se avessi voluto implementare un metodo che restituisce la parola più lunga nel trie sarebbe semplicemente comportare trovare la parola più lunga in ciascun nodo foglia? Come potrei implementare un metodo come:
public static String longestWord (DigitalTreeNode d);
Sto indovinando si tratta di creare una variabile stringa più lunga, in modo ricorsivo passando per ogni nodo e controllare se si tratta di una parola, se si tratta di una parola e la sua lunghezza è maggiore della variabile più lunga quindi più lunga = newWordLength. Ma non sono sicuro di come si adattino i bambini della mappa. Come troverei la parola più lunga in qualsiasi trie usando il metodo sopra?
Quali complessità sono tu cerchi? Un [BFS] (http://en.wikipedia.org/wiki/Breadth-first_search) sulla struttura può facilmente trovarlo in 'O (| S | * n)', dove | S | è la lunghezza della corda media. Non penso che tu possa farlo meglio con il trie standard, ma se puoi manipolare il DS, si potrebbe fare meglio suppongo. – amit
Guardando i caratteri di ciascuna stringa e presumendo che siano | S | personaggi lunghi, non penso che potrei fare molto meglio di O (| S | * n) complessità. – user1766888