前缀树Trie

本文介绍了一种用于减少查询时间和无谓字符串比较的数据结构——前缀树。通过存储公共前缀,前缀树能有效提高搜索引擎系统的文本词频统计效率。文中详细解释了前缀树的工作原理,并通过实例对比了其与传统字符串比较方式的效率提升。

       利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。经常被搜索引擎系统应用于文本词频统计。从根节点出发,途径的结点直到叶子结点,都可以构成单词。当然,有的可能在途中就可以构成单词,所以我们可以扩展,增加额外的信息,记录当前位置是否能够构成单词。

       为什么说它可以减少无谓字符串的比较,通过下面的代码我们可以看到,对于每个字符,是采取随机存取的方式来判断它是否有子结点的。如果有,我们顺着这条路径下去,每次比较的都是两个单词的前缀。如果相同则继续下去,如果不同则“另辟蹊径”。可以发现我们每次的操作都是“有意义”的。那什么是无意义的呢?举例说明,如果我们有两个单词"ask", "aswl"中寻找"ash",那么需要分别对ask和aswl比较,那么对于‘a’和‘s’都是比较了两次的。而在前缀树中,我们只需要比较一次。所以提高了效率。

class TrieNode{
    TrieNode *child[26];
public:
    int count;
    TrieNode(){
        for(int i = 0; i < 26; i++) child[i] = NULL;
        count = 0;
    }

    TrieNode* get(char ch){
        if(child[ch - 'a'] == NULL){
            child[ch - 'a'] = new TrieNode();
            count++;
        }
        return child[ch - 'a'];
    }
};

//如果count == 0,说明是叶结点

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值