具有固定边数的最短路径

2024-03-06

在高效的时间内找到通过图形的最短路径,并附加该路径必须完全包含的约束n nodes.

我们有一个有向加权图。它可能包含也可能不包含循环。我们可以使用 Dijkstra 算法轻松找到最短路径,但 Dijkstra 算法不保证边的数量。

我们能想到的最好的办法是保留一个节点的最佳 n 条路径的列表,但这比普通 Dijkstra 占用了大量的内存。


这是一种简单的动态规划算法。

让我们假设我们想要从顶点开始x到顶点y.

做一个表D[.,.], where D[v,k]是长度最短路径的成本k从起始顶点x到顶点v.

Initially D[x,1] = 0. Set D[v,1] = infinity for all v != x.
For k=2 to n:
  D[v,k] = min_u D[u,k-1] + wt(u,v), where we assume that wt(u,v) is infinite for missing edges. 
  P[v,k] = the u that gave us the above minimum.

最短路径的长度将存储在 D[y,n] 中。

如果我们有一个边较少的图(稀疏图),我们可以通过仅搜索来有效地做到这一点u that v连接到。这可以通过邻接列表数组来最佳地完成。

恢复最短路径:

Path = empty list
v = y
For k= n downto 1:
  Path.append(v)
  v = P[v,k]
Path.append(x)
Path.reverse()

最后一个节点是y。之前的节点是P[y,n]。我们可以一直向后追踪,最终会到达P[v,2] = x对于一些v.

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

具有固定边数的最短路径 的相关文章

  • 计算 Adamic-Adar 的快速算法

    我正在研究图形分析 我想计算一个 N N 相似度矩阵 其中包含每两个顶点之间的 Adamic Adar 相似度 为了概述 Adamic Adar 让我从以下介绍开始 给定邻接矩阵A无向图的G CN是两个顶点的所有公共邻居的集合x y 两个顶
  • Dijkstra 算法不生成最短路径?

    我正在使用 Dijkstra 算法解决最短路径问题 我遇到了麻烦 因为该算法应该提供最短路径 但运行该算法后 我手动得到了一条短路路径 这只是该算法的副产品吗 我尝试生成的路径是从 a gt z 这是我通过应用该算法得到的路径 在我访问的每
  • 为什么我的 Project Euler Problem 12 算法这么慢?

    我已经在 Scala 中为 PE P12 创建了解决方案 但速度非常非常慢 有人可以告诉我为什么吗 如何优化这个 calculateDevisors 简单的方法和calculateNumberOfDivisors 除数函数具有相同的速度 i
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 对矩阵进行舍入,保留行和列总计

    想要 以保留行和列总计的方式对矩阵进行舍入的 伪 代码 问题从向量开始 X and Y of 非负整数 with Sum X Sum Y 想要圆X Y Sum X 同时保留行和列总计 这是婚姻问题的一种 Xa需要进行一定次数的握手 拨打该号
  • PHP如何找到Web服务器的临时路径?

    当您处理 HTTP 上传时 文件将上传到 FILES field name tmp name 我知道我可以从那里提取临时路径 但我期待着也许 SERVER具有临时路径 没有 或其他优雅的方式来了解它的参数 有没有 ini get uploa
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 更合适地说插入未排序动态数组的摊销 O(1) 与 O(n) ?

    这属于 stackoverflow com help on topic 中的 软件算法 在本例中 是一种将项目添加到动态未排序数组的软件算法 This is chart we made in class about the runtimes
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 在 SVG 路径中动态创建渐变层

    我正在使用 SVG 创建动态路径 我现在希望在我的路径中添加渐变 但我被困住了 按照我尝试的方式 我的渐变沿着图 2 所示的路径进行 而我要求它是图 1 中的那种 Current 我的渐变和描边定义如下
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto

