3

可能是这个问题很难理解,我的意思是这个

给定两个示例文本

Text1 = "abc" 和 Text2 = "def"

哪种算法可以做到

编码(文本 1,文本 2)== 编码(文本 2,文本 1)

而且我希望函数的结果是唯一的(不与编码(Text3,Text1)重复,就像在另一个校验和算法中一样。

实际上,这个问题的根源是我想在我的数据库中搜索问题是否存在“谁是 B 的朋友”或“B 是谁的朋友”的行,只需搜索一列,例如

SELECT * FROM relationship WHERE hash = "a039813"

不是

SELECT *
FROM relationship
WHERE (personColumn1 = "B" and verb = "friend") OR
      (personColumn2 = "B" and verb = "friend")
4

1 回答 1

6

encoding(Text1, Text2) == encoding(Text2, Text1)您可以通过简单地强制执行参数的特定顺序来调整任何编码以确保。由于您正在处理文本,因此可以使用基本的词汇顺序:

encoding_adapter(t1, t2)
{
    if (t1 < t2)
        return encoding(t1, t2)
    else
        return encoding(t2, t1)
}

如果您使用简单的单输入散列函数,您可能很想写:

encoding(t1, t2)
{
    return hash(t1 + t2)
}

但这可能会导致冲突: encoding("AA", "B") == encoding("A", "AB")。有几个简单的解决方案:

  • 如果您有一个从未出现在输入字符串中的字符或字符串,则将其用作分隔符:

return hash(t1 + delimiter + t2)

  • 散列哈希:

return hash(hash(t1) + hash(t2))

于 2013-10-12T09:32:08.407 回答