大二终于多了一些和专业相关的课,结果却是这样的。
数据结构课,非常好奇那个老师怎么和计算机扯上关系的。动不动就拿办事、领导之类的举例子,浑身也散发着这种讨厌气味。
某一次他解答那本教材上的课后习题,下面是原题。
试分析时间复杂度:
int s1(int n) {
int p=1, s=0, i;
for (i=1; i<=n; i++) {
p *= i;
s += p;
}
return s;
}
他脑补成O(n!),原来那个乘法还可以拆成加法,我真是大开眼界。
我写的O(n),这是几个星期前的事。现在这个奇葩老师又搞了点新花样出来,我就把这个挖出来解气。
测试程序和结果是这样的。计时是直接看code::blocks的runner的信息
int main () {
int i;
for (i=0; i<10000000; i++)
s1(40);
return 0;
}
// n, time
// 10, 0.405
// 20, 0.768
// 30, 1.124
// 40, 1.481
// 100, 3.768
比较接近32bit的int上限的数也测试了一下,结果一样。试着搜索了一下,MUL操作好像有专用的电路来高速执行。
完全不考虑实际案例,整几个一点意义都没有的垃圾习题(除了以判断素数算法为样本的那个以外),真有中国大学课本的风格。更棒的是还有奇葩老师去钻这种习题的牛角尖
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.