当前位置: 首页 > news >正文

算法笔记:A*算法

A*算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度

1 中心思路

  • A*算法通过下面这个函数来计算每个节点n的优先级
    • f(n)=g(n)+h(n)
      • f(n)是节点n的综合优先级。当选择下一个要遍历的节点时,总会选取综合优先级最高(f(n)值最小)的节点。
      • g(n) 是节点n距离起点的代价
      • h(n)是节点n距离终点的预计代价,这也就是A*算法的启发函数
  • A*算法在运算过程中,每次从优先队列中选取f(n)值最小(优先级最高)的节点作为下一个待遍历的节点。

1.1  伪代码

  • A*算法使用两个集合来表示待遍历的节点(open_set),与已经遍历过的节点(close_set)

  • 初始化open_set和close_set
  • 将起点n0加入open_set中,并设置f(n0)=0(优先级最高)
  • 如果open_set不为空,则从open_set中选取优先级最高的节点n:
    • 如果节点n为终点:
      • 从终点开始逐步追踪parent节点,一直达到起点
      • 返回找到的结果路径,算法结束
    • 如果节点n不是终点:
      • 将节点n从open_set中删除,并加入close_set中
      • 遍历节点n所有的邻近节点
        • 如果邻近节点m在close_set中(已经访问过来),则:
          • 跳过,选取下一个邻近节点
        • 如果邻近节点m也不在open_set中,则=
          • 设置节点m的parent为节点n
          • 计算节点m的优先级f(n)
          • 将节点m加入open_set中

2 启发函数

  • 在极端情况下,当启发函数h(n)始终为0,则将由g(n)决定节点的优先级,此时算法就退化成了Dijkstra算法
    • ntu 课程笔记 :MAS714(7) 最短路径和优先队列_UQI-LIUWJ的博客-CSDN博客
  • 如果h(n)始终小于等于节点n到终点的代价,则A*算法保证一定能够找到最短路径。
    • 但是当h(n)的值越小,算法将遍历越多的节点,也就导致算法越慢。
  • 如果h(n)完全等于节点n到终点的代价,则A*算法将找到最佳路径,并且速度很快。
    • 可惜的是,并非所有场景下都能做到这一点。因为在没有达到终点之前,我们很难确切算出距离终点还有多远。
  • 如果h(n)的值比节点n到终点的代价要大,则A*算法不能保证找到最短路径,不过此时会很快
    • 比如这种情况最短路路径应该是下路
    • 但如果我们估计的h(n)为实际路径的两倍
      • 那么选择中间节点的时候,A*算法会选择上路 (5+3*2=11,4+3.6*2=11.2)

     

2.1 一些经验启发函数

  • 如果图形中只允许朝上下左右四个方向移动,则可以使用曼哈顿距离
  • 如果图形中允许朝八个方向移动,则可以使用对角距离
  • 如果图形中允许朝任何方向移动,则可以使用欧几里得距离

     

相关文章:

算法笔记:A*算法

