星期三, 十月 04, 2006

某些算法及程序常数的细节优化

有的时候,当两个算法一样的程序,看着别人能够很快地通过,而自己却总是卡着通过或者直接TLE,心中总是十分不爽。近段时间经多次TLE的教训后,我将一些经验写在这里。
1.程序常数的细节优化

  • 系统分配内存的时间往往为我们所忽略,当你为你的程序超过总时限而郁闷时,试着减少内存使用吧。比如DP时使用滚动数组……
  • 数组寻址所用的时间在维数较高时会使常数较大(乘法造成的),在部分情况下可以用“指针行走”来优化常数。
  • 除法运算也是常数很大的操作,能减少时就减少。
  • 递归时call,ret会很耗费时间,适当时可以考虑非递归。

2.算法的细节优化

  • 最小生成树的Krusckal算法当树的个数合并到只有一个时及时跳出枚举边的循环
  • Bellman-Ford算法当没有距离更新时跳出,并且最多只用进行点数-1次枚举边的松弛操作

没有评论: