TriedTree----字典树

转载 2015年07月08日 19:46:24

科普一下字典树(前缀树)= =


LeetCode211题
Add and Search Word - Data structure design

Tried树出现的频率太大,在这里暂时先记录一个Tried树的基本操作,

字典树,顾名思义,就是建一本树形字典,使得下次查字典中的单词的速度大增。字典树又叫Tried Tree,或者前缀树。

字典树有几个特点:

1.利用串的公共前缀,节约内存;

2.根结点不包含任何字母;

3.其余结点仅包含一个字母;

先给出一个字典树的图片(网上大多是这张):


字典树是一棵26叉树,需要存储的空间是26^n这个数量级的,有点不可思议,真是万幸的是并不需要这么多组合。而且字典树的初衷就是用空间换时间。

字典树的主要操作有插入,查询,删除(较少使用)。插入就是利用字典中的某一个单词,在一条分支上建立一条链表,如果之前已经存在有,则不需要再建重复的结点。代码比较容易看明白:

#include<iostream>
#include<string>
using namespace std;

struct node
{
	bool isWord;
	node* next[26];
	node():isWord(false)
	{
		int i=0;
		for(;i<26;++i)
			next[i]=NULL;
	}
};
node* Insert(string str,node* root)
{
	if(!root) //if(!root)=if(root==NULL)
	{
		root=new node;
	}
	node* cur=root;
	int i=0;
	for(;i<str.length();++i)
	{
		int num=str[i]-'a';
		if( !cur->next[num] )
		{
			cur->next[num]=new node;
		}
		cur = cur->next[num];
	}
	cur->isWord=true;
	return root;
}
bool Search(string str,node* root)
{
	node* cur=root;
	int i=0;
	for(;i<str.length();++i)
	{
		int num=str[i]-'a';
		if( !cur->next[num] )
			return false;
		cur=cur->next[num];
	}
	return cur->isWord;
}
int main()
{
	string str[]={"hello","world","like","lin","raise","good","luck"},str1;
	int n=sizeof(str)/sizeof(str[0]),i=0;
	node* root=NULL;
	for(;i<n;++i)
		root=Insert(str[i],root);
	while(cin>>str1)
		cout<<Search(str1,root);

相关文章推荐

字典树(Tried Tree)(待续)

最近搞大数据的题目,Tried树出现的频率太大,在这里暂时先记录一个Tried树的基本操作, 日后再进行扩展(最近有点忙)。上正题。 字典树,顾名思义,就是建一本树形字典,使得下次查字典中的单词的...

字典树 C 代码案例

  • 2017-08-22 15:51
  • 204KB
  • 下载

字典树-------(算法)

  • 2010-06-03 22:56
  • 59KB
  • 下载

LA3942 Remember the Word(字典树+记忆化搜索)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22109 题意:给出一个由S个不同单词组成的字典和一个长字符串。把这个...

常用数据结构字典树算法

  • 2008-10-15 14:48
  • 181KB
  • 下载

hdu1251统计难题+字典树

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自...

字典树和KMP

  • 2015-03-17 21:19
  • 860KB
  • 下载

字典树知识

  • 2012-10-15 23:19
  • 42KB
  • 下载

字典树

转载自http://www.wutianqi.com/?p=1359 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)