Color coding 解决最小权重k-path问题
首先简单介绍一下Color coding,Color coding是一种近似算法。主要用于解决图论中的问题,将图中的顶点着色,通过颜色来决策。详细的我也不清楚,你可以去维基百科上看看。
再介绍一下最小权重K-Path,很简单就是在一个图中寻找一条长度为K(包含K个顶点的路径),并且保证该路径的权重最短。我们在下面讨论的是以某一点为起点的算法,全局最短可有两种思路,第一种就是对所有点都当成起点来一次,求最短,还有就是每一次着色后都随机选择一个起点,当第二种方法运行的次数足够多是,他的性能就会向第一种收敛。
Color coding的过程如下:
1 使用K种颜色对图随机着色。
2 构建一个表,列为图中的顶点,行为K的大小。
3 进行动态规划。
代码描述能力有限,直接走个例子吧。
说明一下,上图就是着完色的图,K=4,所以有四种颜色。颜色用r,g,b,y代表。线上的数字就是权重。
动态规划填表时,表里的内容为一个{数字,颜色集合}。行数代表路径的长度,列代表这条路径终点。举个例子,比如在K=3,V5的格子里填有{5,[r,y,b]},意思就是从V1到V5之间有长度为3的路径,总权重为5,终点为V5,经过红—黄—蓝三色。
当我们从长度为i的路径延伸为长度为i+1的路径时,我们对所有长度为i的路径的终点的邻居进行遍历。如果一个邻居的颜色不属于当前的颜色集合。就可以把它加