Hamilton问题的一些假做法和一种真做法
Posted shzr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hamilton问题的一些假做法和一种真做法相关的知识,希望对你有一定的参考价值。
Hamilton问题
Hamilton回路/路是指从某个点出发,不重复的经过每个点,最后回到起点/随便停留的路.
从刚开始学OI买了信息学一本通,这个问题就常常出现.由于它题面的简洁性,看起来无比优美的性质和欧拉回路的高度相似性,它看起来很像一个好算法,可惜,这是一个NP-hard问题.
因为可能会有不明真相的人点进来看,我首先介绍一下一种真实的做法:状压dp,似乎也不需要介绍了,当然搜索也是可以的,总之都是指数级算法了.
但是它却如幽灵一般给人解决它的希望...见到这种事情已经很多次了,今天决定写一写.
给定$n$个单词,求一种排列顺序使得相连单词首尾相接.$n<=10^5$
这道题有两种解法:
1.将单词作为点,如果两个单词可以首尾相接,那么连一条边,要求不重复的经过每一个点,是一个哈密尔顿路问题,于是这就得到了一个非常优秀的$2^{10^5}$的做法!
2.将字母作为点,对于每个单词,将它的尾字母向首字母连边,要求不重复的经过每一条边,是一个欧拉路问题,于是这就得到了一个更加优秀的$10^5$的做法!
这道题深刻的阐述了建图策略对于时间复杂度的影响,然而...这两种建图的复杂度都不是很高,如果可以设法进行一番逆变换,把一个普通图的哈密尔顿路转化为这个问题,再转化为欧拉路做,可以吗?
这个想法极大的鼓舞了我,不过经过一段时间的尝试,我发现这个逆变换实际上是无法在多项式时间内出解的,反向构图同样需要指数级时间。
今天学习网络流的时候又看到了一种新的假解法:
无源汇上下界网络流. 无源汇上下界网络流. 无源汇上下界网络流.
好高端啊,虽然还是假的.但是这个算法想要证伪可就不那么显然了.
对于每个点进行拆点限制流量上下界均为为1,对于原有的边下界为0上界正无穷.
看起来是不是非常对呀...
但是这种算法可能会把明明不符合条件的图也判断成满足条件,为什么?因为解决无源汇问题时,往往是通过转化为多源多汇再进一步转化为超级源汇来解决的,所以求出的可能不是一条路,而是一些无法相连的路。
至此妄想解决哈密尔顿问题的这个尝试彻底宣告破产了.
有的东西就是这样,看起来好像就差一点了,其实差的很远,可能总是会觉得还有希望,但其实根本就没有希望。
人生是不是也是这样呢?(语文老师说加上这一句作文就能再高五分)
---shzr
以上是关于Hamilton问题的一些假做法和一种真做法的主要内容,如果未能解决你的问题,请参考以下文章