JPS(Jump Point Search)寻路
参考资料:2018腾讯移动游戏技术评审标准与实践案例
https://blog.csdn.net/yuxikuo_1/article/details/50406651
http://blog.sina.com.cn/s/blog_4a5c75d40102wo5l.html
https://github.com/SkylerAlvarez/JumpPointSearch
一、什么是Jump Point Search?
JPS 又名跳点搜索算法(Jump Point Search),是由澳大利亚两位教授于 2011年提出的基于 Grid 格子的寻路算法。JPS算法在保留A算法的框架的同时,进一步优化了 A算法寻找后继节点的操作。
个人理解,A*是寻找所有的当前点的邻居,会有频繁的点集合加入和删除到点集合操作,jps的优点是会根据当前点的方向及当前点周围邻居的特点进行选择某些特殊的点才执行加入和删除到点集合操作。
JPS类比于KMP算法,有个共同点在于把重复多余的计算通过数据的特性省略,kmp中的next数组是对子字符串的特性的记录,在匹配时根据这些特性跳过多余的计算。jps也是根据邻居点的特性跳过其他多余的点。
这个也是多数优化算法的一个方式。
从论文中的图也可以看出这个特点,M.Time 表示操作 openset 和 closedset 的时间,G.Time 表示搜索后继节点的时间。可见 A*大约有 58%的时间在操作 openset 和 closedset,42%时间在搜索后继节点;而 JPS 大约 14%时间在操作 openset 和 closedset,86%时间在搜索后继节点。
二、寻路流程
P S : 本 文 定 义 无 法 直 接 走 到 斜 对 角 , 比 如 ( 1 , 1 ) 点 无 法 直 接 走 到 ( 2 , 2 ) 点 , 需 要 的 话 也 可 以 , 要 改 点 逻 辑 \color{red}{PS:本文定义无法直接走到斜对角,比如(1,1)点无法直接走到(2,2)点,需要的话也可以,要改点逻辑} PS:本文定义无