随机推荐

  • 如何使用 Jest 单元测试覆盖 TypeORM @Column 装饰器?

    我希望尽可能多地对我的应用程序进行单元和端到端测试 我的目标是覆盖率达到 101 我的设置现在的问题是 typeorm 的 Column 装饰器使用箭头函数来设置默认值 例如数据库更新的当前时间戳 这个箭头函数没有被玩笑测试覆盖 消息是 s
  • Vaadin 7 应用程序中推送的最小示例(“@Push”)

    我想看看使用新功能的最小示例推送技术 https vaadin com book vaadin7 page advanced push html在 Vaadin 7 中 例如新的 Push注解 我在获取时遇到问题服务器推送 http en
  • 两个不同的JSON源,不同时间更新;在 ng-Repeat 列表中使用结果

    我正在尝试从两个单独的 JSON 源创建状态列表 该列表将显示第一个来源的一般信息 并根据第二个来源的人数显示状态颜色 第一个源包含不会发生太大变化的一般数据 即提要名称 版本 描述 并且可能每天仅调用两次 请参阅下面的代码示例 元数据 d
  • Flexbox 列拉伸以适合内容[重复]

    这个问题在这里已经有答案了 各位开发人员大家好 我想创建一个允许内容从上到下 从左到右排列的容器 父容器需要拉伸以适应但在最大定义值之内 我为此目的使用了 flexbox 但是我没有让父容器拉伸以适应 有没有人有任何建议 而不必用 java
  • Karaf OSGi 中无法加载 ScriptEngineManager 和 ScriptEngine(未找到 Nashorn)

    我正在尝试使用ScriptEngineManager and ScriptEngine使用 Java 执行一些 JavaScript 代码 我使用 Java 8 在 Karaf OSGi 下执行此代码 我使用的示例在示例 Java 类中运行
  • MS Access 表:纠正 Zip_CD 字段中的非前导零

    我在休完长假后回到 Access 但遇到了一些困难 我有一个包含邮政编码字段的表 提供的某些邮政编码是 5 位数字 52186 有些是带有尾随社区代码的 10 位数字类型 77005 1568 然而 前导零尚未保留 我需要重新插入它们 例如
  • 画布消耗大量内存

    我在使用覆盖层打开的 Canvas 实现时遇到困难 canvas 元素宽 760px 高 2640px 我知道 别问 我每隔 27 5 像素高画一条线 ctx moveTo 0 y ctx lineTo 760 y ctx strokeSt
  • 使用非默认 AlgorithmIdentifier 解密 EnvelopedCms

    我正在尝试解密信封内容管理系统 https msdn microsoft com en us library system security cryptography pkcs envelopedcms v vs 110 aspx使用非默认
  • GCC 的 __attribute__((__packed__)) 是否保留原始顺序?

    Purpose 我正在用 C 编写一个网络程序 具体来说gnu89 我想通过重新解释某个特定的内容来简化事情struct X作为大字节数组 又名char 通过网络发送字节 并将它们重新解释为struct X另一方面 为此我决定使用 gcc
  • Laravel 密室未经身份验证

    我在我的项目中使用 Laravel sainttum 以 Angular 作为前端 第二个 api 请求未经身份验证 请让我知道我哪里出错了 前端 gt 127 0 0 1 4200 后端 gt 本地主机 8888 env 配置 SESSI
  • 处理空手道 UI 场景中的基本身份验证

    我刚刚开始实现空手道 UI v0 9 5 已经使用空手道实现了 api 测试 并且效果完美 遵循此页面上的 HTTP 基本身份验证策略 https github com intuit karate http basic authentica
  • 想要在运行 Cucumber 之前加载种子数据

    我希望黄瓜在开始测试之前将我的种子数据加载到 db seeds rb 中 不是在每个场景或功能之前 而是在运行测试之前仅一次 而且在每个场景之后 种子必须保留在数据库中 那可能吗 我尝试创建一个文件 features support see
  • 对于 MVC 4,Microsoft.AspNet.Mvc 和 System.Web.Mvc 之间有什么区别?

    我有自己的服务器 并且正在考虑将我的解决方案之一升级到 ASP NET MVC 4 然后再升级其余的 3 作为其中的一部分我下载了独立安装程序 http www microsoft com en us download details as
  • “ui-state-hover”效果的问题

    我有一个html div class portlet header a href class ui icon ui corner all ui state default span class ui icon ui icon minusth
  • 如何在 Emacs 中搜索第 n 次出现的模式?

    我正在尝试尽可能避免使用 elisp 我认为我能够在 Elisp 中实现我的问题的解决方案 但这不是我想要的 I am looking for the nth occurence of a string in a buffer For in
  • Vega-Lite:数据中的描边颜色值?

    在 Vega 中 可以从数据中获取颜色值 如下所示 维加的例子 https vega github io editor url vega N4KABGBEAkDODGALApgWwIaQFxUQFzwAdYsB6UgN2QHN0A6agSz
  • 在 config.py 中提供全局配置变量的最 Pythonic 方式? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我对过于复杂的简单事物的无尽追求中 我正在研究最 Pythonic 的方法来在典型的 配置文件 在 Python Egg 包中找到 传统方式
  • 如何备份每个表100行的数据库?

    我想备份包含所有对象和数据的 SQL Server 数据库 但所有表中的数据应限制为每个表 100 行 我可以在 mysql 中很容易地做到这一点 但在 SQL Server 中我不知道该怎么做 你不能真正使用显式的BACKUP DATAB
  • WAS 8.5,如何避免注释扫描?

    我们在WAS 8 5 0 0上部署一个Web应用程序 我们使用PARENT LAST类加载器 由于某种原因我们必须这样做 在启动过程中 有一些警告 12 16 14 17 19 15 088 CST 00000048 InjectionPr
  • 具有固定边数的最短路径

    在高效的时间内找到通过图形的最短路径 并附加该路径必须完全包含的约束n nodes 我们有一个有向加权图 它可能包含也可能不包含循环 我们可以使用 Dijkstra 算法轻松找到最短路径 但 Dijkstra 算法不保证边的数量 我们能想到