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数据结构

Download history 3/week @ 2024-05-17 2/week @ 2024-05-24 1/week @ 2024-06-28 18/week @ 2024-07-05

每月846 次下载

自定义许可

90KB
1.5K SLoC

基本 Trie

Test CI

Trie 数据结构用于快速访问与单词相关联的单词和数据。

基本 Trie 被实现为一个树,其中每个节点都包含一个字符,该字符可以指向任何其他字符,从而允许插入任意单词。

有两种主要的实现方式
  • 无附加内容的单词插入 Trie
  • 每个单词都有一个对应的数据向量附加的数据 Trie

常规 Trie 通常用于单词查找和前缀匹配,数据 Trie 通常用于查找与某些前缀相关联的所有数据。

例如,在 Trie 中插入整本书时,可以插入每个单词及其对应的页码。稍后当搜索单词时,可以获取单词所在的全部页面,而无需增加性能成本。

全局特性

  • 单词的插入/删除
  • 快速的包含检查
  • 基于前缀查找单词
  • Trie 中的最长/最短单词
  • 泛型方法:is_emptylenclear
  • 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 – 将 DataTrieDatalessTrie 分离。优化 DatalessTrie 的性能。与旧版本不兼容。
  • <1.0.0 – 简单的带有数据和基本功能的 Trie

依赖项

~0.5–0.9MB
~16K SLoC