【发布时间】:2017-08-10 04:16:22
【问题描述】:
我有一个非常大的字符串数组(32k 字左右),我想以一种有效的方式检查整个数组的相似性。我希望它以百分比返回。我也不知道阵列中有多少个点。我不知道最有效的方法是什么。我目前的想法是检查数组中每两个单词之间的相似度,然后平均该相似度。我希望找到一个更有效的解决方案。 这是我迄今为止尝试过的:
import java.util.*;
import org.apache.commons.lang3.StringUtils;
public class Trial2 {
public static void main(String[] args) {
ArrayList<Double> averageValues = new ArrayList<>();
ArrayList<String> temp = new ArrayList<>(); //holds all the words in the list
for(int i = 0; i < temp.size() - 1; i++) {
double k = StringUtils.getLevenshteinDistance(temp.get(i), temp.get(i + 1));
averageValues.add(k/(double)temp.get(i).length())
}
double average;
for(int i = 0; i < averageValues.size(); i++) {
average += averageValues.get(i);
}
average = average/averageValues.size();
}
}
假设我的临时列表已经满了。这段代码的问题在于它已经嵌入了 2 个 forloops,我不想点击 n^3。有没有其他方法可以解决这个问题
请帮忙。
【问题讨论】:
-
到目前为止你尝试过什么?你被困在哪里了?现在,它读作“为我写这段代码”,这与 StackOverflow 无关。另外:这不是大数据问题(我编辑了那个标签)。请在最终关闭之前用更多细节编辑您的问题。
-
对不起,我让它看起来那样。我只是想指出写的方向,而不是让别人为我写代码。
标签: java similarity