算法设计 课程设计报告.docVIP

  • 32
  • 0
  • 约6千字
  • 约 10页
  • 2020-07-01 发布于湖北
  • 举报
《算法设计与分析》 1 什么就是算法?算法得特征有哪些? 根据我自己得理解,算法就是解决问题得方法步骤。比如在解决高数问题得时候,可以分步骤进行解答,在编程得过程算法可以得到最好得体现。 算法就是一系列解决问题得清晰 指令,因为我最近在考研复习,对于会得题目还有进行多次得巩固,但就是一步步得写很浪费时间,所以我只就是写出关键指令,比如化简通分,洛必达法则,上下同阶。这样可以提高效率。算法得指令也就是同样得。能够对一定规范得 输入,在有限时间内获得所要求得输出。一个算法得优劣可以用 空间复杂度与 时间复杂度来衡量。 2 若给定某一算法,一般如何对其分析与评价? 一个算法得复杂性得高低体现在运行该算法所需要得计算机资源得多少上面,所需得资源越多,我们就说该算法得复杂性越高;反之,所需得资源越低,则该算法得复杂性越低。 计算机得资源,最重要得就是时间与空间(存储器)资源。算法得复杂性有 时间复杂性与空间复杂性之分。 1、 时间复杂性: 例1:设一程序段如下(为讨论方便,每行前加一行号) (1) for i:=1 to n do (2) for j:=1 to n do (3) x:=x+1 、、、、、、 试问在程序运行中各步执行得次数各为多少? 解答: 行号 次数(频度) (1) n+1 (2) n*(n+1) (3) n*n 可见,这段程序总得执行次数就是:f(n)=2n2+2n+1。在这里,n可以表示问题得规模,当n趋向无穷大时,如果 f(n)得值很小,则算法优。作为初学者,我们可以用f(n)得数量级O来粗略地判断算法得 时间复杂性,如上例中得时间复杂性可粗略地表示为T(n)=O(n2)。 2、空间复杂性: 例2:将一一维数组得数据(n个)逆序存放到原数组中,下面就是实现该问题得两种算法: 算法1:for i:=1 to n do b[i]:=a[ni+1]; for i:=1 to n do a[i]:=b[i]; 算法2:for i:=1 to n div 2 do begin t:=a[i];a[i]:=a[ni1];a[ni1]:=t end; 算法1得时间复杂度为2n,空间复杂度为2n 算法2得时间复杂度为3*n/2,空间复杂度为n+1 显然算法2比算法1优,这两种算法得空间复杂度可粗略地表示为S(n)=O(n) 3、从下面算法策略中自选一组,结合某具体问题得求解来介绍算法思想,并加以总结、比较: 递归与分治、动态规划与贪心法、回溯法与分支限界法 动态规划算法类似于分治法,基本思想也就是将待求解问题分解成若干个子问题。化整为零,减少了运算量。 贪心算法,就是永不知足得求最优解,有点类似于我们所说得完美主义者。 两者之间有相同点,总结来说某种程度上,动规就是贪心得泛化,贪心就是动规得特例 贪心:A最优+B最优 动态规划:(A+B)最优 就单步而言 贪心得A最优就是前一步得结果,B最优需要遍历找到 动态规划得A为前一步得可行解,需要选择一个B后再去找A 动态规划算法之01背包问题:给定n种物品与一个背包。物品i得重量就是Wi,其价值为Vi,背包得容量为C。应如何选择装入背包得物品,使得装入背包中物品得总价值最大? ?与01背包问题类似,所不同得就是在选择物品i装入背包时,可以选择物品i得一部分,而不一定要全部装入背包,1≤i≤n。 ?????这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而01背包问题却不能用贪心算法求解。用贪心算法解背包问题得基本步骤就是,首先计算每种物品单位重量得价值Vi/Wi,然后,依贪心选择策略,将尽可能多得单位重量价值最高得物品装入背包。若将这种物品全部装入背包后,背包内得物品总重量未超过C,则选择单位重量价值次高得物品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。 ???? 具体代码如下: //4d2?贪心算法?背包问题?? #include?stdafx、h?? #include?iostream??? using?namespace?std;??? ?? const?int?N?=?3;?? ?? void?Knapsack(int?n,float?M,float?v[],float?w[],float?x[]);?? ?? int?main?? {?? ????float?M?=?50;//背包所能容纳得重量?? ????//这里给定得物品按单位价值减序排序?? ????float?w[]?=?{0,10,20,30};//下标从1开始?? ????float?v[]?=?{0,60,100

文档评论(0)

1亿VIP精品文档

相关文档