動態規劃--序列找優問題【1】

一、說明

動態規劃似乎針對問題很多,五花八門,似乎每一個問題都有一套具體算法。其實不是的,動態規劃只有兩類:1)針對圖的路徑問題 2)針對一個序列的問題。本篇講動態規劃針對序列的算法范例。

二、動態規劃解決的問題

1 動態規劃針對什么問題?
1)從0到N是個規模膨脹的遞歸問題。
2)如果f(N?1)f(N-1)f(N?1)有解,那么可以推導出f(N)f(N)f(N)的解。

2 動態規劃可以解決的問題特點:
1)按照規模遞增的關系,凡是問題f(N)f(N)f(N)的解依賴于f(N?1)f(N-1)f(N?1)的解。
2)算法從f(0)f(0)f(0)出發,能推導出f(1)f(1)f(1)的解,然后正向求解。
在這里插入圖片描述
3 兩類動態規劃的問題
動態規劃似乎針對問題很多,五花八門,每一個問題都有一套具體算法。其實不是的,動態規劃只有兩類:1)針對圖的路徑問題 2)針對一個序列的問題。
本篇講動態規劃針對序列的算法范例。

三、動態規劃解決最大上升子序列問題

3.1 問題描述

問題提出:對于序列a1,a2,...ana_1,a_2,...a_na1?,a2?,...an?找到一個最長的遞增序列ai1,ai2...aika_{i_1},a_{i_2}...a_{i_k}ai1??,ai2??...aik??,其中,i1<i2,...<ini_1<i_2,...<i_ni1?<i2?,...<in?且,ai1<ai2...<aika_{i_1}<a_{i_2}...<a_{i_k}ai1??<ai2??...<aik??
示例:

對于序列【 5, 2, 8 ,6, 3, 6, 9, 5 】的最長上升子序列長度:
在這里插入圖片描述

答案是:
【2,3,6,9】
在這里插入圖片描述

3.2 算法描述

法則:
LIS[n]=1+max{LIS[n?1]∣k<n,A[k]<A[n]}LIS[n]=1+max\{LIS[n-1]|k<n,A[k]<A[n]\}LIS[n]=1+max{LIS[n?1]k<n,A[k]<A[n]}
下面對一個序列進行逐步解釋:
求下列序列的最大上升子序列:
【 5, 2, 8 ,6, 3, 6, 9, 5 】

解:先命名兩個序列iem和lenght,分別存儲當前值和對應長度。
建立iem序列:【 5, 2, 8 ,6, 3, 6, 9, 5 】
lenght序列:
【 1, 1, 1 ,1, 1, 1, 1, 1 】

  • 預先給出每個元素初始長度為“1”

開始掃描:
step1:對序列ltem【0】元素進行掃描,由于沒有前序,所以【0】的長度依然是1:length【0】=1
在這里插入圖片描述
step2:對序列ltem【1】元素進行掃描,由于前序是5(大于本地的2),所以【1】的長度依然是1:length【1】=1
在這里插入圖片描述
step3:對序列item【2】元素進行掃描,由于前序是5和2,小于本地的8,所以len_max(length【0】,length【1】)=1,所以,length【2】=len_max+length【2】=2
在這里插入圖片描述
step4:對序列item【3】元素進行掃描,本地的6,小于本地6的前序是5和2,所以len_max(length【0】,length【1】)=1,所以,length【3】=len_max+length【3】=2
在這里插入圖片描述
step5:對序列item【4】元素進行掃描,本位值3,小于本地3的前序是2,所以len_max(length【2】)=1,所以,length【4】=len_max+length【4】=2
在這里插入圖片描述
step6:對序列item【5】元素進行掃描,本位值6,小于本地6的前序是【5,2.3】,所以len_max(length【0】,length【1】,length【4】)=2,所以,length【5】=len_max+length【5】=3
在這里插入圖片描述
step7:對序列item【6】元素進行掃描,本位值9,小于本地6的前序是【5,2,8,6,3,6】,所以len_max(length【0】,length【1】,length【2】…)=3,所以,length【6】=len_max+length【6】=4

在這里插入圖片描述
step8:對序列item【7】元素進行掃描,本位值5,小于本地5的前序是【2,3】,所以len_max(length【2】,length【3】)=2,所以,length【7】=len_max+length【7】=3
在這里插入圖片描述

