允许共享起始/结束顶点的定向最大加权二分匹配

2024-01-22

令 G (U u V, E) 为加权有向二分图(即 U 和 V 是二分图的两组节点,E 包含从 U 到 V 或从 V 到 U 的有向加权边)。这是一个例子:

在这种情况下:

U = {A,B,C} 
V = {D,E,F} 
E = {(A->E,7), (B->D,1), (C->E,3), (F->A,9)} 

定义: 定向匹配(我创造这个术语只是为了让事情更清楚):可能共享起始或结束顶点的有向边集。也就是说,如果 U->V 和 U'->V' 都属于定向匹配那么 V /= U' 且 V' /= U 但也可能是 U = U' 或 V = V'。

我的问题:如何高效寻找定向匹配,如上所定义,对于二部有向加权图,其边的权重之和最大化?

By 有效率的,我的意思是多项式复杂性或更快,我已经知道如何实现朴素的暴力方法。

在上面的例子中,最大权重定向匹配是:{F->A,C->E,B->D},值为 13。

正式证明这个问题与图论中任何其他众所周知的问题的等价性也很有价值。

Thanks!

Note 1:这个问题是基于与有向边的最大加权二分匹配 https://stackoverflow.com/questions/14824320/maximum-weighted-bipartite-matching-with-directed-edges但更加宽松的是,允许匹配中的边共享起点或目的地。由于放松会产生很大的影响,因此我创建了一个独立的问题。

Note 2:这是一个最大值weight匹配。基数(存在多少条边)和匹配覆盖的顶点数量与正确结果无关。只有最大重量才重要。

Note 2:在我研究解决问题的过程中,我发现了这篇论文,我认为这对其他试图找到解决方案的人会有所帮助:边缘颜色的交替循环和路径 多重图:一项调查 http://www.cs.rhul.ac.uk/~gutin/paperstsp/alt.pdf

Note 3:如果有帮助的话,您还可以将该图视为其等效的 2 边彩色无向二分多重图。那么问题的表述将变成:找到没有颜色交替路径或循环且权重总和最大的边集。

Note 4:我怀疑这个问题可能是 NP 难问题,但我在缩减方面没有那么丰富的经验,所以我还没有设法证明这一点。

另一个例子:

想象一下你有

4个顶点:{u1, u2} {v1, v2}

4 条边:{u1->v1, u1->v2, u2->v1, v2->u2}

然后,无论他们的体重如何,u1->v2 and v2->u2不能在同一个定向匹配, 也不能v2->u2 and u2->v1。然而u1->v1 and u1->v2可以,也可以u1->v1 and u2->v1.


定义一个新的无向图G' from G如下。

  1. G'有一个节点(A, B)有重量w对于每个有向边(A, B)有重量w in G
  2. G'有无向边((A, B),(B, C))如果 (A, B) 和 (B, C) 都是 G 中的有向边

http://en.wikipedia.org/wiki/Line_graph#Line_digraphs http://en.wikipedia.org/wiki/Line_graph#Line_digraphs

现在找到一个最大(加权)独立顶点集G'.

http://en.wikipedia.org/wiki/Vertex_independent_set http://en.wikipedia.org/wiki/Vertex_independent_set

编辑:此后的内容仅在所有边权重相同时才有效 - 当边权重具有不同值时,这是一个更困难的问题(谷歌“最大权重独立顶点集”以获取可能的算法)

通常这将是一个 NP 难题。然而,G'是一个二分图——它只包含偶数环。查找二分图中的最大(加权)独立顶点集是notNP-困难。

您将运行的算法G'如下。

  1. 找到以下的连通分量G', say H_1, H_2, ..., H_k
  2. 对于每个H_i对节点进行 2 种着色(例如红色和蓝色)。这里的食谱方法是进行深度优先搜索H_i交替颜色。一个简单的方法是将每个顶点着色H_i基于是否对应的边G来自U to V(红色)或来自V to U (blue).
  3. 用于选择节点的两个选项H_i要么是所有红色节点,要么是所有蓝色节点。选择权重较高的彩色节点集。例如,红色节点集的权重等于H_i.nodes.where(node => node.color == red).sum(node => node.w)。调用权重较高的节点集N_i.
  4. 您的最大加权独立顶点集现在是union(N_1, N_2, ..., N_k).

