看板 Programming 關於我們 聯絡資訊
※ 引述《ga544523 (美麗新世界)》之銘言: : 別看到標題就靠悲我 : 我也花了不少時間在上面阿 : 從大一尾端到現在也有兩個多月了 : ac了8x題 : 以前幾乎天天寫 : wg就一定要在今天弄懂 : 常常從晚上寫到早上 : 宵夜當早餐 : 現在熱情有點燃燒殆盡的感覺 : 主要是最近是看了一篇文 : 網上一位寫acm的大哥 : 對自己花時間寫acm感到很後悔 : 認為自己不如別人 : 之後我就開始爬文 : 有的人認為贊成有的不贊成 : 這下我亂了 : 你們覺得勒 恩,這好像是我在 Programming 版的第一篇文章, 本來只是個偶爾看到點進來的浮淺仔,但看到有人這麼問,就只好發篇文了。 本人並不是什麼 2000 題的神人, 不過至少身為個去過 World Final 的人,我還是想講點話。 進入正題 ----------- 這問題其實並不只大學生會遇到, 同樣的問題我們也可以問問高中生:你為什麼練 IOI? 以 IOI 而言,有人會嘗試從加分或保送的觀點來說服你, 但在我看來這一點都不 make sense. 要知道,他之所以有加分效果甚至保送效果正是因為困難, 所有去努力的人能得這樣的利益不過鳳毛麟角, 有什麼道理支持你去做一個期望結果這麼差的事情? 若你是個信心十足的天才想玩玩那就算了沒話說, 但這不是一般人的狀況。 同樣的,我認為從 Facebook/Google/IBM 等公司的門票來看也是沒道理的。 當然不乏這樣得利的人,譬如強者我隊友就收過很多公司的信 (雖然他好像沒興趣XD) 但那也只是最頂尖的那麼一丁點。 PR99 之所以是 PR99 , 就是因為腳下有 99% 失敗的人。 所以,我認為,要看 ACM 值得練與否,必須從更基本的觀點看, knowledge 前面別篇文章曾有提到過,他 2000 題的同事氣場就很不同。 我想這有兩種因素,一是自信,二是知識。 你說,練 ACM 能有什麼知識可言呢? 這與你的態度息息相關。 舉一個簡單的例子, 今天你有 n 張圖片,以及一個想要搜尋的東西。 透過 library ,你已經有一個能夠判斷符合程度的函式了, 能否請你利用這個函式找出最符合的 k 張圖片? 一個完全對演算法不了解的同學, 可能只會知道要排序,但甚至連怎麼排才好,都不清楚。 一個對演算法有所了解的同學, 可能會給你個快速排序或其他 O(n lg n) 的排序, 一個對演算法更加了解的人,或是個正常的 ACM 選手, 應該都要回給你個期望 or 確定線性的作法。 但是一個真正認真對待 ACM 的選手, 能在告訴你兩種方法之後,說明為什麼應該用期望的方法。 他順便會告訴你怎麼處理特殊狀況避免複雜度退化, 他可能還會告訴你已經有什麼函式可用,並順手幫你寫完程式。 最後也許他會再說,當你的可用記憶體只能 maintain k+1 張圖片時, 該如何退化出一個 O(n lg k) 而非 O(n lg n) 的方法。 一個好的 ACMer 該知道, 為什麼他這時用 C++ 而那時用 Java 。 知道他該去優化程式的哪個地方而非每個角落, 他更知道,為何這時可以隨意用動態記憶體, 但那時就必須自己維護記憶體池。 如果你只是想 AC 題目, 那麼你可能永遠不會知道這些, 並且永遠在基礎的演算法與資料結構上打轉。 但若你認真看待他,去想通他,去嘗試他, 你就會知道為什麼調整 floyd warshall 的枚舉順序後可以拿來做額外的事 你就會知道為什麼 copy on write 實做在指標版本的線段樹上可以很自然, 你也會知道你為什麼該用劃分樹而不是持久化線段樹就算他們複雜度相同。 你會理解,為什麼有時候我們必須認真二分搜,而有時可以隨意枚舉。 你會理解,為什麼我們不敢在 double 身上用 == , 你也會理解,為什麼 rolling hash 該模質數而不是自然溢位。 有太多東西,是只想通過題目的人拿不到的。 而他們更不會知道這將成為他們更上一層的阻礙。 最重要的, 一個好的 ACMer 會懂得修改演算法來服膺自己的需求。 但這卻是一般 call library 的人能可能不懂的。 所以 你說, ACM 練了有什麼好處嗎? It depends on you. 然而 我必須說,當你把 ACM 從單純的解題提升到一個 認真理解、認真分析、認真研究的層次 那所花費的時間 是超乎想像的 他不只需要你的時間與腦力,更需要夥伴。 我就一直覺得我的 ACM 是一門 15 學分的課, 如果少了夥伴,可能就會是一門 50 學分的課。 However, 當我去實習,有人對我的 code 表示驚訝時, 我就知道,我有收穫。 -------------------------- 說了些 ACM 的好話,我也來提醒一件重要的事情。 一個好的演算法與資料結構老師、好的計算機結構老師、好的 compiler 老師 可以彌補掉很多東西。 有時你甚至無法看出什麼差異。 (當然前提是你也有認真學) 究竟需不需要花時間追求那些額外的好處,老實說不一定。 但我是追了, 因為我熱愛。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.121.239 ※ 文章網址: http://www.ptt.cc/bbs/Programming/M.1411474900.A.746.html ※ 編輯: coquelicot (140.112.121.239), 09/23/2014 20:32:44
UncleHS: 強者推!140.113.136.219 09/23 20:53
AmosYang: 推觀念清楚 68.4.112.174 09/23 22:35
esrever: 推~ 116.89.134.246 09/23 22:38
suhorng: 「因為我熱愛。」 36.229.110.22 09/23 23:41
bibo9901: 強者推 61.230.210.133 09/24 01:11
changyuheng: 推220.141.139.221 09/24 11:33
turtle11311: 推 純粹的熱愛 110.27.12.187 09/24 13:19
kevin4314: 推 140.112.4.194 09/25 19:00
wolfpig: 說得很好~~203.192.162.252 09/25 19:11
saladim: 可以提供一下大大以前唸的教材或是資料嗎 36.226.230.139 09/26 01:10
arbuztw: 推! 123.193.74.170 09/28 15:17
hanhan0912: 推推 140.112.4.192 09/28 21:17
Hyww13: 推 140.112.16.147 10/07 14:28
skgg: 推! 116.59.233.99 10/29 23:18
m80126colin: 好文值得一推再推 49.214.158.66 11/15 06:11
w181496: 推! 27.245.14.226 12/23 18:46
Hitripod: 寫得真好,推~ 223.137.27.102 01/14 09:16
NaiveRed: !推 123.240.50.44 01/30 10:54
takaramono: 推~XD 36.231.198.10 02/14 22:27
ej0cl6: 推~ 114.45.32.230 02/15 02:39
pigalan: 純粹推!! 98.209.18.159 02/15 07:51
JustinHere: 我最近也一直在想練 Haskell 有啥好處 49.216.44.17 02/17 17:21
suhorng: pigalan 出現了耶!!!!大推!!!!!! 111.248.46.83 02/17 22:52
TonyQ:轉錄至看板 Soft_Job 02/18 12:47
ke1vin: 推 XDD 122.147.21.14 02/22 11:18
rosemary0401:125.227.249.146 03/28 13:17
monkey60418: 強者推!118.160.225.164 04/16 00:19
cebrusfs: 朝聖推 140.112.16.150 04/16 00:35
david942j: 朝聖!! 1.169.228.221 02/17 18:53