天天看點

大一學生資料結構與算法的先後取舍

【來信】

  在上學期,突然一天一位學長問我要選擇哪個方向,指的是算法和一般的開發。我回答他算法,而他說我對語言學的太心急,太快,不像是喜歡算法的,并和我說算法玩玩就好,不要陷得太深,并建議我走一般開發的路子。雖然學長學的挺好,但就比我大一歲,我還是不太相信他說的。後來在學校acm實驗室納新時,我還是按捺加不住入了。

  加入後,我開始對算法有了一點了解,并開始學習算法。本來我就是在我校oj上刷刷題。放假時借了本 《算法之道》,想在假期惡補一下,可是發現看不太懂。索性就不看了。因為acm實驗室的題目在hdu上,我也轉移到了hdu刷題。後來碰到不會的題,問了一下學長,他看完題告訴我該去學習動态規劃了。于是我開始看部落格,找動态規劃的題目和講解,後來發現一個部落格上面講的挺好,就一直在那個部落格看,看到圖的時候,我懵了,那時候我還不知道什麼是資料結構,于是我又開始學資料結構。我想資料結構和算法同時學習。開始發現了一本很簡單的書《啊哈算法》,在快看完時,我發現這本書講的資料結構比較淺顯,而且還不全,很多内容都在還沒出版的下一冊書上,我感覺對資料結構的講解也有點亂,而且我對裡面的資料結構看的也是模模糊糊,因為書内講的太少,我也練的少,于是在快開學時我放棄了這本書。打算從頭開始系統的系統的學習資料結構,于是找了好多書,找到了一本《大話資料結構》從頭開始學習,然後去找對應的題目去練習,我也跟着實驗室學長的步子,在hdu做練習,貪心,動态規劃。可是我還沒練熟呢,學長就切換到另一種算法了。當我意識到我的種種問題并打算從新開始時,也快開學了。開學後我在學資料結構做習題時擔心我的算法學習。練習貪心和動态規劃時又擔心我的資料結構弄不太好。我什麼都沒學好。而且假期學的也因為練習過少,記住的并不太多。

  我現在不知道在學習算法和學習資料結構之間該哪個先學,哪個後學。我怕我學了資料結構,算法學習上被人拉開。可是不學資料結構,有些涉及到資料結構的題目還搞不定。我想同時學習,現在的結果就是都懂點,僅僅是懂點。我對acm也不太了解,我不知道我先學了資料結構,再去學習算法會不會有點晚。。老師給指點一下,哪個在先,哪個在後,我對這兩個的先後難以做出取舍。如果同時學,我肯定都學不好,因為還要抽出大量時間學c++,補習英語。我也感覺時間有點緊。我現在可糾結了。

【回複】

  這封信看到一半的時候,我還真喜歡你東一榔頭西一錘子的做法。作為一名大一的學生,就通過這樣的方法去開闊視野,去到一個個未來要接觸的空間中小試一把,這是很有價值的嘗試。看到後面,我感覺應該和你探讨一種思路,怎樣讓自己的學習有序一些,有效一些。

  你所謂的算法、資料結構,大概是受了現在開課的體系,或者是某本書的影響了。實際上,這樣分開看,是将這二者之間的血肉聯系斷開了的。在學習過程中,如果能夠始終将兩者融為一體看,那才是全面的學習。對于大規模的人才培養而言,必然需要用一種體系,實施專業能力的培養。要知道,我們所用的體系,是諸多可以用的體系中的一種,而不是絕對的唯一。作為你個人,在培養方案以外,自己自主地去拓展一些,抛開這些束縛,形成自己的體系,方顯出更大的價值。

  以上是我對你面臨問題的看法。而到具體安排的層面上,我覺得你一定不能落入到簡單模仿學長的軌道中去。學長比你多一年的積累,他體會過的,你尚未經曆,怎麼能按他的步子走?我建議你現在也不必抱着一本資料結構的書“系統地學”,沒有必要。兩本比較淺顯的書已經看過,建議你找一本專攻競賽的書(紅書、黑書,或其他)看,這樣的書中的算法與資料結構是結合在一起的。若遇到裡面講的資料結構方面有些障礙了,也可以找本資料結構的課本,将相關的内容翻一翻,不排除将某段的内容深入學一下。要知道在用一本書時,不是拿到書,就從頭到尾說要細讀下去。大多數書,就是用到哪兒了,就看哪兒。一本書做主線,其餘的都是幫襯。

  有你信中所說的積累,c++對你不會是負擔,而至于英語,以及其他的科目,做好自己的時間安排,讓學習、生活的保持一定的節奏,都不是問題。

  以上是我的觀點,未盡之處,我們可以繼續交流。祝學有所成!

繼續閱讀