Trie树的DAT实现

Trie树 DAT实现

1. Android Studio 使用技巧

1.1 Studio在使用中需要使用代码补全,例如:
输入sout ,然后使用Tab键就可以获得如下代码:
System.out.println();
所以如果自定义自己的代码补全模板,这样在输入代码的时候能够增加输入效率。具体方法如下:
File—>Settings—>Editor—>Live Templates (也可以直接在File–>Setting后输入sout进行查找,找到后进行增加)
然后在右侧选择output后可以使用+号来添加。添加完成后,在下面选择define进行定义,选择Java–>statement,然后apply后就可以在代码输入的时候快速补全自定义的代码。

2. 详细分析

主要参考了这位大侠的文章,在这篇文章中引用了这篇文章DAT实现详细介绍了DAT树的历史。

2.1 在使用过程中使用了Android Studio来进行编写。注意需要考虑那个dic文件要放在assets目录中,并且assets目录要和java目录都处在main目录下,如下:

app
|---src
      |---main
            |---assets
            |---java
在这个目录下读写的时候需要使用classLoader,并且assets目录下只能读,不能写入。如下:
 InputStream is2 = this.getClass().getClassLoader().getResourceAsStream("assets/core_0.dic");
                BufferedReader reader = new BufferedReader(new InputStreamReader(is2));
                String line;
                List<String> words = new ArrayList<String>();
                Set<Character> charset = new HashSet<Character>();
                try {
                    while ((line = reader.readLine()) != null) {
                        words.add(line);
                        // 制作一份码表debug
                        for (char c : line.toCharArray()) {
                            charset.add(c);
                        }
                    }
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

2.2 另外需要注意代码中的TestEntry中需要注意SORT的用法。自己定义的词典,如small.dic已经排好序,如果没有排序,需要将SORT置为TRUE,然后对words进行排序后再build,否则会使DAT树产生OUT of Array的告警。

2.3 对这个“茶树,茶叶,走廊”,写入到字典中后,然后进行测试,测试过程中使用log记录跳转过程,整个过程一直在fetch和insert两个函数中递归跳转,fetch是用来获取子节点。insert中使用了while循环来确定begin值,这个begin是用来和字符值相加,并判断check值是否被占用。

outer: while (true) {
....
    for (int i = 1; i < siblings.size(); i++) {
                if (check[begin + siblings.get(i).code] != 0) {
                    continue outer;
                }
            }
....

3. 总结

目前只是对DAT 实现Trie树的记录进行了了解,怎么进一步应用还需要了解。
    原文作者:Trie树
    原文地址: https://blog.csdn.net/xsjyahoo/article/details/52054717
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