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);

DPDK-LPM LIBRARY 最长前缀匹配算法

0x01 缘由      最近,在学习路由相关协议,前期接触dpdk,我想在大数据中心的环境、虚拟化技术等场景下,数据转发服务,如何找到目标,这个技术必定为用到路由技术。 0x02 介绍    ...
  • pangyemeng
  • pangyemeng
  • 2017年08月23日 12:10
  • 786

Trie树详解及其应用

一、知识简介         最近在看字符串算法了,其中字典树、AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用。       字典树(Trie)可以保存一些字符串->值的对应...
  • Hackbuteer1
  • Hackbuteer1
  • 2012年09月10日 16:49
  • 56295

Tried树(统计单词)

Tried树
  • Zhangjay
  • Zhangjay
  • 2011年04月21日 17:00
  • 2497

TriedTree----字典树

科普一下字典树(前缀树)= = LeetCode211题 Add and Search Word - Data structure design Tr...
  • a2796749
  • a2796749
  • 2015年07月08日 19:46
  • 543

Tried树 (字典查找树)的创建

数的创建 //字典查找树的实现 #include using namespace std; struct Tried { int count;//用来标记该节点是个可以形成一个单词,如果c...
  • asd199086
  • asd199086
  • 2016年07月14日 22:20
  • 160

字典树数组实现

字典树是一种很实用也相对好理解的数据
  • u013588639
  • u013588639
  • 2014年08月06日 21:04
  • 1571

字典树 c++ 实现

字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。 典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串), 所以经常被搜索引擎系统用于文本词频统计。它...
  • rongdongzhu1
  • rongdongzhu1
  • 2015年09月13日 16:16
  • 1053

Tried树模板

模板大致如下:具体用法可参见上篇Poj2503第三种解法struct TriedNode { int No; TriedNode *branch[BRANCH_MAX]; };TriedN...
  • dreamvyps
  • dreamvyps
  • 2011年04月27日 12:08
  • 707

NYOJ 221 Tree (二叉树遍历)

题目221 题目信息 运行结果 本题排行 讨论区 Tree 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述Little Valentine li...
  • a2459956664
  • a2459956664
  • 2016年07月04日 10:27
  • 566

01字典树 小结

为了做13年南京网络赛的一道题 学了这个01字典树 看了别人的模板 之后切了几道水题 现在总结一下01字典树的实现可以看成是把一个数的二进制字符化后插入到一颗一般的字典树中比如在01字典树种插入...
  • SolarDomo
  • SolarDomo
  • 2016年08月10日 10:15
  • 1293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TriedTree----字典树
举报原因:
原因补充:

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