字典树

来源:互联网 发布:ssd固态硬盘优化软件 编辑:程序博客网 时间:2024/05/22 10:52

首先引用一下字典树书的基本概念和性质:


又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。


它有3个基本性质:
根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。


字典树的数据结构:

1,字典树为一个多叉树;

2,字典树每个节点的定义:

public class Node {

List<Node> child;     //代表子节点

Object others;  //根据字典树不同的应用来发挥标记辅助作用

}


字典树的应用:

1,应用用字符串的搜索匹配,如统计一个单词是否存在于有字典树组成的字典中;

2,在N多的单词中统计词频,即一边遍历用统计词频的单词集合,一边构建字典树并记录下频率,再完成所有单词的遍历后都频率

3,一个单词是否是另外一个单词的前缀。同上,也属于字典树的构建和查询。


一下举两个面试题:

 英文拼写纠错:
在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包
含了正确英文单词的词典,请你设计一个拼写纠错
的程序。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;

这个属于典型的字典树查询的问题。

4 寻找热门查询:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串
的长度为1-255字节。假设目前有一千万个记录,
这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个
。一个查询串的重复度越高,说明查询它的用户越多,
也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。

这个问题在完成对单词频率的记录后还需要借助相关的排序算法进行排序。


原创粉丝点击