NO IMAGE

招聘搞笑事

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

我曾經推薦一個學生到某知名公司,沒多久,學生給我說了應聘的事情:“我介紹我開發了企業管理系統、線上商城系統等等,沒想到他問我使用了什麼資料結構和演算法,我懂很多技術,那麼多功能我都實現了,他不問,卻問我使用了什麼資料結構和演算法,你說搞笑不?資料結構、演算法我早就忘了,我會開發軟體還不行嗎?”人力資源總監也反饋過來意見:“很搞笑,這個學生做了不少系統,卻說根本沒用到資料結構和演算法。”

既然雙方都覺得這是一個件搞笑事,我們就攤開來看,資料結構到底是什麼東西。

撥雲見日,看清資料結構

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

(1) 如何將資料儲存在計算機中;

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

前者是資料結構,後者是演算法。只有資料結構沒有演算法,相當於只把資料儲存到計算機中而沒有有效的方法去處理,就像一幢只有框架的爛尾樓;若只有演算法,沒有資料結構,就像沙漠裡的海市蜃樓,只不過是空中樓閣罷了。

資料是一切能輸入到計算機的資訊總和,結構是指資料之間的關係,資料結構就是將資料及其之間的關係有效地儲存在計算機中。演算法是指對特定問題求解步驟的一種描述,說白了就是解決問題的方法策略。

遇到一個實際問題,充分利用所學的資料結構,將資料及其之間的關係有效地儲存在計算機中,然後選擇合適的演算法策略,並用程式高效實現。,這就是N.Wirth教授所說的:資料結構 演算法=程式

為什麼要學習資料結構?

計算機專業本科生都開設資料結構課程,它是計算機學科知識結構的核心和技術體系的基石。研究生考試也是必考科目,隨著科學技術的飛速發展,資料結構的基礎性地位不僅沒有動搖,反而由於近年來演算法工程師的高薪火爆,使得資料結構的重視程式空前高漲。很多人覺得基本的資料結構及操作已經在高階語言中封裝,如C 、JAVA,棧、佇列、排序、優先佇列等等,都可以直接呼叫庫函式,學會怎麼呼叫就好了,幹嘛要重複造輪子? 那麼到底有沒有必要好好學習資料結構?

先看學習資料結構有什麼用處:

(1) 學習資料有效儲存的方法

很多學生在學習資料結構時,問我要不要把單連結串列插入刪除背下來?要不合上書就不會寫了。我非常詫異,為什麼要背?理工科技術知識很少需要記憶的,是用的,用的!學習知識不是死記硬背,更重要的是學習處理問題的方法。同一個問題,如何有效地儲存資料,不同的資料結構產生什麼樣的演算法複雜性,有沒有更好的儲存方法提高演算法的效率?通過學習資料結構,更加準確和深刻地理解不同資料結構之間的共性和聯絡,學會選擇和改進資料結構,高效地設計並實現各種演算法,這才是資料結構的精髓。

(2) 處理具有複雜關係的資料

現實中很多具有複雜關係的資料,無法通過簡單的庫函式呼叫實現。如同現在很多晶片高度整合,完全不需要晶片內部如何,直接使用就行了。但是,如果在現實中遇到一個複雜問題,一個晶片只能完成其中一個功能,難道要連線十幾塊晶片來解決這一個問題?這顯然是不合適的,我們需要的是完成該複雜問題的一個晶片,因此需要運用所學的資料結構知識,高效處理具有複雜關係的資料。