A*算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度 1 中心思路 A*算法通过下面这个函数来计算每个节点n的优先级 f(n)g(n)h(n) f(n)是节点n的综合优先级。当选择下一个要遍历的节点时,总会选取综合优先级最高(f(n)值最小&#xff0…...

postgresql 分类排名

postgresql 分类排名 排名窗口函数示例CUME_DIST 和 NTILE 排名窗口函数 排名窗口函数用于对数据进行分组排名。常见的排名窗口函数包括: • ROW_NUMBER,为分区中的每行数据分配一个序列号,序列号从 1 开始分配。 • RANK,计算每…...

TCP服务器实现—多进程版,多线程版,线程池版

目录 前言 1.存在的问题 2.多进程版 3.多线程版 4.线程池版 总结 前言 在上一篇文章中使用TCP协议实现了一个简单的服务器,可以用来服务端和客户端通信,但是之前的服务器存在一个问题,就是当有多个客户端连接服务器的时候,服…...

Nginx 配置文件的完整指南 (二)

文章目录 四、反向代理配置4.1 proxy_pass效果1—路径重写效果2—转发到其他服务器 4.2 proxy_pass使用规则4.3 proxy_set_header4.3.1 修改请求协议 五、负载均衡配置5.1 upstream5.2 server5.3 负载均衡策略5.3.1 轮询5.3.2 加权轮询5.3.3 最少连接5.3.3 ip_hash:…...

AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记

赛题:基于论文摘要的文本分类与关键词抽取 背景:高效的从海量医学文献中提取疾病诊断和治疗关键信息 任务:通过论文摘要判断论文是否为医学文献 样例 数据集:csv文件,字段:标题、作者、摘要、关键词 评价指…...

使用qsqlmysql操作mysql提示Driver not loaded

环境: win10 IDE: qt creator 编译器: mingw32 这里简单的记录下。我遇到的情况是在IDE使用debug和release程序都是运行正常,但是当我编译成发布版本之后。老是提示Driver not load。 这就很奇诡了。 回顾了下编译的时候是需要在使用qt先编译下libqsqlmysql.dll的…...

Java云原生框架Quarkus初探

Java云原生框架Quarkus初探 Quarkus 介绍 Quarkus 是一个云原生,容器优先的Java应用框架,它号称是超音速和亚原子的框架,主要特点是构建速度、启动速度快和占用资源少等特点。它为OpenJDK HotSpot和GraalVM量身定制, 根据Java库和…...

ElasticSearch相关概念

文章目录 前提倒排索引MySQL、ES的区别和关联IK分词器索引库mapping属性索引库的crud 文档的crudRestClientDSL查询DSL 查询种类DSL query 基本语法 搜索结构处理排序分页高亮RestClient 前提 开源的搜索引擎,从海量数据中快速找到需要的内容。(分词检索…...

微服务实战项目-学成在线-项目部署

微服务实战项目-学成在线-项目部署 1 什么是DevOps 一个软件的生命周期包括:需求分析阶、设计、开发、测试、上线、维护、升级、废弃。 通过示例说明如下: 1、产品人员进行需求分析 2、设计人员进行软件架构设计和模块设计。 3、每个模块的开发人员…...

封装form表单

目录 1. 源码 2. 其他页面引用 ps&#xff1a;请看完看明白再复用 1. 源码 <template><div style"width: 100%; height: 100%" class"form-condition"><!-- 普通表单 --><el-card shadow"hover" class"cardheigh…...

程序员如何利用公网远程访问查询本地硬盘【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…...

算法|Day42 动态规划10

LeetCode 121.买卖股票的最佳时机 题目链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 题目描述&#xff1a;给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天…...

vmalert集成钉钉告警

vmalert通过在alert.rules中配置告警规则实现告警&#xff0c;告警规则语法与Prometheus兼容&#xff0c;依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警&#xff0c;以下步骤&#xff1a; 1、构建vmalert 从源代码构建vmalert&#xff1a; git clone https://…...

深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL

在当今的Java应用程序开发中&#xff0c;数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架&#xff0c;为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中&#xff0c;<foreach>标签无疑是一个强大的工具&#xff0c;它使得…...

LeGO-Loam代码解析(二)--- Lego-LOAM的地面点分离、聚类、两步优化方法

1 地面点分离剔除方法 1.1 数学推导 LeGO-LOAM 中前端改进中很重要的一点就是充分利用了地面点,那首先自然是提取 对地面点的提取。 如上图,相邻的两个扫描线束的同一列打在地面上如 点所示,他们的垂直高度差 &#xff0c;水平距离差 &#xff0c;计算垂直高度差和水平高度差…...

程序员如何利用公网打造低成本轻量化的搜索和下载平台【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…...

构建可远程访问的企业内部论坛

文章目录 前言1.cpolar、PHPStudy2.Discuz3.打开PHPStudy&#xff0c;安装网页论坛所需软件4.进行网页运行环境的构建5.运行Discuz网页程序6.使用cpolar建立穿透内网的数据隧道&#xff0c;发布到公网7.对云端保留的空白数据隧道进行配置8.Discuz论坛搭建完毕 前言 企业在发展…...

2023河南萌新联赛第(六)场:河南理工大学-C 旅游

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学 https://ac.nowcoder.com/acm/contest/63602/C 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学题意解题思路代码 题意 小C喜欢旅游&#xff0c;现在他要去DSH旅…...

C语言 常用工具型API ----------strchr()

函数原型 char *strchr(const char *str, int c) 参数 str-- 要被检索的 C 字符串。 c-- 在 str 中要搜索的字符。 功能 在参数str所指向的字符串中搜索第一次出现字符c&#xff08;一个无符号字符&#xff09;的位置 头文件 #include <string.h> 返回值 返回一…...

建造者模式的理论与实现

本文实践代码仓库&#xff1a;https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现四、总结 一、定义 建造者模式是一种创建复杂对象的设计模式。它将一个复杂对象的构建过程分解为多个简单的步骤&#xff0c;并且允许按照特定的顺序来构建对象。通过…...

ExifToolGUI终极指南:3步掌握照片元数据批量管理工具

ExifToolGUI终极指南&#xff1a;3步掌握照片元数据批量管理工具 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾为整理数百张旅行照片而头疼&#xff1f;需要统一修改拍摄时间、批量添加版权信息&…...

Anno 1800 Mod Loader终极指南:如何轻松解锁《纪元1800》无限模组潜力

Anno 1800 Mod Loader终极指南&#xff1a;如何轻松解锁《纪元1800》无限模组潜力 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com…...

DeepSeek-R1大模型微调实战:从LoRA原理到完整项目部署指南

1. 项目概述&#xff1a;一个面向开发者的开源大模型微调项目最近在开源社区里&#xff0c;一个名为FareedKhan-dev/train-deepseek-r1的项目引起了我的注意。乍一看&#xff0c;这只是一个托管在代码托管平台上的仓库&#xff0c;但如果你像我一样&#xff0c;在过去几年里深度…...

ITR9909反射光电管实测:10cm检测距离怎么来的?手把手教你做距离-电压曲线

ITR9909反射光电管深度测评&#xff1a;从原理到实战的距离-电压曲线构建指南 在工业自动化、机器人导航和智能家居领域&#xff0c;反射式光电检测管因其非接触式检测特性而广受欢迎。ITR9909作为一款性能优异的反射式红外光电管&#xff0c;其标称的10cm检测距离背后隐藏着怎…...

网络虚拟化如何应对100G性能挑战:从SDN/NFV到DPDK与智能网卡的演进

1. 网络虚拟化与100G浪潮&#xff1a;一场正在发生的架构革命如果你在2015年前后从事网络或云计算相关的工作&#xff0c;大概会对一个词印象深刻&#xff1a;100G。当时&#xff0c;行业媒体和厂商都在热烈讨论一个预测——到2018年&#xff0c;100G将成为网络设备&#xff0c…...

仅限内部测试者知晓:Midjourney未公开的--detail boost隐式指令(实测使睫毛/织物/金属反光细节识别率提升3.2倍)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney图像放大与细节增强 Midjourney v6 及后续版本原生支持高分辨率图像生成与智能细节增强&#xff0c;其核心能力不仅依赖于模型权重&#xff0c;更通过 --zoom 2、--style raw 和 --s 750 等参…...

ChromaControl终极指南:如何实现多品牌RGB设备统一灯光控制

ChromaControl终极指南&#xff1a;如何实现多品牌RGB设备统一灯光控制 【免费下载链接】ChromaControl 3rd party device lighting support for Razer Synapse. 项目地址: https://gitcode.com/gh_mirrors/ch/ChromaControl 你是否曾为不同品牌的RGB设备需要安装多个控…...

京东商品自动监控下单工具:告别手动刷新,让心仪商品自动到手

京东商品自动监控下单工具&#xff1a;告别手动刷新&#xff0c;让心仪商品自动到手 【免费下载链接】jd-happy [DEPRECATED]Node 爬虫&#xff0c;监控京东商品到货&#xff0c;并实现下单服务 项目地址: https://gitcode.com/gh_mirrors/jd/jd-happy 还在为抢不到心仪…...

如何快速掌握AMD锐龙隐藏性能:Ryzen SDT调试工具终极指南

如何快速掌握AMD锐龙隐藏性能&#xff1a;Ryzen SDT调试工具终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...

3大技术创新:重新定义Windows Android生态的工具体验

3大技术创新&#xff1a;重新定义Windows Android生态的工具体验 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mirrors/ws/wsa-tool…...