活动选择问题(3)-区间着色问题

此问题为算法导论的课后题,为了方便以后查看,查阅了有关计算复杂性和图论的一些相关内容,花了一些时间记录一下。

1.问题描述:假定有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行,我们希望使用最少的教室完成所有活动。设计一个高效的贪心算法求每一个活动应该在哪个教室进行。

(这个问题成为区间着色问题)。我们可以构造一个区间图,顶点表示给定的活动,边连接不兼容的活动。要求使用最少的颜色对顶点进行着色。使得所有相邻顶点颜色均不相同–这与使用最少的教室完成所有活动是对应的。

在分析问题之前,需要学习一点东西。

在图论中,色数问题必须要接触的问题,首先有关色数的问题,我在 http://blog.csdn.net/niujiabinbin/article/details/51298147中进行了解释,这里再说明一下色数就是为图中的所有顶点进行着色,且保证每条边上的两个顶点颜色不能相同,所需最小数量的颜色数为该图的色数,这个概念很好理解,与色数这个概念密不可分的还有团数与独立集。

对于上述问题的描述,我们暂且不关心活动的时间,只关心活动之间是否有重叠的部分,假设现在有5个活动,分别为活动A、活动B、活动C、活动D、活动E,且活动AB冲突,活动BC冲突,活动CD冲突,活动DE冲突,可以用如下图表示假设的5个活动:

上面的图形我们称之为C5,很容易看出,该图的色数为3,容易总结出对于任意Cp,若p为偶数,色数为2,p为奇数色数为3。

再举一个例子,还是ABCDE五个活动,但是任意两个活动之间都是有冲突的,此时的图如下:

上面的图称之为K5,是一个完全图,图中任意两个顶点都有边,也很容易的看出,每个顶点的颜色必须都不相同,所以色数为5,对于任意完全图,色数等于它的顶点数。

还有一种图我们称之为零图,零图就是没有变的图,如下图所示:

上面的图只有5个顶点,由于没有边,所以色数为1。



那么图的色数怎么求呢?是否存在一个很好的求解方法,在解释这个问题之前,有一种色数为2的问题是可以判断的,首先给出一个定理:

一个图是2可着色的当且仅当它是一个二部图(或者不存在长度为奇数的回路)。

通过广搜的方法,指定相邻顶点使用不同的颜色后,如果搜索过程中出现相邻顶点颜色相同的情况,那么就不是二部图。

很遗憾的是,对于任意的k≥3,不存在确定k可着色的多项式算法,更不用说寻找一个最优着色,在计算理论的领域中,此问题已经被证实为是NP完全问题,也就是说不存在一个多项式时间来解决此问题,那么一般的解决方法是利用回溯法来构造解空间树,其时间复杂度是指数级的,如果存在大量的边,我们可以用一种近似算法来求解此问题,使得到的解尽量好,并且使时间复杂为多项式时间。

思想是一种贪心的思想,只要提及贪心,就代表每一步考虑的是局部,方法如下:

设G是图,它的顶点按某一顺序记为x1,x2,x3,......xn。

(1)对顶点x1着色颜色1.

(2)对每一个i=2,3,…..n,另p是与xi临接的顶点x1,x2,.....xi?1中任何顶点都不被着色成p的最小颜色,并对xi指定颜色p。

上面的描述是比较好理解的,第一步是使用某种方法得到一个顶点序列,顶点序列的并没有顺序要求(其实在某些顺序下可以得到最优解,下面会说到),第二步对第一个顶点着色成最小颜色1,之后判断第二个顶点,如果第一个顶点与第二个顶点没有边,仍然使用最小颜色1,如果第二个顶点与第一个顶点有边,就使用颜色2,之后再判断第三个顶点(道理是相同的)。

最后得到的答案是有一个上界的,假设顶点xi具有最大度为Δ,那么该图的色数小于等于Δ+1。

简单的可以想到,当正在为顶点xi着色时,最坏的情况是其临接点都是使用不同的颜色,那么xi本身就必须另外额外使用一种颜色了,所以此时颜色使用数量为Δ+1。

