路径查找算法:A* 与跳跃点搜索

2023-12-27

我知道 A* 比 Dijkstra 算法更好,因为它考虑了启发式值,但是从 A* 和跳跃点搜索来看,哪种算法是在有障碍物的环境中找到最短路径的最有效算法?有何不同?


跳跃点搜索是基于图表上的某些条件的改进的 A*。因此,如果满足这些条件(主要是统一成本网格),JPS 严格优于 A*(相同的最优性,最好的情况可以好几个数量级,最坏的情况可能具有相同的复杂性,但具有 稍微差一点的常数),但是如果不满足条件,就不能使用它。

JPS相对于A*的改进基本上是,如果你有一个具有统一成本函数的图(从A到B和从B到C的成本相同,方向相同),你可以在某些方面跳过一些步骤情况下,直接从A到C,而不扩展B中的节点。

JPS 是一种针对 A* 的修剪技术,您可以删除不需要评估的情况,因为您知道它们不是最优的。您知道这一点是因为统一成本网格条件。
从概念上讲,这相当于在非均匀网格上使用 A*,其中相邻节点表示在不遇到障碍的情况下您可以沿该方向走多远,以及执行跳跃的成本。因此,如果您可以在没有遇到障碍物的情况下向右移动 10 个节点,则可以以 10*c 的成本减少(或直接跳转到)单个节点,其中 c 是从一个节点到另一个在右边。

原论文可以找到here. http://users.cecs.anu.edu.au/~dharabor/data/papers/harabor-grastien-aaai11.pdf

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

路径查找算法:A* 与跳跃点搜索 的相关文章

  • 二进制字符串到十进制字符串

    下午好 如何将字符数多于语言最大整数类型中位数的二进制字符串转换为十进制字符串 换句话说 假设你有字符串 111001101001110100100 1001001111011100100 并且您不能先将其转换为整数 那么您将如何以 10
  • Java:使用indexOf方法根据另一个数组对数组进行排序

    我想根据另一个数组 索引 的排序顺序迭代两个数组 A B 在本例中为 10 34 32 21 String A a b c d String B e f g h int indexes 10 34 32 21 为这里的坏例子道歉 我已经更新
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 用于插入/删除/排名/选择查询的最佳数据结构/算法

    到目前为止 我知道像AVL树和红黑树这样的自平衡BST可以在O log n 次内完成这些操作 然而 要使用这些结构 我们必须自己实现AVL树或RB树 我听说有一个算法 实现这四个操作而不使用自平衡 BST 有了我们自己定义的结构 我们就需要
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 使到 n 个点的集合的欧氏距离之和最小的点

    我有一组点W x1 y1 x2 y2 xn yn 在 2D 平面上 你能找到一种算法 将这些点作为输入并返回一个点 x y 在 2D 平面上 距以下点的距离之和最小W 换句话说 如果 di Euclidean distance x y xi
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上

