Hamming Distance

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.算法

Given two integers x and y, calculate the Hamming distance.函數

Note:
0 ≤ xy < 231.學習

Example:編碼

Input: x = 1, y = 4

Output: 2

Explanation:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

The above arrows point to positions where the corresponding bits are different.


Python3spa

 1 class Solution:
 2     def hammingDistance(self, x, y):
 3         """
 4         :type x: int
 5         :type y: int
 6         :rtype: int
 7         """
 8         return bin(x^y).count('1')
 9         
10         # 0. 過程分析
11         # 1. bin(integer )內置函數,將一個整數轉化爲一個二進制字符串。
12         # 2. ^按位異或運算符:當兩對應的二進位相異時,結果爲1
13         # 3. count('1')統計'1'出現的次數
14         
15         # 4. 進價
16         # 5. 位運算符的學習
17         # 6. Hamming distance的應用場景

 

位運算符code

運算符 描述 實例
& 按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 (a & b) 輸出結果 12 ,二進制解釋: 0000 1100
| 按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 (a | b) 輸出結果 61 ,二進制解釋: 0011 1101
^ 按位異或運算符:當兩對應的二進位相異時,結果爲1 (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001
~ 按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 。~x 相似於 -x-1 (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011,在一個有符號二進制數的補碼形式。
<< 左移動運算符:運算數的各二進位所有左移若干位,由 << 右邊的數字指定了移動的位數,高位丟棄,低位補0。 a << 2 輸出結果 240 ,二進制解釋: 1111 0000
>> 右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,>> 右邊的數字指定了移動的位數 a >> 2 輸出結果 15 ,二進制解釋: 0000 1111

 

Hamming distance應用場景blog

漢明距離是以理查德·衛斯里·漢明的名字命名的,漢明在偏差檢測與校訂碼的基礎性論文中首次引入這個概念。在通訊中累計定長二進制字中發生翻轉的錯誤數據位,因此它也被稱爲信號距離。
漢明距離更多的用於信號處理,代表一個信號變成另外一個信號須要的最小操做(替換位),實際中就是比較兩個比特串有多少個位不同,簡潔的操做時就是兩個比特串進行異或以後包含1的個數。漢明距在圖像處理領域也有這普遍的應用,是比較二進制圖像很是有效的手段。計算一個數字的比特位包含1的個數有個小技巧:value &= value - 1這個運算的結果就是把value最後一個1去掉,循環進行運算直到value等於0(全部的1都被去掉)就能夠知道vaule擁有多少個1了。其在包括信息論、編碼理論、密碼學等領域都有應用。可是,若是要比較兩個不一樣長度的字符串,不只要進行替換,並且要進行插入與刪除的運算,在這種場合下,一般使用更加複雜的編輯距離等算法。
相關文章
相關標籤/搜索