3.3 算法代碼

用python給出整個代碼:

def lis(A):L =[1]*len(A)for i in range(1,len(L)):subproblem = [ L[k] for k in range(i) if A[k]<A[i]]L[i] = 1 +max(subproblem,default=0)return max(L,default=0)

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

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

相關文章

獨家|百度副總裁尚國斌即將離職,此前統籌百度地圖;行業搜索及智能體業務總經理謝天轉崗IDG

百度人事再變動。作者|文昌龍編輯|楊舟據「市象」了解&#xff0c;近期&#xff0c;百度副總裁尚國斌即將離職。公開資料顯示&#xff0c;尚國斌2010年畢業于南開大學&#xff0c;2012年加入百度&#xff0c;先后在商業分析部、集團戰略辦、智能駕駛事業群工作。尚國斌同樣也在…

Qt 網絡編程進階:HTTP 客戶端實現

在 Qt 應用程序中&#xff0c;實現高性能、可靠的 HTTP 客戶端是常見需求。Qt 提供了豐富的網絡模塊&#xff0c;包括 QNetworkAccessManager、QNetworkRequest 和 QNetworkReply 等類&#xff0c;用于簡化 HTTP 通信。本文將深入探討 Qt 網絡編程中 HTTP 客戶端的進階實現&…

Python Requests-HTML庫詳解:從入門到實戰

一、庫簡介 Requests-HTML是Python中集網絡請求與HTML解析于一體的全能型庫&#xff0c;由知名開發者Kenneth Reitz團隊維護。它完美結合了Requests的易用性和Parsel的選擇器功能&#xff0c;并內置JavaScript渲染引擎&#xff0c;特別適合現代動態網頁抓取。最新版本&#xf…

基于springboot的小區車位租售管理系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

Kafka 如何優雅實現 Varint 和 ZigZag 編碼

ByteUtils 是 Kafka 中一個非常基礎且核心的工具類。從包名 common.utils 就可以看出&#xff0c;它被廣泛用于 Kafka 的各個模塊中。它的主要職責是提供一套高效、底層的靜態方法&#xff0c;用于在字節緩沖區 (ByteBuffer)、字節數組 (byte[]) 以及輸入/輸出流 (InputStream/…

局域網 IP地址

很多童鞋搞不清楚局域網ip是什么? 什么是局域網 IP 地址? 局域網 IP 地址,也稱為 私有 IP 地址(Private IP Address),是用于在局域網內部標識設備的地址。這些地址不能直接在互聯網上被訪問,通常由路由器自動分配,用于設備之間的內部通信。 局域網 IP 地址的分類 根…

k8s的service、deployment、探針詳解

1.k8s組成圖2.service和deployment的流量轉發圖# Deployment 定義容器端口 apiVersion: apps/v1 kind: Deployment metadata:name: myapp spec:template:spec:containers:- name: nginximage: nginxports:- containerPort: 80 # 容器監聽 80name: http # 端口命名&…

【PostgreSQL教程】PostgreSQL中json類型與jsonb類型的區別

博主介紹:?全網粉絲23W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

牛客刷題記錄01

除2&#xff01; 目錄 除2&#xff01; 題目描述&#xff1a; ?編輯 題目解析&#xff1a; 代碼實現&#xff1a; 數組中兩個字符串的最小距離__牛客網 題目描述&#xff1a; 題目解析&#xff1a; 代碼實現&#xff1a; 除2&#xff01; 題目描述&#xff1a; 給一個…

Docker Compose UI遠程訪問教程:結合貝銳花生殼實現內網穿透

對于很多剛接觸Docker的用戶來說&#xff0c;命令行操作總帶著一絲“勸退感”。尤其是要在Windows上部署服務、開放端口、配置參數時&#xff0c;稍有不慎就容易出錯。有沒有辦法像網頁后臺一樣&#xff0c;用圖形界面來管理Docker項目呢&#xff1f;答案是&#xff1a;有&…

HF83311_VB1/HF83311Q_VB1:高性能USB HiFi音頻解碼器固件技術解析

