算法回溯。计算图中的完美匹配
Posted
技术标签:
【中文标题】算法回溯。计算图中的完美匹配【英文标题】:An algorithmic backtracking. Count perfect matching in a graph 【发布时间】:2012-02-01 06:06:53 【问题描述】:所以我是一名 cs 学生,我们被要求在 c 中构建一个回溯程序(没有循环,只有递归),它得到一个无向无权(无提升)图的邻接矩阵,并返回完美匹配的数量在该图中,否则为零。 我想过使用使用 pfaffian 方向的 fkt 算法,但到目前为止我还没有弄清楚如何去做。 如果您能如此友善,也许可以指导我找到正确的书或正确的方式来看待这个问题,我将不胜感激。 这是我第一次尝试回溯,我想我错过了一些关于如何实现这样的事情的基本概念。
【问题讨论】:
您遇到的具体问题是什么?现在我不知道如何提供帮助,因为我不确定您的问题是什么。 所以你可以在这里看到的 fkt 算法link 使用了一种非常好的方法,但是当我开始构建 t2 并完成定向 G 时,我迷路了,无法产生自我我需要做的正确伪代码。在纸上我可以处理它,但这仍然没有让我到达我想要到达的地方。产生斜对称矩阵和我可以处理的其余问题,但中间的那个点(算法中的第 5 行和第 6 行)对我来说有些问题。 【参考方案1】:FKT 仅适用于 平面 图。如果你想实现它(你几乎肯定不会,因为那将是一个糟糕的作业;这是给其他发现这个问题的人的),你需要planarity test以获取嵌入的方式绘制图形,然后实现these slides 中描述的方向算法。 (草图:在原始图中找到一棵生成树并任意定位这些边。不在生成树中的边构成对偶图中的生成树。按后序访问后者树的节点;每个节点的父边( = primal face) 访问的是最后一个未确定方向的入射边,所以如果该面当前有偶数个顺时针边,则顺时针方向,否则逆时针方向。)
【讨论】:
以上是关于算法回溯。计算图中的完美匹配的主要内容,如果未能解决你的问题,请参考以下文章