找回密码
 欢迎注册
楼主: ssikkiss

[求助] 关于寻径算法

[复制链接]
发表于 2010-1-6 22:10:15 | 显示全部楼层
没写过论文,那张表也不知道是谁帮我画的,比原来好看多了。 9#的做法有个地方需要修正一下: 在查询的时候才合并标记是来不及的,如下图所示: wa3.PNG 即使合并了,s和t的颜色还是不一样,于是错误地回答“无路”了。 所以合并标记的工作必须在前期完成: wa4.PNG 这样查询的时候就保证不会有某个点两边的标记不一样的情况了。 于是前期工作包括: 把m个障碍排序、环绕障碍并标记、把标记排序、合并标记。 这些操作的时间复杂度均为O(m*log(m)),所以前期花费仍然是O(m*log(m))的。 另外,想到一个比较好玩的东西: 1个障碍似乎可以写成4个箭头。 多个障碍可以表示成多箭头相加。 当正反向箭头重合的时候,两个箭头就互相抵消了。 如下图所示: wa5.PNG 而加法满足交换律,所以前期就用不着把障碍排序了,直接把箭头相加就可以了。 计算结果就是我想要的环路,从而省去了把m个障碍排序的工作。 但箭头还是要排序的,所以前期工作的时间复杂度并没有变化。 想到这里,发现4楼的障碍遍历法我忽略了一道重要的工序: 必须先把障碍排序! 这样才可以从一个障碍出发然后往相邻的障碍走。 不然的话寸步难行。 例如:我站在障碍(5,8),怎么知道(4,7)、(4,8)、(4,9)等地是不是障碍? 不排序的话,我得在整个障碍列表中检查一遍有没有(4,7)、(4,8)、(4,9)这些障碍。 排序了就可以二分查找了。 所以性能指标需要修正。 现修正如下:
性能指标预编译法障碍遍历法环绕障碍法
前期花费时间O(n^2)O(m*log(m))O(m*log(m))
前期花费空间O(n^2)O(m)O(m)
查询花费时间O(1)O(m*log(m))O(log(m))
查询花费空间O(1)O(m)O(1)
地图修改维护时间O(n^2)O(m*log(m))O(log(m))
地图修改维护空间O(n^2)O(m)O(m)
因为我一直以来都只用预编译法,后面的方法是看了此贴之后临时想出来的,还没有实现过。 所以难免会有疏漏之处。请大家原谅。 如果还有疏忽之处,请指正。 谢谢各位的热心帮助。 ############################### 这是我的第100张贴子,做个记号,留作纪念。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-6 23:39:14 | 显示全部楼层
呵呵,那个Smiley很吸引眼球~~
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-12 23:19:03 | 显示全部楼层
谢谢以上各位帮忙!因为我的地图比较小,障碍较多,而且是实时变化的,我还是选了A*。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-21 11:50:46 | 显示全部楼层
4楼的方法适合动态的障碍,而5楼的方法,对于静态的障碍,只需要建立一个2维数组,初始化一次就行了。都非常好
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-22 14:11:51 | 显示全部楼层
呵呵,不懂,顶下。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-2-4 19:10:52 | 显示全部楼层
很好的题目
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 01:13 , Processed in 0.025935 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表