原理篇-算法
来源:互联网 发布:菲律宾的打击毒贩知乎 编辑:程序博客网 时间:2024/05/30 02:51
要点:
算法对于软件的性能是有决定性影响的。算法实现的优化就是要充分应用硬件和操作系统的特性,设计合理的数据结构,使得各个模块具有高度的局部性,模块间具有最低的耦合性和最高的并行性。
讨论:
算法优化可以分为算法的科学级优化和技术级优化。科学级的优化如快速排序算法,FFT算法,对该问题域都起了革命性的影响。技术级优化是我们普通工程师的主要工作,如对冒泡算法的实现做优化,可以展开循环,用汇编改写最内层循环,尽可能减少内存访问等。科学级的优化是可遇不可求的,而技术级的优化每个工程师都可以做到。只要我们熟悉硬件特性和操作系统,理解问题域,依据局部性与并行性设计合理的数据结构,都能设计出高效的算法实现。这里我们所说的算法优化都是指技术级优化。以下分几个要点讨论。
第一点, 熟悉硬件和操作系统的特性。因为这是软件运行的平台。对CPU,Cache,RAM,虚拟内存管理,进程线程管理都要理解。
第二点, 理解问题域。对要处理的问题有个清晰的“大图”,各个模块是如何协同工作,模块间的数据流是如何移动,模块间的耦合程度和并行程度,哪些模块是性能瓶颈,这些都要非常清楚。
第三点, 利用局部性和并行性优化模块。20%的模块耗费了整个软件80%的资源。对这部分模块的优化要充分利用局部性和并行性,设计合理的数据结构。
第四点, 遵循算法实现上的几个原则。第一,降低计算复杂度。将一个O(n2)的算法调整成O(n)基本上是科学级的优化,但一些糟糕的算法设计使得原本简单的算法变得很复杂,在优化算法时,考虑清楚计算目标,降低复杂度是很重要的。第二,去除无用计算。糟糕的算法里有大量的无用计算,理清算法的上下文,去除无用计算是最直接有效的优化。第三,重用计算。去除了无用计算,可以考虑如何再进一步调整算法,使得计算能被重用。
- 原理篇-算法
- RSA算法之原理篇
- Cart分类树算法之原理篇
- SM2算法第十二篇:数字证书原理
- 搜索引擎算法原理 百度算法的原理 [
- surf算法原理、sift算法原理详解
- Base64算法原理
- Base64算法原理
- NCR Shuffle算法原理
- NCR Shuffle算法原理
- md5算法原理
- MD5算法原理
- KMP算法原理
- MD5摘要算法原理
- NCR Shuffle算法原理
- OnlineSVR算法原理(1)
- OnlineSVR算法原理(2)
- OnlineSVR算法原理(3)
- 原理篇-局部性与并行性
- 时间管理矩阵
- 原理篇-内存
- asp.net跳转页面的三种方法比较
- 原理篇-CPU
- 原理篇-算法
- Eclipse 3.4 (Ganymede) 开发调试PHP全攻略
- 深入浅出WPF(10)——“脚踩N条船”的多路Binding
- 架构篇-全局的设计考虑
- ZJU2994 Tiling a Grid With Dominoes - 动态规划 变换矩阵
- 架构篇-准备工作
- 将select中的项从一个移动到另一个select中
- ZJU2992 Monkey Vines - 二叉树 推规律
- SQL Functions Programmers Reference