【发布时间】:2014-09-15 16:09:58
【问题描述】:
我从 Visual Studio (Prefer jagged arrays over multidimensional) 得到了这个性能问题。
要替换的代码是“//矩阵”。
我怎样才能用我的代码做到这一点?
public static int LevenshteinDistance(string s, string t)
{
int n = s.Length; //length of s
int m = t.Length; //length of t
int[,] d = new int[n + 1, m + 1]; // matrix
int cost; // cost
// Step 1
if (n == 0) return m;
if (m == 0) return n;
// Step 2
for (int i = 0; i <= n; d[i, 0] = i++) ;
for (int j = 0; j <= m; d[0, j] = j++) ;
// Step 3
for (int i = 1; i <= n; i++)
{
//Step 4
for (int j = 1; j <= m; j++)
{
// Step 5
cost = (t.Substring(j - 1, 1) == s.Substring(i - 1, 1) ? 0 : 1);
// Step 6
d[i, j] = System.Math.Min(System.Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
d[i - 1, j - 1] + cost);
}
}
// Step 7
return d[n, m];
}
【问题讨论】:
-
那么你的问题是什么?
-
@Servy 我的问题是,如何将数组转换为锯齿状数组。 “int[,] d = 新的 int[n + 1, m + 1];” --> ?
-
您对如何创建锯齿状数组进行了哪些研究,在实施研究中发现的解决方案时遇到了哪些问题?
-
"我遇到了这个性能问题" 是什么让您相信性能问题与将数据表示为多维非锯齿状数组有关?据我所知,这是一个不平凡的算法,所以我不期望表示支配它的时间。
-
在这个非常特殊的情况下,您可以使用 2 个一维数组(参见 Levenshtein distance,使用两个矩阵行迭代)而不是二维数组来实现 Levenshtein 距离。这将空间需求从 n*m 减少到 n+m,并且您不需要使用多维数组。
标签: c# multidimensional-array jagged-arrays