算法和算法分析总结

来源:互联网 发布:磁盘碎片整理 知乎 编辑:程序博客网 时间:2024/06/05 03:36

算法和算法分析总结

算法:是对特定问题求解步骤的一种描述,在计算机中表示为指令的有限序列,并且每一条指令表示一个或多个操作。(算法是描述解决问题的方法)

算法的5个特性

(1)有穷性:一个算法总是(对于任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。(有穷性指合理的、可接受的)

(2)确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,

算法只有唯一的一条执行路径,即对相同的输入只能得到相同的输出。

(3)可行性:一个算法能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

(4)输入:一个算法有零个或多个的输入,这些输入来自于某个特定的对象的集合。

(5)输出:一个算法有一个或多个的输出,这些输出是输入有着某些特定关系的量。

算法设计的要求

(1)正确性:算法应满足具体问题的需求。

“正确”大体可分为四个层次:a.程序不含语法错误;b.程序对于几组输入数据能够得出满足规格说明要求的

结果;c.程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;

d.程序对于一切合法的输入数据都能产生满足规格说明要求的结果。(通常c层意义的正确性作为衡量一个

程序是否合格的标准)。

(2)可读性:算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解。

(3)健壮性:当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

(4)效率与低存储量需求:效率指的是算法执行的时间,执行时间短的算法效率高;存储量需求指算法执行过程中所需要的最大存储空间。

算法效率的度量方法:

1、事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

2、事前分析估算方法 :在计算机程序编制前,依据统计方法对算法进行估算。

注意:如果抛开与计算机硬件、软件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模(输入量的多少)。

函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快于g(n)。

算法的时间复杂度:

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。

常见的时间复杂度所消耗时间的大小排列:


推导大O阶的方法:

(1)用常数1取代运行时间中所有的加法常数。(2)在修改后的运行次数函数中,只保留最高阶项。

(3)如果最高阶项存在且不是1,则去除与这个项相乘的常数。

算法的空间复杂度

通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

注意:通常,我们都是使用“时间复杂度”来指运行时间的需求,使用“空间复杂度”指空间需求。当不用限定词地使用“复杂度”,通常指时间复杂度。