哈密尔顿path与欧拉path之间的区别
有人能告诉我哈密尔顿path与欧拉path之间的区别吗? 他们似乎相似!
欧拉path是一条path,每条边只有一条边而不重复,如果它在初始顶点结束,那么它是一个欧拉循环。
哈密尔顿path通过每个顶点(注意不是每个边),如果它在初始顶点结束,则它是一个哈密尔顿循环。
在欧拉path中,您可能会多次穿过一个顶点。
在哈密尔顿path中,你不可能穿过所有的边缘。
欧拉path必须恰好访问每个边缘一次,而哈密顿path必须恰好访问每个顶点一次。
图论的定义
(按通用性降序排列)
-
步行 :边缘序列,其中一条边的末端标记下一条边的开始
-
步道 :不重复任何边缘的步行。 所有的小径都是散步。
-
path :每一个顶点遍历一次。 (用于引用开放散步的path,现在定义已经改变)遍历顶点的属性只是一次,意味着边缘也只交叉一次,因此所有的path都是path。
哈密尔顿path和欧拉足迹
-
哈密顿path :访问图中的每个顶点 (只有一次,因为它是一个path)
-
欧拉path :一次访问graphics中的每条边 (因为它是一条线索,顶点可能不止一次地穿过)。
哈密尔顿path一次只访问每个节点(或顶点),而欧拉path恰好遍历每一条边。
它们是相关的,但既不相互依赖也不相互排斥。 如果一个graphics有一个欧拉循环,它可能会也可能不会有一个哈密尔顿函数,反之亦然。
欧拉循环恰好访问图中的每一条边 。 如果图中有多于两条边的顶点,则根据定义,循环将不止一次通过这些顶点。 结果,顶点可以重复,但边缘不能。
哈密尔顿周期恰好访问图中的每个顶点 (类似于旅行商问题)。 结果,边和顶点都不能重复。
我将在生物学中使用一个常见的例子。 通过制作DNA样本来重build基因组。
从头组装
为了从短读数构build基因组,有必要构build这些读数的图。 我们通过将读取分为k-mers并将它们组装成一个图表来完成。
我们可以通过访问每个节点来重新构build基因组,如图所示。 这被称为哈密顿path。
不幸的是,构build这样的path是NP难的。 推导出解决这个问题的高效algorithm是不可能的。 相反,在生物信息学中,我们构build了一个边界代表重叠的欧拉循环。
欧拉path是一个使用图的每一条边的path,它必须有两个奇数的顶点,path在不同的顶点开始和结束。 哈密尔顿周期是一个包含图的每个顶点的循环,因此您不可以使用图的所有边。
欧拉path是一个使用图的每个边(NOTE)的图。 欧拉回路是覆盖所有边缘后返回到起点的欧拉回路。
哈密尔顿path是一个只覆盖所有顶点(注意)的graphics。 当这个path返回到它的起始点时,这个path被称为hamilton电路。