[电脑基础知识]第3章 蛮力法2.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[电脑基础知识]第3章 蛮力法2

对于一个具有n个元素的集合,其子集数量是2n,所以,不论生成子集的算法效率有多高,蛮力法都会导致一个Ω(2n)的算法。 由于任务分配问题需要考虑的排列数量是n!,所以,除了该问题的一些规模非常小的实例,蛮力法几乎是不实用的。 该算法的效率如何呢?所有不同的点共组成了n(n-1)/2边,对每条边都要对其他n-2个顶点求出在直线方程ax + by = c中的符号,所以,其时间复杂性是O(n3)。 生成n个元素子集的算法如下: 算法3.10——生成子集 1.初始化一个长度为n的比特串s=00…0并将对应的子集输出; 2.for (i=1; i2n; i++) 2.1 s++; 2.2 将s对应的子集输出; 显然,算法3.10的时间复杂性为O(2n),也就是说和子集的数量成正比。 3.4.3 0/1背包问题 0/1背包问题是给定n个重量为{w1, w2, … ,wn}、价值为{v1, v2, … ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中。 用蛮力法解决0/1背包问题,需要考虑给定n个物品集合的所有子集,找出所有可能的子集(总重量不超过背包容量的子集),计算每个子集的总价值,然后在他们中找到价值最大的子集。 10 w1=7 v1=42 w2=3 v2=12 w3=4 v3=40 w4=5 v4=25 背包 物品1 物品2 物品3 物品4 8 {1,4} 12 16 {1,2,3,4} 19 序号 子集 总重量 总价值 序号 子集 总重量 总价值 1 φ 0 0 9 {2,3} 7 52 2 {1} 7 42 10 {2,4} 8 37 3 {2} 3 12 11 {3,4} 9 65 4 {3} 4 40 12 {1,2,3} 14 不可行 5 {4} 5 25 13 {1,2,4} 15 6 {1,2} 10 54 14 {1,3,4} 16 7 {1,3} 11 不可行 15 {2,3,4} 12 不可行 不可行 不可行 不可行 不可行 3.4.4 任务分配问题 假设有n个任务需要分配给n个人执行,每个任务只分配给一个人,每个人只分配一个任务,且第j个任务分配给第i个人的成本是C[i, j](1≤i , j≤n),任务分配问题要求找出总成本最小的分配方案。 下图是一个任务分配问题的成本矩阵,矩阵元素C[i, j]代表将任务j分配给人员i的成本。 C= 9 2 7 6 4 3 5 8 1 任务1 任务2 任务3 人员1 人员2 人员3 任务分配问题就是在分配成本矩阵中的每一行选取一个元素,这些元素分别属于不同的列,并且元素之和最小。 可以用一个n元组(j1, j2, …, jn)来描述任务分配问题的一个可能解,其中第i个分量ji(1≤i≤n)表示在第i行中选择的列号,因此用蛮力法解决任务分配问题要求生成整数1~n的全排列,然后把成本矩阵中的相应元素相加来求得每种分配方案的总成本,最后选出具有最小和的方案。 序号 分配方案 总成本 1 1, 2, 3 9+4+1=14 2 1, 3, 2 9+3+8=20 3 2, 1, 3 2+6+1=9 4 2, 3, 1 2+3+5=10 5 3, 1, 2 7+6+8=21 6 3, 2, 1 7+4+5=16 3.5 图问题中的蛮力法 3.5.1 哈密顿回路问题 3.5.2 TSP问题 3.5.1 哈密顿回路问题 著名的爱尔兰数学家哈密顿(William Hamilton,1805—1865)提出了著名的周游世界问题。他用正十二面体的20个顶点代表20个城市,要求从一个城市出发,经过每个城市恰好一次,然后回到出发城市。 19 8 3 14 1 20 2 13 15 4 5 6 7 9 10 11 12 16 17 18 正十二面体的展开图,按照图中的顶点编号所构成的回路,就是哈密顿回路的一个解。 使用蛮力法寻找哈密顿回路的基本思想是:对于给定的无向图G=(V, E),首先生成图中所有顶点的排列对象(vi1, vi

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档