欢迎光临散文网 会员登陆 & 注册

单词补全原理及 Rust 简单实现

2023-07-14 18:35 作者:BHznJNs  | 我要投稿

前注:本文的实现参考了此 Github 仓库: https://github.com/Blightmud/rs-complete

实现目标

先引用 rs-complete 项目 README 中的一段文字来说明本文的实现目标:

假如我们有一个词库(能看出该项目的作者挺喜欢蝙蝠侠的)

我们使用这个词库,以每个字母为节点,构建一颗树,如下所示:

然后,我们使用单词片段batm进行查找,可以通过遍历这颗树来得到:

实现原理解释

单词插入

现在,让我们假设存在一颗空树,

我们需要插入一个单词 "abcd",由于当前树为空,我们可以很简单地遍历这个单词,将每一个字母新建节点,插入到树中。

让我们再插入一个单词 "befg",步骤与之前插入单词类似,遍历这个单词,并插入到树中。

让我们再插入一个单词 "abef",步骤与之前插入单词类似,遍历这个单词,并插入到树中。

使用单词片段查找

让我们复用上面的这棵树,尝试使用单词片段ab进行查找。

在对单词片段进行遍历后,我们得到了需要遍历的子树。

对这棵子树进行遍历,我们就可以获得用来补全单词片段ab的字符串数组:

代码实现

节点定义

注:由于我们是通过将单词拆分成单独的字母来作为节点进行存储,且字母本身是具有有序性的,因此在这里使用 TreeMap(BTreeMap in Rust) 的方式存储数据。

节点方法实现

新建

插入

补全

根节点的定义及实现

这里只是对上文中节点方法的封装,就不过多阐述了。

测试代码

结果:

完整代码


单词补全原理及 Rust 简单实现的评论 (共 条)

分享到微博请遵守国家法律