哈希函数用于比较

时间:2012-11-02 16:26:14

标签: c# wolfram-mathematica

好吧,我想通常哈希函数创建一个唯一的数字。 是否还有可用于近似比较的哈希函数?

所以例如

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次。

我不确定在哪个方向上使用它,也许是模糊逻辑,神经网络模式检测,距离矢量......有很多方法接缝,但我想知道会更简单(我在考虑某事)像哈希,但也许它应该是别的东西。)

1 个答案:

答案 0 :(得分:0)

散列函数可用于(非唯一)标识某些值。它们不能保证是唯一的(更好地说,保证一些不同的值将具有相同的哈希码)。值的小偏差通常会导致完全不同的哈希码(正如@Bobson已经提到过的那样。)哈希码的另一个用途是在常量时间内找到两个值的不等。

有可能设计一个能够做你想要的哈希码函数,特别是如果你知道你的价值所在的域。但这需要一个数学背景来做。

据我所知,你给出的例子没有哈希函数。

这是整数的另一个想法,使用模10运算并计算每个数字之间的绝对差。这样,您可以计算两个数字之间的“距离”,而不是“差异”。我在字符串上做过类似的事情,找到彼此接近的字符串。

一些伪代码:

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())'
}