最短的两条不相交路径;两个来源和两个目的地

2023-11-25

We're given an unweighted undirected graph G = (V, E) where |V| <= 40,000 and |E| <= 106. We're also given four vertices a, b, a', b'. Is there a way to find two node-disjoint paths a -> a' and b -> b' such that the sum of their lengths is minimum?
My first thought was to first find the shortest path a -> a', delete it from the graph, and then find the shortest path b -> b'. I don't think this greedy approach would work.

Note:在整个申请过程中,a and b是固定的,同时a' and b'每次查询都会发生变化,因此使用预计算来提供高效查询的解决方案将是更好的选择。另请注意,仅需要最小长度总和,而不是实际路径。

任何帮助、想法或建议将不胜感激。预先非常感谢!


这可以简化为最短边不相交路径问题:

  1. (可选)将图中的所有链折叠成单边。这会产生一个较小的加权图(如果原始图中存在任何链)。
  2. 通过用一对有向边替换每条边,将无向图转换为有向图。
  3. 将每个节点拆分为一对节点:一个仅具有原始节点的传入边,另一个仅具有其传出边。使用单个有向边连接每对节点。 (例如,节点c下图中应分为c1 and c2;现在每个路径都包含节点c原图中应该穿过边c1 -> c2在变换后的图中;这里x and y表示图中除节点外的所有节点c).

enter image description here enter image description here enter image description here

