活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。 该问题要求高效地安排一系列争用某一公共资源的活动。 贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。 解法:贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容...
由于输入的活动按结束时间升序排序,所以算法GreedySelector每次总是选择具有最早完成时间的相容活动加入到集合b中。直观上,按照这种方法选择相容活动为未安排活动留下了尽可能多的时间。该算法的贪心选择意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 最后根据数组b的值输出选中的活动编号。 样例数据 ...
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集和。 解决思路: 利用贪心算法,将各活动按结束时间的非减序进行排列,由于输入的活动以完成的时间非减序排列,所以都每次都选择具有最早完成时间的活动 进行考虑,因为这样可以为未安排的活动留下尽可能多得时间,使剩余的可安排时间段极大化,以安排更多的相...
由于 E 中活动安排安结束时间的非减序排列,所以活动 1 具有最早完成时间。首先证明活动安排问题有一个最优解以贪心选择开始(选择了活动 1)。设 A 是所给的活动安排问题的一个最优解,且 B 中活动也按结束时间非减序排列,A 中的第一个活动是活动 k。若 k = 1,则 A 就是一个以贪心选择开始的最优解。
1.活动安排问题的一个最优解是以贪心选择开始。即最优解包含第一个活动(叫做活动1)。 证明:假设有一个最优解叫做A。 它的活动也是以结束时间的非减序进行排列。 假设A中第一个活动叫做K。 如果K是我们的活动1,则A就是以活动1开始的。 如果K不是活动1•则把K从A中去掉,并加上活动1,而且活动1是相容...
第四步,在开始时间大于或等于11的活动集合中贪心选择,选10号活动,如表2-6所示,结束时间为14。此时,10号活动是最后一个位置的活动,算法结束。 表2-6第四阶段的贪心选择 该实例的解为(0,1,1,0,0,0,1,0,0,1),即安排的活动集合为{2,3,7,10}。
由于输入的活动以其完成时间的非减序排列,所以算法每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
} return count; } 该算法主要包括2部分: >按照按活动结束时间对活动排序时间,其时间复杂度为:0(n*logn); >贪心选择时间,其需要经过nT次的比较(s[ i]>=f [ j]) 时间复杂度为:0(nT); 故本算法的时间复杂度:0(n*logn+nT); 记为:0(n*logn) o反馈...
最后,我们根据tmp数组查找哪些活动可以进行: tmp =greedy_activity(start,end,len(name)) res= [name_end[i][0]foriinrange(len(name_end))iftmp[i]==True]print(res) 1. 2. 3. 也就是这四个活动。 总结:贪心算法就是要让每一步都最优。
贪心算法总是作出在当前看来是最好的选择。也就是说贪心算法不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。虽然贪心算法不是对所有问题都能得到整体最优解(0/1背包问题),但对范围相当广的许多问题它都能产生最优解。如单源最短路径问题,最小生成树问题等。