当前位置: 首页 > 面试题库 >

什么是A*算法?

冯淳
2023-03-14
本文向大家介绍什么是A*算法?相关面试题,主要包含被问及什么是A*算法?时的应答技巧和注意事项,需要的朋友参考一下

个人感觉类似最佳优先算法,都是维护一个优先队列或堆,将结点按照某个值优先的情况放进去,不同的是这次需要一个估计函数h(n)

算法思想:对于优先队列,每取出一个结点n,将他的所有儿子结点n'放入优先队列,优先级由函数f(n)计算出

g(n):起点到结点n的代价

h(n):结点n到终点的估计代价

f(n)=g(n)+h(n)

A*算法是一种启发式算法

设h*(n)为结点n到目标结点的实际最小代价

只要h(n)<=h*(n),那么代价就不会被高估,这个算法就可以找出最优解

A*算法使用最佳优先策略,用来解决优化问题

步骤:

1.把起点放入优先队列

2.重复如下过程:

取出优先级最高的结点n,即f(n)最小的结点,作为当前要处理的结点 将这个结点放入一个close表中,这个表储存父结点子结点等信息 对于此结点可达的结点n': ①若这个结点不在队列中,计算g(n'),h(n'),f(n'),将其加入队列,并将n设为n'的父亲 ②若n'在队列中,计算由n到n'的g(n')值,更小的g(n')意味着这是更好的路径,如果g(n')更小,则将n设为n'的父亲,并重新计算g(n')和f(n') 停止,当: ①终点被找到 ②队列为空,此时查找失败 3.保存路径,从终点开始,沿着父结点移动至起点,即为路径

 

 类似资料:
  • 主要内容:算法是什么,伪代码描述算法要想成为一名合格的程序员,除了至少掌握一门编程语言,更重要的是多动手实践,积累足够的代码量,提升自己“遇到问题,解决问题”的能力。任何一门编程语言的学习,本质就是学习它规定的语法,整个过程只能死记硬背,几乎没有捷径。但是,提高“解决问题”的能力是有捷径可寻的,比如掌握一些算法。 提到“算法”,很多人都觉得它高深莫测、晦涩难懂。事实上的确存在一些算法,学员必须具备优秀的数学基础和编程能力才能驾驭。但

  • 本文向大家介绍什么是RSA算法?相关面试题,主要包含被问及什么是RSA算法?时的应答技巧和注意事项,需要的朋友参考一下 回答:RSA(Rivest-Shamir-Adelman)算法是用于签名数据和加密的第一个算法。它最广泛用于保护敏感数据。它也被称为非对称密码算法,它对两个不同的密钥(即公共密钥和私有密钥)起作用。公开密钥可以与任何人共享,并且私有密钥必须保密。

  • 本篇讲解manacher算法,大家在学习之前,提前了解一下两个字符串相算法——kmp和拓展kmp,这些算法都是字符串算法。相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和拓展kmp算法有很多共通支出,所以在这里介绍一下。Manacher算法是查找一个字符串的最长回文子串的线性算法。 在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简单来说就是正着读和反着读都

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存

  • A/B 测试是什么 A/B测试的本质是分离式组间试验,也叫对照试验,在科研领域中已被广泛应用(它是药物测试的最高标准)。自2000年谷歌工程师将这一方法应用在互联网产品以来,A/B测试在国外越来越普及,已逐渐成为互联网产品运营精细度的重要体现。 简单来说,A/B测试在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户流量对应分成几组,在保证每组用户特征相同的

  • 问题内容: 如果我尝试这样做: 我得到以下输出: 演示:http://codepad.org/ncVuJtJu 这是为什么? 我希望将其作为输出: 我的理解: 但是为什么不输出呢? 问题答案: 所有解释为什么得到2而不是1的答案实际上都是错误的。根据PHP文档,混合并以这种方式是不确定的行为,所以你可以得到1或2切换到不同版本的PHP可能会改变你得到的结果,这将是一样有效。 请参阅示例1,其中显示