Trie树
时间:2022-05-08
本文章向大家介绍Trie树,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这周将Trie树看了一下下面进行总结
概念:Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
在这个Trie结构中,保存了A、to、tea、ted、ten、i、in、inn这8个字符串(有数字的代表单词)
个人理解:Trie树就是将每个单词用树形进行存储,当有几个单词有一样的前缀的时候,可有几天支是相同的
zoj 2876 水题Trie树
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define MAX 26//这是代表26个字母,如果包含数字需要重新定义
struct Trie
{
Trie *next[MAX];
int v;//v可以表示一个字典树到此有多少相同前缀的数目,这里根据需要应当学会自由变化。
};
Trie *root;
void creatTrie(char *str)//创建结点,并且插入单词
{
int len=strlen(str);
Trie *p=root,*q;
for (int i=0;i<len;i++)
{
int id=str[i]-'0';
if(p->next[id]==NULL)//如果该字母的下一个点为空,则可以插入新
{
q=(Trie *)malloc(sizeof(Trie));
q->v=1;
for (int j=0;j<MAX;j++)
q->next[j]=NULL;
p->next[id]=q;
p=p->next[id];
}
else//若该结点的下一个字母已经在下一个结点中了
{
p->next[id]->v++;//跳过下一个到下下个
p=p->next[id];
}
}
p->v=-1;//该单词插入完毕,封结点
}
int findTrie(char *str)
{
int len=strlen(str);
Trie *p=root;
for (int i=0;i<len;i++)
{
int id=str[i]-'0';
p=p->next[id];
if(p==NULL) return 0;//若为空集,表示不存以此为前缀的串
if(p->v==-1) return -1;////字符集中已有串是此串的前缀
}
return -1;////此串是字符集中某串的前缀
}
//比如911为窜已存储,输入9133判断911是不是他的前窜
//当911到达第二个1的时候,p->next[id](2)=NULL
int dealTrie(Trie *T)//删除树
{
int i;
if(T==NULL) return 0;
for (i=0;i<MAX;i++)
{
if(T->next[i]!=NULL) dealTrie(T->next[i]);
}
free(T);
return 0;
}
int main()
{
int T;
char str[100];
scanf("%d",&T);
while(T--)
{
int n,i;
int flag=0;
root=(Trie *)malloc(sizeof(Trie));//刚开始需要建立结点
for (i=0;i<MAX;i++)
root->next[i]=NULL;
scanf("%d",&n);
scanf("%s",str);
creatTrie(str);
for (i=1;i<n;i++)
{
scanf("%s",str);
if(flag) continue;
if(findTrie(str)==-1) flag=1;
else creatTrie(str);
}
if(flag) printf("NOn");
else printf("YESn");
dealTrie(root);
}
}
模版网站:http://zh.wikipedia.org/wiki/Trie
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法