大二终于多了一些和专业相关的课,结果却是这样的。
数据结构课,非常好奇那个老师怎么和计算机扯上关系的。动不动就拿办事、领导之类的举例子,浑身也散发着这种讨厌气味。
某一次他解答那本教材上的课后习题,下面是原题。
试分析时间复杂度:
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操作好像有专用的电路来高速执行。
完全不考虑实际案例,整几个一点意义都没有的垃圾习题(除了以判断素数算法为样本的那个以外),真有中国大学课本的风格。更棒的是还有奇葩老师去钻这种习题的牛角尖
1
kcworms OP string有时可以当作sequence,array的同义词。汉语翻译里的“字符串”指text string。但是string又常常指text string。于是某些人把序列也叫“字符串”
|
2
kcworms OP 3M的1100耳塞一个能用几天呢?
|