嗨,谢谢你的期待!
我有一个包含1900个节点的XML文件,这些节点本身包含大约3400个字符的编码数据字符串。
作为我正在开发的应用程序的用例的一部分,我需要能够在运行时获取“基准”字符串,并从XML文件中找到最接近的匹配。
请注意,XML与应用程序没有密切关系,我可能会继续使用SQL,但就今天而言,我只需要一个容易存储数据并证明其概念的地方。
我使用的是.NET 4.0,C#,表单app,LINQ等。
如何找到最接近的匹配?海明?莱文斯坦?网上有很多代码样本,但大多数是针对小字符串比较(“蚂蚁”与“阿姨”)或完全匹配。我很少会有完全匹配;我只需要最近的匹配。
提前致谢!
马特
答案 0 :(得分:1)
您提到使用 Levenhstein的编辑距离,并且您的字符串长度约为3400个字符。
我做了一个快速尝试并使用Levenhstein的编辑距离的动态编程版本,它似乎非常快并且没有引起任何问题。
我这样做了:
final StringBuilder sb1 = new StringBuilder();
final StringBuilder sb2 = new StringBuilder();
final Random r = new Random(42);
final int n = 3400;
for (int i = 0; i < n; i++) {
sb1.append( (char) ('a' + r.nextInt(26)) );
sb2.append( (char) ('a' + r.nextInt(26)) );
}
final long t0 = System.currentTimeMillis();
System.out.println("LED: " + getLevenshteinDistance(sb1.toString(), sb2.toString()) );
final long te = System.currentTimeMillis() - t0;
System.out.println("Took: " + te + " ms");
从2006年左右开始,Core 2 Duo的距离为215毫秒。
这会对你有用吗?
(顺便说一下,我不确定我是否可以粘贴我在这里的DP LED实现的代码,因此您可能应该在Internet上搜索一个Java实现)