Tôi muốn in hoặc truy xuất tất cả các từ được lưu trữ trong Cấu trúc dữ liệu Trie. Điều này là do tôi muốn tính khoảng cách Chỉnh sửa giữa từ sai chính tả và một từ trong Từ điển. Vì vậy, tôi đã nghĩ đến việc lấy từng từ từ Trie và tính khoảng cách Chỉnh sửa. Nhưng tôi không thể truy xuất. Tôi muốn một số đoạn mã cho việc này. Đây là cách tôi đã triển khai Trie bằng cách sử dụng HashMap
trong JavaLàm thế nào để in tất cả các từ được lưu trữ trong một Tree, trong đó trie đã được thực hiện bằng cách sử dụng Hashmap trong Java?
Bây giờ, hãy cho tôi biết cách viết mã để in tất cả các từ được lưu trữ trong Trie. Bất kỳ sự giúp đỡ được rất nhiều đánh giá cao
TrieNode.java
package triehash;
import java.io.Serializable;
import java.util.HashMap;
public class TrieNode implements Serializable {
HashMap<Character, HashMap> root;
public TrieNode() {
root = new HashMap<Character, HashMap>();
}
}
TrieDict.java
package triehash;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;;
import java.io.Serializable;
import java.util.HashMap;
import java.io.Serializable;
public class TrieDict {
public TrieNode createTree()
{
TrieNode t = new TrieNode();
return t;
}
public void add(String s, TrieNode root_node) {
HashMap<Character, HashMap> curr_node = root_node.root;
s = s.toLowerCase();
for (int i = 0, n = s.length(); i < n; i++) {
Character c = s.charAt(i);
if (curr_node.containsKey(c))
curr_node = curr_node.get(c);
else {
curr_node.put(c, new HashMap<Character, HashMap>());
curr_node = curr_node.get(c);
}
}
curr_node.put('\0', new HashMap<Character, HashMap>(0)); // term
}
public void serializeDict(TrieNode root_node)
{
try{
FileOutputStream fout = new FileOutputStream("/home/priya/NetBeansProjects/TrieHash/dict.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(root_node);
oos.close();
System.out.println("Done");
}catch(Exception ex){
ex.printStackTrace();
}
}
public void addAll(String[] sa,TrieNode root_node) {
for (String s: sa)
add(s,root_node);
}
public static void main(String[] args)
{
TrieDict td = new TrieDict();
TrieNode tree = td.createTree();
String[] words = {"an", "ant", "all", "allot", "alloy", "aloe", "are", "ate", "be"};
for (int i = 0; i < words.length; i++)
td.add(words[i],tree);
td.serializeDict(tree); /* seriliaze dict*/
}
}
@sigpwned .. Cảm ơn sự giúp đỡ của bạn. Tôi đang phải đối mặt với một vấn đề khác. Mã bên dưới không hoạt động Chuỗi word1 = "ant" Đặt Từ = ts.computeWords (tree.root); if (Words.contains (word1)) System.out.println ("Word exist"); –
user2281107
Xin chào @ user2281107. Điều đó nghe có vẻ giống như một câu hỏi riêng biệt, vì vậy bạn nên hỏi nó như một câu hỏi cấp cao khác. – sigpwned