मैंने जावा कोड में लेवेनशेटिन दूरी की गणना करने के लिए लिखे गए सी # कोड के एक टुकड़े का अनुवाद करने की स्वतंत्रता ली है। यह केवल दो एकल-आयाम सरणियों कि एक बड़ा दांतेदार सरणी के बजाय वैकल्पिक उपयोग करता है:
public static int getDifference(String a, String b)
{
// Minimize the amount of storage needed:
if (a.length() > b.length())
{
// Swap:
String x = a;
a = b;
b = x;
}
// Store only two rows of the matrix, instead of a big one
int[] mat1 = new int[a.length() + 1];
int[] mat2 = new int[a.length() + 1];
int i;
int j;
for (i = 1; i <= a.length(); i++)
mat1[i] = i;
mat2[0] = 1;
for (j = 1; j <= b.length(); j++)
{
for (i = 1; i <= a.length(); i++)
{
int c = (a.charAt(i - 1) == b.charAt(j - 1) ? 0 : 1);
mat2[i] =
Math.min(mat1[i - 1] + c,
Math.min(mat1[i] + 1, mat2[i - 1] + 1));
}
// Swap:
int[] x = mat1;
mat1 = mat2;
mat2 = x;
mat2[0] = mat1[0] + 1;
}
// It's row #1 because we swap rows at the end of each outer loop,
// as we are to return the last number on the lowest row
return mat1[a.length()];
}
यह कठोर परीक्षण नहीं है, लेकिन यह ठीक काम कर रहा है। यह एक विश्वविद्यालय अभ्यास के लिए किए गए पायथन कार्यान्वयन पर आधारित था। उम्मीद है की यह मदद करेगा!
स्रोत
2009-05-25 21:50:00
हे, मैं उलझन में था और गलत फोकस पर जोर देने के लिए शीर्षक संपादित किया था - प्रश्न शायद आखिरकार एक स्ट्रिंग दूरी एक है, जैसा कि स्वीकार किए गए उत्तर से पता चलता है। – icedwater