iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0

接觸了比較深入的演算法分析相關的研究以後 (比較多圖論的部分),會發現有許多常用的演算法理論工具 (比如說隨機方法、擴展圖、線性規劃、代數體、極限圖等),是沒有辦法直接出現在競賽中的。但是,常常會看到這些理論工具,用很競賽的方式做出它們的應用。常常也可以因此重新設計出比較適合競賽的題目或是課本習題。

如果說研究是要解決一個未知的問題,那麼競賽便可以說是一覽歷代研究者用各種精妙的方法解決問題的巧思。高中時代印象最深刻的,是研究貪婪演算法與動態規劃方法之間的分野。通常動態規劃方法需要全面地考慮所有可能出現的情形,而貪婪法則是藉由數學觀察,排除絕大多數保證不會是最佳解的情況,進而減少很多不必要的計算。最經典的問題是找零錢問題,給定一些硬幣的面額,一個經典的問題是:在哪些硬幣面額的情形下,使用貪婪法湊出任意正整數金額總是能得到最少硬幣總數的最佳解?

如果硬幣的面額像是我們常用的零錢 1元、5元、10元、50元等前後均為倍數關係,那麼顯然可以有直接的數學方法可以證明貪婪法 (從目前剩餘金額的最大面額開始支付),總是能夠達到最佳解。但是若像是美金的零錢有 1美分、5美分、10美分、25美分、1美元等面額,此時雖然前後不總是倍數關係 (比方說 25 不是 10 的整數倍),但用貪婪法找錢也是可以湊得最少數量的硬幣。後來我們在高中選訓營的時候聽教授提到這個問題,央求教授講解給我們聽的時候,才意識到有一個 O(n^3) 時間複雜度的演算法 (其中 n 是面額種類數),加上線性代數的證明,可以完美地解出這題,讓我感到超級震撼。


上一篇
把競賽經驗用到研究上
下一篇
解題的直覺與信念
系列文
有事者·試競程(附帶每日演算法小謎題)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言