Trie树检索字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct TrieNode_t
{
char data;
short int end_flag;//字符串完全添加标志位
struct TrieNode_t* child_node[];
} TrieNode; TrieNode root = { }; //添加字符串到树中
void InsertString(char a[], int len)
{
int i;
TrieNode *p = &root;
for (i = ; i < len; i++)
{
int index = a[i] - 'a';
if (p->child_node[index] == )
{
TrieNode *p_child = (TrieNode *)malloc(sizeof(struct TrieNode_t));
if (NULL == p_child)
{
printf("malloc fail\n");
return;
}
p_child->data = a[i];
p->child_node[index] = p_child;
}
p = p->child_node[index];
}
p->end_flag = ;
} //查询字符串,时间复杂度为O(len)
int SearchString(TrieNode root, char a[], int len)
{
int i;
TrieNode *p = &root;
for (i = ; i < len; i++)
{
int index = a[i] - 'a';
if (p->child_node[index] == )
{
return -;
}
p = p->child_node[index];
} if (p->end_flag == )
{
return ;
}
else
{
return -;
}
} int main()
{
char a[] = "helloworld";
char b[] = "gelloworld";
char c[] = "helltworld";
char d[] = "helloworlr";
char e[] = "hello";
InsertString(a, );
printf("%d\n", SearchString(root, e, ));
return ;
}
Trie树检索字符串的更多相关文章
- 利用Trie树对字符串集合进行排序并计算特征值
该算法用于将一组乱序的字符串反序列化到一个Trie树中,这个过程即可视为对字符串进行了一次排序. 还可以通过调用 GetFeatureString 将该 Trie 树重新序列化. #include & ...
- poj 2945 trie树统计字符串出现次数
用记录附加信息的val数组记录次数即可. trie的原理:每个可能出现的字目给一个编号c,那么整个树就是一个c叉树 ch[u][c]表示 节点u走c边过去之后的节点 PS:trie树还有种动态写法,使 ...
- 大规模字符串检索-压缩trie树
本文使用压缩trie树实现字符串检索的功能.首先将字符串通过编码转化为二进制串,随后将二进制串插入到trie树中,在插入过程中同时实现压缩的功能. 字符编码采用Huffman,但最终测试发现不采用Hu ...
- 字典树(Trie树)的实现及应用
>>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...
- Trie树的二三事QWQ
写在前面 Trie,又称字典树,是一种用于实现字符串快速检索的多叉树结构.Trie的每个结点都拥有若干字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c这个字符指针,走向该指针指向的 ...
- 查找(二)简单清晰的B树、Trie树具体解释
查找(二) 散列表 散列表是普通数组概念的推广.因为对普通数组能够直接寻址,使得能在O(1)时间内訪问数组中的任何位置.在散列表中,不是直接把keyword作为数组的下标,而是依据keyword计算出 ...
- B树、Trie树详解
查找(二) 散列表 散列表是普通数组概念的推广.由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置.在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 使 ...
- Trie树总结
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
- Trie 树总结
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
随机推荐
- linux 文件操作系统调用
crate:创建文件 open:打开文件 read:读取文件 write:写文件 lseek :设置文件偏移量 access:推断文件 close:关闭文件的读写操作
- leetcode第一刷_Minimum Depth of Binary Tree
非常easy的题目.只是还是认为要说一下. 最小深度.非常快想到bfs,层序遍历嘛.本科的时候实在是没写过多少代码,一開始竟然想不到怎么保存一层的信息.后来想到能够压入一个特殊的对象,每次到达这个对象 ...
- springmvc之@Controller、@RequestMapping等注解解说
首先来看下一段代码: @Controller @RequestMapping("/user") public class UsersController { @RequestMap ...
- URAL 1826. Minefield(数学 递归)
题目链接:http://acm.timus.ru/problem.aspx? space=1&num=1826 1826. Minefield Time limit: 0.5 second M ...
- android 添加新的键值,自定义按键-2【转】
本文转载自:http://blog.csdn.net/mr_raptor/article/details/8053871 在Android中,上层可使用的键值默认情况下是92个,从0-91:一般情况下 ...
- 1-1restful简介及资源介绍
- HTML不熟悉方法总结
1. onblur 属性在元素失去焦点时触发. 2. onfocus 属性在元素获得焦点时触发. 3.addEventlistener 事件监听 4.focus() 方法用于给予该元素焦点.这样用 ...
- 跨域解决方案之JSONP,通过借助调用百度搜索的API了解跨域案例
跨域解决方案之JSONP 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web ...
- logging (日志) 模块
本文源自景女神 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.w ...
- SQLServer 添加序号列
select ROW_NUMBER()OVER(ORDER BY 用来排序的列的列名),XXX,XXX from XXX 按照原始顺序: ROW_NUMBER()OVER(ORDER BY (sele ...