2019寒假训练营第三次作业

学习视频课程

博客链接

实验题

热身题

过程如下图:


基本题

了解新技术

什么是Sketch

Sketch 是一种基于散列的数据结构,可以在高速网络环境中,实时地存储流量特征信息,只占用较小的空间资源,并且具备在理论上可证明的估计精度与内存的平衡特性。通过设置散列函数,将具有相同散列值的键值数据存入相同的桶内,以减少空间开销。桶内的数据值作为测量结果,是真实值的近似。利用开辟二维地址空间,多重散列等技术减少散列冲突,提高测量结果的准确度。

  • 瓶颈:hash的计算开销和堆的维护开销,更新计数器和对包的头部的处理。
  • 优势:节省内存,理论上的可靠性;通过哈希函数的设置、减少开销。
  • 检测大流:对流的大小设定一个阈值,当超过这个阈值时,报出大流。但是这个阈值通常是不可预知的,为了防止误报,需要检测所有可能出现的流大小,以确定这个阈值。由于需要检测的流非常多,所以在确定阈值上要花费很多时间。

Count-min sketch的算法过程

Count-min 是一种典型的 sketch ,用到的是分类的思想:将具有相同哈希值的网络流归为一类,并使用同一个计数器计数。取多个哈希函数的最小哈希值作为网络流的估计,实现简单,空间开销较少。
这个算法的技巧是:不存储所有的不同的元素,只存储它们Sketch的计数。它由多个哈希函数(f1……fn)和一张二维表组成。二维表的每个存储空间维护了一个计数器,其中每个哈希函数分别对应表中的每一行。当一个网络流到来时,需要经过每个哈希函数 f1……fn 的处理,根据处理得到的哈希值分别存入每一行对应哈希值的计数器。有几个哈希函数,就要计算几次。算完后,取这m个计数器中的最小值,作为测量的最终值。
基本的思路是:创建一个长度为 x 的数组,用来计数,初始化每个元素的计数值为 0;对于一个新来的元素,哈希到 0 到 x 之间的一个数,比如哈希值为 i,作为数组的位置索引;这是,数组对应的位置索引 i 的计数值加 1;那么,这时要查询某个元素出现的频率,只要简单的返回这个元素哈希望后对应的数组的位置索引的计数值即可。考虑到使用哈希,会有冲突,即不同的元素哈希到同一个数组的位置索引,这样,频率的统计都会偏大。

参考文献:

https://www.cnblogs.com/vancasola/p/9457423.html
https://www.sdnlab.com/22685.html
https://blog.csdn.net/pipisorry/article/details/64126199

由于笔者能力不足,其余部分未能完成

原文地址:https://www.cnblogs.com/quewenjin/p/10390749.html