Trie树------一种NB的数据结构
来源:互联网 发布:做flash的软件 编辑:程序博客网 时间:2024/06/03 22:52
最近在做一些题的时候更加理解到为什么有一句话叫做程序=算法+数据结构,可能之前的一些题我用最基本的数据类型加上一些“意想不到”的算法就可以解决,但是往往一些问题,佐以精妙的数据结构能让人事半功倍。
Trie树就是这样的一种数据结构,先来一段来自百度的定义性描述,它又称单词查找树,字典树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。Trie树再解决mou一类问题时真的是简单又好用。关于它的简单操作也不过是初始化,插入,查询,删除,下面依次给出一种简单的实现,在实际遇到的问题中可能需要增加某种字段或者进行别的怎样的扩展,这都是依题目而变的。
我们假设在这里我们面向的是由26个小写字母组成的字符串。
//因为我们考虑的是由26个小写字母组成的字符串//具体问题还可以再变化,而这种变化往往是最难的#define MAX 26using namespace std;//定义Trie树的节点typedef struct Trie_Node{ struct Trie_Node *next[MAX];}Trie;Trie *r;//创造的Trie树的根节点的指针void init(){//以r为根进行初始化 r = (Trie *)malloc(sizeof(Trie)); for(int i = 0;i < MAX;i++){ r->next[i] = NULL; }}void insert(Trie *root,char *word){ Trie *p = root; while(*word != '\0'){ if(p->next[*word - 'a'] == NULL){ Trie *temp = (Trie *)malloc(sizeof(Trie)); for(int i = 0;i < MAX;i++){ temp->next[i] = NULL; } p->next[*word - 'a'] = temp; } p = p->next[*word - 'a']; word++; }}bool search(Trie *root,char *word){ Trie *p = root; for(int i = 0;word[i]!='\0';i++){ if(p == NULL||p->next[word[i]-'a'] == NULL){ return false; } p = p->next[word[i]-'a']; } return true;}void del(Trie *root){//因为我们用到动态内存分配,不用了就还回去 for(int i = 0;i < MAX;i++){ if(root->next[i] != NULL){ del(root->next[i]); } } free(root);}
0 0
- Trie树------一种NB的数据结构
- Trie实践:一种比哈希表更快的数据结构
- Trie实践:一种比哈希表还快的数据结构
- Trie实践:一种比哈希表更快的数据结构
- Trie树的一种实现
- Trie树数据结构的实现
- [搜索]Trie树的一种实现
- 一种trie树 的实现方式
- java实现的Trie树数据结构
- Trie树和其它数据结构的比较
- 数据结构-----基于双数组的Trie树
- 数据结构:TRIE树
- 数据结构:TRIE树
- 数据结构之Trie树
- 数据结构之trie树
- 数据结构之【trie树】
- 数据结构之Trie树
- 数据结构:TRIE树
- 黑马程序员-C语言回顾-运算符
- 设计模式系列(三)装饰者模式(Decorator Pattern)
- 几何-线和角
- 堆以及堆的相关应用
- 分离链接散列表
- Trie树------一种NB的数据结构
- 打僵尸代码
- Object-C,数组NSArray
- LinearLayout 属性详解
- 日经春秋 20151201
- 趣味取小数
- proteus7.8破解版安装tips
- Socket
- [数据结构]二分插入排序