字典树学习

来源:互联网 发布:如何领淘宝内部优惠券 编辑:程序博客网 时间:2024/05/20 20:22

字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,

排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。

它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,

查询效率比哈希表高。

它有3个基本性质:

根节点不包含字符,除根节点外每一个节点都只包含一个字符;

从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;

 每个节点的所有子节点包含的字符都不相同。

其基本操作有:查找、插入和删除,当然删除操作比较少见。

搜索字典项目的方法为:

(1) 从根结点开始一次搜索;

(2) 取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索;

(3) 在相应的子树上,取得要查找关键词的第二个字母,并进一步选择对应的子树进行检索。

(4) 迭代过程……

(5) 在某个结点处,关键词的所有字母已被取出,则读取附在该结点上的信息,即完成查找。其他操作类似处理.


字典树模板:


#include <iostream>
#include <cstdio>
using namespace std;
typedef struct N
{
int flag;
struct N *next[26];
}Node;
Node *Create()
{
Node *p = (Node *)malloc(sizeof(Node));
for(int i = 0; i < 26; i++)
p->next[i] = NULL;
p->flag = 0;
return 0;
}
void insert(char s[])
{
int L = strlen(s);
Node *cur = root;
for(int i = 0; i< L; i++)
{
int t = s[i] - 'a';
if(cur -> next[t] == NULL)
cur = cur -> next[t] =Create();
else
cur = cur->next[t];
}
cur->flag = 1;
}
int query(char s[])
{
int L = strlen(s);
Node* cur = root;
for(int i =0; i <= L; i++)
{
int t = s[i] - 'a';
if(cur->next[t] == NULL)
return 0;
else
cur = cur ->next[t];
}
return cur->flag;


}
int main()
{

}




0 0
原创粉丝点击