#string-search #trie #cedar #search #string #text-search #text

cedarwood

Rust 中高效可更新的双数组 trie(从 cedar 转移过来)

15 个版本

0.4.6 2022 年 10 月 4 日
0.4.5 2021 年 9 月 23 日
0.4.4 2019 年 12 月 29 日
0.4.3 2019 年 11 月 20 日
0.1.2 2019 年 7 月 11 日

数据结构 中排名 #231

Download history 3552/week @ 2024-03-14 5794/week @ 2024-03-21 6541/week @ 2024-03-28 5285/week @ 2024-04-04 5068/week @ 2024-04-11 5104/week @ 2024-04-18 5061/week @ 2024-04-25 4926/week @ 2024-05-02 6358/week @ 2024-05-09 5498/week @ 2024-05-16 5795/week @ 2024-05-23 5645/week @ 2024-05-30 5907/week @ 2024-06-06 5011/week @ 2024-06-13 5978/week @ 2024-06-20 5267/week @ 2024-06-27

每月下载量 23,196
用于 22 包(直接使用 4 个)

BSD-2-Clause

53KB
1K SLoC

cedarwood

cedarwood 是 Rust 中高效可更新的双数组 trie(从 cedar 转移过来)。此库使用了足够的随机测试进行测试,但由于尚未在高压生产环境中进行测试,因此被视为 beta 版。如果您有好的用例来证明其稳定性,请告诉我。

Build Status codecov Crates.io docs.rs

安装

将其添加到您的 Cargo.toml

[dependencies]
cedarwood = "0.4"

然后就可以使用了。如果您使用的是 Rust 2015,则还需要在包根目录中添加 extern crate cedarwood

示例

let dict = vec![
    "a",
    "ab",
    "abc",
    "アルゴリズム",
    "データ",
    "構造",
    "",
    "网球",
    "网球拍",
    "",
    "中华",
    "中华人民",
    "中华人民共和国",
];
let key_values: Vec<(&str, i32)> = dict.into_iter().enumerate().map(|(k, s)| (s, k as i32)).collect();
let mut cedar = Cedar::new();
cedar.build(&key_values);

let result: Vec<i32> = cedar.common_prefix_search("abcdefg").iter().map(|x| x.0).collect();
assert_eq!(vec![0, 1, 2], result);

let result: Vec<i32> = cedar
    .common_prefix_search("网球拍卖会")
    .iter()
    .map(|x| x.0)
    .collect();
assert_eq!(vec![6, 7, 8], result);

let result: Vec<i32> = cedar
    .common_prefix_search("中华人民共和国")
    .iter()
    .map(|x| x.0)
    .collect();
assert_eq!(vec![9, 10, 11, 12], result);

let result: Vec<i32> = cedar
    .common_prefix_search("データ構造とアルゴリズム")
    .iter()
    .map(|x| x.0)
    .collect();
assert_eq!(vec![4], result);

运行基准测试

cargo bench 

许可证

本作品在 BSD-2 许可证下发布,遵循 C++ cedar 的原始许可证。许可证的副本包含在 LICENSE 文件中。

参考

依赖关系

~73KB