私は自分のコードで少しのランタイム問題があります。コードは正常に動作しますが、Windowsでは数十分、Linuxでは数時間かかることがあります。親和性のある数字:実行時間は長くなります。それは何が原因でしょうか?アルゴリズムの複雑さ?
このプログラムを今すぐ実行しようとすると、アルファティル1000000の数値が文字通り数時間かかると計算され始めます。 私の先生によれば、計算にはほんの数秒しかかかりません。
int main() {
std::cout << "Hello, World!" << std::endl;
AmicableNumbersBeta Alpha(1,1000000);
AmicableNumbersBeta Beta(1,100000);
AmicableNumbersBeta Gamma(1,10000);
AmicableNumbersBeta Delta(1,1000);
std::cout<<"Delta\n";
Delta.Calculate();
std::cout<<"\nGamma\n";
Gamma.Calculate();
std::cout<<"\nBeta\n";
Beta.Calculate();
std::cout<<"\nAlpha\n";
Alpha.Calculate();
std::cout << "Bye, World!" << std::endl;
return 0;
}
私は正直、この巨大な「遅延」を引き起こす可能性があるかを理解していません。私が使用
プラットフォームは15
GCC 4.9 とLinuxのDebianとWindowsのVSいる誰かが、この行動の理由を指摘することができれば、私は本当にいただければ幸いです。
同じ値に対して 'SumOfDivisors'を再計算するのを避けるためにメモを試みるかもしれません。シーブはまた、除数の計算を高めることができます。 – Jarod42
あなたの問題はアルゴリズムの複雑さです。ただし、コードを並列化することもできます(標準ライブラリの並列拡張など) – foxfireee
Sieveなどを使用して除数の計算を高速化する必要があります。同じ数のSumOfDivisorsを再計算することはそれほど重要ではありません - SumOfDivisorsの呼び出しの半分は1 ... nであり、回避することはできませんので、暗記はおおよそ時間を半分に減らすことができます。 –