可能是问题很难理解,我的意思是这个
给出两个示例文本
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)
您可以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))