0
對象我有以下判定表:爪哇 - 比較算法
我的任務是相互比較使用設置choosen屬性的所有對象(S1,S2,S3 ...)(例如{ 距離,容量})。所以要實現這個,我必須創建兩個LOOPS(一個嵌套)並使用IF條件。
當設置的對象很小時,一切正常。但是當設置很大時(例如10000個對象),這種解決方案的性能越來越差......
這是另一種更快,更「更智能」的方式嗎?
對象我有以下判定表:爪哇 - 比較算法
我的任務是相互比較使用設置choosen屬性的所有對象(S1,S2,S3 ...)(例如{ 距離,容量})。所以要實現這個,我必須創建兩個LOOPS(一個嵌套)並使用IF條件。
當設置的對象很小時,一切正常。但是當設置很大時(例如10000個對象),這種解決方案的性能越來越差......
這是另一種更快,更「更智能」的方式嗎?
僞代碼:
步驟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))
你的輸出到底是什麼?你在排序? – ergonaut
你需要告訴我們更多關於整個算法的目的是什麼。如果你想比較所有的對象,沒有比嵌套'for'循環更好的方式,因此二次運行時間也是如此。問題是,你是否真的需要比較所有可能的對象或者你需要某種排序? –
示例:當屬性設置爲{容量,要求}時,輸出可能是{{S5,S6},{S1,S4}} 排序:如何在這種情況下進行運動? – Wicia