はこの質問によるとTime complexity to convert a decimal to another base時間計算有界入力
答えの一つが
は、厳密に言えば、答えはO(1)であると述べています。
整数が任意の精度をサポートする整数型の場合、 は明らかにO(logN)になります。
しかし、そうではありません! intは、 2^31 - 1 ...または約20億のInteger.MAX_INTよりも大きくなることはありません。
したがって、N(無限大の整数)を無限大にすると、 の値は、Integer.MAX_INTを決して超えないようにラップアラウンドします。これは、例えば基数が10の場合、whileループは最大で log10(2^31)回(つまり10回)...実行可能であり、convertToBaseはO(1)であることを意味する を意味します。十分に小さなN.ためしかし
、あなたは専門用語/表記を乱用する用意があるならば、あなたは はそれがあると言うことができるO(logN個)
これはと定義した場合、すべてのアルゴリズムと思うように私を導きましたpublic myAlgorithm (int i)
は制限されますか? 0
からn
に文字列を出力する必要があるとします。
コードはちょうど
public myAlgorithm (int n) {
for (int i = 0; i <=n ; i++) System.out.println(i);
}
になりますこれは明らかにO(n)の右ですか?しかし、私たちはそれをO(1)と呼ぶために "境界"の引数を使うことができます。
私はこの時間の複雑さにどのようにアプローチすべきかについて誰かが私に明確な洞察を与えることができますか?
ありがとうございました!今、私は、ベースコンバージョンのための実際の時間複雑さが何であるか分からなくなっています! – Zanko
これはO(log N)になります。 –