锦标赛是通过为无向完整图中的每个边指定方向而获得的有向图(有向图)。也就是说,它是有向图,其中每对顶点通过单个有向边连接。
数据结构是邻接矩阵。
如果图表是锦标赛图表,可以找到什么算法?
答案 0 :(得分:4)
邻接矩阵中有n ^ 2个条目,您需要所有条目中的信息来解决问题。 (您需要使用1来检查是否存在正确的边缘,并且需要使用0来检查后边缘是否存在。)因此,由于您必须从矩阵中读取至少N ^ 2个条目,因此必须考虑整体问题至少O(N ^ 2)时间。
关于BFS搜索尝试:如果您的遍历采用O(n ^ 2) - 由于需要在邻接矩阵中查找边缘,它将会跟随边缘检查是否恒定无关紧要时间,整体算法仍为O(n ^ 2)。
另一种看待这个问题的方法:由于边的数量等于可能的顶点对的数量,因此将有n *(n-1)/ 2个边,即O(n ^ 2) 。你的遍历是O(V + E),因此是O(n + n ^ 2),因此是O(n ^ 2)。
由于此算法的最佳情况时间为O(n ^ 2),因此您可以简单地循环遍历矩阵的右上半部分(在对角线上方),并检查每个条目是否为a )它是1,或b)它的转置等价是1。
答案 1 :(得分:2)
编辑:错过了图表完成的部分。
如果M
是您的邻接矩阵,Mt
是转置矩阵,~M
是所有“位”反转的矩阵,A^B
是xor位两个矩阵之间的比特。
然后矩阵是锦标赛iff:
~(M^Mt) = I
答案 2 :(得分:2)
添加到tonfa的评论:
简要:算法“对于每个i≠j,检查(i,j)和(j,i)中的一个是否在图中”渐近最优。
更多细节: 只需读入邻接矩阵就可以得到Ω(n 2 )时间。所以在o(n 2 )时间内无法解决这个问题。但是让我们忽略输入。
假设矩阵已经在内存中。为了确保图的无向版本完整,您必须以某种方式确定,对于每个i≠j,至少有一个边(i,j)和(j,i)在图中。由于您只有邻接图,这意味着您必须在某个时刻访问每个i≠j的(i,j)或(j,i)中的至少一个。没有其他方法可以保证完整性。验证这将需要n(n + 1)/ 2 = O(n 2 )步骤。