フィボナッチ数を返すループベースの関数を作成するように指示されました。私はすでにその機能を作っており、それを下に含めます。私の割り当ては、「関数の実行時間がΘ(n)である、すなわち関数がnで線形であると主張する」と述べている。私が読んだ本や、私が見たビデオでは、Big-Thetaは常にΘ(g(n))と書かれていて、何らかの不等式として表現されています。インストラクターは、私たちがそれを回すまでこのについての質問に答えることを拒否した。ここループのビッグシータ記号と時間複雑度
は私の二つの質問です:。
1)私は私のG(n)は7 + 5Nで、Θということを言って、正しいだろう(n)は線形である。なぜなら、g(n)は線形であるからである。
2)この関数に線形実行時間があっても、上限と下限について心配する必要はありますか?
int fib(int n)
{
int fib = 1; //1
int num1 = 0; //1
int num2 = 1; //1
for(int i = 0; i < n; i++) // 1 + (n+1) + 1
{
fib = num1 + num2; //2n
num1 = num2; //1n
num2= fib; //1n
}
return fib; //1
} //----------------
//5n+7 <- runtime as a function of n
私が理解する限り、ランタイムは線形であるため、上限または下限はありません。
ほとんどの最新のCPUでは、加算は半サイクルしかかかりませんが、読み取り/書き込みには最大80までかかることがあるので、各演算に実際の時間値を割り当てることには注意が必要です。 – meowgoesthedog
コンパイラがスニペットとそれが最終的にどのように見えるかを示します。これが、O-表記法が非常に役立つ理由です。なぜなら、すべての時間参照と実装の詳細を抽象化しているからです。 1サイクルですべての操作を行うカスタムCPUを構築することができます。しかし、それでも 'n '回ループする必要があります。 – SkryptX