算法导论示例-GreedyActivitySelector

原创 2006年06月16日 23:41:00
/** * Introduction to Algorithms, Second Edition * 16.1 An activity-selection problem * @author 土豆爸爸 * */ import java.util.ArrayList; import java.util.List; public class GreedyActivitySelector { /** * 活动 */ static class Activity { int start; //开始时间 int finish; //结果时间 public Activity(int start, int finish) { this.start = start; this.finish = finish; } } /** * 求相互兼容的最大子集 * @param activities 按结束时升序排列的活动数组 * @return 相互兼容的最大子集 */ public static List<Activity> select(Activity[] activities) { List<Activity> list = new ArrayList<Activity>(); list.add(activities[0]); //取第1个活动 int i = 0; //记录最后一个被选择的活动的索引 for(int m = 0; m < activities.length; m++) { if(activities[m].start > activities[i].finish) { //取下一个兼容活动 list.add(activities[m]); i = m; } } return list; } } import java.util.List; import junit.framework.TestCase; public class GreedyActivitySelectorTest extends TestCase { public void testGreedyActivitySelector() { GreedyActivitySelector.Activity [] activities = { new GreedyActivitySelector.Activity(1,4), new GreedyActivitySelector.Activity(3,5), new GreedyActivitySelector.Activity(0,6), new GreedyActivitySelector.Activity(5,7), new GreedyActivitySelector.Activity(3,8), new GreedyActivitySelector.Activity(5,9), new GreedyActivitySelector.Activity(6,10), new GreedyActivitySelector.Activity(8,11), new GreedyActivitySelector.Activity(8,12), new GreedyActivitySelector.Activity(2,13), new GreedyActivitySelector.Activity(12,14) }; List<GreedyActivitySelector.Activity> list = GreedyActivitySelector.select(activities); int[] answer = {0, 3, 7, 10}; for(int i = 0; i < list.size(); i++) { GreedyActivitySelector.Activity a = activities[answer[i]]; assertEquals(a, list.get(i)); } } }

贪心算法(Greedy Algorithms)

贪心算法的设计思想          贪心算法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考...

链式哈希表(Hash Table)--算法导论示例

In computer science, a hash table is an associative array data structure that associates keys with v...

【算法导论】02——渐近符号、递归及解法

渐近符号 1、Θ记号  Θ(g(n)) = { f(n) : 若存在正常数c1,c2和n0,使对所有n>=n0时有0 其效果相当于删除f(n)中的低阶项,并忽略最高阶项的系数。 ...
  • muyimo
  • muyimo
  • 2014年07月27日 22:10
  • 784

算法导论答案PDF

  • 2017年12月08日 16:51
  • 1.99MB
  • 下载

算法导论-22.2-7-树的直径

一、题目 树T=(V,E)的直径(diameter)定义为max(u,v),亦即,树的直径是树中所有最短路径长度中的最大值。试写出计算树的直径的有效算法,并分析算法的运行时间。 二、思考 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论示例-GreedyActivitySelector
举报原因:
原因补充:

(最多只允许输入30个字)