Минимальное расстояние Хэмминга
Я начал изучать Python 3 несколько дней назад, поэтому, если мой код плохой, я прошу прощения.
Я написал скрипт, чтобы найти минимальное расстояние Хемминга строк в списке. Теперь строки, которые я буду использовать, представляют собой двоичные слова одинаковой длины, поэтому мой первый вопрос - есть ли побитовое решение для этого в 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
Большое спасибо
1 ответ
Вы также можете использовать scipy (pdist) для этого, но вы должны изменить ввод на 2D-массив. возвращает расстояние Хемминга в виде дроби. Для этого вам нужны строки с числами (двоичные строки в порядке):
from scipy.spatial.distance import pdist
def min_ham_dist(a):
return min(pdist([list(i) for i in a], 'hamming'))*len(a[0])