2012-11-03 6 views
1

MD5 알고리즘을 사용하여 두 문자열 간의 작은 차이를 어떻게 감지합니까? 몇 가지 큰 문자열 사이의 유사성 백분율을 찾고 싶습니다.MD5 해시 함수

MD5("The quick brown fox jumps over the lazy dog.") 
= e4d909c290d0fb1ca068ffaddf22cbd0 

MD5("The quick brown fox jumps over the lazy dog") 
= 9e107d9d372bb6826bd81d3542a419d6 

당신이 날이 하나 나에게 효율적으로 큰 문자열이나 큰 문서에서 사용할 수있는 또 다른 해시 알고리즘을 제공에 대한 해결책을 줄 수 : 이후 어떻게 나는 그 차이를 확인할 수 있습니까?

+2

* 비슷한 * 항목을 찾는 것은 MD5 또는 해시 기능이 아닙니다. 모든 좋은 해시 함수는 충돌을 줄이는 것이 목표이기 때문에 의도적으로 작은 차이를 확대합니다. 원하는 것은 "편집 거리"라고하는 메트릭으로, 한 문자열을 다른 문자열로 바꾸는 데 필요한 개별 편집의 수를 의미합니다. –

답변

0

문자열이 너무 길면 (전체, 가능한 큰 파일 등) 문자열을 조각으로 나누고 해시 할 수 있으며 일치하는 수를 확인하십시오. 그것은 완전히 신뢰할 수있는 것은 아닙니다.

두 문자열의 대부분이 동일하다고 말하면 아마 정확할 것입니다. 동기화를 유지하는 데 더 많은 시간을 할애하지 않으면 두 가지가 거의 동일 할 때 큰 차이가 있음을 나타낼 수 있습니다. 예를 들어, 순진하게한다면, 한 문자열의 시작 부분에 단일 바이트를 삽입하면 문자열이 완전히 다르다는 것을 나타낼 수 있습니다. 실제로는 다른 하나의 바이트 만 존재합니다.

3

해시는 모두 문자열이 일치하거나 일치하지 않는다고 말할 수 있습니다. Levenshtein distance의 사용을 주장하는이 질문은 이전에 묻어왔다 : How much two strings are similar?(90%,100%,40%). 이 기사에서는 Levenshtein 거리를 사용하고 차이를 파생시키는 방법을 설명합니다. http://www.switchplane.com/blog/improving-search-with-levenshtein-distance.php

+0

나는 이것이 짧은 끈에 대한 것이라고 믿는다. 10.000 단어의 문서와 같은 큰 문자열에 대해서는 답이 필요합니다. –