【问题标题】:JAVA search methodJAVA搜索方法
【发布时间】: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 是对的,您需要更好地定义交互,并让我们了解您迄今为止所做的尝试。说了这么多,我想我明白你的逻辑了。这就是我要开始的地方。仅在数组列表中循环一次,并在进行时构建您的交互列表。根据您的交互列表测试每个数组对,并根据需要进行编辑或添加。
  • 添加了代码,交互表示两列中的项目之间存在关系,您可以将其视为同义词。该代码适用于较小的数据集,但考虑到较大的数据集效率低下,它会卡住,甚至几个小时后也无法完成。

标签: java search methods


【解决方案1】:

我想我会通过首先为每个唯一项目创建一个集合来解决它,然后循环交互并合并交互的两个部分所属的集合,如下所示:

  1. 首字母:{A}、{B}、{C}、{D}、{E}、{H}、{I}、{J}、{K}
  2. 交互 A B 后:{A, B}, {C}, {D}, {E}, {H}, {I}, {J}, {K}
  3. 交互 A C 后:{A, B, C}, {D}, {E}, {H}, {I}, {J}, {K}
  4. 交互后 D C: {A, B, C, D}, {E}, {H}, {I}, {J}, {K}
  5. 交互后 E H: {A, B, C, D}, {E, H}, {I}, {J}, {K}
  6. 交互后 I J:{A, B, C, D}, {E}, {H}, {I, J}, {K}
  7. 交互 K A 后:{A、B、C、D、K}、{E}、{H}、{I}、{J}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多