#trie #payload #radix #pruning #term #prefix #weight

pruning_radix_trie

基于Rust的剪枝基数Trie实现,最初由Wolf Garbe编写

3个版本 (1个稳定版)

1.0.0 2023年2月23日
0.3.0 2022年9月6日
0.2.2 2022年9月5日

#2 in #pruning

MIT许可证

28KB
672

剪枝基数Trie

Rust实现剪枝基数Trie,最初由Wolf Garbe编写(见credits/PruningRadixTrieLicense.txt)。

用法

使用以下命令将带有负载的术语添加到trie中

pub fn add(&mut self, term: &str, payload: T, weight: U);

之后,您可以使用以下命令进行前缀匹配

pub fn find(&self, prefix: &str, top_k: usize) 
    -> Vec<(String, &T, &U)>

结果将根据权重按降序返回。

示例

use pruning_radix_trie::PruningRadixTrie;

fn main() {
    let mut trie = PruningRadixTrie::new();
    trie.add("heyo", vec![1, 2, 3], 5);
    trie.add("hello", vec![4, 5, 6], 10);
    trie.add("hej", vec![7, 8, 9], 20);

    let results = trie.find("he", 10);

    for Result { term, payload, weight } in results {
        println!("{:10}{:?}{:>4}", term, payload, weight);
    }
    //hej       [7, 8, 9]  20
    //hello     [4, 5, 6]  10
    //heyo      [1, 2, 3]   5
}

测试

测量代码覆盖率

注意:目前需要Rust的nightly通道。

首先安装grcov

cargo install grcov

其次安装Rust组件llvm-tools(目前为llvm-tools-preview,可能很快会变成llvm-tools

rustup component add llvm-tools-preview

要运行带代码覆盖率的测试,请运行

bash run_source_cov.sh

将在./target/debug/coverage/生成一个HTML覆盖率报告。

有关详细信息,请参阅rust-code-coverage-sample

依赖关系

~9–20MB
~268K SLoC