2015-11-16 132 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))