2013-03-21 2 views
6

나는 대답과 추측 사이 Levenshtein's distance를 계산 코드의이 비트 발견Levenshtein 거리 C# 카운트 오류 유형

int CheckErrors(string Answer, string Guess) 
{ 
    int[,] d = new int[Answer.Length + 1, Guess.Length + 1]; 
    for (int i = 0; i <= Answer.Length; i++) 
     d[i, 0] = i; 
    for (int j = 0; j <= Guess.Length; j++) 
     d[0, j] = j; 
    for (int j = 1; j <= Guess.Length; j++) 
     for (int i = 1; i <= Answer.Length; i++) 
      if (Answer[i - 1] == Guess[j - 1]) 
       d[i, j] = d[i - 1, j - 1]; //no operation 
      else 
       d[i, j] = Math.Min(Math.Min(
        d[i - 1, j] + 1, //a deletion 

        d[i, j - 1] + 1), //an insertion 

        d[i - 1, j - 1] + 1 //a substitution 

       ); 
    return d[Answer.Length, Guess.Length]; 
} 

을하지만 각각의 오류가 발생하는 시간의 양에 대한 계산을 할 수있는 방법이 필요합니다. 거기에 구현할 수있는 쉬운 방법이 있습니까? 당신은 각 작업에 대한 카운터를 추가 할 수 있습니다 같은

답변

4

이 보인다 :

   if (Answer[i - 1] == Guess[j - 1]) 
        d[i, j] = d[i - 1, j - 1]; //no operation 
       else 
       { 
        int del = d[i-1, j] + 1; 
        int ins = d[i, j-1] + 1; 
        int sub = d[i-1, j-1] + 1; 
        int op = Math.Min(Math.Min(del, ins), sub); 
        d[i, j] = op; 
        if (i == j) 
        { 
         if (op == del) 
          ++deletions; 
         else if (op == ins) 
          ++insertions; 
         else 
          ++substitutions; 
        } 
       } 
+0

내가 "안녕하세요"와 예와 함께이 시도했다가 올바른지 때 "안녕하세요"하고 삭제 및 삽입 위로 추가합니다. 이것은 제가이 비트가 정확히 작동하는지 확신 할 필요가없는 일종의 것입니다! – user1988332

+0

"hello"가 올바른 경우 삭제와 삽입 모두 숫자 9를 내뱉습니다. – user1988332

+0

기본적인 문제는 내가 무슨 일이 있었는지 오해 한 것입니다. 코드에서'i == j '일 때만 삭제, 삽입 등을 증가시키고 싶을 것입니다. 적어도 나는 그것이 문제라고 생각한다. 당신은 그것으로 실험해야 할 수도 있습니다. 나는 내 코드를 변경했다. –

관련 문제