问题:有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,总共需要空间也不大。访问也是常数时间的。
添加回答
举报
0/150
提交
取消