Algorithm 查找仅包含2次和3次节点的最大子图

Algorithm 查找仅包含2次和3次节点的最大子图,algorithm,graph,language-agnostic,graph-theory,depth-first-search,Algorithm,Graph,Language Agnostic,Graph Theory,Depth First Search,我正试图实现一个(未加权)反馈顶点集近似算法,该算法来自以下论文:。算法的步骤之一(如第4页所述)是计算输入图的最大2-3子图 精确地说,2-3图是一个只有次数为2或3的顶点的图 所谓最大,我们的意思是,在不违反2-3条件的情况下,原始图的任何边或顶点集都不能添加到最大子图中 论文的作者声称,计算可以通过图上的“简单深度优先搜索(DFS)”进行。然而,我似乎无法理解这种算法。如何计算最大子图?我想我已经找到了作者想要的东西。不过,我不认为这很简单 设G为图,H为G的初始空2-3子图。该算法与深度

我正试图实现一个(未加权)反馈顶点集近似算法,该算法来自以下论文:。算法的步骤之一(如第4页所述)是计算输入图的最大2-3子图

精确地说,2-3图是一个只有次数为2或3的顶点的图

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


论文的作者声称,计算可以通过图上的“简单深度优先搜索(DFS)”进行。然而,我似乎无法理解这种算法。如何计算最大子图?

我想我已经找到了作者想要的东西。不过,我不认为这很简单

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

更详细地说,堆栈通常由一条路径组成,该路径在H中没有阶数为3的节点。光标位于路径的一端。在每一步中,我们都将检查下一个边缘事件。如果唯一的事件边是我们到达的边,我们将它从G和堆栈中删除,并将端点向后移动。否则,我们可能会将路径延长一些边e。如果E的另一个端点在H中具有3度,则从G中删除E,并考虑下一个边缘事件到结束。如果e的另一个端点在H中的阶数为2,但当前不在堆栈上,那么我们已经锚定了该端点。如果另一端也被锚定,则将堆栈路径添加到H并继续。否则,将光标移动到堆栈的另一端,反转堆栈。最后一种情况是堆栈自身循环。然后我们可以提取路径/周期/西格玛并继续


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

你有没有试着与论文的作者联系过?你说的程度是指边缘的数量?