Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 빅데이터
  • 데이터사이언스
  • 선형대수학
  • AI
  • 데이터
  • TensorFlow
  • 인공지능
  • pytorch
  • PYTHON
  • 파이썬기초
  • 코딩테스트
  • MariaDB
  • 프로그래밍
  • 객체지향
  • 머신러닝
  • 프로그래머스
  • class
  • 하둡
  • 데이터베이스
  • 백준
  • 객체
  • 자료구조
  • sql
  • 알고리즘
  • 딥러닝
  • mysql
  • 코테
  • 선형대수
  • Baekjoon

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

인공지능

[python] 해밍 거리 (Hamming Distance) - 동적 계획법

2022. 12. 31. 23:36
반응형

해밍 거리 (Hamming Distance)

해밍 거리는 문자열 사이의 거리를 정의하는 가장 심플한 방법입니다.

 

동적 프로그래밍에서 Edit distance를 배울 때 같이 익히는 거리 계산법 중 하나인데요.

 

해밍거리는 문자열에 포함된 문자를 앞에서부터 하나씩 비교하여 몇 개나 다른가를 출력하는 거리 함수 입니다.

 

예제를 살펴보겠습니다 

 

123456789 vs 023456789   =>  1개의 문자열이 다름 (0과 1)

ILOVEYOU  vs  YLOVEIOU   =>  2개의 문자열이 다름 (I &  Y의 위치가 다름)

 

보시다시피 간단한 거리 계산 방법입니다.

 

이를 파이썬의 scipy 패키지를 이용하여 구현해보겠습니다.

 

# 해밍 거리 활용 예제

from scipy.spatial import distance

sample_string1 = list('iloveyou')
sample_string2 = list('yloveiou')  # y와 i의 위치 변경

print('First sample string --> ', sample_string1)  
print('Second sample string --> ', sample_string2)
# --- 출력물 ----
# First sample string -->  ['i', 'l', 'o', 'v', 'e', 'y', 'o', 'u']
# Second sample string -->  ['y', 'l', 'o', 'v', 'e', 'i', 'o', 'u']
# --------------


# 해밍거리 계산
distance.hamming(sample_string1, sample_string2) * len(sample_string1)

# ---- 출력물 ----- 
# [output] 2.0

 

해밍 거리의 단점

해밍 거리는 쉽고 빠른 거리계산 방법이지만, 문자열을 해밍 거리로 계산하면, 우리가 직관적으로 인식하는 것보다 거리 차이가 많이 나는 경우가 종종 생깁니다.

 

예를 들면, 

'ILOVEYOU' 라는 문자열과 'LOVEYOU' 라는 문자열은 I 하나만 빠진 것임에도 불구하고, 해밍 거리가 8입니다.

왜냐하면  전체 문자열에서 다르기 때문이죠 

I와 L이 다르고,  (ILOVEYOU  vs  LOVEYOU)

L과 O가 다르고  (ILOVEYOU  vs  LOVEYOU)  

... (이하 생략)

 

모든 문자열에서 다르기 때문에 해밍거리는 +1씩 카운팅이 됩니다.

 

이를 극복할 수 있는 거리 계산법중 하나가 바로 편집 거리입니다.

 

편집 거리는 다음 포스팅에서 설명하겠습니다.

 

반응형
저작자표시 (새창열림)

'인공지능' 카테고리의 다른 글

[python] 기본적인 탐색 알고리즘 2 - BFS  (0) 2022.12.31
[python] 기본적인 탐색 알고리즘 1 - DFS  (0) 2022.12.31
[인공지능] 프레임 문제 (Frame Issue)  (0) 2022.12.23
[인공지능] Strong AI vs Weak AI  (0) 2022.12.23
    '인공지능' 카테고리의 다른 글
    • [python] 기본적인 탐색 알고리즘 2 - BFS
    • [python] 기본적인 탐색 알고리즘 1 - DFS
    • [인공지능] 프레임 문제 (Frame Issue)
    • [인공지능] Strong AI vs Weak AI
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바