Count-Min sketch算法

给定数据流< 4,1,3,5,1,3,2,6,7,0,9 >,若哈希函数形如h(x)= (ax + b) mod 8,其中a和b是任意给定的常数。假设给定如下哈希函数:
(1) h(x) = (3x + 2) mod 8;
(2) h(x) = (7x + 5) mod 8;
(3) h(x) = (5x + 3) mod 8。
请利用Count-Min sketch算法估计频繁项。

程序

'''
CountMinSketch  实现 已完成
'''
import numpy as np



def h(a,b,x):
   return np.mod((a*x+b),8)

d_two=np.array([],[])
a = np.array([3,7,5])
b = np.array([2,5,3])
x = np.array([4,1,3,5,1,3,2,6,7,0,9])
x_h=[]
def select(t,p):
    
    count=[0,0,0,0,0,0,0,0]
    for i in x:
        l = h(a[t],b[t],i)
        ##print(i,"的哈希值为:",l)
        count[l]=count[l]+1
 
    return(count[p])

#print(select(0))
'''
hash_0=select(0)
hash_1=select(1)
hash_2=select(2)
'''
for j in range(0,11):
    ##print(select(k))
    print('数',x[j],'的哈希值为',h(a[0],b[0],x[j]),h(a[1],b[1],x[j]),h(a[2],b[2],x[j]))

for k in x:

    print('数',k,'的出现次数为',select(0,h(a[0],b[0],k)))

'''  
for k in range(0,len(hash_0)):
    print(min(hash_0[k],hash_1[k],hash_2[k]))
'''

结果
因为给定的这三个哈希函数对解决哈希冲突毫无作用,可以看到9和1的哈希函数值都是一样的,这里我不太理解,就只用了其中一个哈希函数的值来做索引了
在这里插入图片描述

可以看出由于哈希函数冲撞会导致频率结果偏大

两篇参考博客
Count-Min Sketch 算法
Count-Min Sketch 算法

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值