Incremental Method

程度★ 難度★

不積跬步,無以至千里。不積小流,無以成江海。《荀子》

Incremental Method

「遞增法」是符合電腦運作特性的方法。電腦執行程式,一次只做一個動作,完成了一件事才做下一件事。當一個問題太大太多時,化整為零、一個一個解決吧!

合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。謹以此句與大家共勉。

舉例:加總數字

無論電腦再怎麼強,還是得一個一個數字累加。

舉例:複製字串

無論電腦再怎麼強,還是得逐字複製。

舉例:選擇排序法(Selection Sort)

把第一小的數值找出來,放在第一個位置;再把第二小的數值找出來,放在第二個位置。一次找一個數字,如此下去就可以把所有數值按照順序排好了。

舉例:印出直角三角形

多字成行,多行成直角三角形。由細微的東西開始,一件一件組起來。

UVa 488 10038 10107 10370

舉例:宴會中訪客數目的極大值(Interval Partitioning Problem)

我們將原問題轉換成比較容易理解的形式。有一群訪客參加宴會,我們知道每一個人的進場時刻與出場時刻,請問宴會現場擠進最多人的時段。

換個角度想,如果在會場門口裝一支監視器,有訪客進入,會場就多一人,有訪客離開,會場就少一人。將所有訪客的留滯時段化整為零,逐步遞增,遞增的目標物是時刻,而不是訪客的索引值。

【註:這個技巧在中文網路上暱稱為「離散化」。】

另外還可以找出人最多的時段,就留給各位自行嘗試吧。

UVa 105 688 972 10613 10585 10963