【算法設計與分析】實驗8:分支限界—TSP問題

目錄

一、實驗目的

二、實驗環境

三、實驗內容

四、核心代碼

五、記錄與處理

六、思考與總結

七、完整報告和成果文件提取鏈接

一、實驗目的

????????掌握分支界限求解問題的思想;針對不同的問題,能夠利用分支界限法進行問題拆分和求解以及時間復雜度分析,并利用JAVA/C/C++等編程語言將算法轉換為對應的程序上機運行(語言不限)。

二、實驗環境

????????1、機房電腦? Window11

????????2、Eclipse/devc++

三、實驗內容

實驗要求:

①分支限界求解問題的策略及思路;(BFS廣度優先搜索)

分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜索問題的解空間樹。

【求解過程】

在分支限界法中,每一個活結點只有一次機會成為擴展結點。

1.活結點一旦成為擴展結點,就一次性產生其所有兒子結點。當前點從活動節點隊列中刪去;

2.兒子結點中,不可行解或非最優解結點刪去,其余兒子結點被加入活結點列表中;

3.從活結點表中取下一結點成為當前擴展結點;

4.重復上述結點擴展過程。直至活動結點列表為空;

活結點擴展順序:先進入活結點列表,優先變為擴展節點

?? 活結點存儲結構是隊列Queue

②分析與回溯法求解問題的異同;

分支限界法與回溯法的不同之處:

(1)求解目標:

?回溯法:一般是找出解空間樹中滿足約束條件的所有解,也可找最優解的樹;

分支限界法:找出滿足約束條件的一個解,或是在滿足約束條件的解中找出在某種意義下的最優解。

(2)搜索方式的不同:

回溯法:以深度優先的方式搜索解空間樹;

分支限界法:以廣度優先或以最小耗費優先的方式搜索解空間樹。

③掌握基于分支限界的TSP旅行商問題的設計求解;

針對如下問題,給出基于優先隊列分支限界的算法設計策略。

如下4個城市,城市間的耗費如圖。從城市1出發進行遍歷。尋找最短遍歷路徑。

首先分析該問題的解空間樹,它是一棵排列樹:

它的特點如下:

(1)指定一個城市作為出發城市

(2)把第n-1層結點看做葉子結點

1.算法開始時創建一個最小堆,用于表示活結點優先隊列

2.堆中每個結點的優先級為:cc+lcostcc為出發城市到當前城市的路程,lcost是當前頂點最小出邊+剩余頂點最小出邊和

3.每次從優先隊列中取出一個活結點成為擴展結點

4. s=n-2,擴展出的結點是排列樹中某個葉子結點的父結點。如該葉結點相應一條可行回路且費用小于當前最優解bestc,則將該結點插入到優先隊列中,否則舍去該結點

5. s<n-2,產生當前擴展結點的所有兒子結點。計算可行兒子。結點的優先級cc+lcost及相關信息。當cc+lcost<bestc時,將這個可行兒子結點插入到活結點優先隊列中。

④對上述算法進行時間復雜性分析,分析時間復雜度對比。

????????回溯法是一種通過探索所有可能的候選解來找出所有解的算法。在解決TSP問題時,回溯法會生成一棵解空間樹,其中每個節點代表一個可能的城市訪問順序,葉子節點代表一個完整的訪問序列。

????? 對于n個城市,解空間樹是一個n-1層的完全二叉樹,這棵樹的節點總數是(n-1)!

????? 在最壞情況下,回溯法需要遍歷解空間樹的所有節點來找到最短路徑。因此,時間復雜度是O((n-1)!),但由于(n-1)!與n!相差不大,通常可以簡化為O(n!)。

????? 分支限界法解決TSP問題的時間復雜度在最壞情況下也是O(n!),然而,在實際應用中,通過剪枝操作,分支限界法大大減少了實際搜索空間,因此平均運行時間優于蠻力算法。

四、核心代碼

