衡量算法优劣的一个硬性指标是时间复杂度(随着内存空间越来越大,空间复杂度已经不是最重要的指标了),一般在算法课程的第一章讲的就是这个。
建议各位把基础打牢固了。
我不是个喜欢空谈的人,送各位一段代码,有兴趣的请亲自执行一下,分析一下。看看1万阶的方阵第1234行4321列的值是多少。
程序代码:
布置一道作业,请回答这段代码的时间复杂度是多少。
建议各位把基础打牢固了。
我不是个喜欢空谈的人,送各位一段代码,有兴趣的请亲自执行一下,分析一下。看看1万阶的方阵第1234行4321列的值是多少。
程序代码:#include<stdio.h>
#include<math.h>
#define PI2 6.283185307179586476925286766559
#define PI_4 0.78539816339744830961566084581988
#define PI3_4 2.3561944901923449288469825374596
int f(int n, int i, int j)
{
double R, r, L, S, x, y, d, a, ma;
int sa;
R = (n - 1) / 2.0;
x = j - R;
y = i - R;
r = fabs(x) > fabs(y) ? fabs(x) : fabs(y);
L = R - r;
S = 4 * L * (n - L) + 1;
d = sqrt(x * x + y * y);
if(d < 0.5) return (int)(S + 0.5);
a = PI3_4 + ((y >= 0) ? acos(x / d) : -acos(x / d));
if(a < 0) a += PI2;
sa = (int)(a / PI_4);
ma = a - sa * PI_4;
if(!(sa & 1)){ sa += 1; ma -= PI_4; }
return (int)(S + r * sa + d * sin(ma) + 0.5);
}
int main()
{
int i, j, n;
printf("输入方阵阶数:");
scanf("%d", &n);
for(i = 0; i < n; i++, putchar('\n'))
for(j = 0; j < n; printf("%5d", f(n, i, j++)));
return 0;
}
布置一道作业,请回答这段代码的时间复杂度是多少。

重剑无锋,大巧不工











头有点晕