博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈 trie树 及其实现
阅读量:4307 次
发布时间:2019-06-06

本文共 1735 字,大约阅读时间需要 5 分钟。

定义又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,

如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。

核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

三个基本性质:

1. 根结点不包含字符,除根结点外每一个结点都只包含一个字符。

2. 从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串。

3. 每个结点的所有子结点包含的字符都不相同。

优点:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。

缺点:如果存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存。

典型应用:统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计

至于Trie树的实现,可以用数组,静态分配空间,也可以用指针动态分配

Trie树的操作

在Trie树中主要有3个操作,插入、查找和删。一般情况下Trie树中很少存在删除单独某个结点的情况,因此只考虑删除整棵树。

假设存在字符串str(都为小写字母),Trie树的根结点为root。i=0,p=root。

typedef struct stu{    int n,flag;         //n记录前缀及单词的个数,flag标记单词是否存在    struct stu *next[26];          //子节点}node;
View Code
node* creat_node(){    node *p=(node *)malloc(sizeof(node));    p->n=p->flag=0;    memset(p->next,0,sizeof(p->next));    return p;}
建立新节点并初始化

1、插入

  1)取str[i],判断p->next[str[i]-'a']是否为空,若为空,则建立结点temp,并将p->next[str[i]-'a']指向temp,然后p指向temp;

   若不为空,则p=p->next[str[i]-'a'];

  2)i++,继续取str[i],循环1)中的操作,直到遇到结束符'\0',此时将当前结点p中的 flag 置为true。

void trie_insert(node *p,char *s){    int i;    while(*s!='\0'){        i=*s-'a';        if(p->next[i]==0)            p->next[i]=creat_node();        p=p->next[i];        s++;        p->n++;    }    p->flag=1;}
插入字符串

2、查找

  1)取str[i],判断判断p->next[str[i]-'a']是否为空,若为空,则返回false;若不为空,则p=p->next[str[i]-'a'],继续取字符。

  2)重复1)中的操作直到遇到结束符'\0',若当前结点p不为空并且 flag 为true,则返回true,否则返回false。

int trie_search(node *p,char *s){    int i;    while(*s!='\0'){        i=*s-'a';        p=p->next[i];        if(p==0)            return 0;        s++;    }    return p->n;}
查找字符串,并返回其个数

3、删除

  删除可以以递归的形式进行删除。

void trie_del(node *root){    int i;    for(i=0;i
next[i]!=NULL) trie_del(root->next[i]); free(root);}
递归删除整棵树

 

 

转载于:https://www.cnblogs.com/happy-lcj/p/3890417.html

你可能感兴趣的文章
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>