算法设计与分析

课程内容:

*求解同一问题通常存在多种方法,其效率可能不同。

*如何设计正确高效的算法?需掌握算法设计的方法论

*如何判断哪个算法更高效?需分析比较算法运行效率

 

主要内容:

第一章    算法概述

第二章    算法分析基础

第三章    递归与分治策略

第四章    动态规划

第五章    贪心算法

第六章    回溯法

第七章    分支限界法

 

 

第一章    算法概述

知识点:问题,算法的定义,算法的要素,算法的特点,算法设计的基本步骤,算法描述

 一、问题

可计算问题;困难问题;P,NP,NPC。

二、算法的定义

        *算法是解决问题的一种方法或一个过程,是一个由若干运算或指令组成的有穷序列。

        *算法用来将输入数据转换成输出结果。

 

(1)排序问题

输入:包含n个数字的数组。

输出:升序排列的数组。

*插入排序算法:将数组待排序元素依次插入到已排序部分,使已排序部分保持升序的性质。

*选择排序算法:

第一次遍历找到最小元素;

第二次遍历找到次小元素;

......

第n次遍历找到第n小元素;

 

三、算法的要素

操作、控制结构、数据结构

(1)操作

*算术运算:加、减、乘、除

*关系比较:大于、小于、等于、不等于

*逻辑运算:与、或、非

*数据传送:输入、输出、赋值

(2)控制结构:各操作之间的执行次序

*顺序结构:各操作依次执行。

*选择结构:由条件是否成立来选择执行。

*循环结构:有些操作要重复执行,直到功能满足某个条件时结束。又称重复或迭代结构。

注明:模块间的调用也是一种控制结构,特别的模块自身的直接或间接调用——递归结构,是一种功能很强的控制结构。

(3)数据结构:算法操作的对象是数据,数据间的逻辑关系、数据的存储方式及处理方式就是数据的数据结构。它与算法设计是紧密相关的。

线性结构、树、图。

 

四、算法的特点

*输入:有零个或多个外部量作为算法的输入。

*输出:算法产生至少一个量作为输出。

*确定性:组成算法的每条指令清晰、无歧义。

反例:对于给定输入数组,交换两个元素的位置。(没有具体指明是哪两个元素)。

*可行性:算法中有待实现的运算都是基本的运算。原则上可以由人们用纸和笔,在有限的时间里精确的完成。

反例:将大元素放数组后部,小元素放数组前部。(描述含糊,不可拆解为基本操作步骤。)

*有穷性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。

反例:给定输入数组(动作序列没有终结),不断交换首尾元素的位置。

 

五、算法设计的基本步骤

问题建模:输入;输出;目标函数;解。

贪心算法:

*设计策略:加工时间短的先做。

*算法:根据加工时间从小到大排序,依次加工。

*算法的正确性:对所有输入的实例都得到最优解

算法设计的基本步骤:分析问题求解->建模->选择数据结构和算法设计策略->描述算法->证明算法正确性->算法分析。

 

 六、算法描述

流程图、自然语言、伪代码

 

 自然语言是人们日常所用的语言。其缺点是:

*由于自然语言的歧义性,容易导致算法执行的不确定性。

*自然语言的语句一般太长从而导致了用自然原因描述的算法太长。

*当一个算法中循环和分支较多时就很难清晰的表示出来。

*自然语言表示的算法不便翻译成计算机算法设计语言理解的语言。

 

posted on 2022-10-09 10:05  王立凯  阅读(396)  评论(0编辑  收藏  举报

导航