2015-11-16 103 views
0

对象我有以下判定表:爪哇 - 比较算法

Decision table

我的任务是相互比较使用设置choosen属性的所有对象(S1,S2,S3 ...)(例如{ 距离,容量})。所以要实现这个,我必须创建两个LOOPS(一个嵌套)并使用IF条件。

当设置的对象很小时,一切正常。但是当设置很大时(例如10000个对象),这种解决方案的性能越来越差......

这是另一种更快,更“更智能”的方式吗?

+0

你的输出到底是什么?你在排序? – ergonaut

+2

你需要告诉我们更多关于整个算法的目的是什么。如果你想比较所有的对象,没有比嵌套'for'循环更好的方式,因此二次运行时间也是如此。问题是,你是否真的需要比较所有可能的对象或者你需要某种排序? –

+0

示例:当属性设置为{容量,要求}时,输出可能是{{S5,S6},{S1,S4}} 排序:如何在这种情况下进行运动? – Wicia

回答

1

伪代码:

步骤1. HashMap<String, ArrayList<String>> hashMap = new HashMap<>();
步骤2.对于每个对象S做

String key = getSelectedAttributesValueInString(); 
if (!hashMap.containsKey(key)) { 
    hashMap.put(key, new ArrayList<String>()); 
} 
hashMap.get(key).add(s.getName); 

这里getSelectedAttributesValueInString是所有选择的属性值的串联。

例如:对象s1属性{Distance, Capacity}函数返回ShortYES

第3步:现在打印具有长度大于1

复杂度分析的更大的HashMap的ArrayList的值:

你的方法为O(n^2)

我的方法为O(n )(因为HashMap的添加和得到的复杂度是O(1))