【算法•日更•第五十五期】知识扫盲:什么是卡常数?

▎前言

  小编之前一直都认为卡常数读音是ka chang shu,实际上是qia chang shu。

  希望小伙伴们不要读错了。

▎定义

  程序被卡常数,一般指程序虽然渐进复杂度可以接受,但是由于实现/算法本身的时间常数因子较大,使得无法在OI/ICPC等算法竞赛规定的时限内运行结束。

  常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很高的选手迷之超时或者超空间。(copy自百度)

  所以,卡常数并不是数论中的那些卡特兰数什么的,只有一个含义:你的程序可能是O(n 2),但是题解也是O(n 2)的,可是你为什么过不了呢?原因就是常数太大,比方说别人的+可能要1ms,那么你可能就要2ms,所以你的程序就会被很小的常数卡掉,所以我们在写代码时,要采取一些措施才能避免被卡常数。
▎解决方案
  详见小编的博客: 你还在担心时间复杂度太高吗?
  下面还有一些方案:
  • 多用scanf和printf,cin和cout很慢,切忌不可混用。
  • 三元运算符? :比if else快,但不比if快。
  • 频繁使用的数用register,和inline一个用法,只不过有可能把变量存入CPU寄存器,来减少时间。

猜你喜欢

转载自www.cnblogs.com/TFLS-gzr/p/11394752.html
今日推荐