由于每个顶点在G'对应于有向边之一G,你就有了最大的DirectionalMatching。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许共享起始/结束顶点的定向最大加权二分匹配 的相关文章

  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 递归关系

    为什么递归阶乘算法的递推关系是这样的 T n 1 for n 0 T n 1 T n 1 for n gt 0 为什么不是这个呢 T n 1 for n 0 T n n T n 1 for n gt 0 输入 n 的值 即 1 2 3 4
  • 用于计算井字游戏独特状态的高效算法

    我正在尝试构建一个井字游戏来演示和实验机器学习算法 并且我发现了一个有趣的问题 例如 井字棋板可以是mirrored 但出于机器学习的目的 这两种状态是等效的 x o o x o o x x o o 同样地旋转 x o x o o o x
  • 如何快速计算集合的所有交集的包含顺序

    这是后续如何在python中快速获取集合的所有交集 https stackoverflow com questions 37622153 我有一个整数有限集合 Ai 的有限集合 A A1 Ak 我想计算Python下列 A 子集的所有交集
  • 如何避免动态图中的“堆指针意大利面条”?

    一般问题 假设您正在编写一个由图组成的系统 以及可以根据相邻节点的配置激活的图重写规则 也就是说 您有一个在运行时不可预测地增长 收缩的动态图 如果你天真地使用malloc 新节点将被分配在内存中的随机位置 经过足够的时间 你的堆将变成一个
  • 解释暴力算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 产生独特的价值

    我想创建一个C程序生成 0 到 999999 之间的数字 请记住生成的数字不应包含任何重复的数字 例如 123 是一个可接受的值 但不是 121 as the 1 被重复 我已经找到了其他程序代码来检查整数是否有重复的数字 检查整数是否有重
  • Java 中的递归回溯解决填字游戏

    我需要在给定初始网格和单词的情况下解决填字游戏 单词可以多次使用或根本不使用 初始网格如下所示 这是一个单词列表示例 pain nice pal id 任务是填充占位符 水平或垂直长度 gt 1 像那样 p pain pal id i c
  • 理解 Haskell 中的矩阵转置函数

    这个矩阵转置函数有效 但我试图理解它的逐步执行 但我不明白 transpose a gt a transpose transpose x map head x transpose map tail x with transpose 1 2
  • Java - 哪个是 Graph 的最佳实现结构?

    图很大但是无向 边缘未加权 在我的实现中 我必须找到具有最大度数的顶点并在顶点和边上进行删除 链接列表 数组列表 地图 哪一种更适合我的实施 表示图的两个基本数据结构是 adjacency list the adjacency matrix
  • 对堆排序有一个直观的理解吗?

    在学校 我们目前正在学习 Java 排序算法 我的作业是堆排序 我读了书 试图尽可能多地了解 但似乎我无法理解这个概念 我并不是要求您为我编写一个 Java 程序 只要您能尽可能简单地向我解释堆排序的工作原理即可 是的 所以基本上你拿一个堆
  • 如何用 Java 为 2D 游戏构建 Tiled 地图?

    不知道如何解决这个问题 基本上 我想要 400x400 窗口的 Pixel gt Tile 表示 屏幕上的每个坐标 例如120x300应该是图块的一部分 我最小的精灵是 4 个像素 所以我们可以说 1 个图块 4 个像素 玩家和敌人精灵都是
  • 用于反恶意软件代码的类 Aho-Corasick 算法

    有没有类似的算法阿霍 科拉西克 http en wikipedia org wiki Aho E2 80 93Corasick string matching algorithm 它可以同时匹配一组模式并适用于反恶意软件比较 所有已知的商业
  • 以有效的方式找到最近点

    我在 2d 平面上有一个点 例如 x0 y0 和一组 n 点 x1 y1 xn yn 我想在 a 中找到距离 x0 y0 最近的点比尝试所有要点要好得多 有什么解决办法吗 我还应该说我的观点是这样排序的 bool less point a
  • 在 O(nloglogn) 最坏情况时间内对具有 O(logn) 个不同元素的 n 元素数组进行排序

    目前的问题是标题本身的内容 即给出一种算法 该算法在 O log logn 最坏情况时间内对具有 O log n 个不同元素的 n 元素数组进行排序 有任何想法吗 此外 您通常如何处理具有多个非不同元素的数组 O 日志 日志 n 时间足以让
  • ZedGraph 垂直线与 LineObj 问题

    我有一个 ZedGraphControl 里面有几条曲线 我想在一些固定的 x 位置添加垂直线 当然 这些线只能位于实际图形区域内 我尝试以下 LineObj line new LineObj Color Black xPos myPane
  • 如何读取未知数量的输入?

    我正在使用 C Primer 这本书学习 C In 第1 4 3节 给出了以下关于读取未知数量的输入的示例代码 include
  • 带回溯的 Dijkstra 算法?

    In a 相关主题 https stackoverflow com questions 28333756 finding most efficient path between two nodes in an interval graph
  • 天气预报算法多样

    目前 英国气象局的预测引发了一场巨大的 风暴 他们预测冬季将是温和 潮湿的冬季 而北爱尔兰的气温却是有记录以来最冷的 地面上有厚厚的积雪 这在 12 月通常很少见 这是我很想尝试的东西 并不是我声称我可以击败他们 而是想知道人们目前正在使用

随机推荐