• 沒有找到結果。

演算法 Algorithm

N/A
N/A
Protected

Academic year: 2023

Share "演算法 Algorithm"

Copied!
1
0
0

加載中.... (立即查看全文)

全文

(1)

演算法 與 資料結構 Algorithm and Data Structure

- Dynamic Programming

鼎鼎大名的 DP,到底是什麼?

教育部國語辭典:好像應該查英漢辭典才對XD?

沒辦法簡而言之:DP是Dynamic Programming的縮寫,中譯為「動態規劃」。不用去體悟這四 個字的意義,因為實在看不大出來動態規劃是什麼鳥。

DP其實就是當問題可以被看成一些相關聯的子問題,且其中一些問題的 子問題互相重複時,可以把已解決的子問題之答案存下來,並利用這些已 知的子問題答案,去解決其他問題,進而解決最初的問題。

很籠統,希望你能得到它。

題目題目題目題目題目

再來,為了體會這個難以捉摸難以形容的DP,就讓我們透過一拖拉庫的題目來瞭解吧!

題目一 鉛塊鈾塊 (ACM 580, Critical Mass)

一個字串由很多U和L構成,如果這字串中有超過2個U連在一起,則說這個字串達到 Critical Mass。給定字串長度,問有幾種達到Critical Mass的字串?

題目二 最長共同子字串 (LCS, Longest Common Subsequence) (ACM 10405, LCS) 定義一個字串S由n個字符所構成,為S1, S2, …, Sn

若對於二個字串A和S,存在一個嚴格遞增的整數列a1, a2, a3, …, ak,使得Aa1=S1, Aa2=S2,…, Aak=Sk,則稱S為A的子字串。

若對於字串A和B,S是為A的子字串也是B的子字串,則稱S為A和B的共同子字串。

若對於字串A和B,S是所有A和B的共同子字串中最長的,則稱S為A和B的最長共同子 字串。

給定兩個字串,問其共同子字串最長為多長?

題目三 最大0組成正方形 (ACM???)

在一個零一矩陣中,找一塊最大的正方形,裡面全部都是0。

試問這樣的正方形最大的邊長為多少?

題目四 找錢問題 (ACM 674, Coin Change)

給定某些幣值c1,c2,…cn,問要湊出恰好m元,至少要用多少硬幣?

題目五 背包問題 (ACM ???)

一個背包能裝載重量W,現有n個物品的重量分別為w1,w2…,wn,其價值分別為c1,c2…,cn, 問至多能裝入總價值多少的東西?

建中資訊培訓講義 (二) - by kelvin

(2)

題目六 矩陣相成 (ACM 442, Matrix Chain Multiplication)

有n個合法的矩陣要相乘,試問在所有不同的兩兩相乘順序中,最少要做幾次乘法運算?

題目七 最長遞增子序列 (LIS, Longest Increasing Subsequence) (ACM481, What goes up) 定義一個序列S由n個數字所構成,為S1, S2, …, Sn

若對於二個序列A和S,存在一個嚴格遞增的整數列a1, a2, a3, …, ak,使得Aa1=S1, Aa2=S2,…, Aak=Sk,則稱S為A的子序列。其中若存在S1<S2<S3…<Sn的關係,則稱S為A的遞增子序 列。又如果S是所有A的遞增子序列中最長的,則稱S是A的最長遞增子序列。

給定一個數列A,問其最長遞增子數列有多長?

題目八 烏龜疊羅漢 (ACM 10154, Weight and Measures) 現在有n隻烏龜,編號i的烏龜其體重為wi,力量為fi

現在要從這n隻烏龜裡面選幾隻出來疊成一堆,但每隻其上方的烏龜總重量加上自己的重量 不能大於自己的力量fi

給定所有烏龜的wi和fi,試問最多可以疊幾隻烏龜?

題目九 弱弱數 (USACO section 3.1, Humble Numbers) (ACM443, Humble Numbers) 給定一個集合P={p1,p2,p3…,pn},其中pi是兩兩相異的質數。

若一個大於一的數h,其所有質因數都在集合P中,則稱h為一個Humble number。

對於給定集合P和一個正整數k,試求有小到大第k個Humber number。

題目十 伊甸園 (ACM 10001, Garden of Eden)

定義一個狀態S是由一串0與1代表的子狀態所組成,其長度為n,則第一個子狀態是S1, 第二個子狀態是S2……,第n個子狀態是Sn;定義對所有1<=i<=n,Si和Si-1、Si+1相鄰,而 Sn+1視做S1,S0視做Sn。定義一個狀態轉移是由S→S’,其中S’中的每個子狀態Si’只由Si- 1 、Si、Si+1決定,且對於同樣的{Si-1, Si, Si+1},Si’也相同。題目一開始會給定對應所有{Si-1, Si,

Si+1}的值辭Si’的值。若一個狀態S,除了當起始狀態,否則不可能由其他狀態經過狀態轉移

而到達S狀態,則稱S是Garden of Eden

現給定長度n、所有狀態轉移規則和一個狀態S,試問:S是不是Garden of Eden?

長度n不超過32。

題目十一 加拿大旅行 (USACO Section 5.4, Canada Tour)

平面上有若干個城市,由西向東依次為c1, c2,…, cn。但並不是每個城市之間都有航線相通,

