当前位置:   article > 正文

A*搜索算法概述_a算法是一种图搜索算法

a算法是一种图搜索算法

编者按:本文作者奇舞团前端开发工程师魏川凯。

A搜索算法(A-star search algorithm)是一种常见且应用广泛的图搜索和寻径算法。A搜索算法是通过使用启发式函数来指导寻路,从而高效的保证找到一条最优路径。A搜索算法最初的设计是用来解决最短路径问题。但是,从理论来说A可以解决大多数的成本代数问题。

A*搜索算法于1968年,由斯坦福研究院的Peter Hart,Nils Nilsson以及Bertram Raphael首次发表。

原理
A*搜索算法综合了最佳优先搜索算法(Best-first search)和Dijkstra算法的优点,通过一个成本估算函数来指导路径的搜索过程:
f(n)=g(n)+h(n)
f(n)=g(n)+h(n)
其中:

n n n:任意一个顶点

g ( n ) g(n) g(n):表示起点到任意顶点 n n n的实际成本

h ( n ) h(n) h(n):是一种启发式函数,表示从任意顶点 n n n到目标点的估算成本

在算法的每次迭代中,会从一个优先队列中取出 f ( n ) f(n) f(n)值最小(估算成本最低)的节点作为下次待遍历的节点。这个优先队列通常称为open set。然后相应地更新其领域节点的 f ( n ) f(n) f(n) g ( n ) g(n) g(n)值,并将这些领域节点添加到优先队列中。最后把遍历过的节点放到一个集合中,称为close set。直到目标节点的 f ( n ) f(n) f(n)值小于队列中的任何节点的 f ( n ) f(n) f(n)值为止(或者说直到队列为空为止)。因为目标点的启发式函数 h ( n ) h(n) h(n)值为0,所以说目标点的 f ( n ) f(n) f(n)值就是最优路径的实际成本。

下面为A*搜索算法的主流程代码:

// heuristicFunction,启发式函数

function aStar(start, goal, heuristicFunction) {

// 带估算的节点集合,为一个优先队列,每次取f(n)值最小的节点

const openSet = new PriorityQueue()

openSet.add(start) // 初始只有起点

const closeSet = [] // 已被估算过的节点集合

const gScore = { [start]: 0 } // g(n)值

const hScore = { [start]: heuristicFunction(start, goal) } // h(n)值

const fScore = { [start]: hScore[start] } // f(n)值

const cameFrom = {} // 记录当前节点的上一个节点

while(!openSet.isEmpty()) {

const current = openSet.pollFirst()

if(current === goal)

return

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/558841
推荐阅读
相关标签
  

闽ICP备14008679号