您好,欢迎访问三七文档
算法分析总复习第1页共7页算法分析总复习考试题型:填空、简答、编程、计算。算法的定义:按照某种机械步骤得到问题结果的处理过程。算法的3要素:操作、控制结构、数据结构。算法的3个结构:顺序结构、选择结构、循环结构。算法的基本性质:目的性、分布性、有序性、有限性、操作性。算法的基本特征:有穷性、确定性、可行性、输入性、输出性。(前3个是最主要的)算法的(质量)指标:正确性、可读性、稳健性、高效率与低存储量需求。算法的抽象描述:算法=控制结构+原操作算法的表示方式包括:自然语言、流程图、盒图、PAD图、伪代码、程序设计语言。算法分析的任务:利用数学工具,讨论算法的复杂度。评价算法的标准:1)算法实现所消耗的时间;2)算法实现所消耗的存储空间;3)算法应易于理解、易于编码、易于调试。算法复杂度:算法的时间复杂度与算法的空间复杂度的统称。算法时间复杂度的估算:1)算法的执行时间=原操作的执行次数×原操作的执行时间2)算法时间复杂度的数量级的形式:①O(L)称为常数级;②O(Logn)称为对数级;③O(n)称为线性级;④O(cn)称为多项式级;⑤O(nc)称为指数级;⑥O(n!)称为阶乘级;判断时间复杂度的数量级:1)顺序结构的算法的时间复杂度是O(L);2)循环结构的算法的时间复杂度是O(xn)(x:循环的层数);算法时间复杂度的最坏情况:可操作性最好的,且最有实际价值的,是最坏情况下的时间复杂性。算法的存储量包括:1)输入数据所占空间;2)算法本身所占空间;3)辅助变量所占空间。NP完全问题:算法分析总复习第2页共7页多项式复杂程度的非确定性问题,是图灵机在P时间内解决的问题,是世界7大数学难题之一。递归算法设计:就是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题,逐步求解小问题后,再返回得到大问题的解。递归与非递归的比较程序可读性代码量大小时间占用空间使用范围设计难度递归易小长大广易非递归难大短小窄难算法与数据结构:1)计算机处理的问题类型:数值计算问题、非数值性问题。2)算法设计的实质:对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法,实现对数据的处理。好的算法在很大程度上取决于问题中数据所采用的数据结构。3)常用的数据结构的分类:连续存储、链式存储。4)连续存储和链式存储的优缺点比较:①基于存储的考虑:顺序表的存储空间是静态分配的,事先必须明确规定其存储规模;链表不用事先估计存储规模,但存储密度较低。②基于运算的考虑:运算若按序号访问数据元素,则顺序表优于链表;若是比较操作,则链表优于顺序表。③基于环境的考虑:顺序表容易实现;链表的操作是基于指针的。总之,通常较稳定的线性表选择顺序存储;而动态性较强的线性表宜选择链式存储。选学生会主席问题(P70)的算法分析:先为5个候选人设置5个计数器,然后根据选票分别对5个计数器累加1。即数组用于存储统计结果,而其下标则是输入的原始信息。编程统计身高问题(P71)的算法分析:由于多数统计区间的大小都固定为5,这样用“身高/5~29”做下标,只须开辟8个元素的数组,对应8个统计档次,即可完成统计工作。统计3科全及格的学生问题(P71)的算法分析:从语文名单中逐一抽出及格学生学号,先在代数名单中查找,若有该学号,则代数也及格了,再在外语名单中查找,看该学号是否外语也及格了,若仍在,则该学号学生3科全及格,否则至少有一科不及格。语文名单中没有的学号,不可能3科全及格,所以,语文名单处理完后算法就可以结束了。数字编号翻译成英文编号问题(P73)的算法分析:将英文的“zero~nine”存储在数组中,对应下标为“0~9”。通过求余、取整运算,可以取到编号的各个位数字。用这个数字作下标,正好能找到对应的英文数字。高精度数据×长整数问题(P78)的算法分析:一个高精度数据与一个自然数的乘法运算过程,用一重循环来实现,循环变量i代表当前参与运算的数组下标,d表示存储进位。算法分析总复习第3页共7页统计50个学生中至少有3门成绩高于90分的人数问题(P91)的算法分析:对每个同学,先计算其成绩高于90分的课程科目,若超过3,则累加到满足条件的人数中。用二重循环实现以上过程,外层循环模拟50个同学,内层循环模拟5门课程。开灯问题(P92)的算法分析:定义有n个元素的a数组,它的每个下标变量a[i]视为一灯,i表示其编号。a[i]=1表示第i盏灯处于打开状态,a[i]=0表示第i盏灯处于关闭状态。通过算术运算a[i]=1-a[i],就能很好地模拟开关灯的操作。数字圆圈问题(P93)的算法分析:数组定义为a[n],则有a[0]~a[n-1]共n个元素。用i代表下标,题目就是顺序将a(i-1)与a(i+1)相乘,通过求余运算求出乘积的最大值和最小值。任意3个数的最小公倍数问题(P97和P136)的算法分析:用蛮力法最方便,但运算时间最长。警察抓小偷问题(P99)的算法分析:将a、b、c、d4个人进行编号,号码分别是1、2、3、4。接着用枚举法来解决。老师预测数学竞赛问题(P100)的算法分析:利用三重循环把所有的情况枚举出来即可。找次品问题(P102)的算法分析:1~10号箱取产品的件数分别为02~92件,然后称量,就可以很简单地找到次品。数学模型的定义:数学模型是利用数学语言模拟现实的模型。把现实模型抽象、简化为某种数学结构是数学模型的基本特征。上楼梯问题(P114)的算法分析:设n阶台阶的走法数位f(n),则:2)2()1(2211)(nnfnfnnnf迭代法的定义:也称辗转法,是一种不断用变量的旧值推出新值的解决问题的方法。兔子繁殖问题(P124)的算法分析:把a,b表示成每月的前2个月和前1个月的兔子的对数,它们的初值均为1,这样3月兔子的对数c=a+b;求4月兔子的对数时,先将4月前2个月和前1个月兔子的对数存储在变量a,b中,即a=b,b=c,再将4月份兔子的对数继续保存在变量c中,即c=a+b+…当然,在变量中的数据被覆盖之前应先行输出已求解的结果。main(){inti,a=1,b=1;printf(“%d%d”,a,b);fot(i=1;i=10;i++){c=a+b;printf(“%d”,c);a=b;b=c;}算法分析总复习第4页共7页}倒推法的定义:是对某些特殊问题,所采用的从后向前推解的方法。杨辉三角(限定用1个一维数组完成)问题(P)的算法分析:从每一行第i个元素倒着向前计算,则可避免这种情况出现迭代表达式如下:A[1]=A[i]=1;A[j](i行)=A[j](i-1行)+A[j-1](i-1行)j=i-1,i-2,…,2;穿越沙漠问题(P128)的算法分析:倒着累加储油点间的距离,并计算各储油点的储油量,直到总距离超过1000千米,求解距出发点最近的一个储油点的位置及储油量,问题就得以解决。牛顿迭代法的定义:又称切线法,首先,选择一个接近f(x)零点的0x,计算相应的)(0xf的切线斜率)(0'xf;然后,根据牛顿迭代公式)()('1nnnnxfxfxx求得1x。该方法具有更高收敛速度。二分逼近法的定义:f(x)在区间[a,b]上连续,f(a)*f(b)0。令[0a,0b]=[a,b],2000bac,若f(0)=0,则0c为f(x)=0的根;否则,若)(0af与)(0cf异号,则令[1a,1b]=[0a,0c];若)(0bf与)(0cf异号,则令[1a,1b]=[0c,0b]。依此做下去,当发现)(ncf=0时或区间[na,nb]足够小,就认为找到了方程的根。枚举法的定义:是蛮力策略的一种表现形式,它根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找出满足问题条件的解。蛮力法的典型范例:(P136)1)最小公倍数问题;2)狱吏问题。分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的几个相似问题,以便分而治之,各个击破。与递归算法相似。分治法的基本步骤:1)分解;2)解决;3)合并。大整数乘法问题(P146)的算法分析:将两个乘数及其积都按由低位到高位的顺序,逐位存储到数组元素中。存储好两个高精度数据后,模拟竖式乘法,让两个高精度数据的按位交叉相乘,并逐步累加,即可得到精确的计算结果。用二重循环就可控制两个数的各位数字按位交叉相乘的过程。贪婪算法的定义:又叫登山法,其根本思想是逐步获得最优解,是解决最优化问题时的一种简单但适用范围有限的策略。“贪婪”可以理解为以逐步的局部最优,达到最终的全局最优。埃及分数问题(P160)的算法分析:找最小的n,使分数f1/n;输出1/n;计算f=f-1/n;若此时的f是埃及分数,输出f,否则返回第一步。算法分析总复习第5页共7页贪心算法的基本思路:从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解。动态规划的基本思想:把求解的问题分成许多阶段或多个子问题,然后按顺序求解各子问题。前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。不同算法策略特点总结:1、贪婪法:“通过局部最优得到全局最优”2、递推法:由当前问题的逐步解决从而得到整个问题的解,多用于计算。3、递归法:利用大问题与其子问题间的递推关系来解决问题。4、枚举法:逐一尝试问题的所有可能的解,从而找出真正的解,多用于决策类问题。5、递归回溯法:通过递归尝试遍历问题各个可能解得的通路,当发现此路不通时,回溯到上一步继续尝试别的通路。6、分治法:把一个大问题分解成若干个容易解决的子问题,分而治之,然后把子问题的解合成,得到大问题的解,多用于较复杂的问题。7、动态规划法:通过多阶段决策过程来解决问题。每个阶段决策的结果是一个决策结果序列,这个结果序列的最优结果,取决于以后每个阶段的决策。搜索算法的定义:有目的地枚举一个问题的部分或所有的可能情况,从而找到问题的解。显示图的常用方法:1)邻接矩阵法:邻接矩阵是表示顶点之间相邻关系的矩阵。2)邻接表法:对于图G中的每个结点iv,该方法把所有邻接于iv的顶点jv链成一个单链,这个单链表就称为顶点iv的邻接表。邻接表由顶点表和边表两部分组成。广度优先搜索算法的基本思路:通过搜索图的过程中进行相应的操作,从而解决问题,主要用于解决在显式图中寻找某一方案的问题。1)邻接表表示图的广度优先搜索算法:intvisited[n];bfs(intk,graphhead[]){intI;queueQ;算法分析总复习第6页共7页edgenode*p;InitQueue(Q);print(“visitvertex”,k);visited[k]=1;EnQueue(Q,k);while(notQueueEmpty(Q)){i=DeQueue(Q);p=head[i].firstedge;while(pnull){if(visited[p-adjvex]=0){print(“visitertex”,p-adjvex);visited[p-adjvex]=1;EnQueue(Q,p-adjvex);}p=p-next;}}}2)邻接矩阵表示的图的广度优先搜索算法:brsm(intk,graphg[][100],intn){inti,j;queueQ;InitQueue(Q);print(“visitvertex”,k);visited[k]=1;EnQueue(Q,k);while(notQueueEmpty(Q)){i=DeQueue(Q);for(j=0;jn;j++)if(g[i][j]=1andvisited[j]=0){print(“visitvertex”,j);visited[j]=1;EnQueue(Q,j);}}}选路径问题(P198)的算法分析:运用广度优先搜索,逐层搜索正好可以尽快
本文标题:算法分析总复习
链接地址:https://www.777doc.com/doc-2174280 .html