//用這種簡單粗暴的方法獲取必定小于結果的一個值
void get_low()
{//取每行最小值之和作為下界low = 0;for (int i = 1; i <= n; i++){//創建一個等同于map的臨時數組,可用memcpyint tmpA[MAX_N];for (int j = 1; j <= n; j++){tmpA[j] = cost[i][j];}sort(tmpA + 1, tmpA + 1 + n);//對臨時的數組進行排序low += tmpA[1];}
}
int get_lb(Node p)
{int ret = p.sumv * 2;//路徑上的點的距離的二倍int min1 = INF, min2 = INF;//起點和終點連出來的邊for (int i = 1; i <= n; i++){if (!p.visited[i] && min1 > cost[i][p.s]){min1 = cost[i][p.s];}}ret += min1;for (int i = 1; i <= n; i++){if (!p.visited[i] && min2 > cost[p.e][i]){min2 = cost[p.e][i];}}ret += min2;for (int i = 1; i <= n; i++){if (!p.visited[i]){min1 = min2 = INF;for (int j = 1; j <= n; j++){if (min1 > cost[i][j])min1 = cost[i][j];}for (int j = 1; j <= n; j++){if (min2 > cost[j][i])min2 = cost[j][i];}ret += min1 + min2;}}return (ret + 1) / 2;
}

五、記錄與處理

此處定義INF無窮大為100000,即對角線為INF

六、思考與總結

通過分析回溯法和分支限界法的時間復雜度以及實際運行效率,我深刻認識到了算法優化的重要性。我學會了如何使用限界函數和剪枝策略來減少搜索空間,從而提高算法的運行效率。

七、完整報告和成果文件提取鏈接

完整可運行代碼以及相關實驗報告以下鏈接可獲取:
鏈接: https://pan.baidu.com/s/1iss6-C2nxZQGkEpo-WDn0A?pwd=g5cg 提取碼: g5cg?

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

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

相關文章

【3】阿里面試題整理

[1]. ES架構&#xff0c;如何進行路由以及選主 路由&#xff1a;在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默認的路由算法是基于文檔的_id。具體來說&#xff0c;Elasticsearch會對文檔的_id進行哈希計算&#xff0c;然后對分片數量取模&#xff0c;以確定該文…

【Linux】opencv在arm64上提示找不到libjasper-dev

解決opencv在arm64上提示找不到libjasper-dev的問題。 本文首發于?慕雪的寒舍 問題說明 最近我在嘗試編譯opencv&#xff0c;安裝依賴項libjasper1和libjasper-dev的時候就遇到了這個問題。在amd64平臺上&#xff0c;我們可以通過下面的命令安裝&#xff08;ubuntu18.04&…

【數據結構】_時間復雜度相關OJ(力扣版)

目錄 1. 示例1&#xff1a;消失的數字 思路1&#xff1a;等差求和 思路2&#xff1a;異或運算 思路3&#xff1a;排序&#xff0b;二分查找 2. 示例2&#xff1a;輪轉數組 思路1&#xff1a;逐次輪轉 思路2&#xff1a;三段逆置&#xff08;經典解法&#xff09; 思路3…

基于微信小程序的電子商城購物系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

【linux】Linux 常見目錄特性、權限和功能

目錄特性默認權限主要功能/用途/根目錄&#xff0c;所有目錄的起點755文件系統的頂層目錄&#xff0c;包含所有其他子目錄和文件/bin基礎二進制命令目錄&#xff08;系統啟動和修復必需的命令&#xff09;755存放所有用戶可用的基本命令&#xff08;如 ls, cp, bash 等&#xf…

docker直接運行arm下的docker

運行環境是樹莓派A 處理器是 arm32v6 安裝了docker&#xff0c;運行lamp 編譯安裝php的時候發現要按天來算&#xff0c;于是用電腦vm下的Ubuntu系統運行arm的docker 然后打包到a直接導入運行就可以了 第一種方法 sudo apt install qemu-user-static 導入直接運行就可以了…

計算機網絡一點事(22)

地址解析協議ARP ARP&#xff1a;查詢Mac地址 ARP表&#xff08;ARP緩存&#xff09;&#xff1a;記錄映射關系&#xff0c;一個數據結構&#xff0c;定期更新ARP表 過程&#xff1a;請求分組&#xff0c;響應分組 動態主機配置協議DHCP 分配IP地址&#xff0c;配置默認網關…

tomcat核心組件及原理概述

目錄 1. tomcat概述 1.1 概念 1.2 官網地址 2. 基本使用 2.1下載 3. 整體架構 3.1 核心組件 3.2 從web.xml配置和模塊對應角度 3.3 如何處理請求 4. 配置JVM參數 5. 附錄 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一個開源、免費、輕量級的Web服務器。 Tomca…

科技快訊 | OpenAI首次向免費用戶開放推理模型;特朗普與黃仁勛會面;雷軍回應“10后小學生深情表白小米SU7”

