第十七次博客打卡

今天學習的內容是動態規劃算法。

?動態規劃算法(Dynamic Programming,簡稱 DP)是一種通過將復雜問題分解為更小的子問題來求解的算法思想。它主要用于解決具有重疊子問題和最優子結構特性的問題。

?

?

一、動態規劃的基本概念

?

?

1. 最優子結構

?

? 一個復雜問題的最優解可以由其子問題的最優解組合而成。換句話說,問題的最優解包含其子問題的最優解。例如,在背包問題中,如果一個物品被選擇放入背包,那么剩余容量下的最優解就是子問題的最優解。

?

2. 重疊子問題

?

? 在求解過程中,相同的子問題會被多次計算。動態規劃通過存儲這些子問題的解(通常使用一個表格),避免重復計算,從而提高效率。例如,在計算斐波那契數列時,`F(n) = F(n-1) + F(n-2)`,如果不使用動態規劃,會重復計算很多子問題。

?

?

二、動態規劃的解題步驟

?

?

1. 定義狀態

?

?狀態是動態規劃的核心,它表示問題的某個階段的解。狀態的定義需要滿足兩個條件:能夠唯一表示問題的子問題,并且能夠通過狀態之間的關系推導出最終解。

?

2. 狀態轉移方程

?

?狀態轉移方程描述了狀態之間的關系,即如何從已知的狀態推導出新的狀態。這是動態規劃的關鍵部分。

?

3. 初始化

?

? 確定動態規劃的初始化。

經典問題

1.最長遞增子序列(LIS)

?

? 給定一個序列,求其最長遞增子序列的長度。例如,對于序列`[10, 9, 2, 5, 3, 7, 101, 18]`,最長遞增子序列是`[2, 3, 7, 18]`,長度為 4。

?

? 狀態定義:`dp[i]`表示以第`i`個元素結尾的最長遞增子序列的長度。

?

? 狀態轉移方程:

\[

dp[i]=\max{0\le j<i\text{且}a_j<a_i}(dp[j]+1)

\]

其中,`a`是輸入序列。

?

? 初始化:`dp[i] = 1`(每個元素自身可以構成長度為 1 的遞增子序列)。

?

? 計算順序:從`i = 0`到`n - 1`。

?

動態規劃的優化技巧

?

?

1. 空間優化

?

? 在許多情況下,可以將二維動態規劃表優化為一維數組。例如,在背包問題中,如果只關心最終結果,可以將`dp[i][j]`優化為`dp[j]`,通過從后向前更新`dp[j]`來避免覆蓋問題。

?

2. 二分查找優化

?

? 在某些動態規劃問題中,可以結合二分查找來優化狀態轉移。例如,在最長遞增子序列問題中,可以使用二分查找來快速找到合適的插入位置,從而將時間復雜度從\(O(n^2)\)優化到\(O(n\log n)\)。

?

3. 滾動數組

?

? 當狀態轉移只依賴于前幾行時,可以使用滾動數組來減少空間復雜度。例如,在二維動態規劃中,如果狀態轉移只依賴于前一行,可以只使用兩個一維數組交替更新。

?

動態規劃是一種強大的算法思想,通過合理定義狀態和狀態轉移方程,可以高效地解決許多復雜問題。

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

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

相關文章

視覺革命來襲!ComfyUI-LTXVideo 讓視頻創作更高效

探索LTX-Video 支持的ComfyUI 在數字化視頻創作領域&#xff0c;視頻制作效果的提升對創作者來說無疑是一項重要的突破。LTX-Video支持的ComfyUI便是這樣一款提供自定義節點的工具集&#xff0c;它專為改善視頻質量、提升生成速度而開發。接下來&#xff0c;我們將詳細介紹其功…

Java版ERP管理系統源碼(springboot+VUE+Uniapp)

ERP系統是企業資源計劃&#xff08;Enterprise Resource Planning&#xff09;系統的縮寫&#xff0c;它是一種集成的軟件解決方案&#xff0c;用于協調和管理企業內各種關鍵業務流程和功能&#xff0c;如財務、供應鏈、生產、人力資源等。它的目標是幫助企業實現資源的高效利用…

CenOS7切換使用界面

永久切換 在開始修改之前&#xff0c;我們首先需要查看當前的啟動模式。可以通過以下命令來實現&#xff1a; systemctl get-default執行此命令后&#xff0c;系統會返回當前的默認啟動模式&#xff0c;例如graphical.target表示當前默認啟動為圖形界面模式。 獲取root權限&…

Dify使用總結

最近完成了一個Dify的項目簡單進行總結下搭建服務按照官方文檔操作就行就不寫了。 進入首頁之后由以下組成&#xff1a; 探索、工作室、知識庫、工具 探索&#xff1a; 可以展示自己創建的所有應用&#xff0c;一個應用就是一個APP&#xff0c;可以進行測試使用 工作室包含…

計網學習筆記———網絡

&#x1f33f;網絡是泛化的概念 網絡是泛化的概念 &#x1f342;泛化理解 網絡的概念在生活中無處不在舉例&#xff1a;社交網絡、電話網路、電網、計算機網絡 &#x1f33f;網絡的定義 定義&#xff1a; 離散的個體通過通訊手段連成群體&#xff0c;實現資源的共享與交流、個…

《Python星球日記》 第53天:卷積神經網絡(CNN)入門

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、圖像表示與通道概念1. 數字圖像的本質2. RGB顏色模型3. 圖像預處理 二、卷積…

SpringBoot2集成xxl-job詳解

