3

質問がわかりにくいかもしれませんが、これはつまり

与えられた 2 つのサンプル テキスト

Text1 = "abc" および Text2 = "def"

どのアルゴリズムが好きですか

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

そして、別のチェックサムアルゴリズムのように、関数の結果が一意であることを望みます(エンコーディング(Text3、Text1)と重複しない)。

実際、これの根本は、データベースで質問を検索したいということです

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 に答える