我正在学习有关数据结构的书。
我正在阅读“哈希表”一章,在“数字折叠”部分中,它显示了哈希算法。
QAndroidJniObject intent("android/content/Intent")
QAndroidJniObject::callStaticObjectMethod("org/qtproject/example/WifiReceiver","onReceive","(Landroid/content/Context;Landroid/content/Intent;)V;",QtAndroid::androidContext().object(),intent.object());
用ASCII码(0-127)替换字符串中的每个元素,并分别添加这些值。
documentation for grails v3.2.9
但是有一个问题。如果哈希表的大小为12289,字符串的最大长度为10位数字,则哈希函数返回10X127 = 1270,它仅返回0到1270之间的地址,因此根本不使用1271到12288之间的地址。 。
散列表的大小12289是二进制的11000000000001。这是总共14位。另一方面,最大地址值1270为10011110110,因此仅使用11位。这一事实表明,从未使用过这三个位。因此,每次迭代Hash函数的循环时,我们都将hashValue向左移动3位,并添加下一个ASCII代码。从理论上讲,这将能够哈希所有地址。
我的问题是为什么我应该向左移动3位?有什么理由不应该将它移到右边吗?
答案 0 :(得分:0)