1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018年6月24日 |
---|
#27 在 #intersection
27KB
526 行
交集计算的快速迭代器变体。
用法
将此添加到您的 Cargo.toml
[dependencies]
skipping-search = "0.1.0"
并添加到您的 crate 根目录
extern crate skipping_search;
lib.rs
:
skipping-search 是交集计算的快速迭代器变体。
示例
假设您想找到4个不同数字的最小公倍数,并且您忘记了生成它的有效方法。您可以收集每个数的倍数的大数组,然后使用此crate高效地交集它们。
use skipping_search::{SkippingIterator, MultiIntersection, CountingIntersection};
let multiples = vec![12, 16, 22, 35].into_iter().map(|n|{
(1..).map(|i|{i * n}).take_while(|p|{p < &100_000}).collect::<Vec<_>>()
}).collect::<Vec<_>>();
let mut common_multiples = SkippingIterator::new(
MultiIntersection::new(
// Collect each vector as a slice.
multiples.iter().map(Vec::as_slice).collect(),
),
);
assert_eq!(common_multiples.cloned().next(), Some(18480));
现在我们已经支付了生成这些数据的成本,我们可以以非常低的成本进行其他组合查询
#
#
#
let mut subcommon_multiples = SkippingIterator::new(
CountingIntersection::new(
// Collect each vector as a slice.
multiples.iter().map(Vec::as_slice).collect(),
// We want any multiple common to at least 3 of the numbers
3,
),
);
assert_eq!(
subcommon_multiples.cloned().take(10).collect::<Vec<_>>(),
vec![528, 1056, 1584, 1680, 2112, 2640, 3168, 3360, 3696, 4224],
);