Algorithm/미분류2012. 6. 27. 12:37

LevenshtainDistance는 두 문자열간의 유사성을 측정하기 위해 사용된다.

spell checking, DNA 유사성 검사, 음성인식, handwriting 인식 등에 사용된다고한다.


이론적인 내용은 위키피디아에서 찾아볼 수 있다.

LevenshtainDistance




코드...



#include <iostream>

#include <cstring> // strlen 사용

using namespace std;


class LevenshtainDistance

{

private:

static int min(int a, int b, int c);

public:

static int LD(char *s, char *t);

};

int LevenshtainDistance::min(int a, int b, int c)

{

int m = a;

if (b < m) m = b;

if (c < m) m = c;

return m;

}

int LevenshtainDistance::LD(char *s, char *t)

{

int slen = strlen(s), tlen = strlen(t);

int i, j;

int cost;

int **d = new int*[slen + 1];


for (i = 0; i <= slen; ++i) d[i] = new int[tlen + 1];

if (slen == 0) return tlen;

if (tlen == 0) return slen;


for (i = 0; i <= slen; ++i) d[i][0] = i;

for (i = 0; i <= tlen; ++i) d[0][i] = i;


for (i = 1; i <= slen; ++i)

{

for (j = 1; j <= tlen; ++j)

{

if (s[i - 1] == t[j - 1]) cost = 0;

else cost = 1;

d[i][j] = min(d[i - 1][j] + 1,

d[i][j - 1] + 1,

d[i - 1][j - 1] + cost);

}

}

int dis = d[slen][tlen];

for (i = 0; i <= slen; ++i)

delete d[i];

delete d;


return dis;

}


int main()

{

char *s = "GUMBO";

char *t = "GAMBOL";

cout << LevenshtainDistance::LD(s, t) << endl;

return 0;

}


코드 출처 : 실생활 문제로 접근하는 자료구조와 알고리즘 - 김종현 [내하출판사]

'Algorithm > 미분류' 카테고리의 다른 글

Warshall 알고리즘  (0) 2012.07.03
순열나열 (Permutation)  (0) 2012.06.26
Posted by 투명테잎