字典树(Trie树)用法及例子(一)
2015-05-15 20:53
316 查看
字典树(Trie)概述
字典树,又名Trie树。顾名思义,在字典中很好用。我们在查牛津词典时都是先按第一个字母找到以这个字母为首的单词所在的初始位置,在此位置的基础上,再按照第二个字母继续找。。。插一句,字符串的字典序也是这个意思,先按照第一个字母排序,第一个字母相同的情况下再按照第二个字母排序。
字典树的数据结构图:
注意:节点中的value并不存储字符,节点中的value按需使用。每个节点中的next数组存储26(如果只有小写字母的话)个next节点的地址。
例一
某个字符串在一堆字符串中出现的次数,或者一堆字符串中含有某个前缀的字符串的个数。[code]#include<iostream> #include<string> using namespace std; //表示next数组的长度,表示26个字母。如果字符串中有其他字符的话,应相应调整。 //如果所有的字符串都是手机号的话,那就是10了 const int MAX_NUM = 26; struct trieNode{ int i;//按需使用,本例子中表示从头到本字符组成的前缀出现的次数 struct trieNode *next[MAX_NUM]; }; trieNode* CreateTrieNode(){ trieNode *p = new trieNode; p->i = 1; for(int i = 0; i < MAX_NUM; i++) p->next[i] = NULL; return p; } void InsertTrieTree(trieNode **root, string str){ trieNode *p; if(*root == NULL){ p = CreateTrieNode(); *root = p; } else p = *root; int len = str.length(); int k; for(int i = 0; i < len; i++){ k = str.at(i) - 'a'; if(p->next[k] != NULL) p->next[k]->i += 1; else p->next[k] = CreateTrieNode(); p = p->next[k]; } } int SearchTrieTree(trieNode **root, string str){ trieNode *p; if(*root == NULL) return 0; p = *root; int k, len = str.length(); for(int i = 0; i < len; i++){ k = str.at(i) - 'a'; if(p->next[k] == NULL) return 0; p = p->next[k]; } return p->i; } int main(){ trieNode *root = NULL; InsertTrieTree(&root, "checking"); InsertTrieTree(&root, "check"); InsertTrieTree(&root, "for"); InsertTrieTree(&root, "checking"); InsertTrieTree(&root, "program"); InsertTrieTree(&root, "programmer"); cout << SearchTrieTree(&root, "che") << endl;//输出3 cout << SearchTrieTree(&root, "prog") << endl;//输出2 }
还有一个例子在/article/2077133.html
相关文章推荐
- 字典树(Trie树)用法及例子(二)
- union类型用法例子
- String.format一些用法例子、功能强、希望对您有帮组
- typeid的用法-例子
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- 深入java final关键字 用法注意点和JVM对其进行的优化(例子)
- 在Struts2的官方网站上,有doubleselect的用法示例,但是那个例子比较简单。 <s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruit
- 通过两个例子讲解PIVOT/UNPIVOT的用法_SQL技巧
- C#反射-Assembly.Load、LoadFrom与LoadFile详细例子用法
- Trie树(字典树)的实现
- Trie树(字典树)的介绍及Java实现
- 4 python os模块用法的一个例子
- 我的Fragment用法小例子
- hihoCoder - 1014 : Trie树 - (字典树)
- C# 中out,ref,params 用法例子
- javaEE最简单例子两个属性的用法——action的method和result的name
- HttpClient4.1入门教程-利用官方例子讲解httpClient4.1的用法
- Linux find常见用法例子
- C++ string的用法和例子
- this关键字的用法和例子