算法
算法是解决给定问题的一种方法和步骤。对于给定问题算法不是唯一的。算法具有鲜明的客观环境属性,用不同的工具和方法解决问题,算法是不同的。利用计算机解决问题的算法可以参考人工解决该问题的算法,因为计算机是模仿人的脑力劳动而设计出来的一种工具。算法的执行效率与数据结构的优劣有很大的关系。
- 可行性:算法的每一步操作都必须是可行的、有效的;
- 确定性:算法中的每一步骤都必须有明确定义,不允许有模棱两可的解释,也不允许有多义性;
- 有穷性:算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止;
- 拥有足够的情报:一个算法有 n ( n ≥0)个初始数据的输入,有一个或多个有效信息的输出;
算法可以用自然语言、计算机语言、流程图或专门为描述算法而设计的语言描述。
算法设计准则
- 正确性:首先,算法必须是正确的,不含语法、数据的错误;
- 可读性:算法要易于理解,易于编码,易于调试;
- 健壮性:当输入非法数据时,算法也能有所反应;
- 时空效率:高效率及低存储量。算法的执行时间要短,占用的存储空间要小
算法的复杂度
算法优劣的主要标准是算法的执行效率与存储需求。算法的执行效率指的是时间复杂度( time complexity ),存储需求指的是空间复杂度( space complexity )。
算法中基本操作重复执行的次数是问题规模为 n 的某个函数 f ( n ),算法的时间复杂度记作:
T(n) = O(f(n));
一般只要分析影响一个算法时间复杂度的主要部分即可,且如果 f ( n )为多项式时,只取 f ( n )的 n 的最高次幂。算法的时间复杂度通常具有 O (1), O ( n ), O ( n2), O ( log2n ), O ( n× log2n )等形式,其中 O (1)表示算法的时间复杂度为常量。因此,时间复杂度指的是在给定的问题规模 n 下,算法中语句重复执行次数的数量级。
算法的空间复杂度是在给定的问题规模 n 下,算法执行时所需临时占用存储空间的量度,记作: S ( n )=O ( f ( n )),其中 n 为问题的规模(或大小),空间复杂度 f ( n )也是问题规模 n 的函数,也是用算法需占用临时存储空间的数量级来描述。