码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-07 07:25:09      阅读:594      评论:0      收藏:0      [点我收藏+]

标签:

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

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可着色的当且仅当它是一个二部图(或者不存在长度为奇数的回路)。

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

很遗憾的是,对于任意的k3,不存在确定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,到最后所需的颜色数正好等于色数。

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

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

标签:

原文地址:http://blog.csdn.net/niujiabinbin/article/details/51297500

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!