算法复杂度(Algorithmic complexity) – 所有人对它都有这样的一个概念就是要乐此不疲尽我所能地压缩以提高算法的性能。
你有个问题需要解决,并且得出一个解决方案,它是O(n^2)。你觉得做的不够好,需要做得更好。然后稍微调整一下,得到线性复杂度O(n)。你很高兴,因为事情看起来明朗起来了。
然而,你脑子里还绷着弦儿,晚上睡一觉醒来忽然又顿悟了,将算法的复杂度降低到对数O(log(n)),你自我感觉很好。在本周晚些时候,你读到一篇论文,并意识到你可以把它归结为恒定时间O(1)。你觉得现在就两个字:完美。你认为没有比这更好的方案了。
大错特错!
你还没尝试过O(0)。

shong么?0时间复杂度?


你的硬件计算机教授说过,恒定时间复杂度是最好的。在你的整个职业生涯都只听说过最佳的时间复杂度是O(1)。
它一直在那里,但它被称为其他东西。
有些代码根本不需要执行。有些工具可以扔掉。有些事情根本不需要做,如果你调整其他东西,你仍然能获得类似更好的结果。
你可能听过这样一句话:最快的代码是根本不被调用的代码?这不就是O(0)么!
作为一个合格的工程师你需要做到吾日三省吾身:”有没有办法不做这项工作的情况下完成某项工作?”。令人惊讶的答案是肯定的!
有时候,我们会做一些冗长又复杂的事情,什么都不做可能才是一个比较好的解决方案。有时候我们每分钟运行一次,然而实际上可能只需要每月运行一次就足够了。有时候我们会构建复杂的机制,这些机会会被使用,但也许这些复杂机制带来的好处并不是我们真正需要的。
你想成为一个10倍效率的工程师吗?有时候,决定不做某些事反而比做无用的事情会高效100倍。