A*算法理解入门

本文介绍了A*算法,它是Dijkstra算法与启发式搜索的结合,通过考虑实际移动成本和目标节点的估计代价,显著提高了路径搜索效率。重点讨论了广度优先搜索、层次遍历、早期退出策略以及启发式函数如曼哈顿距离的应用。
摘要由CSDN通过智能技术生成

Introduction To The A* Algorithm

文章来源

代码实现

广度优先搜索-Breadth First Search

层次遍历

在这里插入图片描述

flood fill.

  1. 起点入队;
  2. 队列中取出一个节点,标记为已访问,并遍历其相邻节点,将未访问的节点入队;
  3. 队列是否为空 ? end : step2.
    在这里插入图片描述
    遍历过程中添加记录“父节点”的操作,便于由终点回溯出最短路径。

Early exit

早退

if current_node == goal:
	break

在这里插入图片描述

Movement costs

Steps or Distance.
在这里插入图片描述

考虑到不同的移动成本开销(图上边权重不同),BFS就不适用于计算最短路径。

Dijkstra算法

计算单源最短路径。
在这里插入图片描述

Dijkstra(Graph, start, goal):
    priority queue Q
    Init...
    # distances[i]=∞
    # distances[start]=0
    # visited[i]=False
    # predecessors[i]=i
    # Q.enqueue(start)
    while Q is not empty:
        u <-- min(distances[u]) and visited[u] = False
        Q.dequeue(u)
        visited[u] = True;
        for neighbor in neighbors[u]:
            new_distance = distances[u] + weight(u, v)
            if visited[v]==False and new_distance < distances[v]:
                distances[v] = new_distance
                predecessors[v] = u
                Q.enqueue(v)
                

启发式搜索-Heuristic Search

定义一个启发函数,返回与目标点的曼哈顿距离。

def heuristic(a, b):
   # Manhattan distance on a square grid
   return abs(a.x - b.x) + abs(a.y - b.y)

在这里插入图片描述
在这里插入图片描述

对比发现,速度大大提升!

A*算法

将dijkstra算法与Heuristic search相结合,融会贯通。

F(n) = G(n) + H(n)

  • G(n):从起始节点到节点n的实际开销(movement cost)
  • H(n):启发式函数,表示从节点n到目标节点的估计最小代价
  • F(n):总开销
    在这里插入图片描述
    在这里插入图片描述
    看吧,这就是既要,又要,全都要!
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞DoD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值