算法——A-star算法

1、常见的两种算法有深度优先搜索,广度优先搜索,两个算法简单,粗暴,容易理解,但是大多数人都可以想到,这种算法在轻量级搜索还可以搞一搞,但是数据量一旦大起来,gg,程序挂掉,处理器炸掉,小编最近看书(android智能设备穿戴开发)看到了一种算法A-star感觉不错,跟大家分享一下

深度优先DFS(老鼠进迷宫问题)

这里写图片描述

广度优先BFS(盲目式)
这里写图片描述

2、先简单了解一下广度,深度优先,接下来介绍一下A-Star算法
(启发式搜索)
先大致说下算法的意思,前面两种方法,其实我们都有种感觉就是瞎猫碰死耗子,什么时候碰上什么时候算完,那岂不是很尴尬,想一下如果我们把瞎猫和死耗子这两个东西一个放在中国,两一个放在美国,嘿嘿,想一想这只猫什么时候能碰上,地球爆炸了它也碰不上。但是换种思维,如果把这两个东西放在一个两平米的小屋里面,效果可想而知了吧,好,我们的A-Star算法也可以称启发式搜索,就是瞎猫和死耗子的小屋。下面我给大家介绍一下是如何对整个搜索事件进行限制的。

3、实现过程
(1)选取最小估价(设节点n)
这里我们以估价函数俩表示估价
f(n)=g(n)+h(n)
解释一下:f(n)是指估价函数;g(n)是初始节点到n节点实际代价
h(n)是 从n节点到目标节点最佳路径的估计代价(如下图)
这里写图片描述

通俗点说:我想开车从承德(起始)去张家口(目标)
我先开车从承德到了北京(n节点)这段旅程我花了100块钱的汽油 这就是g(n)
我又开车从北京到达了张家口又花了150块钱汽油这就是h(n)
总共花的汽油就是f(n)

看着这个很脑残的问题。但是现在问题来了,我身处北京的时候,导航坏了,而人又傻了,不知道是北京–上海–张家口近,还是北京–宣化–张家口近;那么此时看看函数f(n)待求不用管,g(n)(已经从承德过来了100块钱油钱已经花了)也不用管,那么最后落到h(n)身上(与真实最短路线相近的最短路线,下面详细说);要想花钱最少,就得选一个最近的道路
所以说,重点中的重点在这个h(n)身上,下面我们来说说:

这里有个条件h(n)<=h*(n),怎么又来个h*(n),到底是神么鬼。想一想我们目的是什么,目的是找最短的路花钱少;注意:在地球范围内找(你完全可以绕道美国,再到张家口),所以说咱们要缩小找这个最短路线的范围。问题来了,怎么找,利用这个所谓的最小估价f(n)找,现在我们假设这个h*(n)就是北京到张家口连接的直线(最短),那么我们在这跳线的附近找 不就OK了 说的蒙蔽了上图

这里写图片描述

咱们在阴影部分搜索不就ok了
这里面 最近就指的是h*(n) 那个范围内就是 h(n)

书上对h(n)的评价是在h*(n)的下界之下并且尽量接近它
下面简单的应用一下

猜你喜欢

转载自blog.csdn.net/gywuhengy/article/details/73246220