官方教程 搭建調度中心 Github Gitee 注&#xff1a;版本3.x開始要求Jdk17&#xff1b;版本2.x及以下支持Jdk1.8。如對Jdk版本有訴求&#xff0c;可選擇接入不同版本 clone源代碼執行xxl-job\doc\db\tables_xxl_job.sql # # XXL-JOB v2.4.1 # Copyright (c) 2015-present, x…

HashMap中put()方法的執行流程

HashMap 是 Java 中最常用的數據結構之一&#xff0c;用于存儲鍵值對。其 put() 方法是向哈希表中插入或更新鍵值對的核心操作。本文將詳細解析 put() 方法的執行過程&#xff0c;涵蓋哈希值計算、桶定位、沖突處理和擴容等步驟。 一、put() 方法的執行過程 put() 方法通過一系…

【Oracle認證】MySQL 8.0 OCP 認證考試英文版(MySQL30 周年版)

文章目錄 1、MySQL OCP考試介紹2、考試注冊流程3、考試復習題庫 Oracle 為慶祝 MySQL 30 周年&#xff0c;截止到2025.07.31 之前。所有人均可以免費考取原價245美元 &#xff08;約1500&#xff09;的MySQL OCP 認證。 1、MySQL OCP考試介紹 OCP考試 OCP認證是Oracle公司推…

SpringBoot框架開發網絡安全科普系統開發實現

概述 基于SpringBoot框架的網絡安全科普系統開發指南&#xff0c;該系統集知識科普、案例學習、在線測試等功能于一體&#xff0c;本文將詳細介紹系統架構設計、功能實現及技術要點&#xff0c;幫助開發者快速構建專業的網絡安全教育平臺。 主要內容 系統功能架構 本系統采…

瀏覽器HTTP錯誤、前端常見報錯 和 Java后端報錯

以下是 瀏覽器HTTP錯誤、前端常見報錯 和 Java后端報錯 的綜合整理&#xff0c;包括原因和解決方法&#xff0c;幫助你快速排查問題。 一、HTTP 錯誤&#xff08;瀏覽器報錯&#xff09; 錯誤碼原因解決方法400 Bad Request請求語法錯誤&#xff08;如參數格式錯誤、請求體過…

TypeScript簡介

&#x1f31f; TypeScript入門 TypeScript 是 JavaScript 的超集&#xff0c;由微軟開發并維護&#xff0c;通過靜態類型檢查和現代語言特性&#xff0c;讓大型應用開發變得更加可靠和高效。 // 一個簡單的 TypeScript 示例 interface User {name: string;age: number;greet():…

[ctfshow web入門] web57

信息收集 這下把.也過濾了&#xff0c;臨時文件上傳無法使用了 //flag in 36.php if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\;|[a-z]|[0-9]|\|\|\#|\|\"|\|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\|\[/i", $c)){system("cat ".$c…

Android 移動應用開發:頁面跳轉與數據傳遞功能

目錄 ? 運行效果說明 &#x1f4c1; 文件一&#xff1a;MainActivity.java&#xff08;語言&#xff1a;Java&#xff09; &#x1f4c1; 文件二&#xff1a;Edit_MainActivity.java&#xff08;語言&#xff1a;Java&#xff09; &#x1f4c1; 文件三&#xff1a;activi…

MySQL如何優雅的執行DDL

一、概述 在MySQL中&#xff0c;DDL&#xff08;數據定義語言&#xff09;語句用于定義和管理數據庫結構&#xff0c;包括創建、修改和刪除數據庫對象&#xff08;如表、索引等&#xff09;。執行DDL操作時&#xff0c;需要謹慎處理&#xff0c;以避免對生產環境的穩定性和性能…

onenet連接微信小程序(mqtt協議)

一、關于mqtt協議 mqtt協議常用于物聯網&#xff0c;是一種輕量級的消息推送協議。 其中有三個角色&#xff0c;Publisher設備&#xff08;客戶端&#xff09;發布主題到服務器&#xff0c;其他的設備通過訂閱主題&#xff0c;獲取該主題下的消息&#xff0c;Publisher可以發…

【Unity筆記】實現支持不同渲染管線的天空盒曝光度控制組件(SkyboxExposureController)——參數化控制

寫在前面 在Unity中&#xff0c;天空盒&#xff08;Skybox&#xff09;不僅承擔視覺上的背景作用&#xff0c;更是場景環境光照與氛圍塑造的重要組成部分。不同時間、天氣、場景轉換等&#xff0c;都需要靈活調整天空的亮度。而**曝光度&#xff08;Exposure&#xff09;**就是…

blender云渲染指南2025版

一、云渲染核心概念 Blender云渲染是將本地渲染任務遷移到云端服務器集群的技術&#xff0c;通過分布式計算實現效率提升100倍以上的解決方案&#xff0c;其核心邏輯是&#xff1a;用戶上傳Blender項目文件至【渲染101】等云平臺&#xff0c;云端調用高性能服務器&#xff08;…

火語言RPA--七牛云存儲

【組件功能】&#xff1a;存儲本地文件至七牛云 選擇本地文件&#xff0c;通過七牛云存儲配置上傳至七牛云對象存儲的指定地域指定存儲桶指定路徑。 配置預覽 配置說明 AccessKey 支持T或# 前往官網獲取或創建。參考鏈接&#xff1a;https://portal.qiniu.com/user/key Se…

小剛說C語言刷題—1004階乘問題

1.題目描述 編程求 123?n 。 輸入 輸入一行&#xff0c;只有一個整數 n(1≤n≤10)&#xff1b; 輸出 輸出只有一行&#xff08;這意味著末尾有一個回車符號&#xff09;&#xff0c;包括 1 個整數。 樣例 輸入 5 輸出 120 2.參考代碼(C語言版) #include <stdio…