摘要:
#include #include #define M 26#define WordSize 32#define WordCount 50000struct node{ int end; node *child[M]; node() { end = 0; memset(child,NULL,sizeof(child)); }};char map[WordCount][WordSize];void insert(node *root, char *str){ node *p = root; int len = strlen(s... 阅读全文
posted @ 2013-07-22 22:06
lk1993
阅读(212)
评论(0)
推荐(0)
摘要:
#include #include #define M 26struct node{ int count; node *child[M]; node() { count = 0; memset(child,NULL,sizeof(child)); }};void clear(node *root){ for(int i=0; ichild[i] != NULL) clear(root->child[i]); } delete root;}void insert(node *root, char *... 阅读全文
posted @ 2013-07-22 21:11
lk1993
阅读(210)
评论(0)
推荐(0)
摘要:
解题思路:这一题要求我们找到输入的词是字典中多少个词的子串,而不仅仅是其前缀,因此建树的时候需要将词典中词分解成不同前缀加入到树中,即是说将形如abc的词拆成abc,bc,c,三种形式,这样就相当于找输入的词是词典中多少词的前缀,需要注意的是,对于同一个词分解出的多个前缀,如果他们之间有相同的话,这种前缀,只算作一种,即是说形如abca之类的词,会分解出abca,a两种前缀,但因为是同一个词分解出来的,所以算作一种。判断是否是同一个词分解出来的需要给每个输入的词及其分解出的前缀加以相同的id进行编号。#include #include #define M 26struct node{ i... 阅读全文
posted @ 2013-07-22 20:35
lk1993
阅读(331)
评论(0)
推荐(0)
摘要:
Trie树也叫字典树,是一种用于快速检索的多叉树结构。如英文字母的字典树是一个26叉树。数字的字典树是一个10叉树。Trie树把要查找的关键词看作一个字符序列,并根据构成关键词字符的先后顺序构造用于检索的树结构;一棵m度的Trie树或者为空,或者由m棵m度的Trie树构成。特别的:和二叉查找树不同,在Trie树中,每个结点上并非存储一个元素。在Trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数。特点:①利用串的公共前缀->节约内存。②根结点(root)不包含任何字母。③其余结点仅包含一个字母(非元素)。④每个结点的子结点包含字母不同。查找过程:①在Trie 阅读全文
posted @ 2013-07-22 19:23
lk1993
阅读(237)
评论(0)
推荐(0)
摘要:
/*注意: 911911123这组数据可以得到正确的答案 911123 911对于这组数据就判断失误了用一个标记变量flag来标记插入过程中是否有重新创建节点*/#include #include #include #define M 10struct node{ int end; node *child[M]; node() { end = 0; memset(child,NULL,sizeof(child)); }};void clear(node *root){ for(int i=0;ichild[i] != NULL) ... 阅读全文
posted @ 2013-07-22 19:17
lk1993
阅读(156)
评论(0)
推荐(0)