您的位置:首页 > 其它

Trie—单词查找树 l 简介

2016-05-23 01:23 393 查看
Trie—单词查找树

l 简介

Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。





含有单词“tea”“tree”“A”“ZSU”的一棵Trie。

l 性质

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

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

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

l 优点

n 查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间;而BST最坏情况下需要O(m log n)的时间。

n 当存储大量字符串时,Trie耗费的空间较少。因为键值并非显式存储的,而是与其他键值共享子串。

n Trie适用于“最长前缀匹配”。

l 操作

n 初始化或清空

遍历Trie,删除所有节点,只保留根节点。

n 插入字符串

1. 设置当前节点为根节点,设置当前字符为插入字符串中的首个字符;

2. 在当前节点的子节点上搜索当前字符,若存在,则将当前节点设为值为当前字符的子节点;否则新建一个值为当前字符的子节点,并将当前结点设置为新创建的节点。.

3. 将当前字符设置为串中的下个字符,若当前字符为0,则结束;否则转2.





n 查找字符串

搜索过程与插入操作类似,当字符找不到匹配时返回假;若全部字符都存在匹配,判断最终停留的节点是否为树叶,若是,则返回真,否则返回假。









n 删除字符串

首先查找该字符串,边查询边将经过的节点压栈,若找不到,则返回假;否则依次判断栈顶节点是否为树叶,若是则删除该节点,否则返回真。





l 实现

对于字符表大小为S的字符串集,需建立一个S叉树来代表这些字符串的集合。



l [b]代码

[/b]

参考资料




/** 版权所有 (C) 2009 喻扬 中山大学


/* 本程序只作学习用途,未经许可,不得用于任何商业目的。


*/


#include <string.h>


/* trie的节点类型 */


template <int Size> //Size为字符表的大小


struct trie_node

;




/* trie */


template <int Size, typename Index> //Size为字符表的大小,Index为字符表的哈希函数


class trie

;



l

英文维基 http://en.wikipedia.org/wiki/Trie

中文维基 http://zh.wikipedia.org/w/index.php?title=Trie&variant=zh-cn

文章来源:http://www.cppblog.com/yuyang7/archive/2009/03/27/78083.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: