最短路径算法的一种变体

2023-12-20

我们给定一个带权无向图,具有两个源顶点和两个目标顶点(例如 s1、s2、d1、d2)。 对于从源 1 到目的地 1 以及从源 2 到目的地 2 的成本定义为:

  • 如果仅使用两条路径之一,则使用一条边的成本等于权重。
  • 如果两条路径(s1->..->d1 和 s2->..->d2)都使用该边,则使用该边的成本等于权重的 1.5 倍。

总之,如果两条路径使用相同的边,则总成本会增加“1.5 x 权重”而不是“2 x 权重”。鼓励使用公共边缘。

如果路径使用方向相反的边,则不会降低成本。

对于确定最小化总成本的算法有什么帮助、想法或建议吗?


我建议首先使用以下方法找到所有对的最短路径弗洛伊德·沃歇尔 http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm时间为 O(n^3),其中 n 是顶点数。

一旦你有了它,你就可以计算沿着最短路径 s1->d1 和 s2->d2 的成本,这给你一个成本的上限。

做得更好的唯一方法是使用共享路径。如果是这样,那么 s1 和 s2 将在顶点 A 处汇聚,然后沿着共享路径到达顶点 B,然后分裂到 d1 和 d2。

因此该算法是尝试所有顶点对 A,B 并使用预先计算的对 d(x,y) 之间的最短路径计算以下值的最小值:

d(s1,A)+d(s2,A)+1.5*d(A,B)+d(B,d1)+d(B,d2)

此搜索的时间为 O(n^2),因此总体成本为 O(n^2)+O(n^3) = O(n^3)

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

最短路径算法的一种变体 的相关文章

  • 如何在大空间尺度上加速A*算法?

    From http ccl northwestern edu netlogo models community Astardemo http ccl northwestern edu netlogo models community Ast
  • 计算机如何评估巨大的数字?

    例如 如果我输入一个值 1234567 98787878 Wolfram Alpha 可以为我提供许多细节 这包括小数近似 总长度 最后一位数字等等 您如何评估如此大的数字 据我了解 编程语言必须具有特殊的数据类型才能存储数字 更不用说将其
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 找到将一个数字转换为另一个数字的最小移动次数的算法

    假设我们有两个正整数 a 和 b 每次移动我们都可以将 a 除以 2 但前提是 a 是偶数 将 a 乘以 2 或者将 a 加 1 将a变为b需要多少步 找到一个直接公式或一种有效的算法 即以对数时间运行的算法 我取得的一些进展 我们可以把它
  • iOS绘图3D图形库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在搜索一个可以帮助我绘制 3D 图表的库 我想要类似的东西这一页 http www math uri edu bkaskosz fla
  • 哪种编程语言或库可以处理无限级数?

    哪种编程语言或库能够处理无限级数 例如几何级数或调和级数 它可能必须有一些众所周知的系列的数据库 并在收敛的情况下自动给出适当的值 并且可能在发散的情况下生成异常 例如 在 Python 中 它可能如下所示 sum 0 sign 1 0 f
  • Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

    我正在用 C 编写一个计算器 textBoxResult是一个文本框 我在其中显示数字 recount是以度为单位获取角度并以弧度为单位返回的函数 我的角度是从texBoxInput public double recount int nu
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • 如何使用NSDecimalNumber?

    我正在构建一个需要对金钱进行计算的应用程序 我想知道如何正确使用 NSDecimalNumber 特别是如何从整数 浮点数和双精度数初始化它 我只发现它很容易使用 decimalNumberWithString 方法 这 initWith
  • 二分查找问题? [复制]

    这个问题在这里已经有答案了 可能的重复 实施二分查找有哪些陷阱 https stackoverflow com questions 504335 what are the pitfalls in implementing binary se
  • 期望最大化算法的数值示例[重复]

    这个问题在这里已经有答案了 由于我不确定给出的公式 有人可以提供 EM 算法的简单数字示例吗 一个非常简单的具有 4 或 5 个笛卡尔坐标的坐标就可以了 那这个呢 http en wikibooks org wiki Data Mining
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • ValueError:数学域错误,不断弹出

    我时常收到此消息 我尝试了所有的变化 改变我使用 sqrt 的方式 一步一步地做 等等 但这个错误仍然不断出现 这可能是一个菜鸟错误 我没有注意到 因为我是 python 和 ubuntu 的新手 这是我的源代码 一个非常简单的程序 To
  • 如何将数学公式转换为Python代码?

    有没有简单的方法可以将数学公式转换为 Python 代码 也许是译者 网络参考 具体的书籍章节 任何东西 对于正则表达式 有诸如Kodos http kodos sourceforge net 和网站 例如pythonregex com h
  • 以编程方式分解大量数字

    好吧 所以我有一个巨大的数字f 实际上 这个数字只有 100 多位数字长 我知道这些因子的大小大致相同 如果我的资源和时间有限 我应该使用什么语言和算法 我包括在限制时间内编写算法的时间长度 想法 编辑 我所说的有限是指在尽可能短的时间内
  • 求解整数线性规划:为什么求解器声称可解实例不可行?

    我正在尝试解决整数规划问题 我已经尝试过两种用途SCIP http scip zib de and LPSolve http lpsolve sourceforge net 5 5 例如 给定 A 和 B 的最终值 我想在以下 C 代码中求
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4

