知识大全 第 1 章 贪婪算法

Posted

篇首语:做好自己,不为别人的欣赏而存在,却为着自己的特色而活着。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 第 1 章 贪婪算法相关的知识,希望对你有一定的参考价值。

  虽然设计一个好的求解算法更像是一门艺术 而不像是技术 但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法 你可以使用这些方法来设计算法 并观察这些算法是如何工作的 一般情况下 为了获得较好的性能 必须对算法进行细致的调整 但是在某些情况下 算法经过调整之后性能仍无法达到要求 这时就必须寻求另外的方法来求解该问题

  本章首先引入最优化的概念 然后介绍一种直观的问题求解方法 贪婪算法 最后 应用该算法给出货箱装船问题 背包问题 拓扑排序问题 二分覆蓋问题 最短路径问题 最小代价生成树等问题的求解方案

   最优化问题

  本章及后续章节中的许多例子都是最优化问题( optimization problem) 每个最优化问题都包含一组限制条件( c o n s t r a i n t)和一个优化函数( optimization function) 符合限制条件的问题求解方案称为可行解( feasible solution) 使优化函数取得最佳值的可行解称为最优解(optimal solution)

  例 [ 渴婴问题] 有一个非常渴的 聪明的小婴儿 她可能得到的东西包括一杯水 一桶牛奶 多罐不同种类的果汁 许多不同的装在瓶子或罐子中的苏打水 即婴儿可得到n 种不同的饮料 根据以前关于这n 种饮料的不同体验 此婴儿知道这其中某些饮料更合自己的胃口 因此 婴儿采取如下方法为每一种饮料赋予一个满意度值 饮用 盎司第i 种饮料 对它作出相对评价 将一个数值si 作为满意度赋予第i 种饮料

  通常 这个婴儿都会尽量饮用具有最大满意度值的饮料来最大限度地满足她解渴的需要 但是不幸的是 具有最大满意度值的饮料有时并没有足够的量来满足此婴儿解渴的需要 设ai是第i 种饮料的总量(以盎司为单位) 而此婴儿需要t 盎司的饮料来解渴 那么 需要饮用n种不同的饮料各多少量才能满足婴儿解渴的需求呢?

  设各种饮料的满意度已知 令xi 为婴儿将要饮用的第i 种饮料的量 则需要解决的问题是

  找到一组实数xi( ≤i≤n) 使n ?i = si xi 最大 并满足 n ?i= xi =t 及 ≤xi≤ai

  需要指出的是 如果n ?i = ai < t 则不可能找到问题的求解方案 因为即使喝光所有的饮料也不能使婴儿解渴

  对上述问题精确的数学描述明确地指出了程序必须完成的工作 根据这些数学公式 可以对输入/ 输出作如下形式的描述

  输入 n t si ai(其中 ≤i≤n n 为整数 t si ai 为正实数)

  输出 实数xi( ≤i≤n) 使n ?i= si xi 最大且n ?i= xi =t( ≤xi≤ai) 如果n ?i = ai

  在这个问题中 限制条件是n ?i= xi =t 且 ≤xi≤ai ≤i≤n 而优化函数是n ?i= si xi 任何满足限制条件的一组实数xi 都是可行解 而使n ?i= si xi 最大的可行解是最优解

  例 [装载问题] 有一艘大船准备用来装载货物 所有待装货物都装在货箱中且所有货箱的大小都一样 但货箱的重量都各不相同 设第i 个货箱的重量为wi( ≤i≤n) 而货船的最大载重量为c 我们的目的是在货船上装入最多的货物

  这个问题可以作为最优化问题进行描述 设存在一组变量xi 其可能取值为 或 如xi 为 则货箱i 将不被装上船;如xi 为 则货箱i 将被装上船 我们的目的是找到一组xi 使它满足限制条件n ?i = wi xi ≤c 且x i ? ≤i≤n 相应的优化函数是n ?i= xi

  满足限制条件的每一组xi 都是一个可行解 能使n ?i= xi 取得最大值的方案是最优解

  例 [最小代价通讯网络] 城市及城市之间所有可能的通信连接可被视作一个无向图 图的每条边都被赋予一个权值 权值表示建成由这条边所表示的通信连接所要付出的代价 包含图中所有顶点(城市)的连通子图都是一个可行解 设所有的权值都非负 则所有可能的可行解都可表示成无向图的一组生成树 而最优解是其中具有最小代价的生成树

cha138/Article/program/sjjg/201311/23602

相关参考

知识大全 第8章排序(算法设计)习题练习答案

将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法解   重写的算法如下 voidInsertSort(SeqListR)  //对顺序表中记录

知识大全 贪婪算法思想

  在贪婪算法(greedymethod)中采用逐步构造最优解的方法在每个阶段都作出一个看上去最优的决策(在一定的标准下)决策一旦作出就不可再更改作出贪婪决策的依据称为贪婪准则(greedycrite

知识大全 数据结构第1章 绪论[1]

  一选择题  算法的计算量的大小称为计算的()【北京邮电大学二(/分)】  A效率B复杂性C现实性D难度  算法的时间复杂度取决于()【中科院计算所二(分)】  A问题的规模B待处理数据的初态CA和

知识大全 贪婪算法之——货箱装船

  这个问题来自例船可以分步装载每步装一个货箱且需要考虑装载哪一个货箱根据这种思想可利用如下贪婪准则从剩下的货箱中选择重量最小的货箱这种选择次序可以保证所选的货箱总重量最小从而可以装载更多的货箱根据这

知识大全 贪婪算法之——最小耗费生成树

  在例及中已考察过这个问题因为具有n个顶点的无向网络G的每个生成树刚好具有n条边所以问题是用某种方法选择n条边使它们形成G的最小生成树至少可以采用三种不同的贪婪策略来选择这n条边这三种求解最小生成树

知识大全 贪婪算法之——拓扑排序

  一个复杂的工程通常可以分解成一组小任务的集合完成这些小任务意味着整个工程的完成例如汽车装配工程可分解为以下任务将底盘放上装配线装轴将座位装在底盘上上漆装刹车装门等等任务之间具有先后关系例如在装轴之

知识大全 贪婪算法之——背包问题

  在/背包问题中需对容量为c的背包进行装载从n个物品中选取装入背包的物品每件物品i的重量为wi价值为pi对于可行的背包装载背包中物品的总重量不能超过背包的容量最佳装载是指所装入的物品价值最高即n?i

知识大全 贪婪算法之——二分覆蓋

  二分图是一个无向图它的n个顶点可二分为集合A和集合B且同一集合中的任意两个顶点在图中无边相连(即任何一条边都是一个顶点在集合A中另一个在集合B中)当且仅当B中的每个顶点至少与A中一个顶点相连时A的

知识大全 贪婪算法之——单源最短路径

  在这个问题中给出有向图G它的每条边都有一个非负的长度(耗费)a[i][j]路径的长度即为此路径所经过的边的长度之和对于给定的源顶点s需找出从它到图中其他任意顶点(称为目的)的最短路径图a给出了一个

知识大全 第8章排序(基础知识)习题练习

以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序  上述方法中哪些