关于A*寻路算法正确性证明的笔记

本文是参考了其他证明方法后的笔记。需要对A*寻路算法有一定的了解。(错误处望指正)

先给出一些基本概念(熟悉A*的读者可直接跳到证明处):

一张图中,以节点st为出发点,以end为目标节点,要求的是节点st到节点end的最短路径。

  • g(n)表示从点st到达节点n的当前最小代价。这里要注意的是g(n)可能会随着寻路过程更新

如果不能理解g(n)的更新,以下为一个简单的例子(理解的话直接跳过就好了):寻路过程为从st出发,先寻到相邻的节点,然后再选定某一相邻节点往更远处的节点走。以下图为例说明g(n)可能会更新的情况。假如起始节点为st是节点1,目标节点end是节点5。从1开始寻路,节点1->节点2的代价是3,所以g(2)=3;节点1->节点3代价为1,所以g(3)=1。从节点1开始无其他节点了,那么从节点2或者3开始继续寻路。假设选节点3往下继续寻路。节点3可到达节点2和节点4,此时3->4代价为3,那么g(4)=g(3)+“节点3->节点4的代价”=4。但是对于节点2,已有g(2)=3,但是明显路径1->3->2所用的代价为2,更小。根据g(n)表示更新到当前的最小代价,g(2)应该等于2。即此时对g(2)更新为g(2)=2。

(g(i)的更新操作一般定义为g(i)=min{g(i),g(j)+d(j,i)},其中d(j,i)表示节点j到节点i有长度为d(j,i)的边。)

  • h(n)表示从节点n到目标节点end的预估代价。这里要注意的是,当一个图的背景情况给出后,h(n)的计算方法是固定的,即预估函数在寻路之前是固定的。

这与g(n)不同,g(n)随着寻路过程逐步更新,而对某个节点n,在寻路之前就固定,无论更新到哪,这个节点n到end的预估代价h(n)都不变。至于对一个节点n,它的h(n)到底是多少,则是由问题解决者根据问题给出。(相当于问题解决者自己预先给出一个函数h(x),x=n时函数值是确定的)

  • f(n)=g(n)+h(n)。这里f(n)的含义为从初始节点st出发经过节点n再到达目标节点end的最小代价的预估。
  • h*(n)表示从节点n到目标节点end的实际最短路径。注意这是只是一个概念,并不是已知的。

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值