2022年算法设计与分析学习总结 .pdf
精品文档交流算法分析与设计学习总结题目 :算法分析与设计学习总结学院信息科学与工程学院专业2013 级计算机应用技术届次学生姓名学号2013110657 二一三年一月十五日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 精品文档交流算法分析与设计学习总结本学期通过学习算法分析与设计课程,了解到: 算法是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。算法能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这个问题。 不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂性和时间复杂度来衡量。算法可以使用自然语言、伪代码、 流程图等多种不同的方法来描述。 计算机系统中的操作系统、语言编译系统、 数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。算法设计与分析是计算机科学与技术的一个核心问题。设计的算法要具有以下的特征才能有效的完成设计要求,算法的特征有:(1)有穷性。算法在执行有限步后必须终止。(2)确定性。算法的每一个步骤必须有确切的定义。(3)输入。一个算法有0 个或多个输入,作为算法开始执行前的初始值,或初始状态。(4)输出。一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。 (5)可行性。在有限时间内完成计算过程。算法设计的整个过程,可以包含对问题需求的说明、数学模型的拟制、 算法的详细设计、算法的正确性验证、算法的实现、算法分析、程序测试和文档资料的编制。算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法和并行算法。经典的算法主要有:1、 穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,bing 从中找出那些符合要求的候选解作为问题的解。穷举算法特点是算法简单,但运行时所花费的时间量大。有些问题所列举书来的情况数目会大得惊人, 就是用高速计算机运行,其等待运行结果的时间也将使人无法忍受。我们在用穷举算法解决问题是,应尽可能将明显不符合条件的情况排除在外,以尽快取得问题的解。2、 迭代算法迭代法是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或方程组) 的过程, 为实现这一过程所使用的方法统称为迭代法。迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0, 用某种数学方法导出等价的形式x=g(x), 然后按以下步骤执行:(1)选一个方程的近似根,赋给变量x0。(2) 将 x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0。(3)当 x0与 x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。3、 递推算法递推算法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的。4、 递归算法递归算法是一种直接或间接的调用自身的算法。能采用递归描述的算法通常有这样的特征:为求解规模为n 的问题, 设法将它分解成规模较小的问题, 然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 精品文档交流模较大问题的解。特别的,当规模n=0 或 1 时,能直接得解。递归算法解决问题的特点有:(1) 递归就是在过程或函数里调用自身(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低(4) 在递归调用的过程中系统为每一层的返回点、局部变量等开辟堆栈来存储。举例如下:Fibonacci 数列int fib50; /采用数组保存中间结果void fibonacci(int n) fib0 = 1; fib1 = 1; for (int i=2; in) /更新最优解if(cwbestw) for(int i=1; i=n; i+) bestxi = xi; bestw = cw; return; /更新剩余集装箱的重量r -= wt; /搜索左子树if(cw+wtbestw) xt=0; Backtrack(t+1); r += wt;/恢复状态 9、 分支限界算法分支限界算法是一种在表示问题解空间的树上进行系统搜索的方法。该方法使用了广度名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 精品文档交流优先策略,同时采用最大收益(或最小损耗)策略来控制搜索的分支。分支限界法的基本思想是对包含具有约束条件的最优化问题的所有可行解的解(数目有限)空间进行搜索。 该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集,并为每个子集内的解计算一个下界或上界。在每次分支后, 对所有界限超出已知可行解的那些子集不再做进一步分支,解的许多子集可不予考虑,从而缩小了搜索的范围。这一过程一直进行到找出可行解的值不大于任何子集的界限为止。这种算法一般可以求得最优解。分支结点的选择从活结点表中选择下一个活结点作为新的扩展结点,分支限界算法通常可以分为两种形式:1、 FIFO( First In First Out )分支限界算法按照先进先出(FIFO)原则选择下一个活结点作为扩展结点,即从活结点表中取出结点的顺序与加入结点的顺序相同。2、 最小耗费或最大收益分支限界算法在这种情况下,每个结点都有一个耗费或收益。根据问题的需要,可能是要查找一个具有最小耗费的解,或者是查找一个具有最大收益的解。提高分支限界算法的效率实现分支限界算法时,首先确定目标值的上下界,边搜索边减掉搜索树的某些分支,提高搜索效率。在搜索时, 绝大部分需要用到剪枝。 “剪枝 ” 是搜索算法中优化程序的一种基本方法,需要通过设计出合理的判断方法,以决定某一分支的取舍。若我们把搜索的过程看成是对一棵树的遍历,那么剪枝就是将树中的一些“死结点” ,不能到达最优解的枝条“ 剪” 掉,以减少搜索的时间。装载问题装载问题分支限界算法的数据结构#define NUM 100 int n; /集装箱的数量int c; /轮船的载重量int wNUM; /集装箱的重量数组算法实现int MaxLoading() queue Q; Q.push(-1); int i = 0; int Ew = 0; int bestw = 0; int r = 0; for(int j=1; jn; j+) r += wj; /搜索子空间树while (true) /检查左子树名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 精品文档交流int wt = Ew+wi; if (wtbestw) bestw = wt; /加入活结点队列if (ibestw & in-1) Q.push(Ew); /从队列中取出活结点Ew = Q.front(); Q.pop(); if (Ew=-1) /判断同层的尾部 if (Q.empty() return bestw; /同层结点尾部标志Q.push(-1); /从队列中取出活结点Ew = Q.front(); Q.pop(); i+; r -= wi; return bestw; 在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法 +数据结构这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。作为IT 行业学生,学习算法无疑会增强自己的竞争力,修炼自己的“内功”。谢谢老师的指导, 学习算法分析与设计使我对软件基础知识中算法的地位有了充分的了解,虽然课程结束了,但我依然还会继续学习算法分析与设计,以后我将充分利用所学到我实际的开发项目中。【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章, 期待你的好评和关注,我将一如既往为您服务】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -