【算法設計與分析】實驗3:動態規劃—最長公共子序列

目錄

一、實驗目的

二、實驗環境

三、實驗內容

四、核心代碼

五、記錄與處理

六、思考與總結

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


一、實驗目的

????????掌握動態規劃求解問題的思想;針對不同的問題,會利用動態規劃進行設計求解以及時間復雜度分析,并利用JAVA/C/C++等編程語言開展編碼實踐(語言自選)。

????????理解兩組序列的最長公共子序列問題,能夠利用動態規劃,開展問題的最優子結構性質分析、子結構遞歸關系構建、自底向上最優值求解以及最優解構造。

二、實驗環境

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

????????2、Eclipse/Dev-C++等

三、實驗內容

????????實驗要求:

????????①掌握動態規劃求解問題的策略及思路;

????????①基于動態規劃開展最長公共子序列問題的算法設計與優化;

????????③對上述算法進行時間復雜性分析,并輸出程序運行時間及運行結果。

實驗原理:

1、按照自己的理解,總結描述動態規劃求解問題的思路策略;

??? 動態規劃是針對于遞歸分治所存在的缺點而設計出來的算法思想,遞歸分治算法存在大量子問題被重復計算,效率低下的問題,如下圖,多個子節點在不同的遞歸表達式中被重復計算,增加了算法冗余度。

????? 而在動態規劃的算法中,雖然與分治法類似,但是動態規劃卻在思考如果能夠保存已解決的子問題的答案,而在需要時再直接找出已求得的節點,就可以避免大量重復計算,從而得到多項式時間算法,這樣就可以避免同一個問題被多次計算的問題,如下圖。

動態規劃是解決具有重疊子問題和最優子結構性質的問題的有效方法。 它的基本原理是將大問題分解為小問題,通過保存中間結果來避免重復計算,從而提高算法的效率。動態規劃方法所耗時往往遠少于一般解法。

2、針對最長公共子序列問題,如何利用動態規劃進行建模設計與優化;

①給出求解過程及建模思路,以及子序列的構造原理;

????? 用動態規劃算法可以解決最長公共子序列這一經典問題,公共子序列問題,尋找兩個字符串中都存在的最長子序列,這個最長子序列可以不是連續的,但是要保證其相對順序一樣

先找出最優問題特點:設有兩個序列X={ x1 , x2 ,…, xm }和Y={ y1 , y2 ,…, yn }的最長公共子序列為Z={ z1 , z2 ,…, zk }

(1)若xm =yn ,則zk =xm =yn ,且zk-1xm-1yn-1 的最長公共子序列。

(2)若xmyn ?且Zkxm ,則zkxm-1 和Y的最長公共子序列。

(3)若xmyn ?且Zkyn ,則zk 是X和yn-1 的最長公共子序列。

所以2個序列的最長公共子序列包含了這2個序列的前綴的最長公共子序列,最長公共子序列問題具有最優子結構性質

定義遞歸關系;根據以上已經求得的最長公共子序列問題的性質,我們可以知道如下圖:

根據此遞歸關系我們可以求得以下遞歸方程,其中c [i][j]數組記錄序列的最長公共子序列長度。首先當i=0或j=0時,有一個序列為空,所以c [i][j]=0

該算法的時間復雜度為O(m n)

②針對序列X={a,b,a,d,e},Y={a,r,f,a,e},給出子結構二維數組。

根據上列的c[i][j]表達式可以求出:

X

Y

?

a

b

a

d

e

?

0

0

0

0

0

0

a

0

1

1

1

1

1

r

0

1

1

1

1

1

f

0

1

1

1

1

1

a

0

1

1

2

2

2

e

0

1

1

2

2

3

由此表可知公共子序列長度為3,是aae

四、核心代碼

int c[10001][10001];		//數組記錄序列的最長公共子序列長度
int b[10001][10001];		//標記是遞歸關系中的哪一種情況 void LCS_num(int m,int n,char *X,char *Y){for(int i=1;i<=m;i++){	//首先當i=0或j=0時,代表有一個序列為空,所以c [i][j]=0c[i][0]=0;}for(int j=1;j<=n;j++){c[0][j]=0;}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(X[i-1]==Y[j-1]){				//當X序列的第i個元素和Y序列的第j個元素相等時 c[i][j]=c[i-1][j-1]+1;		//那么當前i元素一定再最長公共子序列里,長度+1 b[i][j]=1;					//b數組用來標記1,表示此情況}else if(c[i-1][j]>=c[i][j-1]){	//如果不相等,此時分兩種情況進行比較 c[i][j]=c[i-1][j];		b[i][j]=2;				}else{					c[i][j]=c[i][j-1];b[i][j]=3;			}}}

