16 个版本 (稳定版)
2.0.0 | 2024年4月9日 |
---|---|
1.2.3 | 2023年8月27日 |
0.2.1 | 2023年7月28日 |
0.1.1 | 2023年7月24日 |
0.0.1 | 2023年7月22日 |
#275 在 数据结构 中
每月846 次下载
90KB
1.5K SLoC
基本 Trie
Trie 数据结构用于快速访问与单词相关联的单词和数据。
基本 Trie 被实现为一个树,其中每个节点都包含一个字符,该字符可以指向任何其他字符,从而允许插入任意单词。
有两种主要的实现方式
- 无附加内容的单词插入 Trie
- 每个单词都有一个对应的数据向量附加的数据 Trie
常规 Trie 通常用于单词查找和前缀匹配,数据 Trie 通常用于查找与某些前缀相关联的所有数据。
例如,在 Trie 中插入整本书时,可以插入每个单词及其对应的页码。稍后当搜索单词时,可以获取单词所在的全部页面,而无需增加性能成本。
全局特性
- 单词的插入/删除
- 快速的包含检查
- 基于前缀查找单词
- Trie 中的最长/最短单词
- 泛型方法:
is_empty
、len
、clear
- Trie 等于
==
- Trie 合并使用
+
或+=
数据 Trie 特性
- 将单词与任何类型关联的泛型类型实现,无零 trait 约束
- 基于精确匹配或前缀查找单词的数据
可选特性
- 通过 'unicode' 功能使用 'unicode-segmentation' crate 支持 Unicode(默认启用)
- 通过 'data' 功能支持数据 Trie(默认启用)
- 通过 'serde' 功能使用 'serde' crate 进行序列化和反序列化
依赖项
unicode-segmentation
(默认启用)serde
(仅与 'serde' 功能标志一起使用)fxhash
thin-vec
arrayvec
许可
该软件根据 MIT 许可证授权。
示例
use basic_trie::Trie;
let mut trie = Trie::new();
trie.insert("eat");
trie.insert("eating");
trie.insert("wizard");
let mut found_longest_words = trie.get_longest();
found_longest_words.sort();
assert!(trie.contains("wizard"));
assert_eq!(vec![String::from("eating"), String::from("wizard")], found_longest_words);
assert_eq!(vec![String::from("eat")], trie.get_shortest());
assert_eq!(3, trie.len());
use basic_trie::DataTrie;
let mut data_trie = DataTrie::<u32>::new();
data_trie.insert("apple", 1);
data_trie.insert("apple", 2);
data_trie.insert_no_data("banana");
data_trie.insert("avocado", 15);
let mut found_data = data_trie.get_data("apple", false).unwrap();
found_data.sort();
assert_eq!(vec![&1, &2], found_data);
let mut found_data = data_trie.get_data("a", true).unwrap();
found_data.sort();
assert_eq!(vec![&1, &2, &15], found_data);
assert_eq!(vec![15], data_trie.remove("avocado").unwrap());
变更日志
- 2.0.0 - 主要重构:提高了常规 Trie(以前是无数据 Trie)的内存效率;更改 API 名称以更好地匹配标准库;在代码层面上分割两个实现,从而修复了文档渲染错误。
- 1.2.3 – 添加更多内存布局优化的依赖项。
- 1.2.2 – 使用 Box 进行更多内存优化。
- 1.2.1 – 使用 Box 进行内存性能升级。可变数据检索。
- 1.2.0 – 同类型Trie之间支持等号和加号运算符,通过
==
、+
和+=
实现。 - 1.1.1 – 添加
FxHashMap
依赖以提升性能。 - 1.1.0 – 使用
serde
crate 和 'serde' 功能进行序列化。 - 1.0.3 – 对
number_of_words()
进行优化。移除单词插入的生命周期要求,以在相同逻辑内存成本下获得更好的灵活性。 - 1.0.2 – 修复错误。
- 1.0.1 – 为
DataTrie
实现insert_no_data()
。修复错误。 - 1.0.0 – 将
DataTrie
和DatalessTrie
分离。优化DatalessTrie
的性能。与旧版本不兼容。 - <1.0.0 – 简单的带有数据和基本功能的
Trie
。
依赖项
~0.5–0.9MB
~16K SLoC