99精品免费久久久久久久久日本|日韩精品首页|日本三级免费电影|国产成人高清亚洲一区app|狠狠操社区

數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)秘籍

2018-12-25

招聘搞笑事


如果你關(guān)注招聘試題,越是大的公司,問的問題越基礎(chǔ),有的甚至問你什么是棧和隊列,反而一些小公司會關(guān)心你做過什么系統(tǒng),關(guān)注點不同,大公司更注重基礎(chǔ)扎實,發(fā)展?jié)摿Γ」鞠M懔⒖獭ⅠR上為他干活,通常是沒什么技術(shù)含量的活。小公司喜歡細(xì)而長的竹子,大公司更喜歡碗口粗的竹筍。


我曾經(jīng)推薦一個學(xué)生到某知名公司,沒多久,學(xué)生給我說了應(yīng)聘的事情:“我介紹我開發(fā)了企業(yè)管理系統(tǒng)、在線商城系統(tǒng)等等,沒想到他問我使用了什么數(shù)據(jù)結(jié)構(gòu)和算法,我懂很多技術(shù),那么多功能我都實現(xiàn)了,他不問,卻問我使用了什么數(shù)據(jù)結(jié)構(gòu)和算法,你說搞笑不?數(shù)據(jù)結(jié)構(gòu)、算法我早就忘了,我會開發(fā)軟件還不行嗎?”人力資源總監(jiān)也反饋過來意見:“很搞笑,這個學(xué)生做了不少系統(tǒng),卻說根本沒用到數(shù)據(jù)結(jié)構(gòu)和算法。”


既然雙方都覺得這是一個件搞笑事,我們就攤開來看,數(shù)據(jù)結(jié)構(gòu)到底是什么東西。


撥云見日,看清數(shù)據(jù)結(jié)構(gòu)


遇到一個實際問題,需要解決兩個事情:


(1) 如何將數(shù)據(jù)及其關(guān)系存儲在計算機中;


(2) 用什么方法策略解決問題。


前者是數(shù)據(jù)結(jié)構(gòu),后者是算法。只有數(shù)據(jù)結(jié)構(gòu)沒有算法,相當(dāng)于只把數(shù)據(jù)及其關(guān)系存儲到計算機中而沒有有效的方法去處理,就像一幢只有框架的爛尾樓;若只有算法,沒有數(shù)據(jù)結(jié)構(gòu),就像沙漠里的海市蜃樓,只不過是空中樓閣罷了。


數(shù)據(jù)是一切能輸入到計算機的信息總和,結(jié)構(gòu)是指數(shù)據(jù)之間的關(guān)系,數(shù)據(jù)結(jié)構(gòu)就是將數(shù)據(jù)及其之間的關(guān)系有效地存儲在計算機中。算法是指對特定問題求解步驟的一種描述,說白了就是解決問題的方法策略。


遇到一個實際問題,充分利用所學(xué)的數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)及其之間的關(guān)系有效地存儲在計算機中,然后選擇合適的算法策略,并用程序高效實現(xiàn)。,這就是N.Wirth教授所說的:數(shù)據(jù)結(jié)構(gòu)+算法=程序。


為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?


計算機專業(yè)本科生都開設(shè)數(shù)據(jù)結(jié)構(gòu)課程,它是計算機學(xué)科知識結(jié)構(gòu)的核心和技術(shù)體系的基石。研究生考試也是必考科目,隨著科學(xué)技術(shù)的飛速發(fā)展,數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)性地位不僅沒有動搖,反而由于近年來算法工程師的高薪火爆,使得數(shù)據(jù)結(jié)構(gòu)的重視程序空前高漲。很多人覺得基本的數(shù)據(jù)結(jié)構(gòu)及操作已經(jīng)在高級語言中封裝,如C++、JAVA,棧、隊列、排序、優(yōu)先隊列等等,都可以直接調(diào)用庫函數(shù),學(xué)會怎么調(diào)用就好了,干嘛要重復(fù)造輪子? 那么到底有沒有必要好好學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?


先看學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用處:


(1) 學(xué)習(xí)數(shù)據(jù)有效存儲的方法


很多學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時,問我要不要把單鏈表插入刪除背下來?要不合上書就不會寫了。我非常詫異,為什么要背?理工科技術(shù)知識很少需要記憶的,是用的,用的!學(xué)習(xí)知識不是死記硬背,更重要的是學(xué)習(xí)處理問題的方法。同一個問題,如何有效地存儲數(shù)據(jù),不同的數(shù)據(jù)結(jié)構(gòu)產(chǎn)生什么樣的算法復(fù)雜性,有沒有更好的存儲方法提高算法的效率?通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),更加準(zhǔn)確和深刻地理解不同數(shù)據(jù)結(jié)構(gòu)之間的共性和聯(lián)系,學(xué)會選擇和改進數(shù)據(jù)結(jié)構(gòu),高效地設(shè)計并實現(xiàn)各種算法,這才是數(shù)據(jù)結(jié)構(gòu)的精髓。


(2) 處理具有復(fù)雜關(guān)系的數(shù)據(jù)


