编程语言
如果你正在阅读这篇文章,那么在你的编码经历中,一定有那么一刻,你会开始关心代码的效率。
我的这一刻发生在高中时,当时我意识到仅仅制作网站和进行实用编程是无法让你进入大学的,于是我开始踏入计算机奥赛的世界。作为一个天赋还不错的程序员,尤其是当时仅仅是高中生的我,之前竟然从未思考过我写的代码执行起来究竟需要多少时间。意识到这个问题很重要后,我开始计算我代码的操作数量。一秒钟到底完成多杀操作?
当时的我对计算机架构知之甚少,完全无法回答这个问题。但是我也不需要详细的答案——我需要的是一个经验法则。我的思考过程是这样的:“2~3GHz意味着每秒执行 20 到 30 亿条指令,在一个简单的循环中处理数组元素,还需要增加循环计数器、检查循环结束条件、进行数组索引等等,所以让我们为每个有用的指令预留 3-5 条额外指令的空间”,最终我使用了 5×10^8 作为估算值。这些做法都不是准确的,但计算我的算法所需的操作数量并除以这个数字对于我的例子来说是一个不错的经验法则。
当然,真正的答案要复杂得多,且高度依赖于你所考虑的“操作”类型。用于像指针追踪这样的事情,它可能低至 10^7,想计算线性代数,又会高达 10^11。为了展示这些惊人的差异,我们将使用矩阵乘法在不同语言中的实现案例研究 — 并更深