版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习 好资料学习-好资料算法分析与设计学习总结题目:算法分析与设计学习总结学院信息科学与工程学院专业2013级计算机应用技术届次学生姓名 学 号 2013110657二O三年一月十五日算法分析与设计学习总结本学期通过学习算法分析与设计课程,了解到: 算法是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。 算法能够对一定规范的输入, 在有限时间内获 得所要求的输出。 如果一个算法有缺陷, 或不适合某个问题, 执行这个算法将不会解决这个 问题。 不同的算法可能用不同的时间、 空间或效率来完成同样的任务。 一个算法的优劣可以 用空间复杂性和时间复杂度来衡量。 算法可以使用自然语言
2、、 伪代码、 流程图等多种不同的 方法来描述。 计算机系统中的操作系统、 语言编译系统、 数据库管理系统以及各种各样的计 算机应用系统中的软件, 都必须使用具体的算法来实现。 算法设计与分析是计算机科学与技 术的一个核心问题。设计的算法要具有以下的特征才能有效的完成设计要求,算法的特征有:(1)有穷性。算法在执行有限步后必须终止。 ( 2)确定性。算法的每一个步骤必须有确切的定义。 ( 3)输 入。一个算法有 0 个或多个输入,作为算法开始执行前的初始值,或初始状态。( 4)输出。一个算法有一个或多个输出, 以反映对输入数据加工后的结果。 没有输出的算法是毫无意义 的。(5)可行性。在有限时间
3、内完成计算过程。算法设计的整个过程, 可以包含对问题需求的说明、 数学模型的拟制、 算法的详细设计、 算法的正确性验证、 算法的实现、算法分析、 程序测试和文档资料的编制。 算法可大致分为 基本算法、数据结构的算法、数论与 代数算法、计算几何的算法、图论的算法、动态规划 以及数值分析、加密算法、排序算法、检索算法和并行算法。经典的算法主要有:1、穷举搜索法 穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验, bing 从中找出 那些符合要求的候选解作为问题的解。穷举算法特点是算法简单, 但运行时所花费的时间量大。 有些问题所列举书来的情况数 目会大得惊人, 就是用高速计算机运行,
4、 其等待运行结果的时间也将使人无法忍受。 我们在 用穷举算法解决问题是, 应尽可能将明显不符合条件的情况排除在外, 以尽快取得问题的解。2、迭代算法 迭代法是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题 (一般是解方程 或方程组) 的过程, 为实现这一过程所使用的方法统称为迭代法。 迭代法是用于求方程或方 程组近似根的一种常用的算法设计方法。设方程为 f(x)=0, 用某种数学方法导出等价的形式 x=g(x), 然后按以下步骤执行:(1)选一个方程的近似根,赋给变量x0。(2)将xo的值保存于变量xi,然后计算g(x”,并将结果存于变量xo。(3) 当xo与xi的差的绝对值还小于
5、指定的精度要求时,重复步骤(2)的计算。若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的xo就认为是方程的根。3、递推算法递推算法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的。4、递归算法递归算法是一种直接或间接的调用自身的算法。能采用递归描述的算法通常有这样的特征: 为求解规模为 n 的问题, 设法将它分解成规 模较小的问题, 然后从这些小问题的解方便地构造出大问题的解, 并且这些规模较小的问题 也能采用同样的分解和综合方法, 分解成规模更小的问题, 并从这些更小问题的解构造出规模较大问题的解。特别的,当规模
6、 n=0 或 1 时,能直接得解。 递归算法解决问题的特点有:(1)递归就是在过程或函数里调用自身(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低(4)在递归调用的过程中系统为每一层的返回点、局部变量等开辟堆栈来存 储。举例如下:Fibonacci 数列int fib50; /采用数组保存中间结果void fibonacci(int n)fib0 = 1;fib1 = 1;for (int i=2; i<=n; i+)fibi = fibi-1+fibi-2;5、分治算法 分治算法是把一个复杂的问题分成两个或
7、更多的相同或相似的子问题, 再把子问题分成 更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即子问题解的合并。如果原问题可分割成 k 个子问题, 且这些子问题都可解, 并可利用这些子问题的解求出 原问题的解, 那么这种分治法就是可行的。 由分治法产生的子问题往往是原问题的较小模式, 这就为使用递归技术提供了方便。 在这种情况下, 反复应用分治手段, 可以使子问题与原问题类型一致而其规模却不断缩小, 最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 分治与递归像一对孪生兄弟, 多高效算法。分治策略的算法设计模式 Divide_and_Conquer ( P)if (|P
8、| v= n0 ) return adhoc(P);divide P into smaller substances P1, for (i = 1; i <= k; k + + )yi = Divide-and-Conquer ( Pi)Return merge (y1, y2, ,yk)经常同时应用在算法设计之中,并由此产生许P2, , Pk;/递归解决 Pi/合并子问题6、贪心算法 贪心算法也称贪婪算法。 它在对问题求解时, 总是做出在当前看来是最好的选择。 它不 从整体最优上考虑,所得出的仅是在某种意义上的局部最优解。贪心算法的基本思路如下:(1)建立数学模型来描述问题(2)把求解
9、的问题分成若干个子问题(3)对每一子问题求解,得到子问题的局部最优解(4) 把子问题的局部最优解合成原来问题的一个解 贪心算法的一般流程 :Greedy(A)/初始解集合为空集/集合 S 没有构成问题的一个解/在候选集合 A 中做贪心选择/判断集合 S 中加入 x 后的解是否可行S= ;while (not solution(S)x = select(A);if feasible(S, x)S = S+x;A = A-x;return S;( 1)候选集合 A :问题的最终解均取自于候选集合A。(2) 解集合S:解集合S不断扩展,直到构成满足问题的完整解。(3) 解决函数solution :检
10、查解集合 S是否构成问题的完整解。(4) 选择函数select:贪心策略,这是贪心算法的关键。(5) 可行函数feasible:解集合扩展后是否满足约束条件。7、动态规划算法 动态规划算法是一种在数学和计算机科学中用于求解包含重叠子问题的最优化问题的方法。 其基本思想是, 将原问题分解为相似的子问题, 在求解的过程中通过子问题的解求出 原问题的解。动态规划算法的步骤(1) 找出最优解的性质,并刻画其结构特征;(2) 递归地定义最优值(写出动态规划方程);(3) 以自底向上的方式计算出最优值;(4) 根据算法最优值时得到的信息,构造一个最优值。动态规划算法的有效性依赖于问题本身所具有的两个重要的
11、性质:最优子结构性质和子问题重叠性质。(1) 最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构 性质。(2) 重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题, 有些子问题被反复计算多次。8、回溯算法回溯法是一种选优搜索法,按选优条件向前搜索, 以达到目标。当探索到某一步时,发 现原先的选择并不优或达不到目标, 就回退一步重新选择, 这种走不通就退回再走的技术成 为回溯法,满足回溯条件的某个状态的点称为“回溯点” 。迷宫问题算法所采用的就是回溯 算法。回溯算法解决问题的过程是先选择某一可能的线索进行试探,每一步试探都有多种方 式,将每一方式都一
12、一试探,如有问题就返回纠正,反复进行这种试探在反复纠正,直到得 出全部符合条件的答案或是问题无解为止。 由于回溯方法的本质是深度优先的方法在解的空 间树中搜索,就要从堆栈中找到回溯的前一个位置继续试探。装载问题回溯算法数据结构#define NUM 100int n;int c;int wNUM;int xNUM;int r;int cw;int bestw;int bestxNUM;/集装箱的数量/轮船的载重量/集装箱的重量数组 /当前搜索的解向量 /剩余集装箱的重量 /当前轮船的载重量 /当前最优载重量/当前最优解算法实现/形参表示搜索第 t 层结点 void Backtrack(int
13、t)/到达叶子结点 if(t>n)/更新最优解 if(cw>bestw) for(int i=1; i<=n; i+)bestxi = xi; bestw = cw; return; /更新剩余集装箱的重量r -= wt;/搜索左子树 if(cw+wt<=c)xt = 1; cw += wt; Backtrack(t+1); cw -= wt;/搜索右子树 if(cw+r>bestw)xt=0; Backtrack(t+1);r += wt;/ 恢复状态该方法使用了广度9、分支限界算法 分支限界算法是一种在表示问题解空间的树上进行系统搜索的方法。 优先策略,同时采
14、用最大收益(或最小损耗)策略来控制搜索的分支。 分支限界法的基本思想是对包含具有约束条件的最优化问题的所有可行解的解 (数目有 限)空间进行搜索。 该算法在具体执行时, 把全部可行的解空间不断分割为越来越小的子集, 并为每个子集内的解计算一个下界或上界。 在每次分支后, 对所有界限超出已知可行解的那 些子集不再做进一步分支, 解的许多子集可不予考虑, 从而缩小了搜索的范围。 这一过程一 直进行到找出可行解的值不大于任何子集的界限为止。这种算法一般可以求得最优解。分支结点的选择 从活结点表中选择下一个活结点作为新的扩展结点, 分支限界算法通常可以分为两种形 式:1、 FIFO ( First I
15、n First Out )分支限界算法 按照先进先出( FIFO )原则选择下一个活结点作为扩展结点,即从活结点表中取出结 点的顺序与加入结点的顺序相同。2、 最小耗费或最大收益分支限界算法 在这种情况下,每个结点都有一个耗费或收益。 根据问题的需要, 可能是要查找一个具有最小耗费的解, 或者是查找一个具有最大收益 的解。提高分支限界算法的效率 实现分支限界算法时, 首先确定目标值的上下界, 边搜索边减掉搜索树的某些分支, 提 高搜索效率。在搜索时, 绝大部分需要用到剪枝。 “剪枝 ”是搜索算法中优化程序的一种基本方法, 需 要通过设计出合理的判断方法,以决定某一分支的取舍。若我们把搜索的过程
16、看成是对一棵树的遍历,那么剪枝就是将树中的一些“死结点 ”, 不能到达最优解的枝条 “剪 ”掉,以减少搜索的时间。装载问题装载问题分支限界算法的数据结构#define NUM 100int n;/集装箱的数量int c;/轮船的载重量int wNUM;/集装箱的重量数组算法实现int MaxLoading()queue<int> Q;Q.push(-1);int i = 0;int Ew = 0;int bestw = 0;int r = 0;for(int j=1; j<n; j+)r += wj;/搜索子空间树while (true)/检查左子树int wt = Ew+w
17、i;if (wt<=c)/ 检查约束条件if (wt>bestw) bestw = wt; /加入活结点队列 if (i<n-1) Q.push(wt);/检查右子树/检查上界条件if (Ew+r>bestw && i<n-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;在计算机软件专
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高考语文复习知识清单第2章文学类文本阅读(一)小说专题07写小说文学短评(学生版+解析)
- 各种培训课件教学课件
- 二年级数学计算题专项练习1000题汇编集锦
- 肉鸭采购合同(2篇)
- 望庐山课件教学课件
- 南京工业大学浦江学院《实验艺术》2021-2022学年第一学期期末试卷
- 钢结构施工组织设计【超完美版】
- 多细胞生物体说课稿
- 《长方形的面积》说课稿
- 《小数的加减法》说课稿
- 情侣分手经济纠纷起诉书模板
- 单人心肺复苏操作评分标准
- 前庭康复-医学课件
- 智能林业装备与技术
- 安徽省芜湖市2023-2024学年七年级上学期期中数学试卷
- 地下害虫-蟋蟀类
- 企业周边环境风险分析
- 怎样写科研项目申请书(PPT)
- 矿产资源-三率-指标要求+第13部分:粘土矿产
- 语文大单元教学设计+作业设计:六上八单元跨学科主题活动
- 第一讲 中国传统艺术之书法
评论
0/150
提交评论