算法和算法分析

时间:2022-04-09 11:10:30

1.算法的基本概念

算法:算法是对特定问题求解步骤的一种描述。它是指令的有限序列,其中每条指令表示一个或多个操作。

算法的五个==特征==

有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;

确切性(Definiteness):算法的每一步骤必须有确切的定义;

输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;

输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

==评定==算法的几个指标:

正确性:算法的执行结果应满足具体问题的功能和性能要求。它是算法中最重要的一个属性,不能正确实现其任务的算法是无用的算法;

可读性:在算法正确性得到保证的前提下,算法的描述还要做到便于阅读,以利于后续对算法的理解和修改。可以采用在算法中增加注释的方法,或尽量是算法描述的结构清晰、层次分明,以增强可读性;

健壮性:算法应具有检查错误和对某些错误进行适当处理的能力。也就是说,算法要具有良好的容错性,要允许用户犯错误,但在错误出现时要具有正确的判断能力和及时纠错的能力;

高效率:算法效率的高低是通过算法运行所需资源的多少来反映的,这里的资源包括==时间和空间==需求量。一个好的算法要做到执行时所需时间尽量短,所需的最大存储空间尽量少。若对同一个问题有多个算法可供选择,则尽可能地选择执行时间短和所需存储空间少的算法。但实际上,时间和空间需求量是一对矛盾的两个方面,一个算法不可能做到两全其美,往往要根据实际情况来权衡它们的得失。

2.算法的描述:

算法的描述可采用某种语言,也可以借助数据流程图来表示。描述算法的语言主要有3种形式:自然语言、程序设计语言和伪代码。

自然语言用中文或英文文字来描述算法,其优点是简单、易懂,但严谨性不够;

程序设计语言用某种具体的程序设计语言来描述算法,其优点是算法不用修改就可直接在计算机上执行,但直接使用程序设计语言来描述算法并不容易,也不直观,往往要加入大量注释才能使用户明白;

伪代码用一种类似于程序设计语言的语言(由于这种描述不是真正的程序设计语言,所以称为伪代码)来描述算法,它介于自然语言和程序设计语言之间,既可以忽略程序设计语言中一些严格的语法规则与描述细节,又比程序设计语言更容易描述和被用户理解;而相对于自然语言,它能更容易地转换成能够直接在计算机上执行的语言。

eg1.给求出整型数组a中最大值的算法:

public  static int maxEle(int[] a){
    int n=a.length;
    int max=a[0];
    for(int i=1;i<n;i++){
        if(max<a[i])
        max=a[i];
    }
    return max;
}

该算法首先将数组中第0个数据元素视为最大者,并将它保存在变量max中;然后从第1个数据元素开始将数组中它后面的所有元素依次与max进行比较,若遇到比max大的数据元素,则将此数据元素值存入max中。当后面的n-1个数据元素都比较完毕后,保存在max中的值就是数组a中的最大值。

eg2.给出将整型数组a中数据元素实现倒序排列的算法:

public static void reserse(int[] a){
    int n=a.length;
    int temp;
    for(int i=0,j=n-1;i<j;i++,j--){
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
}

该算法首先将数组a中第0个与第n-1个数据元素进行置换,然后将第1个与第n-2个数据元素进行置换,依次类推,直到位于数组a中间的两个数据元素置换完毕为止。


根据相关书籍整理出来的文章