欧皇限定のColorCoding
Color Coding 与最小权重k-path问题
参考资料:
彩色编码技术的研究进展及应用
彩色编码技术的研究进展及应用-备用链接
https://blog.csdn.net/u010352695/article/details/40924019 (这篇博客曾经没有收费呢……)
以及来自同学的题解
用途&适用
作为一种近似算法,主要用于解决图论中的k-path问题。
近似算法
指一些不那么严谨的算法,它们通常与NP-HARD问题相关。
因为这些问题不存在精确的多项式时间算法,所以会近似地使用多项式时间复杂度,但答案会在最优解的一定范围内浮动。
评估算法的三个方面:适用范围,时间复杂度,最优解性质。
世上总是缺乏十全十美的事物,算法亦然难以同时满足所有要求。近似算法就是舍弃第三者的产物。
更详细的内容可以询问度娘、某乎、CSDN博客等。
k-path问题
著名的NP-Hard问题。对于给定的图\(G\)(不妨设它有\(n\)个点和\(m\)条边)和一个正整数\(k\),要求找到图中一个包含\(k\)个节点的简单路径(即该路径中,不允许多次经过同一节点)。这条简单路径(的权值和)应当满足某种最值要求。
使用方法
第一步,对图(中的点)随机染色,染色使用的颜色有k种(即要选取的简单路径的节点个数)。
注:请不要纠结颜色具体是红黄蓝还是黑白灰,这里的“颜色”只是一种分类的标识而已。可以认为这一步将图中的点随机(而不是均匀)分为\(k\)类。
第二步,在颜色限制下进行状态压缩DP,求出最值路径。
状态定义需要两维:\(f(i,s)\)表示路径重点为\(i\)点,路径中经过颜色集合为s时的最大/小值
对于每条边(u,v),有如下的状态转移方程:
如果v的颜色在集合s中,则:$$f(v,s) = \max{ f(u, s')+w(u,v) }$$
其中集合\(s'\)是集合\(s\)除去\({col_{v}}\),\(w(u,v)\)是边\((u,v)\)的权值
如果\(u\)的颜色在集合\(s\)中,同理。
思想&原理
我们假定最终解中的点被染成了两两不同的颜色。
那么最终解应该是:\(ans = \max{ f(i,\{1,2,3,...,k\}) }\)
得出这个【假定最优解】的时间复杂度是\(O(m*2^k)\)。似乎是个很理想的效率。
然而,【假定最优解】真的是【最优解】吗?
不一定,说白了就是看运气()
如果真正的最优解并没有被染成两两不同的颜色,就再来一次。只要重开的次数够多,那总会那么有一次刚好得到最优解。
当然也不可能纯凭运气。
可以计算得到,最优解恰好被染成两两不同的颜色的概率是\(\frac{k!}{k^k}\)。从概率的角度,得到最优解的期望次数是\(\frac{k^k}{k!}\)。题中的\(k\)不会太大,因此期望次数实际上不会太多,多跑几遍程序基本上就能过了。
但是之所以称它为【欧皇限定】…因为始终存在和正解错过的可能,如果脸黑到一定程度的话……?
例题 HDU6664 Andy and Maze
翻译:\(n\)个房间,每个房间里有一块宝石,\(m\)条无向边连接,经过每条路径都有花费,到达每个房间可以获得一块宝石,获得\(k\)块就可以逃离迷宫,但是这条获得宝石的路径上同一个房间不能进入多次,你不知道哪里是起点。问满足条件的路径最多花费多少。
本文来自博客园,作者:_kilo-meteor,转载请注明原文链接:https://www.cnblogs.com/meteor2008/p/18561610