我有两个UUID。我想完美地哈希它们以产生一个唯一值,但是有一个约束, f(m,n)和 f(n,m)必须生成相同的哈希值
有人可以帮忙吗?
答案 0 :(得分:3)
首先将它们与较小的一个连接起来。
答案 1 :(得分:0)
要建立在user2357112卓越解决方案的基础上,并将评论链简化,请让我们逐一考虑您的要求(并且不按顺序):
从技术上讲,这不是哈希函数。哈希函数是将异构的任意长度数据输入映射到固定宽度的同质输出。如果输入比输出长,那么实现这一目标的唯一方法是通过一些数据丢失。对于大多数应用程序,这是可以容忍的,因为散列函数仅用作快速查找键,并且代码回退到数据的较慢,完整的比较。这就是为什么许多指南和语言坚持if you implement one, you must implement the other。
幸运的是,你说:
组合两个输入正好是256位,这意味着您不必丢失任何数据。如果您需要较小的输出,那么您将失去运气。实际上,您可以将两个数字连接在一起并生成完美,唯一的表示。
要完成此最终要求,请通过两个UUID的某些内在值来决定连接顺序。建议的小首先工作很棒。然而...
如果您特别需要不可逆哈希,那完全是另一个问题。在使用加密哈希函数时,您仍然可以使用小于比较来确保顺序独立性,但是即使对于256位输出宽度的固定宽度输入,您也很难找到保证不会发生冲突的东西。