J’essaie de mettre en œuvre une Trie très simple dans Java qui admet 3 opérations. Je voudrais avoir une méthode d’insertion, une méthode (c’est-à-dire un mot déterminé dans la trie) et une méthode de tosting pour renvoyer la trie en forme de chaîne. Je pense que l’insertion fonctionne correctement, mais elle a et que vous soyez difficile. C’est ce que j’ai jusqu’à présent. Trie
la classe Trie.
public class CaseInsensitiveTrie implements SimpleTrie { //root node private TrieNode r; public CaseInsensitiveTrie() { r = new TrieNode(); } public boolean has(String word) throws InvalidArgumentUosException { return r.has(word); } public void insert(String word) throws InvalidArgumentUosException { r.insert(word); } public String toString() { return r.toString(); } public static void main(String args) { CaseInsensitiveTrie t = new CaseInsensitiveTrie(); System.out.println("Testing some strings"); t.insert("TEST"); t.insert("TATTER"); System.out.println(t.has("TEST")); } }
public class TrieNode { //make child nodes private TrieNode c; //flag for end of word private boolean flag = false; public TrieNode() { c = new TrieNode; //1 for each letter in alphabet } protected void insert(String word) { int val = word.charAt(0) - 64; //if the value of the child node at val is null, make a new node //there to represent the letter if (c == null) { c = new TrieNode(); } //if word length > 1, then word is not finished being added. //otherwise, set the flag to true so we know a word ends there. if (word.length() > 1) { c.insert(word.substring(1)); } else { c.flag = true; } } public boolean has(String word) { int val = word.charAt(0) - 64; if (c!=null && word.length()>1) { c.has(word.substring(1)); } else if (c.flag==true && word.length()==1) { return true; } return false; } public String toString() { return ""; } }
Donc, essentiellement, lors de la création d’une trine, un trineode est créé comme une racine de 26 enfants. Lorsque vous essayez d’insérer, il est invoqué à ce nœud racine, qui crée de manière récursive un nouveau nœud dans la position correcte et continue jusqu’à ce que le mot soit terminé. Je pense que cette méthode fonctionne correctement.
Ma fonction est très cassée, car je dois avoir cette déclaration de retour en dehors des parenthèses pour une raison quelconque. Je ne peux pas la contenir dans une clause d’autre ou le compilateur se plaint. En dehors de cela, je pense que la méthode devrait fonctionner avec certains ajustements, mais je ne peux pas le résoudre à cause de ma vie.
Tosting est une bête que j’ai essayé de traiter, mais rien de ce qu’il La lancée fonctionne, alors ce que je pars jusqu’à ce qu’il résout le problème. Si je le travaille, je peux trouver un moyen de le reformater dans une fonction de tosting.
Le but de l’int Val = Word.chard (0) – 64; C’est parce que chaque chaîne admise doit être majuscule (je créerai une fonction de formatage des chaînes pour vous assurer que) de sorte que la valeur INT de la première lettre – 64 est sa position dans la matrice. C’est-à-dire que la fréquence de matrice 0 est une, puis a = 64, A-64 = 0. B = 65, B – 64 = 1, etc.