Using Tries 《字典树》1

使用字典树1

author: luison9999

原文链接

简介

有许多算法和数据结构可以用来在一个文本中索引和查找一个字符串,有的已经包含在了标准库中,但不是所有的;字典树这个数据结构就是一个很好的例子。

让一个单词作为一个单独的字符串字典就是一个很大的单词集合。如果我们有一个字典,我们需要知道一个单词是否在这个字典中,那么字典树就可以帮助我们。但是你可能会问自己,“为什么不用set<sting>和hash table呢?”有两个主要的原因:

  1. 字典树可以在O(L)的时间内(L是一个单词的长度)插入和查找一个单词。这比set要快很多,但可能只比hash table稍快一点。
  2. set<string>和hash table只能在字典中查找完全匹配的单词;字典树可以允许我们查找有一个字符不同,前缀相同,一个字符丢失等等的单词。

字典树不仅在TopCoder的问题中会很有用,而且在软件工程中很多应用程序也广泛使用。假设一个网页浏览器。你知道浏览器怎么自动的补全你的文笔或者显示所有可能的写法?是的有了字典树我们可以很快的做到这个。你知道一个拼写校正器怎么检查你输入的单词是否在字典中的吗?也是字典树。你也可以使用字典树来提供不在字典中的单词的建议。

什么是一棵树?

你会看到字典树是多么的美妙,但是你也可能不知道它是什么和它的名字是怎么来的。Trie这个单词是retrieval的中缀,因为字典树可以用单词的前缀在字典中查找一个单词。字典树结构的主要是下边几个:

  1. 字典树是一棵每个节点代表一个单词或者一个前缀。
  2. 树的根节点代表一个空的字符串(””),与根直接相连的儿子代表前缀是1的,离根2条边的距离的代表长度为2的前缀,以此类推。在其他的单词中,一个点离根有k条边的是前缀为k的。
  3. 假设V和W是字典树的两个节点,V是W的父节点,那么V一定有W的前缀。

下边的图片显示了一个字典树有“tree”,“trie”,“algo”,“assoc”,“all”和“also”。

注意树的每个节点不存整个前缀或者整个单词。这个想法是程序要记住每个节点代表的单词而在树底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值