好吧,我想通常哈希函数创建一个唯一的数字。 是否还有可用于近似比较的哈希函数?
所以例如
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次。
我不确定在哪个方向上使用它,也许是模糊逻辑,神经网络模式检测,距离矢量......有很多方法接缝,但我想知道会更简单(我在考虑某事)像哈希,但也许它应该是别的东西。)
答案 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())'
}