字典树-模板

//字典树-模板
#include<iostream>
#include<algorithm>
#include<string>
#include<fstream>
#include<vector>
using namespace std;

#define N 26
#define Offset 'a'

typedef struct TrieNode
{
	bool isword;
	TrieNode *next[N];
	TrieNode(){
		this->isword = false;
		for (int i = 0; i < N; i++) this->next[i] = NULL;
	}
}*Trie;

Trie tree = NULL;

void  InsertElement(const string& str){
	Trie root = tree;
	int i = 0;
	int ch;
	TrieNode* nextNode;
	while (i < str.size()){
		ch = str[i] - Offset;
		nextNode = root->next[ch];
		if (nextNode == NULL){
			nextNode = root->next[ch] = new TrieNode;
		}
		root = nextNode;
		i++;
	}
	root->isword = true;
}
时间: 2024-10-25 06:37:11

字典树-模板的相关文章

字典树概述

字典树简介 字典树(Trie Tree),又称单词查找树,是键树的一种,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 字典树有3个基本性质: 1.根节点不包含字符,其余的每个节点都包含一个字符: 2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串: 3.每个节点的所有子节点包含的字符都不相同. 字典树的结构一般如下图所示: 以字符串为例,我们可以将其存储结构写成如下形式: #define MAX 26 //字符集的大

算法题:HDU 2846 Repository(字典树,计数)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=2846 题目: Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1657    Accepted Submission (s): 605 Problem Description When you go shopping,

算法题:HDU 1251 统计难题(字典树,统计前缀个数)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题目 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组 成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的 前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师 交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提

算法题:HDU 1247 Hat’s Words(字典树)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1247 题目大意: 按照字典序给出多个单词,  可以发现里面有些单词是由字典中其它的两个单词组成的.按顺 序输出所有符合这个条件的单词. 分析与总结: 用字典树存下所有的单词,然后对所有单词一一枚举, 对每个单词, 又进行"拆分", 拆分可能有多种情况,所以枚举单词拆分的中点,在字典序中查找拆分后的两部分是否存在,存在即输 出. 代码: #include<iostream> #in

字典树+KMP+AC自动机

                                                 <<字典树模板>> 1:字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种.用于统计,排序和保存大量的字符串(也可以保存其他的).优点就是利用公共的前缀来节约存储空间.在这举个简单的例子:比如说我们想储存3个单词,sky.skyline.skymoon.如果只是单纯的按照以前的字符数组存储的思路来存储的话,那么我们需要定义三个字符串数组.但是如果我们用字典树的话,只需

hdu1251 统计难题 【字典树】

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 19292    Accepted Submission(s): 8518 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

字典树(Trie Tree)

基本概念和性质 在计算机科学中,trie,又称前缀树或字典树或单词搜索树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直 接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串.一般情况下,不是 所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值. 本文地址:http://www.cnblogs.com/archimedes/p/trie-tree.html,转载请注明

字典树的基本知识及使用C语言的相关实现_C 语言

概念      如果我们有and,as,at,cn,com这些关键词,那么trie树(字典树)是这样的:      从上面的图中,我们或多或少的可以发现一些好玩的特性.       第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符.       第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串.       第三:每个单词的公共前缀作为一个字符节点保存.   使用范围      既然学Trie树,我们肯定要知道这玩意是用来干嘛的.      第一:词频统计

HDU 4099 字典树+高精度

题意:给出某项斐波那契数的前几位,让输出最小的一项前缀为这个串的项数. 先高精度算出前100000项斐波那契的前50位.并把前40位存进字典树预处理一下.字典树节点值存为第几项.然后输入字符串直接查找. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 50 int fib[3][N+1]; cla