Java 基于随机数的标量积的字符串哈希函数

Java 基于随机数的标量积的字符串哈希函数,java,hash,Java,Hash,我正在做一个大学作业,包括创建一个带有自定义哈希函数的分布式哈希表,以便在存储(节点)之间分发密钥 在课堂上,我们学习了“好的”通用散列函数族的形式定义,因此冲突概率是表大小的1(该大小为素数) 生成哈希的过程如下(表的m大小): w=log2(m) 将密钥分成w位的部分 k=m/w 将每个部分解释为[0,2^w-1]中的数字 生成一个长度为k的随机数向量 散列是部分作为向量和随机数mod m的向量的标量积 该程序已被证明具有上述特性 在赋值中,我必须将字符串作为键来实现它。但是,字符串只能(轻

我正在做一个大学作业,包括创建一个带有自定义哈希函数的分布式哈希表,以便在存储(节点)之间分发密钥

在课堂上,我们学习了“好的”通用散列函数族的形式定义,因此冲突概率是表大小的1(该大小为素数)

生成哈希的过程如下(表的m大小):

  • w=log2(m)
  • 将密钥分成w位的部分
  • k=m/w
  • 将每个部分解释为[0,2^w-1]中的数字
  • 生成一个长度为k的随机数向量
  • 散列是部分作为向量和随机数mod m的向量的标量积
  • 该程序已被证明具有上述特性

    在赋值中,我必须将字符串作为键来实现它。但是,字符串只能(轻松地)划分为字符/字节,而不是位,因此我不能使用w=log2(m),而是使用w'=log256(m)。如果需要,我可以发布代码,但我认为这个想法是可以理解的


    哈希函数是否仍然使用w'通用,或者我必须将字符串分成w位的一部分?

    为什么不能将字符串转换为位?即使在stackoverflow中也有很多解决方案,比如:我可以,我已经实现了一个解决方案。我的问题是,它是否仍然具有相同的碰撞概率。