算法导论——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*算法正确

算法导论——A*算法易懂的证明相关推荐

  1. 算法导论——排序算法

    学习<算法导论>学习感受 转载于:https://www.cnblogs.com/xuddong/archive/2013/04/10/3012567.html

  2. 算法导论——贪心算法:哈夫曼编码(霍夫曼编码)

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.greedy;import org.junit.Test; import org.loda. ...

  3. 算法导论-排序算法-分治法

    1.分治法原理 所谓的分治指的就是分而治之,即将大规模的问题分解成几个较小规模的问题.通过对较小规模问题的求解达到对整个问题的的求解.当我们将问题分解成两个较小问题求解时的分治方法就是二分法. 分支的 ...

  4. 算法导论5:基数排序和计数排序 2016.1.5

    今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序. 其实这种比较方法我们应该都接触过.假设输入的数都是三 ...

  5. 算法导论9.1-1找第二小的元素

    文章目录 算法导论9.1-1 1.证明:在最坏情况下,找到n个元素中第二小的元素需要 n+ceil(lgn)-2 次比较.(提示:可以同时找到最小元素) 1.证明 n-1 2.证明 ceil(lg) ...

  6. 组合数学 算法导论 具体数学 博弈论 计算机科学数学

    组合数学[清华大学] https://www.bilibili.com/video/BV1sW411V7RU 15日掌握<具体数学>第1天学习直播实况记录(2019.5.27) https ...

  7. 重读《算法导论》第一章

    重读<算法导论> --------算法是程序的灵魂! 驱动力:本人从事开发10年有余,目前正在参与研发自动化编程.在代码解析.自动生成.以及源码分析过程中总会遇到一些算法的问题. 所以想着 ...

  8. 算法导论-麻省理工公开课-百度云

    资源来源于网络,若有侵权,请告知,我会在24小时之内删除~~ 我整理的资源已汇总,请访问:资源汇总贴,选择自己还需要的资源~ 算法导论的视频教程,算法导论,算法中的圣经啊.分享麻省理工的公开课,需要的 ...

  9. 算法导论主定理证明(3)

    章节4.6.1引理4.3的第一句就不证了,因为比较简单. 这里是最后一部分的证明,即算法导论4.6.2---向下取整和向上取整部分. 呼~到这里为止终于把这个定理证完了! 仔细用mathtype码证明 ...

最新文章

  1. python tab符号_Python3 expandtabs()方法
  2. TensorFlow学习笔记(四)自己动手求Weights和biases
  3. 委托又给我惹麻烦了————记委托链的取消注册、获取返回值
  4. 在JDT中使用Java 8 Lambda
  5. java线程池案例_使用Executors 和 ThreadPoolExecutor实现Java线程池案例
  6. 谈谈如何在面试中发掘程序猿的核心竞争力 什么是程序员的核心竞争力?
  7. Mysql字符串组合的问题
  8. pythontry参数_Python try except异常处理详解(入门必读)
  9. 从字节码层面,解析 Java 布尔型的实现原理
  10. springBoot于tomcat7搭建websocket服务
  11. 【大数据部落】基于ARIMA、SVM、随机森林销售的时间序列预测
  12. ong拼音汉字_拼音ong到底怎么读?
  13. 它拖慢你的网速,还泄露你的个人隐私,学一招治治它
  14. idea怎么进行c语言编程_idea编写c语言
  15. web字体文件过大优化方案
  16. 淘宝怎么选品技巧秘籍,做淘宝7分靠选货品
  17. matlab中的out模块,matlab-simulink中out模块怎么用?
  18. 谈谈Line-height的深入理解 与 应用
  19. 第五章(第四节)论路由器重置
  20. 关于LTE终端的所谓的五模、七模、十频、十一频

热门文章

  1. CAD电气工程图教程之布局方法和设计规则
  2. 5G NR 随机接入RACH流程(7)--分类和重要RACH流程总结
  3. easyui-calendar周数
  4. MySQL消除笛卡尔积的方法,mysql-了解SQL中的笛卡尔积
  5. Jquery ajax 提交表单
  6. 销售线索是什么意思?销售线索的重要性
  7. Access、Hybrid和Trunk三种模式的理解
  8. Web直接打印走过的那些坑
  9. 同时安装了office2003和office2010,如何设置office2003为默认打开
  10. MyIE2几个让我欣赏的地方