关于首字散列其余二分字典树的代码实现问题

小白刚刚开始学习hanlp,在看示例代码的时候不太明白,请教大佬们~

首字散列其余二分的字典树,在构建字典树的过程中,将一个词拆分为多个字插入字典


当第一个字来的时候,从代码第64行,进入BinTrie类的addChild,走首字散列的逻辑
从第二个字(非末尾)开始,同样从代码64行,进入Node类的addChild,走二分查找的逻辑

请问这里64行的代码是通过什么区分首字和非首字的,然后判断应该进哪个类的addChild的

图中代码package com.hankcs.hanlp.collection.trie.bintrie BinTrie

BinTrie和Node都继承自BaseNode,我理解的BinTrie表示的是根节点,即书中P51的0号节点,Node表示普通节点

59行branch初始化为this,即BinTrie,64行addChild的参数是Node,成功后将当前branch下移到了刚添加的Node上,则下次循环自然会调Node的addChild

branch下移是关键,遍历chars本就是为了将当前关键词的字符插入到树中,以实现关键字沿路径分布的目的,这是字典树的目标,如果不下移,最终结果就是所有字符都成为了根节点的child,整个关键词就拆散了

3 Likes
    public BinTrie()
    {
        child = new BaseNode[65535 + 1];    // (int)Character.MAX_VALUE
        size = 0;
        status = Status.NOT_WORD_1;
    }

嗯嗯,是这样的,给你点赞。
branch初始化的this是BinTrie,64行addChild走BinTrie的实现。随后,65行getChild,branch就转换为BaseNode类型了。

刚看完这一部分,一起学习啊