A star算法
1. 算法的理解
1.2 a 星算法的基本的原理
a 星 是一种启发式搜索算法, 用于在地图中的两个目标点之间寻找最短的路径,它结合了最优先搜索和Dijkstra算法的特点,通过考虑从起点到当前点的距离(或者代价 g(n) ) 和估算的从当前点到目标点的最短距离(启发式估计h(n) )来进行,算法为图中每一个节点维护一个值 f(n) = g(n) + h(n),它代表了从起点经过节点n 到达目标点的估计成本 ,在搜索过程中,a 星算法会优先选择扩展f(n) 值最小的点,这有助于它高效的找到最短路径 。
1.2 a 星算法如何在效率和准确性之间权衡?
主要取决于额启发式函数h(n) , 在cost :f(n) = g(n) + h(n) 如果对
- 启发式估计h(n)总是低估从任意节点到目标节点的实际成本,那么可以保证找到最短路径
- 启发式估计h(n)很大,能更快的找到目标, 但路径可能不是最优的
- 启发式估计h(n)过小或者小于0 ,那么a 星会退化成DijKstra算法,效率低但是可以找到确保找到最短路径。
因此启发式函数的选择需要在搜索效率和路径优化度之间做出权衡 。
1.3 a 星算法中常用的启发式函数
- 曼哈顿距离(Manhattan Distance) : 其中移动仅限于水平和垂直方向,启发式计算的是两点在各轴上的差值的绝对之和
- 欧几里得距离(Euclidean Distance):启发式是两点之间的直线距离
- 对角线距离(Diagonal Distance): 移动可以是水平垂直以及对角线方向
- 切比雪夫距离(Chebyshev distance):计算的是在任何方向上移动所需最大步数
switch (distance_norm){case Euclidean:{double dx = abs((double)(start_index(0) - end_index(0)));double dy = abs((double)(start_index(1) - end_index(1)));double dz = abs((double)(start_index(2) - end_index(2)));h = std::sqrt((std::pow(dx,2.0) + std::pow(dy,2.0)+std::pow(dz,2.0)));break;}case Manhattan:{double dx = abs((double)(start_index(0) - end_index(0)));double dy = abs((double)(start_index(1) - end_index(1)));double dz = abs((double)(start_index(2) - end_index(2)));h = dx + dy + dz;break;}case L_infty:{double dx = abs((double)(start_index(0) - end_index(0)));double dy = abs((double)(start_index(1) - end_index(1)));double dz = abs((double)(start_index(2) - end_index(2)));h = std::max({dx,dy,dz});}break;case Diagonal:{double distance[3];distance[0] = abs((double)(start_index(0) - end_index(0)));distance[1] = abs((double)(start_index(1) - end_index(1)));distance[2] = abs((double)(start_index(2) - end_index(2)));std::sort(distance,distance+3);h = distance[0] + distance[1] + distance[2] +(std::sqrt(3.0)-3) * distance[0] + (std::sqrt(2.0)-2)*distance[1];break;}default:break;}
1.4 实现a星的数据结构
#ifdef _Node_H_
#define _Node_H_ #include<iostream>
#include<ros/ros.h>
#include<Eigen/Eigen>
#include<Memory>#define inf 1>>20 ;
struct GridNode;
typedef std::shared_ptr<GridNode> GridNodePtr ; struct GridNode{int id_ ; Eigen::Vector3d coord_ ; Eigen::Vectros3i dir_ ; Eigen::Vector3i index_ ; double gScore_ ; double fScore_ ; GridNodePtr cameFrome_ ; std::multimap<double , GridNodePtr> ::iterator nodeMapIt ; GridNode(Eigen::Vector3i index , Eigen::Vector3d coord){id_ = 0 ; coord_ = coord ; index_ = index ; gScore = inf ; fScore = inf ; cameFrome_ = nullptr ; }~GridNode() ;GridNode() ;}
#endif
相关文章:
A star算法
1. 算法的理解 1.2 a 星算法的基本的原理 a 星 是一种启发式搜索算法, 用于在地图中的两个目标点之间寻找最短的路径,它结合了最优先搜索和Dijkstra算法的特点,通过考虑从起点到当前点的距离(或者代价 g(n) ) 和估算…...
node插件MongoDB(四)—— 库mongoose 操作文档使用(新增、删除、更新、查看文档)(二)
文章目录 前言(1)问题:安装的mongoose 库版本不应该过高导致的问题(2)重新安装低版本 一、插入文档1. 代码2. node终端效果3. 使用mongo.exe查询数据库的内容 二、删除文档1. 删除一条2. 批量删除3. 代码 三、修改文档…...
JavaFX入门和网格布局面板的使用,Dao层交互,舞台与场景切换以及其他控件的使用
网格布局 将整个面板划分为若干个格子 , 每个格子的大小是一样的 , 每个格子中可以放置一个控件(布局) , 类似于表格的方式。在网格布局 中放入控件的时候 , 还需要指定位置。 GridPane gridPane new GridPane(); 我们将要排出这个布局 , 也就是登陆页…...
数据中台之数据分析
效果界面 技术方案 Notebook集成 在您的数据平台上,创建一个能够与Jupyter Notebook通讯的服务。通过Jupyter Notebook的HTTP API与Notebook实例进行交互,执行代码、获取输出等。用户界面 在数据开发/数据分析的代码框右上方,添加一个机器人样式的图标,用户点击后可以调起…...
龙芯loongarch64服务器编译安装scipy
前言 根据我之前的文章介绍,龙芯loongarch64服务器中的很多python依赖包安装有问题,发现其中安装的"scikit-learn"就无法正常使用,所有这里在 pip3 install scikit-learn -U -i https://pypi.tuna.tsinghua.edu.cn/simple 的时候发现"scipy"就无法正常…...
ubuntu(18.04)中安装open babel docker镜像并在php项目中调用容器中的obabel命令解析结果使用
使用软件: obabel镜像:informaticsmatters/obabel docker:http:// https://www.docker.com/ 安装docker #卸载旧版本sudo apt-get remove docker docker-engine docker-ce docker.io#更新索引包sudo apt-get update#安装 apt 依赖包&…...
02-PostgreSQL的基本使用
一、数据库操作 ①: 登录到数据库 psql -U postgres -d postgres -h 127.0.0.1②:查看所有数据库 \l③: 创建数据库 # 创建一个名为 mydb 的数据库 create database mydb;④:切换数据库 # \c 数据库名 \c mydb⑤:删除数据库 # 删除前 先确保数据库没有被连接 drop databa…...
uniapp 实现路线规划
UniApp是一个跨平台的应用开发框架,可以帮助开发者快速地在多个平台上构建应用程序。其中,实现路线规划是一个常见的需求,特别是对于地图类应用或者出行类应用来说,路线规划功能是非常重要的。 首先引入QQMapWX; impo…...
C语言C位出道心法(五):内存管理
C语言C位出道心法(一):基础语法 C语言C位出道心法(二):结构体|结构体指针|链表 C语言C位出道心法(三):共用体|枚举 C语言C位出道心法(四):文件操作 C语言C位出道心法(五):内存管理 一:C语言内存管理认知 二:C语言中内存堆|栈认知 三:C语言中引用内存丢失认知...
Flink之SQL客户端与DDL操作
SQL客户端与DDL操作 Flink SQLSQL客户端1.启动Flink2.启动Flink的SQL客户端3.HELP命令4.验证连接5.结果显示模式6.执行配置 数据库操作1.创建数据库2.查询数据库3.修改数据库4.删除数据库 表操作1.创建表表列属性表Watermark属性列PRIMARY KEY属性列PARTITIONED BY属性列WITH选…...
记录第一次银行测试岗面试【总结几点面试不要犯得错误】
LZ在一个18线小城市做测试,近来想走出自己的舒适区,去做一点不一样的测试工作。 18线地区,测试工作并不多。最好的差不多就是LZ目前待着的公司了。遂决定去魔都闯荡几年,对一个在魔都无房无车无户口的人来讲,这意味着…...
一篇带你精通php
华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记(常用) php注释 什么是…...
Go 语言函数
文章目录 Go 语言函数1. **函数的定义**:2. **参数和返回值**:3. **函数调用**:4. **多返回值**:5. **匿名函数**:6. **函数作为值**:7. **变参函数**:8. **递归函数**:9. **函数方法…...
前端小技巧: 拍平数组的6种常见方法
关于数组拍平 所谓数组拍平,就是按照顺序,把他们全放在一个数组中需要考虑多层级和嵌套的问题来彻底拍平数组 * 实现方案 1 )一般思路, 先实现一级扁平化,然后递归,直到全部扁平 function flat(arr) {const res […...
c++day6
#include <iostream>using namespace std; class Animal { public:virtual void peform() 0; }; class Monekey:public Animal { public:void peform(){cout << "猴子黑桃A" << endl;} }; class Elepthant:public Animal {void peform(){cout &l…...
LeetCode(1)合并两个有序数组【数组/字符串】【简单】
目录 1.题目2.答案3.提交结果截图 链接: 88. 合并两个有序数组 1.题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合…...
剪贴板管理软件 Paste Wizard mac中文版功能特色
Paste Wizard mac是一款剪贴板管理工具,它可以帮助用户更高效地管理剪贴板中的文本、图片、链接等内容。 Paste Wizard mac特色功能 提供了多种方式来保存和管理剪贴板中的内容。用户可以创建自定义的标签,将内容按照标签进行分类,方便快速查…...
【数据结构】树的基本性质(计算树的总结点数与叶结点数)
树的基本性质 ⭐️计算树的总结点与叶结点数💫性质1💫性质2💫例题1💫例题2 ⭐️计算树的总结点与叶结点数 💫性质1 性质1 树中的结点数等于所有结点的度数之和加1 例如上面这棵树,A的孩子为B、C、D&…...
android手机平板拓展电脑屏幕
有这么两个软件 spacedesk_driver_Win_10_64_v1065_BETA.msi 安装在电脑上 spacedeskv0.91.1_chinese.apk 安装在android设备上 同一个局域网投屏就好了。 局域网无限投屏是很吃带宽的。 建议usb共享网络,不占用带宽、延迟低。 下载地址: https:/…...
接口测试的流程
接口通俗的理解就是不同部分之间的连接通道,可以是程序之内的,也可以是不同程序之间的。一般公司都会要求做接口测试,因为这是测试前移和测试左移的一种方式,会极大的解决bug的成本。 接口测试流程 接口测试的流程一般包括&…...
用逆波兰表达式,彻底搞懂 Rust 宏的递归写法
原文:Writing complex macros in Rust: Reverse Polish Notation,作者 Ingvar Stepanyan,Cloudflare Blog。 Rust 的宏系统功能强大,但也以"难以掌握"著称。很多人读完官方文档、照着示例写了几个简单的宏之后…...
AI大模型学习指南:小白也能掌握的AI核心技能,收藏这份干货!
本文深入浅出地介绍了AI的概念、核心目标及四大研究领域,包括基础设施建设、算法研发、主要技术方向和行业解决方案。文章详细阐述了各领域代表公司及优质岗位,并特别针对算法岗位的学习路径进行了指导,帮助读者了解AI技术全貌,为…...
从NetBIOS到SMB:聊聊Windows 139/445端口那些“古早”但致命的漏洞,以及2024年我们该怎么防
从NetBIOS到SMB:Windows网络协议漏洞的演进与当代防御策略 在数字化浪潮席卷全球的今天,网络安全已成为企业生存的命脉。当我们回顾Windows操作系统的发展历程,NetBIOS和SMB这两个"元老级"网络协议的设计缺陷,至今仍在全…...
CMS系统入门指南:2026年主流建站内容管理系统推荐与对比
对于计划搭建网站的用户而言,选择一套合适的内容管理系统是首要步骤。CMS(Content Management System)能够帮助用户在不编写大量代码的前提下,完成内容的发布、管理与展示。本文将介绍CMS的基本概念,并对比几款在2026年…...
B站M4S转MP4终极指南:三分钟学会视频备份完整方案
B站M4S转MP4终极指南:三分钟学会视频备份完整方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾因B站视频突然下架而措手不…...
终极开源Spotify音乐下载工具:高效保存全网歌单与元数据
终极开源Spotify音乐下载工具:高效保存全网歌单与元数据 【免费下载链接】spotify-downloader Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found). 项目地址: https://gitcode.com/gh_mirrors/sp…...
用HackRF-One和SDRangel玩转FM广播:从接收中国之声到自制电台(保姆级图文教程)
用HackRF-One和SDRangel玩转FM广播:从接收中国之声到自制电台(保姆级图文教程) 刚拿到HackRF-One时,我对着这个黑色的小盒子研究了半天——它看起来像个U盘,却号称能接收从AM广播到卫星信号的所有无线电波。直到第一次…...
3步掌握AudioSep音频分离:用自然语言精准提取任何声音
3步掌握AudioSep音频分离:用自然语言精准提取任何声音 【免费下载链接】AudioSep Official implementation of "Separate Anything You Describe" 项目地址: https://gitcode.com/gh_mirrors/au/AudioSep AudioSep是一款革命性的音频分离工具&…...
KCN-GenshinServer:5分钟图形化GUI搭建原神私服的终极指南
KCN-GenshinServer:5分钟图形化GUI搭建原神私服的终极指南 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 你是否曾经想过拥有属于自己的原神私服,却…...
高中五大联赛中的高校认可度与专业选择优势排名
根据当前(2026年4月)最新公开资料,高中“五大联赛”(即数学、物理、化学、生物、信息学五大学科奥林匹克竞赛)在高校认可度与专业选择优势方面的排名如下: 一、高校认可度排名 综合强基计划、…...
