6个版本

0.3.2 2020年3月8日
0.3.1 2020年3月8日
0.2.0 2020年2月9日
0.1.1 2020年2月1日

#i64中排名17

Download history 94/week @ 2024-03-16 150/week @ 2024-03-23 144/week @ 2024-03-30 197/week @ 2024-04-06 143/week @ 2024-04-13 113/week @ 2024-04-20 128/week @ 2024-04-27 153/week @ 2024-05-04 125/week @ 2024-05-11 128/week @ 2024-05-18 89/week @ 2024-05-25 136/week @ 2024-06-01 67/week @ 2024-06-08 98/week @ 2024-06-15 112/week @ 2024-06-22 40/week @ 2024-06-29

每月下载量341
competitive-hpp使用

BSD-3-Clause许可证

22KB
469

memoise crate-name at crates.io crate-name at docs.rs

Rust的简单记忆库

文档

docs.rs上查找。

使用

将以下内容添加到您的Cargo.toml

[dependencies]
memoise = "0.3"

然后,只需将memoise属性添加到您想要记忆化的函数中

use memoise::memoise;

#[memoise(n <= 100)]
fn fib(n: i64) -> i64 {
    if n == 0 || n == 1 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}

然后您可以正常调用它

fn main() {
    println!("{}", fib(45));
}

并运行它

$ cargo build --release
$ time cargo run --release -q
1134903170

real    0m0.039s
user    0m0.000s
sys     0m0.016s

如果取消注释memoise属性,则不会进行记忆化。

// #[memoise(n <= 100)]
fn fib(n: i64) -> i64 {
    if n == 0 || n == 1 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}
$ cargo build --release
$ time cargo run --release -q
1134903170

real    0m5.019s
user    0m4.984s
sys     0m0.016s

如果没有指定键的边界,缓存表Vec将动态分配。

use memoise::memoise;

// the cache table for `n` is dynamically allocated
#[memoise(n)]
fn fib(n: i64) -> i64 {
    if n == 0 || n == 1 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}

_reset函数释放分配的Vec

fib(42); // This allocates cache table for `0..n+1`
fib_reset();

memoise_map使用BTreeMap记忆化一个函数。它适用于键稀疏的情况。

#[memoise_map(n)]
fn fib(n: i64) -> i64 {
    if n == 0 || n == 1 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}

_reset函数还释放所有分配的内存。

有关更多信息,您可以在docs.rs上找到文档。

依赖关系

~1.5MB
~34K SLoC