Now if a = b or a' = b',你会遇到与你的问题完全相同的问题上一个问题(这是最小成本流问题可以通过为每条边分配等于 1 的流容量,然后搜索 a 和 b 之间的最小成本流(其中 flow=2)来解决。如果a != b,您只需创建一个公共源节点并将两者连接起来a and b到它。如果a' != b',对公共目标节点执行相同的操作。

But if a != b and a' != b',最小成本流问题不适用。相反,这个问题可以解决为多商品流通问题.


我之前的(错误的)解决方案是连接两对(a, b) and (a', b')到公共源/目标节点,然后找到最小成本流。下图是这种方法的反例:

enter image description here

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

最短的两条不相交路径;两个来源和两个目的地 的相关文章

  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 我正在尝试寻找“调酒师算法”

    我正在解决旧编程竞赛中的一些示例问题 在这个问题中 我们输入了我们有多少调酒师以及他们知道哪种配方 每杯鸡尾酒的制作时间为 1 分钟 我们需要计算是否可以在 5 分钟内使用所有调酒师完成订单 解决这个问题的关键是尽可能高效地分配鸡尾酒 这就
  • C++ Exp 与 Log:哪个更快?

    我有一个 C 应用程序 需要比较两个值并决定哪个值更大 唯一的复杂之处是一个数字在对数空间中表示 而另一个则不是 例如 double log num 1 log 1 23 double num 2 1 24 如果我想比较num 1 and
  • 将 z 分数转换为百分比的函数

    谷歌不想提供帮助 我能够计算 z 分数 并且我们正在尝试生成一个函数 给定 z 分数 可以得出正态分布中低于该 z 分数的人口百分比 我能找到的只是对百分比表的 z 分数的引用 有什么指点吗 Is it 这个 z 分数 链接 http en
  • 如何优化分割重叠范围?

    我编写的这个 Python 脚本用于将重叠范围拆分为唯一范围 最后一次迭代 https codereview stackexchange com questions 285932 python script to split overlap
  • ORTOOLS 中的多个 MILP 解决方案 [python]

    我正在尝试使用 Python 中的 or tools 来解决具有多个最佳解决方案的混合整数线性程序 然而 NextSolution 总是返回False 所以我无法检索多个解决方案 我知道这个函数使用约束求解器工作 但我想使用 MILP 求解
  • 依赖解析算法

    我正在编写一个包管理器 为此我希望依赖项解析尽可能强大 每个包都有一个版本列表 每个版本包含以下信息 具有可比性的 ID 依赖关系 软件包列表以及每个软件包的一组可接受的版本 冲突 软件包列表以及每个软件包的一组与该版本一起导致问题的版本
  • 是否有 java.lang.String 的内存高效替代品?

    看完之后这篇旧文章 http www javaworld com javaworld javatips jw javatip130 html page 2测量几种对象类型的内存消耗 我惊讶地发现有多少内存String在Java中的使用 le
  • java数学中的组合“N选择R”?

    java库中是否有内置方法可以为任何N R计算 N选择R 公式 实际上很容易计算N choose K甚至不需要计算阶乘 我们知道 公式为 N choose K is N N K K 因此 公式为 N choose K 1 is N N N
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 在矩阵/位图中查找质量簇

    这是此处发布的问题的延续 在 2D 位图上查找质心 https stackoverflow com questions 408358 finding the center of mass on a 2d bitmap正如给出的例子 它讨论了
  • 如何将Excel中的每个条目转换为一行“矩阵”表

    我有类似的东西 1 2 3 a x o x b x x o c o o o 并想将其转换成像这样的线 1 a x 1 b x 1 c x 2 a o 2 b x 2 c o 3 a x 3 b o 3 c o 通过使用Excel文档中的公式
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 优化大数据读写(C++)

    我正在寻求优化 C 模拟应用程序的读取 写入大量数据 称为 映射 的数据本质上由整数 双精度数 浮点数和单个枚举组成 该地图数据的大部分大小是固定的 但一小部分可能会变化 从几KB到几KB 大小 几个这样的映射 通常是数百万个 在应用程序启
  • 是什么导致 Java(冰雹序列)在我的程序中崩溃

    我制作了一个执行 通常称为 冰雹序列的程序 该程序基本上执行以下操作 创建一个int 值 并为其分配一个值 如果 int 是偶数 则将其除以二 如果 int 为奇数 则将其乘以三并加一 继续这个过程 直到 n 等于 1 它似乎适用于大多数数
  • 计算元组中与模式匹配的元素

    我有一个矩阵m我想计算零的数量 m 2 0 2 2 4 4 5 4 0 9 4 8 2 2 0 0 我当前的代码如下 def zeroCount M return item for row in M for item in row coun
  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 二部图匹配以匹配两个集合

    我是新手igraphR 中的包 我有两套A and B 每个都有N顶点 A1 A2 AN and B1 B2 BN 每个元素之间都有一个边缘A对每一个元素B 我有一个函数fWgt Ai Bj 返回之间的边的权重Ai and Bj 我一直在尝

随机推荐

  • 将向量值相乘的最简单方法?

    我有一个愚蠢的问题 大约 10 年前 我上了一堂向量数学课 我发誓我记得一个可以让我将向量的值相乘的运算 如下所示 Vector3 v1 new Vector3 1 0 2 Vector3 v2 new Vector3 5 5 5 Vect
  • GCC 的调试堆/STL 调试等效吗?

    我计划更多地使用 GCC Linux 和 Windows 我想知道是否有相当于 MSVC 的工具调试堆和STL检查适用于 GCC CRT 和 STL 我已经了解 Valgrind 等工具 但我正在寻找库中内置的东西 我不太熟悉调试堆和 ST
  • PHP preg_match 仅返回第一个匹配项

    第一个问题是这样的 我在用http www phpliveregex com 检查我的正则表达式是否正确 它找到多个匹配行 我正在做这个正则表达式 lines explode n text foreach lines as line mat
  • hive 中的分区列

    我必须对表进行分区hive有一列也是表的一部分 For eg Table 员工 Columns 员工 ID 员工姓名 员工工资 我必须使用employeeSalary 对表进行分区 所以我写了以下查询 CREATE TABLE employ
  • 我可以用代码替换 jaxb.properties 吗?

    我正在使用一些非标准扩展来自 EclipseLink 的 JAXB 实现 为了启用该实现 我必须使用 jaxb properties 来配置它 效果很好 然而 由于构建错误 属性文件没有包含在正确的位置 导致使用默认的 JAXB 它没有任何
  • sqlalchemy 和 postgresql 自动增量

    我创建了一个带有主键和序列的表 但通过调试广告稍后查看表设计 序列并未应用 只是创建 from sqlalchemy import create engine MetaData Table Column Integer String Boo
  • 如何在 ConEmu + Git Bash 中正确启用 ANSI 颜色?

    我在用着Git Bash with ConEmu让它看起来很酷 然而 在安装 Composer 后 颜色似乎被转义了 所以 Git Bash 并不支持所有颜色 检查 AnsiColors256 ans 文件 经过大量谷歌搜索后 我仍然没有找
  • sizeof(enum) == sizeof(int) 总是吗?

    sizeof enum sizeof int 总是吗 或者它依赖于编译器 这是错误的说法吗 因为编译器针对字长 内存对齐 进行了优化 即 y int 是特定编译器上的字大小 这是否意味着如果我使用枚举 就不会产生处理惩罚 因为它们是字对齐的
  • 用 Python 绘制随机过程

    假设我有一个随机过程定义在 0 N e g N 50 对于每个位置 我都有几个样本 例如m 100样本 代表我在每个位置的抽样分布 看待这个问题的一种方法是将其视为大小的 numpy 2D 数组 m N 我怎样才能直观地绘制出这个matpl
  • mongoDB。读取,根据oplog搜索时间戳

    gt db oplog rs find ts 1 sort natural 1 ts Timestamp 1406185666 1 ts Timestamp 1406180043 1 ts Timestamp 1406180033 1 ts
  • Flutter Doctor 在可执行文件中给出错误的 Cpu 类型

    我正在使用 Mac mini MacOs monterey 和 m1 芯片 当尝试设置颤振时 出现错误 命令 颤动医生 o p Users admin Desktop flutter bin internal shared sh 第229行
  • 文件“docker.sock”的用途是什么?

    我试图了解安装的实际原因docker sock in docker compose yml文件 是为了自动发现吗 volumes var run docker sock var run docker sock docker sock是 Do
  • Npgsql 与实体框架集成 Code First

    我有一个项目使用最新版本的 EF CF 以及 PostgreSQL 和 Npgsql 我的模型看起来像 Table mytable public class MyTable Column id public int Id get set C
  • 我应该始终返回 IEnumerable 而不是 IList 吗?

    当我编写返回一组项目的 DAL 或其他代码时 我是否应该始终使用 return 语句 public IEnumerable
  • 在 mutate 中使用引号:mutate_(.dots = ...) 的替代方案

    我想将不同的函数应用于小标题中的同一列 这些函数存储在字符串中 我曾经这样做过mutate 和 dots像这样的论点 library dplyr myfuns lt c f1 a 2 f2 exp a f3 sqrt a tibble a
  • 正则表达式搜索引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有没有一个搜索引擎可以让我通过正则表达式进行搜索 谷歌代码搜索允许您使用正则表达式进行搜索 据我所知 不存在这样的用于一般搜索的搜索引擎
  • 删除所有内容但保持匹配

    如果我有一个很大的文本 并且我需要仅保留匹配的内容 我该怎么做 例如 如果我有这样的文本 asdas8Isd8m8Td8r asdia8y8dasd asd8is88n8gd asd8t8od8lsdas as9ea9ad8r1n88r8e
  • 如何在 Swift 中为 UIImageView 对象分配一个操作

    我正在尝试分配一个UIImageView当用户点击它时执行操作 我知道如何为UIButton 但是我怎么能模仿一个人的相同行为呢 UIButton 但使用UIImageView 你需要一个UITapGestureRecognizer 要设置
  • 正则表达式匹配重复字符

    我正在尝试创建一个匹配字符串的正则表达式 如果该字符串连续有 3 个或更多重复字符 例如 aaaaaa testtttttt otttttter 我已经尝试过以下方法 regexp Compile A Za z0 9 3 regexp Co
  • 最短的两条不相交路径;两个来源和两个目的地

    We re given an unweighted undirected graph G V E where V lt 40 000 and E lt 106 We re also given four vertices a b a b I