随机推荐

  • 未命名模块通过 ServiceLoader::load 与命名模块交互

    我有一个这样的项目 main src com foo UnnamedStart java api src com foo api ApiInterface java module info java impl src com foo imp
  • 最佳实践——实体本身内部的 Hibernate 持久化代码?

    在谷歌的RequestFactory教程中 他们建议将我的持久性逻辑 在我的例子中是 Hibernate 放入实体类中 然后他们提出问题 如果您不想在实体本身中实现持久性代码怎么办 并继续解释另一种方法 我的问题 将持久性逻辑放在实体类中
  • 如何在 WinForms 中从 app.config 读取 AppSettings

    我通常使用文本文件作为配置 但这次我想利用 app config 将文件名 键 与名称 值 关联起来 并使名称在组合框中可用
  • NebulaGraph 中标签字符串的最大长度是多少?

    我正在使用Nebula Graph数据库 我想插入一个字符串类型的顶点 你知道标签字符串的最大长度吗 string类型的属性值没有限制 但查询的最大长度限制为4MB 如果是通过insert语句插入的话 string对应的属性字段不能超过这个
  • 检查按钮在 espresso 测试、android studio 中是否可点击

    我正在编写测试来确定特定按钮不可单击或可单击 然而 在我看来 没有任何方法 或者我找不到可以使用 Espresso 检查此功能的方法 谁能帮我 谢谢 为什么不 您可以使用 isClickable 匹配器 onView withId R id
  • Eclipse AutoValue 类无法构建

    我正在运行 Eclipse Kepler SR2 其中 Maven 3 1 1 附加有 m2e 和 m2e apt 插件 但我收到一个错误 我不知道如何解决 我设法找到了获得所需的所有依赖项 AutoValue https github c
  • 快速使用 NSData

    所以我已经弄清楚如何快速提取 NSData 但我对设置它感到困惑 var testBytes Byte 0x14 0x00 0xAB 0x45 0x49 0x1F 0xEF 0x15 0xA8 0x89 0x78 0x0F 0x09 0xA
  • 如何在 AWS Lambda 上创建 EC2 时将脚本传递到 UserData 字段?

    我尝试在 AWS Lambda 创建的新 EC2 实例的 Userdata 字段中传递脚本 使用适用于 Javascript 的 AWS 开发工具包 Node js 6 10 var paramsEC2 ImageId ami 28c901
  • 循环遍历二维数组的最快方法?

    我只是偶然发现这篇博文 http lbrandy com blog 2009 03 more cache craziness 关于缓存算法 作者展示了两个循环遍历矩形并计算某些内容的代码示例 我的猜测是计算代码只是一个占位符 在其中一个示例
  • 如何使用 jQuery 折叠嵌套列表?

    我有一个嵌套列表 ul li a href stuff a li li a href stuff2 a li ul li a href stuff3 a li ul li a href stuff4 a li ul 并希望在单击 li 时折
  • 在非视网膜设备上将 @2x 添加到高于特定分辨率的 src

    我在我的网站上使用 retinaJS 在视网膜设备上提供 2x 图像 我还希望能够使用 jQuery 在非视网膜 大屏幕桌面设备上服务器 2x 图像 因此 如果屏幕分辨率高于 1330px 那么我希望能够将 2x 添加到文件名末尾 文件后缀
  • 使用 python 从 mongodb 检索存储的图像

    from pymongo import MongoClient from bson objectid import ObjectId import numpy as np import gridfs import os os path i
  • Java:将 XML 写入数据库,最简单的方法是什么?

    我有大量 XML 文件和它们的 XSD 我想简单地将 then 转换为 POJO 并将它们插入数据库 数据库模式在我的控制之下 因此它可以是我喜欢的任何内容 我查看了很多 api 但想要另一种意见 哪种效果最好 JAXB XMLBeans
  • AngularJS 中的测试:注入函数的引用错误

    我尝试测试下面的代码 describe myService test function describe when I call myService one function beforeEach angular module Target
  • 在as3中使用多点触控同时拖动两个对象

    我试图在 AS3 中使用多点触控同时拖动两个对象 我的目标是让用户将两个对象捏在一起 现在我无法让两者同时移动 有什么想法为什么这不起作用吗 Multitouch inputMode MultitouchInputMode TOUCH PO
  • 如何在正则表达式中匹配非 ASCII(德语、西班牙语等)字母?

    我无法找到或创建仅匹配字母 空格 重音字母以及西班牙语和德语字母的正则表达式 我现在用的是这个 var reg new RegExp a z 我试过了 alpha a zA Z0 9 p L 任何想法 或者javascript引擎支持的正则
  • c++ 将罗马数字转换为小数

    该程序是我刚刚参加的考试的一部分 我必须编写它 我只走到了这一步 却哪儿也去不了 提示如下 编写一个测试函数 toDecimal 将罗马数字 例如 MMLXVII 转换为其十进制数字表示形式 使用 Main 测试该函数 toDecimal
  • Apache Beam:使用 Withtimestamp 分配事件时间时出错

    我有一个无限的 Kafka 流发送具有以下字段的数据 identifier xxx value 10 0 ts 2019 01 16T10 51 26 326242 0000 我使用 kafka 的 apache beam sdk 读取流
  • 电子邮件中的 Button_to 未发布

    请参阅此问题的演变的更新 在我的网站上 每个用户都有一个仪表板 他 她可以在其中单击链接来接受或拒绝请求 根据单击的内容 请求记录将使用相关状态进行修补 为了让用户更方便 我尝试将此仪表板嵌入到发给他们的电子邮件中 这样他们就不必直接访问该
  • 路径查找算法:A* 与跳跃点搜索

    我知道 A 比 Dijkstra 算法更好 因为它考虑了启发式值 但是从 A 和跳跃点搜索来看 哪种算法是在有障碍物的环境中找到最短路径的最有效算法 有何不同 跳跃点搜索是基于图表上的某些条件的改进的 A 因此 如果满足这些条件 主要是统一