algorithm - 用于在具有以下属性的无向图中查找三色三角形的分而治之算法?

标签 algorithm computer-science graph-theory graph-algorithm divide-and-conquer

在无向图 G=(V,E) 中,顶点的颜色为红色、黄色或绿色。此外,存在一种将图划分为两个子集的方法,使得 |V1|=|V2|或 |V1|=|V2|+1,其中适用以下条件:要么 V1 的每个顶点都连接到 V2 的每个顶点,要么没有 V1 的顶点连接到 V2 的顶点。这递归地适用于 V1 和 V2 的所有导出子图

我可以通过将邻接矩阵与自身相乘三次并逐步增加与主对角线的非零项对应的节点来找到图中的所有三角形。然后我可以查看三角形的节点是否以正确的方式着色。 O(n^~2,8)!但是鉴于图形的独特属性,我想找到一个使用分而治之的解决方案来找到彩色三角形。 这是具有给定属性的示例图。我需要找到粗体三角形: this is an example graph with the given properties. I need to find the bold triangle 蓝色框表示分区完全连接,紫色框表示分区之间没有连接

最佳答案

它可以在 O(E*V) 中完成,而无需使用分区属性。 首先删除两个顶点上所有颜色相同的边,这可以在 O(E) 中完成。 在修改后的图 G' 中,每个三角形都是一个三色三角形。 查找图中的三角形:

for each edge e(u,v):
    for each vertex w:
        if e(v,w) and e(u,w) in G':
            add (u,v,w) to triangle list

如果保留邻接表和邻接矩阵,则可以通过仅检查 v 的邻接表中的 w 来缩短内循环的时间。 在这种情况下,复杂度为 O(E * max(deg(v))

关于algorithm - 用于在具有以下属性的无向图中查找三色三角形的分而治之算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405737/

相关文章:

python - 对我来说渲染(或以任何方式以图形方式表示)邻接矩阵的最简单方法是什么

algorithm - 一个有趣的图形任务

algorithm - 二维格上的字符串匹配

computer-science - 我正在学习 CS 类(class)。我应该关注什么编程主题?

python - 为 GCSE 编写伪代码算法

computer-science - 规则引擎与专家系统

python - 在 scipy.spatial.Delaunay python 中找到一个点是其一部分的所有单纯形

algorithm - 如何找到环绕的两个数字的平均值?

python - 在 Python 中进行 Introsort,有人可以指出我的错误吗?

arrays - 对两个数组进行排序所需的最小 "swaps"数