我正在爲我的考試做準備,並且在運行時分析上有點麻煩。我具有低於2點的方法我關於運行時間分析困惑:使用幾種方法計算運行時間分析
public boolean findDuplicates(String [] arr) {
Hashtable<String,String> h = new Hashtable<String,String>();
for (int i = 0; i < arr.length; i++) {
if (h.get(arr[i]) == null)
h.put(arr[i], arr[i]);
else
return true;
}
return false;
}
假設散列函數只需要O(1)上的任意鍵,將在運行時簡單地是O(N)由於在最壞的情況,貫穿整個陣列?我是否按照正確的思路思考這個問題,如果每個散列函數需要不斷的時間來評估?
我有另一個問題似乎更復雜,我不知道如何處理這個問題。假設這些是arrarlists。
public boolean makeTranslation(List<Integer> lst1, List<Integer> lst2) {
//both lst1 and lst2 are same size and size is positive
int shift = lst1.get(0) - lst2.get(0);
for (int i = 1; i < lst1.size(); i++)
if ((lst1.get(i) - lst2.get(i)) != shift)
return false;
return true;
}
在這種情況下,get操作應該是不變的,因爲我們只是檢索一個特定的索引值。但是在for循環中,我們將它與移位進行比較並遍歷所有元素。這究竟如何轉化爲運行時間?
一個有用的解釋將非常感謝,因爲我對理解運行時間分析的難度最大,而不是本課程中的任何內容,而且我的決賽將在下週舉行。
非常感謝,我很高興至少我正在考慮沿着正確的路線。因此,不管有多少個O(n)操作,如果它們沒有相互嵌套,總的複雜度仍然是O(n) – Paul