路徑規劃之Best-First Search算法

系列文章目錄

路徑規劃之Dijkstra算法
路徑規劃之Best-First Search算法


路徑規劃之Best-First Search算法

  • 系列文章目錄
  • 前言
  • 一、Best-First Search算法
    • 1.1 起源
    • 1.2 過程
  • 三、簡單使用


前言

Best-First Search算法和Dijkstra算法類似,都屬于BFS的擴展或改進

一、Best-First Search算法

1.1 起源

Best-First Search算法又稱最佳優先搜索算法,屬于BFS的擴展,最開始人們也嘗試過使用DFS來實現路徑規劃,效果圖如下
在這里插入圖片描述
上圖中可以看出,在實際情況中DFS處于不撞南墻不回頭的狀態,它找到的路徑并不是機器人運行的最優路徑;相比之下BFS雖然耗費時間長,代價大,但是可以找到機器人運行的最優路徑。
在這里插入圖片描述
雖然BFS能有效找到最優路徑,但是它耗費的代價過大,時間過長,于是在BFS的基礎上提出了最佳優先搜索(Best-First Search)。
Best-First Search和Dijkstra不同的地方在于每次選擇新的遍歷節點時,Dijkstra選擇離起點代價最小的點,而Best-First Search選擇離終點代價最小的節點。

1.2 過程

  1. 初始化一個優先隊列用于存儲已遍歷但未找到離終點最短路徑的結點,隊列開始只有起點;
  2. 遍歷當前節點相鄰的結點,將它們加入優先隊列中,選擇其中到終點代價最小的結點作為下一次遍歷的結點(該結點從優先隊列中踢出,成為已擴展的結點);
  3. 如果相鄰的結點中已存在優先隊列中,更新它到終點的代價;否則加入優先隊列;
  4. 重復2、3步驟直至到達終點。

該算法到終點的代價可以使用歐氏距離或者曼哈頓距離來計算,如圖所示
在這里插入圖片描述

三、簡單使用

以下就是Best-First Search算法在一個比較簡單的地圖中進行路徑規劃的過程,但該算法在應用中非常容易陷入局部最優解,使用頻率遠低于Dijkstra算法
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx 服務器 SSL 證書安裝部署

操作場景 本文檔以證書名稱 menglinfeng.top 為例。 Nginx 版本以 nginx/1.18.0 為例。 當前服務器的操作系統為 CentOS 7,由于操作系統的版本不同,詳細操作步驟略有區別。 安裝 SSL 證書前,請您在 Nginx 服務器上開啟 “443” 端口&#xf…

基于官方YOLOv4開發構建目標檢測模型超詳細實戰教程【以自建缺陷檢測數據集為例】

本文是關于基于YOLOv4開發構建目標檢測模型的超詳細實戰教程,超詳細實戰教程相關的博文在前文有相應的系列,感興趣的話可以自行移步閱讀即可:《基于yolov7開發實踐實例分割模型超詳細教程》 《YOLOv7基于自己的數據集從零構建模型完整訓練、…

