數據結構學(xué)習秘籍

2018-12-25

招聘搞笑事(shì)


如果你關注招聘試題,越是大的公司,問的問題越基礎,有的甚至問你什麼(me)是棧和隊列,反而一些小公司會關心你做過(guò)什麼(me)系統,關注點不同,大公司更注重基礎紮實,發(fā)展潛力,而小公司希望你立刻、馬上爲他幹活,通常是沒(méi)什麼(me)技術含量的活。小公司喜歡細而長(cháng)的竹子,大公司更喜歡碗口粗的竹筍。


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


既然雙方都(dōu)覺得這(zhè)是一個件搞笑事(shì),我們就攤開(kāi)來看,數據結構到底是什麼(me)東西。


撥雲見日,看清數據結構


遇到一個實際問題,需要解決兩(liǎng)個事(shì)情:


(1) 如何將(jiāng)數據及其關系存儲在計算機中;


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


前者是數據結構,後(hòu)者是算法。隻有數據結構沒(méi)有算法,相當于隻把數據及其關系存儲到計算機中而沒(méi)有有效的方法去處理,就像一幢隻有框架的爛尾樓;若隻有算法,沒(méi)有數據結構,就像沙漠裡(lǐ)的海市蜃樓,隻不過(guò)是空中樓閣罷了。


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


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


爲什麼(me)要學(xué)習數據結構?


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


先看學(xué)習數據結構有什麼(me)用處:


(1) 學(xué)習數據有效存儲的方法


很多學(xué)生在學(xué)習數據結構時,問我要不要把單鏈表插入删除背下來?要不合上書就不會寫了。我非常詫異,爲什麼(me)要背?理工科技術知識很少需要記憶的,是用的,用的!學(xué)習知識不是死記硬背,更重要的是學(xué)習處理問題的方法。同一個問題,如何有效地存儲數據,不同的數據結構産生什麼(me)樣的算法複雜性,有沒(méi)有更好(hǎo)的存儲方法提高算法的效率?通過(guò)學(xué)習數據結構,更加準确和深刻地理解不同數據結構之間的共性和聯系,學(xué)會選擇和改進(jìn)數據結構,高效地設計并實現各種(zhǒng)算法,這(zhè)才是數據結構的精髓。


(2) 處理具有複雜關系的數據


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


數據結構爲什麼(me)那麼(me)難?


網絡上太多的同學(xué)吐槽被虐,如滔滔江水連綿不絕,數據結構太難了!真的很難嗎?其實數據結構隻是講了三種(zhǒng):線性結構、樹、圖。到底難在哪裡(lǐ)呢?通過(guò)調查了解大概有四個原因:


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


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


(2) 不知道(dào)什麼(me)用處


盡管很多人學(xué)習數據結構,有的人是應付考試,有的人考研需要,有的人參加算法競賽需要,而很多人不太清楚學(xué)習數據結構有什麼(me)用處,迷迷糊糊看書做題考試。


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


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


(4) 語言基礎不好(hǎo)


我一直強調先看圖解,理清思路,再上機。還(hái)是有很多同學(xué)已經(jīng)理解了思路後(hòu),因爲缺少main函數,輸入輸出格式不對(duì),缺少括号等等各種(zhǒng)語言問題卡殼,而這(zhè)一切統統戴給了“數據結構太難了”這(zhè)個大帽子。


數據結構學(xué)習秘籍


在講學(xué)習秘籍之前,首先了解一下數據結構學(xué)習的三種(zhǒng)境界:


(1) 會數據結構的基本操作


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


(2) 會利用數據結構,解決實際問題


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


(3) 熟練使用和改進(jìn)數據結構,優化算法


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


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

*請認真填寫需求,我們會在24小時内與您取得聯系。