Hash 散列函数混淆

Hash 散列函数混淆,hash,Hash,有人知道如何解决这个问题吗?我的意思是,我理解散列的作用,但我不知道这个问题在说什么 你有什么想法吗 鉴于: 散列函数:h(x)=2x+5 | mod M 容量为N的桶阵列 带有键的一组对象:12、44、13、88、23、94、11、39、20、16、5(从左到右输入) 4.a*[5 pts]****编写哈希表,其中M=N=11,使用单独的链接处理冲突 4.b*[5 pts]****编写哈希表,其中M=N=11,使用线性探测处理冲突 4.c*[5 pts]****如果M=11,您能否找到一个

有人知道如何解决这个问题吗?我的意思是,我理解散列的作用,但我不知道这个问题在说什么

你有什么想法吗

鉴于:

  • 散列函数:h(x)=2x+5 | mod M
  • 容量为N的桶阵列
  • 带有键的一组对象:12、44、13、88、23、94、11、39、20、16、5(从左到右输入)
4.a*[5 pts]****编写哈希表,其中M=N=11,使用单独的链接处理冲突

4.b*[5 pts]****编写哈希表,其中M=N=11,使用线性探测处理冲突


4.c*[5 pts]****如果M=11,您能否找到一个N值,该值在散列这些键时不会产生冲突?

首先计算每个键的散列。

使用方程h(x)来查找每个键的散列值。这是数组中存储值的位置。因为,这显然是家庭作业,所以我不会解释线性探测或单独链接或4c

M是将值放入的数组的大小

N是正在散列的对象数。

  • 您有一个函数,给定一个数字(x)确定该数字在表中的位置
  • 表格有一个给定的大小,N。对于问题a和b部分,N是11
  • 对于问题a、b和c,M是11。M只是一个插入到给定公式中的值
    h(x)=(2x+5)mod M
  • 因此,给定数字12,
    h(12)=(2*12+5)mod 11
    =>7。因此,第一个结果进入第7桶
  • 然后依次计算其余的数字,计算出每个数字的h(x)
  • 但是,当您遇到碰撞时(即,该数字应该进入的存储桶已经被先前的数字填充的情况),您需要为其选择不同的存储桶。你选择哪一种方法取决于你的溢出策略
  • 在问题A中,您的溢出策略是单独链接
  • 在问题B中,您的溢出策略是线性探测
  • 如果您不熟悉这些方法,请注意以下几点:
    • 单独链接:
    • 线性探测:
  • 如果C被读取,我认为这意味着从列表的开头开始,直到你遇到第一次碰撞;无论您的存储桶中已有多少个数字,都是N的值
  • 然而,我认为问题C是一个印刷错误。我认为它希望您为M找到一个值,该值允许将给定的数字列表全部分配给唯一的bucket(即无冲突/无溢出策略)
关于我的最后两点,我会鼓励其他人的意见;我可能搞错了,因为这个问题对我来说似乎是错的,可能就是我。你是怎么得到(2*12+5)mod11=>7的?哦,等等,我得到了。但是,如果数组中的所有数字都在末尾,但行乞是空的,那么会发生什么呢。你会重新开始工作吗?如果你有x x x 15 14 12,它应该在下一个,它会是10 x 15 14 12吗?嘿@weadadawawda。第一个问题:2*12=24。24 + 5 = 29. 第二个问题:是的,就像在《PacMan》中,如果你离开一边,你会回到另一边。这实际上就是公式中mod函数的原因。如果你做
xmod 5
并将数字0,1,2,3,4,5,6,7传递给它,你会得到0,1,2,3,4,0,1,2。