【发布时间】:2013-11-30 17:02:12
【问题描述】:
我有一个小问题。我用 Java 写了一些代码来解决一个问题,但我的解决方案效率不高。
问题是我有一个数组 [][] 与交互,例如
A B
A C
D C
E H
I J
K A
我想找到交互集群。在这个简单的例子中
解决办法应该是:
A B C D K
E H
I J
我写了一些代码,但我的算法效率不高,而且由于真实数据有 552 000 行交互...我等了几个小时没有任何结果...
for (int a = 0; a < vectorSearch.length; a++) {
tempName = vectorSearch[a][0];
ArrayList<String> listSearch = new ArrayList<>();
listSearch.add(tempName);
int min = 0;
int max = 0;
do {
min = listSearch.size();
for (int c = 0; c < listSearch.size(); c++) {
tempName = listSearch.get(c);
for (int b = 0; b < vectorSearch.length; b++) {
if (vectorSearch[b][0].equalsIgnoreCase(tempName)) {
listSearch.add(vectorSearch[b][1]);
}
if (vectorSearch[b][1].equalsIgnoreCase(tempName)) {
listSearch.add(vectorSearch[b][0]);
}
listSearch = removeDuplicates(listSearch); //call a method to delete duplicated, not present here but is working fine
}
}
max = listSearch.size();
System.out.println(max);
System.out.println(min + " " + max);
} while (min != max);
Collections.sort(listSearch);
for (int i = 0; i < listSearch.size(); i++) {
oufx2.format("%s\t", listSearch.get(i));
}
outFile.format("%n");
}
outFile.close();
提前谢谢你
若昂
【问题讨论】:
-
请展示您创建的代码(虽然效率不够),这将有助于了解您在做什么。
-
我们不是读心者。您似乎认为我们知道您所说的“交互”是什么意思,以及为什么解决方案是这样的......我们不知道这些事情中的任何一个。你什么都没解释!
-
Patrick 和 Robin 是对的,您需要更好地定义交互,并让我们了解您迄今为止所做的尝试。说了这么多,我想我明白你的逻辑了。这就是我要开始的地方。仅在数组列表中循环一次,并在进行时构建您的交互列表。根据您的交互列表测试每个数组对,并根据需要进行编辑或添加。
-
添加了代码,交互表示两列中的项目之间存在关系,您可以将其视为同义词。该代码适用于较小的数据集,但考虑到较大的数据集效率低下,它会卡住,甚至几个小时后也无法完成。