是否有一个编码两个文本的算法,即使改变它们的位置,结果也是一样的?

noo*_*omz 3 sql algorithm

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

给出两个示例文本

Text1 ="abc"和Text2 ="def"

哪种算法可以做到

encoding(Text1,Text2)== encoding(Text2,Text1)

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

实际上,这个的根源是我想在我的数据库中搜索问题是否有任何行"谁是B的朋友"或"B是他们的朋友"只搜索一列如

SELECT * FROM relationship WHERE hash = "a039813"
Run Code Online (Sandbox Code Playgroud)

SELECT *
FROM relationship
WHERE (personColumn1 = "B" and verb = "friend") OR
      (personColumn2 = "B" and verb = "friend")
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 6

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

encoding_adapter(t1, t2)
{
    if (t1 < t2)
        return encoding(t1, t2)
    else
        return encoding(t2, t1)
}
Run Code Online (Sandbox Code Playgroud)

如果你使用一个简单的单输入散列函数,你很可能会写:

encoding(t1, t2)
{
    return hash(t1 + t2)
}
Run Code Online (Sandbox Code Playgroud)

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

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

return hash(t1 + delimiter + t2)

  • 散列哈希值:

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

  • 你什么意思?`encode_cat_adapter("AA","B")= strcat("AA","B")="AAB"`.`encode_cat_adapter("B","AA")= strcat("AA","B")="AAB"`.我不知道"AA"如何变成"A"而"B"变成"BB". (2认同)