只有某些城市有飛機班次,這些相通的城市對是給定的。

現在希望從c1出發,一路經過的城市只能向東,到達某個城市後轉向,再一路向西經過若 干個城市回到c1,且這些城市都不能重複。

試問,最多能經過幾個城市?

建中資訊培訓講義 (二) - by kelvin

(3)

題目十二 最高頻率字串 (ACM 10234, Frequent Substrings)

一個字串S中,定義其連續子字串為S中一段位置連續的字符所組成。

定義一個連續子字串的發生次數為S中可以找到幾個這樣的連續子字串,這些找到的連續子 字串可以重疊。

給定字串S和整數n,試問發生次數最多且長度為n的連續子字串為何?

ps. 此題亦有Map (Hash)等其他做法。

科科科科科科科科科科科科科

嘿嘿,怕了嗎?

什麼,你簡直鬥志高昂?那來點DP難題吧!

不過要注意,剛開始接觸的時候,有時DP難是難在沒看出他可以DP喔。所以請記得,生活

處處有DP,閒來無事用DP;順手做DP,救救時間複雜度。

ps. 下面都頗困難,不會是正常,只是提供給覺得上面都太簡單的人看看XD。

題目一 最大0組成長方形 (ACM 108, Maximum Sum) …O(n2)?!

在一個零一矩陣中,找一塊最大的長方形,裡面全部都是0。

試問這樣的長方形最大的面積為多少?

題目二 松鼠吃松果 (ACM 10944, Nuts for Nuts) 格子上有n個松果,其中n<=15。

試問:從原點出發,最少要走多少距離才能吃到所有松果再走回原點?

題目三 Hamilton夫婦 (ACM 11025, Mr. and Mrs. Hamilton)

有n個路口,其中n<=13,各個路口依次編號為0到12,Hamilton家在編號0的路口。

Hamilton先生有一天走在路上,突然想到一題頗難的ACM問題──說不定就是這題──於

是就開始絞盡腦汁的想。由於他腦中所有的CPU都拿去跑這個題目了,所以就開始在接道上 亂走。而所謂亂走,是每到一個路口,面度數條岔路,選取每一條的機率都相等。

經過無限長的時間後,在家中(0號點)的Hamilton太太發現他老公失蹤了,但她知道她老 公有這種ACM症候群,所以並不慌張,決定出門把他先生抓回來吃晚飯。

給定所有路口和所有相連路口的道路及其長度,試問:Hamilton太太應該按照順序去哪些路 口,才能使找到Hamilton先生時所需走的路程長度期望值最小?又期望值為多少?

你可以假設Hamilton太太出發後,Hamilton先生因為感受到太太的威力,就不敢再繼續遊 蕩,只會在原地(某個固定的路口)發呆。

題目四 水球硬度測試 (ACM 10934, Dropping Water Balloons) 有一棟n層樓的高樓(n<=264),與k顆水球(k<=100)。

你想要測試水球最高從幾層樓掉下來還不會破。如果測試後水球沒破,可以繼續使用;反之

建中資訊培訓講義 (二) - by kelvin

(4)

若破了,就無法再使用(因為用膠帶黏起來會造成誤差,熱融膠太昂貴,口水又不夠黏)。

試問:至少要測試幾次,才可以確知水球最高從幾層樓掉下來還不會破?

題目五 信使神 (IOI 2004, Hermes)

希臘天神中,Hermes是信使神,負責為各個神送信。

共有n位天神(n<=20000),所有天神居住的位置是個X*Y的格子點平面(X,Y<=1000)。

Hermes天生就具有適合送信的特異功能:他只要站在與收件天神的同X座標或同Y座標的

任何位置,就可以把訊息傳達給該位天神。

Hermes由(0,0)出發,必須依序送信給某些收件人。現給定各個收件人依序的座標,試問至少

要走多少路,才可以把所有信送完?

什麼?上面的題目又被你秒殺了?可惜沒題目啦,所以就下課吧科科!有意見就DP我啊!

[完]

建中資訊培訓講義 (二) - by kelvin

參考文獻

相關文件

我們一般所探究的不僅是科學及其經驗 方式的問題―我們所探究的是人的世

在解決實際問題時,最大的挑戰常常是將問題轉化成數學的 模型,其中一類可能的模型便是最佳化問題,也就是如何設

這些問題目前尚未找到可以在 polynomial time 內解決的 algorithm.. 這些問題目前尚未被證明無法在 polynomial time

善用同步教學的工具,電子白板是一種即時視覺回饋的工 具,盡量不要限制而要以鼓勵的方式讓學生自由地在電子白 板中發揮。

示解決第一題時「是有想到跟遊戲有類似題目的感覺」 (訪談 20071127[g]), (訪談

方式。另外一個值得談的是傳統上不管是 解決存在性問題或是計數問題,大部分的 學者都是運用 Assignment Tree Traversal 的 方法,很少有人運用 Divide and

摘要 在 VLSI Physical Design 中許多常見的 constraints 有助於 block 之間資料的傳遞,而 abutment constraint 是其中之一。這種 控制數個有限制條件的

伽利略形成如何決定光速的問題,但無法解決它。問題的形成經常比問