五、記錄與處理

實驗數據及結果分析:

輸入實例中的數據,與自行計算的結果一致,同時還輸出了b數組,代表每個字符進行匹配的情況。

b數組標記1,表示X序列的第i個元素和Y序列的第j個元素相等;

b數組標記2,表示{X減去最后一個元素}與Y的最長公共子序列的序列較大;

b數組標記3,X與 {Y減去最后一個元素}的最長公共子序列的序列較大。

最長公共子序列為3,aae

六、思考與總結

動態規劃算法通常分為以下幾個步驟:

找出最優問題特點:明確問題的最優解具有什么樣的性質,這是使用動態規劃的前提。

定義遞歸關系:根據問題的最優子結構,建立子問題之間的遞歸關系,這是動態規劃的核心。

自底向上計算每一步結果:利用遞歸關系,從最小的子問題開始,逐步求解更大的子問題,直到求解出原問題。

構造最優解:根據保存的中間結果,構造出原問題的最優解。

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

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

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

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

相關文章

動手學圖神經網絡(3):利用圖神經網絡進行節點分類 從理論到實踐

利用圖神經網絡進行節點分類:從理論到實踐 前言 在之前的學習中,大家對圖神經網絡有了初步的了解。本次教程將深入探討如何運用圖神經網絡(GNNs)來解決節點分類問題。在節點分類任務里,大家往往僅掌握少量節點的真實標簽,卻要推斷出其余所有節點的標簽,這屬于歸納式學…

單片機串口打印printf函數顯示內容(固件庫開發)

1.hal_usart.c 文件 #include <stdio.h> #include "hal_usart.h" #include "stm32F10x.h"//**要根據 使用的是哪個串口 對應修改 串口號 eg&#xff1a;USART1** void USART_PUTC(char ch) {/* 等待數據寄存器為空 */while((USART1->SR & …

網關登錄校驗

網關登錄校驗 單體架構時我們只需要完成一次用戶登錄、身份校驗&#xff0c;就可以在所有業務中獲取到用戶信息。而微服務拆分后&#xff0c;每個微服務都獨立部署&#xff0c;不再共享數據。也就意味著每個微服務都需要做登錄校驗&#xff0c;這顯然不可取。 鑒權思路分析 …

wxwidgets直接獲取系統圖標,效果類似QFileIconProvider

目前只做了windows版本&#xff0c;用法類似QFileIconProvider // 頭文件 #ifndef WXFILEICONPROVIDER_H #define WXFILEICONPROVIDER_H#include <wx/wx.h> #include <wx/icon.h> #include <wx/image.h> #include <wx/bmpcbox.h> // Include for wxB…

我的創作紀念日——成為創作者的 第365天(1年)

機緣 考研的結果讓我感到一陣絕望&#xff0c;就像單片機突然死機一樣&#xff0c;所有的努力像是被一場意外的中斷指令打亂了邏輯流程。曾經本科時因為競賽拿了一堆獎&#xff0c;內心充滿虛榮心和成就感&#xff0c;總覺得自己是一個“天選之子”&#xff0c;但考研的失利卻像…

React 封裝高階組件 做路由權限控制

React 高階組件是什么 官方解釋∶ 高階組件&#xff08;HOC&#xff09;是 React 中用于復用組件邏輯的一種高級技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一種基于 React 的組合特性而形成的設計模式。 高階組件&#xff08;HOC&#xff09;就是一個函數&…

【玩轉全棧】--創建一個自己的vue項目

目錄 vue介紹 創建vue項目 vue頁面介紹 element-plus組件庫 啟動項目 vue介紹 Vue.js 是一款輕量級、易于上手的前端 JavaScript 框架&#xff0c;旨在簡化用戶界面的開發。它采用了響應式數據綁定和組件化的設計理念&#xff0c;使得開發者可以通過聲明式的方式輕松管理數據和…

DS并查集(17)

文章目錄 前言一、何為并查集&#xff1f;二、并查集的實現&#xff1f;并查集的初始化查找元素所在的集合判斷兩個元素是否在同一個集合合并兩個元素所在的集合獲取并查集中集合的個數并查集的路徑壓縮 三、來兩道題練練手&#xff1f;省份的數量等式方程的可滿足性 總結 前言…

Appium介紹

在使用不同版本的Appium包進行自動化測試時&#xff0c;出現警告問題可能是由于版本不兼容、配置不正確等原因導致的。下面將詳細介紹解決這些問題的步驟&#xff0c;確保模擬器能夠正常啟動&#xff0c;并能在Appium查看器中同步顯示。 1. 環境準備 首先&#xff0c;確保你已…

minimind - 從零開始訓練小型語言模型

