两个二进制字符串之间的汉明距离不起作用
Hamming distance between two binary strings not working
我在 this 网站上发现了一个计算汉明距离的有趣算法:
def hamming2(x,y):
"""Calculate the Hamming distance between two bit strings"""
assert len(x) == len(y)
count,z = 0,x^y
while z:
count += 1
z &= z-1 # magic!
return count
关键是这个算法只适用于位串,我正在尝试比较两个二进制字符串,但它们是字符串格式,比如
'100010'
'101000'
我怎样才能让他们使用这个算法?
实施它:
def hamming2(s1, s2):
"""Calculate the Hamming distance between two bit strings"""
assert len(s1) == len(s2)
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
并测试它:
assert hamming2("1010", "1111") == 2
assert hamming2("1111", "0000") == 4
assert hamming2("1111", "1111") == 0
如果我们要坚持原来的算法,我们需要将字符串转换为整数才能使用按位运算符。
def hamming2(x_str, y_str):
"""Calculate the Hamming distance between two bit strings"""
assert len(x_str) == len(y_str)
x, y = int(x_str, 2), int(y_str, 2) # '2' specifies we are reading a binary number
count, z = 0, x ^ y
while z:
count += 1
z &= z - 1 # magic!
return count
那么我们可以这样调用:
print(hamming2('100010', '101000'))
虽然这个算法作为一个新奇的东西很酷,但必须转换为字符串可能会抵消它可能具有的任何速度优势。 @dlask 发布的答案更加简洁。
我认为这很好地解释了两个字符串之间的 The Hamming distance
def hammingDist(s1, s2):
bytesS1=bytes(s1, encoding="ascii")
bytesS2=bytes(s2, encoding="ascii")
diff=0
for i in range(min(len(bytesS1),len(bytesS2))):
if(bytesS1[i]^bytesS2[i]!=0):
diff+=1
return(diff)
这是我用来计算汉明距离的。
它计算等长字符串之间的差异数。
def hamdist(str1, str2):
diffs = 0
for ch1, ch2 in zip(str1, str2):
if ch1 != ch2:
diffs += 1
return diffs
我在 this 网站上发现了一个计算汉明距离的有趣算法:
def hamming2(x,y):
"""Calculate the Hamming distance between two bit strings"""
assert len(x) == len(y)
count,z = 0,x^y
while z:
count += 1
z &= z-1 # magic!
return count
关键是这个算法只适用于位串,我正在尝试比较两个二进制字符串,但它们是字符串格式,比如
'100010'
'101000'
我怎样才能让他们使用这个算法?
实施它:
def hamming2(s1, s2):
"""Calculate the Hamming distance between two bit strings"""
assert len(s1) == len(s2)
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
并测试它:
assert hamming2("1010", "1111") == 2
assert hamming2("1111", "0000") == 4
assert hamming2("1111", "1111") == 0
如果我们要坚持原来的算法,我们需要将字符串转换为整数才能使用按位运算符。
def hamming2(x_str, y_str):
"""Calculate the Hamming distance between two bit strings"""
assert len(x_str) == len(y_str)
x, y = int(x_str, 2), int(y_str, 2) # '2' specifies we are reading a binary number
count, z = 0, x ^ y
while z:
count += 1
z &= z - 1 # magic!
return count
那么我们可以这样调用:
print(hamming2('100010', '101000'))
虽然这个算法作为一个新奇的东西很酷,但必须转换为字符串可能会抵消它可能具有的任何速度优势。 @dlask 发布的答案更加简洁。
我认为这很好地解释了两个字符串之间的 The Hamming distance
def hammingDist(s1, s2):
bytesS1=bytes(s1, encoding="ascii")
bytesS2=bytes(s2, encoding="ascii")
diff=0
for i in range(min(len(bytesS1),len(bytesS2))):
if(bytesS1[i]^bytesS2[i]!=0):
diff+=1
return(diff)
这是我用来计算汉明距离的。
它计算等长字符串之间的差异数。
def hamdist(str1, str2):
diffs = 0
for ch1, ch2 in zip(str1, str2):
if ch1 != ch2:
diffs += 1
return diffs