Минимальное расстояние Хэмминга

Я начал изучать 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])
Другие вопросы по тегам