此文章仅供学习使用,为离散数学学习任务,部分图片为其他平台转载,侵删
一、广度优先搜索(Breadth-first search (BFS))
BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。
它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止
1、 时间复杂度是:T(n) = O(n^2),效率底下
2、每个顶点之间没有权值,无法定义优先级,不能找到最优路线。比如遇到水域需要绕过行走,在宽度算法里面无法涉及。
二、贪婪最佳优先搜索(Greedy Best-First Search)
从上图中我们可以明显看到右边的算法(贪婪最佳优先搜索 )寻找速度要快于左侧,虽然它的路径不是最优和最短的,但障碍物最少的时候,他的速度却足够的快。
这就是贪心算法的优势,基于目标去搜索,而不是完全搜索。
三、A星寻路算法
A*算法结合了基于目标搜索和基于成本的优点
先看看A*算法的函数表达式
A*的核心关键词是代价,代价意为某次行动之后需要支付的成本,算法每次将从队列中选取总代价最小的节点作为下一个代遍历的节点。其中总代价为未来代价和当今代价之和。
在公式中
- f(n)是节点n的代价。当我们选择下一个要遍历的节点时,我们总会选取总代价最高(值最小)的节点。
- g(n) 是节点n距离起点的代价。
- h(n)是节点n距离终点的未来代价,这也就是A*算法的启发函数。
- 关于h(n)我们在下面详细讲解。
1.节点
在定义节点的时候,我给了节点以下几个属性:坐标(x,y),父节点,是否为墙,代价,共5个属性
并提供了一个函数声明