不用開口&#xff1a;谷歌 AI 幫你致電商家&#xff0c;價格、預約一鍵搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”實驗性功能&#xff0c;用戶可利用AI代替自己致電商家咨詢價格和服務。該功能已與美汽車修理廠和美甲沙龍店合作&#xff0c;用戶需加入Search Labs并…

帆軟 FCA -業務分析師認證學習

帆軟 FCA -業務分析師認證學習 認證概述 適合人群 企業中有需求管理、指標梳理、業務邏輯梳理、項目規劃等需求的人員&#xff0c;想提升綜合數據能力、推進數據應用落地的業務/IT骨干。 具體-FCA-業務分析理論 考試要求&#xff1a; FCA-業務分析理論考試- 費用&#xff1a…

Vue.js路由管理與自定義指令深度剖析

Vue.js 是一個強大的前端框架,提供了豐富的功能來幫助開發者構建復雜的單頁應用(SPA)。本文將詳細介紹 Vue.js 中的自定義指令和路由管理及導航守衛。通過這些功能,你可以更好地控制視圖行為和應用導航,從而提升用戶體驗和開發效率。 1 自定義指令詳解 1.1 什么是自定義…

Maya軟件安裝步驟與百度網盤鏈接

軟件簡介&#xff1a; MAYA軟件是Autodesk旗下的著名三維建模和動畫軟件。maya軟件功能更為強大&#xff0c;體系更為完善&#xff0c;因此國內很多的三維動畫制作人員都開始轉向maya&#xff0c;maya軟件已成為三維動畫軟件的主流。 百度網盤鏈接: https://pan.baidu.com/s…

kamailio的部分模塊的解釋及代碼示例【文章由DeekSeek大模型提供】

以下是 Kamailio 中這些模塊的詳細說明及示例代碼&#xff1a; 1. tls.so 作用&#xff1a;提供 TLS 支持&#xff0c;用于加密 SIP 通信。示例&#xff1a;loadmodule "tls.so" modparam("tls", "certificate", "/etc/kamailio/tls/serve…

深入理解linux中的文件(上)

1.前置知識&#xff1a; &#xff08;1&#xff09;文章 內容 屬性 &#xff08;2&#xff09;訪問文件之前&#xff0c;都必須打開它&#xff08;打開文件&#xff0c;等價于把文件加載到內存中&#xff09; 如果不打開文件&#xff0c;文件就在磁盤中 &#xff08;3&…

一個用于測試的 HL7 Server

說明 一個用于測試的 HL7 Server。在過NIST的認證時&#xff0c;需要演示檢驗數據通過HL7進行傳輸&#xff0c;所以寫了這工具。 HL7的消息解析和編碼使用了NHapi。包含兩個服務&#xff1a; ReceiveServiceSendService 這2個服務都繼承自 BaseService public class BaseSe…

使用 Go 和 gqlgen 實現 GraphQL API:實戰指南

使用 Go 和 gqlgen 實現 GraphQL API&#xff1a;實戰指南 在本文中&#xff0c;我將分享如何使用 Go 語言和 gqlgen 框架實現一個完整的 GraphQL API。我們將構建一個包含用戶、文章和評論功能的博客系統 API。 技術棧 Gogqlgen (GraphQL 框架)MySQL (數據存儲)Redis (緩存…

matlab快速入門(2)-- 數據處理與可視化

MATLAB的數據處理 1. 數據導入與導出 (1) 從文件讀取數據 Excel 文件&#xff1a;data readtable(data.xlsx); % 讀取為表格&#xff08;Table&#xff09;CSV 文件&#xff1a;data readtable(data.csv); % 自動處理表頭和分隔符文本文件&#xff1a;data load(data.t…

洛谷題目 P5994 [PA 2014] Kuglarz 題解 (本題較難)

題目傳送門&#xff1a; P5994 [PA 2014] Kuglarz - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 前言&#xff1a; 本題涉及到最小生成樹中的 kruskal 算法和并查集算法&#xff0c;圖論基礎概念兩大知識點&#xff0c;瞎按對萊索沒有學過圖論的或最小生成樹的可能會對這道…

消息隊列篇--通信協議篇--網絡通信模型(OSI7層參考模型,TCP/IP分層模型)

一、OSI參考模型&#xff08;Open Systems Interconnection Model&#xff09; OSI參考模型是一個用于描述和標準化網絡通信功能的七層框架。它由國際標準化組織&#xff08;ISO&#xff09;提出&#xff0c;旨在為不同的網絡設備和協議提供一個通用的語言和結構&#xff0c;以…

C# Winform制作一個登錄系統

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登錄 {p…