Hash 散列UUID而不需要排序
我有两个UUID。我想对它们进行完美的散列,以生成一个唯一的值,但有一个约束,即f(m,n)和f(n,m)必须生成相同的散列Hash 散列UUID而不需要排序,hash,uuid,hashcode,hash-function,Hash,Uuid,Hashcode,Hash Function,我有两个UUID。我想对它们进行完美的散列,以生成一个唯一的值,但有一个约束,即f(m,n)和f(n,m)必须生成相同的散列 UUID是128位的值 哈希函数应该没有冲突-所有可能的输入对都必须生成唯一的哈希值 f(m,n)和f(n,m)必须生成相同的散列-也就是说,排序并不重要 我在Go中工作,因此结果值必须适合256位整数 散列不需要是可逆的 有人能帮助吗? 首先用较小的一个连接起来。< /P> < P>在USER 3557 112的精彩解决方案上建立并注解评论链,让我们逐一考虑你的需求
- UUID是128位的值
- 哈希函数应该没有冲突-所有可能的输入对都必须生成唯一的哈希值
- f(m,n)和f(n,m)必须生成相同的散列-也就是说,排序并不重要
- 我在Go中工作,因此结果值必须适合256位整数
- 散列不需要是可逆的
>有人能帮助吗?
首先用较小的一个连接起来。< /P> < P>在USER 3557 112的精彩解决方案上建立并注解评论链,让我们逐一考虑你的需求(和无序):
- 没有碰撞
- 两个UUID输入m和n
- uuid每个为128位
- f(m,n)的输出必须为256位或更少
- f(m,n)和f(n,m)必须生成相同的散列
- 散列不需要是可逆的
如果你特别需要不可逆转的散列,那完全是另一个问题。在向加密散列函数馈送数据时,您仍然可以使用小于比较来确保顺序独立性,但您将很难找到保证即使使用256位输出宽度的固定宽度输入也不会发生冲突的内容。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@MZaragoza:不,是的。这符合问题的所有要求。你能解释一下怎么做吗。多做一点clear@MZaragoza:不清楚OP在go中如何处理128位或256位数字,因此不清楚如何提供示例代码,但假设您想将2位十进制数对散列为单个4位十进制数。然后这个解决方案将
(05,22)
散列到0522
或(53,40)
散列到4053
@cachvico:就是这样。那是你的杂烩。如果您需要从哈希表中提取问题中未列出的其他属性,如“avalanching”或“bucket resistance”,您可能需要在其上应用另一个函数,但在不知道您需要什么属性的情况下,我不能建议使用。考虑一下维基百科的情况。