有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将不同集合中的元素配对:如何避免深嵌套for循环?

我在试图解决遇到的一个图形地形问题时,突然发现自己正在编写一段我见过的最可怕的代码。在我深入讨论细节之前,让我先明确一个问题:我有大量的嵌套循环/条件,我想知道是否有办法避免它

我有以下物品可供使用:

  1. 一个Dataset是一个特定实验的数据点集合。这些数据点包含与Set有(1->;许多)关系的Element(大约2-5K大小的元素)

  2. A Database是所有ElementSet的参考,无论它们是否在实验中被观察到。此外,该对象还有用于数据检索的方法。。(约30K件,10K套)

  3. 基于数据集(#1)评估的Set的集合

我想做的是构建一个以Element作为节点,以Set成员关系作为边的图

示例: 取两个元素,e1e2。假设e1是集合的成员:S1S2S4;而e2S1S3S4的成员。在这种情况下,e1e2之间应该有两条边,它们代表集合S1S4

请注意Dataset对象通常包含Element中存在于Database中的一小部分Element,因此在上面的示例中,有大量其他元素不应该出现在图中(因为它们不在Dataset中),即使它们是相关集合的成员

考虑到这个问题,我的“简单”(阅读:naive)解决方案(伪代码)是循环:

  1. 数据集-->for (data d : dataset)
  2. 集合d是-->for(set s : database.getSetsWith(d))
  3. 元素s-->for (elem e : s.getElements())
  4. 数据集中的其余元素-->for(data dx : dataset - d)

如果两个元素是集合s的一部分,则创建(d, dx)

这个解决方案由4个嵌套的for循环和一个深入到最终配对的条件检查组成。它丑陋、缓慢,而且容易引发问题。但我不确定我还能做什么

建议


参考:


共 (0) 个答案