什么是优化?

  新闻资讯     |      2024-04-08 06:45

本篇文章会跟分享一些个人认为的优化的本质是什么。这里的优化是指效率上的优化,而非指代码的可读性,易于维护性等代码质量上的优化。通过本篇文章你将会知道什么是优化,优化的本质是什么,还有获得对于优化的一些思考

在程序中有一句话是,越通用的东西其效率就越低下,这是有原因的。因为一个工具如果想要通用的话,那么就需要考虑各种情况,让代码逻辑更加的通用的。就很难去针对特殊的情况做特殊的处理。 但是如果代码是专用的,那么可以针对适用的场景,可能发生的特殊情况进行特殊的处理。那么其效率也就会变得更高。

优化并不难。优化并不只是想象中的对一个使用一个效率更高的算法,这种算是优化,但是一般情况下这种优化是比较难做到的。因为这种是要求创新,创造的。 而优化还可以是,针对特殊的数据,特殊的情况,使用不同的算法。而非是仅仅依靠一套算法解决所有的问题。也就是所谓的术业有专攻,不要想着 All in 就是这个道理。

举个例子。经典的排序算法有十几种,有没有一种排序算法的是最优的?其实很难说,因为不同的情况下,可能另一种排序算法可能就更加适用。因此如果我们在排序的时候可以对所要排序的数据进行分析,从而调整排序算法使用更加适合的算法去进行排序。这对于排序来说就是一种优化。

再举一个例子,java中对synchronized的锁优化。

如果有了解的话在优化之前,synchronized是重度锁。很多人不愿意去使用它。在我去了解这个锁的构造之前,我在想是不是这个锁的方案很垃圾,优化之后是不是使用了更加创新的锁方案?

但其实不是的,这个优化其实就是一个锁升级的过程。这个锁的方案依旧没有改变,在特殊情况下还是需要这种锁方案才能保证其安全性,但是在很多情况下并不会出现争抢的状态,那么也就没有锁的必要也就没有必要使用这么安全的锁了。因此可以使用更加轻度的方案去保证锁安全。 因此这个优化方案就是针对不同的情况使用更加轻度的锁方案。但是出现大量争抢的情况使用的还是原本的锁方案。

这个优化也说明了所谓的优化就是对特殊的情况使用更加适合的方案。并不仅仅是所谓的 使用更加优秀的方案

有兴趣的可以去看看Redis中的一些数据结构的设计。会发现其并不仅仅是使用一种数据结构。针对不同的情况下会底层会使用不同的编码实现。

比如,当一个数据结构中存储的数据都是一样的。那么就可以使用比较简单的编码进行存储。但是如果数据的数据类型是不一样的,那么就需要使用更加复杂的编码进行存储。

如果不做特殊的处理的话,统一使用复杂的编码进行存储,当然从功能上是可行的,但是从性能上存储空间上浪费的。因此这也属于一种优化

现在所学的算法都是经典算法, 所处理的情况也是通用的情况。适合一类问题。我们可以使用这些算法为我们所用,但是如果我们想要去改良一个算法的话(注意这里说的是改良而不是创造)首先需要的就是一个优化的方向,而这个优化的方向就是所谓的具体场景。

例如,在使用到这个算法的大部分场景中,都会有一个特殊的需求。那么是否可改造一下算法,使这个需求的实现更加高效,当然可能会付出其他的代价。但是对于实际应用场景中,付出的代价可以忽略不计,但是得到的优化效果却能够带来大量的收益。那么我们就不得不说这是一种优化。

因此本人觉得,所谓的优化也是需要根据实际的应用场景而论的。

一个不太恰当的例子:哈夫曼编码 使用更短的编码去表示使用频率更高的字符。而使用更长的编码去表示使用频率更低的字符。这就是根据实际的情况作出的一种取舍。

本篇文章中使用了三个例子说明了优化并不只是创建一种新的算法,或者方案。也可以是对特殊的情况,作出特殊的更加适合的处理。并且分享了本人对于优化方案的一种看法:优化需要结合具体场景