15.1 活动选择问题(An activity-selection problem) 活动选择问题的最优子结构(The optimal substructure of the activity-selection problem) 作出贪心选择(Making the greedy choice) 递归贪心算法(A recursive greedy algorithm) 迭代贪心算法(An iterative greedy algorithm) 练习 15.1-1 15.1-2 15.1-3 15.1-4 15.1...
假设活动集合为 S = {1, 2, 3, ...n},已按结束时间排序。贪心选择始终从第一个活动开始。 若存在另一最优解 B,其第一个活动不是 1,设为 k。根据排序性质,结束时间 finish(k) >= finish(1),因此可以将 B 中的 k 替换为 1,生成同等规模的最优解 A。 活动未排序的实现(C++ 示例) #include <...
3、贪心算法解决过程 针对活动选择问题,认真分析可以得出以下定理:对于任意非空子问题Sij,设am是Sij中具有最早结束时间的活动,那么: (1)活动am在Sij中的某最大兼容活动子集中被使用。 (2)子问题Sim为空,所以选择am将使子问题Smj为唯一可能非空的子问题。 有这个定理,就简化了问题,使得最优解中只使用一个子问...
{//计算最大兼容子集的活动的数量intcount = result[i, number].Count + result[number, j].Count +1;//更新最大兼容子集的活动数量//可能有多个活动可以插入两个活动之间,因此需要判断哪一个活动插入后是从i活动到j活动的最大兼容子集//将最大兼容子集的活动编号保存起来if(maxCount <count) { maxCount=...
贪心算法是一种逐步构建解决方案的方法,它在每个步骤选择当前最优策略(即局部最优解),进而希望达到全局最优解。在活动选择问题中,我们可以采用以下贪心策略: 将所有活动按结束时间升序排序。 选择结束时间最早的活动,并将其加入到选择的活动列表中。 从未选择的活动中继续选择与已选择活动不冲突的下一个活动,直到没...
活动选择问题 (动态规划解决、贪心算法解决)学贪心不贪心 问题描述: 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间...
首先让这一序列中的活动1进入集合S,再依次分析递增序列中的活动2,活动3,…,每次将与S中的活动兼容的活动加入到集合中。这个题用贪心算法做为什么正确?? 题目上给的证明是:构造一个最优解,然后,对该解进行修正,使其第一步为一个贪心选择,证明总是存在一个以贪心选择开始的求解方案。
1. 前言 本节内容是贪心算法系列之一:活动选择问题,主要讲解了什么是活动选择问题,如何利用贪心算法解决活动选择问题,给出了活动选择问题的实现伪代码并进行分析,并用 java...
(1)活动am在Sij中的某最大兼容活动子集中被使用。 (2)子问题Sim为空,所以选择am将使子问题Smj为唯一可能非空的子问题。 有这个定理,就简化了问题,使得最优解中只使用一个子问题,在解决子问题Sij时,在Sij中选择最早结束时间的那个活动。 贪心算法自顶向下地解决每个问题,解决子问题Sij,先找到Sij中最早结束的...
现在请你设计一种贪心算法解决类似活动选择问题。 我们设计下列贪心算法的贪心策略:选择其余活动中完成时间最短的下一个活动,并且开始时间大于或等于先前所选活动的结束时间。 我们可以根据他们的完成时间对活动进行排序,以便我们始终将下一个活动视为最小完成时间活动。