雏鹰训练营第三次作业

第一部分

1 安装VMware

2 下载Ubuntu镜像

3 在VMware里安装Ubuntu(下面是一篇帮助文章的地址)

https://zhuanlan.zhihu.com/p/38797088

4 在ubuntu系统上编译运行helloworld程序

4.1 打开控制台:使用快捷键 Ctrl + Alt + T;

4.2 安装vim:输入 sudo apt-get install vim;

4.3 安装gcc:输入 sudo apt-get install g++。

4.4 编写hello.c源代码

4.5 编译hello.c在终端执行 g++ hello.c -o hello 编译。

4.6 运行程序hello!

第二部分

1 sketch

sketch 是一种基于散列(Hash:一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。)的数据结构,可以在高速网络环境中,实时地存储流量特征信息,只占用较小的空间资源,并且具备在理论上可证明的估计精度与内存的平衡特性。

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

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

2 Count-Min Sketch

Count-Min Sketch 算法流程:

选定d个hash函数,开一个 dxm 的二维整数数组作为哈希表

对于每个元素,分别使用d个hash函数计算相应的哈希值,并对m取余,然后在对应的位置上增1,二维数组中的每个整数称为sketch

要查询某个元素的频率时,只需要取出d个sketch, 返回最小的那一个(其实d个sketch都是该元素的近似频率,返回任意一个都可以,该算法选择最小的那个

Count-Min Sketch算法的优点是省内存,缺点是对于出现次数比较少的元素,准确性很差,因为二维数组相比于原始数据来说还是太小,hash冲突比较严重,导致结果偏差比较大。

第三部分

1 GitHub上寻找countminsketch的应用代码

https://github.com/barrust/count-min-sketch

2 但是将代码克隆到Ubuntu后一直显示

include "count_min_sketch.h"不存在

3 最开始是尝试在Ubuntu的vim里安装这个库,网上的搜索结果全是关于这个算法的解释。之后尝试将网上已经编写好的#include "count_min_sketch.h"库文件导入库源中,结果还是不行。有点脑壳疼。

posted @ 2019-11-25 23:44  月偃苑  阅读(218)  评论(0编辑  收藏  举报