Возможно, вас заинтересует библиотека google-diff-match-patch в Google Code.У них есть реализация алгоритма сравнения Майера, и он также утверждает, что реализует алгоритм Bitap «в самом сердце».
Он имеет источник C #, который вы ищете, а также реализации на Java, C ++, Lua & Python.Хотя у меня нет лучшего понимания того, как использовать Bitap на практике (в проекте Google Code есть демонстрационные примеры), я думаю, что вас больше всего заинтересуют функции соответствия, начиная со строки 1476 текущей версии .
ОБНОВЛЕНИЕ:
Небольшое копание нашло реализацию Левенштейна в C # на CodeProject.
Также, этот файл класса C # содержит реализацию Левенштейна на SourceForge.Реализация является частью проекта Corsis (он же Tenka Text).Автор утверждает, что метод YetiLevenshtein (около строки 741) в 2-10 раз быстрее, чем реализация, используемая в версии CodeProject алгоритма, на который есть ссылки выше.
UPDATE # 2:
Я только что обнаружил реализацию алгоритма wikibook с его версией Levenshtein Distance на C # и должен был включить ее, потому что она выглядит довольно прямо и точно.Этот викибук выглядит как отличный справочник, чтобы держать его под рукой в целом.
Расстояние Левенштейна в C # (любезно предоставлено Wikibooks)
private Int32 levenshtein(String a, String b)
{
if (string.IsNullOrEmpty(a))
{
if (!string.IsNullOrEmpty(b))
{
return b.Length;
}
return 0;
}
if (string.IsNullOrEmpty(b))
{
if (!string.IsNullOrEmpty(a))
{
return a.Length;
}
return 0;
}
Int32 cost;
Int32[,] d = new int[a.Length + 1, b.Length + 1];
Int32 min1;
Int32 min2;
Int32 min3;
for (Int32 i = 0; i <= d.GetUpperBound(0); i += 1)
{
d[i, 0] = i;
}
for (Int32 i = 0; i <= d.GetUpperBound(1); i += 1)
{
d[0, i] = i;
}
for (Int32 i = 1; i <= d.GetUpperBound(0); i += 1)
{
for (Int32 j = 1; j <= d.GetUpperBound(1); j += 1)
{
cost = Convert.ToInt32(!(a[i-1] == b[j - 1]));
min1 = d[i - 1, j] + 1;
min2 = d[i, j - 1] + 1;
min3 = d[i - 1, j - 1] + cost;
d[i, j] = Math.Min(Math.Min(min1, min2), min3);
}
}
return d[d.GetUpperBound(0), d.GetUpperBound(1)];
}