算法导论-贪心算法习题解
2012-04-22 08:56
302 查看
16.2-6 说明如何在O(n)时间内解决部分背包问题。
解:先求avgi = vi/wi,如果按照avgi从大到小排序,再贪心选择的话,时间复杂度为O(nlgn),当然可以采用非比较的排序算法达到O(n)的时间复杂度。更一般的情况,不需要排序,例如:如果a1, a2,a3是avgi 最大的三个物品,如果它们的总量和不大于W,我们是不需要知道它们间的相对顺序的。于是有以下算法:找avg 的中位数m,将avg 分为三个集合G = {ai: avgi < m}, Q = {ai: avgi = m}, P = {ai: avgi > m}。分别对G, Q, P中元素求和得SG, SQ, SP。
1. 如果W < SG, 则令物体的集合为O = G,对集合O递归进行上述过程。
2. 如果 SG<=W <= SG+SQ,则将集合G中的元素都放入包中,并将集合Q总元素尽可能多的放入包中,结束。
3. 如果 SG+SQ < W, 将G,Q中元素放入包中。令物体集合O = P,总重W = W - SG - SQ。递归进行上述过程。
时间复杂度为T(n) = T(n/2) + O(n), T(n) = O(n)。
16-2 最小化平均时间调度
解:a) 按照最短pi 优先调度。
b) 按照ri 递增的顺序启动任务,启动aj 时,如果当前任务ai 的剩余时间大于aj ,则aj 抢占ai。如果没有任务到达且当前人物完成,则从挂起的任务中挑选剩余时间最短的任务开始运行。
相关文章推荐
- 【算法导论】学习笔记——第16章 贪心算法
- 算法导论6.1-2习题解答
- 算法导论8.3-4习题解答(基数排序)
- 算法导论——贪心算法
- 【算法导论(第三版)】第二章部分习题代码
- 算法导论-单源最短路径习题解
- 算法导论第六章习题答案(第三版) Introduction to Algorithm
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- Introduction to Algorithms 算法导论 第4章 递归式 学习笔记及习题解答
- 算法导论6.1-7习题解答
- 算法导论 习题22.3-12 判断图是否是单连通的
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- 算法导论习题(10)
- 算法导论12.1-3习题解答(非递归中序遍历)
- 算法导论第二版习题试解-第二章练习2.2
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 【算法导论习题】Exercises 9.3-8
- 算法导论6.2-5习题解答(堆排序)
- 算法导论10.1-7习题解答(用两个队列实现一个栈)
- 【算法导论】贪心算法,递归算法,动态规划算法总结