Total Hamming Distance

 1 class Solution(object):
 2     def totalHammingDistance(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: int
 6         """
 7         bin_num = ["{0:b}".format(num) for num in nums]
 8         zip_list = []
 9         for i in range(len(bin_num)):
10             for k in zip(bin_num, bin_num[i:]):
11                 zip_list.append(k)
12         count = 0
13         len_list = []
14         for x in zip_list:
15             for i in range(2):
16                 len_list.append(len(x[i]))
17         max_len = max(len_list)
18         zip_c = []
19         for c in zip_list:
20             tuple_to_list = list(c)
21             for i in range(2):
22                 if len(tuple_to_list[i]) < max_len:
23                     byte_num = max_len-len(c[i])
24                     tuple_to_list[i] = '0' * byte_num + str(tuple_to_list[i])
25             zip_c.append(tuple_to_list)
26         for new_c in zip_c:
27                 for j in range(max_len):
28                     if new_c[0][j] != new_c[1][j]:
29                         count = count+1
30         return count

更简便如下:

def totalHammingDistance(self, nums):
    return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums)))

$\overline r_a + \frac{\sum_{b\in N}\quad  sim(a, b)*(r_{b, P}\qquad  - \overline  r_{\qquad b})}{\sum_{b\in  N} \quad sim(a, b)}$

 

posted @ 2017-11-06 13:53  andreaxgz  阅读(152)  评论(0编辑  收藏  举报