5
パワープログラミング:O(1 ^ N)、O(N ^ 1)、O(2 ^ N)、O(N ^ 2)をすべて1つに
実行方法に応じて、4つの一般的な大きなO 時間の複雑さを示すプログラム(または関数)を作成します。どのような形式でも、正の整数Nを取りますが、これは2 31より小さいと仮定できます。 プログラムを元の形式で実行する場合、一定の複雑さが必要です。つまり、複雑度はΘ(1)または同等にΘ(1 ^ N)でなければなりません。 プログラムを反転して実行すると、線形の複雑さが生じるはずです。つまり、複雑さはΘ(N)または同等にΘ(N ^ 1)でなければなりません。 (これN^1は1^N逆になっているので理にかなっています。) プログラムが2倍になった場合、つまり、プログラム自体に連結されて実行される場合、指数関数的な複雑さ、特に2 Nが必要です。つまり、複雑さはΘ(2 ^ N)でなければなりません。 (ので、これは理にかなっている2では2^N二重のある1中1^N)。 プログラムを2倍にして反転して実行すると、多項式の複雑さ、特にN 2が必要になります。つまり、複雑さはΘ(N ^ 2)でなければなりません。 (これN^2は2^N逆になっているので理にかなっています。) これらの4つのケースは、処理する必要がある唯一のケースです。 プログラムの実行時間は必要な複雑さによって上下に制限される必要があるため、正確さのために、大きなOではなく大きなシータ(Θ)表記を使用していることに注意してください。それ以外の場合、O(1)で関数を記述するだけで、4つのポイントがすべて満たされます。ここでニュアンスを理解することはそれほど重要ではありません。主に、プログラムが定数kに対してk * f(N)操作を実行している場合、Θ(f(N))にある可能性があります。 例 元のプログラムが ABCDE 実行には一定の時間がかかります。つまり、入力Nが1でも2147483647(2 31 -1)でも、その間の値でも、ほぼ同じ時間で終了するはずです。 プログラムの逆バージョン EDCBA つまり、終了にかかる時間はNにほぼ比例する必要があります。したがって、N = 1が最も時間がかかり、N = 2147483647が最も時間がかかります。 プログラムの倍増バージョン ABCDEABCDE Nに関して2からN時間かかるはずです。つまり、終了するのに要する時間は2 Nにほぼ比例するはずです。したがって、N = 1が約1秒で終了する場合、N = 60は宇宙の年齢よりも長い時間がかかります。(いいえ、テストする必要はありません。) プログラムの二重化および反転バージョン EDCBAEDCBA つまり、終了にかかる時間は、N * Nにほぼ比例するはずです。したがって、N …