大學學計算機為什麼必須要學演算法?
謝邀。授人以魚不如授人以漁。
演算法是計算機的精髓,而且是永恆的東西,對於演算法只有適用不適用,沒有過時不過時。演算法培養的是思考問題解決問題的通性通法,而不是某一種具體的方法。演算法的好處我就不多說了,最近在看《軟體隨想錄》,頗有感觸。像演算法這種很難的課程有個獨特的作用,就是可以檢驗一個人是否真的熱愛編程、是否真的適合編程。能者多加培養,庸者趁早滾蛋。演算法的學習可以揭示你的學習態度和能力。別管它有沒有用。從未見過演算法好的人學習java很難,通常幾天就可以成為高手。也從未見過演算法好的人一遇到棘手問題就打退堂鼓。
為什麼要學習演算法?
簡單來說就是計算機很笨,而且資源有限,要讓計算機服務於我們必須通過演算法。
試想:如果計算機無限快,那麼根本不需要演算法,任何問題都能在瞬間解決。所以只要計算機體系結構沒有變,那麼演算法必定是我們能更好使用計算機的必學的課程。
換個角度,如果你都不能比不學計算機的人更好的使用它,你還能叫學過計算機?
你畢業打算搬磚的話,其實不用太認真學。
演算法就好比內功,內功修鍊好了,學什麼招式都能克敵制勝。
演算法是計算機的核心部分,演算法是學計算機的同學必須學習的
鍛煉邏輯思維能力,明白計算機編程的核心意義。
演算法,是一種思想,一種解決問題的方法。計算機只所以能夠完成各種複雜工作,都是因為有相應的演算法在控制其運行邏輯,可想而知演算法是計算機能夠替我們幹活的靈魂。李開復曾經寫過一編關於演算法的文章,可以看看:
計算機專業學習之演算法編程:靜水流深科技(swrdt.com)
如果你認為燒菜可以不放鹽的話,確實可以不學
首先來說什麼是演算法(來自wikipedia):
演算法(Algorithm)是指完成一個任務所需要的具體步驟和方法。也就是說給定初始狀態或輸入數據,能夠得出所要求或期望的終止狀態或輸出數據。
因此,可以把演算法看做一個黑匣子,用來完成特定的功能。
舉幾個演算法的典型案例:
1.排序演算法:我們用計算機使用文件時要按文件、時間,日期等來排序;刷論壇,看帖子需要排序;就連用手機看聯繫人也要排序,而這些數據在規模不同的時候要使用不同的排序演算法,以便達到可以使用的效果。2.查找演算法。很多排序之後都是為了更快的查找,比如搜索文件,搜索網頁,搜索聯繫人。但凡我們想找的東西,我們只需要搜一下就行了,而背後的「查找」確是很複雜的演算法。3.圖論演算法。涉及到二維或以上的領域,圖論演算法就比較多了。比如地圖路線搜索,互聯網路由演算法,為了防止環路產生的生成樹演算法等。這些演算法不但複雜,而且還涉及到很複雜的數據結構。4.密碼演算法。這個是演算法領域最有技術含量也最難出成果的領域了。當前我們在網路上、現實生活中使用的各種和密碼有關的東西都涉及到演算法(HASH,MD5,RSA等)。密碼演算法一旦讓人攻破了,後果是災難性的。設計優良,成熟,經過實際檢驗的演算法是需要經過很多人努力很多年才有可能實現的。
5.NP完全性。這個是討論演算法狀態和實現是否可知的問題了,不太熟悉,但是也是很重要的領域。以上只是演算法領域中一小部分,其他的如壓縮演算法,搜索引擎演算法,圖像處理演算法等等也是十分重要的領域,有興趣的可以自己google。
另外推薦兩本書籍。一本是演算法經典《演算法導論》,其中第1章就討論了演算法的實際應用和重要性,其他各章節都是具體和詳細的介紹了各種演算法,而且參考文獻十分齊全,強烈推薦。另一本是《編程之美》,從應用和面試的角度講解了各種演算法,幫你更具體的認識演算法的力量。
以上只是本人的一點看法,有什麼不足的地方還望大家指出,一起討論學習,共同進步!推薦閱讀:
※僅參考 C99 Standard 可以實現一個完整的 C99 編譯器嗎?
※如何產生正態分布的隨機數?
※NOP指令會打斷CPU流水線嗎?
※為什麼感覺好多計算機大神都很喜歡日漫甚至有好多女裝大佬?
※CPU的瞬時功耗是由什麼決定的?