最小汉明距离
Posted
技术标签:
【中文标题】最小汉明距离【英文标题】:Minimum Hamming distance 【发布时间】:2017-03-04 19:10:47 【问题描述】:我几天前开始学习 Python 3,所以如果我的代码很糟糕,我很抱歉。
我编写了一个脚本来查找列表中字符串的最小Hamming distance。现在我将使用的字符串是相同长度的二进制字,所以我的第一个问题是在 Python 中有一个按位的解决方案吗?
其次,我的代码是否正确,如果正确,提高效率的最佳方法是什么?我的搜索没有返回 Python 3 的答案,这就是我在这里问的原因。
def min_ham_dist(a):
min_dist = len(a[0]) # Defaults minimum distance to maximum length of string.
for i in range(len(a)):
for j in range(i+1, len(a)): # Compares all words after ith word.
dist = 0
for k in range(len(a[i])):
if a[i][k] != a[j][k]:
dist += 1
if dist < min_dist:
min_dist = dist
return min_dist
非常感谢
【问题讨论】:
整数可以有任意长度吗?或者它们有最大长度吗? 在这种情况下,它们是固定的。我写这篇文章是为了解决一个包含 16 个长度为 12 的二进制字的列表的相当简单的问题。它应该通过视觉解决,但我觉得最好使用脚本来减少人为错误。不过,很高兴看到适用于任意长度的脚本。 该***页面上有一个简洁明了的 Python 3 示例;) 它基本上显示了完成这项工作所需的条件:如果两个输入字符串的长度相同,请使用zip()
压缩它们,然后比较 zip 中的每一对,计算有多少不相等。
就在我的鼻子前面!我只是链接了***页面以供参考,并没有考虑自己阅读。谢谢你,达特茅斯。
【参考方案1】:
您也可以为此使用 scipy (pdist),但您必须将输入更改为二维数组。它以分数形式返回汉明距离。为此,您需要带数字的字符串(二进制字符串可以):
from scipy.spatial.distance import pdist
def min_ham_dist(a):
return min(pdist([list(i) for i in a], 'hamming'))*len(a[0])
【讨论】:
以上是关于最小汉明距离的主要内容,如果未能解决你的问题,请参考以下文章