第三次作业

笔记

简单描述什么是sketch

使用哈希的方法,根据哈希值的范围来确定的所需的存储空间,各种包根据哈希值再次归类,可以大大减少存储空间。这样使用哈希来估计流的方法称为Sketch-based方法。

描述Count-min sketch的算法过程

用n个函数,对每个来的地址算出对应值。用表存下值。统计时再找每个值中的最小值。

实现思路和实现结果

我用的Count-min sketch代码来至github,不过讲leaveHitters改为存所有的值,以及加了一个检验函数。
用Count-min sketch存下所有值,在进行检验。最后输出大于阈值的地址。我这里在初始的时候,可以设这个阈值(max),默认设定为100000——我的数据源来自我开着电脑放了两三小时而来,所以总值较大。

代码

解释为什么 sketch 可以省空间

哈希冲突可以将大部分数据挤在一起,在利用多个函数来避免误差时,倍数消耗的空间远低于挤压所腾出的空间。

用流程图描述Count-min sketch的算法过程

这里已经表现得很好了,我就不造轮子了。
1c3224274b95b1c2b.png
23bec6772640a78cf.png
3d5328d6d561e2ff7.png
4e23dd4f310b30f81.png
521a27e45ef4428b8.png

拿它和你改进后方法进行对比,分析优劣

我的想法是

我想是只保存规定次数的访问记录,在记录中访问时间近得不正常的,或请求信息和大的加入黑名单。 主要考虑如果能用一定的访问次数一来可以保证使用空间(因为使用的次数是自定义的),二来如果是一定次数,在来数值时可以一边存数值,一边舍弃数值,就像堆,每次来了一个新数值记录,只要注意舍弃数值与将进来的新数值影响———每次得出的结果在上次的基础上,可以省时间。

我的想法在节省空间上完全比不上Count-min sketch,但这是在不同方向上的尝试,所以在实验部分我还是会加上我原先的想法。在时间上,我原先的想法是拟合出函数来判断,最好是线性——在舍弃与进来时线性函数可以更方便,对每个数值进行判断,这方面可以用Count-min sketch来充当此函数。

吐槽Count-min sketch

用哈希省空间的同时,其实也是在消耗准确性,即以准确换取空间。不过相比较大的值较小的值更容易被影响到——较大意味着在面对同样的影响下变化小——这种情况下,对寻找heavyHitter的影响不会太大。

实验部分

同上,代码于此,在原先方法上更改了校验函数。

转载于:https://www.cnblogs.com/vcfghch/p/10397953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值