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
每月下载量341次
被competitive-hpp使用
22KB
469 行
memoise
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