#count-min-sketch #sketch #count #min #bloom-filter #count-min #countmin

basiccountminsketch

一个基本的计数最小值sketch实现

2个版本

使用旧的Rust 2015

0.1.2 2017年7月6日
0.1.0 2015年8月15日

6 in #count-min-sketch

MIT许可证

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