Lets have a look at a sample application in Swing. We load the TRIE data structure using a dictionary word list. And using the application we can perform a search. This application is a very much prototypical just to check the insert() and search() operations.
Input file : words.txt
Sample Application
There are two possible outcomes to our search criteria, one true and another false. The following is the dialog shown when a word "article" is entered.
And when a word something like "dasdsa" is entered the following dialog is shown.
The Java code for the Trie Loader,
package dsa.tries;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TrieLoader {
public static Trie trieDSA;
public static void main(String[] args) {
TrieLoader trieLoader = new TrieLoader();
trieLoader.load();
new TrieTestFrame();
}
public void load(){
trieDSA = new Trie();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("src/properties/words.txt")));
String eachLine = null;
while((eachLine=br.readLine())!=null){
trieDSA.insert(eachLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
The TrieTestFrame,
package dsa.tries;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TrieTestFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel basePanel = new JPanel();
private JTextField textField = new JTextField(20);
private JButton button = new JButton("Check");
public TrieTestFrame(){
designUI();
}
private void designUI(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("TRIE Test");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(TrieLoader.trieDSA.search(textField.getText())){
JOptionPane.showMessageDialog(basePanel, "The word you entered exist!!");
}else{
JOptionPane.showMessageDialog(basePanel, "The word you entered does not exist!!","Error",JOptionPane.ERROR_MESSAGE);
}
}
});
basePanel.add(textField);
basePanel.add(button);
add(basePanel);
this.setSize(400,100);
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setLocation(screenWidth / 2 - 200, screenHeight / 2 - 50);
this.setVisible(true);
}
}
For the Node and Trie class please click here.
Cheers,
Bragaadeesh.



8 comments:
very memory consuming and time to buid trie is very large
@Maulish: I would tend to disagree with you. Memory for a TRIE is not huge as you think it is. In fact, we can optimize this by using external memory and fetch only the ones that we require on a need to know basis. And, regarding the construction of a TRIE, it is still efficient. Its like constructing a binary search tree. Every insert in a BST takes log n times (assuming a balanced tree). Same is the case here. Every word will be in the order of the word's length.
Hope this helped.
i want to print the contents of this trie tree for a string. but cant make it. can u provide code for displaying the contents of trie.
@shoba: Sure I can do that. Is it ok if I do that during this weekend ?
@bragadeesh: its okie. do at ur convenience.
Hey! Thanks for this. However, like shoba said, could you show how to print the contents of the trie. Possibly start from a given node n and print all the words below it?
I am generating a trie tree for a set of keyword sets.as soon as the INPUT string matches the keyword in the tree it should return the index of th e file containing that keyword.
one file may contain many keywords.
so i need to get the file index as soon as string match is found ..is there any method to have an index(FILE INDEX) for the end node(*). if soo can a set of nodes have same index ??
Thank you :)
hi, ur presentation is really very useful for beginners.i have some queries about Radix tree, can u please send me ur email id , thanks - partha. my email id is j.parthasarathy@gmail.com
Post a Comment