算法导论——A*算法易懂的证明

算法导论——A*算法易懂的证明

证明采用反证法,课上老师讲解不够清晰,课后自己下了点功夫,明白了A * 算法的原理。

前言

A*算法,其核心思想在于f(n)和Best-First.其中 f(n) = g(n) + h(n),h(n)是代价估计函数,
g(n)是出发点到点n的距离。我们假设结点n可以到达m个结点。这m个结点形成一个
集合S。进一步的,h(n) = minDistance {n -> m | m ∈ S}。从而计算出结点n的代价函
数f(n),再利用Best-First思想,选择f(n)最小的结点,然后递归操作。

A* 证明

我们需要证明利用A*算法选出的路径是最小路径。证明采用反证法。

现在,我们假设有:
A*算法选出的路径A = {S, N1, N2 … Ni-1, Nj … N’, T( A )},并说明该路径不是最短路径。
以及,
最短路径P = {S, N1, N2 … Ni-1, Ni,Ni+1 … T( P )},最短路径中必定包含路径A中没有的结点Ni。并说明路径P的Ni之前的所有结点和路径A保持一致。
其中T( A )表示由路径A到达的终点TT( P )表示最短路径P到达的终点TN’表示T( A )结点的上一个结点

因为有f(Ni) = g(Ni) + h(Ni) <= g(T(P)) + 0 = f(T(p))

即无论如何,我们的Ni的下一个结点到起始点的路径长度小于等于终止点T§到起始点的路径长度

又有f(T(P)) <= f(T(A))

即T( P )是最短路径

所以有f(Ni) <= f(T( A ))。

同理,有

所以有f(Ni+1) <= f(T( A )),f(Ni+2) <= f(T( A ))……f(T( P )) <= f(T( A ))

这时,我们反过来看A*算法选出的路径,当我们处于N’,要选择下一个结点时,根据Best - First,我们必定会选择Ni结点,而不会选T(A);而当我们处于Ni结点时,我们必定会选择Ni+1,而不会选择T(A),如此一来,路径A不可能达到,故矛盾,所以A*算法正确

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值