加入我们凑巧,起始的顶点序列如果是按色划分后的顶点为序列的,即V1,V2,Vχ(G)排序的,即先排V1中的顶点(色划分请看http://blog.csdn.net/niujiabinbin/article/details/51298147),再排序V2中的顶点,那么V1中的所有点颜色都为1,V2中的所有颜色都为2,到最后所需的颜色数正好等于色数。

到这里还没有对这个近似算法做误差分析,还在学习中,不免会出现错误。

时间: 2024-08-11 07:49:51

活动选择问题(3)-区间着色问题的相关文章

[算法导论]练习16.1-4 活动教室分配(区间着色问题)

题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行.我们希望使用最少的教室完成所有活动. 设计一个高效的贪心算法求每个活动应该在哪个教室进行. 分析: 本题是对书中活动选择问题的一个扩展.在活动选择问题中,我们要求的是一个最大兼容活动集,也就是在所有时间内时间不重叠的最多的活动集合. 易知,这样一个活动集,就是一个教室最多能够举办的活动集.所以剩下的活动一定不能和该活动集内的活动在同一个教室举行.我们不断对剩下的活动使用贪心算法,需要多少次贪心能够选取完所有的活动,就

贪心算法—活动选择问题

4.1 活动选择问题 1.问题的理解与描述 假定有n个需要使用同一个这样的资源的活动,每次只能有一个活动使用该资源.每一个活动有一个开始时间 si,一个完成时间 fi,其中0 ≤ si < fi < ∞.如果区间[si , fi)和[sj , fj)不相交,活动ai和aj是相容的(即如果si≥ fj 或 sj ≤ fi,ai和aj相容).活动选择问题是选取一个由相容活动构成的最大集合. 输入:按完成时间排好序的活动开始时间数组s,完成时间数组 f. 输出:表示一个最大的相容活动组的向量{x1,

活动选择问题 (动态规划 与 贪心算法)

问题描述: 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi.如果选择了活动i,则它在半开时间区间[si, fi)内占用资源.若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的.也就是说,当si≥fj或sj≥fi时,活动i与活动j相容.活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合. . 从图中

【算法导论】贪心算法之活动选择问题

动态规划总是在追求全局最优的解,但是有时候,这样有点费时.贪心算法,在求解过程中,并不追求全局最优解,而是追求每一步的最优,所以贪心算法也不保证一定能够获得全局最优解,但是贪心算法在很多问题却额可以求得最优解. 一.问题概述 活动选择问题: 假定一个有n个活动(activity)的集合S={a1,a2,....,an},这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用.每个活动ai都有一个开始时间si和一个结束时间fi,其中0<=si<fi<正无穷.如

贪心算法求解活动选择问题

问题描述:  有一个需要使用每个资源的n个活动组成的集合S= {a1,a2,···,an },资源每次只能由一个活动使用.每个活动a都有一个开始时间和结束时间,且 0<= s < f .一旦被选择后,活动a就占据半开时间区间[s,f].如果[si,fi]和[sj,fj]互不重叠,则称两个ai,aj活动是兼容的.该问题就是要找出一个由互相兼容的活动组成的最大子集.假设输入的活动集合S已经按照结束时间的单调递增顺寻进行了排序. i 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0

从 活动选择问题 看动态规划和贪心算法的区别与联系

这篇文章主要用来记录我对<算法导论> 贪心算法一章中的“活动选择问题”的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题---粗略提下,详细请参考<算法导论> ②活动选择问题的DP(Dynamic programming)求解--DP求解问题的思路 ③活动选择问题的贪心算法求解 ④为什么这个问题可以用贪心算法求解? ⑤动态规划与贪心算法的一些区别与联系 ⑥活动选择问题的DP求解的JAVA语言实现以及时间复杂度分析 ⑦活动选择问题的Gr

活动选择的贪心算法与动态规划(未完成)

// greedy_algorithm.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include<queue> using namespace std; #define NofActivity 11 int c[NofActivity + 1][NofActivity + 1]; int reme[NofActivity + 1][NofActivity + 1]; //活动的

CODEVS 2610活动选择

2610 活动选择 题目描述 Description 假设有一个需要使用某一资源的n(n≤1000)个活动组成的集合S,S={1,-,n}.该资源一次只能被一个活动占有,每一个活动有一个开始时间bi和结束时间ei(bi≤ei).若bi>ej或者bj>ei,则活动i和活动j兼容. 你的任务是是:选择由互相兼容的活动组成的最大集合. 输入描述 Input Description 共n+1行,其中第1行为n,第2行到第n+1行表示n个活动的开始时间和结束时间(中间用一个空格隔开),格式为: n b1

活动选择(C++)

活动选择 难度级别:C: 运行时间限制:500ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 学校最近几天有n个活动,这些活动都需要使用学校大礼堂,在同一时间,礼堂只能被一个活动使用.由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而是用教室. 现在给出n个活动使用礼堂的起始时间begini和结束时间endi,请你帮助办公室人员安排一些活动来使用礼堂,使得安排的活动尽量多. 输入 第一行一个整数n.接下来n行,每行2个整数,第一个begini,