用Trie树统计词频。

Abstract

介绍Trie树的性质和构造方法。
最终用来统计一片文章各个单词出现的频率。node

最终结果:
最终结果git

Trie

Trie树是一种数据结构,对于词频统计,文本检索很是有效。
Trie树的大小取决与要统计的文本的字母个数。好比只统计26个英文字母的话,单词最大长度为10的话,占用的空间最可能是26^10。但实际上并无这么恐怖。由于没有abc这样的单词。数据结构

在Trie中,将没一个字母做为一个node,其中含有几个信息spa

c#define R 26
typedef struct node
{
    int value;// ASCII码
    int frequecy;//c出现的频率
    struct node* child[R];//有R个孩子,初始为NULL

}Node;

下面用hello这个单词举例子。
第一个节点是h,且h有一个孩子l。日后相似。到了最后的o,此时才是一个真正的单词,因此o的frequecy为1.
图片描述
创建Trie树的时候,每次都是从Root出发,当再次遇到单词hello时,仍是顺着这条路走下来,到o的时候将frequecy=2。
若是碰到的单词是helloworld,则插入后的结果为
图片描述
能够看到,frequency>0的节点,说明从root到这个节点的路径上的全部字母节点构成了一个单词,且单词出现的频率就是frequecy。.net

因此,树的高度与文本中的单词的最大长度有关,但实际上最长的单词也没几个字母……尤为是当不一样的单词具备相同前缀的时候,前缀的路径是共用的。利用这个性质,Trie在前缀搜索上变现也不错。code

当拿到一个文本文档时,咱们能够经过一遍扫描将trie创建,经过遍历trie获得全部词出现的频率。blog

示例代码地址trie图片

相关文章
相关标签/搜索