3

さて、私は通常、ハッシュ関数が一意の番号を作成するのだろうかと思っています。おおよその比較に使用できるハッシュ関数もありますか?

たとえば

6 7 8  9 10 11 23 40 10 
5 8 10 9  9 12 24 40 20   would match

25 7 12  9 10 12 90 90    would not match

パターン認識を考えているので気になります。あなたが見つけたい一致のパーセンテージを与えることができるいくつかの数学があるのだろうか。プログラミング言語としてC#を使用する。

いくつかの説明、最初に私が捕まえたいものの同義語を説明させてください。水滴が落ちるが、一定の流れではないことを想像してみてください。測定ツールも完璧ではありません。だから今、私は液滴の違いのタイミングを計っています。これは一連の測定です。たとえば、19〜25の液滴は、実際には、たとえばカメラを持っていてそれを撮影した場合、そのような一連の測定を一度に行うことができます。

今、私は次のシリーズが始まるときにこの「シリーズ」を持っていることを理解するのが好きですそれは異なるか同じですか、シリーズ間にランダムな時間のギャップがあるかもしれません、そして測定ツールはシリーズの始まりまたは終わりを検出しません、彼らは一度に19〜25回の測定を行うだけです。

ファジーロジック、ニューラルネットワークパターン検出、距離ベクトルなど、これをどの方向に進めるかはわかりません。さまざまな方法で継ぎ目がありますが、もっと単純なものになるのではないかと思います(ハッシュのようなものを考えていました) 、しかし多分それは何か他のものでなければなりません)。

4

1 に答える 1

0

ハッシュ関数は、特定の値を (一意にではなく) 識別するために使用できます。それらが一意であることが保証されているわけではありません (より適切に言えば、いくつかの異なる値が同一のハッシュ コードを持つことが保証されています)。値の小さな偏差は、通常、完全に異なるハッシュ コードをもたらします (@Bobson が既に述べたように)。

特に、値が存在するドメインがわかっている場合は、必要な処理を行うハッシュ コード関数を設計できる可能性があります。ただし、それには数学的バックグラウンドが必要です。

私の知る限り、あなたが与えた例のハッシュ関数はありません。

整数の別のアイデアを次に示します。モジュロ 10 演算を使用して、各桁間の絶対差を計算します。このようにして、「差」ではなく、2 つの数値間の「距離」を計算します。互いに近い文字列を見つけるために、文字列に対して一度同様のことを行いました。

擬似コード:

int Distance(int x, int y)
{
    int result = 0;
    while ((x > 0) && (y > 0))
    {
        result += abs(x%10 - y%10);
        x /= 10;
        y /= 10;
    }
    return result;
}

void Caller()
{
    int distance = Distance(123, 456);

    if (distance == 0) write("x and y are equal");
    else write("the relative distance between x and y = " + distance.ToString())'
}
于 2012-11-02T17:25:35.477 に答える