为了账号安全,请及时绑定邮箱和手机立即绑定

算法题:怎么区分互不相同的<a, b>数对,hash还是?

算法题:怎么区分互不相同的<a, b>数对,hash还是?

慕尼黑8549860 2019-04-08 11:19:11
问题:有N个数对,其中a的范围是[0,100],b的范围是[0,255],N
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

算法:两步hash,你的数是很规范的,a和b的范围都是给定的。算全域hash,a也只有100个hash值,b有250个,所以总共只有100×250=25000个hash值,超过你的<5000的要求。所以就用两步hash吧。
具体设计:先给a设计映射函数,可以映射到a到[0,50)上,映射b到[0,99]上,这样总共有50*100=5000的需求。
另外,你的数还有一个规律,在a相同的情况下,会出现b的连续值,这个在设计b的hash函数时可以利用起来,hash(b)=b%100就能够比较好的把连续的b映射到不同的key上。但你要是用了取高位的hash函数,就会把连续b映射到相同的key上,冲突会比较大。
update:
其是你这个完全可以用bitmap来做。每个映射到一个a256+b的整数上,这样实际总共是[0,256101],可以设置一个bitset<256101+1>就可以了,每一个存在就设置bitset[256a+b]为1,总共需要空间也不大。访问也是常数时间的。
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信