Skip to content

Rust implementation of Pruning Radix Trie, originally by Wolf Garbe

License

Notifications You must be signed in to change notification settings

peterall/pruning_radix_trie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pruning Radix Trie

Rust implementation of Pruning Radix Trie, originally by Wolf Garbe (see credits/PruningRadixTrieLicense.txt).

Usage

Add terms with payloads to the trie with:

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

After which you can prefix match with:

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

Results are returned in descending order based on weight.

Example

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
}

Testing

Measuring code coverage

N.B.: At the moment, the nightly channel of Rust is required.

First of all, install grcov

cargo install grcov

Second, install the llvm-tools Rust component (llvm-tools-preview for now, it might become llvm-tools soon):

rustup component add llvm-tools-preview

To run tests with code coverage run

bash run_source_cov.sh

A html coverage report will be generated in ./target/debug/coverage/

See rust-code-coverage-sample for details.

About

Rust implementation of Pruning Radix Trie, originally by Wolf Garbe

Resources

License

Stars

Watchers

Forks

Packages

No packages published