哈希游戏- 哈希游戏平台- 哈希游戏官方网站
构造合适的关键字和哈希函数对于增加命中率非常关键,哈希函数最终选用了平方取中法。而关键字,对于字符串形式的存储元素作用相当重要。起初打算用(字符串首位ASCII码值*字符串长度)作为关键字,但发现命中率不到0.2;因此加上了最后一位和第二位,命中率可提高到0.26(仍不如平均状况);加上倒数第二位提高到0.3,最后加上第([n/2]+1)位形成了五位相加减的状况,将命中率提高到了现在的0.39(以上所述的状况是LENGTH为60,输入字符串数目为50,这也是调试所用的宏定义状况,第二组输出结果是将LENGTH直接改为100时实现的)。这充分表明了本次实验需要一定的耐心。
本程序要设计两个hash()函数,分别对应电话号码和用户名。对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,方法如下:以电话号码为关键字建立哈希函数hash(char num[11])。以用户名为关键字建立哈希函数hash2(char name[8])。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。