计算机常用算法_g.pptVIP

  • 13
  • 0
  • 约1.37万字
  • 约 60页
  • 2018-06-21 发布于河南
  • 举报
计算机常用算法_g

5、动态规划算法举例 3)0-1背包问题(续) 三、动态规划 x[i]=1;c-=w[i] x[n]=m[n][c]0 ? 1:0 x[i]=0 m[i][c]==m[i+1][c] ? for(i=1;in;i++) 4` 构造最优解 显然最后要求出0-1向量X,以x1为例,与m[2][c] -m[1][c]是否为零有关……。于是有下列的求X的N-S图: 1、引例-哈夫曼树、最小生成树 四、贪心算法 2、贪心算法的基本思想 贪心算法是通过一系列的选择来得到一个问题的最优解。它所做的每一次选择都是当前状态下某种意义的最好选择,即贪心选择。希望通过每次的贪心选择导致最终结果是问题的一个最优解(局部最优?整体最优)。 3、贪心算法与动态规划算法的差别 二者都具有最优子结构性质,但贪心算法需要确保局部最优能使得整体最优(自顶向下),而动态规划算法常需要做大量的选择判断(自底向上)。 3、贪心算法与动态规划算法的差别 四、贪心算法 0-1背包问题与背包问题(重量/价值/容量)。 这里的0-1是指某件物品要么装入,要么不装。 前已介绍,0-1背包问题可以用动态规划来求最优解,而背包问题用贪心算法求解比较容易:即将重量价值比大的先装入……直到包装满(可装入某物品的部分)。而0-1背包问题却不能用贪心算法来求解,因为贵者先的策略可能会让包装不满。 4、贪心算法的一般求解步骤 1) 分析最优子结构性质; 2) 自顶向下,构造最优解。 5、贪心算法示例-多机调度问题 四、贪心算法 有个n作业,各需要一定的时间完成,任务i需要的时间是ti (i=1,2,3…n) ,假设有m个性能相似的计算机来处理上述作业,每个作业只能交一台计算机处理,每台计算机任一时刻只能处理一个作业,问如何调度这些作业,使得在最短的时间内处理完全部的作业。 1` 分析最优子结构性质 最短时间完成全部任务就是说各计算机间处理的任务总时间相差最小,而这个差的极限值是0,即平均分配作业,但同一作业不能被分配给多台计算机来完成,故作业分配的关键是各计算机完成的总时间差别最小。 5、贪心算法示例-多机调度问题(续) 四、贪心算法 2` 自顶向下,构造最优解 为一达到各计算机完成的总作业时间差别最小这一目标。我们必须:总将最大的作业分配给目前任务量最少的计算机。 我们的算法策略中,需要对各作业的时间和目前各计算机已取得总任务量进行排序,同时我们还需要标记各个作业的分配情况,故我们需要定义适当的数据结构来存储数据。 作业数组t[] j t i 作业数组T[] T i 计算机数组J[] 5、贪心算法示例-多机调度问题(续) 四、贪心算法 有了上面的准备,我们可以得到下面的N-S图: 初始化T[] J[] 对J[]按总时间升序排列 T[i]分配给J[0] for(i=0;in;i++) T[]按任务时间降序排列 最后需要说明的是,就本问题而言,贪心算法所求只能算是一个近似解,如任务[6,5,5,3,3]分配给两台计算机,所得就不是最优解(其实多机分配问题目前尚未找到一个完整的求解方法)。 1、回溯算法的基本思想 五、回溯算法 回溯算法有“通用解题法”之称。它的基本思想是在有限的可能解空间树中进行深度优先探索(可能用到剪枝函数),直到找到一个或全部的解。 0-1背包问题: 重/值 16/45 15/25 15/25 C=30 0/0 16/45 31/70 0/0 16/45 31/70 16/45 15/25 30/50 15/25 0/0 15/25 0/0 1、回溯算法的基本思想 五、回溯算法 售货员问题: 出去推销一次的最小代价。 1:0 2:30 4:4 3:35 3:60 2:11 4:55 4:21 1:59 1 2 3 4 6 30 10 20 5 4 3:6 4:40 4:26 1:25 2:14 3:19 2:29 3:24 1:25 2、回溯算法求解的一般步骤 五、回溯算法 1)针对问题定义问题的解空间; 2)确定易于搜索的解空间结构; 3)以深度优先的方式搜索解空间,直到找到一个或全部的解,并且在搜索过程中适当使用剪枝函数以避免无效搜索。 3、回溯算法示例 1) 0-1背包问题: 如前演示所示,我们通过深度优先一件件物品进行测试,左子树是装入,右子树是不装入,且引入两个剪枝函数: 1` 左子树目前已超载; 2` 右子树目前已装的与尚未装的和不比已找到的大(这一函数

文档评论(0)

1亿VIP精品文档

相关文档