2012-11-02 80 views
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次測量。

我不知道在這個方向上,也許模糊邏輯,神經網絡模式檢測,距離矢量..有接縫的方式很多,但我想知道會更簡單的東西(我在想像哈希,但也許它應該是別的東西)。

+0

我敢肯定有模糊邏輯算法,在那裏,可以做到這一點,但我不認爲哈希會幫助你。這不會是如果你使用嚴格的整數爲什麼不使用某種形式的距離公式計算兩個點之間的距離,並打印是一個廉價的算法(不便宜,因爲可能哈希) – corsiKa

+1

?哈希用於創建數據的全局唯一指紋,並且對類似輸入進行比較實際上是針對大多數哈希所針對的。 – Grambot

+4

散列函數通常被設計爲使得類似的數據具有儘可能遠的散列。這不是你要找的算法。 – Bobson

回答

0

Hash函數可用於(未唯一地)識別特定的值。它們不保證是唯一的(更好地說,它保證了一些不同的值將具有相同的散列碼)。通常值的偏差會導致完全不同的哈希碼(As @Bobson已經提到過)。哈希碼的另一個用途是在常量時間內找到兩個值的不相等的值。

也許可以設計一個哈希碼功能,將你想要做什麼,specialy如果你知道你的價值觀生活在域中。但是,這將需要一個數學背景做。

據我所知,是你給的例子沒有散列函數。

這裏是另一個想法整數,用模10點的操作和計算betweeen每個數字的絕對差。用這種方法計算兩個數字之間的「距離」,而不是「差異」。我在字符串上做了類似的事情來找到彼此靠近的字符串。

一些僞代碼:

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

ehm想知道爲什麼要模10? 我一直在想有點模,但然後例如: 68 72可能不匹配,而72 76匹配,但我想知道如果它可以用於模式搜索,嗯像一系列的數字。 我做了一些傳感器讀數,並想知道我是否可以檢測到它的模式。 – user613326

+1

@ user613326 - 您可能想要問一下http://math.stackexchange.com/,爲整數集中的模式搜索提出一個好的算法。 – Bobson

+0

@ user613326任何基地都可以。 10來相當natualy。另一件事是通過距離最低有效數字的距離來加權數字之間的差異。如果用一個等於基數的因子進行加權,則距離等於差值(並且繞過該算法的目標。;-) – PapaAtHome