Knuth 真是“抠”

     在Taocp 卷1 ,高老头说:”某些组合运算需要重复1万亿次,其内部循环没减少1微秒,我们就能节省“11.6”天。  当我看到“1微秒时”,心里满不在乎,因为太微小了。可是还没等这个情绪消失,看到后面的"11.6天",我就傻眼了。以前总是看到o(N)之类的算法分析但是没感觉,现在仅仅一个循环 就省下了那么多时间,原来算法真的很有用啊!

    后面的gcd 算法,本来就没有几步,他愣是”抠“到:r = mod(m,n),m = n,n = r;精简成 m = mod(m,n),n = mod(n,m);真是追求极致啊!

      二者在思维上的不同在于:前者一直用m、n 当做被除数,除数,意思是m 只能是被除数、n只能是除数,这好像是一种非常隐秘的思维定势!在r = mod(m,n)中,m,n给了我一种很心理暗示:m是被除数,n是除数,因此后面依然要m是被除数,n是除数因此才需要中间变量r 。这很难察觉,不知不觉就跑偏了!

       但实际上是:余数 = mod(被除数,除数),余数 = mod(除数,余数)的关系,这才是内心真正的思维过程。后面的算法巧妙地借助了 计算顺序,因而避免了使用临时变量的麻烦!

    在这里膜拜Donald Knuth! 希望大神保佑我这个算法渣渣!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值