5个版本
0.1.4 | 2023年4月1日 |
---|---|
0.1.3 | 2023年2月18日 |
0.1.2 | 2023年2月12日 |
0.1.1 | 2023年2月11日 |
0.1.0 | 2023年2月11日 |
255 在 压缩 中排名
每月24次下载
10KB
66 行
weighted_trie
🦀 一个允许创建可用于自动补全的加权前缀树的Rust crate
快速入门
要使用weighted-trie,请将以下内容添加到您的Cargo.toml文件中
[dependencies]
weighted_trie = "0.1.0" # NOTE: Replace to latest minor version.
使用概述
use weighted_trie::WeightedTrie;
fn main() {
let mut trie = WeightedTrie::new();
// build trie with words and assoicated weights
trie.insert("pie".to_owned(), 5);
trie.insert("pita".to_owned(), 2);
trie.insert("pi".to_owned(), 1);
trie.insert("pizza".to_owned(), 10);
// get prefix based suggestions sorted by weight
let suggestions = trie.search("pi");
assert_eq!(suggestions, vec!["pizza", "pie", "pita", "pi"]);
let suggestions = trie.search("piz");
assert_eq!(suggestions, vec!["pizza"]);
// out of vocabulary
let suggestions = trie.search("apple");
assert_eq!(suggestions.len(), 0);
}
或者您也可以使用 .build
方法
use weighted_trie::{WeightedString, WeightedTrie};
fn main() {
let weighted_strings = vec![
WeightedString {
word: "pie".to_owned(),
weight: 5,
},
WeightedString {
word: "pita".to_owned(),
weight: 2,
},
WeightedString {
word: "pi".to_owned(),
weight: 1,
},
WeightedString {
word: "pizza".to_owned(),
weight: 10,
},
];
let trie = WeightedTrie::build(weighted_strings);
}
基准测试
使用100k个加权字符串
weighted_trie/insert time: [374.13 ms 377.97 ms 382.13 ms]
weighted_trie/lookup time: [709.69 µs 725.45 µs 751.34 µs]
weighted_trie/build time: [375.60 ms 380.36 ms 385.45 ms]
指南
README.md
由 cargo readme
命令生成。请勿手动更新 README.md
,而是编辑 src/lib.rs
,然后运行 cargo readme > README.md
。
待办事项
添加测试基准测试查找速度基准测试插入速度- 测量内存占用
- 尝试低垂的果实优化,例如使用
hashbrown
代替标准HashMap
许可证
许可证:Apache-2.0