具有固定边数的最短路径

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(使用前将#替换为@)

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

  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我
  • 求任意节点到一个节点的最小公共路径

    我的问题如下 我有一个 backup 节点和其他节点 从这些节点 我需要生成一个到备份节点的最小公共路径 未加权和无向图 我不需要每次都需要解决方案 我如何知道我是否可以生成这条路径 我正在考虑将图分成一些子图并搜索最小的 subpath
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • C# 获取资源文件夹路径

    我的项目中的一些资源很好 并且使用字符串路径可以正常工作 但是如果我将项目移动到另一个目录或另一台计算机 它将停止工作 请我需要在字符串变量中获取项目资源文件夹的路径 像这样的东西 C Users User1 Documents
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 如何在 Jenkins 声明式管道中设置 PATH

    在 Jenkins 脚本化管道中 您可以像这样设置 PATH 环境变量 node git url https github com jglick simple maven project with tests git withEnv PAT
  • 找到一条穿过任意节点序列的最短路径?

    In 这个先前的问题 https stackoverflow com questions 7314333 find shortest path from vertex u to v passing through a vertex wOP询
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 实施二分查找有哪些陷阱? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 二分查找比看起来更难实现 虽然二分搜索的基本思想相对简单 但细节可能出人意料地棘手 Donald Knuth 新的二分搜索实现中最有可
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高

随机推荐

  • 如何使用 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 算法不保证边的数量 我们能想到