springboot(ssm超市貨品信息管理系統 超市購物系統Java(codeLW)

springboot(ssm超市貨品信息管理系統 超市購物系統Java(code&LW) 開發語言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服務器:tomcat 數據庫:mysql 5.7(或8.0&am…

Linux技能篇-非交互式修改密碼

今天的文章沒有格式,簡單分享一個小技能,就是標題所說–非交互式修改密碼。 一、普通方式修改用戶密碼 最普通的修改密碼的命令就是passwd命令 [rootlocalhost ~]# passwd root Changing password for user root. New password: Retype new password:…

一文徹底看懂Python切片,Python切片理解與操作

1.什么是切片 切片是Python中一種用于操作序列類型(如列表、字符串和元組)的方法。它通過指定起始索引和結束索引來截取出序列的一部分,形成一個新的序列。切片是訪問特定范圍內的元素,就是一個Area。 說個笑話:切片不是切片,而是切片,但是又是切片。大家理解下呢(末…

高防cdn防護原理是什么,是否可以防護服務器嗎

隨著互聯網業務的迅速發展,網絡安全問題日益凸顯。在這樣的背景下,高防CDN作為一種有效的網絡安全解決方案,受到了越來越多的關注。那么高防CDN的防護原理是什么呢?接下來就跟小德一起深入了解下吧! 1. 高防CDN的基本概念 我們要明確什么是…

【云原生 Prometheus篇】Prometheus的動態服務發現機制

自動發現 一、Prometheus服務發現 理論部分1.1 Prometheus數據采集配置1.2 基于文件的服務發現1.3 基于consul的服務發現1.4 基于 Kubernetes API 的服務發現1.4.1 概念1.4.2 部分配置參數1.4.3 配置模板 二、實例一:部署基于文件的服務發現2.1 創建用于服務發現的文…

Spring事務底層原理(待完善)

EnableTransactionManagement 我們經常使用EnableTransactionManagement開啟事務, 這個注解導入一個類,Import(TransactionManagementConfigurationSelector.class), 會在spring容器增加兩個bean, AutoProxyRegistrar和ProxyTransactionManagementConfiguration. AutoProxyRe…

IDEA中常用快捷鍵

整理了一些IDEA開發常用的快捷鍵: 快捷鍵組合實現效果psvm Tab鍵 / main Tab鍵public static void main(String[] args)sout Tab鍵System.out.println()Ctrl X刪除當前行Ctrl D復制當前行AltInsert(或右鍵Generate)生成代碼(如get,set方法,構造函數等)CtrlAltT…

存儲區域

將應用程序加載到內存空間執行時,操作系統負責代碼段、數據段和BSS段的加載,并在內存中為這些段分配空間。 棧段亦由操作系統分配和管理,而不需要程序員顯示地管理;堆段由程序員自己管理,即顯示地申請和釋放空間。 進…

uniapp 輪播圖(含組件封裝,自動注冊全局組件)

效果預覽 組件封裝 src\components\SUI_Swiper.vue 可參考官網配置更多屬性 swipernavigator <script setup lang"ts"> import { ref } from vue defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) &…

WPF面試題入門篇

入門篇[2] 1. 談談什么是WPF&#xff1f; WPF&#xff08;Windows Presentation Foundation&#xff09;是微軟公司開發的一種用于創建Windows應用程序的用戶界面框架。它是.NET Framework的一部分&#xff0c;提供了一種基于XAML&#xff08;可擴展應用程序標記語言&#xf…

【算法技巧】位運算

目錄 1.概述2.位運算技巧2.1.與運算 (&)2.1.1.判斷奇偶性2.1.2.判斷一個數是否是 2 的冪2.1.3.將英文字母轉換為大寫2.1.4.代替取模運算 2.2.或運算 (|)2.2.1.將英文字母轉換為小寫 2.3.異或運算 (^)2.3.1.消除成對相同的數2.3.2.不使用臨時變量來交換兩個數2.3.3.進行英文…

一起學docker系列之八使用 Docker 安裝配置 MySQL

目錄 前言步驟 1&#xff1a;拉取 MySQL 鏡像步驟 2&#xff1a;運行 MySQL 容器步驟 3&#xff1a;檢查容器狀態步驟 4&#xff1a;進入 MySQL 容器步驟 5&#xff1a;配置 MySQL 字符編碼步驟 6&#xff1a;重啟 MySQL 容器步驟 7&#xff1a;測試字符編碼步驟 8&#xff1a;…

防止應用程序截屏(容器式,防止極域電子教室和錄屏軟件錄制)

核心原理、實現目的 1、使用Panel容器將外部窗口嵌入自己寫的程序 2、使用防止截屏的函數來對窗口透明&#xff0c;這可以使本窗口內所有窗口在錄屏軟件上消失 3、解放&#xff0c;抓取&#xff0c;存儲句柄&#xff0c;實現擺脫錄屏&#xff08;極域監控&#xff09; 程序…

用 Addon 增強 Node.js 和 Electron 應用的原生能力

前言 Node.js Addon 是 Node.js 中為 JavaScript 環境提供 C/C 交互能力的機制。其形態十分類似 Java 的 JNI&#xff0c;都是通過提供一套 C/C SDK&#xff0c;用于在 C/C 中創建函數方法、進行數據轉換&#xff0c;以便 JavaScript / Java 等語言進行調用。這樣編寫的代碼通常…

Spring - Mybatis-設計模式總結

Mybatis-設計模式總結 1、Builder模式 2、工廠模式 3、單例模式 4、代理模式 5、組合模式 6、模板方法模式 7、適配器模式 8、裝飾者模式 9、迭代器模式 雖然我們都知道有26個設計模式&#xff0c;但是大多停留在概念層面&#xff0c;真實開發中很少遇到&#xff0c;…

【數據結構】時間和空間復雜度

馬上就要進入到數據結構的學習了 &#xff0c;我們先來了解一下時間和空間復雜度&#xff0c;這也可以判斷我們的算法是否好壞&#xff1b; 如何衡量一個算法的好壞&#xff1f; 就是看它的算法效率 算法效率 算法效率分析分為兩種&#xff1a;第一種是時間效率&#xff0c;第…

C++ Qt QVariant類型使用介紹與代碼演示

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 一、QVariant基本用法二、自定義類型使用QVariant三、其它用法賦值修改和替換值使用`QVariant::setValue()`設置值復制構造函數和賦值操作比較使用`QVariant::swap()`交換值使…

CVE-2023-22515:Atlassian Confluence權限提升漏洞復現 [附POC]

文章目錄 Atlassian Confluence權限提升(CVE-2023-22515)漏洞復現 [附POC]0x01 前言0x02 漏洞描述0x03 影響版本0x04 漏洞環境0x05 漏洞復現1.訪問漏洞環境2.構造POC3.復現 0x06 修復建議 Atlassian Confluence權限提升(CVE-2023-22515)漏洞復現 [附POC] 0x01 前言 免責聲明&…