检测具有偶数个顶点的图中是否存在完美匹配的最有效算法是什么?
答案 0 :(得分:0)
要更正我在下面所说的内容(请参阅1,以便对以下段落进行更深入的讨论): 首先,Tutte矩阵是形式变量的矩阵,因此它的行列式是形式变量的多项式,而不是数字。由于T是一个形式矩阵,计算其行列式可能需要指数时间。但是,我们不需要真正计算det(T)只测试它是否与0多项式相同。这意味着对于T中变量的每个数值赋值,det(T)将产生0.可以进一步证明,如果不存在完美匹配,对于大多数变量赋值,det (T)将评估为非零变量。因此,我们可以用T中的变量替换随机值并计算行列式。如果我们评估为非零值,我们可以放心地说不存在匹配。否则,如果我们重复这个次数足够多次,我们就可以确信存在完美的匹配。
该算法仍受限于采用行列式的运行时。当前最有效的已知算法具有O(n ^ 2.373)的运行时间,在这种情况下为O(| V | ^ 2.373)。这是什么意思?
爱德蒙有O(| E | sqrt(| V |))。
对于某些类型的图形,特别是密集的图形,这实际上可以击败Edmond,渐近。但正如我所提到的,这仍然是一个随机算法,而不是一个确切的算法。
编辑评论:它的一个好处是它比Edmonds更容易包围实际工具。在C中实施Edmond是我本科生涯中最悲伤的夜晚之一。
原始错误的答案: 您可以使用Tutte矩阵找到完美匹配的存在:http://en.wikipedia.org/wiki/Tutte_matrix
如果A(t)是图G(V,E)的tutte矩阵,那么如果det(A)!= 0,则存在完美匹配。你可以在O(n ^ 3)中找到一个行列式通过高斯消除的操作,在这种情况下将是O(| V | sqrt(| V |))。如果O(| E |)>这是对Edmonds的O(| E | sqrt(| V |))运行时的改进。 O(| V |)。