随机推荐

  • %运行另一个笔记本时 Jupyter 中出现编码错误

    我在 Jupyter 笔记本中使用西里尔字母符号 在 NoteBook 1 中 我运行 NoteBook 2 run NB2 ipynb 在 NoteBook 2 中 我写入了一些 txt 文件 TestText open C TRASH
  • Dart 中的动态和对象有什么区别?

    它们看起来都可以在相同的情况下使用 类型检查等方面是否有不同的表示或不同的微妙之处 编辑以更新空安全 使用Object 代替Object 另一种观点dynamic它并不是真正的类型 它是一种关闭类型检查并告诉静态类型系统 相信我 我知道我在
  • Django 如何在更新用户时发送 post_save 信号?

    阅读文档后 https docs djangoproject com en dev topics signals https docs djangoproject com en dev topics signals 我在我的 signal
  • 为什么我在序言中找不到斑马谜题的答案?

    这是我目前的代码 我正在尝试解决斑马拼图 http en wikipedia org wiki Zebra Puzzle exists A A exists A A exists A A exists A A exists A A righ
  • bash: ./helloworld_s: 没有这样的文件或目录。文件明明就在那里

    我对 bash 并不陌生 但这是我第一次看到这种情况发生 OP localhost linking ls helloworld lib o helloworld lib s helloworld s OP localhost linking
  • 如果操作栏/工具栏为白色,菜单项上不会出现波纹

    我有白色工具栏 其中菜单项显示为操作 该操作是来自材质图标的黑色矢量资源 单击菜单项时没有波纹效果 因为波纹效果也是白色的 如果工具栏背景更改为其他颜色 例如蓝色 则会出现波纹 如何更改菜单项波纹颜色 使其在白色背景上可见 我试图改变颜色控
  • 在 JavaScript 中创建 XML

    是否可以使用 JavaScript 中的一些数据创建 XML 文件 我将数据存储在变量中 我用谷歌搜索了一下 似乎没有讨论太多 我以为我可以用XMLWriter比如这样 var XML new XMLWriter XML BeginNode
  • 从 cfc 返回多个存储过程结果集

    我正在尝试将应用程序中的某些页面转换为使用 cfc 其中一个页面使用存储过程来检索几组数据 现在 当我访问结果时 它们的行为就像我使用了
  • C 或 C++ 中的边界检查开销大吗?

    绑定检查很昂贵 gt x2 倍运行时开销 以上这一点是我从我的一位教授那里得到的 我对此很困惑 据我所知 程序中最耗时的部分是IO 来自网络和硬盘 但是 C 或 C 中的边界检查并不总是与这两个输入源相关 例如 我在 C 中使用以下命令将一
  • 如何检测代码正在 eclipse IDE 中运行

    如何检测代码正在 eclipse IDE 中运行 我不知道获取此类信息的通用方法 一个建议 当您在 Tomcat 中启动 Java 程序 或 Web 服务器 时 只需添加一个参数来指示该程序是由 Eclipse 启动的 您可以通过打开 打开
  • 在mongodb中使用findOne获取具有最大id的元素

    我正在尝试从 mongo 集合中检索一个元素 即具有最大 id 字段的元素 我知道这可以通过查询来完成 db collection find sort id 1 limit 1 但这看起来有点不优雅 我想知道是否有办法使用 findOne
  • 如何生成 OpenOffice Draw 文档?

    我想在 OpenOffice Draw 中创建流程图 由于有很多步骤要显示 并且将来可能会更改 但我可以提取数据 因此我想通过以下步骤自动创建 使用指定的页面设置创建新的 ODG 文档 插入具有指定属性的流程图形状 用箭头连接这些东西 理想
  • Windows 服务器上的自托管远程 git 存储库

    我们的本地网络上有一台计算机 被指定为 服务器 运行 Windows XP 我们在其中保存共享文件夹和所有人都应该可见的内容 如何在其上创建远程 Git 存储库 并对其进行设置 以便本地网络上不同计算机上的不同人可以拉 推 我不在乎使用哪种
  • wince 6.0 c# 中的全屏应用程序

    我有我的应用程序 希望使其以全屏模式运行 没有任务栏 我找到了如何隐藏窗口栏 但是当我启动应用程序时 它并没有覆盖窗口任务栏的空间 尽管最后一个是隐藏的 我找到了这个 https stackoverflow com questions 50
  • struts 配置文件中定义的跨不同包的全局结果

    我想创建一个global results跨不同名称空间下的不同包 我可以知道 struts 配置文件中需要遵循的约定吗 在其他包扩展的包中定义全局结果 例如
  • 在使用 MapWhen 进行分支时注册中间件,以便仅针对一组端点运行它

    我需要为所有端点运行两个中间件 但 accounts 下的端点除外 我在配置服务中使用它 public void ConfigureServices IServiceCollection services services AddContr
  • 为什么 Testflight 的崩溃日志在 Xcode 中没有符号化?

    我刚刚开始从 Testflights 获取我正在开发的预发布应用程序的崩溃报告 但无论出于何种原因 Xcode 都无法正确地表示日志 构建可用 在该版本的 Xcode 中在此计算机上构建 存档和上传 那么我在这里缺少什么 为什么这些崩溃日志
  • FreeBSD 作为一个开发平台有多好?

    我知道很多网络托管提供商都提供 FreeBSD 但是 FreeBSD 作为开发平台有多好呢 具体来说 Java 1 6可以用吗 它是否提供了一些 Linux 下不可用的特定工具 我一直认为 FreeBSD 是一个美妙的安全托管环境 但也许不
  • 为什么 Next.js 自定义服务器禁用自动静态优化?

    我无法理解为什么在文档中 https nextjs org docs advanced features custom server据说拥有自定义服务器会禁用自动静态优化 https nextjs org docs advanced fea
  • 最短路径算法的一种变体

    我们给定一个带权无向图 具有两个源顶点和两个目标顶点 例如 s1 s2 d1 d2 对于从源 1 到目的地 1 以及从源 2 到目的地 2 的成本定义为 如果仅使用两条路径之一 则使用一条边的成本等于权重 如果两条路径 s1 gt gt d