本发明涉及一种图的smarandachely邻点可区别全染色算法。
背景技术:
现实生活中的许多问题都会涉及到将某些对象按照一定的规则和条件进行分类的问题,如排课表问题,存储问题,交通定向等问题都可以转化为对应的图的染色问题。图的smarandachely邻点全染色是满足相邻顶点的色集合互不包含的正常全染色。即
定义1:对于一个阶数至少是2的连通图g(v,e),设f是从v(g)∪e(g)到{1,2,3,…,k}的映射,这里k为正整数,如果f满足:
(1)对
(2)对
记c(u)={f(u)}∪({f(uv)|uv∈e(g)},若一个k-正常全染色同时满足以下条件:
(3)
χsat(g)=min{k|g有k-satc}
称作图g的smarandachely邻点全色数。
李沐春教授在他的一篇发表于<<数学的实践与认识》》的文献[1]中提到如下猜想:
对于一个连通图g,若g的阶数不小于2,则有χsat(g)≤δ(g)+2,其中δ(g)表示图g的最大度。
目前对于smarandachely邻点可区别正常全染色的研究文献较少,而且全部的研究结果都是关于某种具体图类的染色数的研究,目前市面上还没有对smarandachely邻点可区别正常全染色的算法进行研究的相关结果。
参考文献:李沐春,文飞,张荔.若干直积图的smarandachely邻点全色数【j】数学的实践和认识.(42卷5期)p192-197.。
技术实现要素:
本发明的目的在于提供一种图的smarandachely邻点可区别全染色算法,该算法根据smarandachely邻点可区别全染色的约束规则,确定5个子目标函数和一个总目标函数,然后借助色补集合逐步迭代交换,每次迭代交换后判断目标函数值,当目标函数值满足要求时染色成功。
为实现上述目的,本发明的技术方案是:一种图的smarandachely邻点可区别全染色算法,根据smarandachely邻点可区别全染色的约束规则,确定子目标函数和总目标函数,然后借助色补集合逐步迭代交换,每次迭代交换后判断目标函数值,当目标函数值满足要求时染色成功。
在本发明一实施例中,该算法具体实现如下:
(1)构建目标函数:
设图g(v,e)是一个简单连通图,并设f:v∪e→{1,2,…,k}是映射
(1.1)顶点约束函数
正常全染色要求相邻的顶点必须染不同的颜色;顶点约束函数定义如下:
对任意uv∈e,
(1.2)边约束函数
正常全染色要求相邻的边必须染不同的颜色;边约束函数定义如下:
对任意相邻的两边e1,e2,令
(1.3)顶点边约束函数
正常全染色要求顶点与其关联边必须染不同的颜色;顶点边约束函数定义如下:
对任意uv∈e,令
(1.4)色集合约束函数
smarandachely正常全染色要求相邻顶点的色集合互不包含;色集合约束函数定义如下:
对任意边uv∈e,令
(1.5)总体目标函数
由上述四个染色条件的约束函数,得出总体目标函数:fsatc=fav+fae+fve+fsa
(2)全染色算法步骤:
step1:调用随机图生成算法随机生成一个图的邻接矩阵并存储在colour[i][j]中,计算各顶点的度d(vi)和所需要的色数k,并由random()生成n组1到k之间的随机数对g进行边的预备染色,保证对于任意的顶点vi,colour[i][i+1]到colour[i][n]中的互不相同,而且所取的颜色与colour[i][1]到colour[i][i-1]是不同的,以保证该染色是边正常染色;
step2:检查顶点
step3:检测相邻顶点的色集合是否相互包含,若相同,则用相邻点色集合互不包含变换函数进行处理,若不互相包含则进入step4;
step4:将各顶点的按照色补集合中的元素个数从小到大排列,检测是否有相邻的顶点的色集合之间存在包含关系,若有uv∈e(g)且
step5:对顶点进行染色,将各顶点按照色补集合中的原色个数从小到大排列,调用相邻点色不同函数进行染色;
step6:染色完成,判断结果是否准确,若出现相邻顶点的色集合有包含关系,则将k增加1,否则输出图的smrandachely全染色矩阵。
在本发明一实施例中,在step1中,所述随机图生成算法具体实现如下:
1)设置顶点数n,并生成n×n空矩阵;
2)由random()随机地生成边的总个数,并将矩阵的主对角线上方的n×(n-1)/2个位置上随机的放置1;
3)若主对角线上方元素中每一行或者每一列至少有一个1,则将主对角线下方元素对称补充完整,主对角线的元素全放置0,输出邻接矩阵;否则返回步骤2)。
在本发明一实施例中,在step2中,所述相邻边色不同变换函数具体实现如下:
当
①若f(uv)=f(uw)且
②若f(uv)=f(uw)且
③若f(uv)=f(uw)且
设
重复执行直至fae=0为止。
在本发明一实施例中,在step5中,所述相邻点色不同函数具体实现如下:
将各顶点按照色补集中的元素从小到大排序存储在bian[]中,依次取出bian[i]对相应的点进行染色,设当前待染色顶点为vi,
①若
②若f(vj)=km且vivj∈e(g),则f(vj)=km;
③若m>p且f(vl)=0且
④重复执行直至fav=0为止。
在本发明一实施例中,在step3中,所述相邻点色集合互不包含变换函数具体实现如下:
fsa≠0,执行
若
①若
②
③f(vivj)=f(vjvi)=a1直接计算fsa;
④重复执行直至fsa=0为止。
相较于现有技术,本发明具有以下有益效果:本发明能够实现图的smarandachely邻点可区别全染色。
附图说明
图1为本发明算法一实施案例流程图。
具体实施方式
下面结合附图,对本发明的技术方案进行具体说明。
本发明提供了一种图的smarandachely邻点可区别全染色算法,根据smarandachely邻点可区别全染色的约束规则,确定子目标函数和总目标函数,然后借助色补集合逐步迭代交换,每次迭代交换后判断目标函数值,当目标函数值满足要求时染色成功。该算法具体实现如下:
(1)构建目标函数:
设图g(v,e)是一个简单连通图,并设f:v∪e→{1,2,…,k}是映射
(1.1)顶点约束函数
正常全染色要求相邻的顶点必须染不同的颜色;顶点约束函数定义如下:
对任意uv∈e,
(1.2)边约束函数
正常全染色要求相邻的边必须染不同的颜色;边约束函数定义如下:
对任意相邻的两边e1,e2,令
(1.3)顶点边约束函数
正常全染色要求顶点与其关联边必须染不同的颜色;顶点边约束函数定义如下:
对任意uv∈e,令
(1.4)色集合约束函数
smarandachely正常全染色要求相邻顶点的色集合互不包含;色集合约束函数定义如下:
对任意边uv∈e,令
(1.5)总体目标函数
由上述四个染色条件的约束函数,得出总体目标函数:fsatc=fav+fae+fve+fsa
(2)全染色算法步骤:
step1:调用随机图生成算法随机生成一个图的邻接矩阵并存储在colour[i][j]中,计算各顶点的度d(vi)和所需要的色数k,并由random()生成n组1到k之间的随机数对g进行边的预备染色,保证对于任意的顶点vi,colour[i][i+1]到colour[i][n]中的互不相同,而且所取的颜色与colour[i][1]到colour[i][i-1]是不同的,以保证该染色是边正常染色;
step2:检查顶点
step3:检测相邻顶点的色集合是否相互包含,若相同,则用相邻点色集合互不包含变换函数进行处理,若不互相包含则进入step4;
step4:将各顶点的按照色补集合中的元素个数从小到大排列,检测是否有相邻的顶点的色集合之间存在包含关系,若有uv∈e(g)且
step5:对顶点进行染色,将各顶点按照色补集合中的原色个数从小到大排列,调用相邻点色不同函数进行染色;
step6:染色完成,判断结果是否准确,若出现相邻顶点的色集合有包含关系,则将k增加1,否则输出图的smrandachely全染色矩阵。
在本实施例中,在step1中,所述随机图生成算法具体实现如下:
1)设置顶点数n,并生成n×n空矩阵;
2)由random()随机地生成边的总个数,并将矩阵的主对角线上方的n×(n-1)/2个位置上随机的放置1;
3)若主对角线上方元素中每一行或者每一列至少有一个1,则将主对角线下方元素对称补充完整,主对角线的元素全放置0,输出邻接矩阵;否则返回步骤2)。
在本实施例中,在step2中,所述相邻边色不同变换函数具体实现如下:
当
①若f(uv)=f(uw)且
②若f(uv)=f(uw)且
③若f(uv)=f(uw)且
设
重复执行直至fae=0为止。
在本实施例中,在step5中,所述相邻点色不同函数具体实现如下:
将各顶点按照色补集中的元素从小到大排序存储在bian[]中,依次取出bian[i]对相应的点进行染色,设当前待染色顶点为vi,
①若
②若f(vj)=km且vivj∈e(g),则f(vj)=km;
③若m>p且f(vl)=0且
④重复执行直至fav=0为止。
在本实施例中,在step3中,所述相邻点色集合互不包含变换函数具体实现如下:
fsa≠0,执行
若
①若
②
③f(vivj)=f(vjvi)=a1直接计算fsa;
④重复执行直至fsa=0为止。
以下为本发明的具体实现过程。
本算法是将多目标优化的概念用于解决图的smarandachely邻点可区别全染色,这是一个很好的尝试。将该问题分成多个子问题来对应染色条件,针对每个子问题分别设置子目标函数和决策空间,每个子目标函数在颜色的交换过程中逐渐得到最优解,最终使得总目标函数满足smarandachely邻点可区别全染色的要求。具体做法如下:
(1)构建目标函数:
设图g(v,e)是一个简单连通图,并设f:v∪e→{1,2,…,k}是映射
(1.1)顶点约束函数
正常全染色要求相邻的顶点必须染不同的颜色;顶点约束函数定义如下:
对任意uv∈e,
(1.2)边约束函数
正常全染色要求相邻的边必须染不同的颜色;边约束函数定义如下:
对任意相邻的两边e1,e2,令
(1.3)顶点边约束函数
正常全染色要求顶点与其关联边必须染不同的颜色;顶点边约束函数定义如下:
对任意uv∈e,令
(1.4)色集合约束函数
smarandachely正常全染色要求相邻顶点的色集合互不包含;色集合约束函数定义如下:
对任意边uv∈e,令
(1.5)总体目标函数
由上述四个染色条件的约束函数,得出总体目标函数:fsatc=fav+fae+fve+fsa
(2)采用算法:
算法1:随机图生成算法
输入:点数n
输出:图的邻接矩阵
算法步骤:
1)接收顶点数n,并生成n×n空矩阵;
2)由random()随机地生成边的总个数,并将矩阵的主对角线上方的n×(n-1)/2个位置上随机的放置1;
3)若主对角线上方元素中每一行或者每一列至少有一个1,则将主对角线下方元素对称补充完整,主对角线的元素全放置0,输出邻接矩阵;否则返回2)。
算法2:相邻边色不同变换函数
输入:任意边染色矩阵
输出:正常边染色矩阵
算法步骤:
while
begin
iff(uv)=f(uw)and
elseiff(uv)=f(uw)and
f(uw)=f(wu)=b1,修改
elseiff(uv)=f(uw)and
begin
设
end
end
输出结果;
enddo。
算法3相邻点色不同函数
输入:邻点可区别边染色矩阵
输出:邻点可区别全染色矩阵
算法步骤:
将各顶点按照色补集中的元素从小到大排序存储再bian□中,依次取出bian[i]对相应的点进行染色,设当前待染色顶点为vi,
while(i=0;i<=n-1;i++)do
begin
for(m=1;m<=p;m++)
iff(vj)=kmand
elseiff(vj)=kmandvivj∈e(g)thenm+1→m;
return;
elseifm>pthen
begin
iff(vl)=0and
f(vivl)=f(vlvi)=a1;
return;
elseiff(vi)=k1;
end
end
输出结果
enddo。
算法4相邻点色集合互不包含变换函数
输入邻点可区别全染色矩阵
输出smarandachely邻点可区别全然色矩阵
算法步骤:
while(fae≠0)do
begin
if
for(m=1;1<=m<n;m++)
p=(i+m)%n;
if
f(vivp)=f(vpvi)=b1,计算fae;
elsep=(j+m)%n;
if
f(vjvp)=f(vpvj)=c1,计算fae;
elsef(vivj)=f(vjvi)=a1,计算fae;
end
输出结果;
enddo。
实施案例:
如图1所示,算法步骤:
step1:调用算法1随机一个图的邻接矩阵并存储在colour[i][j]中,计算各顶点的度d(vi)和所需要的色数k,并由random()生成n组1到k之间的随机数对g进行边的预备染色,保证对于任意的顶点vi,colour[i][i+1]到colour[i][n]中的互不相同,而且所取的颜色与colour[i][1]到colour[i][i-1]是不同的,这保证了该染色是边正常染色。
step2:检查顶点
step3:检测相邻顶点的色集合是否相互包含,若相同,则用算法4进行处理,若不互相包含则进入step4;
step4:将各顶点的按照色补集合中的元素个数从小到大排列,检测是否有相邻的顶点的色集合之间存在包含关系,若有uv∈e(g)且
step5:对顶点进行染色,将各顶点按照色补集合中的原色个数从小到大排列,调用算法3进行染色;
step6:染色完成,判断结果是否准确,若出现相邻顶点的色集合有包含关系,则将k增加1,否则输出图的smrandachely全染色矩阵。
以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。