現(xiàn)實中很多具有復(fù)雜關(guān)系的數(shù)據(jù),無法通過簡單的庫函數(shù)調(diào)用實現(xiàn)。如同現(xiàn)在很多芯片高度集成,完全不需要芯片內(nèi)部如何,直接使用就行了。但是,如果在現(xiàn)實中遇到一個復(fù)雜問題,一個芯片只能完成其中一個功能,難道要連接十幾塊芯片來解決這一個問題?這顯然是不合適的,我們需要的是完成該復(fù)雜問題的一個芯片,因此需要運用所學(xué)的數(shù)據(jù)結(jié)構(gòu)知識,高效處理具有復(fù)雜關(guān)系的數(shù)據(jù)。


數(shù)據(jù)結(jié)構(gòu)為什么那么難?


網(wǎng)絡(luò)上太多的同學(xué)吐槽被虐,如滔滔江水連綿不絕,數(shù)據(jù)結(jié)構(gòu)太難了!真的很難嗎?其實數(shù)據(jù)結(jié)構(gòu)只是講了三種:線性結(jié)構(gòu)、樹、圖。到底難在哪里呢?通過調(diào)查了解大概有四個原因:


(1) 無法接受的描述方式


數(shù)據(jù)結(jié)構(gòu)的描述大多是抽象的形式,我們使用自然語言表達(dá)習(xí)慣了,不容易接受數(shù)據(jù)結(jié)構(gòu)的抽象表示。不止一個學(xué)生問我,書上的“ElemType”到底是什么類型?運行時怎么提示錯誤。它的意思就是“元素類型”,只是這樣的描述,你需要什么類型就寫什么類型,例如int。這樣的表達(dá)方式讓不少人崩潰。


(2) 不知道什么用處


盡管很多人學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),有的人是應(yīng)付考試,有的人考研需要,有的人參加算法競賽需要,而很多人不太清楚學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用處,迷迷糊糊看書做題考試。


(3) 體會不到其中的妙處


由于教材、教師等等各種因素影響,很多學(xué)生沒有體會到數(shù)據(jù)結(jié)構(gòu)處理數(shù)據(jù)的妙處,經(jīng)常為學(xué)不會而焦頭爛額,無法體會其中樂趣,有趣是才有意思,興趣是最大的驅(qū)動力。


(4) 語言基礎(chǔ)不好


我一直強調(diào)先看圖解,理清思路,再上機。還是有很多同學(xué)已經(jīng)理解了思路后,因為缺少main函數(shù),輸入輸出格式不對,缺少括號等等各種語言問題卡殼,而這一切統(tǒng)統(tǒng)戴給了“數(shù)據(jù)結(jié)構(gòu)太難了”這個大帽子。


數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)秘籍


在講學(xué)習(xí)秘籍之前,首先了解一下數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的三種境界:


(1) 會數(shù)據(jù)結(jié)構(gòu)的基本操作


這是最基礎(chǔ)的要求,學(xué)會各種數(shù)據(jù)結(jié)構(gòu)的基本操作,取值、查找、插入、刪除等。先看圖解,理解各種數(shù)據(jù)結(jié)構(gòu)的定義,操作方法,然后看代碼,嘗試自己動手上機運行,逐漸掌握基本操作。初學(xué)時,要想理解數(shù)據(jù)結(jié)構(gòu),一定要學(xué)會畫圖,通過畫圖形象表達(dá),更能體會其中的數(shù)據(jù)結(jié)構(gòu)關(guān)系。因此,初學(xué)階段學(xué)習(xí)利器:畫圖,理解,畫圖。


(2) 會利用數(shù)據(jù)結(jié)構(gòu),解決實際問題


在掌握了書上的基本操作之后,就可以嘗試?yán)脭?shù)據(jù)結(jié)構(gòu)解決一些實際問題了,先學(xué)經(jīng)典應(yīng)用問題的解決方法,體會數(shù)據(jù)結(jié)構(gòu)的使用方法,然后再做題,獨立設(shè)計數(shù)據(jù)結(jié)構(gòu)解決問題。要想熟練應(yīng)用就必須做大量的題,從做題中體會其中的方法。最好進行專項練習(xí),比如線性表問題,二叉樹問題,圖問題,該階段學(xué)習(xí)利器:做題,反思,做題。


(3) 熟練使用和改進數(shù)據(jù)結(jié)構(gòu),優(yōu)化算法


這是最高境界了,也是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的精髓所在,單獨學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是無法達(dá)到這種境界的。它需要在學(xué)習(xí)算法的過程中慢慢修煉。在學(xué)習(xí)算法的同時,逐步熟練應(yīng)用、改進,慢慢體會不同數(shù)據(jù)結(jié)構(gòu)和算法策略的算法復(fù)雜性,最終學(xué)會利用數(shù)據(jù)結(jié)構(gòu)改進和優(yōu)化算法。該階段已經(jīng)在數(shù)據(jù)結(jié)構(gòu)之上,通過在ACM測試系統(tǒng)上刷各種算法題,體會利用數(shù)據(jù)結(jié)構(gòu)改進優(yōu)化算法。該階段學(xué)習(xí)利器:刷題,總結(jié),刷題。


您的項目需求咨詢熱線:0760-88610046(國家高新技術(shù)企業(yè))

*請認(rèn)真填寫需求,我們會在24小時內(nèi)與您取得聯(lián)系。