大数据应用算法作业一
- 假设有一个包含90个数据的数据流,该数据流一共有5个不同的元素,即(x1,x2,x3, X4,x5),其中×1出现的频率为50,x2出现的频率为10,x3出现的频率为10,x4出现的频率为10,x5出现的频率为10。考虑在该数据流上运行参数为k=2的Misra-Gries算法,尝试解决以下问题:
(a)数据流中的数据以怎样的到达顺序可以使得元素x1的计数最大(也就是Misra-Gies算法在最终状态下x1的计数最大)?该最大的计数值是多少?
(b)数据流中的数据以怎样的到达顺序可以使得元素x1的计数最小(也就是Misra-Gries算法在最终状态下x1的计数最小)?该最小的计数值是多少?
解:(a)所有x1都是在最后出现的
50
(b)所有x1都是在最前面出现的
30
- 给定一个包含m个数的数据流和一个整数参数k,已知该数据流中存在一些出现频率严格超过m/k数。请设计一个空间复杂度为O(k)的算法找出所有的这些数,并给出算法正确性证明。例如给定包含8个数的数据流(1,1,1,2,3,2,2,4)以及参数k=3,不难发现这个数据流中1和2出现的次数均为3次,超过了m/3=8/3,那么算法返回的结果是1和 2这2个数。
解:使用参数为k-1的Misra-Gries算法
算法过程见笔记
证明:首先证明频率严格超过m/k的数的个数小于等于k-1
设频率严格超过m/k的数的个数为n,那么其总和至少为\(n\cdot (\frac{m}{k}-1)\)
\(\therefore\frac{nm}{k}+n<(\frac{m}{k}+1)\cdot k=m+k\)
n=k时 m+k>m
n=k-1时 \((k-1)(\frac{m}{k}+1)=m+k-\frac{m}{k}-1\)
要证\(\exists k使得 k-\frac{m}{k}-1\leq0\)
\(k^{2}-k-m\leq0\)
\(\Delta=1+4m>0\)
又因为k=0时-m<0
所以存在解
所以频率严格超过m/k的数都能得到,并且不会得到其他数
其次证明频率严格超过m/k的数不会漏报
算法最多减\(\frac{m-m'}{k}\)个
\(\frac{m}{k}-\frac{m-m'}{k}>0\)
所以留在最后的必然是频率严格超过m/k的数
- 给定一个集合D,假设你已经构造了一个长度m=2b比特的bloom filter。你的同学也想用你构造的这个bloom filter来处理“元素x是否在D中”的查询,但是你同学只有b比特的空间,请问他该如何实现他的目标?注意:假设我们不允许他重新针对集合D构造一个长度为b的bloom filter,而是要求在你构造的长度为2b的bloom filter的基础上去实现。
解:
对原来的哈希函数作修改
将原哈希函数映射的位置值除以2(向下1取整)
然后将原Bloom filter中每两位取或
赋值给长度为b的Bloom filter上
由此,虽然提升了误报率,但没有漏报