衡量算法优劣的一个硬性指标是时间复杂度(随着内存空间越来越大,空间复杂度已经不是最重要的指标了),一般在算法课程的第一章讲的就是这个。
建议各位把基础打牢固了。
我不是个喜欢空谈的人,送各位一段代码,有兴趣的请亲自执行一下,分析一下。看看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; }
布置一道作业,请回答这段代码的时间复杂度是多少。
重剑无锋,大巧不工