試験の準備をしていますが、実行時間分析で少し問題があります。以下の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) になりますか? 各ハッシュ関数の評価に一定の時間がかかる場合、これを正しい方向に考えていますか?
私が抱えている他の問題はもっと複雑に思えますが、これにどのようにアプローチすればよいか正確にはわかりません。これらが不法行為者であると仮定します。
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;
}
この場合、特定のインデックス値を取得しているだけなので、取得操作は定数であると想定されます。しかし、for ループでは、それをシフトと比較し、すべての要素を反復しています。これは実行時間にどのくらい正確に変換されますか?
私はこのコースで何よりも実行時間分析を理解するのに最も苦労しており、私の最終は来週であるため、有益な説明をいただければ幸いです。