第三次寒假做业 sketch 了解

什么是sketch?

  • sketch 是一种基于散列的数据结构,能够在高速网络环境中,实时地存储流量特征信息,只占用较小的空间资源,而且具有在理论上可证实的估计精度与内存的平衡特性。算法

  • 经过设置散列函数,将具备相同散列值的键值数据存入相同的桶内,以减小空间开销。桶内的数据值做为测量结果,是真实值的近似。利用开辟二维地址空间,多重散列等技术减小散列冲突,提升测量结果的准确度。数组

(个人理解:相似于将数据归类,当你要找某一个元素时,只需再这类中找,而不需遍历所有数据,以减少空间内存)网络

散列:

  • Hash,通常翻译作“散列”,也有直接音译为”哈希“的,就是把任意长度的输入(又叫作预映射, pre-image),经过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间一般远小于输入的空间,不一样的输入可能会散列成相同的输出,而不可能从散列值来惟一的肯定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

Count-min sketch:

  • 经过设置多个散列函数减小散列冲突,将计数器的最小值做为测量结果,是一种典型的 sketch。

(个人理解:由上对散列的描述可知不一样的输入可能会散列成相同的输出,会致使计数时偏大,因此因选择计数器的最小值来减少偏差)数据结构

  • Count-min sketch 算法
    • 该算法的技巧:不存储全部的不一样的元素,只存储它们Sketch的计数。
    • 思路:建立一个长度为 x 的数组,用来计数,初始化每一个元素的计数值为 0;
      对于一个新来的元素,哈希到 0 到 x 之间的一个数,好比哈希值为 i,做为数组的位置索引;
      这是,数组对应的位置索引 i 的计数值加 1;
      那么,这时要查询某个元素出现的频率,只要简单的返回这个元素哈希后对应的数组的位置索引的计数值便可。
      考虑到使用哈希,会有冲突,即不一样的元素哈希到同一个数组的位置索引,这样,频率的统计都会偏大。
    • 对于频率统计偏大优化思路:使用多个数组,和多个哈希函数,来计算一个元素对应的数组的位置索引;那么,要查询某个元素的频率时,返回这个元素在不一样数组中的计数值中的最小值便可。
    • 这个算法的特色是:
      只会估算偏大,永远不会偏小;
      只须要固定大小的内存和计算时间,和须要统计的元素多少无关;
      对于低频的元素,估算值相对的错误可能会很大。

相关文章
相关标签/搜索