数据结构与基本算法(python版)
day 1
数据结构 和 算法 都是计算机程序的基本构建模块,算法描述了最终能解决一个问题的计算过程,而数据结构呢。。。我个人的理解是构成一段或庞大,或复杂的,或相互关联,或毫无关系的数据的构造模型。
今天先从算法说起。
首先,怎样评判一个算法的质量呢?最基本的标准应该是正确性,就是说评判算法的好坏的前提是,这个算法起码是能够正确完整地解决了它所对应的问题。其次算法的可读性和易维护性也是重要的标准。记得以前看过一关于“程序员与程序的关系”的书籍,里面有这样一句话让我记忆很深,‘当人们在编写软件时,他们不是为自己写。事实上,他们甚至不是专门为计算机写的。而实际上,优秀的程序员知道,代码是为下一个会阅读它而进行维护或者重用的人写的。如果那个人无法理解代码,在现实的开发场景中,就毫无用处了。’(以上均是引子,后面才是正文)
但是,今天所要归纳的算法质量的重要标准是,算法运行性能(时间性能&&空间性能)。
1、度量算法性能的几种方法
- 度量算法的运行时间:是指一个算法从开始到结束所消耗的所有时间。
- 统计指令:是指统计对不同的问题规模所要执行的指令的数目,要注意的是,统计指令的时候,所统计的是用于编写算法的较高级代码中的指令数目,而不是执行机器语言的程序中的指令数目。
- 度量算法所使用的内存:对于算法所使用资源的完整分析,还包括所需的内存数量。同样,还是要关注潜在的增长率的。
2、复杂度分析
- 复杂度的阶:主要是指算法所要处理的问题的规模大小,通过代数形式来表达。
- 大O表示法:用大O的形式来表现复杂度(big-O nation),“O”表示“on the order of(在…阶)”,这是对算法工作量的复杂度的级别的一种表示。例如,一个线性时间算法的阶是O(n)。
- 常量比例的作用:常量比例涉及在大O分析中通常是会被忽略的项和系数。可是,当这些项很大的时候,它们可能会影响到算法,对于较小或者中等大小的数据集合,尤其如此。