第三次寒假作业 sketch 了解

什么是sketch?

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

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

(我的理解:类似于将数据归类,当你要找某一个元素时,只需再这类中找,而不需遍历全部数据,以减小空间内存)

散列:

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

Count-min sketch:

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

(我的理解:由上对散列的描述可知不同的输入可能会散列成相同的输出,会导致计数时偏大,所以因选择计数器的最小值来减小误差)

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

猜你喜欢

转载自www.cnblogs.com/zhangfeng406/p/10371950.html
今日推荐