• Tidak ada hasil yang ditemukan

動態規劃(DP) What When

N/A
N/A
Protected

Academic year: 2023

Membagikan "動態規劃(DP) What When"

Copied!
4
0
0

Teks penuh

(1)

動態規劃(DP)

動態規劃(DP)

最佳化問題(Optimization Problem),是從初多可行 解中找出的最佳解(Optimal Solution)的問題。

動態規劃(Dynamic Programming),是解決每種最佳 化問題的典型策略,許多的最佳化問題都要由一連串的決 策導出,而當我們面對這些決策時,會不斷的出現傭有相 似型態的子問題

DP 使用將原問題分解成子問題的方式推導出源問題的解答。我 們常常把原問題分解成數個較容易解決的子問題,如果子問題還是 過難的話,就繼續分解成更多的子問題。而當不同子問題的最佳解 可能來自相同的子子問題的時候,次技巧精妙之處就是把處理過的 解答存起來,以免重複計算,因此適合以 DP 解決的問題通常都有 子問題重疊(Overlapping Subproblems)的性質,也就是不同子問 題最佳解可能會包含相同的子子問題。

What

但是也不是所有最佳化問題都能使用 DP 來解決,適合使用 DP 的最佳化問題也需要滿足幾個特性才能確保 DP 的正確性。

When

(2)

動態規劃(DP)

問題的最佳解中含有子問題 的最佳解,也就是說問題的最佳 解可以由子問題的最佳解推得。

最佳子結構

若子問題決定的母問題最佳 解會影響到子問題的最佳解,則 有後校性。

無後效性

使用 DP 解決問題時,我們通常會先辨認出問題的結構特徵,

然後遞迴更新各個最佳解,如果有需要則會將計算過的子問題存起 來,方便重複取用而不必重複計算,從而提高效率。

一般實作時主要分為兩種風格:

How

從最小的子問題開始計算答 案,逐漸算出更大子問題的答 案,直到算出目標解為止。

優點是可以直接使用迴圈跑 過整個表格計算出答案,且適當 的設計迭代順序的話還可以壓縮 記憶體使用量。

缺點是遇到狀態較多的題目 表格會太大,可能會計算無用的 子問題。

Bottom-up

從原問題開始遞迴計算子問 題,將算過的子問題最佳解存起 來,並逐步地算出答案

優點是不會計算到多於的子 問題,且子問題數目很多時仍可 使用。

缺點是表格大小會和子問題 總數一樣大,呼叫函式遞迴也需 要負擔額外的成本。

Top-down

(3)

動態規劃(DP)

簡單的 DP 練習

給你個 NxM 的棋盤方格,

不過有些格子被打了 X 表示不能 過,問從左上角到右下角的捷徑 有多少條?

複雜度:O( )

爬格子

你一次可以踏兩階樓梯,問 你從地面上爬上第 N 層階梯有 幾種爬法?

P.S.你不能在樓梯上後退。

複雜度:O( )

電燈棋

你有一根長度 N 的木棒,

對於長度 1、2...N 的木棒,某商 人願意畫 a1、a2...N 的價格跟你 購買,如果切木棒不花錢,問你 最多能賺多少錢?

複雜度:O( )

切木棒

給你一串 N 個整數的數 列,問你這數列中最大的連續和 是多少?

複雜度:O( )

最大連續和

給你一個 NxN 的 01 矩陣,

問你裡面最大的只由 1 所組成的 正方形面積。

複雜度:O( )

最大正方形

你擁有一個載重 V 的背包,

和 N 個物品,每個物品都有各 自的重量和價值,問你在不超重 的前提下,最多可以裝多少價值 的物品?

複雜度:O( )

01 背包問題

(4)

動態規劃(DP) 動態規劃(DP)

稍微複雜的 DP 練習

給你個長度為 N 的序列,

雙方每次可以從左或右邊拿走一 個數字,最後的分數即是你拿走 的數字種和,問雙方都使用最佳 策略下,先手可以贏多少分?

A-GAME

給你一個 NxN 的方陣,每 一格上都有一個整數權重,現在 要你選兩條從(1,1)到(N,N)的捷 徑(可交叉),問兩條捷徑過的格 子總權重最大可以到多少?

接力賽

有 N 個殭屍站在你面前,

而殭屍有 A 跟 B 型態,你現在 可以選擇把其中一隻殭屍的型態 變換,或是把 1~k 隻的型態都 變換,求最少次數使得所有殭屍 變成 A 型態。

殭屍

在你的面前有 N 個人在排 隊,其中有一些是御坂妹妹,因 為她們長得太像了,以至於若有 連續 K 個御坂妹妹派在一起時你 就會錯亂,請算出有幾總排隊方 式不會讓你精神錯亂。

御坂妹妹

給你一個 NxM 的 01 矩 陣,問你裡面最大的只由 1 所組 成的矩形面積。

最大矩形

給你一個 NxM 的矩陣,請 你從中挑出三個互不覆蓋的邊長 為 k 的長方形,並且最大化三個 正方形中的數字總和。

石油

Referensi

Dokumen terkait

這種方法稱為離線。通常在問題優化很複雜、高階資料結構難以實作時,這是一個可以輕 鬆獲得大量分數的方法,甚至有時搭配排序之後的動態規劃,甚至可以拿到所有分數。 1.2 塊狀練表 其實我們處理的問題,每次都是詢問一個區間,所以其實我們不一定要更新整塊。我們 可以先把所有區間切成√ N 塊,每次更新,就把該點所在的那塊全部更新,查詢時,就 O√