关于Hamilton问题的研究
关于Hamilton问题的研究
首先介绍一下Hamilton问题:哈密顿问题寻找一条从给定的起点到给定的终点沿途恰好经过所有其他结点一次的路径。(摘自百度百科)
从刚开始学OI买了信息学一本通,这个问题就常常出现.由于它题面的简洁性,看起来无比优美的性质和欧拉回路的高度相似性,它看起来很像一个好算法,可惜,这是一个NP-hard问题.
首先介绍一下一种正确做法:状压dp.就是用$vis[i]$表示目前走过的点的状态为$i$,找到答案后倒着回溯回去输出方案,当然搜索也是可以的,总之都是指数级算法了.
但是它有很多的不正确做法,看起来都很有道理,那么这篇文章就来介绍两种并且指出其中的问题.
首先看这样一道题:单词游戏
给定$n$个单词,求一种排列顺序使得相连单词首尾相接.$n<=10^5$
这道题有两种解法:
1.将单词作为点,如果两个单词可以首尾相接,那么连一条边,要求不重复的经过每一个点,是一个哈密尔顿路问题,于是这就得到了一个非常优秀的$2^{10^5}\times 10^5$的做法!
2.将字母作为点,对于每个单词,将它的尾字母向首字母连边,要求不重复的经过每一条边,是一个欧拉路问题,于是这就得到了一个更加优秀的$10^5$的做法!
这道题深刻的阐述了建图策略对于时间复杂度的影响,然而...这两种建图的复杂度都不是很高,如果可以设法进行一番逆变换,把一个普通图的哈密尔顿路转化为这个问题,再转化为欧拉路做,可以吗?
事实上这是没有什么问题的,但是这种逆变换也无法在多项式时间内出解,所以总复杂度还是得不到保证。
今天学习网络流的时候又看到了一种新的错误解法:
使用无源汇上下界网络流,对于每个点进行拆点限制流量上下界均为为1,对于原有的边下界为0上界正无穷.
网络流的复杂度是多项式级别的,如果这个做法是正确的,那么就可以解决哈密尔顿问题。可惜这个算法也是错误的,下面来说明一下:
首先这种算法可能会把明明不符合条件的图也判断成满足条件,为什么?
因为解决无源汇问题时,往往是通过转化为多源多汇再进一步转化为超级源汇来解决的,所以求出的可能不是一条路,而是多条路,举个最显然的例子:点数大于一但没有边的图。
事实上哈密尔顿回路已被证明是没有多项式解法的,但是对于它的思考还是很有意义的.
哈密尔顿问题虽然没有得到完美的解决,但是通过科学家们的研究,发现了一些充分条件和必要条件:
1.如果一个图中有哈密尔顿回路,那么从这个图中删去x个点,新图中的连通分量不会超过$x$个;(必要)
2.如果一个图中有哈密尔顿通路,那么从这个图中删去x个点,新图中的连通分量不会超过$x+1$个;(必要)
3.Ore定理:如果对于一个无向简单图,任意不相邻两点的度数和大于等于n,那么这个图存在哈密尔顿回路(充分);
4.如果对于一个无向简单图,任意不相邻两点的度数和大于等于n-1,那么这个图存在哈密尔顿通路(充分);
---shzr
关于Hamilton问题的研究的更多相关文章
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
- 闲来无聊,研究一下Web服务器 的源程序
web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...
- SQLSERVER聚集索引与非聚集索引的再次研究(上)
SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻 ...
- 深入研究Visual studio 2017 RC新特性
在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- SQLSERVER聚集索引与非聚集索引的再次研究(下)
SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 ...
- 开源Word读写组件DocX 的深入研究和问题总结
一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
随机推荐
- [USACO13DEC] Optimal Milking
Description n个点排成一排,点有点权,要求支持两种操作: 修改某个点的点权 询问取出任意多且不相邻的点的点权和最大值 Solution 跟最大子段和一样,可以用分治做,用线段树记录一下左右 ...
- https Java SSL Exception protocol_version
在java代码中,使用HttpClient爬取https页面时,遇到了这个bug:javax.net.ssl.SSLException: Received fatal alert: protocol_ ...
- [转]Node.js tutorial in Visual Studio Code
本文转自:https://code.visualstudio.com/docs/nodejs/nodejs-tutorial Node.js tutorial in Visual Studio Cod ...
- VS2010安装MVC3失败的解决方法
环境:Win 7 x64 原因:在安装MVC3之前,安装过VS2010 SP1,导致MVC3安装,找不到对于的VS2010安装器 vs_setup.msi 问题图片: 解决方法: 一.来自网络的方法 ...
- element split 将多个单号分隔
const condeid = this.formData.WayBillCode; var item = ""; const codes = condeid.split(&quo ...
- razor视图使用三元表达式
根据条件是否满足给input标签添加属性. <input type="radio" value="1" name="PortType" ...
- 在EF中执行SQL语句(转载)
在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...
- elasticsearch6.7 05. Document APIs(1)data replication model
data replication model 本节首先简要介绍Elasticsearch的data replication model,然后详细描述以下CRUD api: 1.读写文档(Reading ...
- 【github&&git】5、使用Git拉取GitLab上的项目
一.安装Git(windows版.其他平台参阅) 去Git的官网,下载安装包,安装时,一路默认 二.配置Git 2.1 在任意地方,创建一个文件夹,保证该文件夹的目录全部是英文 2.2 打开新建的文件 ...
- 解说css中的margin属性缩写方式
<html> <body> <div style="border: 1px solid red;"> <div style="b ...