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...
贪心选择:始终选择下一个结束时间最早且开始时间不早于上一个选择的结束时间的活动。通过将活动按结束时间排序,可以确保每次都选择到剩余活动中最优的结束时间最短的活动。 步骤: step1:按活动的结束时间对活动进行排序; step2:选择排序后数组中的第一个活动并打印; step3:遍历剩余活动: step3.1:如果当前活动的开始...
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=...
贪心算法是一种逐步构建解决方案的方法,它在每个步骤选择当前最优策略(即局部最优解),进而希望达到全局最优解。在活动选择问题中,我们可以采用以下贪心策略: 将所有活动按结束时间升序排序。 选择结束时间最早的活动,并将其加入到选择的活动列表中。 从未选择的活动中继续选择与已选择活动不冲突的下一个活动,直到没...
1. 前言 本节内容是贪心算法系列之一:活动选择问题,主要讲解了什么是活动选择问题,如何利用贪心算法解决活动选择问题,给出了活动选择问题的实现伪代码并进行分析,并用 java...
首先让这一序列中的活动1进入集合S,再依次分析递增序列中的活动2,活动3,…,每次将与S中的活动兼容的活动加入到集合中。这个题用贪心算法做为什么正确?? 题目上给的证明是:构造一个最优解,然后,对该解进行修正,使其第一步为一个贪心选择,证明总是存在一个以贪心选择开始的求解方案。
贪心算法-活动选择问题(Python实现)贪⼼算法-活动选择问题(Python实现)# 有n个活动的集合E={1,2,…,n},其中每个活动都要求使⽤同⼀资源,# 如演讲会场等,⽽在同⼀时间内只有⼀个活动能使⽤这⼀资源。# 每个活动i都有⼀个要求使⽤该资源的起始时间si和⼀个结束时间fi,且si <fi 。#...
现在请你设计一种贪心算法解决类似活动选择问题。 我们设计下列贪心算法的贪心策略:选择其余活动中完成时间最短的下一个活动,并且开始时间大于或等于先前所选活动的结束时间。 我们可以根据他们的完成时间对活动进行排序,以便我们始终将下一个活动视为最小完成时间活动。
* 所以,A'[i][j]是兼容的,而A'与A具有相同个数的活动,故A'是包含a[m]的最大活动集合。 * 所以我们只要每一步都选择结束时间最小的a[k]就可以,这就是贪心选择 * @author song * */ 代码就比动态规划解法简单多了: public static List<Integer> greedySelectActivity(int[] s, int[] f, int n...