算法的一些基本概念

来源:互联网 发布:淘宝上的2手正品奢侈 编辑:程序博客网 时间:2024/06/07 20:50

一、算法

1.特性

输入性:一个算法有零个或多个输入,且输入取自某个特定对象的集合; 

输出性:一个算法有一个或多个输出,且输出是与输入有着某些特定关系的量; 

有穷性:一个算法必须在执行有穷步之后结束,且每条指令的执行次数有限; 

确定性:算法中每条指令必须确切定义且含义明确,不可有二义性,在任何条件下,算法只有唯一的一条执行路径,对于相同的输入只能得出相同的结果; 

能行性:算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的,即每条指令都应在有限的时间内完成。

2.设计目标

正确性:算法应满足具体问题的需求,这是算法设计最起码的目标。通常一个大型的需求以特定的规格说明方式给出,目前多数是以自然语言描述需求,它通常应包括对于输入、输出、处理等的无歧异性的描述,设计的算法应当能正确地反映这种需求,否则,算法的正确与否的衡量准则就不存在了。 

可读性:一个算法设计完成后,并非仅供算法设计者个人使用,因此首先应让使用者能够理解、阅读与交流,其次才是机器执行。可读性好有助于人们对于算法的理解以及排除算法中隐藏的错误,也有助于算法的移植和功能扩充。 

健壮性:当输入的数据非法时,算法应当能够做出适当的反应或进行处理,从而避免产生不可预料的输出结果。处理出错的方法应是报告输入错误的性质值,而不是简单地打印错误信息或异常,同时中止程序的执行,以便在更高的抽象层次上进行处理。 

高效率:所谓效率,是指算法执行的时间。对于同一个问题如果有多个可供选择的算法,应尽可能选择执行时间短的算法,这样的算法无疑效率是较高的。 

低存储量需求 算法的存储量需求是指算法执行过程中所需的最大存储空间。对于同一个问题如果有多个算法可供选择,应尽可能选择存储量需求低的算法。

二、算法效率的衡量

  算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

1.时间复杂度

  O(f(n))称为语句频度(O()表示数量级,f(n)是执行次数n的函数),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度;算法的时间复杂度一般以数量级的形式给出。

  二分法:O(logn)

  一重循环:O(n)

  二重循环:O(n^2)

  for循环嵌套二分:O(nlogn)

2.空间复杂度

  类似于算法的时间复杂度,算法所需的内存空间,称之为空间复杂度。

  一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分;算法的空间复杂度一般也以数量级的形式给出,如当一个算法的空间复杂度为一个常量、即不随被处理数据量n的大小而改变时、可表示为O(1)。

原创粉丝点击