template<typename T>
inline int levenshtein_distance(T* series1, T* series2, int count1, int count2)
{
int count = count2 + 1;
int* map = (int*)_alloca(sizeof(int) * count * 2);
int* p0 = map;
int* p1 = map + count;
for(int y = 0; y < count; ++y) p0[y] = y;
for(int y = 0; y < count1; ++y)
{
p1[0] = y + 1;
T s = series1[y];
for(int x = 0; x < count2; ++x)
{
int t[3];
t[0] = p1[x] + 1;
t[1] = p0[x + 1] + 1;
t[2] = p0[x] + (s != series2[x]);
p1[x + 1] = t[(t[1] < t[0]) * (t[1] < t[2]) + (t[2] < t[0]) * (t[2] <= t[1]) * 2];
}
int* t = p0;
p0 = p1;
p1 = t;
}
return p0[count2];
}
template<typename T>
int levenshtein_distance(T* series1, T* series2)
{
return levenshtein_distance(series1, series2, strlen(series1), strlen(series2));
}
역시 난 천잰가봐. 어떡해 ㅠㅠ
흑왕이가 좋아하겠군.
1만바이트짜리 랜덤 스트링 2 개 계산에 0.6초(2G clocks) 정도 걸리넹.
레반슈타인 거리 문제가 어떤 거임?
레벤스타인이군. 독일어인 건 알았는데 철자 잘못 봤넹.
에이... 천재까진 아닌듯 ㅋㅋ 아뭏든 수고했소!
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.