返回列表 发帖

转帖:CPU是为用户服务的,不是为我们程序员服务的!

转帖:http://tennicse.blog.hexun.com/801393_d.html

面试经过与好的程序:


  大约在年前我接到了台湾瑞晟(Realtek)苏州公司的面试通知,通知我2月21日到苏州工业园区面试,接到面试后的几天我把一些专业课温习了一遍,特别是C++和数据结构,由于大学几年里,我一直专研这些方面,加上通过了高级程序员的考试,对于一些常用的算法我差不多也达到了烂熟于胸的地步,当时的感觉是如果问了我这些方面的问题我应该是没有问题的!

  21日那天我被安排在4:30面试,由一位技术人员单独给我面试,在问了一些简单的问题之后他给我出了一道编程题目,题目是这样的:

  (由于具体面试的题目比较烦琐,我将其核心思想提取出来分解成了两个独立的简单的问题,有可能问题分解的不当,请大家见谅,实际面试了一个的问题但比其复杂很多,而且涉及一些高等数学变换)

  1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n

  哼,我的心里冷笑一声!没想到这么简单,我有点紧张的心情顿时放松起来!

  于是很快我给出我的解法:

long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}

  搞定!当我用期待的目光看着面试官的时候,他微笑着跟我说,执行结果肯定是没有问题!但当n很大的时候我这个程序执行效率很低,在嵌入式系统的开发中,程序的运行效率很重要,能让CPU少执行一条指令都是好的,他让我看看这个程序还有什么可以修改的地方,把程序优化一下!听了这些话,我的心情当时变的有点沉重,没想到他的要求很严格,之后我对程序进行了严格的分析,给出了改进了的方案!

long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}

  虽然我不敢保证我这个算法是最优的,但是比起上一个程序,我将所有涉及到乘法指令的语句改为执行加法指令,既达到要题目的要求而且运算时间上缩短了很多!而代价仅仅是增加了一个整型变量!但是我现在的信心已经受了一点打击,我将信将疑的看者面试官,他还是微笑着跟我说:“不错,这个程序确实在效率上有的很大的提高!”我心里一阵暗喜!但他接着说这个程序仍然不能达到他的要求,要我给出更优的方案!天啊!还有优化!我当时真的有点崩溃了,想了一会后,我请求他给出他的方案!然后他很爽快的给出了他的程序!

long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}

  搞笑,当时我目瞪口呆,没想到他是这个意思,这么简单的代码我真的不会写吗,但是我为什么没有往那方面上想呢!他说的没有错,在n很大很大的时候这三个程序运行时间的差别简直是天壤之别!当我刚想开口说点什么的时候,他却先开口了:“不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们程序员服务的!”多么精辟的语言,我已经不想再说什么了!
20%的人掌握80%的财富

原帖由 needed 于 2007-1-18 23:22 发表


对"面试官"的算法有点疑问

n = 7  ; n%2=1
  那么代入得 结果 (7/2)*(-1)+ 7 = 3.5  ?

最后一行 应该是    return ((n-1)/2)*(-1)+n;  吧 ?



这个应该是取整的吧

TOP

  long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}


对"面试官"的算法有点疑问

n = 7  ; n%2=1
  那么代入得 结果 (7/2)*(-1)+ 7 = 3.5  ?

最后一行 应该是    return ((n-1)/2)*(-1)+n; 吧 ?
天下无不散之筵席.

世界之窗浏览器开发计划

TOP

没办法,哈哈,
20%的人掌握80%的财富

TOP

人都是强人,只不过有的人自私一点罢了~

TOP

原帖由 rebirth 于 2007-1-18 16:50 发表
帖子将会移走,哈哈


呵呵,还是你牛,算定会移走啊!高人!
win7u+IE9+TWC

人生在世难得糊涂,大忧为国小忧为家,常怀博爱仁厚之心;

待人诚挚待事圆通,勿以物喜勿以己悲,宜平常心泰然处之。

TOP

呵呵,这个帖子很久以前偶也看过

当时的感慨是:很遗憾,偶只是一个工程师而不是科学家

另外,我转走了
遇到崩溃假死或者感觉速度慢或者其他问题的朋友可以先试试使用TW3
TheWorld we explore the world.

TOP

帖子将会移走,哈哈
明月好 邀同宴 相逢几分癫

TOP

比较片面,对速度有要求的算法很重要,有些对速度没要求的,对可维护性很重要,还有些工期很重要,要能快速完成功能即可。

TOP

的确很多时候人会不自觉的把简单问题复杂化

TOP

LZ是很牛的中国人!

用户提意见是为了tw进步,而不是给一些人提供找借口的机会!

TOP

是的 人的大脑完成了主要的分析工作,电脑就只要完成最后简单计算了

TOP

返回列表