# 实验题部分


## 基本题

### 1、简述sketch:
- 对于数据流中大量的元素要统计其特征(出现频率,数据流大小),对数据流多次使用哈希函数将事件映射到频率,在合理的偏差内估计其大小,并显著减少内存占用,是一种可靠性较高的概率统计数据结构。

### 2、Count-min Sketch:
- 预备知识1:通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做哈希函数或散列函数。主要操作是对数据进行加法、乘法和移位运算。
- 预备知识2:Hash函数的基本特性:
- 1.经过hash后能够得到相应输入的散列值。如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的;
- 2.散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能是相同的但不绝对肯定一定相等(可能出现哈希碰撞)。
- 算法过程:
> 使用d个hash函数,每个hash函数的取值范围都在[1,w]内,从而可以组成一个d * w的二维数组(hash table),该二维数组的长度大小固定。对于每个二元组(k, v),代表元素k需要更新v次,则分别使用d个hash函数对k进行hash操作,得到d个mapped counters,然后对它们全部增加v(即需要更新的数据)。***(count含义)***
当需要查询某个元素的频率估计值时,也是先根据hash函数得到mapped counters,然后取其中的最小值即可,因为最小代表了冲突次数最少,相对最精确。***(min含义)***

-- 摘引自他人博客《Sketch调研[https://blog.csdn.net/u012332103/article/details/79702495]》,有删改
![](https://img2018.cnblogs.com/blog/1593312/201902/1593312-20190217144524756-1100311378.png)


# 开放题部分

## 理论部分

### 1、解释为什么 sketch 可以省空间
Count-min-sketch在处理数据时引入了hash函数,能够把一个大范围映射到一个固定大小的小范围(简单来说,就是将任意长度的二进制值映射为固定长度的、大小唯一的较小二进制值),往往是为了节省空间、加快存取,使得数据容易保存。该函数是CM-Sketch能够极大节省空间的一个关键。
但是相应的代价是:由于上述hash函数的特性,多个key的散列值可能相同(哈希碰撞),从而导致探测计数器的估计值偏大。
因此为了减少哈希碰撞的概率:
- 1、可使用多个哈希函数;
- 2、可使用一个相对于数据足够大的素数进行hash操作;(例如2的32次方附近)
- 3、提高d和w的大小(越大精度越高),但是相应的在估计中使用空间也会增大。

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

备注:

  • 1、Ai->Bi,就是IP和对应的请求大小;
  • 2、update(Ai, Bi)包括了接下来的hash操作,是给Ai的原对应值上再添加Bi的值;
  • 3、estimate(Ai),得到各个探测计数器中的最小值并返回最小值;
  • 4、边输入边算,这种流程图的方法,可能会多次重复输出已经输出过的Ai->Bi。

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

优点:

  • 1、只需利用相对独立的hash函数就能够解决内存占用问题,对庞大的数据流可以实时处理,直接通过hash函数也可以直接找到的对应的value,无需遍历,降低时间空间复杂度。
  • 2、不需要精确估计数据包大小,适用于范围性问题,虽然结果可能偏大,但是理论上可以控制在合理误差范围内。
  • 3、拓展性强,由于不容易受数据长度大小的影响,加上键-值对应,在此基础上可以发展成统计其他数据特征的数据结构。本人的原始代码只能处理一种定长格式的数据的其中一种特征。

劣势:

  • 1、CM-Sketch的实现难度明显高于本人的代码,需要更深的知识掌握(例如两两独立的hash函数要如何创建),如果要求更高的精度,代码将会越复杂。
  • 2、对于低频的数据估计值误差会偏大,可能不适用于需要太过精确判断的问题中。

### 4、吐槽Count-min sketch

  • 1、外国人写个代码还好基本对函数和基本单元进行了封装,不然真的看不懂;
  • 2、低频数据的准确度有时差到惊人,甚至有内存分配出错的状态发生(或许是我改动完以后的问题)(二更:不是我的问题, 代码自身的hash算法其中的大数运算导致的,已修改);
  • 3、hash算法和整体架构修改起来并不简单,但是看懂之后才会好很多。而且貌似偶尔会导致堆损坏?这个问题很不解,但是免不了对堆的维护,但它不会中断程序(如下截图,其中一次堆损坏)。

2019寒假训练营寒假作业(三) 对Sketch——CM-Sketch的理解(理论题部分)的更多相关文章

  1. 2019寒假训练营寒假作业(三) MOOC的网络空间安全概论笔记部分

    目录 第五章 网络攻防技术 5.1:网络信息收集技术--网络踩点 信息收集的必要性及内容 网络信息收集技术 网络踩点(Footprinting) 网络踩点常用手段 5.2:网络信息收集技术 --网络扫 ...

  2. 2019寒假训练营寒假作业(二) MOOC的网络空间安全概论笔记部分

    视频课程--MOOC的网络空间安全概论笔记 第一章 网络空间安全概述 2001年,网络空间概念被首次提出: 网络空间安全框架: 1.设备层安全: 可通过截获电磁辐射获取计算机信息.通过硬件木马(恶意电 ...

  3. 2019寒假训练营第三次作业part2 - 实验题

    热身题 服务器正在运转着,也不知道这个技术可不可用,万一服务器被弄崩了,那损失可不小. 所以, 决定在虚拟机上试验一下,不小心弄坏了也没关系.需要在的电脑上装上虚拟机和linux系统 安装虚拟机(可参 ...

  4. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  5. JAVA作业三

    (一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...

  6. jQuery 作业三个按钮

    作业三个按钮 <!--声明 文档--> <!DOCTYPE html> <!--定义字符集--> <html lang="zh-CN"&g ...

  7. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  8. “全栈2019”Java第一百零三章:匿名内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

随机推荐

  1. nginx知识总结

    nginx知识总结 一.功能 负载均衡 反向代理 静态资源服务器 二.来源 nginx 俄罗斯第二网站开源项目 tengine 淘宝团队基于nginx开发的 区别:nginx安装之后还得装第三方软件包 ...

  2. linux 操作系统之磁盘管理

    磁盘管理 存储设备:硬盘 , U盘 , 移动硬盘 , 光盘 , 软件. 组装一台电脑 无法被修改 df -h #查看磁盘分区的情况 , 可用的. 查看磁盘或者目录的内容 df “df” 常用的 “-i ...

  3. array of TVarRec 动态数组使用

    FDQuery.AppendRecord()里是一个array of TVarRec.我们一般都是直接用[Var1,Var2,...].这样手工输入,但如果增加的元素我们预先不知道,就要声明一个arr ...

  4. Qt——父对象、布局

    设置父对象两个好处:(1)加入析构树(2)和父对象一起显示 设置布局后,子控件自动被设置父对象 设置父对象两个好处:(1)加入析构树(2)和父对象一起显示

  5. 线上CPU飚高(死循环,死锁...)

    之前排除服务器内存暴增的问题,在此看到一篇类似的文章,做个类似的记录. 1.top基本使用 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理内存使用情况 ...

  6. program files与program files(x86)的区别

    简单来说:Program Files (x86)存放了一些32位的系统文件.它和正常的Program Files以及Windows文件夹一样,都属于系统文件夹,请勿随意改动. 64位Windows中提 ...

  7. 北京Uber优步司机奖励政策(3月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. DSP5509开发之FPGA接口

    1. DSP5509和FPGA或者CPLD之间是什么接口,DSP相对普通MCU,具有专门的硬件乘法器,程序和数据分开的哈弗结构,特殊的DSP指令,快速的实现各种数字信号处理算法.在一个周期内可以完成一 ...

  9. centos7 的防火墙命令调整了

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.firewall:systemctl start firewalld.service#启动firewalls ...

  10. ubuntu 14.04 lts LAMP配置

    一.目标 创建服务器环境,主要包括:Apache2.4.7 serverPHP 5.5.9Mysql 5.5.49扩展:MemcacheMcrypt 二.准备工作 1.服务器系统版本 Ubuntu s ...