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的成本。 接口测试流程 接口测试的流程一般包括&…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
