如何使用C++中的活动选择算法
活动选择算法(Activity Selection Algorithm)是一种经典的贪心算法,用于解决活动安排问题。在给定一组活动的起始时间和结束时间的情况下,算法的目标是选择出最大的相容活动集合,即这些活动互不冲突且可以同时进行的最大数量的活动。本文将介绍如何使用C++实现活动选择算法,并附上具体的代码示例。
算法思路:
活动选择算法的基本思路是,首先根据活动的结束时间对活动进行排序。然后依次选择结束时间最早的活动,同时排除与该活动冲突的其他活动。具体的步骤如下:
立即学习“C++免费学习笔记(深入)”;
首先,需要定义一个结构体来表示每个活动。结构体中包含活动的起始时间和结束时间。
struct Activity{ int start; int end;};
登录后复制然后,定义一个函数来实现活动选择算法。函数的输入是一个活动数组和数组的大小,输出是一个最大相容活动集合。
vector activitySelection(Activity arr[], int n){ // 根据结束时间对活动进行排序 sort(arr, arr + n, [](Activity a, Activity b) { return a.end selectedActivities; selectedActivities.push_back(arr[0]); //选择第一个活动 int lastSelected = 0; //遍历剩余的活动 for (int i = 1; i = arr[lastSelected].end) { selectedActivities.push_back(arr[i]); lastSelected = i; } } return selectedActivities;}
登录后复制最后,在main函数中构造一个活动数组并调用活动选择函数,打印输出最大相容活动集合。
int main(){ Activity arr[] = {{1, 2}, {3, 4}, {0, 6}, {5, 7}, {8, 9}, {5, 9}}; int n = sizeof(arr) / sizeof(arr[0]); vector selectedActivities = activitySelection(arr, n); cout代码示例解析:
首先,在定义的结构体中,将每个活动的起始时间(start)和结束时间(end)作为结构体的成员。
然后,在实现的活动选择函数中,首先根据活动的结束时间对活动数组进行排序,以便后续选择活动时可以方便地按照结束时间的顺序。
接着,定义一个vector容器 selectedActivities 来保存最大相容活动集合,并将第一个活动加入其中。
然后,从第二个活动开始遍历剩余的活动。如果当前活动的起始时间大于等于已选择的最后一个活动的结束时间,则将该活动加入到最大相容活动集合中,并将该活动设为当前已选择的最后一个活动。
最后,在main函数中创建一个活动数组,调用活动选择函数,并打印输出最大相容活动集合。
总结:
通过以上的示例代码,我们可以看到C++中如何实现活动选择算法。通过贪心策略,根据活动的结束时间来选择最大的相容活动集合。活动选择算法在实际生活中有广泛的应用,比如会议安排、项目管理等。
【参考文献】
[1] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd edition). MIT Press.
登录后复制
以上就是如何使用C++中的活动选择算法的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2580752.html