首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找仅包含2和3度节点的最大子图

查找仅包含2和3度节点的最大子图
EN

Stack Overflow用户
提问于 2019-04-01 23:53:22
回答 1查看 164关注 0票数 5

我正在尝试实现以下论文中的(未加权的)反馈顶点集近似算法:FVS-Approximation-Paper。算法的步骤之一(在第4页描述)是计算输入图的最大2-3个子图。

准确地说,2-3图是只有2或3度顶点的图。

所谓极大,我们的意思是说,在不违反2-3条件的情况下,不能将原始图的任何边或顶点集添加到极大子图中。

这篇论文的作者声称,可以通过在图上进行“简单深度优先搜索(DFS)”来进行计算。然而,这个算法似乎让我摸不着头脑。如何计算最大子图?

EN

回答 1

Stack Overflow用户

发布于 2019-04-03 07:57:21

我想我设法弄明白了一些类似作者的意图。不过,我不认为这很简单。

设G是图,H是G的一个初始空的2-3子图,该算法与深度优先遍历有一族相似之处,但我不会称之为深度优先遍历。从任意节点开始,我们在图中遍历,将步骤推送到堆栈上。每当我们检测到堆栈包含将构成H的2-3个超图的路径/循环/sigma形状时,我们将其从堆栈移动到H并继续。当不再可能找到这样的形状时,H是最大的,我们就完成了。

更详细地说,堆栈通常由在H中没有3次节点的路径组成。光标位于路径的一端。在每一步中,我们都会检查下一个边缘事件到底。如果唯一的入射边是我们到达的那条边,我们将它从G和堆栈中删除,并将末端移回一个。否则,我们可以将路径扩展一些边e。如果e的另一个端点在H中有3次,我们从G中删除e,并考虑到末端的下一条边。如果e的另一个端点的H阶数为2,但当前不在堆栈上,那么我们就锚定了这一端。如果另一端也是锚定的,则将堆栈路径添加到H并继续进行。否则,将光标移动到堆栈的另一端,反转堆栈。最后一种情况是堆栈循环回自身。然后我们可以提取路径/循环/sigma并继续前进。

在手机上输入这个,所以很抱歉简短的描述。也许我会抽出时间来实现它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55459091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档