2个版本
使用旧的Rust 2015
0.1.2 | 2017年7月6日 |
---|---|
0.1.0 | 2015年8月15日 |
6 in #count-min-sketch
6KB
112 行
基本计数最小值sketch
这是在Rust中实现的计数最小值sketch结构。
您可以使用它以一定的不确定性来计数事件的频率。它使用亚线性空间,但允许可能的哈希冲突,这可能导致计数过多。
从概念上讲,它就像一个布隆过滤器,但针对多集而不是严格集合。
为了使用它,您需要提供一个实现该特质的实现,该特质描述了如何将某些类型转换为哈希桶使用的底层u64
。
表面上,我们可以使用这样的实现
impl<T: Hash> IntoSketch for T {
fn asu64(&self) -> u64 {
let mut hasher = SipHasher::new();
self.hash(&mut hasher);
hasher.finish()
}
}
但这排除了我们可能不希望进行额外哈希传递的情况,并且有一个“明显”的方法转换为u64(例如,u32可能会简单地扩大...)。它没有在包本身中定义,因为许多类型实现了Hash
,这会导致讨厌的冲突,但没有任何理由您不能在其他作用域中自己添加。
一旦您实现了将数据放入sketch的方法,您就可以根据需要异构地使用它(例如,与sketchy不同)
extern crate basiccms;
use basiccms::Sketch;
#[test]
fn we_should_be_able_to_add_heterogenuously () {
let mut sketch = Sketch::new(0.0001, 0.8);
sketch.add(1); sketch.add(2); sketch.add(3);
sketch.add("foo"); sketch.add("bar"); sketch.add("quux");
assert_eq!(1, sketch.point("foo"));
sketch.add("foo");
assert_eq!(2, sketch.point("foo"));
}
目前只提供了sketch.point
点查询方法,该方法返回“最小计数”频率估计。
欢迎提交补丁!
依赖关系
~315–540KB