一些程序片段的数量级及其所花时间的比较,极大程度的反应了算法优化程度越高,算法越优秀
#include <iostream>
using namespace std;
__int64 agorithm1(__int64 N) //第一个数量级为T(N)=O(N)
{
__int64 sum = 0;
for(__int64 i = 0; i < N; i++)
sum++;
return sum;
}
__int64 agorithm2(__int64 N) //第二个数量级T(N)=O(N^2)
{
__int64 sum = 0;
for(__int64 i = 0; i < N; i++)
for(__int64 j = 0; j < N; j++)
sum++;
return sum;
}
__int64 agorithm3(__int64 N) //第三个数量级T(N)=O(N^3)
{
__int64 sum = 0;
for(__int64 i = 0; i < N; i++)
for(__int64 j = 0; j < N * N; j++)
sum++;
return sum;
}
__int64 agorithm4(__int64 N) //第四个数量级T(N)=O(N^2)
{
__int64 sum = 0;
for(__int64 i = 0; i < N; i++)
for(__int64 j = 0; j < i; j++)
sum++;
return sum;
}
__int64 agorithm5(__int64 N) //第五个数量级T(N)=O(N^5)
{
__int64 sum = 0;
for(__int64 i = 0; i < N; i++)
for(__int64 j = 0; j < i * i; j++)
for(__int64 k = 0; k < j; k++)
sum++;
return sum;
}
__int64 agorithm6(__int64 N) //第六个数量级T(N)=O(N^4)
{
__int64 sum = 0;
for(__int64 i = 1; i < N; i++)
for(__int64 j = 1; j < i * i; j++)
if(j % i == 0)
for(__int64 k = 0; k < j; k++)
sum++;
return sum;
}
int main()
{
int N = 1000;
//PS:注释去掉,选择算法
// cout<<agorithm1(N)<<endl;
// cout<<agorithm2(N)<<endl;
// cout<<agorithm3(N)<<endl;
// cout<<agorithm4(N)<<endl;
// cout<<agorithm5(N)<<endl;
// cout<<agorithm6(N)<<endl;
return 0;
}
以下为比较统计出的表格:
agorithm1 | agorithm2 | agorithm3 | agorithm4 | agorithm5 | agorithm6 | |
Order of Magnitudes | T(N)=O(N) | T(N)=O(N^2) | T(N)=O(N^3) | T(N)=O(N^2) | T(N)=O(N^5) | T(N)=O(N^4) |
Running Time(T) | 0.695 | 0.83 | 0.847 | 0.87 | 12.213 | 1.748 |
Estimate Time(G) | 100 | 10000 | 1000000 | 10000 | 10000000000 | 100000000 |
T/G rate | 0.00695 | 0.000083 | 0.000000847 | 0.000087 | 0.0000000012213 | 0.00000001748 |
Running Time(T) | 0.803 | 0.91 | 14.882 | 1.022 | 120000 | 985.2 |
Estimate Time(G) | 1000 | 1000000 | 1000000000 | 1000000 | 1E+15 | 1E+12 |
T/G rate | 0.000803 | 0.00000091 | 0.000000014882 | 0.000001022 | 0.00000000012 | 0.0000000009852 |