标签:
此问题为算法导论的课后题,为了方便以后查看,查阅了有关计算复杂性和图论的一些相关内容,花了一些时间记录一下。
1.问题描述:假定有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行,我们希望使用最少的教室完成所有活动。设计一个高效的贪心算法求每一个活动应该在哪个教室进行。
(这个问题成为区间着色问题)。我们可以构造一个区间图,顶点表示给定的活动,边连接不兼容的活动。要求使用最少的颜色对顶点进行着色。使得所有相邻顶点颜色均不相同–这与使用最少的教室完成所有活动是对应的。
在分析问题之前,需要学习一点东西。
在图论中,色数问题必须要接触的问题,首先有关色数的问题,我在 http://blog.csdn.net/niujiabinbin/article/details/51298147中进行了解释,这里再说明一下色数就是为图中的所有顶点进行着色,且保证每条边上的两个顶点颜色不能相同,所需最小数量的颜色数为该图的色数,这个概念很好理解,与色数这个概念密不可分的还有团数与独立集。
对于上述问题的描述,我们暂且不关心活动的时间,只关心活动之间是否有重叠的部分,假设现在有5个活动,分别为活动A、活动B、活动C、活动D、活动E,且活动AB冲突,活动BC冲突,活动CD冲突,活动DE冲突,可以用如下图表示假设的5个活动:
上面的图形我们称之为
再举一个例子,还是ABCDE五个活动,但是任意两个活动之间都是有冲突的,此时的图如下:
上面的图称之为
还有一种图我们称之为零图,零图就是没有变的图,如下图所示:
上面的图只有5个顶点,由于没有边,所以色数为1。
那么图的色数怎么求呢?是否存在一个很好的求解方法,在解释这个问题之前,有一种色数为2的问题是可以判断的,首先给出一个定理:
一个图是2可着色的当且仅当它是一个二部图(或者不存在长度为奇数的回路)。
通过广搜的方法,指定相邻顶点使用不同的颜色后,如果搜索过程中出现相邻顶点颜色相同的情况,那么就不是二部图。
很遗憾的是,对于任意的
思想是一种贪心的思想,只要提及贪心,就代表每一步考虑的是局部,方法如下:
设G是图,它的顶点按某一顺序记为
(1)对顶点
(2)对每一个i=2,3,…..n,另p是与
上面的描述是比较好理解的,第一步是使用某种方法得到一个顶点序列,顶点序列的并没有顺序要求(其实在某些顺序下可以得到最优解,下面会说到),第二步对第一个顶点着色成最小颜色1,之后判断第二个顶点,如果第一个顶点与第二个顶点没有边,仍然使用最小颜色1,如果第二个顶点与第一个顶点有边,就使用颜色2,之后再判断第三个顶点(道理是相同的)。
最后得到的答案是有一个上界的,假设顶点
简单的可以想到,当正在为顶点
加入我们凑巧,起始的顶点序列如果是按色划分后的顶点为序列的,即
到这里还没有对这个近似算法做误差分析,还在学习中,不免会出现错误。
标签:
原文地址:http://blog.csdn.net/niujiabinbin/article/details/51297500