posts - 23,comments - 66,trackbacks - 0
by lostfire

今天本来是要做一个全站程序的替换,想到了前两天看到的SimpleStringSearch,就看了一下,结果全站程序替换没有做成,把这个研究了一下。
我用dox作了一个chm的文档(点击下载),后来发现光看文档是没有用的。因为我不知道其中的数据结构组织,原来也没有做过相关的方面内容。
于是我修改了一下源代码,打印了一下信息,终于搞清楚他的数据组织。

首先看一下类的继承关系,重要的数据结构就是,检索树结构。其中SearchTreeNode是接口,AbstractSearchTreeNode是下边继承的抽象类,具体的实现包括ExactSearchTreeNode,SingleWildcardSearchTreeNode和WildcardSearchTreeNode。
以成员变量形式存储的数据主要存储在AbstractSearchTreeNode,因此我添加的打印代码,也放在了AbstractSearchTreeNode中。
 1public String toString(){
 2        StringBuffer buffer = new StringBuffer();
 3        
 4        buffer.append("Depth:"+depth+"\t");
 5        buffer.append("Children num:"+children.size());
 6        buffer.append("\t"+"Character:"+character+"\n");
 7        depth++;
 8        for(int i=0 ; i<children.size(); i++){
 9            SearchTreeNode stn = children.get(i);
10            buffer.append(stn.toString());
11        }

12        depth--;
13        return buffer.toString();
14    }
depth是一个static的记录层次的int变量。

下面是测试代码:
 1public static void main(String[] args) {                
 2            try{
 3                    StringSearch s = new StringSearch();
 4                    MyHitHandler handler = new MyHitHandler();                  
 5                    s.addSearchTerm("do", handler);                 
 6                    s.addSearchTerm("Java", handler);
 7                    s.addSearchTerm("ava",handler);
 8                    s.addSearchTerm("da",handler);
 9                    System.out.println(s.getRoot().to2String());
10//                    s.getRoot().printString();
11                    s.search("Do, or do not. Except in Java. -- Yoda");
12                    System.out.println("Count is: " + handler.getCount());
13            }

14            catch(IOException ex){
15                    ex.printStackTrace();
16            }

17    }

把这几项弄到StringSearch里边以后,形成了一个如下的二叉树。
simplestringsearch 
这里就可以看得很清楚了。
在根节点下边,没有进行排序,而在底下的每个节点下,都是按照要检索的字符串顺序排列的二叉检索树,因此不是一种标准的二叉检索树,而是字符顺序相关的检索。

posted on 2006-06-04 02:20 rd2pm 阅读(1147) 评论(0)  编辑  收藏 所属分类: other

只有注册用户登录后才能发表评论。


网站导航: