求最大完全子图的启发式着色算法

合集下载

图的着色问题--C++实现(含详细注释)

图的着色问题--C++实现(含详细注释)

图的着色问题一、题目简述(1) 图的m-着色判定问题给定一个无向连通图 G 和 m 种不同的颜色。

用这些颜色为图 G 的各顶点着色,每个顶点着一种颜色,是否有一种着色法使 G 中任意相邻的两个顶点着不同颜色?(2) 图的m-着色优化问题若一个图最少需要 m 种颜色才能使图中任意相邻的两个顶点着不同颜色,则称这个数 m 为该图的色数。

求一个图的最小色数 m 的问题称为m-着色优化问题。

二、算法思想1. m-着色判定问题总体思想:通过回溯的方法,不断为每一个节点着色,每个点的颜色由一个数字代表,初始值为1。

在对前面 step - 1 个节点都合法的着色之后,开始对第 step 个节点进行着色。

如果 n 个点均合法,且颜色数没有达到 m 种,则代表存在一种着色法使 G中任意相邻的两个顶点着不同颜色。

具体步骤:1. 对每个点 step ,有 m 种着色可能性,初始颜色值为1。

2. 检查第 step 个节点颜色的可行性,若与某个已着色的点相连且颜色相同,则不选择这种着色方案,并让颜色值加1,继续检查该点下一种颜色的可行性。

3. 如果第 step 点颜色值小于等于 m ,且未到达最后一个点,则进行对第 step + 1 点的判断。

4. 如果第 step 点颜色值大于 m ,代表该点找不到合适的分配方法。

此时算法进行回溯,首先令第 step 节点的颜色值为0,并对第 step - 1 个点的颜色值+1后重新判断。

5. 如果找到一种颜色使得第 step 个节点能够着色,说明 m 种颜色的方案是可行的。

6. 重复步骤2至5,如果最终 step 为0则代表无解。

2. m-着色优化问题基于问题1,对于一个无向图 G ,从1开始枚举染色数,上限为顶点数,第一个满足条件的颜色数即为所求解。

三、实现过程(附代码)1. m-着色判定问题#include<iostream>using namespace std;int color[100]; // 每个点的颜色int mp[100][100]; // 图的邻接矩阵int n, m, x; // n顶点,m种颜色方案,x条边bool check(int step) {// 判断与step点相邻的点,颜色是否与step点相同,若相同则返回falsefor (int i=1; i<=n; i++) {if (mp[step][i] ==1&&color[i] ==color[step]) {return false;}}return true;}bool Solve(int m) {// 求解是否可以找到一种可行的染色方案int step=1; // step指示当前节点while (step>=1) {color[step] +=1; // 假定颜色值从1开始,若为回溯,选择下一种方案while (color[step] <=m) { // 按照问题条件选择第step点颜色if (check(step)) {break;} else {color[step]++; // 搜索下一个颜色}}if (color[step] <=m&&step==n) { // 如果找完n个点,且染色方法小于等于m种 return true;} else if (color[step] <=m&&step<n) {step++; // 求解下一个顶点} else { // 如果染色数大于m个,回溯color[step] =0; // 回溯,该点找不到合适的分配方法,对上一点进行分析step--;}}// 如果step退到0,则代表无解return false;}int main() {int i, j;bool ans=false;cout<<"输入顶点数n和着色数m"<<endl;cin>>n>>m;cout<<"输入边数"<<endl;cin>>x;cout<<"具体输入每条边"<<endl;for (int p=0; p<x; p++) { // 以无向邻接矩阵存储边cin>>i>>j;mp[i][j] =1;mp[j][i] =1;}if (Solve(m)) {cout<<"有解";} else {cout<<"无解";}return0;}2. m-着色优化问题#include<iostream>using namespace std;int color[100]; // 每个点的颜色int mp[100][100]; // 图的邻接矩阵int n, m, x; // n顶点,m种颜色方案,x条边bool check(int step) {// 判断与step点相邻的点,颜色是否与step点相同,若相同则返回falsefor (int i=1; i<=n; i++) {if (mp[step][i] ==1&&color[i] ==color[step]) {return false;}}return true;}bool Solve(int m) {// 求解是否可以找到一种可行的染色方案int step=1; // step指示当前节点while (step>=1) {color[step] +=1; // 假定颜色值从1开始,若为回溯,选择下一种方案while (color[step] <=m) { // 按照问题条件选择第step点颜色if (check(step)) {break;} else {color[step]++; // 搜索下一个颜色}}if (color[step] <=m&&step==n) { // 如果找完n个点,且染色方法小于等于m种 return true;} else if (color[step] <=m&&step<n) {step++; // 求解下一个顶点} else { // 如果染色数大于m个,回溯color[step] =0; // 回溯,该点找不到合适的分配方法,对上一点进行分析step--;}}// 如果step退到0,则代表无解return false;}int main() {int i, j;bool ans=false;cout<<"输入顶点数n"<<endl;cin>>n;cout<<"输入边数"<<endl;cin>>x;cout<<"具体输入每条边"<<endl;for (int p=0; p<x; p++) { // 以无向图邻接矩阵存储边 cin>>i>>j;mp[i][j] =1;mp[j][i] =1;}for (m=1; m<=n; m++) { // 从小到大枚举着色数mif (Solve(m)) { // 如果有解,输出答案并跳出循环cout<<"最小色数m为 "<<m;break;}}return0;}四、结果及分析问题1测试用例:问题2测试用例:经检验,最少着色数的范围为2-4,意味着使 G 中任意相邻的两个顶点着不同颜色最多需要4种颜色。

图着色问题的启发式搜索蚂蚁算法

图着色问题的启发式搜索蚂蚁算法

了启发式搜索易陷入局部极小 的缺陷 。 过给 地图着色和仿真实验结果表 明,该方法对 图着色 问题 的求解是可行、有效 的 , 通 且具有通用性 。
关健词 :图着色 ;启发式搜索 ;蚂蚁算法
He r si e r h b s dAn g r t m u itcS a c . a e t Al o ih o o v n r p l r n o lm fS l i g G a h Co o i gPr b e
E, = )V
…,} 建立映射CV v, : k,…,,( c c} 参照定理
令 P = 1 + A G ) 并 且 极 小 化 , 使 得 对 任 意 rJ () E,
c c 。 () ) v≠
2 算法设计
21 随机序 列启 发式算法 . 对于任一给定的无环无 向图 G V E , ( , ) 随机生成顶点序列
个经典难题 J ,内容包括 点着色、边着色、组合地图的面着 色等。G P在组合分析和实 际生活中有着广泛的应 用背景 , C
定理 若 图 G的顶点最大度数为A G ,则 () I△ G 。 () 6≤ + ( )
图顶点着色 问题可形式化地描述为 : 给定无 自环图 G( . V
如任 务调度、资源分配、排课表、V S 布线和测试等,目前 LI
维普资讯
第3 3卷 第 1 6期
VL3 o3






20 07年 8月
Au s 0 gu t20 7
NoJ .6
Co put rEng ne rng m e i ei
人工 智能及 识 别技术 ・
文章编号; oo 32( o) 一I l _ 文献标识码:A l0- 48 o7 每 l —0 2 l 9 2

0030算法笔记——最大团问题和图的m着色问题

0030算法笔记——最大团问题和图的m着色问题
// 计算最大团 void Clique::Backtrack(int i) { 3if (i > n) // 到达叶结点 3{ 33for (int j = 1; j <= n; j++) 33{ 333bestx[j] = x[j]; 333cout<<x[j]<<" "; 33} 33cout<<endl; 33bestn = cn; 33return; 3} 3// 检查顶点 i 与当前团的连接 int OK = 1; 3for (int j = 1; j < i; j++) 3if (x[j] && a[i][j] == 0) 3{ 33// i与j不相连 33OK = 0; 33break; 3}
3if (OK)// 进入左子树 3{ 33x[i] = 1; 33cn++; 33Backtrack(i+1); 33x[i] = 0; 33cn--; 3}
if (cn + n - i >= bestn)// 进入右子树 3{ 33x[i] = 0; 33Backtrack(i+1); 3} }
3333 如果U∈V且对任意u,v∈U有(u, v)不属于E,则称U是G的空子图。G的空子图U是G的独立集当且仅当U不包 含在G的更大的空子图中。G的最大独立集是G中所含顶点数最多的独立集。
3333 对于任一无向图G=(V, E),其补图G'=(V', E')定义为:V'=V,且(u, v)∈E'当且仅当(u, v)∈E。 3333 如果U是G的完全子图,则它也是G'的空子图,反之亦然。因此,G的团与G'的独立集之间存在一一对应的 关系。特殊地,U是G的最大团当且仅当U是G'的最大独立集。

交叉立方体的最大导出子图与拥塞

交叉立方体的最大导出子图与拥塞

交叉立方体的最大导出子图与拥塞交叉立方体是一种常用于并行计算系统和通信网络中的拓补结构。

它由一系列节点组成,每个节点都有着多个输入和输出通道,用于实现节点之间的通信。

最大导出子图(Maximal Exclusively Exportable Subgraph,简称MEES)是指交叉立方体中的一个节点子集,它们之间的连接关系满足一定的规则。

具体而言,MEES的节点满足以下三个条件:1. 所有边缘节点(即只与一个邻居节点连通的节点)都属于MEES;2. 如果一个非边缘节点不属于MEES,那么它的所有邻居节点都属于MEES;3. 任意两个属于MEES的节点之间,必然存在一条路径,这条路径的所有中间节点也属于MEES。

拥塞是指在通信网络中,由于流量过大或网络资源有限导致的通信带宽不足问题。

在交叉立方体中,拥塞可能会出现在一些节点或链接上,从而影响系统的性能。

MEES在交叉立方体中有着重要的应用。

MEES可以用来划分节点集合,从而实现并行计算的任务划分。

在这种划分方法中,每个MEES被分配给一个独立的计算任务,任务之间的通信只需要通过MEES的边缘节点进行。

这种划分方式可以减少任务之间的通信开销,提高系统的并行计算性能。

MEES可以用来解决交叉立方体中的拥塞问题。

通过选择合适的MEES作为通信路径,可以减少系统中出现拥塞的概率。

选择MEES中具有较少连接的节点作为通信路径,可以减少通信的竞争,从而降低拥塞的发生率。

为了找到交叉立方体中的最大导出子图,可以使用图的遍历算法来进行求解。

具体的算法步骤如下:1. 将所有边缘节点加入MEES的候选节点集合。

2. 对于候选节点集合中的每个节点,检查其邻居节点是否都在候选节点集合中。

如果是,则将该节点加入MEES;否则,将该节点从候选节点集合中移除。

3. 重复步骤2,直到候选节点集合不再变化为止。

通过以上算法,可以找到交叉立方体中的最大导出子图,并且满足MEES的定义条件。

使用遗传算法解决图着色问题

使用遗传算法解决图着色问题

使⽤遗传算法解决图着⾊问题使⽤遗传算法解决图着⾊问题图着⾊问题描述在图论中,图是对象的结构化集合,⽤于表⽰对象对之间的关系。

对象在图中表⽰为顶点(或节点),⽽⼀对对象之间的关系使⽤边表⽰:图是⾮常有⽤的对象,因为它们可以⽤于表⽰⼤量的现实⽣活中的结构、模式和关系,例如社交⽹络,电⽹布局,⽹站结构,计算机⽹络,原⼦结构等等。

图着⾊任务可以简单概括为:为图中的每个节点分配⼀种颜⾊,并保证相连接的节点对不会使⽤相同的颜⾊,下图显⽰了争取着⾊的图⽰例:在图着⾊问题中,我们通常希望使⽤尽可能少的颜⾊。

例如,在上图中,可以使⽤三种颜⾊正确地对所⽰图进⾏着⾊。

但是不可能仅使⽤两种颜⾊对其进⾏正确着⾊。

从图论的⾓度⽽⾔,这意味着该图的⾊数(chromatic number)为3。

许多现实⽣活中的问题都可以转化为图表⽰,并可以抽象为图着⾊问题。

例如,为学⽣安排课程或为员⼯安排班次可以转换为图,其中相邻节点表⽰导致冲突的班级或班次。

导致冲突的原因可能是同时上课的班级或连续的班次。

由于此冲突,将同⼀个⼈分配给两个班级(或两个班次)将导致时间表⽆效。

如果每种颜⾊代表不同的⼈,则将不同的颜⾊分配给相邻节点将解决冲突。

同样,N皇后问题可以表⽰为图着⾊问题,其中图中的每个节点都代表棋盘上的正⽅形,⽽每对处于同⼀⾏、列或对⾓线的棋⼦通过边连接。

其他相关应⽤包括对⽆线电台的频率分配,交通信号灯定时等等。

解的表⽰形式可以使⽤整数列表表⽰图着⾊问题的解,其中每个整数代表⼀种颜⾊,⽽列表的每个元素都与图的节点之⼀匹配。

假设图中有10个节点,因此可以为每个节点分配0到9之间的索引。

然后,使⽤10个元素的列表表⽰该图的节点颜⾊。

例如:(0, 2, 1, 3, 1, 2, 0, 3, 3, 0)1. 使⽤了四种颜⾊,分别由整数0、1、2、3表⽰。

2. 第⼀、第七和第⼗个节点⽤第⼀种颜⾊着⾊。

3. 第三和第五节点⽤第⼆种颜⾊着⾊。

4. 第⼆和第六节点⽤第三种颜⾊着⾊。

求解目标函数不连续的优化问题 启发式算法

求解目标函数不连续的优化问题 启发式算法

求解目标函数不连续的优化问题启发式算法优化问题常常涉及到目标函数的最大化或最小化,然而有时这些函数并非连续的。

这种问题难以通过传统的算法求解,只能通过启发式算法获得较好的解决方案。

启发式算法是指通过启发式策略获得近似最优或次优解的一类算法。

启发式算法并不保证获得最优解,但在实际应用中通常能取得良好的效果。

对于目标函数不连续的优化问题,启发式算法可以采用以下几种方法:1. 遗传算法:遗传算法是一种通过模拟生物进化过程获得最优解的算法。

该算法采用染色体编码的方式来表示问题,每个染色体代表一组解,通过交叉、变异等操作产生新的解。

遗传算法具有较好的鲁棒性,同时能处理目标函数不连续的问题。

2. 模拟退火:模拟退火是一种通过模拟物理系统退火过程获得最优解的算法。

该算法通过引入温度参数,并不断降低温度来实现跳出局部最优解的目的。

模拟退火算法具有较好的全局寻优能力,能处理目标函数不连续的问题。

3. 禁忌搜索:禁忌搜索是一种通过规避已经搜索过的解来避免陷入局部最优解的算法。

该算法通过维护一个禁忌表来记录已经搜索过的解,然后根据禁忌表的信息来决定下一次搜索的方向。

禁忌搜索算法具有较好的局部优化能力,能处理目标函数不连续的问题。

以上三种算法都是比较常用的启发式算法,它们在实际应用中都有较好的表现。

但需要注意的是,启发式算法并不保证获得最优解,只能获得近似最优或次优解,因此在使用时需要根据实际情况进行权衡。

另外,对于目标函数不连续的优化问题,还可以通过问题转化、插值等方法来将其转化为目标函数连续的问题,然后使用传统的优化算法进行求解。

不过,这种方法需要对问题有较深入的了解,并且可能会引入一定的误差。

总之,对于目标函数不连续的优化问题,启发式算法是一种较好的求解方法,它能够有效地处理这种问题,并获得较好的优化效果。

但需要注意的是,启发式算法并不保证获得最优解,需要根据实际需求进行权衡和选择。

图论课件第七章图的着色

图论课件第七章图的着色
总结词
平面图的着色问题是一个经典的图论问题,其目标是在满足相邻顶点颜色不同 的条件下,使用最少的颜色对平面图的顶点进行着色。
详细描述
平面图的着色问题可以使用欧拉公式和Kuratowski定理进行判断和求解。此外 ,也可以使用贪心算法、分治策略等算法进行求解。
树图的着色问题
总结词
树图的着色问题是一个经典的图论问 题,其目标是使用最少的颜色对树图 的顶点进行着色,使得任意两个相邻 的顶点颜色不同。
分支限界算法
总结词
分支限界算法是一种在搜索树中通过剪枝和 优先搜索来找到最优解的算法。
详细描述
在图的着色问题中,分支限界算法会构建一 个搜索树,每个节点代表一种可能的着色方 案。算法通过优先搜索那些更有可能产生最 优解的节点来加速搜索过程,同时通过剪枝 来排除那些不可能产生最优解的节点。分支 限界算法可以在较短的时间内找到最优解,
尤其适用于大规模图的着色问题。
03
图的着色问题的复 杂度
计算复杂度
确定图着色问题的计算复杂度为NP-完全,意味着该问题在多项式时间 内无法得到确定解,只能通过近似算法或启发式算法来寻找近似最优解 。
图着色问题具有指数时间复杂度,因为对于n个顶点的图,其可能的颜色 组合数量为n^k,其中k为每个顶点可用的颜色数。
02
图的着色算法
贪心算法
总结词
贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选 择,从而希望导致结果是最好或最优的算法。
详细描述
贪心算法在图的着色问题中的应用是通过逐个对顶点进行着色,每次选择当前未 被着色的顶点中颜色数最少的颜色进行着色,直到所有顶点都被着色为止。这种 算法可以保证最小化使用的颜色数量,但并不保证得到最优解。

图的着色算法

图的着色算法

图的着⾊算法图着⾊算法描述:给定⽆向连通图和m种不同的颜⾊。

⽤这些颜⾊为图G的各顶点着⾊,每个顶点着⼀种颜⾊。

是否有⼀种着⾊法使G中每条边的两个顶点有不同的颜⾊。

这个问题是图的m可着⾊判定问题。

若⼀个图最少需要m种颜⾊才能使图中每条边相连接的两个顶点着不同颜⾊,称这个数m为这个图的⾊数。

求⼀个图的⾊数m称为图的m可着⾊优化问题。

给定⼀个图以及m种颜⾊,请计算出涂⾊⽅案数。

图的着⾊算法分析:1. Color存储着⾊⽅案。

2. 从第⼀个顶点开始着⾊,判断是否安全。

3. 安全则继续着⾊直到顶点全部被着⾊,输出可⾏的着⾊⽅案4. 若不安全则停⽌着⾊⽅案,回溯,测试下⼀⽅案本⼈使⽤的是C#,以下是完整代码,输⼊为顶点数,颜⾊数和图的连接矩阵。

IsSafe函数判断安全与否,ColorGraph函数具体着⾊。

递归实现回溯。

using System;namespace graphColoring{class Program{static void Main(string[] args){Console.WriteLine("请输⼊顶点数:");string numberN = Console.ReadLine();int N = Int32.Parse(numberN);Console.WriteLine("请输⼊颜⾊数:");string numberColor = Console.ReadLine();int M= Int32.Parse(numberColor);int[, ] matN = new int[N, N]; //⽆向图的邻接矩阵Console.WriteLine("请输⼊⽆向图的邻接矩阵:");for(int i = 0; i < N; i++){string str = Console.ReadLine();string[] temp = str.Split("".ToCharArray());for(int j = 0; j < N; j++){matN[i, j] = Int32.Parse(temp[j]);}}int[,] MatN = matN;graph myGraph = new graph(N,M,MatN);Console.WriteLine("所有的⽅案:");myGraph.graphDeal();}}class graph{private int n; //顶点数private int m; //颜⾊数private int[,] matN; //邻接矩阵private int[] color; //着⾊⽅案public graph(int N,int M,int[,] MatN){n = N;m = M;matN = MatN;color = new int[n];for (int i = 0; i < n; i++)color[i] = 0;}public void graphDeal(){ColorGraph(matN, m, color, 0);}private bool IsSafe(int[, ] matN,int[] color, int n1, int i){for(int j = 0; j < n; j++)if (matN[n1, j] == 1 && i == color[j])return false;return true;}private void ColorGraph(int[, ] matN,int m,int[] color,int n1){if (n == n1){printSolution(color);return;}for(int i = 1; i <= m; i++){if (IsSafe(matN, color, n1, i)){color[n1] = i;ColorGraph(matN, m, color, n1 + 1);color[n1] = 0; //如果缺少则color⽆法在每个正确或者错误的⽅案完成后重置 }}}void printSolution(int[] color){foreach(int i in color){Console.Write(i+"");}Console.WriteLine();}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for ( 对于每个顶点 v) { Full_degree = 0 ; Uncolor_ degree = 顶点 v 的度 ;}
按照一定的顺序放置颜色 c 1 ,c 2 , …,c k ; 初始化各颜色数值 c 1 = c2 = …= c k = 0
while ( G 中所有顶点未完全着色) {
3. 2 算法运用举例 为便于理解上述算法 , 现举例说明 , 建立一简单无向 图如图 1 所示 ,对该图运用上述启发式算法进行着色的过 程以及算法中关键变量的变化过程如表 1 所示 , 其中顶点 序号 v i 是指图 1 中的各个顶点 ; si 是第指第 i 步 ,即 stepi , 其中 s0 是指初始状态 ; 指针指向第 i 步所考察的需着色的 顶点 , 每一步考察一个顶点及其与邻接顶点的关系 , 并对 它进行着色 ; Cj 是颜色序号 ; Full_ degree 和 U ncolor_ de2 gree 是控制各顶点着色情况的两个变量 “ ; 无” 是指初始时 各顶点均无颜色 “ ; - ” 是指保持前边的值不变 .
1 1 1 -
2 -
-
1 -
-
1 1 -
-
-
3. 3 算法运用的精简预处理
在实际问题中 , 经常会遇到不必求解出所有的极大完 全子图 , 而只需要求出几个相对较大的完全子图的情况 , 在这种情况下 , 可以先对已知图进行适当的精简处理 , 再 运用上述启发式算法求解 , 将会大大提高算法执行效率 . 经过大量实例研究表明 , 一个图的较大完全子图往往存在 于度数较高的一定数量的顶点之间 , 因此 , 对复杂图精简 处理时可采取适度删除低度数顶点及其边的措施来降低 图的复杂性 , 进而降低算法执行的时间和空间复杂度 . 比 如在上述图 1 中 , 如果先删除掉度数为 1 的顶点 V 2 、 V5 、
V , E ) , 或 G = ( V , E) . 其中 : V 表示顶点集 , V ( G) = { 图 G 中顶点的集合} ; E 表示边集 , E ( G) = { 图 G 中边 的集合} ; 定义 2 [ 2 ] 设 H = ( V ’ 、 E’ ) , V ’ < V , E’ < E. 如 果 Π x 、 y∈ V’ , H 中都有连接 x 与 y 的边 , 则称 H 是 G 的完全子 图 . 如果不存在 G 的完全子图 M , 使得 V ( H) < V ( M) , E ( H) < E( M) , 则称 H 为 G 的极大完全子图 . | V ( H) | 值最 大的极大完全子图称为最大完全子图 . 引理 [ 8 ] 设 R 是集合 A 上的关系 , P1 、 P2 …… 是 A 中的 所有等价类 , 于是 A = P1 ∪P2 ∪P3 …… 且 Pi ∩Pj = Φ( i
运用着色算法求解最大完全子图 ( 由顶点 V 1 、 V3 、 V7 组 成) ,算法执行效率会更高 .
李建新 : 求最大完全子图的启发式着色算法
11
试向量作为实验对象 ,整个实验在 VC + + 环境中实现 . 为 了提 高 向 量 间 的 相 关 性 , 对 集 成 电 路 S5378f 、 S9234f 、 S13207f 、 S15850f 、 S38417f 、 S35854f 的各个测试集均采取 了分组相容的措施 , 首先将测试集按列分组 , 根据每组测 试分量间的相关性建立相关性无向图 ( 以邻接表存储 ) , 图 的顶点表示测试分量字段 , 边表示测试分量间具有相关 性 ,然后运用上述算法划分极大完全子图 , 每一个极大完 全子图内的测试分量是两两相关的 , 可以合并为一个测试 分量 ,达到压缩的目的 . 因此随着分组方法的不同 , 构建的 相关性无向图边数是大不相同的 , 边数统计不具有确定 性 ,但顶点数目是固定的 , 各测试集构成的无向图的顶点 数规模如表 2 所列 .
作者简介 : 李建新 (1971 - ) ,男 ,实验师 ,在读硕士 ,研究方向 : 算法设计 、 SOC 测试方法 . 基金项目 : 安徽省自然科学研究重点项目 ( KJ 2010A352) ,安徽省自然科学研究一般项目 ( KJ 2010B224) , 宿州学院硕士科研启动基金 项目 (2009 YSS12) 收稿日期 :2009211207
表2 实验用图顶点数 电路名称
S5378f S9234f S13207f S15850f S38417f S38584f
算法演进一节中所述的降低图的复杂性的精简处理措施 除了可提高算法的执行效率外 , 还有利于增加极大完全子 图的确定性 ,遴选出最大完全子图 , 找到近优解 . 因此算法 的优化除对算法本身进行改进外 , 还可考虑在不同需要的 情况下对图采取适当的精简措施 , 另外 , 还可在图的存储 结构等方面进行研究 .
≠j) 结论 1 [ 8 ] 极大完全子图的点集在两两相邻的关系下是 一等价类 . 结论 2 [ 8 ] 任意图 G 的点集 P ( G) 可划分为所有极大完 全子图的并集 , 即 P ( G) = P ( G1) ∪P ( G2 ) ∪…∪P ( Gk) ∪ ) 是 G 的极大 …, 且 P( Gi) ∩P( Gj) =φ, i ≠j. Gi ( i = 1 , 2 , … 完全子图 . 3 求最大完全子图的着色算法 3. 1 算法描述 由上述结论 2 ,任一无向图 G 均可以划分为极大完全 子图的并集 ,因此可以对一无向图进行极大完全子图化 .
} Ret urn cj 最大的完全子图
图1 已知无向图例图
最终实现极大完全子图的划分结果如下 : 着 C1 颜色的顶点集 V ( G1 ) = { v1 、 v3 、 v7 } 着 C2 颜色的顶点集 V ( G2 ) = { v4 、 v6 } 着 C3 颜色的顶点集 V ( G3) = { v2 、 v8 } 着 C4 颜色的顶点集 V ( G4 ) = { v5 } 经比较知 , 由顶点集 V ( G1 ) 构成的完全子图即为最大 完全子图 .
第 12 卷 第 2 期 2010 年 4 月
滁 州 学 院 学 报 JOURNAL OF CHUZHOU UNIVERSITY
Vol . 12 No. 2 Ap r . 2010
求最大完全子图的启发式着色算法
李建新1 ,2
(1. 宿州学院 计算机科学与技术系 ,人工智能与数据挖掘研究室 , 安徽 宿州 234000 ; 2. 合肥工业大学 计算机与信息学院 , 安徽 合肥 230009)
s3 s4 s5 s6 s7 s8
U ncolo r_degee 变化 s0 2 1 2 2 1 1 3 2 s1 1 1 1 s2 0 s3 s4 0 s5 s6 0 0 s7 s8 -
无 无 无 无 无 无 无 无
C1 -
C1 -
C1 -
ห้องสมุดไป่ตู้
C2 -
C2 -
C3
C3 -
C4 -
0 0 0 0 0 0 0 0
v = Full_degree 最高的未着色顶点 , Full_ degree 相同情况下是 Uncolor_ degree 最高的未着 色顶点 , 两者都相同情况下是索引较小的未着色顶点 ; j = 某种颜色的索引 , 这种颜色若已出现过 , 则着该颜色的 全部顶点都要落在 v 的已着色的邻接顶点范围内 , 若没有任何一 种颜色的全部出现在 v 的已着色的邻接顶点中 ,则 j 为从未出现过 的颜色的最小索引 ; for ( 与 v 邻接的每个未着色顶点 u) { Full_degree + + ; Uncolor_ degree - - ; } v 的颜色 = c j ; cj + +
位 ,相容压缩是将测试集中相容的测试向量合并为一个向 量 . 为追求最大压缩率 ,需寻求测试集中的极大相容类 , 这 个问题可映射为图论中的极大完全子图问题 , 并且可通过 为顶点着色分类的方法划分各个极大相容类 , 进一步研究 可将该方法演化为求极大完全子图 ( great co mpleted sub grap h) 的一般算法 , 进而也就得到了求最大完全子图的 算法 . 2 相关概念 定义 1 [ 7 ] 通常把二元序组 ( V , E) , 称为图 . 记为 : G (
10
李建新 : 求最大完全子图的启发式着色算法
本算法首先按从大到小的顺序产生出各个极大完全子图 , 同时对不同的极大完全子图的顶点着不同的颜色 , 然后返 回着某种颜色最多的极大完全子图即为最大完全子图 . 为 更突出表现算法思想 ,本算法采用清晰的自然语言进行表 达 ,描述如下 :
根据实际问题进行抽象 ,建立一无向图 G = ( V , E) ;
表1 顶点着色过程及算法中关键量的变化过程
指针 变化
S2 → S7 → S3 → S4 → S8 → S5 → S1 → S6 →
顶点 序号
V1 V2 V3 V4 V5 V6 V7 V8
s0 s1
颜色序号 Cj 变化
s2 s3 s4 s5 s6 s7 s8 s0 s1 s2
Full_degee 变化
V 6 及其由它们发出的边 , 图 1 将变为如图 2 所示 , 这时再
图2 图 1 精简处理后的例图
4 实验验证 本算法在集成电路测试数据某相容压缩实验中得以
运用 ,顺利地完成了实验任务 , 使实验达到了预期的结果 , 同时验证了本算法的有效性 . 实验中以 ISCAS - 89 基准电 路的几个规模较大的时序电路的 Mintest 测试向量集的测
0 引言
最大完全子图 ( maximum co mpleted sub - grap h) 问题 是图论中的一个经典组合优化问题 , 也是一类 N P 完全问 题 ,对它的研究具有很大的理论和实用价值 , 该问题在实 践中被广泛应用于市场分析 、 方案选择 、 管理决策 、 故障诊 断、 数据压缩等不同领域 . 目前国内外对最大完全子图问 题的求解有广泛的研究 ,大致可分为确定性算法 (exact al2 gorit hm) [ 1 ] 和 启 发 式 ( heuristic algo rit hm) [2 - 6 ] 算 法 两 大 类 . 确定性算法在求解顶点数相对较少 、 密度相对较低的 图时尚为有效 , 随着研究的深入 , 遇到的问题复杂度越来 越高 ( 顶点增多和边密度变大) ,确定性算法逐渐不能有效 解决 . 针对该情况 , 一些学者提出了启发式算法求解最大 完全子图问题 , 当前的启发式算法都基于以下几类 : 顺序 贪婪启发式算法 [ 2 ] 、 遗传算法 [3 ] 、 神经网络 [ 4 ] 、 模拟退火和 [5 ] 禁忌搜索 、 基于连续的启发式算法 [6 ] 等 , 取得了令人满 意的效果 . 着色算法是图论中的一种经典算法 , 它通过对图的顶 点着色或边着色的途径在方案选择及地图学等各个领域 有着广泛的运用 . 但通过文献查询 , 目前还没有发现运用 着色手段求解最大完全子图的成熟算法 , 经研究 , 本文推 出一种对无环的简单无向连通图求解最大完全子图的着 色算法 ,该算法也是一种启发式算法 . 1 算法思想的由来 该算法思想来源于本人对集成电路的测试向量相容 压缩的研究 . 在对集成电路进行测试时 , 需要通过自动测 试设备 A TE(auto matic test equip ment) 向测试芯片传输大 量的测试数据 ,为减少测试时间 , 降低测试成本 , 需要对测 试数据进行压缩 , 由于测试数据中含有大量无关位 , 向量 间的相容性较好 , 因此可对测试向量采取相容压缩的方 法 . 相容是指两测试向量对应位相同或其中一位为无关
相关文档
最新文档