緒:
漢明距離是一種權衡特征距離的計較方式,
其本家兒要思惟是找到兩個特征之間的差別巨細,也可以說是相似性;
漢明距離是以理查德·衛斯里·漢明的名字定名的,漢明在誤差檢測與校正碼的根本性論文中初次引入這個概念。
用來權衡2個二進制碼字之間的相似水平的。
 漢明距離界說:
從二進制上講是:兩個等長字符串的二進制對應位不不異的位個數;
例如:
“toned”和”roses”的漢明距離是3。
1011101和1001001的漢明距離是2。
2173896和2233796的漢明距離是3。
 漢明距離的意義:
對于二進制字符串a和b來說,
漢明距離等于a^b中1的數量,又叫做漢明權重。
長度為n的二進制字符通同過漢明距離組成了一個懷抱空間(metric space),
稱漢明立方(Hamming Cube);
下圖給出了在hypercube中:
0100→1001 (紅色)的漢明距離是 3;
0110→1110 (藍色)的漢明距離是 1;
 漢明距離實現思緒:
①將兩個給心猿意馬的數進行異或(^)運算后保留在變量a中,
則漢明距離就是二進制a中1的個數;
②當a不為0時,和0x01進行按位與(&)運算,若是成果為1,則統計變量加一
③將a右移一位,反復第02步
 代碼:
//漢明距離計較
int hamDist(char *a, char *b)
{
int dist = 0;
while (*a && *b)
{
dist += (*a != *b)?1:0;//異或
*a++;
*b++;
}
return dist;
}
int main()
{
char *a,*b;//字符指針
a = "0000100100000001";
b = "0010100001100100";
int dist = hamDist(a,b);
printf("%d\n",dist);
getchar();
return 0;
}
 計較兩個整數的二進制漢明距離;
Wegner (1960)給出了一種計較漢明權重(即計較給心猿意馬整數的二進制暗示中1的個數)的算法,經由過程頻頻查找并消弭最低的非零位來實現。
基于此利用C說話實現的計較漢明距離的算法如下:
//while輪回的次數就是漢明距離;
//計較漢明距離
unsigned int value = a^b;
int GetHammingWeight(unsigned int value)
{
if(value == 0)
return 0;
int a = value;
int b = value -1;
int c = 0;
int count = 1;
while(c = a & b)
{
count++;
a = c;
b = c-1;
}
return count;
}
 漢明距離的應用:
漢明距離本家兒要應用在通信編碼范疇上,用于擬定可糾錯的編碼系統。
在機械進修范疇中,漢明距離也經常被用于作為一種距離的懷抱體例;
 0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!