2017-03-04 4 views
0

며칠 전부터 파이썬 3을 배우기 시작 했으므로 코드가 불량하면 사과드립니다.최소 해밍 거리

나는 목록에서 문자열의 최소 Hamming distance을 찾으려면 스크립트를 작성했습니다. 이제 내가 사용할 문자열은 같은 길이의 이진 단어이므로 첫 번째 질문은 파이썬에서이 문제에 대한 비트 식 솔루션이 있습니까?

둘째, 내 코드가 맞는지, 그렇다면 효율을 높이기위한 최선의 방법은 무엇일까요? 내 검색은 파이썬 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 

많은 감사

+0

정수는 임의의 길이를 가질 수 있습니까? 아니면 최대 길이가 있습니까? –

+0

이 경우 고정됩니다. 저는 길이 12의 16 진법 단어 목록으로 상당히 간단한 문제를 해결하기 위해 이것을 작성했습니다. 그것은 시력에 의해 해결되어야한다고 생각되었지만, 사람의 실수를 줄이기위한 스크립트가 가장 좋을 것이라고 느꼈습니다. 스크립트를 임의의 길이에 적용하는 것이 좋을 것입니다. – Necessary

+0

위키 피 디아 페이지에 멋지고 간결한 파이썬 3 예제가 있습니다.) 기본적으로이 작업을 수행하는 데 필요한 것을 보여줍니다. 두 입력 문자열이 같은 길이 인 경우 zip()을 사용하여 압축 한 다음 각 쌍을 비교합니다 지퍼에서 얼마나 많은 사람들이 불평등한지를 유지합니다. – Dartmouth

답변

0

당신은이에 대한 scipy (pdist)을 사용할 수 있지만 2D 배열로 입력을 변경해야합니다. 그것은 해밍 거리를 분수로 반환합니다. 이를 위해서는 숫자가있는 문자열이 필요합니다 (이진 문자열은 괜찮습니다) :