【发布时间】:2017-07-01 02:54:31
【问题描述】:
我有一个调用距离函数的函数。 distance 函数计算两个输入字符串之间的 Levenshtein 距离算法。我试图找到输入的单词(拼写错误)和要返回的英文单词(使用它作为拼写检查器)之间的最短距离,但我不确定我的 HashMap 是否在速度上让我有所进步。 wordContainer 是一个包含 n 个单词的数组,这是否会让我的查找时间卡在 O(n) 中?
下面是我的代码
private static String findClosestMatch(String word) {
Map<Integer, String> wordAndDistanceMap = new HashMap<>();
wordContainer.forEach(s -> wordAndDistanceMap.put(distance(s, word), s));
return wordAndDistanceMap.get(Collections.min(wordAndDistanceMap.keySet()));
}
【问题讨论】:
-
这是个好人,继续使用它。您必须快速访问这些对象,这需要使用数据结构映射。
-
但是我的查找时间还是O(n)?
-
你想要比 O(n) 更快?
-
O(n) 是可接受的时间复杂度。不好的是 n^2 和其他与此类似的值。所以目前速度很快,需要更快的方法吗?
-
您可能想要的是所有距离最短的单词,但这只给出了一个。使用简单的循环会更有效。
标签: java performance dictionary hashmap big-o