第二节 算法

一个算法应该具有如下 5 个特性:
1.有穷性(Finity):一个算法老是在执行有穷步以后结束。
2.肯定性(Unambiguousness):算法的每个步骤都必须有确切的含义,对于相同的输入只能有相同的输出。
3.输入(Input):一个算法具备零个或多个输入。
4.输出(Output):一个算法具备一个或多个输出。
5.能行性(realizability):算法中的每一步均可以经过已经实现的基本运算的有限次运行来实现。算法

评价一个算法优劣的主要标准以下:
1.正确性(Correctness)。
2.可读性(Readability)。算法主要是为了人阅读和交流,其次才是机器的执行。一个可读性强的算法也有助于对算法中隐藏错误的排除和算法的移植。
3.健壮性(Robustness)。一个算法应该具备很强的容错能力。
4.运行时间(Running Time)。运行时间是指算法在计算机上运行所花费的时间,通常来讲,执行时间越短,性能越好。
5.占用空间(Storage Space)。占用空间是指算法在计算机上存储所占用的存储空间,包括存储算法自己所占用的存储空间、算法的输入及输出数据所占用的存储空间和算法在运行过程当中临时占用的存储空间。算法占用的存储空间是指算法执行过程当中所须要的最大存储空间。实际上,算法的时间效率和空间效率常常是一对矛盾,相互抵触。函数

一般把算法在运行过程当中临时占用的存储空间的大小叫算法的空间复杂度(Space Complexity)。算法的空间复杂度比较容易计算,它主要包括局部变量所占用的存储空间和系统为实现递归所使用的堆栈占用的存储空间。性能

计算机的性能由如下因素决定:
一、 硬件。
二、 实现算法所使用的计算机语言。实现算法的语言级别越高,其执行效率相对
越低。
三、 所使用的语言的编译器/解释器。通常而言,编译的执行效率高于解释,但解释具备更大的灵活性。
四、 操做系统。操作系统

为了便于比较同一问题的不一样算法,一般把算法中基本操做重复执行的次数(频度)做为算法的时间复杂度。算法中的基本操做通常是指算法中最深层循环内的语句。
算法中基本操做语句的频度是问题规模n的某个函数f(n),记做:T(n)=O(f(n))。其中“O”表示随问题规模n的增大,算法执行时间的增加率和f(n)的增加率相同,或者说,用“O”符号表示数量级的概念。
若是一个算法没有循环语句,则算法中基本操做的执行频度与问题规模n无关,记做O(1),也称为常数阶。若是算法只有一个一重循环,则算法的基本操做的执行频度与问题规模n呈线性增大关系,记做O(n),也叫线性阶。经常使用的还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)等。递归

例:
T(n)=1/2n(n-1)
1/2n²-1/2n的数量级与n²相同(数量级只看最高次幂)
因此T(n)=0(n²)编译器

相关文章
相关标签/搜索