剛入門編程的人有必要學習數據結構嗎?
本人專業自動化,半年前報了個java培訓班,想問一下知乎各位大神,有沒有必要學習數據結構,或者說,什麼時候開始學習數據結構比較好
先入門可以看看數據結構,但是並不要求你完全搞的通透,而且你也一定不能搞的通透。我大學畢業的時候,還是有一定的編程能力的,但是在工作的三年中,一直在做安卓app。幾乎就完全沒有用過什麼數據結構演算法的東西。樹從來沒有用過,排序只用過冒泡,還得臨時上網找,搜索全部是暴力匹配。所有的時間複雜都是O(n), O(n^2),...,O(n^n),甚至連為什麼時間複雜度會是O(log n)都不清楚。但是三年下來該完成工作完成工作,該上線上線,該跳槽跳槽,該加薪加薪。所有的這些並不是特別影響到我的工作。因為我的代碼從來就只是在安卓下運行的一個app,本來手機性能就過剩,用不用演算法並不影響程序的運行效率。用戶的個人信息隨便存個sharedpreference都夠用了,資料庫更是能不用就不用,圖個省事。反正完成工作就好了。但是如果你去了大公司,有了大項目,你就會發現有些東西不用演算法就完成不了了。讓你在150m的文本裡面搜索東西,你要是不用演算法,直接暴力匹配,連運行你都運行不了。所以個人建議,你現在可以不把數據結構演算法的東西那麼認真的研究,隨便看看了解一下有這麼回事。以後寫代碼的時候遇到了,最起碼會用個冒泡排序,會用個快排,會用個二分查找。等你有了一定的編程能力,有了一定的項目經驗,在回過頭來看數據結構和演算法,你將有更深入的理解,可以想到當初什麼什麼代碼的地方如果用個堆可能效率提升特別多,什麼什麼地方用個樹形結構查找效率直接就從O(n)降到O(log n)了。
到了那時候你就會覺得這些東西有用了。現在嘛能用代碼實現你的想法就夠了。
------------------------------------------分割線-----------------------------------------------------------有些人認為我把演算法和數據結構弄混了,其實是基礎實在太差了吧且不說大招紅黑樹。最短路徑圖的遍歷各種樹結構,什麼平衡二叉樹、b+b-樹、後綴樹這些手做能做明白么?都不用寫代碼實現。再簡單說,現在剛畢業的程序猿能在自己幹活的時候加個棧結構就夠刮目相看的了吧以上都不會,就敢說自己代碼裡面用了各種數據結構的知識?真以為數據結構就是鏈表和數組?會用個arraylist就是會數據結構了?真以為會用鎚子砸釘子就會蓋房子了?就說木工學不學都沒用?自動化專業不學數據結構嗎
等你覺得寫不下去了再去學,反正java培訓班出來能找的工作都不可能是需要你懂數據結構的。
你不學也沒事等你自己發明一次某幾個數據結構然後發現啊原來這就是數據結構啊啊啊啊早知道我何必這麼麻煩啊啊啊啊啊到那個時候再學嗯別有一番滋味在心頭哦...
重要,很重要,數據結構直接影響做出一個項目的質量。說更嚴重點數據結構決定一個程序員的水平吧,很多東西你不懂數據結構是看不懂原理的,不懂原理你就不知道它的適用場景....
抓緊時間學數據結構
可以看看大話數據結構,入門還是不錯的
接著進階可以看看數據結構與演算法分析-c語言描述,很棒的一本書,也不厚。從日常編程工作中,學習到的數據結構知識用到的機會並不多。但是學數據結構的基本功還是非常重要!因為,數據結構訓練了建模和演算法思維,這是計算機編程的根本性思維。如果這個思維不掌握,簡單的模型都沒有概念,很難快速形成建模,更不容易自己設計好的演算法。就好像做基礎的數學運算訓練對解題是否有幫助一樣,直接來看並沒有。但是這種思維的訓練確實需要有個基礎的可以循序漸進的方法。每年Google舉辦的CodeJam大賽,都是演算法題,不僅僅是小結果集層面解決了問題,還要求在大結果集上解決,限定了8分鐘時間下載+運算+上傳。
IF (你有孩子)AND(希望孩子能夠從小有好奇心)AND (有濃厚的學習興趣)AND (自主學習)AND (升學無憂) AND (學習未來世界最有價值的技能-編程):
歡迎參加2月16日晚上舉行的知乎 Live - 激發孩子熱愛奧數和編程的興趣,我將分享一些從遊戲開始的、興趣驅動的奧數或編程教育方法。
放棄吧,說多了都是廢話
java培訓班出來的,找的工作是不需要會數據結構的,親~
額 Java裡面不是自帶了很多數據結構的么?你不懂這些數據結構還要怎麼用-_-||
學習編程的基本要素:
1.編程語言的基本邏輯,也就是語法
2.基本數據結構,再次強調,不是演算法,不是演算法!!!!! (連有什麼數據結構都不知道,編程的時候都不知道數據放在什麼結構里,還編個屁程)3.各種編程模式,比如非同步.這裡說的不是設計模式.再次重申,不要把數據結構和演算法搞混.
針對題主提到問題,我的回答是,必須學習數據結構,剛開始可以了解一下最常用的數據結構就可以,比如,List和Map.一個數組也算是數據結構,如果連這種東西都不學習,我就呵呵了.
------------------ 原先答案 ------------------------------------------我十分不同意沒必要學,至少基本的數據結構的基本操作要明白,否則任何編程語言你都操作不了.不給樓主見到點示例感受一下是不行的,來個簡單的,現在有個文件裡面存了n個數字(數字在long的範圍內)但是n很大,大到給你的內存無法存下(如10^10個),要你找到前k大的數(k相對較小,給個實際範圍吧,小於10^8吧),請設計一個程序在儘可能短的時間內完成?
最開始不用搞懂,先用起來再說。等你開始看人家的代碼的時候,或者編最簡單的ssh或者android程序的時候,你會發現人家用到了java自帶的數據結構,arraylist,linkedlist,set,map什麼的用的飛起,然後你就好奇這是什麼鬼,然後你也會用了,知道了有什麼區別,然後你就想自己實現一個,然後就可以學數據結構了。
國內的教法是先學C語言,然後學數據結構,然後狂刷題,甚至見過有些刷題狂除了刷題什麼都不會編的。不得不承認國內總有一些意志力無比強大的學生,這樣最後都能學出來。
就像小孩學說話,難道先學主謂賓定狀補?現在國內的計算機教育完全是違背人類習慣的方式,發達國家早就不這麼幹了。不需要刻意去苦學,遇到問題的時候,再學對應的,對於一個有基礎的人來說並不是太難的事情。人的精力也是有限的,專註於眼前可能更加有效率,除非你的確是精力旺盛,時間充沛,不然的話還是通過實踐慢慢學習吧,你會發現,你其實並沒有刻意學數據結構,但是你回過頭看,就會發現它其實已經悄悄融合進你的知識裡面了。
另外多給幾個建議:1,勤翻書。2,多看大神博客之類的。3,少空想瞎背,直接去寫代碼,寫過兩次自然就記得了。本科自動化的~學校沒有教~研究生自學的~看了嚴蔚敏的數據結構教程~還有一本大話數據結構~雖然可能被大神恥笑~但是我覺得這套視頻和這本書對於想快速入門和應付面試的數據結構基本問題還是足夠的~學習數據結構對於深入了解java集合框架有幫助~所以有時間有興趣還是學習下吧
昨天電面,面試官讓寫個斐波那契數列,愣沒寫出來。如果想到數據結構遞歸那部分,就easy了。
查一下你校的畢業要求,算學分的話建議在學校選課,不要報班。
不學數據結構還編神馬程序= =不過很多時候你都是無意識的應用的數據結構= =但是要真的難了起來就不一定會了。自學吧
剛入門可以不學,反正以後一定要學。招式精巧你會覺得有趣,但沒有內功還是白搭。
閑下來的時候看演算法導論,漲漲見識,當成娛樂。
要學,那本JAVA寫的數據結構還好,可以開始學了
推薦閱讀:
※C語言初學者進階學習數據結構與演算法路線?方法?
※為什麼大多數編程語言的內建抽象數據類型沒有圖?
※自學離散數學,用哪一本書比較好?我自己已經有很多本好難選?
※如何設計數據結構和演算法,計算並存儲六度好友關係?
※用鏈表的目的是什麼?省空間還是省時間?