したがって、私はこのコードを持っており、O(n^3)未満の時間の複雑さで実行する必要があります。私は複雑さについて学び始めたばかりなので、何をすべきか分かりません。ネストされたforループをO(n^3)よりも低く変換する
int n, i, j, k, x=0;
printf("Type n: \n");
scanf("%d",&n);
for(i=1; i<n; i++)
{
for(j=1; j<i; j++)
{
for(k=1; k<j; k++)
{
x=x+1;
}
}
}
printf("%d\n",x);
私はそれはO(N^3)だ、なぜ私が得ると思いますが、私は実際にそれをより効率的にする方法がわかりません。再帰関数に変換しようとしましたが、可能でしょうか?
間違いなく、それを劇的にスピードアップする「n」の点で閉鎖式があります。適切なa、b、c、dの値に対しては、((a * n + b)* n + c)* n + dとなります。再帰的な関数は高速化されませんが、動作させることができます。 –
* "私はなぜそれがO(n^3)以上であるかと思う" *実際には、あなたが持っているコードはO(n^3)です。 – user3386109
ええ、それは私が意味したことです、間違って書いて、それを指摘してくれてありがとう。この時間複雑さは私の脳をバグします –