java将不同集合中的元素配对:如何避免深嵌套for循环?
我在试图解决遇到的一个图形地形问题时,突然发现自己正在编写一段我见过的最可怕的代码。在我深入讨论细节之前,让我先明确一个问题:我有大量的嵌套循环/条件,我想知道是否有办法避免它
我有以下物品可供使用:
一个
Dataset
是一个特定实验的数据点集合。这些数据点包含与Set
有(1->;许多)关系的Element
(大约2-5K大小的元素)A
Database
是所有Element
和Set
的参考,无论它们是否在实验中被观察到。此外,该对象还有用于数据检索的方法。。(约30K件,10K套)基于数据集(#1)评估的
Set
的集合
我想做的是构建一个以Element
作为节点,以Set
成员关系作为边的图
示例: 取两个元素,e1和e2。假设e1是集合的成员:S1、S2和S4;而e2是S1、S3和S4的成员。在这种情况下,e1和e2之间应该有两条边,它们代表集合S1和S4
请注意Dataset
对象通常包含Element
中存在于Database
中的一小部分Element
,因此在上面的示例中,有大量其他元素不应该出现在图中(因为它们不在Dataset
中),即使它们是相关集合的成员
考虑到这个问题,我的“简单”(阅读:naive)解决方案(伪代码)是循环:
- 数据集-->
for (data d : dataset)
- 集合
d
是-->for(set s : database.getSetsWith(d))
- 元素
s
-->for (elem e : s.getElements())
- 数据集中的其余元素-->
for(data dx : dataset - d)
如果两个元素是集合s
的一部分,则创建(d, dx)
对
这个解决方案由4个嵌套的for
循环和一个深入到最终配对的条件检查组成。它丑陋、缓慢,而且容易引发问题。但我不确定我还能做什么
建议
参考:
共 (0) 个答案