引言隨著高品質音頻體驗需求的不斷增長&#xff0c;音頻解碼器固件的性能和功能成為決定音頻設備品質的關鍵因素。本文將介紹一款基于XMOS XU316技術的高性能USB HiFi音頻解碼器固件——HF83311_VB1/HF83311Q_VB1&#xff0c;這是一款專為USB HiFi音頻應用設計的軟件解決方案。…

[ComfyUI] -入門1-ComfyUI 是什么?比 Stable Diffusion WebUI 強在哪?

ComfyUI 是一個開源的、節點可視化界面,用于構建與執行 Stable Diffusion 圖像生成流程。它把復雜的生成過程拆解為許多“節點”(如提示編碼、采樣器、控制網絡等),用戶通過連接節點,就能自由編排工作流 。這種設計適合開發者與進階用戶,更便于微調、多分支與復用流程。 …

[python][flask]flask接受get或者post參數

在 Flask 中&#xff0c;可以通過 request 對象來獲取客戶端通過 GET 或 POST 方法發送的參數。以下是如何在 Flask 中接收 GET 和 POST 參數的詳細說明&#xff1a;1. 接收 GET 參數GET 請求的參數通常通過 URL 的查詢字符串傳遞。例如&#xff0c;對于 URL http://example.co…

Creo 模塊眾多,企業如何按需靈活分配許可證資源?

在數字化設計與智能制造深入發展的當下&#xff0c;企業 CAD/CAE 工具的精細化管理越來越重要。Creo&#xff0c;作為 PTC 旗下一體化 3D CAD 平臺&#xff0c;以其模塊化、可擴展的產品架構&#xff0c;廣泛應用于機械、裝備、汽車、航空航天等行業。其豐富的模塊庫覆蓋建模設…

【c++】提升用戶體驗:問答系統的交互優化實踐——關于我用AI編寫了一個聊天機器人……(12)

本期依舊使用豆包輔助完成代碼。從功能到體驗的轉變上個版本已經實現了問答系統的核心功能&#xff1a;基于 TF-IDF 算法的問題匹配和回答。它能夠讀取訓練數據&#xff0c;處理用戶輸入&#xff0c;并返回最相關的答案。但在用戶體驗方面還有很大提升空間。讓我們看看改進版做…

Android UI 控件詳解實踐

一、UI 開發基礎概念&#xff08;初學者必看&#xff09; 在學習具體控件前&#xff0c;先理解以下核心概念&#xff0c;能大幅降低后續學習難度&#xff1a; 1. View 與 ViewGroup 的關系 View&#xff1a;所有 UI 控件的基類&#xff08;如 Button、TextView&#xff09;&…

關于linux運維 出現高頻的模塊認知

一、Linux 基礎核心&#xff08;必掌握&#xff09;核心工具&#xff1a;Shell 腳本、Systemd、用戶權限管理、日志分析&#xff08;journalctl、rsyslog&#xff09;企業需求&#xff1a;中小型公司&#xff1a;需獨立完成系統部署、故障排查&#xff0c;對腳本開發&#xff0…

手語式映射:Kinova Gen3 力控機械臂自適應控制的研究與應用

近日&#xff0c;美國明尼蘇達大學研究團隊在《從人手到機械臂&#xff1a;遙操作中運動技能具身化研究》中&#xff0c;成功開發出基于??Kinova的7軸力控機械臂Gen3的智能控制系統。這項創新性技術通過人工智能算法&#xff0c;實現了人類手臂動作到機械臂運動的精準映射&am…

P5535 【XR-3】小道消息

題目描述 小 X 想探究小道消息傳播的速度有多快&#xff0c;于是他做了一個社會實驗。 有 n 個人&#xff0c;其中第 i 個人的衣服上有一個數 i1。小 X 發現了一個規律&#xff1a;當一個衣服上的數為 i 的人在某一天知道了一條信息&#xff0c;他會在第二天把這條信息告訴衣…

ChatGPT Agent架構深度解析:OpenAI如何構建統一智能體系統

引言&#xff1a;AI智能體的范式躍遷 2025年7月17日&#xff0c;OpenAI發布的ChatGPT Agent標志著對話式AI從“被動應答”向主動執行的歷史性轉變。這款融合Operator網頁操作與Deep Research信息分析能力的新型智能體&#xff0c;通過統一架構設計實現了復雜任務的端到端自主執…