清华大学出版社 TSINGHUA UNIVERSITY PRESS 4.1活动安排问题 在下面所给出的解活动安排问题的贪心算法 greedySelector public static int greedySelector(int [s, int[ f, boolean aD) int n=s length-1 all-true for(int 1=2; K<=n; i++)& 各活动的起始时间和结 if(si]>=fDi 束时间存储于数组s和f all-true 中且按结束时间的非减 序排列 count++ else ai]=false return count
6 4.1 活动安排问题 在下面所给出的解活动安排问题的贪心算法greedySelector : • public static int greedySelector(int [] s, int [] f, boolean a[]) • { • int n=s.length-1; • a[1]=true; • int j=1; • int count=1; • for (int i=2;i<=n;i++) { • if (s[i]>=f[j]) { • a[i]=true; • j=i; • count++; • } • else a[i]=false; • } • return count; • } 各活动的起始时间和结 束时间存储于数组s和f 中且按结束时间的非减 序排列
清华大学出版社 TSINGHUA UNIVERSITY PRESS 4.1活动安排问题 由于输入的活动以其完成时间的非减序排列,所 以算法 greedySelector每次总是选择具有最早完成 时间的和容活动加入集合A中。直观上,按这种方法 选择相容活动为未安排活动留下尽可能多的时间。也 就是说,该算法的贪心选择的意义是使剩余的可安排 时间段极大化,以便安排尽可能多的相容活动 算法 greedySelector的效率极高。当输入的活 动已按结束时间的非减序排列,算法只需O(n)的时间 安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用 o(nlogn) 的时间重排
7 4.1 活动安排问题 由于输入的活动以其完成时间的非减序排列,所 以算法greedySelector每次总是选择具有最早完成 时间的相容活动加入集合A中。直观上,按这种方法 选择相容活动为未安排活动留下尽可能多的时间。也 就是说,该算法的贪心选择的意义是使剩余的可安排 时间段极大化,以便安排尽可能多的相容活动。 算法greedySelector的效率极高。当输入的活 动已按结束时间的非减序排列,算法只需O(n)的时间 安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用O(nlogn) 的时间重排
清华大学出版社 TSINGHUA UNIVERSITY PRESS 4.1活动安排问题 例:设待安排的11个活动的开始时间和结束时间按结 束时间的非减序排列如下 i123|4 67891011 Si1305 538 5688212 f4567 91011121314
8 4.1 活动安排问题 例:设待安排的11个活动的开始时间和结束时间按结 束时间的非减序排列如下: i 1 2 3 4 5 6 7 8 9 10 11 S[i] 1 3 0 5 3 5 6 8 8 2 12 f[i] 4 5 6 7 8 9 10 11 12 13 14
清华大学出版社 TSINGHUA UNIVERSITY PRESS 4.1活动安排问题 算法 greedySelector的 计算过程如左图所示。 图中每行相应于算法的 次迭代。阴影长条表 示的活动是已选入集合A 的活动,而空白长条表 示的活动是当前正在检 查相容性的活动 01234567891011121314
9 4.1 活动安排问题 算法greedySelector 的 计算过程如左图所示。 图中每行相应于算法的 一次迭代。阴影长条表 示的活动是已选入集合A 的活动,而空白长条表 示的活动是当前正在检 查相容性的活动
清华大学出版社 TSINGHUA UNIVERSITY PRESS 4.1活动安排问题 若被检查的活动的开始时间Si小于最近选择的活动j 的结束时间f,则不选择活动i,否则选择活动i加入集 合A中。 贪心算法并不总能求得问题的整体最优解。但对 于活动安排问题,贪心算法 greedy Selecto却总能求 得的整体最优解,即它最终所确定的相容活动集合A的 规模最大。这个结论可以用数学归纳法证明
10 4.1 活动安排问题 若被检查的活动i的开始时间Si小于最近选择的活动j 的结束时间fi,则不选择活动i,否则选择活动i加入集 合A中。 贪心算法并不总能求得问题的整体最优解。但对 于活动安排问题,贪心算法greedySelector却总能求 得的整体最优解,即它最终所确定的相容活动集合A的 规模最大。这个结论可以用数学归纳法证明