大語言模型&#xff08;LLM&#xff09;領域&#xff0c;如 GPT、LLaMA、GLM 等&#xff0c;雖然它們效果驚艷&#xff0c; 但動輒10 Bilion龐大的模型參數個人設備顯存遠不夠訓練&#xff0c;甚至推理困難。 幾乎所有人都不會只滿足于用Lora等方案fine-tuing大模型學會一些新的…

【C++動態規劃 離散化】1626. 無矛盾的最佳球隊|2027

本文涉及知識點 C動態規劃 離散化 LeetCode1626. 無矛盾的最佳球隊 假設你是球隊的經理。對于即將到來的錦標賽&#xff0c;你想組合一支總體得分最高的球隊。球隊的得分是球隊中所有球員的分數 總和 。 然而&#xff0c;球隊中的矛盾會限制球員的發揮&#xff0c;所以必須選…

CSS 值和單位詳解:從基礎到實戰

CSS 值和單位詳解&#xff1a;從基礎到實戰 1. 什么是 CSS 的值&#xff1f;示例代碼&#xff1a;使用顏色關鍵字和 RGB 函數 2. 數字、長度和百分比2.1 長度單位絕對長度單位相對長度單位 2.2 百分比 3. 顏色3.1 顏色關鍵字3.2 十六進制 RGB 值3.3 RGB 和 RGBA 值3.4 HSL 和 H…

Privacy Eraser,電腦隱私的終極清除者

Privacy Eraser 是一款專為保護用戶隱私而設計的全能型軟件&#xff0c;它不僅能夠深度清理計算機中的各類隱私數據&#xff0c;還提供了多種系統優化工具&#xff0c;幫助用戶提升設備的整體性能。通過這款軟件&#xff0c;用戶可以輕松清除瀏覽器歷史記錄、緩存文件、Cookie、…

Android 啟動流程

一 Bootloader 階段 在嵌入式系統中&#xff0c;Bootloader的引導過程與傳統的PC環境有所不同&#xff0c;主要是因為嵌入式系統的硬件配置和應用場景更加多樣化。以下是嵌入式系統中Bootloader被引導的一般流程&#xff1a; 1. 硬件復位 當嵌入式設備上電或復位時&#xff…

【數據結構與算法】AVL樹的插入與刪除實現詳解

文章目錄 前言Ⅰ. AVL樹的定義Ⅱ. AVL樹節點的定義Ⅲ. AVL樹的插入Insert一、節點的插入二、插入的旋轉① 新節點插入較高左子樹的左側&#xff08;左左&#xff09;&#xff1a;右單旋② 新節點插入較高右子樹的右側&#xff08;右右&#xff09;&#xff1a;左單旋③ 新節點插…

SCRM開發為企業提供全面客戶管理解決方案與創新實踐分享

內容概要 在當今的商業環境中&#xff0c;客戶關系管理&#xff08;CRM&#xff09;變得越來越重要。而SCRM&#xff08;社交客戶關系管理&#xff09;作為一種新興的解決方案&#xff0c;正在幫助企業徹底改變與客戶的互動方式。快鯨SCRM是一個引人注目的工具&#xff0c;它通…

AI應用部署——streamlit

如何把項目部署到一個具有公網ip地址的服務器上&#xff0c;讓他人看到&#xff1f; 可以利用 streamlit 的社區云免費部署 1、生成requirements.txt文件 終端輸入pip freeze > requirements.txt即可 requirements.txt里既包括自己安裝過的庫&#xff0c;也包括這些庫的…

【C/C++】區分0、NULL和nullptr

&#x1f984;個人主頁:小米里的大麥-CSDN博客 &#x1f38f;所屬專欄:C_小米里的大麥的博客-CSDN博客 &#x1f381;代碼托管:C: 探索C編程精髓&#xff0c;打造高效代碼倉庫 (gitee.com) ??操作環境:Visual Studio 2022 目錄 1. 0 和空指針 2. NULL 3. nullptr 總結 …

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.1 NumPy高級索引:布爾型與花式索引的底層原理

2.1 NumPy高級索引&#xff1a;布爾型與花式索引的底層原理 目錄 #mermaid-svg-NpcC75NxxU2mkB3V {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NpcC75NxxU2mkB3V .error-icon{fill:#552222;}#mermaid-svg-NpcC75…

云原生(五十二) | DataGrip軟件使用

文章目錄 DataGrip軟件使用 一、DataGrip基本使用 二、軟件界面介紹 三、附件文件夾到項目中 四、DataGrip設置 五、SQL執行快捷鍵 DataGrip軟件使用 一、DataGrip基本使用 1. 軟件界面介紹 2. 附加文件夾到項目中【重要】 3. DataGrip配置 快捷鍵使用&#xff1a;C…